<?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>214492</bug_id>
          
          <creation_ts>2020-07-17 12:19:05 -0700</creation_ts>
          <short_desc>Delete code for old flakiness dashboard</short_desc>
          <delta_ts>2020-07-17 12:48:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=211504</see_also>
          <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 name="Aakash Jain">aakash_jain</reporter>
          <assigned_to name="Aakash Jain">aakash_jain</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>ap</cc>
    
    <cc>jbedard</cc>
    
    <cc>webkit-bot-watchers-bugzilla</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1672581</commentid>
    <comment_count>0</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-07-17 12:19:05 -0700</bug_when>
    <thetext>We have been using the new flakiness dashboard, i.e. results database (https://results.webkit.org) for a while now. We have already decommissioned the old flakiness dashboard server. We should also delete the code associated with old flakiness dashboard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672585</commentid>
    <comment_count>1</comment_count>
      <attachid>404581</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-07-17 12:39:26 -0700</bug_when>
    <thetext>Created attachment 404581
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672588</commentid>
    <comment_count>2</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2020-07-17 12:47:07 -0700</bug_when>
    <thetext>Committed r264530: &lt;https://trac.webkit.org/changeset/264530&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672589</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-07-17 12:48:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/65739266&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404581</attachid>
            <date>2020-07-17 12:39:26 -0700</date>
            <delta_ts>2020-07-17 12:43:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214492-20200717153924.patch</filename>
            <type>text/plain</type>
            <size>427198</size>
            <attacher name="Aakash Jain">aakash_jain</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2NDUyNykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEyIEBACisyMDIwLTA3LTE3ICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNv
bT4KKworICAgICAgICBEZWxldGUgY29kZSBmb3Igb2xkIGZsYWtpbmVzcyBkYXNoYm9hcmQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDQ5MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFJlc3Vs
dFNlcnZlcjogUmVtb3ZlZC4KKwogMjAyMC0wNy0xNyAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFy
ZEBhcHBsZS5jb20+CiAKICAgICAgICAgW3dlYmtpdHB5XSBTaW11bGF0b3JzIHNob3VsZCBvcHQg
b3V0IG9mIGVtdWxhdGlvbgpJbmRleDogVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9hcHAueWFtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0UmVzdWx0U2VydmVyL2FwcC55YW1sCShyZXZpc2lvbiAy
NjQ1MjcpCisrKyBUb29scy9UZXN0UmVzdWx0U2VydmVyL2FwcC55YW1sCShub25leGlzdGVudCkK
QEAgLTEsMjMgKzAsMCBAQAotYXBwbGljYXRpb246IHdlYmtpdC10ZXN0LXJlc3VsdHMKLXZlcnNp
b246IDEKLXJ1bnRpbWU6IHB5dGhvbjI3Ci10aHJlYWRzYWZlOiBmYWxzZQotYXBpX3ZlcnNpb246
IDEKLQotYnVpbHRpbnM6Ci0tIGRhdGFzdG9yZV9hZG1pbjogb24KLS0gcmVtb3RlX2FwaTogb24K
LQotaGFuZGxlcnM6Ci0tIHVybDogL3N0eWxlc2hlZXRzCi0gIHN0YXRpY19kaXI6IHN0eWxlc2hl
ZXRzCi0KLS0gdXJsOiAvZGFzaGJvYXJkcwotICBzdGF0aWNfZGlyOiBzdGF0aWMtZGFzaGJvYXJk
cwotCi0tIHVybDogL3Rlc3RmaWxlL2RlbGV0ZQotICBzY3JpcHQ6IG1haW4ucHkKLSAgbG9naW46
IGFkbWluCi0KLS0gdXJsOiAvLioKLSAgc2NyaXB0OiBtYWluLnB5CkluZGV4OiBUb29scy9UZXN0
UmVzdWx0U2VydmVyL2dlbmVyYXRlX2J1aWxkZXJzX2pzb24ucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFJlc3VsdFNlcnZlci9nZW5lcmF0ZV9idWlsZGVyc19qc29uLnB5CShyZXZpc2lvbiAy
NjQ1MjcpCisrKyBUb29scy9UZXN0UmVzdWx0U2VydmVyL2dlbmVyYXRlX2J1aWxkZXJzX2pzb24u
cHkJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMTEgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
Ci0jIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
IwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9u
LgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0j
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IGpzb24KLWltcG9ydCBsb2dnaW5nCi1pbXBvcnQg
b3B0cGFyc2UKLWltcG9ydCBvcwotaW1wb3J0IHVybGxpYjIKLQotIyBGSVhNRTogU2VlIGlmIFRv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYnVpbGRlcnMucHkgc2hvdWxk
IGFsc28gcmVhZAotIyB0aGUgb3V0cHV0IGpzb24gZmlsZSBoZXJlIGFzIGl0cyBkYXRhIHNvdXJj
ZS4KLQotCi1kZWYgbWFzdGVyX2pzb25fdXJsKG1hc3Rlcl91cmwpOgotICAgIHJldHVybiBtYXN0
ZXJfdXJsICsgJy9qc29uL2J1aWxkZXJzJwotCi0KLWRlZiBidWlsZGVyX2pzb25fdXJsKG1hc3Rl
cl91cmwsIGJ1aWxkZXIpOgotICAgIHJldHVybiBtYXN0ZXJfanNvbl91cmwobWFzdGVyX3VybCkg
KyAnLycgKyB1cmxsaWIyLnF1b3RlKGJ1aWxkZXIpCi0KLQotZGVmIGNhY2hlZF9idWlsZF9qc29u
X3VybChtYXN0ZXJfdXJsLCBidWlsZGVyLCBidWlsZF9udW1iZXIpOgotICAgIHJldHVybiBidWls
ZGVyX2pzb25fdXJsKG1hc3Rlcl91cmwsIGJ1aWxkZXIpICsgJy9idWlsZHMvJyArIHN0cihidWls
ZF9udW1iZXIpCi0KLQotZGVmIGZldGNoX2pzb24odXJsKToKLSAgICBsb2dnaW5nLmRlYnVnKCdG
ZXRjaGluZyAlcycgJSB1cmwpCi0gICAgcmV0dXJuIGpzb24ubG9hZCh1cmxsaWIyLnVybG9wZW4o
dXJsKSkKLQotCi1kZWYgaW5zZXJ0X2J1aWxkZXJfYW5kX3Rlc3RfZGF0YShtYXN0ZXJzKToKLSAg
ICBmb3IgbWFzdGVyIGluIG1hc3RlcnM6Ci0gICAgICAgIG1hc3Rlcl91cmwgPSBtYXN0ZXJbJ3Vy
bCddCi0gICAgICAgIHRlc3RzX29iamVjdCA9IHt9Ci0gICAgICAgIG1hc3RlclsndGVzdHMnXSA9
IHRlc3RzX29iamVjdAotCi0gICAgICAgIGZvciBidWlsZGVyIGluIGZldGNoX2pzb24obWFzdGVy
X2pzb25fdXJsKG1hc3Rlcl91cmwpKToKLSAgICAgICAgICAgIGJ1aWxkX2RhdGEgPSBmZXRjaF9q
c29uKGJ1aWxkZXJfanNvbl91cmwobWFzdGVyX3VybCwgYnVpbGRlcikpCi0gICAgICAgICAgICBj
YWNoZWRfYnVpbGRzID0gYnVpbGRfZGF0YVsnY2FjaGVkQnVpbGRzJ10KLSAgICAgICAgICAgIGN1
cnJlbnRfYnVpbGRzID0gYnVpbGRfZGF0YVsnY3VycmVudEJ1aWxkcyddCi0KLSAgICAgICAgICAg
IGxhdGVzdF9jYWNoZWRfYnVpbGQgPSBjYWNoZWRfYnVpbGRzLnBvcCgpCi0gICAgICAgICAgICB3
aGlsZSBsYXRlc3RfY2FjaGVkX2J1aWxkIGluIGN1cnJlbnRfYnVpbGRzIGFuZCBsZW4oY2FjaGVk
X2J1aWxkcyk6Ci0gICAgICAgICAgICAgICAgbGF0ZXN0X2NhY2hlZF9idWlsZCA9IGNhY2hlZF9i
dWlsZHMucG9wKCkKLQotICAgICAgICAgICAgZm9yIHN0ZXAgaW4gZmV0Y2hfanNvbihjYWNoZWRf
YnVpbGRfanNvbl91cmwobWFzdGVyX3VybCwgYnVpbGRlciwgbGF0ZXN0X2NhY2hlZF9idWlsZCkp
WydzdGVwcyddOgotICAgICAgICAgICAgICAgIHN0ZXBfbmFtZSA9IHN0ZXBbJ25hbWUnXQotICAg
ICAgICAgICAgICAgIGlmIHN0ZXBfbmFtZSAhPSAnbGF5b3V0LXRlc3QnOgotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICAgICAgIyBBZGp1c3QgZm9yIGJhY2t3YXJk
cyBjb21wYXRpYmlsaXR5Ci0gICAgICAgICAgICAgICAgc3RlcF9uYW1lID0gJ2xheW91dC10ZXN0
cycKLQotICAgICAgICAgICAgICAgIGlmIHN0ZXBfbmFtZSBub3QgaW4gdGVzdHNfb2JqZWN0Ogot
ICAgICAgICAgICAgICAgICAgICB0ZXN0c19vYmplY3Rbc3RlcF9uYW1lXSA9IHsnYnVpbGRlcnMn
OiBbXX0KLSAgICAgICAgICAgICAgICB0ZXN0c19vYmplY3Rbc3RlcF9uYW1lXVsnYnVpbGRlcnMn
XS5hcHBlbmQoYnVpbGRlcikKLQotICAgIGZvciBzdGVwX25hbWUgaW4gdGVzdHNfb2JqZWN0Ogot
ICAgICAgICB0ZXN0c19vYmplY3Rbc3RlcF9uYW1lXVsnYnVpbGRlcnMnXS5zb3J0KCkKLQotCi1k
ZWYgbWFpbigpOgotICAgIG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQot
ICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLXYnLCAnLS12ZXJib3NlJywgYWN0aW9uPSdz
dG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwgaGVscD0nUHJpbnQgZGVidWcgbG9nZ2luZycpCi0g
ICAgb3B0aW9ucywgYXJncyA9IG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncygpCi0KLSAgICBsb2dn
aW5nLmdldExvZ2dlcigpLnNldExldmVsKGxvZ2dpbmcuREVCVUcgaWYgb3B0aW9ucy52ZXJib3Nl
IGVsc2UgbG9nZ2luZy5JTkZPKQotCi0gICAgbWFzdGVycyA9IFsKLSAgICAgICAgeyduYW1lJzog
J3dlYmtpdC5vcmcnLCAndXJsJzogJ2h0dHBzOi8vYnVpbGQud2Via2l0Lm9yZyd9LAotICAgIF0K
LQotICAgIGluc2VydF9idWlsZGVyX2FuZF90ZXN0X2RhdGEobWFzdGVycykKLQotICAgIGpzb25f
ZmlsZV9wcmVmaXggPSAoJy8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBUb29scy9U
ZXN0UmVzdWx0U2VydmVyL2dlbmVyYXRlX2J1aWxkZXJzX2pzb24ucHkuIEl0IHNob3VsZCBub3Qg
YmUgbWFudWFsbHkgbW9kaWZpZWQuXG4nCi0gICAgICAgICcvLyBJdCB1c2VzIGpzb25wIGluc3Rl
YWQgb2YgcHJvcGVyIGpzb24gYmVjYXVzZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gbG9hZCBpdCBm
cm9tIGEgZmlsZSBVUkwgZm9yIGxvY2FsIHRlc3RpbmcuXG4nCi0gICAgICAgICdMT0FEX0JVSUxE
Qk9UX0RBVEEoJykKLSAgICBqc29uX2ZpbGVfc3VmZml4ID0gJyk7XG4nOwotCi0gICAganNvbl9m
aWxlID0gb3Blbihvcy5wYXRoLmpvaW4oJ3N0YXRpYy1kYXNoYm9hcmRzJywgJ2J1aWxkZXJzLmpz
b25wJyksICd3JykKLSAgICBqc29uX2ZpbGUud3JpdGUoanNvbl9maWxlX3ByZWZpeCArIGpzb24u
ZHVtcHMobWFzdGVycywgc2VwYXJhdG9ycz0oJywgJywgJzogJyksIGluZGVudD00LCBzb3J0X2tl
eXM9VHJ1ZSkgKyBqc29uX2ZpbGVfc3VmZml4KQotCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5f
XyI6Ci0gICAgbWFpbigpCkluZGV4OiBUb29scy9UZXN0UmVzdWx0U2VydmVyL2dlbmVyYXRlX2J1
aWxkZXJzX2pzb25fdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFJlc3VsdFNl
cnZlci9nZW5lcmF0ZV9idWlsZGVyc19qc29uX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNjQ1Mjcp
CisrKyBUb29scy9UZXN0UmVzdWx0U2VydmVyL2dlbmVyYXRlX2J1aWxkZXJzX2pzb25fdW5pdHRl
c3QucHkJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMDkgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCi0jIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0
aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCB1bml0dGVzdAot
Ci1pbXBvcnQgZ2VuZXJhdGVfYnVpbGRlcnNfanNvbgotCi0KLWNsYXNzIEdlbmVyYXRlQnVpbGRl
cnNKc29uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVzdF9tYXN0ZXJfanNv
bl91cmwoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVfYnVpbGRlcnNf
anNvbi5tYXN0ZXJfanNvbl91cmwoJ2h0dHA6Ly9iYXNlJyksICdodHRwOi8vYmFzZS9qc29uL2J1
aWxkZXJzJykKLQotICAgIGRlZiB0ZXN0X2J1aWxkZXJfanNvbl91cmwoc2VsZik6Ci0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoZ2VuZXJhdGVfYnVpbGRlcnNfanNvbi5idWlsZGVyX2pzb25fdXJs
KCdodHRwOi8vYmFzZScsICdkdW1teWJ1aWxkZXInKSwgJ2h0dHA6Ly9iYXNlL2pzb24vYnVpbGRl
cnMvZHVtbXlidWlsZGVyJykKLQotICAgIGRlZiB0ZXN0X2NhY2hlZF9idWlsZF9qc29uX3VybChz
ZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZV9idWlsZGVyc19qc29uLmNh
Y2hlZF9idWlsZF9qc29uX3VybCgnaHR0cDovL2Jhc2UnLCAnZHVtbXlidWlsZGVyJywgMTIzNDUp
LCAnaHR0cDovL2Jhc2UvanNvbi9idWlsZGVycy9kdW1teWJ1aWxkZXIvYnVpbGRzLzEyMzQ1JykK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW5lcmF0ZV9idWlsZGVyc19qc29uLmNhY2hlZF9i
dWlsZF9qc29uX3VybCgnaHR0cDovL2Jhc2UnLCAnZHVtbXlidWlsZGVyJywgJzEyMzQ1JyksICdo
dHRwOi8vYmFzZS9qc29uL2J1aWxkZXJzL2R1bW15YnVpbGRlci9idWlsZHMvMTIzNDUnKQotCi0g
ICAgZGVmIHRlc3RfZ2VuZXJhdGVfanNvbl9kYXRhKHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAg
ICAgICAgICBvbGRfZmV0Y2hfanNvbiA9IGdlbmVyYXRlX2J1aWxkZXJzX2pzb24uZmV0Y2hfanNv
bgotCi0gICAgICAgICAgICBmZXRjaGVkX3VybHMgPSBbXQotCi0gICAgICAgICAgICBkZWYgZHVt
bXlfZmV0Y2hfanNvbih1cmwpOgotICAgICAgICAgICAgICAgIGZldGNoZWRfdXJscy5hcHBlbmQo
dXJsKQotCi0gICAgICAgICAgICAgICAgaWYgdXJsID09ICdodHRwczovL2J1aWxkLndlYmtpdC5v
cmcvanNvbi9idWlsZGVycyc6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB7J0FwcGxlIE1h
YyBTbm93TGVvcGFyZCBUZXN0cyc6IE5vbmUsICdFRkwgTGludXggQnVpbGRlcic6IE5vbmUsICdH
VEsgTGludXggVGVzdHMnOiBOb25lfQotCi0gICAgICAgICAgICAgICAgaWYgdXJsID09ICdodHRw
czovL2J1aWxkLndlYmtpdC5vcmcvanNvbi9idWlsZGVycy9BcHBsZSUyME1hYyUyMFNub3dMZW9w
YXJkJTIwVGVzdHMnOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4geydjYWNoZWRCdWlsZHMn
OiBbMSwgMl0sICdjdXJyZW50QnVpbGRzJzogW119Ci0gICAgICAgICAgICAgICAgaWYgdXJsID09
ICdodHRwczovL2J1aWxkLndlYmtpdC5vcmcvanNvbi9idWlsZGVycy9FRkwlMjBMaW51eCUyMEJ1
aWxkZXInOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4geydjYWNoZWRCdWlsZHMnOiBbMSwg
MiwgM10sICdjdXJyZW50QnVpbGRzJzogWzNdfQotICAgICAgICAgICAgICAgIGlmIHVybCA9PSAn
aHR0cHM6Ly9idWlsZC53ZWJraXQub3JnL2pzb24vYnVpbGRlcnMvR1RLJTIwTGludXglMjBUZXN0
cyc6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB7J2NhY2hlZEJ1aWxkcyc6IFsyXSwgJ2N1
cnJlbnRCdWlsZHMnOiBbXX0KLQotICAgICAgICAgICAgICAgIGlmIHVybCA9PSAnaHR0cHM6Ly9i
dWlsZC53ZWJraXQub3JnL2pzb24vYnVpbGRlcnMvQXBwbGUlMjBNYWMlMjBTbm93TGVvcGFyZCUy
MFRlc3RzL2J1aWxkcy8yJzoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsnc3RlcHMnOiBb
eyduYW1lJzogJ2xheW91dC10ZXN0J30sIHsnbmFtZSc6ICdhcmNoaXZlX3Rlc3RfcmVzdWx0cyd9
LCB7J25hbWUnOiAnY29tcGlsZSd9XX0KLSAgICAgICAgICAgICAgICBpZiB1cmwgPT0gJ2h0dHBz
Oi8vYnVpbGQud2Via2l0Lm9yZy9qc29uL2J1aWxkZXJzL0VGTCUyMExpbnV4JTIwQnVpbGRlci9i
dWlsZHMvMic6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB7J3N0ZXBzJzogW3snbmFtZSc6
ICdjb21waWxlJ31dfQotICAgICAgICAgICAgICAgIGlmIHVybCA9PSAnaHR0cHM6Ly9idWlsZC53
ZWJraXQub3JnL2pzb24vYnVpbGRlcnMvR1RLJTIwTGludXglMjBUZXN0cy9idWlsZHMvMic6Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiB7J3N0ZXBzJzogW3snbmFtZSc6ICdsYXlvdXQtdGVz
dCd9LCB7J25hbWUnOiAnYXJjaGl2ZV90ZXN0X3Jlc3VsdHMnfSwgeyduYW1lJzogJ2NvbXBpbGUn
fV19Ci0KLSAgICAgICAgICAgICAgICBsb2dnaW5nLmVycm9yKCdDYW5ub3QgZmV0Y2ggZmFrZSB1
cmw6ICVzJyAlIHVybCkKLQotICAgICAgICAgICAgZ2VuZXJhdGVfYnVpbGRlcnNfanNvbi5mZXRj
aF9qc29uID0gZHVtbXlfZmV0Y2hfanNvbgotCi0gICAgICAgICAgICBtYXN0ZXJzID0gWwotICAg
ICAgICAgICAgICAgIHsnbmFtZSc6ICd3ZWJraXQub3JnJywgJ3VybCc6ICdodHRwczovL2J1aWxk
LndlYmtpdC5vcmcnfSwKLSAgICAgICAgICAgIF0KLQotICAgICAgICAgICAgZ2VuZXJhdGVfYnVp
bGRlcnNfanNvbi5pbnNlcnRfYnVpbGRlcl9hbmRfdGVzdF9kYXRhKG1hc3RlcnMpCi0KLSAgICAg
ICAgICAgIGV4cGVjdGVkX2ZldGNoZWRfdXJscyA9IFsKLSAgICAgICAgICAgICAgICAnaHR0cHM6
Ly9idWlsZC53ZWJraXQub3JnL2pzb24vYnVpbGRlcnMnLAotICAgICAgICAgICAgICAgICdodHRw
czovL2J1aWxkLndlYmtpdC5vcmcvanNvbi9idWlsZGVycy9BcHBsZSUyME1hYyUyMFNub3dMZW9w
YXJkJTIwVGVzdHMnLAotICAgICAgICAgICAgICAgICdodHRwczovL2J1aWxkLndlYmtpdC5vcmcv
anNvbi9idWlsZGVycy9BcHBsZSUyME1hYyUyMFNub3dMZW9wYXJkJTIwVGVzdHMvYnVpbGRzLzIn
LAotICAgICAgICAgICAgICAgICdodHRwczovL2J1aWxkLndlYmtpdC5vcmcvanNvbi9idWlsZGVy
cy9HVEslMjBMaW51eCUyMFRlc3RzJywKLSAgICAgICAgICAgICAgICAnaHR0cHM6Ly9idWlsZC53
ZWJraXQub3JnL2pzb24vYnVpbGRlcnMvR1RLJTIwTGludXglMjBUZXN0cy9idWlsZHMvMicsCi0g
ICAgICAgICAgICAgICAgJ2h0dHBzOi8vYnVpbGQud2Via2l0Lm9yZy9qc29uL2J1aWxkZXJzL0VG
TCUyMExpbnV4JTIwQnVpbGRlcicsCi0gICAgICAgICAgICAgICAgJ2h0dHBzOi8vYnVpbGQud2Vi
a2l0Lm9yZy9qc29uL2J1aWxkZXJzL0VGTCUyMExpbnV4JTIwQnVpbGRlci9idWlsZHMvMiddCi0g
ICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZldGNoZWRfdXJscywgZXhwZWN0ZWRfZmV0Y2hl
ZF91cmxzKQotCi0gICAgICAgICAgICBleHBlY3RlZF9tYXN0ZXJzID0gWwotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgJ3VybCc6ICdodHRwczovL2J1aWxkLndlYmtpdC5v
cmcnLAotICAgICAgICAgICAgICAgICAgICAndGVzdHMnOiB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAnbGF5b3V0LXRlc3RzJzogeydidWlsZGVycyc6IFsnQXBwbGUgTWFjIFNub3dMZW9wYXJk
IFRlc3RzJywgJ0dUSyBMaW51eCBUZXN0cyddfSwKLSAgICAgICAgICAgICAgICAgICAgfSwKLSAg
ICAgICAgICAgICAgICAgICAgJ25hbWUnOiAnd2Via2l0Lm9yZycKLSAgICAgICAgICAgICAgICB9
LAotICAgICAgICAgICAgXQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXN0ZXJzLCBl
eHBlY3RlZF9tYXN0ZXJzKQotCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBnZW5lcmF0
ZV9idWlsZGVyc19qc29uLmZldGNoX2pzb24gPSBvbGRfZmV0Y2hfanNvbgotCi1pZiBfX25hbWVf
XyA9PSAnX19tYWluX18nOgotICAgIHVuaXR0ZXN0Lm1haW4oKQpJbmRleDogVG9vbHMvVGVzdFJl
c3VsdFNlcnZlci9oYW5kbGVycy9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
UmVzdWx0U2VydmVyL2hhbmRsZXJzL19faW5pdF9fLnB5CShyZXZpc2lvbiAyNjQ1MjcpCisrKyBU
b29scy9UZXN0UmVzdWx0U2VydmVyL2hhbmRsZXJzL19faW5pdF9fLnB5CShub25leGlzdGVudCkK
QEAgLTEgKzAsMCBAQAotIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVj
dG9yeSBmb3IgbW9kdWxlIGZpbGVzCkluZGV4OiBUb29scy9UZXN0UmVzdWx0U2VydmVyL2hhbmRs
ZXJzL21lbnUucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9oYW5kbGVy
cy9tZW51LnB5CShyZXZpc2lvbiAyNjQ1MjcpCisrKyBUb29scy9UZXN0UmVzdWx0U2VydmVyL2hh
bmRsZXJzL21lbnUucHkJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0jIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMg
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotZnJvbSBnb29nbGUuYXBwZW5naW5lLmFwaSBpbXBvcnQgdXNlcnMKLWZyb20gZ29v
Z2xlLmFwcGVuZ2luZS5leHQgaW1wb3J0IHdlYmFwcAotZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4
dC53ZWJhcHAgaW1wb3J0IHRlbXBsYXRlCi0KLWRhc2hib2FyZHMgPSBbCi0gICAgWyJSZXN1bHRz
IiwgIi9kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmQuaHRtbCJdLAotICAgIFsiVGltZWxp
bmUiLCAiL2Rhc2hib2FyZHMvdGltZWxpbmVfZXhwbG9yZXIuaHRtbCJdLAotICAgIFsiVHJlZW1h
cCIsICIvZGFzaGJvYXJkcy90cmVlbWFwLmh0bWwiXSwKLSAgICBbIlN0YXRzIiwgIi9kYXNoYm9h
cmRzL2FnZ3JlZ2F0ZV9yZXN1bHRzLmh0bWwiXSwKLV0KLQotbWVudSA9IFsKLSAgICBbIkxpc3Qg
b2YgdGVzdCBmaWxlcyIsICIvdGVzdGZpbGUiXSwKLSAgICBbIkxpc3Qgb2YgcmVzdWx0cy5qc29u
IGZpbGVzIiwgIi90ZXN0ZmlsZT9uYW1lPXJlc3VsdHMuanNvbiJdLAotICAgIFsiVXBsb2FkIHRl
c3QgZmlsZSIsICIvdGVzdGZpbGUvdXBsb2FkZm9ybSJdLAotXQotCi0KLWNsYXNzIE1lbnUod2Vi
YXBwLlJlcXVlc3RIYW5kbGVyKToKLSAgICBkZWYgZ2V0KHNlbGYpOgotICAgICAgICB1c2VyID0g
dXNlcnMuZ2V0X2N1cnJlbnRfdXNlcigpCi0gICAgICAgIGlmIHVzZXI6Ci0gICAgICAgICAgICB1
c2VyX2VtYWlsID0gdXNlci5lbWFpbCgpCi0gICAgICAgICAgICBsb2dpbl90ZXh0ID0gIlNpZ24g
b3V0IgotICAgICAgICAgICAgbG9naW5fdXJsID0gdXNlcnMuY3JlYXRlX2xvZ291dF91cmwoc2Vs
Zi5yZXF1ZXN0LnVyaSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHVzZXJfZW1haWwgPSAi
IgotICAgICAgICAgICAgbG9naW5fdGV4dCA9ICJTaWduIGluIgotICAgICAgICAgICAgbG9naW5f
dXJsID0gdXNlcnMuY3JlYXRlX2xvZ2luX3VybChzZWxmLnJlcXVlc3QudXJpKQotCi0gICAgICAg
IHRlbXBsYXRlX3ZhbHVlcyA9IHsKLSAgICAgICAgICAgICJ1c2VyX2VtYWlsIjogdXNlcl9lbWFp
bCwKLSAgICAgICAgICAgICJsb2dpbl90ZXh0IjogbG9naW5fdGV4dCwKLSAgICAgICAgICAgICJs
b2dpbl91cmwiOiBsb2dpbl91cmwsCi0gICAgICAgICAgICAibWVudSI6IG1lbnUsCi0gICAgICAg
ICAgICAiZGFzaGJvYXJkcyI6IGRhc2hib2FyZHMsCi0gICAgICAgIH0KLQotICAgICAgICBzZWxm
LnJlc3BvbnNlLm91dC53cml0ZSgKLSAgICAgICAgICAgIHRlbXBsYXRlLnJlbmRlcigidGVtcGxh
dGVzL21lbnUuaHRtbCIsIHRlbXBsYXRlX3ZhbHVlcykpCkluZGV4OiBUb29scy9UZXN0UmVzdWx0
U2VydmVyL2hhbmRsZXJzL3Rlc3RmaWxlaGFuZGxlci5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0UmVzdWx0U2VydmVyL2hhbmRsZXJzL3Rlc3RmaWxlaGFuZGxlci5weQkocmV2aXNpb24gMjY0
NTI3KQorKysgVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9oYW5kbGVycy90ZXN0ZmlsZWhhbmRsZXIu
cHkJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNzkgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
IyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWlt
cG9ydCB0aW1lCi1pbXBvcnQgbG9nZ2luZwotaW1wb3J0IHJlCi1pbXBvcnQgdXJsbGliCi0KLWZy
b20gZ29vZ2xlLmFwcGVuZ2luZS5hcGkgaW1wb3J0IHVzZXJzCi1mcm9tIGdvb2dsZS5hcHBlbmdp
bmUuZXh0IGltcG9ydCB3ZWJhcHAKLWZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQud2ViYXBwIGlt
cG9ydCB0ZW1wbGF0ZQotZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgZGIKLQotZnJv
bSBtb2RlbC5qc29ucmVzdWx0cyBpbXBvcnQgSnNvblJlc3VsdHMKLWZyb20gbW9kZWwudGVzdGZp
bGUgaW1wb3J0IFRlc3RGaWxlCi0KLVBBUkFNX01BU1RFUiA9ICJtYXN0ZXIiCi1QQVJBTV9CVUlM
REVSID0gImJ1aWxkZXIiCi1QQVJBTV9ESVIgPSAiZGlyIgotUEFSQU1fRklMRSA9ICJmaWxlIgot
UEFSQU1fTkFNRSA9ICJuYW1lIgotUEFSQU1fS0VZID0gImtleSIKLVBBUkFNX1RFU1RfVFlQRSA9
ICJ0ZXN0dHlwZSIKLVBBUkFNX0lOQ1JFTUVOVEFMID0gImluY3JlbWVudGFsIgotUEFSQU1fVEVT
VF9MSVNUX0pTT04gPSAidGVzdGxpc3Rqc29uIgotUEFSQU1fQ0FMTEJBQ0sgPSAiY2FsbGJhY2si
Ci0KLQotZGVmIF9yZXBsYWNlX2pzb25wX2NhbGxiYWNrKGpzb24sIGNhbGxiYWNrX25hbWUpOgot
ICAgIGlmIGNhbGxiYWNrX25hbWUgYW5kIHJlLnNlYXJjaChyIl5bQS1aYS16MC05X10rJCIsIGNh
bGxiYWNrX25hbWUpOgotICAgICAgICBpZiByZS5zZWFyY2gociJeW0EtWmEtejAtOV9dK1soXSIs
IGpzb24pOgotICAgICAgICAgICAgcmV0dXJuIHJlLnN1YihyIl5bQS1aYS16MC05X10rWyhdIiwg
Y2FsbGJhY2tfbmFtZSArICIoIiwganNvbikKLSAgICAgICAgcmV0dXJuIGNhbGxiYWNrX25hbWUg
KyAiKCIgKyBqc29uICsgIikiCi0KLSAgICByZXR1cm4ganNvbgotCi0KLWNsYXNzIERlbGV0ZUZp
bGUod2ViYXBwLlJlcXVlc3RIYW5kbGVyKToKLSAgICAiIiJEZWxldGUgdGVzdCBmaWxlIGZvciBh
IGdpdmVuIGJ1aWxkZXIgYW5kIG5hbWUgZnJvbSBkYXRhc3RvcmUuIiIiCi0KLSAgICBkZWYgZ2V0
KHNlbGYpOgotICAgICAgICBrZXkgPSBzZWxmLnJlcXVlc3QuZ2V0KFBBUkFNX0tFWSkKLSAgICAg
ICAgbWFzdGVyID0gc2VsZi5yZXF1ZXN0LmdldChQQVJBTV9NQVNURVIpCi0gICAgICAgIGJ1aWxk
ZXIgPSBzZWxmLnJlcXVlc3QuZ2V0KFBBUkFNX0JVSUxERVIpCi0gICAgICAgIHRlc3RfdHlwZSA9
IHNlbGYucmVxdWVzdC5nZXQoUEFSQU1fVEVTVF9UWVBFKQotICAgICAgICBuYW1lID0gc2VsZi5y
ZXF1ZXN0LmdldChQQVJBTV9OQU1FKQotCi0gICAgICAgIGxvZ2dpbmcuZGVidWcoCi0gICAgICAg
ICAgICAiRGVsZXRpbmcgRmlsZSwgbWFzdGVyOiAlcywgYnVpbGRlcjogJXMsIHRlc3RfdHlwZTog
JXMsIG5hbWU6ICVzLCBrZXk6ICVzLiIsCi0gICAgICAgICAgICBtYXN0ZXIsIGJ1aWxkZXIsIHRl
c3RfdHlwZSwgbmFtZSwga2V5KQotCi0gICAgICAgIFRlc3RGaWxlLmRlbGV0ZV9maWxlKGtleSwg
bWFzdGVyLCBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUsIDEwMCkKLQotICAgICAgICAjIERpc3Bs
YXkgZmlsZSBsaXN0IGFmdGVyIGRlbGV0aW5nIHRoZSBmaWxlLgotICAgICAgICBzZWxmLnJlZGly
ZWN0KCIvdGVzdGZpbGU/bWFzdGVyPSVzJmJ1aWxkZXI9JXMmdGVzdHR5cGU9JXMmbmFtZT0lcyIK
LSAgICAgICAgICAgICUgKG1hc3RlciwgYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lKSkKLQotCi1j
bGFzcyBHZXRGaWxlKHdlYmFwcC5SZXF1ZXN0SGFuZGxlcik6Ci0gICAgIiIiR2V0IGZpbGUgY29u
dGVudCBvciBsaXN0IG9mIGZpbGVzIGZvciBnaXZlbiBidWlsZGVyIGFuZCBuYW1lLiIiIgotCi0g
ICAgZGVmIF9nZXRfZmlsZV9saXN0KHNlbGYsIG1hc3RlciwgYnVpbGRlciwgdGVzdF90eXBlLCBu
YW1lLCBjYWxsYmFja19uYW1lPU5vbmUpOgotICAgICAgICAiIiJHZXQgYW5kIGRpc3BsYXkgYSBs
aXN0IG9mIGZpbGVzIHRoYXQgbWF0Y2hlcyBidWlsZGVyIGFuZCBmaWxlIG5hbWUuCi0KLSAgICAg
ICAgQXJnczoKLSAgICAgICAgICAgIGJ1aWxkZXI6IGJ1aWxkZXIgbmFtZQotICAgICAgICAgICAg
dGVzdF90eXBlOiB0eXBlIG9mIHRoZSB0ZXN0Ci0gICAgICAgICAgICBuYW1lOiBmaWxlIG5hbWUK
LSAgICAgICAgIiIiCi0KLSAgICAgICAgZmlsZXMgPSBUZXN0RmlsZS5nZXRfZmlsZXMoCi0gICAg
ICAgICAgICBtYXN0ZXIsIGJ1aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSwgbG9hZF9kYXRhPUZhbHNl
LCBsaW1pdD0xMDApCi0gICAgICAgIGlmIG5vdCBmaWxlczoKLSAgICAgICAgICAgIGxvZ2dpbmcu
aW5mbygiRmlsZSBub3QgZm91bmQsIG1hc3RlcjogJXMsIGJ1aWxkZXI6ICVzLCB0ZXN0X3R5cGU6
ICVzLCBuYW1lOiAlcy4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3RlciwgYnVpbGRl
ciwgdGVzdF90eXBlLCBuYW1lKQotICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUo
IkZpbGUgbm90IGZvdW5kIikKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIHRlbXBsYXRl
X3ZhbHVlcyA9IHsKLSAgICAgICAgICAgICJhZG1pbiI6IHVzZXJzLmlzX2N1cnJlbnRfdXNlcl9h
ZG1pbigpLAotICAgICAgICAgICAgIm1hc3RlciI6IG1hc3RlciwKLSAgICAgICAgICAgICJidWls
ZGVyIjogYnVpbGRlciwKLSAgICAgICAgICAgICJ0ZXN0X3R5cGUiOiB0ZXN0X3R5cGUsCi0gICAg
ICAgICAgICAibmFtZSI6IG5hbWUsCi0gICAgICAgICAgICAiZmlsZXMiOiBmaWxlcywKLSAgICAg
ICAgfQotICAgICAgICBpZiBjYWxsYmFja19uYW1lOgotICAgICAgICAgICAganNvbiA9IHRlbXBs
YXRlLnJlbmRlcigidGVtcGxhdGVzL3Nob3dmaWxlbGlzdC5qc29ucCIsIHRlbXBsYXRlX3ZhbHVl
cykKLSAgICAgICAgICAgIHNlbGYuX3NlcnZlX2pzb24oX3JlcGxhY2VfanNvbnBfY2FsbGJhY2so
anNvbiwgY2FsbGJhY2tfbmFtZSksIGZpbGVzWzBdLmRhdGUpCi0gICAgICAgICAgICByZXR1cm4K
LSAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUodGVtcGxhdGUucmVuZGVyKCJ0ZW1wbGF0
ZXMvc2hvd2ZpbGVsaXN0Lmh0bWwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGVtcGxhdGVfdmFsdWVzKSkKLQotICAgIGRlZiBfZ2V0X2ZpbGVfY29u
dGVudChzZWxmLCBtYXN0ZXIsIGJ1aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSk6Ci0gICAgICAgICIi
IlJldHVybiBjb250ZW50IG9mIHRoZSBmaWxlIHRoYXQgbWF0Y2hlcyBidWlsZGVyIGFuZCBmaWxl
IG5hbWUuCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICAgIGJ1aWxkZXI6IGJ1aWxkZXIgbmFt
ZQotICAgICAgICAgICAgdGVzdF90eXBlOiB0eXBlIG9mIHRoZSB0ZXN0Ci0gICAgICAgICAgICBu
YW1lOiBmaWxlIG5hbWUKLSAgICAgICAgIiIiCi0KLSAgICAgICAgZmlsZXMgPSBUZXN0RmlsZS5n
ZXRfZmlsZXMoCi0gICAgICAgICAgICBtYXN0ZXIsIGJ1aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSwg
bG9hZF9kYXRhPVRydWUsIGxpbWl0PTEpCi0gICAgICAgIGlmIG5vdCBmaWxlczoKLSAgICAgICAg
ICAgIGxvZ2dpbmcuaW5mbygiRmlsZSBub3QgZm91bmQsIG1hc3RlciAlcywgYnVpbGRlcjogJXMs
IHRlc3RfdHlwZTogJXMsIG5hbWU6ICVzLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbWFz
dGVyLCBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUpCi0gICAgICAgICAgICByZXR1cm4gTm9uZSwg
Tm9uZQotCi0gICAgICAgIHJldHVybiBmaWxlc1swXS5kYXRhLCBmaWxlc1swXS5kYXRlCi0KLSAg
ICBkZWYgX2dldF9maWxlX2NvbnRlbnRfZnJvbV9rZXkoc2VsZiwga2V5KToKLSAgICAgICAgZmls
ZSA9IGRiLmdldChrZXkpCi0KLSAgICAgICAgaWYgbm90IGZpbGU6Ci0gICAgICAgICAgICBsb2dn
aW5nLmluZm8oIkZpbGUgbm90IGZvdW5kLCBrZXkgJXMuIiwga2V5KQotICAgICAgICAgICAgcmV0
dXJuIE5vbmUKLQotICAgICAgICBmaWxlLmxvYWRfZGF0YSgpCi0gICAgICAgIHJldHVybiBmaWxl
LmRhdGEsIGZpbGUuZGF0ZQotCi0gICAgZGVmIF9nZXRfdGVzdF9saXN0X2pzb24oc2VsZiwgbWFz
dGVyLCBidWlsZGVyLCB0ZXN0X3R5cGUpOgotICAgICAgICAiIiJSZXR1cm4ganNvbiBmaWxlIHdp
dGggdGVzdCBuYW1lIGxpc3Qgb25seSwgZG8gbm90IGluY2x1ZGUgdGVzdAotICAgICAgICAgICBy
ZXN1bHRzIGFuZCBvdGhlciBub24tdGVzdC1kYXRhIC4KLQotICAgICAgICBBcmdzOgotICAgICAg
ICAgICAgYnVpbGRlcjogYnVpbGRlciBuYW1lLgotICAgICAgICAgICAgdGVzdF90eXBlOiB0eXBl
IG9mIHRlc3QgcmVzdWx0cy4KLSAgICAgICAgIiIiCi0KLSAgICAgICAganNvbiwgZGF0ZSA9IHNl
bGYuX2dldF9maWxlX2NvbnRlbnQobWFzdGVyLCBidWlsZGVyLCB0ZXN0X3R5cGUsICJyZXN1bHRz
Lmpzb24iKQotICAgICAgICBpZiBub3QganNvbjoKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0K
LSAgICAgICAgcmV0dXJuIEpzb25SZXN1bHRzLmdldF90ZXN0X2xpc3QoYnVpbGRlciwganNvbiks
IGRhdGUKLQotICAgIGRlZiBfc2VydmVfanNvbihzZWxmLCBqc29uLCBtb2RpZmllZF9kYXRlKToK
LSAgICAgICAgaWYganNvbjoKLSAgICAgICAgICAgIGlmICJJZi1Nb2RpZmllZC1TaW5jZSIgaW4g
c2VsZi5yZXF1ZXN0LmhlYWRlcnM6Ci0gICAgICAgICAgICAgICAgb2xkX2RhdGUgPSBzZWxmLnJl
cXVlc3QuaGVhZGVyc1siSWYtTW9kaWZpZWQtU2luY2UiXQotICAgICAgICAgICAgICAgIGlmIHRp
bWUuc3RycHRpbWUob2xkX2RhdGUsICclYSwgJWQgJWIgJVkgJUg6JU06JVMgJVonKSA9PSBtb2Rp
ZmllZF9kYXRlLnV0Y3RpbWV0dXBsZSgpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnJlc3Bv
bnNlLnNldF9zdGF0dXMoMzA0KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4KLQotICAgICAg
ICAgICAgIyBUaGUgYXBwZW5naW5lIGRhdGV0aW1lIG9iamVjdHMgYXJlIG5haXZlLCBzbyB0aGV5
IGxhY2sgYSB0aW1lem9uZS4KLSAgICAgICAgICAgICMgSW4gcHJhY3RpY2UsIGFwcGVuZ2luZSBz
ZWVtcyB0byB1c2UgR01ULgotICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5oZWFkZXJzWyJMYXN0
LU1vZGlmaWVkIl0gPSBtb2RpZmllZF9kYXRlLnN0cmZ0aW1lKCclYSwgJWQgJWIgJVkgJUg6JU06
JVMnKSArICcgR01UJwotICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5oZWFkZXJzWyJDb250ZW50
LVR5cGUiXSA9ICJhcHBsaWNhdGlvbi9qc29uIgotICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5o
ZWFkZXJzWyJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4iXSA9ICIqIgotICAgICAgICAgICAg
c2VsZi5yZXNwb25zZS5vdXQud3JpdGUoanNvbikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IHNlbGYuZXJyb3IoNDA0KQotCi0gICAgZGVmIGdldChzZWxmKToKLSAgICAgICAga2V5ID0gc2Vs
Zi5yZXF1ZXN0LmdldChQQVJBTV9LRVkpCi0gICAgICAgIG1hc3RlciA9IHNlbGYucmVxdWVzdC5n
ZXQoUEFSQU1fTUFTVEVSKQotICAgICAgICBidWlsZGVyID0gc2VsZi5yZXF1ZXN0LmdldChQQVJB
TV9CVUlMREVSKQotICAgICAgICB0ZXN0X3R5cGUgPSBzZWxmLnJlcXVlc3QuZ2V0KFBBUkFNX1RF
U1RfVFlQRSkKLSAgICAgICAgbmFtZSA9IHNlbGYucmVxdWVzdC5nZXQoUEFSQU1fTkFNRSkKLSAg
ICAgICAgZGlyID0gc2VsZi5yZXF1ZXN0LmdldChQQVJBTV9ESVIpCi0gICAgICAgIHRlc3RfbGlz
dF9qc29uID0gc2VsZi5yZXF1ZXN0LmdldChQQVJBTV9URVNUX0xJU1RfSlNPTikKLSAgICAgICAg
Y2FsbGJhY2tfbmFtZSA9IHNlbGYucmVxdWVzdC5nZXQoUEFSQU1fQ0FMTEJBQ0spCi0KLSAgICAg
ICAgbG9nZ2luZy5kZWJ1ZygKLSAgICAgICAgICAgICJHZXR0aW5nIGZpbGVzLCBtYXN0ZXIgJXMs
IGJ1aWxkZXI6ICVzLCB0ZXN0X3R5cGU6ICVzLCBuYW1lOiAlcy4iLAotICAgICAgICAgICAgbWFz
dGVyLCBidWlsZGVyLCB0ZXN0X3R5cGUsIG5hbWUpCi0KLSAgICAgICAgaWYgbm90IGtleToKLSAg
ICAgICAgICAgICMgSWYgcGFyYW1ldGVyICJkaXIiIGlzIHNwZWNpZmllZCBvciB0aGVyZSBpcyBu
byBidWlsZGVyIG9yIGZpbGVuYW1lCi0gICAgICAgICAgICAjIHNwZWNpZmllZCBpbiB0aGUgcmVx
dWVzdCwgcmV0dXJuIGxpc3Qgb2YgZmlsZXMsIG90aGVyd2lzZSwgcmV0dXJuCi0gICAgICAgICAg
ICAjIGZpbGUgY29udGVudC4KLSAgICAgICAgICAgIGlmIGRpciBvciBub3QgYnVpbGRlciBvciBu
b3QgbmFtZToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2ZpbGVfbGlzdChtYXN0
ZXIsIGJ1aWxkZXIsIHRlc3RfdHlwZSwgbmFtZSwgY2FsbGJhY2tfbmFtZSkKLQotICAgICAgICBp
ZiBrZXk6Ci0gICAgICAgICAgICBqc29uLCBkYXRlID0gc2VsZi5fZ2V0X2ZpbGVfY29udGVudF9m
cm9tX2tleShrZXkpCi0gICAgICAgIGVsaWYgbmFtZSA9PSAicmVzdWx0cy5qc29uIiBhbmQgdGVz
dF9saXN0X2pzb246Ci0gICAgICAgICAgICBqc29uLCBkYXRlID0gc2VsZi5fZ2V0X3Rlc3RfbGlz
dF9qc29uKG1hc3RlciwgYnVpbGRlciwgdGVzdF90eXBlKQotICAgICAgICBlbHNlOgotICAgICAg
ICAgICAganNvbiwgZGF0ZSA9IHNlbGYuX2dldF9maWxlX2NvbnRlbnQobWFzdGVyLCBidWlsZGVy
LCB0ZXN0X3R5cGUsIG5hbWUpCi0KLSAgICAgICAgaWYganNvbjoKLSAgICAgICAgICAgIGpzb24g
PSBfcmVwbGFjZV9qc29ucF9jYWxsYmFjayhqc29uLCBjYWxsYmFja19uYW1lKQotCi0gICAgICAg
IHNlbGYuX3NlcnZlX2pzb24oanNvbiwgZGF0ZSkKLQotCi1jbGFzcyBVcGxvYWQod2ViYXBwLlJl
cXVlc3RIYW5kbGVyKToKLSAgICAiIiJVcGxvYWQgdGVzdCByZXN1bHRzIGZpbGUgdG8gZGF0YXN0
b3JlLiIiIgotCi0gICAgZGVmIHBvc3Qoc2VsZik6Ci0gICAgICAgIGZpbGVfcGFyYW1zID0gc2Vs
Zi5yZXF1ZXN0LlBPU1QuZ2V0YWxsKFBBUkFNX0ZJTEUpCi0gICAgICAgIGlmIG5vdCBmaWxlX3Bh
cmFtczoKLSAgICAgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCJGQUlMOiBtaXNzaW5n
IHVwbG9hZCBmaWxlIGZpZWxkLiIpCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBidWls
ZGVyID0gc2VsZi5yZXF1ZXN0LmdldChQQVJBTV9CVUlMREVSKQotICAgICAgICBpZiBub3QgYnVp
bGRlcjoKLSAgICAgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCJGQUlMOiBtaXNzaW5n
IGJ1aWxkZXIgcGFyYW1ldGVyLiIpCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBtYXN0
ZXIgPSBzZWxmLnJlcXVlc3QuZ2V0KFBBUkFNX01BU1RFUikKLSAgICAgICAgdGVzdF90eXBlID0g
c2VsZi5yZXF1ZXN0LmdldChQQVJBTV9URVNUX1RZUEUpCi0gICAgICAgIGluY3JlbWVudGFsID0g
c2VsZi5yZXF1ZXN0LmdldChQQVJBTV9JTkNSRU1FTlRBTCkKLQotICAgICAgICBsb2dnaW5nLmRl
YnVnKAotICAgICAgICAgICAgIlByb2Nlc3NpbmcgdXBsb2FkIHJlcXVlc3QsIG1hc3RlcjogJXMs
IGJ1aWxkZXI6ICVzLCB0ZXN0X3R5cGU6ICVzLiIsCi0gICAgICAgICAgICBtYXN0ZXIsIGJ1aWxk
ZXIsIHRlc3RfdHlwZSkKLQotICAgICAgICAjIFRoZXJlIGFyZSB0d28gcG9zc2libGUgdHlwZXMg
b2YgZWFjaCBmaWxlX3BhcmFtcyBpbiB0aGUgcmVxdWVzdDoKLSAgICAgICAgIyBvbmUgZmlsZSBp
dGVtIG9yIGEgbGlzdCBvZiBmaWxlIGl0ZW1zLgotICAgICAgICAjIE5vcm1hbGl6ZSBmaWxlX3Bh
cmFtcyB0byBhIGZpbGUgaXRlbSBsaXN0LgotICAgICAgICBmaWxlcyA9IFtdCi0gICAgICAgIGxv
Z2dpbmcuZGVidWcoInRlc3Q6ICVzLCB0eXBlOiVzIiwgZmlsZV9wYXJhbXMsIHR5cGUoZmlsZV9w
YXJhbXMpKQotICAgICAgICBmb3IgaXRlbSBpbiBmaWxlX3BhcmFtczoKLSAgICAgICAgICAgIGlm
IG5vdCBpc2luc3RhbmNlKGl0ZW0sIGxpc3QpIGFuZCBub3QgaXNpbnN0YW5jZShpdGVtLCB0dXBs
ZSk6Ci0gICAgICAgICAgICAgICAgaXRlbSA9IFtpdGVtXQotICAgICAgICAgICAgZmlsZXMuZXh0
ZW5kKGl0ZW0pCi0KLSAgICAgICAgZXJyb3JzID0gW10KLSAgICAgICAgZm9yIGZpbGUgaW4gZmls
ZXM6Ci0gICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGUuZmlsZW5hbWUubG93ZXIoKQotICAgICAg
ICAgICAgaWYgKChpbmNyZW1lbnRhbCBhbmQgZmlsZW5hbWUgPT0gInJlc3VsdHMuanNvbiIpIG9y
Ci0gICAgICAgICAgICAgICAgKGZpbGVuYW1lID09ICJpbmNyZW1lbnRhbF9yZXN1bHRzLmpzb24i
KSk6Ci0gICAgICAgICAgICAgICAgIyBNZXJnZSBpbmNyZW1lbnRhbCBqc29uIHJlc3VsdHMuCi0g
ICAgICAgICAgICAgICAgdXBkYXRlX3N1Y2NlZWRlZCA9IEpzb25SZXN1bHRzLnVwZGF0ZShtYXN0
ZXIsIGJ1aWxkZXIsIHRlc3RfdHlwZSwgZmlsZS52YWx1ZSkKLSAgICAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAgICAgdXBkYXRlX3N1Y2NlZWRlZCA9IFRlc3RGaWxlLmFkZF9maWxlKAotICAg
ICAgICAgICAgICAgICAgICBtYXN0ZXIsIGJ1aWxkZXIsIHRlc3RfdHlwZSwgZmlsZS5maWxlbmFt
ZSwgZmlsZS52YWx1ZSkKLQotICAgICAgICAgICAgaWYgbm90IHVwZGF0ZV9zdWNjZWVkZWQ6Ci0g
ICAgICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgIlVwbG9h
ZCBmYWlsZWQsIG1hc3RlcjogJXMsIGJ1aWxkZXI6ICVzLCB0ZXN0X3R5cGU6ICVzLCBuYW1lOiAl
cy4iICUKLSAgICAgICAgICAgICAgICAgICAgKG1hc3RlciwgYnVpbGRlciwgdGVzdF90eXBlLCBm
aWxlLmZpbGVuYW1lKSkKLQotICAgICAgICBpZiBlcnJvcnM6Ci0gICAgICAgICAgICBtZXNzYWdl
cyA9ICJGQUlMOiAiICsgIjsgIi5qb2luKGVycm9ycykKLSAgICAgICAgICAgIGxvZ2dpbmcud2Fy
bmluZyhtZXNzYWdlcykKLSAgICAgICAgICAgIHNlbGYucmVzcG9uc2Uuc2V0X3N0YXR1cyg1MDAs
IG1lc3NhZ2VzKQotICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5vdXQud3JpdGUoIkZBSUwiKQot
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5yZXNwb25zZS5zZXRfc3RhdHVzKDIwMCkK
LSAgICAgICAgICAgIHNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCJPSyIpCi0KLQotY2xhc3MgVXBs
b2FkRm9ybSh3ZWJhcHAuUmVxdWVzdEhhbmRsZXIpOgotICAgICIiIlNob3cgYSBmb3JtIHNvIHVz
ZXIgY2FuIHVwbG9hZCBhIGZpbGUuIiIiCi0KLSAgICBkZWYgZ2V0KHNlbGYpOgotICAgICAgICB0
ZW1wbGF0ZV92YWx1ZXMgPSB7Ci0gICAgICAgICAgICAidXBsb2FkX3VybCI6ICIvdGVzdGZpbGUv
dXBsb2FkIiwKLSAgICAgICAgfQotICAgICAgICBzZWxmLnJlc3BvbnNlLm91dC53cml0ZSh0ZW1w
bGF0ZS5yZW5kZXIoInRlbXBsYXRlcy91cGxvYWRmb3JtLmh0bWwiLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVfdmFsdWVzKSkKSW5kZXg6
IFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvaW5kZXgueWFtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0UmVzdWx0U2VydmVyL2luZGV4LnlhbWwJKHJldmlzaW9uIDI2NDUyNykKKysrIFRvb2xzL1Rl
c3RSZXN1bHRTZXJ2ZXIvaW5kZXgueWFtbAkobm9uZXhpc3RlbnQpCkBAIC0xLDY1ICswLDAgQEAK
LWluZGV4ZXM6Ci0KLSMgQVVUT0dFTkVSQVRFRAotCi0jIFRoaXMgaW5kZXgueWFtbCBpcyBhdXRv
bWF0aWNhbGx5IHVwZGF0ZWQgd2hlbmV2ZXIgdGhlIGRldl9hcHBzZXJ2ZXIKLSMgZGV0ZWN0cyB0
aGF0IGEgbmV3IHR5cGUgb2YgcXVlcnkgaXMgcnVuLiAgSWYgeW91IHdhbnQgdG8gbWFuYWdlIHRo
ZQotIyBpbmRleC55YW1sIGZpbGUgbWFudWFsbHksIHJlbW92ZSB0aGUgYWJvdmUgbWFya2VyIGxp
bmUgKHRoZSBsaW5lCi0jIHNheWluZyAiIyBBVVRPR0VORVJBVEVEIikuICBJZiB5b3Ugd2FudCB0
byBtYW5hZ2Ugc29tZSBpbmRleGVzCi0jIG1hbnVhbGx5LCBtb3ZlIHRoZW0gYWJvdmUgdGhlIG1h
cmtlciBsaW5lLiAgVGhlIGluZGV4LnlhbWwgZmlsZSBpcwotIyBhdXRvbWF0aWNhbGx5IHVwbG9h
ZGVkIHRvIHRoZSBhZG1pbiBjb25zb2xlIHdoZW4geW91IG5leHQgZGVwbG95Ci0jIHlvdXIgYXBw
bGljYXRpb24gdXNpbmcgYXBwY2ZnLnB5LgotCi0tIGtpbmQ6IERhc2hib2FyZEZpbGUKLSAgcHJv
cGVydGllczoKLSAgLSBuYW1lOiBuYW1lCi0gIC0gbmFtZTogZGF0ZQotICAgIGRpcmVjdGlvbjog
ZGVzYwotCi0tIGtpbmQ6IFRlc3RGaWxlCi0gIHByb3BlcnRpZXM6Ci0gIC0gbmFtZTogYnVpbGRl
cgotICAtIG5hbWU6IGRhdGUKLSAgICBkaXJlY3Rpb246IGRlc2MKLQotLSBraW5kOiBUZXN0Rmls
ZQotICBwcm9wZXJ0aWVzOgotICAtIG5hbWU6IGJ1aWxkZXIKLSAgLSBuYW1lOiBtYXN0ZXIKLSAg
LSBuYW1lOiBuYW1lCi0gIC0gbmFtZTogdGVzdF90eXBlCi0gIC0gbmFtZTogZGF0ZQotICAgIGRp
cmVjdGlvbjogZGVzYwotCi0tIGtpbmQ6IFRlc3RGaWxlCi0gIHByb3BlcnRpZXM6Ci0gIC0gbmFt
ZTogYnVpbGRlcgotICAtIG5hbWU6IG5hbWUKLSAgLSBuYW1lOiBkYXRlCi0gICAgZGlyZWN0aW9u
OiBkZXNjCi0KLS0ga2luZDogVGVzdEZpbGUKLSAgcHJvcGVydGllczoKLSAgLSBuYW1lOiBidWls
ZGVyCi0gIC0gbmFtZTogbmFtZQotICAtIG5hbWU6IHRlc3RfdHlwZQotICAtIG5hbWU6IGRhdGUK
LSAgICBkaXJlY3Rpb246IGRlc2MKLQotLSBraW5kOiBUZXN0RmlsZQotICBwcm9wZXJ0aWVzOgot
ICAtIG5hbWU6IG1hc3RlcgotICAtIG5hbWU6IGRhdGUKLSAgICBkaXJlY3Rpb246IGRlc2MKLQot
LSBraW5kOiBUZXN0RmlsZQotICBwcm9wZXJ0aWVzOgotICAtIG5hbWU6IG5hbWUKLSAgLSBuYW1l
OiBkYXRlCi0gICAgZGlyZWN0aW9uOiBkZXNjCi0KLS0ga2luZDogVGVzdEZpbGUKLSAgcHJvcGVy
dGllczoKLSAgLSBuYW1lOiB0ZXN0X3R5cGUKLSAgLSBuYW1lOiBkYXRlCi0gICAgZGlyZWN0aW9u
OiBkZXNjCkluZGV4OiBUb29scy9UZXN0UmVzdWx0U2VydmVyL21haW4ucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tYWluLnB5CShyZXZpc2lvbiAyNjQ1MjcpCisrKyBU
b29scy9UZXN0UmVzdWx0U2VydmVyL21haW4ucHkJKG5vbmV4aXN0ZW50KQpAQCAtMSw1NCArMCww
IEBACi0jIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0
aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotIyBSZXF1ZXN0IGEgbW9kZXJuIERqYW5nbwotZnJvbSBn
b29nbGUuYXBwZW5naW5lLmRpc3QgaW1wb3J0IHVzZV9saWJyYXJ5Ci11c2VfbGlicmFyeSgnZGph
bmdvJywgJzEuMycpCi0KLWZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQgaW1wb3J0IHdlYmFwcAot
ZnJvbSBnb29nbGUuYXBwZW5naW5lLmV4dC53ZWJhcHAudXRpbCBpbXBvcnQgcnVuX3dzZ2lfYXBw
Ci0KLWZyb20gaGFuZGxlcnMgaW1wb3J0IG1lbnUKLWZyb20gaGFuZGxlcnMgaW1wb3J0IHRlc3Rm
aWxlaGFuZGxlcgotCi1yb3V0ZXMgPSBbCi0gICAgKCcvdGVzdGZpbGUvZGVsZXRlJywgdGVzdGZp
bGVoYW5kbGVyLkRlbGV0ZUZpbGUpLAotICAgICgnL3Rlc3RmaWxlL3VwbG9hZCcsIHRlc3RmaWxl
aGFuZGxlci5VcGxvYWQpLAotICAgICgnL3Rlc3RmaWxlL3VwbG9hZGZvcm0nLCB0ZXN0ZmlsZWhh
bmRsZXIuVXBsb2FkRm9ybSksCi0gICAgKCcvdGVzdGZpbGUvPycsIHRlc3RmaWxlaGFuZGxlci5H
ZXRGaWxlKSwKLSAgICAoJy8qfC9tZW51JywgbWVudS5NZW51KSwKLV0KLQotYXBwbGljYXRpb24g
PSB3ZWJhcHAuV1NHSUFwcGxpY2F0aW9uKHJvdXRlcywgZGVidWc9VHJ1ZSkKLQotCi1kZWYgbWFp
bigpOgotICAgIHJ1bl93c2dpX2FwcChhcHBsaWNhdGlvbikKLQotaWYgX19uYW1lX18gPT0gIl9f
bWFpbl9fIjoKLSAgICBtYWluKCkKSW5kZXg6IFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwv
X19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9f
X2luaXRfXy5weQkocmV2aXNpb24gMjY0NTI3KQorKysgVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9t
b2RlbC9fX2luaXRfXy5weQkobm9uZXhpc3RlbnQpCkBAIC0xICswLDAgQEAKLSMgUmVxdWlyZWQg
Zm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcwpJbmRl
eDogVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9kYXRhc3RvcmVmaWxlLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvZGF0YXN0b3JlZmlsZS5weQkocmV2
aXNpb24gMjY0NTI3KQorKysgVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9kYXRhc3RvcmVm
aWxlLnB5CShub25leGlzdGVudCkKQEAgLTEsMTUwICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0j
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
Ci1mcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQotaW1wb3J0IGxvZ2dpbmcKLQotZnJvbSBn
b29nbGUuYXBwZW5naW5lLmV4dCBpbXBvcnQgZGIKLQotTUFYX0RBVEFfRU5UUllfUEVSX0ZJTEUg
PSAxMAotTUFYX0VOVFJZX0xFTiA9IDEwMDAgKiAxMDAwCi0KLQotY2xhc3MgRGF0YUVudHJ5KGRi
Lk1vZGVsKToKLSAgICAiIiJEYXRhc3RvcmUgZW50cnkgdGhhdCBzdG9yZXMgb25lIHNlZ21hbnQg
b2YgZmlsZSBkYXRhCi0gICAgICAgKDwxMDAwKjEwMDAgYnl0ZXMpLgotICAgICIiIgotCi0gICAg
ZGF0YSA9IGRiLkJsb2JQcm9wZXJ0eSgpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZ2V0
KGNscywga2V5KToKLSAgICAgICAgcmV0dXJuIGRiLmdldChrZXkpCi0KLSAgICBkZWYgZ2V0X2Rh
dGEoc2VsZiwga2V5KToKLSAgICAgICAgcmV0dXJuIGRiLmdldChrZXkpCi0KLQotY2xhc3MgRGF0
YVN0b3JlRmlsZShkYi5Nb2RlbCk6Ci0gICAgIiIiVGhpcyBjbGFzcyBzdG9yZXMgZmlsZSBpbiBk
YXRhc3RvcmUuCi0gICAgICAgSWYgYSBmaWxlIGlzIG92ZXJzaXplICg+MTAwMCoxMDAwIGJ5dGVz
KSwgdGhlIGZpbGUgaXMgc3BsaXQgaW50bwotICAgICAgIG11bHRpcGxlIHNlZ21lbnRzIGFuZCBz
dG9yZWQgaW4gbXVsdGlwbGUgZGF0YXN0b3JlIGVudHJpZXMuCi0gICAgIiIiCi0KLSAgICBuYW1l
ID0gZGIuU3RyaW5nUHJvcGVydHkoKQotICAgIGRhdGFfa2V5cyA9IGRiLkxpc3RQcm9wZXJ0eShk
Yi5LZXkpCi0gICAgIyBrZXlzIHRvIHRoZSBkYXRhIHN0b3JlIGVudHJpZXMgdGhhdCBjYW4gYmUg
cmV1c2VkIGZvciBuZXcgZGF0YS4KLSAgICAjIElmIGl0IGlzIGVtdHB5LCBjcmVhdGUgbmV3IERh
dGFFbnRyeS4KLSAgICBuZXdfZGF0YV9rZXlzID0gZGIuTGlzdFByb3BlcnR5KGRiLktleSkKLSAg
ICBkYXRlID0gZGIuRGF0ZVRpbWVQcm9wZXJ0eShhdXRvX25vd19hZGQ9VHJ1ZSkKLQotICAgIGRh
dGEgPSBOb25lCi0KLSAgICBkZWYgZGVsZXRlX2RhdGEoc2VsZiwga2V5cz1Ob25lKToKLSAgICAg
ICAgaWYgbm90IGtleXM6Ci0gICAgICAgICAgICBrZXlzID0gc2VsZi5kYXRhX2tleXMKLQotICAg
ICAgICBmb3Iga2V5IGluIGtleXM6Ci0gICAgICAgICAgICBkYXRhX2VudHJ5ID0gRGF0YUVudHJ5
LmdldChrZXkpCi0gICAgICAgICAgICBpZiBkYXRhX2VudHJ5OgotICAgICAgICAgICAgICAgIGRh
dGFfZW50cnkuZGVsZXRlKCkKLQotICAgIGRlZiBzYXZlX2RhdGEoc2VsZiwgZGF0YSk6Ci0gICAg
ICAgIGlmIG5vdCBkYXRhOgotICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCJObyBkYXRhIHRv
IHNhdmUuIikKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgIGlmIGxlbihkYXRh
KSA+IChNQVhfREFUQV9FTlRSWV9QRVJfRklMRSAqIE1BWF9FTlRSWV9MRU4pOgotICAgICAgICAg
ICAgbG9nZ2luZy5lcnJvcigiRmlsZSB0b28gYmlnLCBjYW4ndCBzYXZlIHRvIGRhdGFzdG9yZTog
JWRLIiwKLSAgICAgICAgICAgICAgICBsZW4oZGF0YSkgLyAxMDI0KQotICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCi0KLSAgICAgICAgc3RhcnQgPSAwCi0gICAgICAgICMgVXNlIHRoZSBuZXdfZGF0
YV9rZXlzIHRvIHN0b3JlIG5ldyBkYXRhLiBJZiBhbGwgbmV3IGRhdGEgYXJlIHNhdmVkCi0gICAg
ICAgICMgc3VjY2Vzc2Z1bGx5LCBzd2FwIG5ld19kYXRhX2tleXMgYW5kIGRhdGFfa2V5cyBzbyB3
ZSBjYW4gcmV1c2UgdGhlCi0gICAgICAgICMgZGF0YV9rZXlzIGVudHJpZXMgaW4gbmV4dCBydW4u
IElmIHVuYWJsZSB0byBzYXZlIG5ldyBkYXRhIGZvciBhbnkKLSAgICAgICAgIyByZWFzb24sIG9u
bHkgdGhlIGRhdGEgcG9pbnRlZCBieSBuZXdfZGF0YV9rZXlzIG1heSBiZSBjb3JydXB0ZWQsCi0g
ICAgICAgICMgdGhlIGV4aXN0aW5nIGRhdGFfa2V5cyBkYXRhIHJlbWFpbnMgdW50b3VjaGVkLiBU
aGUgY29ycnVwdGVkIGRhdGEKLSAgICAgICAgIyBpbiBuZXdfZGF0YV9rZXlzIHdpbGwgYmUgb3Zl
cndyaXR0ZW4gaW4gbmV4dCB1cGRhdGUuCi0gICAgICAgIGtleXMgPSBzZWxmLm5ld19kYXRhX2tl
eXMKLSAgICAgICAgc2VsZi5uZXdfZGF0YV9rZXlzID0gW10KLQotICAgICAgICB3aGlsZSBzdGFy
dCA8IGxlbihkYXRhKToKLSAgICAgICAgICAgIGlmIGtleXM6Ci0gICAgICAgICAgICAgICAga2V5
ID0ga2V5c1swXQotICAgICAgICAgICAgICAgIGRhdGFfZW50cnkgPSBEYXRhRW50cnkuZ2V0KGtl
eSkKLSAgICAgICAgICAgICAgICBpZiBub3QgZGF0YV9lbnRyeToKLSAgICAgICAgICAgICAgICAg
ICAgbG9nZ2luZy53YXJuaW5nKCJGb3VuZCBrZXksIGJ1dCBubyBkYXRhIGVudHJ5OiAlcyIsIGtl
eSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YV9lbnRyeSA9IERhdGFFbnRyeSgpCi0gICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGRhdGFfZW50cnkgPSBEYXRhRW50cnkoKQotCi0g
ICAgICAgICAgICBkYXRhX2VudHJ5LmRhdGEgPSBkYi5CbG9iKGRhdGFbc3RhcnQ6IHN0YXJ0ICsg
TUFYX0VOVFJZX0xFTl0pCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZGF0YV9l
bnRyeS5wdXQoKQotICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnI6Ci0gICAgICAg
ICAgICAgICAgbG9nZ2luZy5lcnJvcigiRmFpbGVkIHRvIHNhdmUgZGF0YSBzdG9yZSBlbnRyeTog
JXMiLCBlcnIpCi0gICAgICAgICAgICAgICAgaWYga2V5czoKLSAgICAgICAgICAgICAgICAgICAg
c2VsZi5kZWxldGVfZGF0YShrZXlzKQotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0g
ICAgICAgICAgICBsb2dnaW5nLmluZm8oIkRhdGEgc2F2ZWQ6ICVzLiIsIGRhdGFfZW50cnkua2V5
KCkpCi0gICAgICAgICAgICBzZWxmLm5ld19kYXRhX2tleXMuYXBwZW5kKGRhdGFfZW50cnkua2V5
KCkpCi0gICAgICAgICAgICBpZiBrZXlzOgotICAgICAgICAgICAgICAgIGtleXMucG9wKDApCi0K
LSAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnQgKyBNQVhfRU5UUllfTEVOCi0KLSAgICAgICAgaWYg
a2V5czoKLSAgICAgICAgICAgIHNlbGYuZGVsZXRlX2RhdGEoa2V5cykKLQotICAgICAgICB0ZW1w
X2tleXMgPSBzZWxmLmRhdGFfa2V5cwotICAgICAgICBzZWxmLmRhdGFfa2V5cyA9IHNlbGYubmV3
X2RhdGFfa2V5cwotICAgICAgICBzZWxmLm5ld19kYXRhX2tleXMgPSB0ZW1wX2tleXMKLSAgICAg
ICAgc2VsZi5kYXRhID0gZGF0YQotCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYgbG9h
ZF9kYXRhKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5kYXRhX2tleXM6Ci0gICAgICAgICAg
ICBsb2dnaW5nLndhcm5pbmcoIk5vIGRhdGEgdG8gbG9hZC4iKQotICAgICAgICAgICAgcmV0dXJu
IE5vbmUKLQotICAgICAgICBkYXRhID0gW10KLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLmRhdGFf
a2V5czoKLSAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygiTG9hZGluZyBkYXRhIGZvciBrZXk6ICVz
LiIsIGtleSkKLSAgICAgICAgICAgIGRhdGFfZW50cnkgPSBEYXRhRW50cnkuZ2V0KGtleSkKLSAg
ICAgICAgICAgIGlmIG5vdCBkYXRhX2VudHJ5OgotICAgICAgICAgICAgICAgIGxvZ2dpbmcuZXJy
b3IoIk5vIGRhdGEgZm91bmQgZm9yIGtleTogJXMuIiwga2V5KQotICAgICAgICAgICAgICAgIHJl
dHVybiBOb25lCi0KLSAgICAgICAgICAgIGRhdGEuYXBwZW5kKGRhdGFfZW50cnkuZGF0YSkKLQot
ICAgICAgICBzZWxmLmRhdGEgPSAiIi5qb2luKGRhdGEpCi0KLSAgICAgICAgcmV0dXJuIHNlbGYu
ZGF0YQoKUHJvcGVydHkgY2hhbmdlcyBvbjogVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9k
YXRhc3RvcmVmaWxlLnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTEg
KzAsMCAjIwotKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBUb29scy9U
ZXN0UmVzdWx0U2VydmVyL21vZGVsL2pzb25yZXN1bHRzLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvanNvbnJlc3VsdHMucHkJKHJldmlzaW9uIDI2NDUyNykK
KysrIFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvanNvbnJlc3VsdHMucHkJKG5vbmV4aXN0
ZW50KQpAQCAtMSwzNjIgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMg
bWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
IyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWZyb20gZGF0ZXRpbWUg
aW1wb3J0IGRhdGV0aW1lCi1mcm9tIGRqYW5nby51dGlscyBpbXBvcnQgc2ltcGxlanNvbgotaW1w
b3J0IGxvZ2dpbmcKLWltcG9ydCBzeXMKLWltcG9ydCB0cmFjZWJhY2sKLQotZnJvbSBtb2RlbC50
ZXN0ZmlsZSBpbXBvcnQgVGVzdEZpbGUKLQotSlNPTl9SRVNVTFRTX0ZJTEUgPSAicmVzdWx0cy5q
c29uIgotSlNPTl9SRVNVTFRTX0ZJTEVfU01BTEwgPSAicmVzdWx0cy1zbWFsbC5qc29uIgotSlNP
Tl9SRVNVTFRTX1BSRUZJWCA9ICJBRERfUkVTVUxUUygiCi1KU09OX1JFU1VMVFNfU1VGRklYID0g
Iik7IgotSlNPTl9SRVNVTFRTX1ZFUlNJT05fS0VZID0gInZlcnNpb24iCi1KU09OX1JFU1VMVFNf
QlVJTERfTlVNQkVSUyA9ICJidWlsZE51bWJlcnMiCi1KU09OX1JFU1VMVFNfVEVTVFMgPSAidGVz
dHMiCi1KU09OX1JFU1VMVFNfUkVTVUxUUyA9ICJyZXN1bHRzIgotSlNPTl9SRVNVTFRTX1RJTUVT
ID0gInRpbWVzIgotSlNPTl9SRVNVTFRTX1BBU1MgPSAiUCIKLUpTT05fUkVTVUxUU19TS0lQID0g
IlgiCi1KU09OX1JFU1VMVFNfTk9fREFUQSA9ICJOIgotSlNPTl9SRVNVTFRTX01JTl9USU1FID0g
MwotSlNPTl9SRVNVTFRTX0hJRVJBUkNISUNBTF9WRVJTSU9OID0gNAotSlNPTl9SRVNVTFRTX01B
WF9CVUlMRFMgPSA1MDAKLUpTT05fUkVTVUxUU19NQVhfQlVJTERTX1NNQUxMID0gMTAwCi0KLQot
ZGVmIF9hZGRfcGF0aF90b190cmllKHBhdGgsIHZhbHVlLCB0cmllKToKLSAgICBpZiBub3QgIi8i
IGluIHBhdGg6Ci0gICAgICAgIHRyaWVbcGF0aF0gPSB2YWx1ZQotICAgICAgICByZXR1cm4KLQot
ICAgIGRpcmVjdG9yeSwgc2xhc2gsIHJlc3QgPSBwYXRoLnBhcnRpdGlvbigiLyIpCi0gICAgaWYg
bm90IGRpcmVjdG9yeSBpbiB0cmllOgotICAgICAgICB0cmllW2RpcmVjdG9yeV0gPSB7fQotICAg
IF9hZGRfcGF0aF90b190cmllKHJlc3QsIHZhbHVlLCB0cmllW2RpcmVjdG9yeV0pCi0KLQotZGVm
IF90cmllX2pzb25fdGVzdHModGVzdHMpOgotICAgICIiIkJyZWFrcyBhIHRlc3QgbmFtZSBpbnRv
IGNodW5rcyBieSBkaXJlY3RvcnkgYW5kIHB1dHMgdGhlIHRlc3QgdGltZSBhcyBhIHZhbHVlIGlu
IHRoZSBsb3dlc3QgcGFydCwgZS5nLgotICAgIGZvby9iYXIvYmF6Lmh0bWw6IFZBTFVFMQotICAg
IGZvby9iYXIvYmF6MS5odG1sOiBWQUxVRTIKLQotICAgIGJlY29tZXMKLSAgICBmb286IHsKLSAg
ICAgICAgYmFyOiB7Ci0gICAgICAgICAgICBiYXouaHRtbDogVkFMVUUxLAotICAgICAgICAgICAg
YmF6MS5odG1sOiBWQUxVRTIKLSAgICAgICAgfQotICAgIH0KLSAgICAiIiIKLSAgICB0cmllID0g
e30KLSAgICBmb3IgdGVzdCwgdmFsdWUgaW4gdGVzdHMuaXRlcml0ZW1zKCk6Ci0gICAgICAgIF9h
ZGRfcGF0aF90b190cmllKHRlc3QsIHZhbHVlLCB0cmllKQotICAgIHJldHVybiB0cmllCi0KLQot
ZGVmIF9pc19kaXJlY3Rvcnkoc3VidHJlZSk6Ci0gICAgIyBGSVhNRTogU29tZSBkYXRhIGdvdCBj
b3JydXB0ZWQgYW5kIGhhcyByZXN1bHRzL3RpbWVzIGF0IHRoZSBkaXJlY3RvcnkgbGV2ZWwuCi0g
ICAgIyBPbmNlIHRoZSBkYXRhIGlzIGZpeGVkLCB0aGlzIHNob3VsZCBhc3NlcnQgdGhhdCB0aGUg
ZGlyZWN0b3J5IGxldmVsIGRvZXMgbm90IGhhdmUKLSAgICAjIHJlc3VsdHMgb3IgdGltZXMgYW5k
IGp1c3QgcmV0dXJuICJKU09OX1JFU1VMVFNfUkVTVUxUUyBub3QgaW4gc3VidHJlZSIuCi0gICAg
aWYgSlNPTl9SRVNVTFRTX1JFU1VMVFMgbm90IGluIHN1YnRyZWU6Ci0gICAgICAgIHJldHVybiBU
cnVlCi0KLSAgICBmb3Iga2V5IGluIHN1YnRyZWU6Ci0gICAgICAgIGlmIGtleSBub3QgaW4gKEpT
T05fUkVTVUxUU19SRVNVTFRTLCBKU09OX1JFU1VMVFNfVElNRVMpOgotICAgICAgICAgICAgZGVs
IHN1YnRyZWVbSlNPTl9SRVNVTFRTX1JFU1VMVFNdCi0gICAgICAgICAgICBkZWwgc3VidHJlZVtK
U09OX1JFU1VMVFNfVElNRVNdCi0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgcmV0dXJu
IEZhbHNlCi0KLQotY2xhc3MgSnNvblJlc3VsdHMob2JqZWN0KToKLSAgICBAY2xhc3NtZXRob2QK
LSAgICBkZWYgX3N0cmlwX3ByZWZpeF9zdWZmaXgoY2xzLCBkYXRhKToKLSAgICAgICAgIyBGSVhN
RTogU3RvcCBzdHJpcHBpbmcganNvbnAgY2FsbGJhY2sgb25jZSB3ZSB1cGxvYWQgcHVyZSBqc29u
IGV2ZXJ5d2hlcmUuCi0gICAgICAgIGlmIGRhdGEuc3RhcnRzd2l0aChKU09OX1JFU1VMVFNfUFJF
RklYKSBhbmQgZGF0YS5lbmRzd2l0aChKU09OX1JFU1VMVFNfU1VGRklYKToKLSAgICAgICAgICAg
IHJldHVybiBkYXRhW2xlbihKU09OX1JFU1VMVFNfUFJFRklYKTpsZW4oZGF0YSkgLSBsZW4oSlNP
Tl9SRVNVTFRTX1NVRkZJWCldCi0gICAgICAgIHJldHVybiBkYXRhCi0KLSAgICBAY2xhc3NtZXRo
b2QKLSAgICBkZWYgX2dlbmVyYXRlX2ZpbGVfZGF0YShjbHMsIGpzb24sIHNvcnRfa2V5cz1GYWxz
ZSk6Ci0gICAgICAgIHJldHVybiBzaW1wbGVqc29uLmR1bXBzKGpzb24sIHNlcGFyYXRvcnM9KCcs
JywgJzonKSwgc29ydF9rZXlzPXNvcnRfa2V5cykKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRl
ZiBfbG9hZF9qc29uKGNscywgZmlsZV9kYXRhKToKLSAgICAgICAganNvbl9yZXN1bHRzX3N0ciA9
IGNscy5fc3RyaXBfcHJlZml4X3N1ZmZpeChmaWxlX2RhdGEpCi0gICAgICAgIGlmIG5vdCBqc29u
X3Jlc3VsdHNfc3RyOgotICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCJObyBqc29uIHJlc3Vs
dHMgZGF0YS4iKQotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICB0cnk6Ci0gICAg
ICAgICAgICByZXR1cm4gc2ltcGxlanNvbi5sb2Fkcyhqc29uX3Jlc3VsdHNfc3RyKQotICAgICAg
ICBleGNlcHQ6Ci0gICAgICAgICAgICBsb2dnaW5nLmRlYnVnKGpzb25fcmVzdWx0c19zdHIpCi0g
ICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJGYWlsZWQgdG8gbG9hZCBqc29uIHJlc3VsdHM6ICVz
IiwgdHJhY2ViYWNrLnByaW50X2V4Y2VwdGlvbigqc3lzLmV4Y19pbmZvKCkpKQotICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfbWVyZ2VfanNvbihj
bHMsIGFnZ3JlZ2F0ZWRfanNvbiwgaW5jcmVtZW50YWxfanNvbiwgbnVtX3J1bnMpOgotICAgICAg
ICBjbHMuX21lcmdlX25vbl90ZXN0X2RhdGEoYWdncmVnYXRlZF9qc29uLCBpbmNyZW1lbnRhbF9q
c29uLCBudW1fcnVucykKLSAgICAgICAgaW5jcmVtZW50YWxfdGVzdHMgPSBpbmNyZW1lbnRhbF9q
c29uW0pTT05fUkVTVUxUU19URVNUU10KLSAgICAgICAgaWYgaW5jcmVtZW50YWxfdGVzdHM6Ci0g
ICAgICAgICAgICBhZ2dyZWdhdGVkX3Rlc3RzID0gYWdncmVnYXRlZF9qc29uW0pTT05fUkVTVUxU
U19URVNUU10KLSAgICAgICAgICAgIGNscy5fbWVyZ2VfdGVzdHMoYWdncmVnYXRlZF90ZXN0cywg
aW5jcmVtZW50YWxfdGVzdHMsIG51bV9ydW5zKQotICAgICAgICAgICAgY2xzLl9ub3JtYWxpemVf
cmVzdWx0cyhhZ2dyZWdhdGVkX3Rlc3RzLCBudW1fcnVucykKLQotICAgIEBjbGFzc21ldGhvZAot
ICAgIGRlZiBfbWVyZ2Vfbm9uX3Rlc3RfZGF0YShjbHMsIGFnZ3JlZ2F0ZWRfanNvbiwgaW5jcmVt
ZW50YWxfanNvbiwgbnVtX3J1bnMpOgotICAgICAgICBpbmNyZW1lbnRhbF9idWlsZHMgPSBpbmNy
ZW1lbnRhbF9qc29uW0pTT05fUkVTVUxUU19CVUlMRF9OVU1CRVJTXQotICAgICAgICBhZ2dyZWdh
dGVkX2J1aWxkcyA9IGFnZ3JlZ2F0ZWRfanNvbltKU09OX1JFU1VMVFNfQlVJTERfTlVNQkVSU10K
LSAgICAgICAgYWdncmVnYXRlZF9idWlsZF9udW1iZXIgPSBpbnQoYWdncmVnYXRlZF9idWlsZHNb
MF0pCi0KLSAgICAgICAgZm9yIGluZGV4IGluIHJldmVyc2VkKHJhbmdlKGxlbihpbmNyZW1lbnRh
bF9idWlsZHMpKSk6Ci0gICAgICAgICAgICBidWlsZF9udW1iZXIgPSBpbnQoaW5jcmVtZW50YWxf
YnVpbGRzW2luZGV4XSkKLSAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoIk1lcmdpbmcgYnVpbGQg
JXMsIGluY3JlbWVudGFsIGpzb24gaW5kZXg6ICVkLiIsIGJ1aWxkX251bWJlciwgaW5kZXgpCi0K
LSAgICAgICAgICAgICMgTWVyZ2UgdGhpcyBidWlsZCBpbnRvIGFnZ3JlYWdhdGVkIHJlc3VsdHMu
Ci0gICAgICAgICAgICBjbHMuX21lcmdlX29uZV9idWlsZChhZ2dyZWdhdGVkX2pzb24sIGluY3Jl
bWVudGFsX2pzb24sIGluZGV4LCBudW1fcnVucykKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRl
ZiBfbWVyZ2Vfb25lX2J1aWxkKGNscywgYWdncmVnYXRlZF9qc29uLCBpbmNyZW1lbnRhbF9qc29u
LCBpbmNyZW1lbnRhbF9pbmRleCwgbnVtX3J1bnMpOgotICAgICAgICBmb3Iga2V5IGluIGluY3Jl
bWVudGFsX2pzb24ua2V5cygpOgotICAgICAgICAgICAgIyBNZXJnZSBqc29uIHJlc3VsdHMgZXhj
ZXB0ICJ0ZXN0cyIgcHJvcGVydGllcyAocmVzdWx0cywgdGltZXMgZXRjKS4KLSAgICAgICAgICAg
ICMgInRlc3RzIiBwcm9wZXJ0aWVzIHdpbGwgYmUgaGFuZGxlZCBzZXBhcmF0ZWx5LgotICAgICAg
ICAgICAgaWYga2V5ID09IEpTT05fUkVTVUxUU19URVNUUzoKLSAgICAgICAgICAgICAgICBjb250
aW51ZQotCi0gICAgICAgICAgICBpZiBrZXkgaW4gYWdncmVnYXRlZF9qc29uOgotICAgICAgICAg
ICAgICAgIGFnZ3JlZ2F0ZWRfanNvbltrZXldLmluc2VydCgwLCBpbmNyZW1lbnRhbF9qc29uW2tl
eV1baW5jcmVtZW50YWxfaW5kZXhdKQotICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZWRfanNvbltr
ZXldID0gYWdncmVnYXRlZF9qc29uW2tleV1bOm51bV9ydW5zXQotICAgICAgICAgICAgZWxzZToK
LSAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2pzb25ba2V5XSA9IGluY3JlbWVudGFsX2pzb25b
a2V5XQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9tZXJnZV90ZXN0cyhjbHMsIGFnZ3Jl
Z2F0ZWRfanNvbiwgaW5jcmVtZW50YWxfanNvbiwgbnVtX3J1bnMpOgotICAgICAgICAjIEZJWE1F
OiBTb21lIGRhdGEgZ290IGNvcnJ1cHRlZCBhbmQgaGFzIHJlc3VsdHMvdGltZXMgYXQgdGhlIGRp
cmVjdG9yeSBsZXZlbC4KLSAgICAgICAgIyBPbmNlIHRoZSBkYXRhIGlzIGZpeGUsIHRoaXMgc2hv
dWxkIGFzc2VydCB0aGF0IHRoZSBkaXJlY3RvcnkgbGV2ZWwgZG9lcyBub3QgaGF2ZQotICAgICAg
ICAjIHJlc3VsdHMgb3IgdGltZXMgYW5kIGp1c3QgcmV0dXJuICJKU09OX1JFU1VMVFNfUkVTVUxU
UyBub3QgaW4gc3VidHJlZSIuCi0gICAgICAgIGlmIEpTT05fUkVTVUxUU19SRVNVTFRTIGluIGFn
Z3JlZ2F0ZWRfanNvbjoKLSAgICAgICAgICAgIGRlbCBhZ2dyZWdhdGVkX2pzb25bSlNPTl9SRVNV
TFRTX1JFU1VMVFNdCi0gICAgICAgIGlmIEpTT05fUkVTVUxUU19USU1FUyBpbiBhZ2dyZWdhdGVk
X2pzb246Ci0gICAgICAgICAgICBkZWwgYWdncmVnYXRlZF9qc29uW0pTT05fUkVTVUxUU19USU1F
U10KLQotICAgICAgICBhbGxfdGVzdHMgPSBzZXQoYWdncmVnYXRlZF9qc29uLml0ZXJrZXlzKCkp
Ci0gICAgICAgIGlmIGluY3JlbWVudGFsX2pzb246Ci0gICAgICAgICAgICBhbGxfdGVzdHMgfD0g
c2V0KGluY3JlbWVudGFsX2pzb24uaXRlcmtleXMoKSkKLQotICAgICAgICBmb3IgdGVzdF9uYW1l
IGluIGFsbF90ZXN0czoKLSAgICAgICAgICAgIGlmIHRlc3RfbmFtZSBub3QgaW4gYWdncmVnYXRl
ZF9qc29uOgotICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZWRfanNvblt0ZXN0X25hbWVdID0gaW5j
cmVtZW50YWxfanNvblt0ZXN0X25hbWVdCi0gICAgICAgICAgICAgICAgY29udGludWUKLQotICAg
ICAgICAgICAgaW5jcmVtZW50YWxfc3ViX3Jlc3VsdCA9IGluY3JlbWVudGFsX2pzb25bdGVzdF9u
YW1lXSBpZiBpbmNyZW1lbnRhbF9qc29uIGFuZCB0ZXN0X25hbWUgaW4gaW5jcmVtZW50YWxfanNv
biBlbHNlIE5vbmUKLSAgICAgICAgICAgIGlmIF9pc19kaXJlY3RvcnkoYWdncmVnYXRlZF9qc29u
W3Rlc3RfbmFtZV0pOgotICAgICAgICAgICAgICAgIGNscy5fbWVyZ2VfdGVzdHMoYWdncmVnYXRl
ZF9qc29uW3Rlc3RfbmFtZV0sIGluY3JlbWVudGFsX3N1Yl9yZXN1bHQsIG51bV9ydW5zKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgIGlmIGluY3JlbWVudGFsX3N1Yl9y
ZXN1bHQ6Ci0gICAgICAgICAgICAgICAgcmVzdWx0cyA9IGluY3JlbWVudGFsX3N1Yl9yZXN1bHRb
SlNPTl9SRVNVTFRTX1JFU1VMVFNdCi0gICAgICAgICAgICAgICAgdGltZXMgPSBpbmNyZW1lbnRh
bF9zdWJfcmVzdWx0W0pTT05fUkVTVUxUU19USU1FU10KLSAgICAgICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICAgICAgcmVzdWx0cyA9IFtbMSwgSlNPTl9SRVNVTFRTX05PX0RBVEFdXQotICAgICAg
ICAgICAgICAgIHRpbWVzID0gW1sxLCAwXV0KLQotICAgICAgICAgICAgYWdncmVnYXRlZF90ZXN0
ID0gYWdncmVnYXRlZF9qc29uW3Rlc3RfbmFtZV0KLSAgICAgICAgICAgIGNscy5faW5zZXJ0X2l0
ZW1fcnVuX2xlbmd0aF9lbmNvZGVkKHJlc3VsdHMsIGFnZ3JlZ2F0ZWRfdGVzdFtKU09OX1JFU1VM
VFNfUkVTVUxUU10sIG51bV9ydW5zKQotICAgICAgICAgICAgY2xzLl9pbnNlcnRfaXRlbV9ydW5f
bGVuZ3RoX2VuY29kZWQodGltZXMsIGFnZ3JlZ2F0ZWRfdGVzdFtKU09OX1JFU1VMVFNfVElNRVNd
LCBudW1fcnVucykKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfaW5zZXJ0X2l0ZW1fcnVu
X2xlbmd0aF9lbmNvZGVkKGNscywgaW5jcmVtZW50YWxfaXRlbSwgYWdncmVnYXRlZF9pdGVtLCBu
dW1fcnVucyk6Ci0gICAgICAgIGZvciBpdGVtIGluIGluY3JlbWVudGFsX2l0ZW06Ci0gICAgICAg
ICAgICBpZiBsZW4oYWdncmVnYXRlZF9pdGVtKSBhbmQgaXRlbVsxXSA9PSBhZ2dyZWdhdGVkX2l0
ZW1bMF1bMV06Ci0gICAgICAgICAgICAgICAgYWdncmVnYXRlZF9pdGVtWzBdWzBdID0gbWluKGFn
Z3JlZ2F0ZWRfaXRlbVswXVswXSArIGl0ZW1bMF0sIG51bV9ydW5zKQotICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICBhZ2dyZWdhdGVkX2l0ZW0uaW5zZXJ0KDAsIGl0ZW0pCi0KLSAg
ICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX25vcm1hbGl6ZV9yZXN1bHRzKGNscywgYWdncmVnYXRl
ZF9qc29uLCBudW1fcnVucyk6Ci0gICAgICAgIG5hbWVzX3RvX2RlbGV0ZSA9IFtdCi0gICAgICAg
IGZvciB0ZXN0X25hbWUgaW4gYWdncmVnYXRlZF9qc29uOgotICAgICAgICAgICAgaWYgX2lzX2Rp
cmVjdG9yeShhZ2dyZWdhdGVkX2pzb25bdGVzdF9uYW1lXSk6Ci0gICAgICAgICAgICAgICAgY2xz
Ll9ub3JtYWxpemVfcmVzdWx0cyhhZ2dyZWdhdGVkX2pzb25bdGVzdF9uYW1lXSwgbnVtX3J1bnMp
Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGxlYWYgPSBhZ2dyZWdhdGVkX2pz
b25bdGVzdF9uYW1lXQotICAgICAgICAgICAgICAgIGxlYWZbSlNPTl9SRVNVTFRTX1JFU1VMVFNd
ID0gY2xzLl9yZW1vdmVfaXRlbXNfb3Zlcl9tYXhfbnVtYmVyX29mX2J1aWxkcyhsZWFmW0pTT05f
UkVTVUxUU19SRVNVTFRTXSwgbnVtX3J1bnMpCi0gICAgICAgICAgICAgICAgbGVhZltKU09OX1JF
U1VMVFNfVElNRVNdID0gY2xzLl9yZW1vdmVfaXRlbXNfb3Zlcl9tYXhfbnVtYmVyX29mX2J1aWxk
cyhsZWFmW0pTT05fUkVTVUxUU19USU1FU10sIG51bV9ydW5zKQotICAgICAgICAgICAgICAgIGlm
IGNscy5fc2hvdWxkX2RlbGV0ZV9sZWFmKGxlYWYpOgotICAgICAgICAgICAgICAgICAgICBuYW1l
c190b19kZWxldGUuYXBwZW5kKHRlc3RfbmFtZSkKLQotICAgICAgICBmb3IgdGVzdF9uYW1lIGlu
IG5hbWVzX3RvX2RlbGV0ZToKLSAgICAgICAgICAgIGRlbCBhZ2dyZWdhdGVkX2pzb25bdGVzdF9u
YW1lXQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9zaG91bGRfZGVsZXRlX2xlYWYoY2xz
LCBsZWFmKToKLSAgICAgICAgZGVsZXRhYmxlX3R5cGVzID0gc2V0KChKU09OX1JFU1VMVFNfUEFT
UywgSlNPTl9SRVNVTFRTX05PX0RBVEEsIEpTT05fUkVTVUxUU19TS0lQKSkKLSAgICAgICAgZm9y
IHJlc3VsdCBpbiBsZWFmW0pTT05fUkVTVUxUU19SRVNVTFRTXToKLSAgICAgICAgICAgIGlmIHJl
c3VsdFsxXSBub3QgaW4gZGVsZXRhYmxlX3R5cGVzOgotICAgICAgICAgICAgICAgIHJldHVybiBG
YWxzZQotCi0gICAgICAgIGZvciB0aW1lIGluIGxlYWZbSlNPTl9SRVNVTFRTX1RJTUVTXToKLSAg
ICAgICAgICAgIGlmIHRpbWVbMV0gPj0gSlNPTl9SRVNVTFRTX01JTl9USU1FOgotICAgICAgICAg
ICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBAY2xhc3Nt
ZXRob2QKLSAgICBkZWYgX3JlbW92ZV9pdGVtc19vdmVyX21heF9udW1iZXJfb2ZfYnVpbGRzKGNs
cywgZW5jb2RlZF9saXN0LCBudW1fcnVucyk6Ci0gICAgICAgIG51bV9idWlsZHMgPSAwCi0gICAg
ICAgIGluZGV4ID0gMAotICAgICAgICBmb3IgcmVzdWx0IGluIGVuY29kZWRfbGlzdDoKLSAgICAg
ICAgICAgIG51bV9idWlsZHMgPSBudW1fYnVpbGRzICsgcmVzdWx0WzBdCi0gICAgICAgICAgICBp
bmRleCA9IGluZGV4ICsgMQotICAgICAgICAgICAgaWYgbnVtX2J1aWxkcyA+PSBudW1fcnVuczoK
LSAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlZF9saXN0WzppbmRleF0KLQotICAgICAgICBy
ZXR1cm4gZW5jb2RlZF9saXN0Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2NoZWNrX2pz
b24oY2xzLCBidWlsZGVyLCBqc29uKToKLSAgICAgICAgdmVyc2lvbiA9IGpzb25bSlNPTl9SRVNV
TFRTX1ZFUlNJT05fS0VZXQotICAgICAgICBpZiB2ZXJzaW9uID4gSlNPTl9SRVNVTFRTX0hJRVJB
UkNISUNBTF9WRVJTSU9OOgotICAgICAgICAgICAgbG9nZ2luZy5lcnJvcigiUmVzdWx0cyBKU09O
IHZlcnNpb24gJyVzJyBpcyBub3Qgc3VwcG9ydGVkLiIsCi0gICAgICAgICAgICAgICAgdmVyc2lv
bikKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgIGlmIG5vdCBidWlsZGVyIGlu
IGpzb246Ci0gICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJCdWlsZGVyICclcycgaXMgbm90IGlu
IGpzb24gcmVzdWx0cy4iLCBidWlsZGVyKQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAg
ICAgICAgcmVzdWx0c19mb3JfYnVpbGRlciA9IGpzb25bYnVpbGRlcl0KLSAgICAgICAgaWYgbm90
IEpTT05fUkVTVUxUU19CVUlMRF9OVU1CRVJTIGluIHJlc3VsdHNfZm9yX2J1aWxkZXI6Ci0gICAg
ICAgICAgICBsb2dnaW5nLmVycm9yKCJNaXNzaW5nIGJ1aWxkIG51bWJlciBpbiBqc29uIHJlc3Vs
dHMuIikKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgICMgRklYTUU6IE9uY2Ug
YWxsIHRoZSBib3RzIGhhdmUgY3ljbGVkLCB3ZSBjYW4gcmVtb3ZlIHRoaXMgY29kZSBzaW5jZSBh
bGwgdGhlIHJlc3VsdHMgd2lsbCBiZSBoZWlyYXJjaGljYWwuCi0gICAgICAgIGlmIHZlcnNpb24g
PCBKU09OX1JFU1VMVFNfSElFUkFSQ0hJQ0FMX1ZFUlNJT046Ci0gICAgICAgICAgICBqc29uW2J1
aWxkZXJdW0pTT05fUkVTVUxUU19URVNUU10gPSBfdHJpZV9qc29uX3Rlc3RzKHJlc3VsdHNfZm9y
X2J1aWxkZXJbSlNPTl9SRVNVTFRTX1RFU1RTXSkKLSAgICAgICAgICAgIGpzb25bSlNPTl9SRVNV
TFRTX1ZFUlNJT05fS0VZXSA9IEpTT05fUkVTVUxUU19ISUVSQVJDSElDQUxfVkVSU0lPTgotCi0g
ICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgbWVyZ2UoY2xz
LCBidWlsZGVyLCBhZ2dyZWdhdGVkLCBpbmNyZW1lbnRhbCwgbnVtX3J1bnMsIHNvcnRfa2V5cz1G
YWxzZSk6Ci0gICAgICAgIGlmIG5vdCBpbmNyZW1lbnRhbDoKLSAgICAgICAgICAgIGxvZ2dpbmcu
d2FybmluZygiTm90aGluZyB0byBtZXJnZS4iKQotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQot
ICAgICAgICBsb2dnaW5nLmluZm8oIkxvYWRpbmcgaW5jcmVtZW50YWwganNvbi4uLiIpCi0gICAg
ICAgIGluY3JlbWVudGFsX2pzb24gPSBjbHMuX2xvYWRfanNvbihpbmNyZW1lbnRhbCkKLSAgICAg
ICAgaWYgbm90IGluY3JlbWVudGFsX2pzb246Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0g
ICAgICAgIGxvZ2dpbmcuaW5mbygiQ2hlY2tpbmcgaW5jcmVtZW50YWwganNvbi4uLiIpCi0gICAg
ICAgIGlmIG5vdCBjbHMuX2NoZWNrX2pzb24oYnVpbGRlciwgaW5jcmVtZW50YWxfanNvbik6Ci0g
ICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgIGxvZ2dpbmcuaW5mbygiTG9hZGluZyBl
eGlzdGluZyBhZ2dyZWdhdGVkIGpzb24uLi4iKQotICAgICAgICBhZ2dyZWdhdGVkX2pzb24gPSBj
bHMuX2xvYWRfanNvbihhZ2dyZWdhdGVkKQotICAgICAgICBpZiBub3QgYWdncmVnYXRlZF9qc29u
OgotICAgICAgICAgICAgcmV0dXJuIGluY3JlbWVudGFsCi0KLSAgICAgICAgbG9nZ2luZy5pbmZv
KCJDaGVja2luZyBleGlzdGluZyBhZ2dyZWdhdGVkIGpzb24uLi4iKQotICAgICAgICBpZiBub3Qg
Y2xzLl9jaGVja19qc29uKGJ1aWxkZXIsIGFnZ3JlZ2F0ZWRfanNvbik6Ci0gICAgICAgICAgICBy
ZXR1cm4gaW5jcmVtZW50YWwKLQotICAgICAgICBpZiBhZ2dyZWdhdGVkX2pzb25bYnVpbGRlcl1b
SlNPTl9SRVNVTFRTX0JVSUxEX05VTUJFUlNdWzBdID09IGluY3JlbWVudGFsX2pzb25bYnVpbGRl
cl1bSlNPTl9SRVNVTFRTX0JVSUxEX05VTUJFUlNdWzBdOgotICAgICAgICAgICAgbG9nZ2luZy5l
cnJvcigiSW5jcmVtZW50YWwgSlNPTidzIGJ1aWxkIG51bWJlciBpcyB0aGUgbGF0ZXN0IGJ1aWxk
IG51bWJlciBpbiB0aGUgYWdncmVnYXRlZCBKU09OOiAlcy4iICUgYWdncmVnYXRlZF9qc29uW2J1
aWxkZXJdW0pTT05fUkVTVUxUU19CVUlMRF9OVU1CRVJTXVswXSkKLSAgICAgICAgICAgIHJldHVy
biBhZ2dyZWdhdGVkCi0KLSAgICAgICAgbG9nZ2luZy5pbmZvKCJNZXJnaW5nIGpzb24gcmVzdWx0
cy4uLiIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNscy5fbWVyZ2VfanNvbihhZ2dyZWdh
dGVkX2pzb25bYnVpbGRlcl0sIGluY3JlbWVudGFsX2pzb25bYnVpbGRlcl0sIG51bV9ydW5zKQot
ICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBsb2dnaW5nLmVycm9yKCJGYWlsZWQgdG8gbWVy
Z2UganNvbiByZXN1bHRzOiAlcyIsIHRyYWNlYmFjay5wcmludF9leGNlcHRpb24oKnN5cy5leGNf
aW5mbygpKSkKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgYWdncmVnYXRlZF9q
c29uW0pTT05fUkVTVUxUU19WRVJTSU9OX0tFWV0gPSBKU09OX1JFU1VMVFNfSElFUkFSQ0hJQ0FM
X1ZFUlNJT04KLQotICAgICAgICByZXR1cm4gY2xzLl9nZW5lcmF0ZV9maWxlX2RhdGEoYWdncmVn
YXRlZF9qc29uLCBzb3J0X2tleXMpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgdXBkYXRl
KGNscywgbWFzdGVyLCBidWlsZGVyLCB0ZXN0X3R5cGUsIGluY3JlbWVudGFsKToKLSAgICAgICAg
c21hbGxfZmlsZV91cGRhdGVkID0gY2xzLnVwZGF0ZV9maWxlKG1hc3RlciwgYnVpbGRlciwgdGVz
dF90eXBlLCBpbmNyZW1lbnRhbCwgSlNPTl9SRVNVTFRTX0ZJTEVfU01BTEwsIEpTT05fUkVTVUxU
U19NQVhfQlVJTERTX1NNQUxMKQotICAgICAgICBsYXJnZV9maWxlX3VwZGF0ZWQgPSBjbHMudXBk
YXRlX2ZpbGUobWFzdGVyLCBidWlsZGVyLCB0ZXN0X3R5cGUsIGluY3JlbWVudGFsLCBKU09OX1JF
U1VMVFNfRklMRSwgSlNPTl9SRVNVTFRTX01BWF9CVUlMRFMpCi0KLSAgICAgICAgcmV0dXJuIHNt
YWxsX2ZpbGVfdXBkYXRlZCBhbmQgbGFyZ2VfZmlsZV91cGRhdGVkCi0KLSAgICBAY2xhc3NtZXRo
b2QKLSAgICBkZWYgdXBkYXRlX2ZpbGUoY2xzLCBtYXN0ZXIsIGJ1aWxkZXIsIHRlc3RfdHlwZSwg
aW5jcmVtZW50YWwsIGZpbGVuYW1lLCBudW1fcnVucyk6Ci0gICAgICAgIGZpbGVzID0gVGVzdEZp
bGUuZ2V0X2ZpbGVzKG1hc3RlciwgYnVpbGRlciwgdGVzdF90eXBlLCBmaWxlbmFtZSkKLSAgICAg
ICAgaWYgZmlsZXM6Ci0gICAgICAgICAgICBmaWxlID0gZmlsZXNbMF0KLSAgICAgICAgICAgIG5l
d19yZXN1bHRzID0gY2xzLm1lcmdlKGJ1aWxkZXIsIGZpbGUuZGF0YSwgaW5jcmVtZW50YWwsIG51
bV9ydW5zKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBVc2UgdGhlIGluY3JlbWVudGFs
IGRhdGEgaWYgdGhlcmUgaXMgbm8gYWdncmVnYXRlZCBmaWxlIHRvIG1lcmdlLgotICAgICAgICAg
ICAgZmlsZSA9IFRlc3RGaWxlKCkKLSAgICAgICAgICAgIGZpbGUubWFzdGVyID0gbWFzdGVyCi0g
ICAgICAgICAgICBmaWxlLmJ1aWxkZXIgPSBidWlsZGVyCi0gICAgICAgICAgICBmaWxlLnRlc3Rf
dHlwZSA9IHRlc3RfdHlwZQotICAgICAgICAgICAgZmlsZS5uYW1lID0gZmlsZW5hbWUKLSAgICAg
ICAgICAgIG5ld19yZXN1bHRzID0gaW5jcmVtZW50YWwKLSAgICAgICAgICAgIGxvZ2dpbmcuaW5m
bygiTm8gZXhpc3RpbmcganNvbiByZXN1bHRzLCBpbmNyZW1lbnRhbCBqc29uIGlzIHNhdmVkLiIp
Ci0KLSAgICAgICAgaWYgbm90IG5ld19yZXN1bHRzIG9yIG5vdCBmaWxlLnNhdmUobmV3X3Jlc3Vs
dHMpOgotICAgICAgICAgICAgbG9nZ2luZy5pbmZvKCJVcGRhdGUgZmFpbGVkLCBtYXN0ZXI6ICVz
LCBidWlsZGVyOiAlcywgdGVzdF90eXBlOiAlcywgbmFtZTogJXMuIiAlIChtYXN0ZXIsIGJ1aWxk
ZXIsIHRlc3RfdHlwZSwgZmlsZW5hbWUpKQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAg
ICAgICAgcmV0dXJuIFRydWUKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfZGVsZXRlX3Jl
c3VsdHNfYW5kX3RpbWVzKGNscywgdGVzdHMpOgotICAgICAgICBmb3Iga2V5IGluIHRlc3RzLmtl
eXMoKToKLSAgICAgICAgICAgIGlmIGtleSBpbiAoSlNPTl9SRVNVTFRTX1JFU1VMVFMsIEpTT05f
UkVTVUxUU19USU1FUyk6Ci0gICAgICAgICAgICAgICAgZGVsIHRlc3RzW2tleV0KLSAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY2xzLl9kZWxldGVfcmVzdWx0c19hbmRfdGltZXMo
dGVzdHNba2V5XSkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBnZXRfdGVzdF9saXN0KGNs
cywgYnVpbGRlciwganNvbl9maWxlX2RhdGEpOgotICAgICAgICBsb2dnaW5nLmRlYnVnKCJMb2Fk
aW5nIHRlc3QgcmVzdWx0cyBqc29uLi4uIikKLSAgICAgICAganNvbiA9IGNscy5fbG9hZF9qc29u
KGpzb25fZmlsZV9kYXRhKQotICAgICAgICBpZiBub3QganNvbjoKLSAgICAgICAgICAgIHJldHVy
biBOb25lCi0KLSAgICAgICAgbG9nZ2luZy5kZWJ1ZygiQ2hlY2tpbmcgdGVzdCByZXN1bHRzIGpz
b24uLi4iKQotICAgICAgICBpZiBub3QgY2xzLl9jaGVja19qc29uKGJ1aWxkZXIsIGpzb24pOgot
ICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICB0ZXN0X2xpc3RfanNvbiA9IHt9Ci0g
ICAgICAgIHRlc3RzID0ganNvbltidWlsZGVyXVtKU09OX1JFU1VMVFNfVEVTVFNdCi0gICAgICAg
IGNscy5fZGVsZXRlX3Jlc3VsdHNfYW5kX3RpbWVzKHRlc3RzKQotICAgICAgICB0ZXN0X2xpc3Rf
anNvbltidWlsZGVyXSA9IHsidGVzdHMiOiB0ZXN0c30KLSAgICAgICAgcmV0dXJuIGNscy5fZ2Vu
ZXJhdGVfZmlsZV9kYXRhKHRlc3RfbGlzdF9qc29uKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogVG9v
bHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0cy5weQpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0
ZWQ6IHN2bjpleGVjdXRhYmxlCiMjIC0xICswLDAgIyMKLSoKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBwcm9wZXJ0eQpJbmRleDogVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9tb2RlbC9qc29ucmVzdWx0
c191bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVs
L2pzb25yZXN1bHRzX3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNjQ1MjcpCisrKyBUb29scy9UZXN0
UmVzdWx0U2VydmVyL21vZGVsL2pzb25yZXN1bHRzX3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkK
QEAgLTEsNjk0ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoK
LSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi10cnk6Ci0gICAgaW1wb3J0IGpz
b25yZXN1bHRzCi0gICAgZnJvbSBqc29ucmVzdWx0cyBpbXBvcnQgSnNvblJlc3VsdHMKLWV4Y2Vw
dCBJbXBvcnRFcnJvcjoKLSAgICBwcmludCgiRVJST1I6IEFkZCB0aGUgVGVzdFJlc3VsdFNlcnZl
ciwgZ29vZ2xlX2FwcGVuZ2luZSBhbmQgeWFtbC9saWIgZGlyZWN0b3JpZXMgdG8geW91ciBQWVRI
T05QQVRIIikKLSAgICByYWlzZQotCi1mcm9tIGRqYW5nby51dGlscyBpbXBvcnQgc2ltcGxlanNv
bgotCi1pbXBvcnQgdW5pdHRlc3QKLQotCi1KU09OX1JFU1VMVFNfVEVNUExBVEUgPSAoCi0gICAg
J3siV2Via2l0Ijp7JwotICAgICciYWxsRml4YWJsZUNvdW50IjpbW1RFU1REQVRBX0NPVU5UXV0s
JwotICAgICciYnVpbGROdW1iZXJzIjpbW1RFU1REQVRBX0JVSUxETlVNQkVSU11dLCcKLSAgICAn
ImRlZmVycmVkQ291bnRzIjpbW1RFU1REQVRBX0NPVU5UU11dLCcKLSAgICAnImZpeGFibGVDb3Vu
dCI6W1tURVNUREFUQV9DT1VOVF1dLCcKLSAgICAnImZpeGFibGVDb3VudHMiOltbVEVTVERBVEFf
Q09VTlRTXV0sJwotICAgICcic2Vjb25kc1NpbmNlRXBvY2giOltbVEVTVERBVEFfVElNRVNdXSwn
Ci0gICAgJyJ0ZXN0cyI6e1tURVNUREFUQV9URVNUU119LCcKLSAgICAnIndlYmtpdFJldmlzaW9u
IjpbW1RFU1REQVRBX1dFQktJVFJFVklTSU9OXV0sJwotICAgICcid29udGZpeENvdW50cyI6W1tU
RVNUREFUQV9DT1VOVFNdXScKLSAgICAnfSwnCi0gICAgJyJ2ZXJzaW9uIjpbVkVSU0lPTl0nCi0g
ICAgJ30nKQotCi1KU09OX1JFU1VMVFNfQ09VTlRTX1RFTVBMQVRFID0gKAotICAgICd7JwotICAg
ICciQyI6W1RFU1REQVRBXSwnCi0gICAgJyJGIjpbVEVTVERBVEFdLCcKLSAgICAnIkkiOltURVNU
REFUQV0sJwotICAgICciTyI6W1RFU1REQVRBXSwnCi0gICAgJyJQIjpbVEVTVERBVEFdLCcKLSAg
ICAnIlQiOltURVNUREFUQV0sJwotICAgICciWCI6W1RFU1REQVRBXSwnCi0gICAgJyJaIjpbVEVT
VERBVEFdfScpCi0KLUpTT05fUkVTVUxUU19ESVJFQ1RPUllfVEVNUExBVEUgPSAnW1tURVNUREFU
QV9ESVJFQ1RPUlldXTp7W1RFU1REQVRBX0RBVEFdfScKLQotSlNPTl9SRVNVTFRTX1RFU1RTX1RF
TVBMQVRFID0gKAotICAgICdbW1RFU1REQVRBX1RFU1RfTkFNRV1dOnsnCi0gICAgJyJyZXN1bHRz
IjpbW1RFU1REQVRBX1RFU1RfUkVTVUxUU11dLCcKLSAgICAnInRpbWVzIjpbW1RFU1REQVRBX1RF
U1RfVElNRVNdXX0nKQotCi1KU09OX1JFU1VMVFNfVEVTVF9MSVNUX1RFTVBMQVRFID0gKAotICAg
ICd7IldlYmtpdCI6eyJ0ZXN0cyI6e1tURVNUREFUQV9URVNUU119fX0nKQotCi0KLWNsYXNzIEpz
b25SZXN1bHRzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHNldFVwKHNlbGYpOgot
ICAgICAgICBzZWxmLl9idWlsZGVyID0gIldlYmtpdCIKLQotICAgIGRlZiB0ZXN0X3N0cmlwX3By
ZWZpeF9zdWZmaXgoc2VsZik6Ci0gICAgICAgIGpzb24gPSAiWydjb250ZW50cyddIgotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKEpzb25SZXN1bHRzLl9zdHJpcF9wcmVmaXhfc3VmZml4KCJBRERf
UkVTVUxUUygiICsganNvbiArICIpOyIpLCBqc29uKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KEpzb25SZXN1bHRzLl9zdHJpcF9wcmVmaXhfc3VmZml4KGpzb24pLCBqc29uKQotCi0gICAgZGVm
IF9tYWtlX3Rlc3RfanNvbihzZWxmLCB0ZXN0X2RhdGEpOgotICAgICAgICBpZiBub3QgdGVzdF9k
YXRhOgotICAgICAgICAgICAgcmV0dXJuICIiCi0KLSAgICAgICAgYnVpbGRzID0gdGVzdF9kYXRh
WyJidWlsZHMiXQotICAgICAgICB0ZXN0cyA9IHRlc3RfZGF0YVsidGVzdHMiXQotICAgICAgICBp
ZiBub3QgYnVpbGRzIG9yIG5vdCB0ZXN0czoKLSAgICAgICAgICAgIHJldHVybiAiIgotCi0gICAg
ICAgIGpzb24gPSBKU09OX1JFU1VMVFNfVEVNUExBVEUKLQotICAgICAgICBjb3VudHMgPSBbXQot
ICAgICAgICBidWlsZF9udW1iZXJzID0gW10KLSAgICAgICAgd2Via2l0X3JldmlzaW9uID0gW10K
LSAgICAgICAgdGltZXMgPSBbXQotICAgICAgICBmb3IgYnVpbGQgaW4gYnVpbGRzOgotICAgICAg
ICAgICAgY291bnRzLmFwcGVuZChKU09OX1JFU1VMVFNfQ09VTlRTX1RFTVBMQVRFLnJlcGxhY2Uo
IltURVNUREFUQV0iLCBidWlsZCkpCi0gICAgICAgICAgICBidWlsZF9udW1iZXJzLmFwcGVuZCgi
MTAwMCVzIiAlIGJ1aWxkKQotICAgICAgICAgICAgd2Via2l0X3JldmlzaW9uLmFwcGVuZCgiMjAw
MCVzIiAlIGJ1aWxkKQotICAgICAgICAgICAgdGltZXMuYXBwZW5kKCIxMDAwMDAlczAwMCIgJSBi
dWlsZCkKLQotICAgICAgICBqc29uID0ganNvbi5yZXBsYWNlKCJbVEVTVERBVEFfQ09VTlRTXSIs
ICIsIi5qb2luKGNvdW50cykpCi0gICAgICAgIGpzb24gPSBqc29uLnJlcGxhY2UoIltURVNUREFU
QV9DT1VOVF0iLCAiLCIuam9pbihidWlsZHMpKQotICAgICAgICBqc29uID0ganNvbi5yZXBsYWNl
KCJbVEVTVERBVEFfQlVJTEROVU1CRVJTXSIsICIsIi5qb2luKGJ1aWxkX251bWJlcnMpKQotICAg
ICAgICBqc29uID0ganNvbi5yZXBsYWNlKCJbVEVTVERBVEFfV0VCS0lUUkVWSVNJT05dIiwgIiwi
LmpvaW4od2Via2l0X3JldmlzaW9uKSkKLSAgICAgICAganNvbiA9IGpzb24ucmVwbGFjZSgiW1RF
U1REQVRBX1RJTUVTXSIsICIsIi5qb2luKHRpbWVzKSkKLQotICAgICAgICB2ZXJzaW9uID0gc3Ry
KHRlc3RfZGF0YVsidmVyc2lvbiJdKSBpZiAidmVyc2lvbiIgaW4gdGVzdF9kYXRhIGVsc2UgIjQi
Ci0gICAgICAgIGpzb24gPSBqc29uLnJlcGxhY2UoIltWRVJTSU9OXSIsIHZlcnNpb24pCi0gICAg
ICAgIGpzb24gPSBqc29uLnJlcGxhY2UoIntbVEVTVERBVEFfVEVTVFNdfSIsIHNpbXBsZWpzb24u
ZHVtcHModGVzdHMsIHNlcGFyYXRvcnM9KCcsJywgJzonKSwgc29ydF9rZXlzPVRydWUpKQotICAg
ICAgICByZXR1cm4ganNvbgotCi0gICAgZGVmIF90ZXN0X21lcmdlKHNlbGYsIGFnZ3JlZ2F0ZWRf
ZGF0YSwgaW5jcmVtZW50YWxfZGF0YSwgZXhwZWN0ZWRfZGF0YSwgbWF4X2J1aWxkcz1qc29ucmVz
dWx0cy5KU09OX1JFU1VMVFNfTUFYX0JVSUxEUyk6Ci0gICAgICAgIGFnZ3JlZ2F0ZWRfcmVzdWx0
cyA9IHNlbGYuX21ha2VfdGVzdF9qc29uKGFnZ3JlZ2F0ZWRfZGF0YSkKLSAgICAgICAgaW5jcmVt
ZW50YWxfcmVzdWx0cyA9IHNlbGYuX21ha2VfdGVzdF9qc29uKGluY3JlbWVudGFsX2RhdGEpCi0g
ICAgICAgIG1lcmdlZF9yZXN1bHRzID0gSnNvblJlc3VsdHMubWVyZ2Uoc2VsZi5fYnVpbGRlciwg
YWdncmVnYXRlZF9yZXN1bHRzLCBpbmNyZW1lbnRhbF9yZXN1bHRzLCBtYXhfYnVpbGRzLCBzb3J0
X2tleXM9VHJ1ZSkKLQotICAgICAgICBpZiBleHBlY3RlZF9kYXRhOgotICAgICAgICAgICAgZXhw
ZWN0ZWRfcmVzdWx0cyA9IHNlbGYuX21ha2VfdGVzdF9qc29uKGV4cGVjdGVkX2RhdGEpCi0gICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lcmdlZF9yZXN1bHRzLCBleHBlY3RlZF9yZXN1bHRz
KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtZXJnZWRfcmVz
dWx0cykKLQotICAgIGRlZiBfdGVzdF9nZXRfdGVzdF9saXN0KHNlbGYsIGlucHV0X2RhdGEsIGV4
cGVjdGVkX2RhdGEpOgotICAgICAgICBpbnB1dF9yZXN1bHRzID0gc2VsZi5fbWFrZV90ZXN0X2pz
b24oaW5wdXRfZGF0YSkKLSAgICAgICAgZXhwZWN0ZWRfcmVzdWx0cyA9IEpTT05fUkVTVUxUU19U
RVNUX0xJU1RfVEVNUExBVEUucmVwbGFjZSgie1tURVNUREFUQV9URVNUU119Iiwgc2ltcGxlanNv
bi5kdW1wcyhleHBlY3RlZF9kYXRhLCBzZXBhcmF0b3JzPSgnLCcsICc6JykpKQotICAgICAgICBh
Y3R1YWxfcmVzdWx0cyA9IEpzb25SZXN1bHRzLmdldF90ZXN0X2xpc3Qoc2VsZi5fYnVpbGRlciwg
aW5wdXRfcmVzdWx0cykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWxfcmVzdWx0cywg
ZXhwZWN0ZWRfcmVzdWx0cykKLQotICAgIGRlZiB0ZXN0X21lcmdlX251bGxfaW5jcmVtZW50YWxf
cmVzdWx0cyhzZWxmKToKLSAgICAgICAgIyBFbXB0eSBpbmNyZW1lbnRhbCByZXN1bHRzIGpzb24u
Ci0gICAgICAgICMgTm90aGluZyB0byBtZXJnZS4KLSAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgK
LSAgICAgICAgICAgICMgQWdncmVnYXRlZCByZXN1bHRzCi0gICAgICAgICAgICB7ImJ1aWxkcyI6
IFsiMiIsICIxIl0sCi0gICAgICAgICAgICAgInRlc3RzIjogeyIwMDEuaHRtbCI6IHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRzIjogW1syMDAsIkYiXV0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAidGltZXMiOiBbWzIwMCwwXV19fX0sCi0gICAgICAgICAgICAjIElu
Y3JlbWVudGFsIHJlc3VsdHMKLSAgICAgICAgICAgIE5vbmUsCi0gICAgICAgICAgICAjIEV4cGVj
dCBubyBtZXJnZSBoYXBwZW5zLgotICAgICAgICAgICAgTm9uZSkKLQotICAgIGRlZiB0ZXN0X21l
cmdlX2VtcHR5X2luY3JlbWVudGFsX3Jlc3VsdHMoc2VsZik6Ci0gICAgICAgICMgTm8gYWN0dWFs
IGluY3JlbWVudGFsIHRlc3QgcmVzdWx0cyAob25seSBwcmVmaXggYW5kIHN1ZmZpeCkgdG8gbWVy
Z2UuCi0gICAgICAgICMgTm90aGluZyB0byBtZXJnZS4KLSAgICAgICAgc2VsZi5fdGVzdF9tZXJn
ZSgKLSAgICAgICAgICAgICMgQWdncmVnYXRlZCByZXN1bHRzCi0gICAgICAgICAgICB7ImJ1aWxk
cyI6IFsiMiIsICIxIl0sCi0gICAgICAgICAgICAgInRlc3RzIjogeyIwMDEuaHRtbCI6IHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRzIjogW1syMDAsIkYiXV0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAidGltZXMiOiBbWzIwMCwwXV19fX0sCi0gICAgICAgICAgICAj
IEluY3JlbWVudGFsIHJlc3VsdHMKLSAgICAgICAgICAgIHsiYnVpbGRzIjogW10sCi0gICAgICAg
ICAgICAgInRlc3RzIjoge319LAotICAgICAgICAgICAgIyBFeHBlY3RlZCBubyBtZXJnZSBoYXBw
ZW5zLgotICAgICAgICAgICAgTm9uZSkKLQotICAgIGRlZiB0ZXN0X21lcmdlX2VtcHR5X2FnZ3Jl
Z2F0ZWRfcmVzdWx0cyhzZWxmKToKLSAgICAgICAgIyBObyBleGlzdGluZyBhZ2dyZWdhdGVkIHJl
c3VsdHMuCi0gICAgICAgICMgTWVyZ2VkIHJlc3VsdHMgPT0gbmV3IGluY3JlbWVudGFsIHJlc3Vs
dHMuCi0gICAgICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCi0gICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQg
cmVzdWx0cwotICAgICAgICAgICAgTm9uZSwKLSAgICAgICAgICAgICMgSW5jcmVtZW50YWwgcmVz
dWx0cwotCi0gICAgICAgICAgICB7ImJ1aWxkcyI6IFsiMiIsICIxIl0sCi0gICAgICAgICAgICAg
InRlc3RzIjogeyIwMDEuaHRtbCI6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1
bHRzIjogW1syMDAsIkYiXV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXMiOiBb
WzIwMCwwXV19fX0sCi0gICAgICAgICAgICAjIEV4cGVjdGVkIHJlc3VsdAotICAgICAgICAgICAg
eyJidWlsZHMiOiBbIjIiLCAiMSJdLAotICAgICAgICAgICAgICJ0ZXN0cyI6IHsiMDAxLmh0bWwi
OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0cyI6IFtbMjAwLCJGIl1dLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIjogW1syMDAsMF1dfX19KQotCi0gICAg
ZGVmIHRlc3RfbWVyZ2VfZHVwbGljYXRlX2J1aWxkX251bWJlcihzZWxmKToKLSAgICAgICAgc2Vs
Zi5fdGVzdF9tZXJnZSgKLSAgICAgICAgICAgICMgQWdncmVnYXRlZCByZXN1bHRzCi0gICAgICAg
ICAgICB7ImJ1aWxkcyI6IFsiMiIsICIxIl0sCi0gICAgICAgICAgICAgInRlc3RzIjogeyIwMDEu
aHRtbCI6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRzIjogW1sxMDAsICJG
Il1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIjogW1sxMDAsIDBdXX19fSwK
LSAgICAgICAgICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cwotICAgICAgICAgICAgeyJidWlsZHMi
OiBbIjIiXSwKLSAgICAgICAgICAgICAidGVzdHMiOiB7IjAwMS5odG1sIjogewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInJlc3VsdHMiOiBbWzEsICJGIl1dLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInRpbWVzIjogW1sxLCAwXV19fX0sCi0gICAgICAgICAgICAjIEV4cGVjdGVk
IHJlc3VsdHMKLSAgICAgICAgICAgIHsiYnVpbGRzIjogWyIyIiwgIjEiXSwKLSAgICAgICAgICAg
ICAidGVzdHMiOiB7IjAwMS5odG1sIjogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgInJl
c3VsdHMiOiBbWzEwMCwgIkYiXV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXMi
OiBbWzEwMCwgMF1dfX19KQotCi0gICAgZGVmIHRlc3RfbWVyZ2VfaW5jcmVtZW50YWxfc2luZ2xl
X3Rlc3Rfc2luZ2xlX3J1bl9zYW1lX3Jlc3VsdChzZWxmKToKLSAgICAgICAgIyBJbmNyZW1lbnRh
bCByZXN1bHRzIGhhcyB0aGUgbGF0ZXN0IGJ1aWxkIGFuZCBzYW1lIHRlc3QgcmVzdWx0cyBmb3IK
LSAgICAgICAgIyB0aGF0IHJ1bi4KLSAgICAgICAgIyBJbnNlcnQgdGhlIGluY3JlbWVudGFsIHJl
c3VsdHMgYXQgdGhlIGZpcnN0IHBsYWNlIGFuZCBzdW0gbnVtYmVyCi0gICAgICAgICMgb2YgcnVu
cyBmb3IgIkYiICgyMDAgKyAxKSB0byBnZXQgbWVyZ2VkIHJlc3VsdHMuCi0gICAgICAgIHNlbGYu
X3Rlc3RfbWVyZ2UoCi0gICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVzdWx0cwotICAgICAgICAg
ICAgeyJidWlsZHMiOiBbIjIiLCAiMSJdLAotICAgICAgICAgICAgICJ0ZXN0cyI6IHsiMDAxLmh0
bWwiOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0cyI6IFtbMjAwLCJGIl1d
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIjogW1syMDAsMF1dfX19LAotICAg
ICAgICAgICAgIyBJbmNyZW1lbnRhbCByZXN1bHRzCi0gICAgICAgICAgICB7ImJ1aWxkcyI6IFsi
MyJdLAotICAgICAgICAgICAgICJ0ZXN0cyI6IHsiMDAxLmh0bWwiOiB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAicmVzdWx0cyI6IFtbMSwiRiJdXSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJ0aW1lcyI6IFtbMSwwXV19fX0sCi0gICAgICAgICAgICAjIEV4cGVjdGVkIHJlc3Vs
dHMKLSAgICAgICAgICAgIHsiYnVpbGRzIjogWyIzIiwgIjIiLCAiMSJdLAotICAgICAgICAgICAg
ICJ0ZXN0cyI6IHsiMDAxLmh0bWwiOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAicmVz
dWx0cyI6IFtbMjAxLCJGIl1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIjog
W1syMDEsMF1dfX19KQotCi0gICAgZGVmIHRlc3RfbWVyZ2Vfc2luZ2xlX3Rlc3Rfc2luZ2xlX3J1
bl9kaWZmZXJlbnRfcmVzdWx0KHNlbGYpOgotICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMg
aGFzIHRoZSBsYXRlc3QgYnVpbGQgYnV0IGRpZmZlcmVudCB0ZXN0IHJlc3VsdHMKLSAgICAgICAg
IyBmb3IgdGhhdCBydW4uCi0gICAgICAgICMgSW5zZXJ0IHRoZSBpbmNyZW1lbnRhbCByZXN1bHRz
IGF0IHRoZSBmaXJzdCBwbGFjZS4KLSAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKLSAgICAgICAg
ICAgICMgQWdncmVnYXRlZCByZXN1bHRzCi0gICAgICAgICAgICB7ImJ1aWxkcyI6IFsiMiIsICIx
Il0sCi0gICAgICAgICAgICAgInRlc3RzIjogeyIwMDEuaHRtbCI6IHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJyZXN1bHRzIjogW1syMDAsIkYiXV0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAidGltZXMiOiBbWzIwMCwwXV19fX0sCi0gICAgICAgICAgICAjIEluY3JlbWVudGFs
IHJlc3VsdHMKLSAgICAgICAgICAgIHsiYnVpbGRzIjogWyIzIl0sCi0gICAgICAgICAgICAgInRl
c3RzIjogeyIwMDEuaHRtbCI6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRz
IjogW1sxLCAiSSJdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lcyI6IFtbMSwx
XV19fX0sCi0gICAgICAgICAgICAjIEV4cGVjdGVkIHJlc3VsdHMKLSAgICAgICAgICAgIHsiYnVp
bGRzIjogWyIzIiwgIjIiLCAiMSJdLAotICAgICAgICAgICAgICJ0ZXN0cyI6IHsiMDAxLmh0bWwi
OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0cyI6IFtbMSwiSSJdLFsyMDAs
IkYiXV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXMiOiBbWzEsMV0sWzIwMCww
XV19fX0pCi0KLSAgICBkZWYgdGVzdF9tZXJnZV9zaW5nbGVfdGVzdF9zaW5nbGVfcnVuX3Jlc3Vs
dF9jaGFuZ2VkKHNlbGYpOgotICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMgaGFzIHRoZSBs
YXRlc3QgYnVpbGQgYnV0IHJlc3VsdHMgd2hpY2ggZGlmZmVyIGZyb20KLSAgICAgICAgIyB0aGUg
bGF0ZXN0IHJlc3VsdCAoYnV0IGFyZSB0aGUgc2FtZSBhcyBhbiBvbGRlciByZXN1bHQpLgotICAg
ICAgICBzZWxmLl90ZXN0X21lcmdlKAotICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMK
LSAgICAgICAgICAgIHsiYnVpbGRzIjogWyIyIiwgIjEiXSwKLSAgICAgICAgICAgICAidGVzdHMi
OiB7IjAwMS5odG1sIjogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlc3VsdHMiOiBb
WzIwMCwiRiJdLFsxMCwiSSJdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lcyI6
IFtbMjAwLDBdLFsxMCwxXV19fX0sCi0gICAgICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMK
LSAgICAgICAgICAgIHsiYnVpbGRzIjogWyIzIl0sCi0gICAgICAgICAgICAgInRlc3RzIjogeyIw
MDEuaHRtbCI6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRzIjogW1sxLCJJ
Il1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIjogW1sxLDFdXX19fSwKLSAg
ICAgICAgICAgICMgRXhwZWN0ZWQgcmVzdWx0cwotICAgICAgICAgICAgeyJidWlsZHMiOiBbIjMi
LCAiMiIsICIxIl0sCi0gICAgICAgICAgICAgInRlc3RzIjogeyIwMDEuaHRtbCI6IHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRzIjogW1sxLCJJIl0sWzIwMCwiRiJdLFsxMCwi
SSJdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lcyI6IFtbMSwxXSxbMjAwLDBd
LFsxMCwxXV19fX0pCi0KLSAgICBkZWYgdGVzdF9tZXJnZV9tdWx0aXBsZV90ZXN0c19zaW5nbGVf
cnVuKHNlbGYpOgotICAgICAgICAjIEFsbCB0ZXN0cyBoYXZlIGluY3JlbWVudGFsIHVwZGF0ZXMu
Ci0gICAgICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCi0gICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVz
dWx0cwotICAgICAgICAgICAgeyJidWlsZHMiOiBbIjIiLCAiMSJdLAotICAgICAgICAgICAgICJ0
ZXN0cyI6IHsiMDAxLmh0bWwiOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0
cyI6IFtbMjAwLCJGIl1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIjogW1sy
MDAsMF1dfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIjAwMi5odG1sIjogewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInJlc3VsdHMiOiBbWzEwMCwiSSJdXSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJ0aW1lcyI6IFtbMTAwLDFdXX19fSwKLSAgICAgICAgICAgICMgSW5jcmVt
ZW50YWwgcmVzdWx0cwotICAgICAgICAgICAgeyJidWlsZHMiOiBbIjMiXSwKLSAgICAgICAgICAg
ICAidGVzdHMiOiB7IjAwMS5odG1sIjogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgInJl
c3VsdHMiOiBbWzEsIkYiXV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXMiOiBb
WzEsMF1dfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIjAwMi5odG1sIjogewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInJlc3VsdHMiOiBbWzEsIkkiXV0sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAidGltZXMiOiBbWzEsMV1dfX19LAotICAgICAgICAgICAgIyBFeHBlY3RlZCBy
ZXN1bHRzCi0gICAgICAgICAgICB7ImJ1aWxkcyI6IFsiMyIsICIyIiwgIjEiXSwKLSAgICAgICAg
ICAgICAidGVzdHMiOiB7IjAwMS5odG1sIjogewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
InJlc3VsdHMiOiBbWzIwMSwiRiJdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1l
cyI6IFtbMjAxLDBdXX0sCi0gICAgICAgICAgICAgICAgICAgICAgICIwMDIuaHRtbCI6IHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRzIjogW1sxMDEsIkkiXV0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAidGltZXMiOiBbWzEwMSwxXV19fX0pCi0KLSAgICBkZWYgdGVz
dF9tZXJnZV9tdWx0aXBsZV90ZXN0c19zaW5nbGVfcnVuX29uZV9ub19yZXN1bHQoc2VsZik6Ci0g
ICAgICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCi0gICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVzdWx0
cwotICAgICAgICAgICAgeyJidWlsZHMiOiBbIjIiLCAiMSJdLAotICAgICAgICAgICAgICJ0ZXN0
cyI6IHsiMDAxLmh0bWwiOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0cyI6
IFtbMjAwLCJGIl1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIjogW1syMDAs
MF1dfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIjAwMi5odG1sIjogewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInJlc3VsdHMiOiBbWzEwMCwiSSJdXSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJ0aW1lcyI6IFtbMTAwLDFdXX19fSwKLSAgICAgICAgICAgICMgSW5jcmVtZW50
YWwgcmVzdWx0cwotICAgICAgICAgICAgeyJidWlsZHMiOiBbIjMiXSwKLSAgICAgICAgICAgICAi
dGVzdHMiOiB7IjAwMi5odG1sIjogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlc3Vs
dHMiOiBbWzEsIkkiXV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXMiOiBbWzEs
MV1dfX19LAotICAgICAgICAgICAgIyBFeHBlY3RlZCByZXN1bHRzCi0gICAgICAgICAgICB7ImJ1
aWxkcyI6IFsiMyIsICIyIiwgIjEiXSwKLSAgICAgICAgICAgICAidGVzdHMiOiB7IjAwMS5odG1s
IjogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlc3VsdHMiOiBbWzEsIk4iXSxbMjAw
LCJGIl1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIjogW1syMDEsMF1dfSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIjAwMi5odG1sIjogewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInJlc3VsdHMiOiBbWzEwMSwiSSJdXSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJ0aW1lcyI6IFtbMTAxLDFdXX19fSkKLQotICAgIGRlZiB0ZXN0X21lcmdlX3NpbmdsZV90
ZXN0X211bHRpcGxlX3J1bnMoc2VsZik6Ci0gICAgICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCi0gICAg
ICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVzdWx0cwotICAgICAgICAgICAgeyJidWlsZHMiOiBbIjIi
LCAiMSJdLAotICAgICAgICAgICAgICJ0ZXN0cyI6IHsiMDAxLmh0bWwiOiB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAicmVzdWx0cyI6IFtbMjAwLCJGIl1dLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInRpbWVzIjogW1syMDAsMF1dfX19LAotICAgICAgICAgICAgIyBJbmNyZW1l
bnRhbCByZXN1bHRzCi0gICAgICAgICAgICB7ImJ1aWxkcyI6IFsiNCIsICIzIl0sCi0gICAgICAg
ICAgICAgInRlc3RzIjogeyIwMDEuaHRtbCI6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJyZXN1bHRzIjogW1syLCAiSSJdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1l
cyI6IFtbMiwyXV19fX0sCi0gICAgICAgICAgICAjIEV4cGVjdGVkIHJlc3VsdHMKLSAgICAgICAg
ICAgIHsiYnVpbGRzIjogWyI0IiwgIjMiLCAiMiIsICIxIl0sCi0gICAgICAgICAgICAgInRlc3Rz
IjogeyIwMDEuaHRtbCI6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRzIjog
W1syLCJJIl0sWzIwMCwiRiJdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lcyI6
IFtbMiwyXSxbMjAwLDBdXX19fSkKLQotICAgIGRlZiB0ZXN0X21lcmdlX211bHRpcGxlX3Rlc3Rz
X211bHRpcGxlX3J1bnMoc2VsZik6Ci0gICAgICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCi0gICAgICAg
ICAgICAjIEFnZ3JlZ2F0ZWQgcmVzdWx0cwotICAgICAgICAgICAgeyJidWlsZHMiOiBbIjIiLCAi
MSJdLAotICAgICAgICAgICAgICJ0ZXN0cyI6IHsiMDAxLmh0bWwiOiB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAicmVzdWx0cyI6IFtbMjAwLCJGIl1dLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInRpbWVzIjogW1syMDAsMF1dfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIjAw
Mi5odG1sIjogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlc3VsdHMiOiBbWzEwLCJa
Il1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIjogW1sxMCwwXV19fX0sCi0g
ICAgICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMKLSAgICAgICAgICAgIHsiYnVpbGRzIjog
WyI0IiwgIjMiXSwKLSAgICAgICAgICAgICAidGVzdHMiOiB7IjAwMS5odG1sIjogewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInJlc3VsdHMiOiBbWzIsICJJIl1dLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInRpbWVzIjogW1syLDJdXX0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICIwMDIuaHRtbCI6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRzIjogW1sx
LCJDIl1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIjogW1sxLDFdXX19fSwK
LSAgICAgICAgICAgICMgRXhwZWN0ZWQgcmVzdWx0cwotICAgICAgICAgICAgeyJidWlsZHMiOiBb
IjQiLCAiMyIsICIyIiwgIjEiXSwKLSAgICAgICAgICAgICAidGVzdHMiOiB7IjAwMS5odG1sIjog
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlc3VsdHMiOiBbWzIsIkkiXSxbMjAwLCJG
Il1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIjogW1syLDJdLFsyMDAsMF1d
fSwKLSAgICAgICAgICAgICAgICAgICAgICAgIjAwMi5odG1sIjogewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInJlc3VsdHMiOiBbWzEsIkMiXSxbMTAsIloiXV0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAidGltZXMiOiBbWzEsMV0sWzEwLDBdXX19fSkKLQotICAgIGRlZiB0ZXN0
X21lcmdlX2luY3JlbWVudGFsX3Jlc3VsdF9vbGRlcl9idWlsZChzZWxmKToKLSAgICAgICAgIyBU
ZXN0IHRoZSBidWlsZCBpbiBpbmNyZW1lbnRhbCByZXN1bHRzIGlzIG9sZGVyIHRoYW4gdGhlIG1v
c3QgcmVjZW50Ci0gICAgICAgICMgYnVpbGQgaW4gYWdncmVnYXRlZCByZXN1bHRzLgotICAgICAg
ICBzZWxmLl90ZXN0X21lcmdlKAotICAgICAgICAgICAgIyBBZ2dyZWdhdGVkIHJlc3VsdHMKLSAg
ICAgICAgICAgIHsiYnVpbGRzIjogWyIzIiwgIjEiXSwKLSAgICAgICAgICAgICAidGVzdHMiOiB7
IjAwMS5odG1sIjogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlc3VsdHMiOiBbWzUs
IkYiXV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXMiOiBbWzUsMF1dfX19LAot
ICAgICAgICAgICAgIyBJbmNyZW1lbnRhbCByZXN1bHRzCi0gICAgICAgICAgICB7ImJ1aWxkcyI6
IFsiMiJdLAotICAgICAgICAgICAgICJ0ZXN0cyI6IHsiMDAxLmh0bWwiOiB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAicmVzdWx0cyI6IFtbMSwgIkYiXV0sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAidGltZXMiOiBbWzEsMF1dfX19LAotICAgICAgICAgICAgIyBFeHBlY3RlZCBu
byBtZXJnZSBoYXBwZW5zLgotICAgICAgICAgICAgeyJidWlsZHMiOiBbIjIiLCAiMyIsICIxIl0s
Ci0gICAgICAgICAgICAgInRlc3RzIjogeyIwMDEuaHRtbCI6IHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJyZXN1bHRzIjogW1s2LCJGIl1dLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInRpbWVzIjogW1s2LDBdXX19fSkKLQotICAgIGRlZiB0ZXN0X21lcmdlX2luY3JlbWVudGFs
X3Jlc3VsdF9zYW1lX2J1aWxkKHNlbGYpOgotICAgICAgICAjIFRlc3QgdGhlIGJ1aWxkIGluIGlu
Y3JlbWVudGFsIHJlc3VsdHMgaXMgc2FtZSBhcyB0aGUgYnVpbGQgaW4KLSAgICAgICAgIyBhZ2dy
ZWdhdGVkIHJlc3VsdHMuCi0gICAgICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCi0gICAgICAgICAgICAj
IEFnZ3JlZ2F0ZWQgcmVzdWx0cwotICAgICAgICAgICAgeyJidWlsZHMiOiBbIjIiLCAiMSJdLAot
ICAgICAgICAgICAgICJ0ZXN0cyI6IHsiMDAxLmh0bWwiOiB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAicmVzdWx0cyI6IFtbNSwiRiJdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJ0aW1lcyI6IFtbNSwwXV19fX0sCi0gICAgICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMK
LSAgICAgICAgICAgIHsiYnVpbGRzIjogWyIzIiwgIjIiXSwKLSAgICAgICAgICAgICAidGVzdHMi
OiB7IjAwMS5odG1sIjogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlc3VsdHMiOiBb
WzIsICJGIl1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIjogW1syLDBdXX19
fSwKLSAgICAgICAgICAgICMgRXhwZWN0ZWQgbm8gbWVyZ2UgaGFwcGVucy4KLSAgICAgICAgICAg
IHsiYnVpbGRzIjogWyIzIiwgIjIiLCAiMiIsICIxIl0sCi0gICAgICAgICAgICAgInRlc3RzIjog
eyIwMDEuaHRtbCI6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRzIjogW1s3
LCJGIl1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIjogW1s3LDBdXX19fSkK
LQotICAgIGRlZiB0ZXN0X21lcmdlX3JlbW92ZV9uZXdfdGVzdChzZWxmKToKLSAgICAgICAgc2Vs
Zi5fdGVzdF9tZXJnZSgKLSAgICAgICAgICAgICMgQWdncmVnYXRlZCByZXN1bHRzCi0gICAgICAg
ICAgICB7ImJ1aWxkcyI6IFsiMiIsICIxIl0sCi0gICAgICAgICAgICAgInRlc3RzIjogeyIwMDEu
aHRtbCI6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRzIjogW1sxOTksICJG
Il1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIjogW1sxOTksIDBdXX0sCi0g
ICAgICAgICAgICAgICAgICAgICAgIH19LAotICAgICAgICAgICAgIyBJbmNyZW1lbnRhbCByZXN1
bHRzCi0gICAgICAgICAgICB7ImJ1aWxkcyI6IFsiMyJdLAotICAgICAgICAgICAgICJ0ZXN0cyI6
IHsiMDAxLmh0bWwiOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0cyI6IFtb
MSwgIkYiXV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXMiOiBbWzEsIDBdXX0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICIwMDIuaHRtbCI6IHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJyZXN1bHRzIjogW1sxLCAiUCJdXSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJ0aW1lcyI6IFtbMSwgMF1dfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIjAwMy5odG1s
IjogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlc3VsdHMiOiBbWzEsICJOIl1dLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIjogW1sxLCAwXV19LAotICAgICAgICAg
ICAgICAgICAgICAgICAiMDA0Lmh0bWwiOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAi
cmVzdWx0cyI6IFtbMSwgIlgiXV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXMi
OiBbWzEsIDBdXX0sCi0gICAgICAgICAgICAgICAgICAgICAgIH19LAotICAgICAgICAgICAgIyBF
eHBlY3RlZCByZXN1bHRzCi0gICAgICAgICAgICB7ImJ1aWxkcyI6IFsiMyIsICIyIiwgIjEiXSwK
LSAgICAgICAgICAgICAidGVzdHMiOiB7IjAwMS5odG1sIjogewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInJlc3VsdHMiOiBbWzIwMCwgIkYiXV0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAidGltZXMiOiBbWzIwMCwgMF1dfSwKLSAgICAgICAgICAgICAgICAgICAgICAgfX0sCi0g
ICAgICAgICAgICBtYXhfYnVpbGRzPTIwMCkKLQotCi0gICAgZGVmIHRlc3RfbWVyZ2VfcmVtb3Zl
X3Rlc3Qoc2VsZik6Ci0gICAgICAgIHNlbGYuX3Rlc3RfbWVyZ2UoCi0gICAgICAgICAgICAjIEFn
Z3JlZ2F0ZWQgcmVzdWx0cwotICAgICAgICAgICAgeyJidWlsZHMiOiBbIjIiLCAiMSJdLAotICAg
ICAgICAgICAgICJ0ZXN0cyI6IHsiMDAxLmh0bWwiOiB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAicmVzdWx0cyI6IFtbMjAwLCJQIl1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
InRpbWVzIjogW1syMDAsMF1dfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIjAwMi5odG1sIjog
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlc3VsdHMiOiBbWzEwLCJGIl1dLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIjogW1sxMCwwXV19LAotICAgICAgICAgICAg
ICAgICAgICAgICAiMDAzLmh0bWwiOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAicmVz
dWx0cyI6IFtbMTkwLCAnWCddLCBbOSwgJ04nXSwgWzEsIkYiXV0sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAidGltZXMiOiBbWzIwMCwwXV19LAotICAgICAgICAgICAgICAgICAgICAgICB9
fSwKLSAgICAgICAgICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cwotICAgICAgICAgICAgeyJidWls
ZHMiOiBbIjMiXSwKLSAgICAgICAgICAgICAidGVzdHMiOiB7IjAwMS5odG1sIjogewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInJlc3VsdHMiOiBbWzEsIlAiXV0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAidGltZXMiOiBbWzEsMF1dfSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IjAwMi5odG1sIjogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlc3VsdHMiOiBbWzEs
IlAiXV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXMiOiBbWzEsMF1dfSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIjAwMy5odG1sIjogewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInJlc3VsdHMiOiBbWzEsIlAiXV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAi
dGltZXMiOiBbWzEsMF1dfSwKLSAgICAgICAgICAgICAgICAgICAgICAgfX0sCi0gICAgICAgICAg
ICAjIEV4cGVjdGVkIHJlc3VsdHMKLSAgICAgICAgICAgIHsiYnVpbGRzIjogWyIzIiwgIjIiLCAi
MSJdLAotICAgICAgICAgICAgICJ0ZXN0cyI6IHsiMDAyLmh0bWwiOiB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAicmVzdWx0cyI6IFtbMSwiUCJdLFsxMCwiRiJdXSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJ0aW1lcyI6IFtbMTEsMF1dfX19LAotICAgICAgICAgICAgbWF4X2J1
aWxkcz0yMDApCi0KLSAgICBkZWYgdGVzdF9tZXJnZV9rZWVwX3Rlc3Rfd2l0aF9hbGxfcGFzc19i
dXRfc2xvd190aW1lKHNlbGYpOgotICAgICAgICAjIERvIG5vdCByZW1vdmUgdGVzdCB3aGVyZSBh
bGwgcnVuIHBhc3MgYnV0IG1heCBydW5uaW5nIHRpbWUgPj0gNSBzZWNvbmRzCi0gICAgICAgIHNl
bGYuX3Rlc3RfbWVyZ2UoCi0gICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVzdWx0cwotICAgICAg
ICAgICAgeyJidWlsZHMiOiBbIjIiLCAiMSJdLAotICAgICAgICAgICAgICJ0ZXN0cyI6IHsiMDAx
Lmh0bWwiOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0cyI6IFtbMjAwLCJQ
Il1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIjogW1syMDAsanNvbnJlc3Vs
dHMuSlNPTl9SRVNVTFRTX01JTl9USU1FXV19LAotICAgICAgICAgICAgICAgICAgICAgICAiMDAy
Lmh0bWwiOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0cyI6IFtbMTAsIkYi
XV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXMiOiBbWzEwLDBdXX19fSwKLSAg
ICAgICAgICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cwotICAgICAgICAgICAgeyJidWlsZHMiOiBb
IjMiXSwKLSAgICAgICAgICAgICAidGVzdHMiOiB7IjAwMS5odG1sIjogewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInJlc3VsdHMiOiBbWzEsIlAiXV0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAidGltZXMiOiBbWzEsMV1dfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIjAwMi5o
dG1sIjogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlc3VsdHMiOiBbWzEsIlAiXV0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXMiOiBbWzEsMF1dfX19LAotICAgICAg
ICAgICAgIyBFeHBlY3RlZCByZXN1bHRzCi0gICAgICAgICAgICB7ImJ1aWxkcyI6IFsiMyIsICIy
IiwgIjEiXSwKLSAgICAgICAgICAgICAidGVzdHMiOiB7IjAwMS5odG1sIjogewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInJlc3VsdHMiOiBbWzIwMSwiUCJdXSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJ0aW1lcyI6IFtbMSwxXSxbMjAwLGpzb25yZXN1bHRzLkpTT05fUkVTVUxU
U19NSU5fVElNRV1dfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIjAwMi5odG1sIjogewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInJlc3VsdHMiOiBbWzEsIlAiXSxbMTAsIkYiXV0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXMiOiBbWzExLDBdXX19fSkKLQotICAgIGRl
ZiB0ZXN0X21lcmdlX3BydW5lX2V4dHJhX3Jlc3VsdHMoc2VsZik6Ci0gICAgICAgICMgUmVtb3Zl
IGl0ZW1zIGZyb20gdGVzdCByZXN1bHRzIGFuZCB0aW1lcyB0aGF0IGV4Y2VlZCB0aGUgbWF4IG51
bWJlcgotICAgICAgICAjIG9mIGJ1aWxkcyB0byB0cmFjay4KLSAgICAgICAgbWF4X2J1aWxkcyA9
IGpzb25yZXN1bHRzLkpTT05fUkVTVUxUU19NQVhfQlVJTERTCi0gICAgICAgIHNlbGYuX3Rlc3Rf
bWVyZ2UoCi0gICAgICAgICAgICAjIEFnZ3JlZ2F0ZWQgcmVzdWx0cwotICAgICAgICAgICAgeyJi
dWlsZHMiOiBbIjIiLCAiMSJdLAotICAgICAgICAgICAgICJ0ZXN0cyI6IHsiMDAxLmh0bWwiOiB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0cyI6IFtbbWF4X2J1aWxkcywiRiJd
LFsxLCJJIl1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIjogW1ttYXhfYnVp
bGRzLDBdLFsxLDFdXX19fSwKLSAgICAgICAgICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cwotICAg
ICAgICAgICAgeyJidWlsZHMiOiBbIjMiXSwKLSAgICAgICAgICAgICAidGVzdHMiOiB7IjAwMS5o
dG1sIjogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlc3VsdHMiOiBbWzEsIlQiXV0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXMiOiBbWzEsMV1dfX19LAotICAgICAg
ICAgICAgIyBFeHBlY3RlZCByZXN1bHRzCi0gICAgICAgICAgICB7ImJ1aWxkcyI6IFsiMyIsICIy
IiwgIjEiXSwKLSAgICAgICAgICAgICAidGVzdHMiOiB7IjAwMS5odG1sIjogewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInJlc3VsdHMiOiBbWzEsIlQiXSxbbWF4X2J1aWxkcywiRiJdXSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lcyI6IFtbMSwxXSxbbWF4X2J1aWxkcyww
XV19fX0pCi0KLSAgICBkZWYgdGVzdF9tZXJnZV9wcnVuZV9leHRyYV9yZXN1bHRzX3NtYWxsKHNl
bGYpOgotICAgICAgICAjIFJlbW92ZSBpdGVtcyBmcm9tIHRlc3QgcmVzdWx0cyBhbmQgdGltZXMg
dGhhdCBleGNlZWQgdGhlIG1heCBudW1iZXIKLSAgICAgICAgIyBvZiBidWlsZHMgdG8gdHJhY2ss
IHVzaW5nIHNtYWxsZXIgdGhyZXNob2xkLgotICAgICAgICBtYXhfYnVpbGRzID0ganNvbnJlc3Vs
dHMuSlNPTl9SRVNVTFRTX01BWF9CVUlMRFNfU01BTEwKLSAgICAgICAgc2VsZi5fdGVzdF9tZXJn
ZSgKLSAgICAgICAgICAgICMgQWdncmVnYXRlZCByZXN1bHRzCi0gICAgICAgICAgICB7ImJ1aWxk
cyI6IFsiMiIsICIxIl0sCi0gICAgICAgICAgICAgInRlc3RzIjogeyIwMDEuaHRtbCI6IHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRzIjogW1ttYXhfYnVpbGRzLCJGIl0sWzEs
IkkiXV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXMiOiBbW21heF9idWlsZHMs
MF0sWzEsMV1dfX19LAotICAgICAgICAgICAgIyBJbmNyZW1lbnRhbCByZXN1bHRzCi0gICAgICAg
ICAgICB7ImJ1aWxkcyI6IFsiMyJdLAotICAgICAgICAgICAgICJ0ZXN0cyI6IHsiMDAxLmh0bWwi
OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0cyI6IFtbMSwiVCJdXSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lcyI6IFtbMSwxXV19fX0sCi0gICAgICAgICAg
ICAjIEV4cGVjdGVkIHJlc3VsdHMKLSAgICAgICAgICAgIHsiYnVpbGRzIjogWyIzIiwgIjIiLCAi
MSJdLAotICAgICAgICAgICAgICJ0ZXN0cyI6IHsiMDAxLmh0bWwiOiB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAicmVzdWx0cyI6IFtbMSwiVCJdLFttYXhfYnVpbGRzLCJGIl1dLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIjogW1sxLDFdLFttYXhfYnVpbGRzLDBdXX19
fSwKLSAgICAgICAgICAgIGludChtYXhfYnVpbGRzKSkKLQotICAgIGRlZiB0ZXN0X21lcmdlX3By
dW5lX2V4dHJhX3Jlc3VsdHNfd2l0aF9uZXdfcmVzdWx0X29mX3NhbWVfdHlwZShzZWxmKToKLSAg
ICAgICAgIyBUZXN0IHRoYXQgbWVyZ2luZyBpbiBhIG5ldyByZXN1bHQgb2YgdGhlIHNhbWUgdHlw
ZSBhcyB0aGUgbGFzdCByZXN1bHQKLSAgICAgICAgIyBjYXVzZXMgb2xkIHJlc3VsdHMgdG8gZmFs
bCBvZmYuCi0gICAgICAgIG1heF9idWlsZHMgPSBqc29ucmVzdWx0cy5KU09OX1JFU1VMVFNfTUFY
X0JVSUxEU19TTUFMTAotICAgICAgICBzZWxmLl90ZXN0X21lcmdlKAotICAgICAgICAgICAgIyBB
Z2dyZWdhdGVkIHJlc3VsdHMKLSAgICAgICAgICAgIHsiYnVpbGRzIjogWyIyIiwgIjEiXSwKLSAg
ICAgICAgICAgICAidGVzdHMiOiB7IjAwMS5odG1sIjogewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInJlc3VsdHMiOiBbW21heF9idWlsZHMsIkYiXSxbMSwiTiJdXSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJ0aW1lcyI6IFtbbWF4X2J1aWxkcywwXSxbMSwxXV19fX0sCi0gICAg
ICAgICAgICAjIEluY3JlbWVudGFsIHJlc3VsdHMKLSAgICAgICAgICAgIHsiYnVpbGRzIjogWyIz
Il0sCi0gICAgICAgICAgICAgInRlc3RzIjogeyIwMDEuaHRtbCI6IHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJyZXN1bHRzIjogW1sxLCJGIl1dLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInRpbWVzIjogW1sxLDBdXX19fSwKLSAgICAgICAgICAgICMgRXhwZWN0ZWQgcmVzdWx0
cwotICAgICAgICAgICAgeyJidWlsZHMiOiBbIjMiLCAiMiIsICIxIl0sCi0gICAgICAgICAgICAg
InRlc3RzIjogeyIwMDEuaHRtbCI6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1
bHRzIjogW1ttYXhfYnVpbGRzLCJGIl1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInRp
bWVzIjogW1ttYXhfYnVpbGRzLDBdXX19fSwKLSAgICAgICAgICAgIGludChtYXhfYnVpbGRzKSkK
LQotICAgICMgRklYTUU6IFNvbWUgZGF0YSBnb3QgY29ycnVwdGVkIGFuZCBoYXMgcmVzdWx0cyBh
bmQgdGltZXMgYXQgdGhlIGRpcmVjdG9yeSBsZXZlbC4KLSAgICAjIE9uY2Ugd2UndmUgcHVyZ2Vk
IHRoaXMgZnJvbSBhbGwgdGhlIGRhdGEsIHdlIHNob3VsZCB0aHJvdyBhbiBlcnJvciBvbiB0aGlz
IGNhc2UuCi0gICAgZGVmIHRlc3RfbWVyZ2VfZGlyZWN0b3J5X2hpZXJhcmNoeV9leHRyYV9yZXN1
bHRzX2FuZF90aW1lcyhzZWxmKToKLSAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKLSAgICAgICAg
ICAgICMgQWdncmVnYXRlZCByZXN1bHRzCi0gICAgICAgICAgICB7ImJ1aWxkcyI6IFsiMiIsICIx
Il0sCi0gICAgICAgICAgICAgInRlc3RzIjogeyJiYXoiOiB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIjAwMy5odG1sIjogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
cmVzdWx0cyI6IFtbMjUsIkYiXV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0
aW1lcyI6IFtbMjUsMF1dfX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0cyI6IFtb
MjUsIkYiXV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAidGltZXMiOiBbWzI1LDBdXX19LAot
ICAgICAgICAgICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cwotICAgICAgICAgICAgIHsiYnVpbGRz
IjogWyIzIl0sCi0gICAgICAgICAgICAgInRlc3RzIjogeyJiYXoiOiB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIjAwMy5odG1sIjogewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAicmVzdWx0cyI6IFtbMSwiRiJdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInRpbWVzIjogW1sxLDBdXX19fX0sCi0gICAgICAgICAgICAgIyBFeHBlY3RlZCByZXN1bHRz
Ci0gICAgICAgICAgICAgeyJidWlsZHMiOiBbIjMiLCAiMiIsICIxIl0sCi0gICAgICAgICAgICAg
InRlc3RzIjogeyJiYXoiOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAwMy5odG1s
IjogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0cyI6IFtbMjYsIkYi
XV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lcyI6IFtbMjYsMF1dfX19
LAotICAgICAgICAgICAgICAidmVyc2lvbiI6IDR9KQotCi0gICAgZGVmIHRlc3RfbWVyZ2VfYnVp
bGRfZGlyZWN0b3J5X2hpZXJhcmNoeShzZWxmKToKLSAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgK
LSAgICAgICAgICAgICMgQWdncmVnYXRlZCByZXN1bHRzCi0gICAgICAgICAgICB7ImJ1aWxkcyI6
IFsiMiIsICIxIl0sCi0gICAgICAgICAgICAgInRlc3RzIjogeyJiYXIiOiB7ImJheiI6IHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICIwMDMuaHRtbCI6IHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInJlc3VsdHMiOiBbWzI1LCJGIl1dLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAidGltZXMiOiBbWzI1LDBdXX19fSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgImZvbyI6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIwMDEuaHRtbCI6IHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlc3VsdHMiOiBbWzUwLCJGIl1dLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXMiOiBbWzUwLDBdXX0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAiMDAyLmh0bWwiOiB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJyZXN1bHRzIjogW1sxMDAsIkkiXV0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJ0aW1lcyI6IFtbMTAwLDBdXX19fSwKLSAgICAgICAgICAgICAgInZlcnNpb24i
OiA0fSwKLSAgICAgICAgICAgICMgSW5jcmVtZW50YWwgcmVzdWx0cwotICAgICAgICAgICAgeyJi
dWlsZHMiOiBbIjMiXSwKLSAgICAgICAgICAgICAidGVzdHMiOiB7ImJheiI6IHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIwMDQuaHRtbCI6IHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAicmVzdWx0cyI6IFtbMSwiSSJdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAidGltZXMiOiBbWzEsMF1dfX0sCi0gICAgICAgICAgICAgICAgICAgICAgICJmb28iOiB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAiMDAxLmh0bWwiOiB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInJlc3VsdHMiOiBbWzEsIkYiXV0sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInRpbWVzIjogW1sxLDBdXX0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAiMDAyLmh0bWwiOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlc3Vs
dHMiOiBbWzEsIkkiXV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIjog
W1sxLDBdXX19fSwKLSAgICAgICAgICAgICAidmVyc2lvbiI6IDR9LAotICAgICAgICAgICAgIyBF
eHBlY3RlZCByZXN1bHRzCi0gICAgICAgICAgICB7ImJ1aWxkcyI6IFsiMyIsICIyIiwgIjEiXSwK
LSAgICAgICAgICAgICAidGVzdHMiOiB7ImJhciI6IHsiYmF6IjogewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIjAwMy5odG1sIjogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJyZXN1bHRzIjogW1sxLCJOIl0sWzI1LCJGIl1dLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJ0aW1lcyI6IFtbMjYsMF1dfX19LAotICAgICAgICAgICAgICAgICAgICAgICAiYmF6
IjogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAwNC5odG1sIjogewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRzIjogW1sxLCJJIl1dLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJ0aW1lcyI6IFtbMSwwXV19fSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgImZvbyI6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIwMDEuaHRtbCI6IHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVzdWx0cyI6IFtbNTEsIkYiXV0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIjogW1s1MSwwXV19LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIjAwMi5odG1sIjogewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJyZXN1bHRzIjogW1sxMDEsIkkiXV0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInRpbWVzIjogW1sxMDEsMF1dfX19LAotICAgICAgICAgICAgICJ2ZXJzaW9uIjog
NH0pCi0KLSAgICAjIEZJWE1FKGFib3hoYWxsKTogQWRkIHNvbWUgdGVzdHMgZm9yIHhodG1sL3N2
ZyB0ZXN0IHJlc3VsdHMuCi0KLSAgICBkZWYgdGVzdF9nZXRfdGVzdF9uYW1lX2xpc3Qoc2VsZik6
Ci0gICAgICAgICMgR2V0IHRlc3QgbmFtZSBsaXN0IG9ubHkuIERvbid0IGluY2x1ZGUgbm9uLXRl
c3QtbGlzdCBkYXRhIGFuZAotICAgICAgICAjIG9mIHRlc3QgcmVzdWx0IGRldGFpbHMuCi0gICAg
ICAgICMgRklYTUU6IFRoaXMgYWxzbyB0ZXN0cyBhIHRlbXBvcmFyeSBidWcgaW4gdGhlIGRhdGEg
d2hlcmUgZGlyZWN0b3J5LWxldmVsCi0gICAgICAgICMgcmVzdWx0cyBoYXZlIGEgcmVzdWx0cyBh
bmQgdGltZXMgdmFsdWVzLiBPbmNlIHRoYXQgYnVnIGlzIGZpeGVkLAotICAgICAgICAjIHJlbW92
ZSB0aGlzIHRlc3QtY2FzZSBhbmQgYXNzZXJ0IHdlIGRvbid0IGV2ZXIgaGl0IGl0LgotICAgICAg
ICBzZWxmLl90ZXN0X2dldF90ZXN0X2xpc3QoCi0gICAgICAgICAgICAjIElucHV0IHJlc3VsdHMK
LSAgICAgICAgICAgIHsiYnVpbGRzIjogWyIzIiwgIjIiLCAiMSJdLAotICAgICAgICAgICAgICJ0
ZXN0cyI6IHsiZm9vIjogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAwMS5odG1sIjog
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRzIjogW1syMDAsIlAiXV0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIjogW1syMDAsMF1dfSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRzIjogW1sxLCJOIl1dLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInRpbWVzIjogW1sxLDBdXX0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICIwMDIuaHRtbCI6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRzIjog
W1sxMCwiRiJdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lcyI6IFtbMTAsMF1d
fX19LAotICAgICAgICAgICAgIyBFeHBlY3RlZCByZXN1bHRzCi0gICAgICAgICAgICB7ImZvbyI6
IHsiMDAxLmh0bWwiOnt9fSwgIjAwMi5odG1sIjp7fX0pCi0KLSAgICBkZWYgdGVzdF9ndGVzdChz
ZWxmKToKLSAgICAgICAgc2VsZi5fdGVzdF9tZXJnZSgKLSAgICAgICAgICAgICMgQWdncmVnYXRl
ZCByZXN1bHRzCi0gICAgICAgICAgICB7ImJ1aWxkcyI6IFsiMiIsICIxIl0sCi0gICAgICAgICAg
ICAgInRlc3RzIjogeyJmb28uYmFyIjogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgInJl
c3VsdHMiOiBbWzUwLCJGIl1dLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzIjog
W1s1MCwwXV19LAotICAgICAgICAgICAgICAgICAgICAgICAiZm9vLmJhcjIiOiB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAicmVzdWx0cyI6IFtbMTAwLCJJIl1dLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInRpbWVzIjogW1sxMDAsMF1dfSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgICAidmVyc2lvbiI6IDN9LAotICAgICAgICAgICAgIyBJbmNyZW1l
bnRhbCByZXN1bHRzCi0gICAgICAgICAgICB7ImJ1aWxkcyI6IFsiMyJdLAotICAgICAgICAgICAg
ICJ0ZXN0cyI6IHsiZm9vLmJhcjIiOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAicmVz
dWx0cyI6IFtbMSwiSSJdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lcyI6IFtb
MSwwXV19LAotICAgICAgICAgICAgICAgICAgICAgICAiZm9vLmJhcjMiOiB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAicmVzdWx0cyI6IFtbMSwiRiJdXSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJ0aW1lcyI6IFtbMSwwXV19LAotICAgICAgICAgICAgICAgICAgICAgICB9LAot
ICAgICAgICAgICAgICJ2ZXJzaW9uIjogNH0sCi0gICAgICAgICAgICAjIEV4cGVjdGVkIHJlc3Vs
dHMKLSAgICAgICAgICAgIHsiYnVpbGRzIjogWyIzIiwgIjIiLCAiMSJdLAotICAgICAgICAgICAg
ICJ0ZXN0cyI6IHsiZm9vLmJhciI6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1
bHRzIjogW1sxLCAiTiJdLCBbNTAsIkYiXV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAi
dGltZXMiOiBbWzUxLDBdXX0sCi0gICAgICAgICAgICAgICAgICAgICAgICJmb28uYmFyMiI6IHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRzIjogW1sxMDEsIkkiXV0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAidGltZXMiOiBbWzEwMSwwXV19LAotICAgICAgICAgICAg
ICAgICAgICAgICAiZm9vLmJhcjMiOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAicmVz
dWx0cyI6IFtbMSwiRiJdXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lcyI6IFtb
MSwwXV19LAotICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICJ2ZXJzaW9u
IjogNH0pCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdW5pdHRlc3QubWFpbigp
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL2pzb25y
ZXN1bHRzX3VuaXR0ZXN0LnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmV4ZWN1dGFibGUKIyMg
LTEgKzAsMCAjIwotKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBUb29s
cy9UZXN0UmVzdWx0U2VydmVyL21vZGVsL3Rlc3RmaWxlLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvdGVzdGZpbGUucHkJKHJldmlzaW9uIDI2NDUyNykKKysr
IFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvbW9kZWwvdGVzdGZpbGUucHkJKG5vbmV4aXN0ZW50KQpA
QCAtMSwxMTEgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0Ogot
IwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWZyb20gZGF0ZXRpbWUgaW1wb3J0
IGRhdGV0aW1lCi1pbXBvcnQgbG9nZ2luZwotCi1mcm9tIGdvb2dsZS5hcHBlbmdpbmUuZXh0IGlt
cG9ydCBkYgotCi1mcm9tIG1vZGVsLmRhdGFzdG9yZWZpbGUgaW1wb3J0IERhdGFTdG9yZUZpbGUK
LQotCi1jbGFzcyBUZXN0RmlsZShEYXRhU3RvcmVGaWxlKToKLSAgICBtYXN0ZXIgPSBkYi5TdHJp
bmdQcm9wZXJ0eSgpCi0gICAgYnVpbGRlciA9IGRiLlN0cmluZ1Byb3BlcnR5KCkKLSAgICB0ZXN0
X3R5cGUgPSBkYi5TdHJpbmdQcm9wZXJ0eSgpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYg
ZGVsZXRlX2ZpbGUoY2xzLCBrZXksIG1hc3RlciwgYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lLCBs
aW1pdCk6Ci0gICAgICAgIGlmIGtleToKLSAgICAgICAgICAgIGZpbGUgPSBkYi5nZXQoa2V5KQot
ICAgICAgICAgICAgaWYgbm90IGZpbGU6Ci0gICAgICAgICAgICAgICAgbG9nZ2luZy53YXJuaW5n
KCJGaWxlIG5vdCBmb3VuZCwga2V5OiAlcy4iLCBrZXkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCi0KLSAgICAgICAgICAgIGZpbGUuX2RlbGV0ZV9hbGwoKQotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgZmlsZXMgPSBjbHMuZ2V0X2ZpbGVzKG1hc3RlciwgYnVpbGRlciwgdGVzdF90
eXBlLCBuYW1lLCBsaW1pdCkKLSAgICAgICAgICAgIGlmIG5vdCBmaWxlczoKLSAgICAgICAgICAg
ICAgICBsb2dnaW5nLndhcm5pbmcoCi0gICAgICAgICAgICAgICAgICAgICJGaWxlIG5vdCBmb3Vu
ZCwgbWFzdGVyOiAlcywgYnVpbGRlcjogJXMsIHRlc3RfdHlwZTolcywgbmFtZTogJXMuIiwKLSAg
ICAgICAgICAgICAgICAgICAgYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lKQotICAgICAgICAgICAg
ICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKLSAgICAg
ICAgICAgICAgICBmaWxlLl9kZWxldGVfYWxsKCkKLQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0g
ICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGdldF9maWxlcyhjbHMsIG1hc3RlciwgYnVpbGRlciwg
dGVzdF90eXBlLCBuYW1lLCBsb2FkX2RhdGE9VHJ1ZSwgbGltaXQ9MSk6Ci0gICAgICAgIHF1ZXJ5
ID0gVGVzdEZpbGUuYWxsKCkKLSAgICAgICAgaWYgbWFzdGVyOgotICAgICAgICAgICAgcXVlcnkg
PSBxdWVyeS5maWx0ZXIoIm1hc3RlciA9IiwgbWFzdGVyKQotICAgICAgICBpZiBidWlsZGVyOgot
ICAgICAgICAgICAgcXVlcnkgPSBxdWVyeS5maWx0ZXIoImJ1aWxkZXIgPSIsIGJ1aWxkZXIpCi0g
ICAgICAgIGlmIHRlc3RfdHlwZToKLSAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkuZmlsdGVyKCJ0
ZXN0X3R5cGUgPSIsIHRlc3RfdHlwZSkKLSAgICAgICAgaWYgbmFtZToKLSAgICAgICAgICAgIHF1
ZXJ5ID0gcXVlcnkuZmlsdGVyKCJuYW1lID0iLCBuYW1lKQotCi0gICAgICAgIGZpbGVzID0gcXVl
cnkub3JkZXIoIi1kYXRlIikuZmV0Y2gobGltaXQpCi0gICAgICAgIGlmIGxvYWRfZGF0YToKLSAg
ICAgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgotICAgICAgICAgICAgICAgIGZpbGUubG9hZF9k
YXRhKCkKLQotICAgICAgICByZXR1cm4gZmlsZXMKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRl
ZiBhZGRfZmlsZShjbHMsIG1hc3RlciwgYnVpbGRlciwgdGVzdF90eXBlLCBuYW1lLCBkYXRhKToK
LSAgICAgICAgZmlsZSA9IFRlc3RGaWxlKCkKLSAgICAgICAgZmlsZS5tYXN0ZXIgPSBtYXN0ZXIK
LSAgICAgICAgZmlsZS5idWlsZGVyID0gYnVpbGRlcgotICAgICAgICBmaWxlLnRlc3RfdHlwZSA9
IHRlc3RfdHlwZQotICAgICAgICBmaWxlLm5hbWUgPSBuYW1lCi0KLSAgICAgICAgaWYgbm90IGZp
bGUuc2F2ZShkYXRhKToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgbG9nZ2lu
Zy5pbmZvKAotICAgICAgICAgICAgIkZpbGUgc2F2ZWQsIG1hc3RlcjogJXMsIGJ1aWxkZXI6ICVz
LCB0ZXN0X3R5cGU6ICVzLCBuYW1lOiAlcywga2V5OiAlcy4iLAotICAgICAgICAgICAgbWFzdGVy
LCBidWlsZGVyLCB0ZXN0X3R5cGUsIGZpbGUubmFtZSwgc3RyKGZpbGUuZGF0YV9rZXlzKSkKLQot
ICAgICAgICByZXR1cm4gZmlsZQotCi0gICAgZGVmIHNhdmUoc2VsZiwgZGF0YSk6Ci0gICAgICAg
IGlmIG5vdCBzZWxmLnNhdmVfZGF0YShkYXRhKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQot
Ci0gICAgICAgIHNlbGYuZGF0ZSA9IGRhdGV0aW1lLm5vdygpCi0gICAgICAgIHNlbGYucHV0KCkK
LQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF9kZWxldGVfYWxsKHNlbGYpOgotICAg
ICAgICBzZWxmLmRlbGV0ZV9kYXRhKCkKLSAgICAgICAgc2VsZi5kZWxldGUoKQpJbmRleDogVG9v
bHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9MSUNFTlNFLmR5Z3JhcGgudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMv
TElDRU5TRS5keWdyYXBoLnR4dAkocmV2aXNpb24gMjY0NTI3KQorKysgVG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9MSUNFTlNFLmR5Z3JhcGgudHh0CShub25leGlzdGVu
dCkKQEAgLTEsMjIgKzAsMCBAQAotQ29weXJpZ2h0IChjKSAyMDA5IERhbiBWYW5kZXJrYW0KLQot
UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJz
b24KLW9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1
bWVudGF0aW9uCi1maWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy
ZSB3aXRob3V0Ci1yZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUg
cmlnaHRzIHRvIHVzZSwKLWNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs
IHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi1jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8g
cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLVNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz
bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCi1jb25kaXRpb25zOgotCi1UaGUgYWJvdmUgY29w
eXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQotaW5jbHVk
ZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUu
Ci0KLVRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9G
IEFOWSBLSU5ELAotRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE
IFRPIFRIRSBXQVJSQU5USUVTCi1PRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFORAotTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKLUhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s
IERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAotV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O
VFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCi1GUk9NLCBPVVQgT0YgT1IgSU4gQ09O
TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCi1PVEhFUiBERUFMSU5HUyBJ
TiBUSEUgU09GVFdBUkUuCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9UZXN0UmVzdWx0U2Vy
dmVyL3N0YXRpYy1kYXNoYm9hcmRzL0xJQ0VOU0UuZHlncmFwaC50eHQKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxl
dGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLUxGClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgcHJvcGVydHkKSW5kZXg6IFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2Fy
ZHMvUkVBRE1FLmR5Z3JhcGgudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RSZXN1bHRTZXJ2
ZXIvc3RhdGljLWRhc2hib2FyZHMvUkVBRE1FLmR5Z3JhcGgudHh0CShyZXZpc2lvbiAyNjQ1Mjcp
CisrKyBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL1JFQURNRS5keWdy
YXBoLnR4dAkobm9uZXhpc3RlbnQpCkBAIC0xLDU1ICswLDAgQEAKLWR5Z3JhcGhzIEphdmFTY3Jp
cHQgY2hhcnRpbmcgbGlicmFyeQotQ29weXJpZ2h0IChjKSAyMDA2LSwgRGFuIFZhbmRlcmthbS4K
LQotU3VwcG9ydDogaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2R5Z3JhcGhzLXVzZXJz
Ci1Tb3VyY2U6IGh0dHA6Ly9naXRodWIuY29tL2RhbnZrL2R5Z3JhcGhzCi1Jc3N1ZXM6IGh0dHA6
Ly9jb2RlLmdvb2dsZS5jb20vcC9keWdyYXBocy8KLQotCi1UaGUgZHlncmFwaHMgSmF2YVNjcmlw
dCBsaWJyYXJ5IHByb2R1Y2VzIHByb2R1Y2VzIGludGVyYWN0aXZlLCB6b29tYWJsZSBjaGFydHMg
b2YgdGltZSBzZXJpZXMuCi0KLUZlYXR1cmVzCi0tIFBsb3RzIHRpbWUgc2VyaWVzIHdpdGhvdXQg
dXNpbmcgYW4gZXh0ZXJuYWwgc2VydmVyIG9yIEZsYXNoCi0tIFN1cHBvcnRzIG11bHRpcGxlIGRh
dGEgc2VyaWVzCi0tIFN1cHBvcnRzIGVycm9yIGJhbmRzIGFyb3VuZCBkYXRhIHNlcmllcwotLSBE
aXNwbGF5cyB2YWx1ZXMgb24gbW91c2VvdmVyCi0tIEludGVyYWN0aXZlIHpvb20KLS0gQWRqdXN0
YWJsZSBhdmVyYWdpbmcgcGVyaW9kCi0tIEN1c3RvbWl6YWJsZSBjbGljay10aHJvdWdoIGFjdGlv
bnMKLS0gQ29tcGF0aWJsZSB3aXRoIHRoZSBHb29nbGUgVmlzdWFsaXphdGlvbiBBUEkKLQotRGVt
bwotRm9yIGEgZ2FsbGVyeSBhbmQgZG9jdW1lbnRhdGlvbiwgc2VlIGh0dHA6Ly9kYW52ay5vcmcv
ZHlncmFwaHMvCi0KLU1pbmltYWwgRXhhbXBsZQotPGh0bWw+Ci08aGVhZD4KLTxzY3JpcHQgdHlw
ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImR5Z3JhcGgtY29tYmluZWQuanMiPjwvc2NyaXB0Pgot
PC9oZWFkPgotPGJvZHk+Ci08ZGl2IGlkPSJncmFwaGRpdiI+PC9kaXY+Ci08c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCI+Ci0gIGcgPSBuZXcgRHlncmFwaCgKLSAgICAgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImdyYXBoZGl2IiksICAvLyBjb250YWluaW5nIGRpdgotICAgICAgICAi
RGF0ZSxUZW1wZXJhdHVyZVxuIiArICAgICAgICAgICAgICAgIC8vIHRoZSBkYXRhIHNlcmllcwot
ICAgICAgICAiMjAwOC0wNS0wNyw3NVxuIiArCi0gICAgICAgICIyMDA4LTA1LTA4LDcwXG4iICsK
LSAgICAgICAgIjIwMDgtMDUtMDksODBcbiIKLSAgICAgICk7Ci08L3NjcmlwdD4KLTwvYm9keT4K
LTwvaHRtbD4KLQotTGljZW5zZShzKQotZHlncmFwaHMgdXNlczoKLSAtIHJnYmNvbG9yLmpzIChQ
dWJsaWMgRG9tYWluKQotIC0gc3RyZnRpbWUuanMgKEJTRCBMaWNlbnNlKQotIC0gZXhjYW52YXMu
anMgKEFwYWNoZSBMaWNlbnNlKQotIC0gWVVJIGNvbXByZXNzb3IgKEJTRCBMaWNlbnNlKQotCi1y
Z2Jjb2xvcjogaHR0cDovL3d3dy5waHBpZWQuY29tL3JnYi1jb2xvci1wYXJzZXItaW4tamF2YXNj
cmlwdC8KLXN0cmZ0aW1lOiBodHRwOi8vdGVjaC5ibHVlc21vb24uaW5mby8yMDA4LzA0L3N0cmZ0
aW1lLWluLWphdmFzY3JpcHQuaHRtbAotZXhjYW52YXM6IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20v
cC9leHBsb3JlcmNhbnZhcy8KLXl1aSBjb21wcmVzc29yOiBodHRwOi8vZGV2ZWxvcGVyLnlhaG9v
LmNvbS95dWkvY29tcHJlc3Nvci8KLQotZHlncmFwaHMgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSBN
SVQgbGljZW5zZSwgaW5jbHVkZWQgaW4gTElDRU5TRS50eHQuCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL1JFQURNRS5keWdyYXBo
LnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotTEYK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogVG9vbHMvVGVzdFJlc3VsdFNl
cnZlci9zdGF0aWMtZGFzaGJvYXJkcy9SRUFETUUud2VidHJlZW1hcC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9SRUFETUUud2VidHJl
ZW1hcC50eHQJKHJldmlzaW9uIDI2NDUyNykKKysrIFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3Rh
dGljLWRhc2hib2FyZHMvUkVBRE1FLndlYnRyZWVtYXAudHh0CShub25leGlzdGVudCkKQEAgLTEs
NjMgKzAsMCBAQAotIyB3ZWJ0cmVlbWFwCi0KLUEgc2ltcGxlIHRyZWVtYXAgaW1wbGVtZW50YXRp
b24gdXNpbmcgd2ViIHRlY2hub2xvZ2llcyAoRE9NIG5vZGVzLCBDU1MKLXN0eWxpbmcgYW5kIHRy
YW5zaXRpb25zKSByYXRoZXIgdGhhbiBhIGJpZyBjYW52YXMvc3ZnL3BsdWdpbi4KLQotUGxheSB3
aXRoIGEgW2RlbW9dW10uCi0KLVtkZW1vXTogaHR0cDovL21hcnRpbmUuZ2l0aHViLmNvbS93ZWJ0
cmVlbWFwL2RlbW8vZGVtby5odG1sCi0KLSMjIENyZWF0aW5nIHlvdXIgb3duCi0KLTEuIENyZWF0
ZSBhIHBhZ2Ugd2l0aCBhIERPTSBub2RlIChpLmUuIGEgYDxkaXY+YCkgdGhhdCB3aWxsIGNvbnRh
aW4KLSAgIHlvdXIgdHJlZW1hcC4KLTIuIEFkZCB0aGUgdHJlZW1hcCB0byB0aGUgbm9kZSB2aWEg
c29tZXRoaW5nIGxpa2UKLQotICAgICAgICBhcHBlbmRUcmVlbWFwKGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdteW5vZGUnKSwgbXlkYXRhKTsKLTMuIFN0eWxlIHRoZSB0cmVlbWFwIHVzaW5nIENT
Uy4KLQotIyMjIElucHV0IGZvcm1hdAotCi1UaGUgaW5wdXQgZGF0YSAoYG15ZGF0YWAgaW4gdGhl
IG92ZXJ2aWV3IHNuaXBwZXQpIGlzIGEgdHJlZSBvZiBub2RlcywKLWxpa2VseSBpbXBvcnRlZCB2
aWEgYSBzZXBhcmF0ZSBKU09OIGZpbGUuICBFYWNoIG5vZGUgKGluY2x1ZGluZyB0aGUKLXJvb3Qp
IHNob3VsZCBjb250YWluIGRhdGEgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQuCi0KLSAgICB7Ci0g
ICAgICBuYW1lOiAoSFRNTCB0aGF0IGlzIGRpc3BsYXllZCB2aWEgLmlubmVySFRNTCBvbiB0aGUg
Y2FwdGlvbiksCi0gICAgICBkYXRhOiB7Ci0gICAgICAgICIkYXJlYSI6IChhIG51bWJlciwgaW4g
YXJiaXRyYXJ5IHVuaXRzKQotICAgICAgfSwKLSAgICAgIGNoaWxkcmVuOiAobGlzdCBvZiBjaGls
ZCB0cmVlIG5vZGVzKQotICAgIH0KLQotKFRoaXMgc3RyYW5nZSBmb3JtYXQgZm9yIGRhdGEgY29t
ZXMgZnJvbSB0aGUgdGhlIFtKYXZhU2NyaXB0IEluZm9WaXMKLVRvb2xraXRdW3RoZWppdF0uICBJ
IG1pZ2h0IGNoYW5nZSBpdCBpbiB0aGUgZnV0dXJlLikKLQotVGhlIGAkYXJlYWAgb2YgYSBub2Rl
IHNob3VsZCBiZSB0aGUgc3VtIG9mIHRoZSBgJGFyZWFgIG9mIGFsbCBvZiBpdHMKLWBjaGlsZHJl
bmAuCi0KLShBdCBydW50aW1lLCB0cmVlIG5vZGVzIHdpbGwgZHluYW1pY2FsbHkgd2lsbCBnYWlu
IHR3byBleHRyYQotYXR0cmlidXRlcywgYHBhcmVudGAgYW5kIGBkb21gOyB0aGlzIGlzIG9ubHkg
d29ydGggcG9pbnRpbmcgb3V0IHNvCi10aGF0IHlvdSBkb24ndCBhY2NpZGVudGFsbHkgY29uZmxp
Y3Qgd2l0aCB0aGVtLikKLQotIyMjIENTUyBzdHlsaW5nCi0KLVRoZSB0cmVlbWFwIGlzIGNvbnN0
cnVjdGVkIHdpdGggb25lIGBkaXZgIHBlciByZWdpb24gd2l0aCBhIHNlcGFyYXRlCi1gZGl2YCBm
b3IgdGhlIGNhcHRpb24uICBFYWNoIGRpdiBpcyBzdHlsZWFibGUgdmlhIHRoZQotYHdlYnRyZWVt
YXAtbm9kZWAgQ1NTIGNsYXNzLiAgVGhlIGNhcHRpb25zIGFyZSBzdHlsYWJsZSBhcwotYHdlYnRy
ZWVtYXAtY2FwdGlvbmAuCi0KLUVhY2ggbGV2ZWwgb2YgdGhlIHRyZWUgYWxzbyBnZXRzIGEgcGVy
LWxldmVsIENTUyBjbGFzcywKLWB3ZWJ0cmVlbWFwLWxldmVsMGAgdGhyb3VnaCBgd2VidHJlZW1h
cC1sZXZlbDRgLiAgVGhlc2UgY2FuIGJlCi1hZGp1c3RlZCB0byBlLmcuIG1hZGUgZGlmZmVyZW50
IGxldmVscyBkaWZmZXJlbnQgY29sb3JzLiAgVG8gY29udHJvbAotdGhlIGNhcHRpb24gb24gYSBw
ZXItbGV2ZWwgYmFzaXMsIHVzZSBhIENTUyBzZWxlY3RvciBsaWtlCi1gLndlYnRyZWVtYXAtbGV2
ZWwyID4gLndlYnRyZWVtYXAtY2FwdGlvbmAuCi0KLVlvdXIgYmVzdCBiZXQgaXMgdG8gbW9kaWZ5
IHRoZSBpbmNsdWRlZCBgd2VidHJlZW1hcC5jc3NgLCB3aGljaAotY29udGFpbnMgY29tbWVudHMg
YWJvdXQgcmVxdWlyZWQgYW5kIG9wdGlvbmFsIENTUyBhdHRyaWJ1dGVzLgotCi0jIyBSZWxhdGVk
IHByb2plY3RzCi0KLSogW0phdmFTY3JpcHQgSW5mb1ZpcyBUb29sa2l0XVt0aGVqaXRdCi0KLVt0
aGVqaXRdOiBodHRwOi8vdGhlaml0Lm9yZy8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9h
cmRzL1JFQURNRS53ZWJ0cmVlbWFwLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5
bGUKIyMgLTEgKzAsMCAjIwotTEYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRl
eDogVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9hZ2dyZWdhdGVfcmVz
dWx0cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRh
c2hib2FyZHMvYWdncmVnYXRlX3Jlc3VsdHMuaHRtbAkocmV2aXNpb24gMjY0NTI3KQorKysgVG9v
bHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9hZ2dyZWdhdGVfcmVzdWx0cy5o
dG1sCShub25leGlzdGVudCkKQEAgLTEsNjIgKzAsMCBAQAotPCEtLSBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi1tZXQ6Ci0KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci1ub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi1jb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi1p
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi1kaXN0cmlidXRpb24uCi0gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi1jb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLUxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLU9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi1EQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLVRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLShJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLS0tPgotPCFET0NUWVBFIEhUTUw+Ci08aHRtbD4KLQotPGhlYWQ+Ci08dGl0bGU+TGF5
b3V0IHRlc3QgcGFzc2luZyBzdGF0dXM8L3RpdGxlPgotPHN0eWxlPgotaDIgewotICAgIG1hcmdp
bjogMDsKLSAgICBmb250LXNpemU6IDEuMmVtOwotfQotaDMgewotICAgIG1hcmdpbi1ib3R0b206
IDA7Ci0gICAgZm9udC1zaXplOiAxZW07Ci19Ci0uY29udGFpbmVyIHsKLSAgICBkaXNwbGF5OiBp
bmxpbmUtYmxvY2s7Ci0gICAgcGFkZGluZzogM3B4OwotfQotaW1nIHsKLSAgICBib3JkZXI6IDFw
eCBkb3R0ZWQgZ3JleTsKLSAgICBtYXJnaW4tcmlnaHQ6IDVweDsKLSAgICBwYWRkaW5nOiAycHg7
Ci19Ci08L3N0eWxlPgotPHNjcmlwdCBzcmM9ImJ1aWxkZXJzLmpzIj48L3NjcmlwdD4KLTxzY3Jp
cHQgc3JjPSJsb2FkZXIuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9InN0cmluZy5qcyI+PC9z
Y3JpcHQ+Ci08c2NyaXB0IHNyYz0iaGlzdG9yeS5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0i
ZGFzaGJvYXJkX2Jhc2UuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9InVpLmpzIj48L3Njcmlw
dD4KLTxzY3JpcHQgc3JjPSJhZ2dyZWdhdGVfcmVzdWx0cy5qcyI+PC9zY3JpcHQ+Ci08L2hlYWQ+
Ci08Ym9keT48L2JvZHk+Ci08L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9UZXN0
UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2FnZ3JlZ2F0ZV9yZXN1bHRzLmh0bWwKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLUxGClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3Rh
dGljLWRhc2hib2FyZHMvYWdncmVnYXRlX3Jlc3VsdHMuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9hZ2dyZWdhdGVfcmVzdWx0cy5qcwko
cmV2aXNpb24gMjY0NTI3KQorKysgVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJv
YXJkcy9hZ2dyZWdhdGVfcmVzdWx0cy5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDI3MyArMCwwIEBA
Ci0vLyBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8g
ZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8v
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLS8vCi0vLyBAZmls
ZW92ZXJ2aWV3IENyZWF0ZXMgYSBkYXNoYm9hcmQgZm9yIHRyYWNraW5nIG51bWJlciBvZiBwYXNz
ZXMvZmFpbHVyZXMgcGVyIHJ1bi4KLS8vCi0vLyBDdXJyZW50bHksIG9ubHkgd2Via2l0IHRlc3Rz
IGFyZSBzdXBwb3J0ZWQsIGJ1dCBhZGRpbmcgb3RoZXIgdGVzdCB0eXBlcwotLy8gc2hvdWxkIGp1
c3QgcmVxdWlyZSB0aGUgZm9sbG93aW5nIHN0ZXBzOgotLy8gICAgIC1nZW5lcmF0ZSByZXN1bHRz
Lmpzb24gZm9yIHRoZXNlIHRlc3RzCi0vLyAgICAgLWNvcHkgdGhlbSB0byB0aGUgYXBwcm9wcmlh
dGUgbG9jYXRpb24KLS8vICAgICAtYWRkIHRoZSBidWlsZGVyIG5hbWUgdG8gdGhlIGxpc3Qgb2Yg
YnVpbGRlcnMgaW4gZGFzaGJvYXJkX2Jhc2UuanMuCi0KLWZ1bmN0aW9uIGdlbmVyYXRlUGFnZSho
aXN0b3J5SW5zdGFuY2UpCi17Ci0gICAgdmFyIGh0bWwgPSB1aS5odG1sLnRlc3RUeXBlU3dpdGNo
ZXIodHJ1ZSkgKyAnPGJyPic7Ci0gICAgZm9yICh2YXIgYnVpbGRlciBpbiBjdXJyZW50QnVpbGRl
cnMoKSkKLSAgICAgICAgaHRtbCArPSBodG1sRm9yQnVpbGRlcihidWlsZGVyKTsKLSAgICBkb2N1
bWVudC5ib2R5LmlubmVySFRNTCA9IGh0bWw7Ci19Ci0KLWZ1bmN0aW9uIGhhbmRsZVZhbGlkSGFz
aFBhcmFtZXRlcihoaXN0b3J5SW5zdGFuY2UsIGtleSwgdmFsdWUpCi17Ci0gICAgc3dpdGNoKGtl
eSkgewotICAgIGNhc2UgJ3Jhd1ZhbHVlcyc6Ci0gICAgICAgIGhpc3RvcnlJbnN0YW5jZS5kYXNo
Ym9hcmRTcGVjaWZpY1N0YXRlW2tleV0gPSB2YWx1ZSA9PSAndHJ1ZSc7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0K
LQotdmFyIGRlZmF1bHREYXNoYm9hcmRTcGVjaWZpY1N0YXRlVmFsdWVzID0gewotICAgIHJhd1Zh
bHVlczogZmFsc2UKLX07Ci0KLQotdmFyIGFnZ3JlZ2F0ZVJlc3VsdHNDb25maWcgPSB7Ci0gICAg
ZGVmYXVsdFN0YXRlVmFsdWVzOiBkZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVZhbHVlcywK
LSAgICBnZW5lcmF0ZVBhZ2U6IGdlbmVyYXRlUGFnZSwKLSAgICBoYW5kbGVWYWxpZEhhc2hQYXJh
bWV0ZXI6IGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlciwKLX07Ci0KLS8vIEZJWE1FKGpwYXJlbnQp
OiBFdmVudHVhbGx5IHJlbW92ZSBhbGwgdXNhZ2Ugb2YgZ2xvYmFsIGhpc3Rvcnkgb2JqZWN0Lgot
dmFyIGdfaGlzdG9yeSA9IG5ldyBoaXN0b3J5Lkhpc3RvcnkoYWdncmVnYXRlUmVzdWx0c0NvbmZp
Zyk7Ci1nX2hpc3RvcnkucGFyc2VDcm9zc0Rhc2hib2FyZFBhcmFtZXRlcnMoKTsKLQotZnVuY3Rp
b24gaHRtbEZvckJ1aWxkZXIoYnVpbGRlcikKLXsKLSAgICB2YXIgcmVzdWx0cyA9IGdfcmVzdWx0
c0J5QnVpbGRlcltidWlsZGVyXTsKLSAgICAvLyBTb21lIGtleXMgd2VyZSBhZGRlZCBsYXRlciB0
aGFuIG90aGVycywgc28gdGhleSBkb24ndCBoYXZlIGFzIG1hbnkKLSAgICAvLyBidWlsZHMuIFVz
ZSB0aGUgc2hvcnRlc3QuCi0gICAgLy8gRklYTUU6IE9uY2UgNTAwIHJ1bnMgaGF2ZSBmaW5pc2hl
ZCwgd2UgY2FuIGdldCByaWQgb2YgcGFzc2luZyB0aGlzCi0gICAgLy8gYXJvdW5kIGFuZCBqdXN0
IGFzc3VtZSBhbGwga2V5cyBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBidWlsZGVycyBmb3IgYQot
ICAgIC8vIGdpdmVuIGJ1aWxkZXIuCi0gICAgdmFyIG51bUNvbHVtbnMgPSByZXN1bHRzW0FMTF9G
SVhBQkxFX0NPVU5UX0tFWV0ubGVuZ3RoOwotICAgIHZhciBodG1sID0gJzxkaXYgY2xhc3M9Y29u
dGFpbmVyPjxoMj4nICsgYnVpbGRlciArICc8L2gyPic7Ci0KLSAgICBpZiAoZ19oaXN0b3J5LmRh
c2hib2FyZFNwZWNpZmljU3RhdGUucmF3VmFsdWVzKQotICAgICAgICBodG1sICs9IHJhd1ZhbHVl
c0hUTUwocmVzdWx0cywgbnVtQ29sdW1ucyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGh0bWwgKz0g
JzxhIGhyZWY9InRpbWVsaW5lX2V4cGxvcmVyLmh0bWwnICsgKGxvY2F0aW9uLmhhc2ggPyBsb2Nh
dGlvbi5oYXNoICsgJyYnIDogJyMnKSArICdidWlsZGVyPScgKyBidWlsZGVyICsgJyI+JyArCi0g
ICAgICAgICAgICBjaGFydEhUTUwocmVzdWx0cywgbnVtQ29sdW1ucykgKyAnPC9hPic7Ci0gICAg
fQotCi0gICAgaHRtbCArPSAnPC9kaXY+JzsKLSAgICByZXR1cm4gaHRtbDsKLX0KLQotZnVuY3Rp
b24gcmF3VmFsdWVzSFRNTChyZXN1bHRzLCBudW1Db2x1bW5zKQotewotICAgIHZhciBodG1sID0g
aHRtbEZvclN1bW1hcnlUYWJsZShyZXN1bHRzLCBudW1Db2x1bW5zKSArCi0gICAgICAgIGh0bWxG
b3JUZXN0VHlwZShyZXN1bHRzLCBGSVhBQkxFX0NPVU5UU19LRVksIEZJWEFCTEVfREVTQ1JJUFRJ
T04sIG51bUNvbHVtbnMpOwotICAgIGlmIChnX2hpc3RvcnkuaXNMYXlvdXRUZXN0UmVzdWx0cygp
KSB7Ci0gICAgICAgIGh0bWwgKz0gaHRtbEZvclRlc3RUeXBlKHJlc3VsdHMsIERFRkVSUkVEX0NP
VU5UU19LRVksIERFRkVSUkVEX0RFU0NSSVBUSU9OLCBudW1Db2x1bW5zKSArCi0gICAgICAgICAg
ICBodG1sRm9yVGVzdFR5cGUocmVzdWx0cywgV09OVEZJWF9DT1VOVFNfS0VZLCBXT05URklYX0RF
U0NSSVBUSU9OLCBudW1Db2x1bW5zKTsKLSAgICB9Ci0gICAgcmV0dXJuIGh0bWw7Ci19Ci0KLWZ1
bmN0aW9uIGNoYXJ0SFRNTChyZXN1bHRzLCBudW1Db2x1bW5zKQotewotICAgIHZhciByZXZpc2lv
bktleSA9IFdFQktJVF9SRVZJU0lPTlNfS0VZOwotICAgIHZhciByZXZpc2lvbkxhYmVsID0gIldl
YktpdCBSZXZpc2lvbiI7Ci0gICAgdmFyIHN0YXJ0UmV2aXNpb24gPSByZXN1bHRzW3JldmlzaW9u
S2V5XVtudW1Db2x1bW5zIC0gMV07Ci0gICAgdmFyIGVuZFJldmlzaW9uID0gcmVzdWx0c1tyZXZp
c2lvbktleV1bMF07Ci0KLSAgICB2YXIgZml4YWJsZSA9IHJlc3VsdHNbRklYQUJMRV9DT1VOVF9L
RVldLnNsaWNlKDAsIG51bUNvbHVtbnMpOwotICAgIHZhciBodG1sID0gY2hhcnQoIlRvdGFsIGZh
aWxpbmciLCB7IiI6IGZpeGFibGV9LCByZXZpc2lvbkxhYmVsLCBzdGFydFJldmlzaW9uLCBlbmRS
ZXZpc2lvbik7Ci0KLSAgICB2YXIgdmFsdWVzID0gdmFsdWVzUGVyRXhwZWN0YXRpb24ocmVzdWx0
c1tGSVhBQkxFX0NPVU5UU19LRVldLCBudW1Db2x1bW5zKTsKLSAgICAvLyBEb24ndCBjYXJlIGFi
b3V0IG51bWJlciBvZiBwYXNzZXMgZm9yIHRoZSBjaGFydHMuCi0gICAgZGVsZXRlKHZhbHVlc1sn
UCddKTsKLQotICAgIHJldHVybiBodG1sICsgY2hhcnQoIkRldGFpbGVkIGJyZWFrZG93biIsIHZh
bHVlcywgcmV2aXNpb25MYWJlbCwgc3RhcnRSZXZpc2lvbiwgZW5kUmV2aXNpb24pOwotfQotCi12
YXIgTEFCRUxfQ09MT1JTID0gWydGRjAwMDAnLCAnMDBGRjAwJywgJzAwMDBGRicsICcwMDAwMDAn
LCAnRkY2RUI0JywgJ0ZGQTgxMicsICc5QjMwRkYnLCAnMDBGRkNDJ107Ci0KLS8vIEZJWE1FOiBG
aW5kIGEgYmV0dGVyIHdheSB0byBleGNsdWRlIG91dGxpZXJzLiBUaGlzIGlzIGp1c3Qgc28gd2Ug
ZXhjbHVkZQotLy8gcnVucyB3aGVyZSBldmVyeSB0ZXN0IGZhaWxlZC4KLXZhciBNQVhfVkFMVUUg
PSAxMDAwMDsKLQotZnVuY3Rpb24gZmlsdGVyZWRWYWx1ZXModmFsdWVzLCBkZXNpcmVkTnVtYmVy
T2ZQb2ludHMpCi17Ci0gICAgLy8gRmlsdGVyIG91dCB2YWx1ZXMgdG8gbWFrZSB0aGUgZ3JhcGgg
YSBiaXQgbW9yZSByZWFkYWJsZSBhbmQgdG8ga2VlcCBVUkxzCi0gICAgLy8gZnJvbSBleGNlZWRp
bmcgdGhlIGJyb3dzZXJzIG1heCBsZW5ndGggcmVzdHJpY3Rpb24uCi0gICAgdmFyIGZpbHRlckFt
b3VudCA9IE1hdGguZmxvb3IodmFsdWVzLmxlbmd0aCAvIGRlc2lyZWROdW1iZXJPZlBvaW50cyk7
Ci0gICAgaWYgKGZpbHRlckFtb3VudCA8IDEpCi0gICAgICAgIHJldHVybiB2YWx1ZXM7Ci0KLSAg
ICByZXR1cm4gdmFsdWVzLmZpbHRlcihmdW5jdGlvbihlbGVtZW50LCBpbmRleCwgYXJyYXkpIHsK
LSAgICAgICAgLy8gSW5jbHVkZSB0aGUgbW9zdCByZWNlbnQgYW5kIG9sZGVzdCB2YWx1ZXMgYW5k
IGV4Y2x1ZGUgb3V0bGllcnMuCi0gICAgICAgIHJldHVybiAoaW5kZXggJSBmaWx0ZXJBbW91bnQg
PT0gMCB8fCBpbmRleCA9PSBhcnJheS5sZW5ndGggLSAxKSAmJiAoYXJyYXlbaW5kZXhdIDwgTUFY
X1ZBTFVFICYmIGFycmF5W2luZGV4XSAhPSAwKTsKLSAgICB9KTsKLX0KLQotZnVuY3Rpb24gY2hh
cnRVcmwodGl0bGUsIHZhbHVlcywgcmV2aXNpb25MYWJlbCwgc3RhcnRSZXZpc2lvbiwgZW5kUmV2
aXNpb24sIGRlc2lyZWROdW1iZXJPZlBvaW50cykgewotICAgIHZhciBtYXhWYWx1ZSA9IDA7Ci0g
ICAgZm9yICh2YXIgZXhwZWN0YXRpb24gaW4gdmFsdWVzKQotICAgICAgICBtYXhWYWx1ZSA9IE1h
dGgubWF4KG1heFZhbHVlLCBNYXRoLm1heC5hcHBseShudWxsLCBmaWx0ZXJlZFZhbHVlcyh2YWx1
ZXNbZXhwZWN0YXRpb25dLCBkZXNpcmVkTnVtYmVyT2ZQb2ludHMpKSk7Ci0KLSAgICB2YXIgY2hh
cnREYXRhID0gJyc7Ci0gICAgdmFyIGxhYmVscyA9ICcnOwotICAgIHZhciBudW1MYWJlbHMgPSAw
OwotCi0gICAgdmFyIGZpcnN0ID0gdHJ1ZTsKLSAgICBmb3IgKHZhciBleHBlY3RhdGlvbiBpbiB2
YWx1ZXMpIHsKLSAgICAgICAgY2hhcnREYXRhICs9IChmaXJzdCA/ICdlOicgOiAnLCcpICsgZXh0
ZW5kZWRFbmNvZGUoZmlsdGVyZWRWYWx1ZXModmFsdWVzW2V4cGVjdGF0aW9uXSwgZGVzaXJlZE51
bWJlck9mUG9pbnRzKS5yZXZlcnNlKCksIG1heFZhbHVlKTsKLQotICAgICAgICBpZiAoZXhwZWN0
YXRpb24pIHsKLSAgICAgICAgICAgIG51bUxhYmVscysrOwotICAgICAgICAgICAgbGFiZWxzICs9
IChmaXJzdCA/ICcnIDogJ3wnKSArIGV4cGVjdGF0aW9uc01hcCgpW2V4cGVjdGF0aW9uXTsKLSAg
ICAgICAgfQotICAgICAgICBmaXJzdCA9IGZhbHNlOwotICAgIH0KLQotICAgIHZhciB1cmwgPSAi
aHR0cDovL2NoYXJ0LmFwaXMuZ29vZ2xlLmNvbS9jaGFydD9jaHQ9bGMmY2hzPTYwMHg0MDAmY2hk
PSIgKwotICAgICAgICAgICAgY2hhcnREYXRhICsgIiZjaGc9MTUsMTUsMSwzJmNoeHQ9eCx4LHkm
Y2h4bD0xOnx8IiArIHJldmlzaW9uTGFiZWwgKwotICAgICAgICAgICAgInwmY2h4cj0wLCIgKyBz
dGFydFJldmlzaW9uICsgIiwiICsgZW5kUmV2aXNpb24gKyAifDIsMCwiICsgbWF4VmFsdWUgKyAi
JmNodHQ9IiArIHRpdGxlOwotCi0KLSAgICBpZiAobGFiZWxzKQotICAgICAgICB1cmwgKz0gIiZj
aGRsPSIgKyBsYWJlbHMgKyAiJmNoY289IiArIExBQkVMX0NPTE9SUy5zbGljZSgwLCBudW1MYWJl
bHMpLmpvaW4oJywnKTsKLSAgICByZXR1cm4gdXJsOwotfQotCi1mdW5jdGlvbiBjaGFydCh0aXRs
ZSwgdmFsdWVzLCByZXZpc2lvbkxhYmVsLCBzdGFydFJldmlzaW9uLCBlbmRSZXZpc2lvbikKLXsK
LSAgICB2YXIgZGVzaXJlZE51bWJlck9mUG9pbnRzID0gNDAwOwotICAgIHZhciB1cmwgPSBjaGFy
dFVybCh0aXRsZSwgdmFsdWVzLCByZXZpc2lvbkxhYmVsLCBzdGFydFJldmlzaW9uLCBlbmRSZXZp
c2lvbiwgZGVzaXJlZE51bWJlck9mUG9pbnRzKTsKLQotICAgIHdoaWxlICh1cmwubGVuZ3RoID49
IDIwNDgpIHsKLSAgICAgICAgLy8gRGVjcmVhc2UgdGhlIGRlc2lyZWQgbnVtYmVyIG9mIHBvaW50
cyBncmFkdWFsbHkgdW50aWwgd2UgZ2V0IGEgVVJMIHRoYXQKLSAgICAgICAgLy8gZG9lc24ndCBl
eGNlZWQgY2hhcnRzZXJ2ZXIncyBtYXggVVJMIGxlbmd0aC4KLSAgICAgICAgZGVzaXJlZE51bWJl
ck9mUG9pbnRzID0gMyAvIDQgKiBkZXNpcmVkTnVtYmVyT2ZQb2ludHM7Ci0gICAgICAgIHVybCA9
IGNoYXJ0VXJsKHRpdGxlLCB2YWx1ZXMsIHJldmlzaW9uTGFiZWwsIHN0YXJ0UmV2aXNpb24sIGVu
ZFJldmlzaW9uLCBkZXNpcmVkTnVtYmVyT2ZQb2ludHMpOwotICAgIH0KLQotICAgIHJldHVybiAn
PGltZyBzcmM9IicgKyB1cmwgKyAnIj4nOwotfQotCi1mdW5jdGlvbiB3cmFwSFRNTEluVGFibGUo
ZGVzY3JpcHRpb24sIGh0bWwpCi17Ci0gICAgcmV0dXJuICc8aDM+JyArIGRlc2NyaXB0aW9uICsg
JzwvaDM+PHRhYmxlPjx0Ym9keT4nICsgaHRtbCArICc8L3Rib2R5PjwvdGFibGU+JzsKLX0KLQot
ZnVuY3Rpb24gaHRtbEZvclN1bW1hcnlUYWJsZShyZXN1bHRzLCBudW1Db2x1bW5zKQotewotICAg
IHZhciBwZXJjZW50ID0gW107Ci0gICAgdmFyIGZpeGFibGUgPSByZXN1bHRzW0ZJWEFCTEVfQ09V
TlRfS0VZXS5zbGljZSgwLCBudW1Db2x1bW5zKTsKLSAgICB2YXIgYWxsRml4YWJsZSA9IHJlc3Vs
dHNbQUxMX0ZJWEFCTEVfQ09VTlRfS0VZXS5zbGljZSgwLCBudW1Db2x1bW5zKTsKLSAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG51bUNvbHVtbnM7IGkrKykgewotICAgICAgICB2YXIgcGVyY2VudGFn
ZSA9IDEwMCAqIChhbGxGaXhhYmxlW2ldIC0gZml4YWJsZVtpXSkgLyBhbGxGaXhhYmxlW2ldOwot
ICAgICAgICAvLyBSb3VuZCB0byB0aGUgbmVhcmVzdCB0ZW50aCBvZiBhIHBlcmNlbnQuCi0gICAg
ICAgIHBlcmNlbnQucHVzaChNYXRoLnJvdW5kKHBlcmNlbnRhZ2UgKiAxMCkgLyAxMCArICclJyk7
Ci0gICAgfQotICAgIHZhciBodG1sID0gaHRtbEZvclRhYmxlUm93KCdXZWJLaXQgUmV2aXNpb24n
LCByZXN1bHRzW1dFQktJVF9SRVZJU0lPTlNfS0VZXS5zbGljZSgwLCBudW1Db2x1bW5zKSkgKwot
ICAgICAgICBodG1sRm9yVGFibGVSb3coJ1BlcmNlbnQgcGFzc2VkJywgcGVyY2VudCkgKwotICAg
ICAgICBodG1sRm9yVGFibGVSb3coJ0ZhaWx1cmVzIChkZWR1cGVkKScsIGZpeGFibGUpICsKLSAg
ICAgICAgaHRtbEZvclRhYmxlUm93KCdGaXhhYmxlIFRlc3RzJywgYWxsRml4YWJsZSk7Ci0gICAg
cmV0dXJuIHdyYXBIVE1MSW5UYWJsZSgnU3VtbWFyeScsIGh0bWwpOwotfQotCi1mdW5jdGlvbiB2
YWx1ZXNQZXJFeHBlY3RhdGlvbihjb3VudHMsIG51bUNvbHVtbnMpCi17Ci0gICAgdmFyIHZhbHVl
cyA9IHt9OwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtQ29sdW1uczsgaSsrKSB7Ci0gICAg
ICAgIGZvciAodmFyIGV4cGVjdGF0aW9uIGluIGV4cGVjdGF0aW9uc01hcCgpKSB7Ci0gICAgICAg
ICAgICBpZiAoZXhwZWN0YXRpb24gaW4gY291bnRzW2ldKSB7Ci0gICAgICAgICAgICAgICAgdmFy
IGNvdW50ID0gY291bnRzW2ldW2V4cGVjdGF0aW9uXTsKLSAgICAgICAgICAgICAgICBpZiAoIXZh
bHVlc1tleHBlY3RhdGlvbl0pCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlc1tleHBlY3RhdGlv
bl0gPSBbXTsKLSAgICAgICAgICAgICAgICB2YWx1ZXNbZXhwZWN0YXRpb25dLnB1c2goY291bnQp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB2YWx1ZXM7Ci19
Ci0KLWZ1bmN0aW9uIGh0bWxGb3JUZXN0VHlwZShyZXN1bHRzLCBrZXksIGRlc2NyaXB0aW9uLCBu
dW1Db2x1bW5zKQotewotICAgIHZhciBjb3VudHMgPSByZXN1bHRzW2tleV07Ci0gICAgdmFyIGh0
bWwgPSBodG1sRm9yVGFibGVSb3coJ1dlYktpdCBSZXZpc2lvbicsIHJlc3VsdHNbV0VCS0lUX1JF
VklTSU9OU19LRVldLnNsaWNlKDAsIG51bUNvbHVtbnMpKTsKLSAgICB2YXIgdmFsdWVzID0gdmFs
dWVzUGVyRXhwZWN0YXRpb24oY291bnRzLCBudW1Db2x1bW5zKTsKLSAgICBmb3IgKHZhciBleHBl
Y3RhdGlvbiBpbiB2YWx1ZXMpCi0gICAgICAgIGh0bWwgKz0gaHRtbEZvclRhYmxlUm93KGV4cGVj
dGF0aW9uc01hcCgpW2V4cGVjdGF0aW9uXSwgdmFsdWVzW2V4cGVjdGF0aW9uXSk7Ci0gICAgcmV0
dXJuIHdyYXBIVE1MSW5UYWJsZShkZXNjcmlwdGlvbiwgaHRtbCk7Ci19Ci0KLWZ1bmN0aW9uIGh0
bWxGb3JUYWJsZVJvdyhjb2x1bW5OYW1lLCB2YWx1ZXMpCi17Ci0gICAgcmV0dXJuICc8dHI+PHRk
PicgKyBjb2x1bW5OYW1lICsgJzwvdGQ+PHRkPicgKyB2YWx1ZXMuam9pbignPC90ZD48dGQ+Jykg
KyAnPC90ZD48L3RyPic7Ci19Ci0KLS8vIFRha2VuIGZyb20gaHR0cDovL2NvZGUuZ29vZ2xlLmNv
bS9hcGlzL2NoYXJ0L2RvY3MvZGF0YV9mb3JtYXRzLmh0bWwuCi1mdW5jdGlvbiBleHRlbmRlZEVu
Y29kZShhcnJWYWxzLCBtYXhWYWwpCi17Ci0gICAgdmFyIG1hcCA9ICdBQkNERUZHSElKS0xNTk9Q
UVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS0uJzsKLSAgICB2
YXIgbWFwTGVuZ3RoID0gbWFwLmxlbmd0aDsKLSAgICB2YXIgbWFwTGVuZ3RoU3F1YXJlZCA9IG1h
cExlbmd0aCAqIG1hcExlbmd0aDsKLQotICAgIHZhciBjaGFydERhdGEgPSAnJzsKLQotICAgIGZv
ciAodmFyIGkgPSAwLCBsZW4gPSBhcnJWYWxzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAg
ICAgIC8vIEluIGNhc2UgdGhlIGFycmF5IHZhbHMgd2VyZSB0cmFuc2xhdGVkIHRvIHN0cmluZ3Mu
Ci0gICAgICAgIHZhciBudW1lcmljVmFsID0gbmV3IE51bWJlcihhcnJWYWxzW2ldKTsKLSAgICAg
ICAgLy8gU2NhbGUgdGhlIHZhbHVlIHRvIG1heFZhbC4KLSAgICAgICAgdmFyIHNjYWxlZFZhbCA9
IE1hdGguZmxvb3IobWFwTGVuZ3RoU3F1YXJlZCAqIG51bWVyaWNWYWwgLyBtYXhWYWwpOwotCi0g
ICAgICAgIGlmKHNjYWxlZFZhbCA+IG1hcExlbmd0aFNxdWFyZWQgLSAxKQotICAgICAgICAgICAg
Y2hhcnREYXRhICs9ICIuLiI7Ci0gICAgICAgIGVsc2UgaWYgKHNjYWxlZFZhbCA8IDApCi0gICAg
ICAgICAgICBjaGFydERhdGEgKz0gJ19fJzsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAv
LyBDYWxjdWxhdGUgZmlyc3QgYW5kIHNlY29uZCBkaWdpdHMgYW5kIGFkZCB0aGVtIHRvIHRoZSBv
dXRwdXQuCi0gICAgICAgICAgICB2YXIgcXVvdGllbnQgPSBNYXRoLmZsb29yKHNjYWxlZFZhbCAv
IG1hcExlbmd0aCk7Ci0gICAgICAgICAgICB2YXIgcmVtYWluZGVyID0gc2NhbGVkVmFsIC0gbWFw
TGVuZ3RoICogcXVvdGllbnQ7Ci0gICAgICAgICAgICBjaGFydERhdGEgKz0gbWFwLmNoYXJBdChx
dW90aWVudCkgKyBtYXAuY2hhckF0KHJlbWFpbmRlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gY2hhcnREYXRhOwotfQotCi13aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcs
IGZ1bmN0aW9uKCkgewotICAgIHZhciByZXNvdXJjZUxvYWRlciA9IG5ldyBsb2FkZXIuTG9hZGVy
KCk7Ci0gICAgcmVzb3VyY2VMb2FkZXIubG9hZCgpOwotfSwgZmFsc2UpOwoKUHJvcGVydHkgY2hh
bmdlcyBvbjogVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9hZ2dyZWdh
dGVfcmVzdWx0cy5qcwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAs
MCAjIwotTEYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogVG9vbHMvVGVz
dFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9idWlsZGVycy5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2J1aWxkZXJzLmpzCShy
ZXZpc2lvbiAyNjQ1MjcpCisrKyBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9h
cmRzL2J1aWxkZXJzLmpzCShub25leGlzdGVudCkKQEAgLTEsMTYxICswLDAgQEAKLS8vIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8v
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLS8vICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9u
LgotLy8gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
Ly8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBAZmlsZW92ZXJ2aWV3IEZpbGUg
dGhhdCBsaXN0cyBidWlsZGVycywgdGhlaXIgbWFzdGVycywgYW5kIGxvZ2ljYWwgZ3JvdXBpbmdz
Ci0vLyBvZiB0aGVtLgotCi1mdW5jdGlvbiBMT0FEX0JVSUxEQk9UX0RBVEEoYnVpbGRlckRhdGEp
Ci17Ci0gICAgYnVpbGRlcnMubWFzdGVycyA9IHt9OwotICAgIGJ1aWxkZXJEYXRhLmZvckVhY2go
ZnVuY3Rpb24obWFzdGVyKSB7Ci0gICAgICAgIGJ1aWxkZXJzLm1hc3RlcnNbbWFzdGVyLm5hbWVd
ID0gbmV3IGJ1aWxkZXJzLkJ1aWxkZXJNYXN0ZXIobWFzdGVyLm5hbWUsIG1hc3Rlci51cmwsIG1h
c3Rlci50ZXN0cyk7Ci0gICAgfSkKLX0KLQotdmFyIGJ1aWxkZXJzID0gYnVpbGRlcnMgfHwge307
Ci0KLShmdW5jdGlvbigpIHsKLQotLy8gRklYTUU6IE1vdmUgc29tZSBvZiB0aGlzIGxvYWRpbmcg
bG9naWMgaW50byBsb2FkZXIuanMuCi0KLWJ1aWxkZXJzLl9sb2FkU2NyaXB0ID0gZnVuY3Rpb24o
dXJsLCBzdWNjZXNzLCBlcnJvcikKLXsKLSAgICB2YXIgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnc2NyaXB0Jyk7Ci0gICAgc2NyaXB0LnNyYyA9IHVybDsKLSAgICBzY3JpcHQub25s
b2FkID0gc3VjY2VzczsKLSAgICBzY3JpcHQub25lcnJvciA9IGVycm9yOwotICAgIGRvY3VtZW50
LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKLX0KLQotYnVpbGRlcnMuX3JlcXVlc3RCdWlsZGVy
cyA9IGZ1bmN0aW9uKCkKLXsKLSAgICB2YXIgYnVpbGRlcnNVcmwgPSAnYnVpbGRlcnMuanNvbnAn
OwotICAgIGJ1aWxkZXJzLl9sb2FkU2NyaXB0KGJ1aWxkZXJzVXJsLCBmdW5jdGlvbigpIHt9LCBm
dW5jdGlvbigpIHsKLSAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IGxvYWQgJyArIGJ1
aWxkZXJzVXJsKTsKLSAgICB9KTsKLX0KLQotCi1idWlsZGVycy5CdWlsZGVyTWFzdGVyID0gZnVu
Y3Rpb24obmFtZSwgYmFzZVBhdGgsIHRlc3RzKQotewotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0g
ICAgdGhpcy5iYXNlUGF0aCA9IGJhc2VQYXRoOwotICAgIHRoaXMudGVzdHMgPSB0ZXN0czsKLX0K
LQotYnVpbGRlcnMuQnVpbGRlck1hc3Rlci5wcm90b3R5cGUgPSB7Ci0gICAgbG9nUGF0aDogZnVu
Y3Rpb24oYnVpbGRlciwgYnVpbGROdW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5i
YXNlUGF0aCArICcvYnVpbGRlcnMvJyArIGJ1aWxkZXIgKyAnL2J1aWxkcy8nICsgYnVpbGROdW1i
ZXI7Ci0gICAgfSwKLSAgICBidWlsZGVySnNvblBhdGg6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB0aGlzLmJhc2VQYXRoICsgJy9qc29uL2J1aWxkZXJzJzsKLSAgICB9LAotfQot
Ci1idWlsZGVycy5fcmVxdWVzdEJ1aWxkZXJzKCk7Ci0KLX0pKCk7Ci0KLS8vIEZJWE1FOiBNb3Zl
IGV2ZXJ5dGhpbmcgYmVsb3cgaW50byB0aGUgYW5vbnltb3VzIG5hbWVzcGFjZSBhYm92ZS4KLQot
Ly8gRklYTUU6IFdlIG9ubHkgaGF2ZSBvbmUgbWFzdGVyLCByZW1vdmUgdGhlIGNvZGUgbmVlZGVk
IHRvIHN1cHBvcnQgbXVsdGlwbGUgb25lcy4KLVdFQktJVF9CVUlMREVSX01BU1RFUiA9ICd3ZWJr
aXQub3JnJzsKLXZhciBMRUdBQ1lfQlVJTERFUl9NQVNURVJTX1RPX0dST1VQUyA9IHsKLSAgICAn
d2Via2l0Lm9yZyc6ICdAVG9UIC0gd2Via2l0Lm9yZycKLX07Ci0KLWZ1bmN0aW9uIEJ1aWxkZXJH
cm91cCgpCi17Ci0gICAgLy8gTWFwIG9mIGJ1aWxkZXJOYW1lICh0aGUgbmFtZSBzaG93biBpbiB0
aGUgd2F0ZXJmYWxsKSB0byBidWlsZGVyUGF0aCAodGhlCi0gICAgLy8gcGF0aCB1c2VkIGluIHRo
ZSBidWlsZGVyJ3MgVVJMKQotICAgIHRoaXMuYnVpbGRlcnMgPSB7fTsKLX0KLQotQnVpbGRlckdy
b3VwLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihidWlsZGVycykgewotICAgIGJ1aWxkZXJz
LmZvckVhY2goZnVuY3Rpb24oYnVpbGRlck5hbWUpIHsKLSAgICAgICAgdGhpcy5idWlsZGVyc1ti
dWlsZGVyTmFtZV0gPSBidWlsZGVyTmFtZS5yZXBsYWNlKC9bIC4oKV0vZywgJ18nKTsKLSAgICB9
LCB0aGlzKTsKLX07Ci0KLUJ1aWxkZXJHcm91cC5wcm90b3R5cGUuZGVmYXVsdEJ1aWxkZXIgPSBm
dW5jdGlvbigpCi17Ci0gICAgZm9yICh2YXIgYnVpbGRlciBpbiB0aGlzLmJ1aWxkZXJzKQotICAg
ICAgICByZXR1cm4gYnVpbGRlcjsKLSAgICBjb25zb2xlLmVycm9yKCdUaGVyZSBhcmUgbm8gYnVp
bGRlcnMgaW4gdGhpcyBidWlsZGVyIGdyb3VwLicpOwotfQotCi1CdWlsZGVyR3JvdXAucHJvdG90
eXBlLm1hc3RlciA9IGZ1bmN0aW9uKCkKLXsKLSAgICByZXR1cm4gYnVpbGRlck1hc3Rlcih0aGlz
LmRlZmF1bHRCdWlsZGVyKCkpOwotfQotCi12YXIgQlVJTERFUl9UT19NQVNURVIgPSB7fTsKLQot
ZnVuY3Rpb24gYnVpbGRlck1hc3RlcihidWlsZGVyTmFtZSkKLXsKLSAgICByZXR1cm4gQlVJTERF
Ul9UT19NQVNURVJbYnVpbGRlck5hbWVdOwotfQotCi1mdW5jdGlvbiByZXF1ZXN0QnVpbGRlckxp
c3QoYnVpbGRlckdyb3VwcywgbWFzdGVyTmFtZSwgZ3JvdXBOYW1lLCBidWlsZGVyR3JvdXAsIHRl
c3RUeXBlLCBvcHRfYnVpbGRlckZpbHRlcikKLXsKLSAgICBpZiAoIWJ1aWxkZXJHcm91cHNbZ3Jv
dXBOYW1lXSkKLSAgICAgICAgYnVpbGRlckdyb3Vwc1tncm91cE5hbWVdID0gYnVpbGRlckdyb3Vw
OwotICAgIHZhciBtYXN0ZXIgPSBidWlsZGVycy5tYXN0ZXJzW21hc3Rlck5hbWVdOwotICAgIHZh
ciBidWlsZGVyTGlzdCA9IG1hc3Rlci50ZXN0c1t0ZXN0VHlwZV0uYnVpbGRlcnM7Ci0gICAgaWYg
KG9wdF9idWlsZGVyRmlsdGVyKQotICAgICAgICBidWlsZGVyTGlzdCA9IGJ1aWxkZXJMaXN0LmZp
bHRlcihvcHRfYnVpbGRlckZpbHRlcik7Ci0gICAgYnVpbGRlckxpc3QuZm9yRWFjaChmdW5jdGlv
bihidWlsZGVyTmFtZSkgewotICAgICAgICBCVUlMREVSX1RPX01BU1RFUltidWlsZGVyTmFtZV0g
PSBtYXN0ZXI7Ci0gICAgfSk7Ci0gICAgYnVpbGRlckdyb3Vwc1tncm91cE5hbWVdLmFwcGVuZChi
dWlsZGVyTGlzdCk7Ci19Ci0KLS8vIEZJWE1FOiBMb29rIGludG8gd2hldGhlciB3ZSBjYW4gbW92
ZSB0aGUgZ3JvdXBpbmcgbG9naWMgaW50byBidWlsZGVycy5qc29ucCBhbmQgZ2V0IHJpZCBvZiB0
aGlzIGNvZGUuCi1mdW5jdGlvbiBsb2FkQnVpbGRlcnNMaXN0KGdyb3VwTmFtZSwgdGVzdFR5cGUp
IHsKLSAgICBzd2l0Y2ggKHRlc3RUeXBlKSB7Ci0gICAgY2FzZSAnbGF5b3V0LXRlc3RzJzoKLSAg
ICAgICAgc3dpdGNoKGdyb3VwTmFtZSkgewotICAgICAgICBjYXNlICdAVG9UIC0gd2Via2l0Lm9y
Zyc6Ci0gICAgICAgICAgICB2YXIgYnVpbGRlckdyb3VwID0gbmV3IEJ1aWxkZXJHcm91cCgpOwot
ICAgICAgICAgICAgcmVxdWVzdEJ1aWxkZXJMaXN0KExBWU9VVF9URVNUU19CVUlMREVSX0dST1VQ
UywgV0VCS0lUX0JVSUxERVJfTUFTVEVSLCBncm91cE5hbWUsIGJ1aWxkZXJHcm91cCwgdGVzdFR5
cGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBj
b25zb2xlLmVycm9yKCdUcmllZCB0byBsb2FkIGJ1aWxkZXJzIGZvciBhbiB1bnN1cHBvcnRlZCBn
cm91cCAiJyArIGdyb3VwTmFtZSArICciJyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0K
LSAgICBkZWZhdWx0OgotICAgICAgICBjb25zb2xlLmVycm9yKCdUcmllZCB0byBsb2FkIGJ1aWxk
ZXJzIGZvciBhbiB1bnN1cHBvcnRlZCB0ZXN0IHR5cGUgIicgKyB0ZXN0VHlwZSArICciJyk7Ci0g
ICAgfQotfQotCi12YXIgTEFZT1VUX1RFU1RTX0JVSUxERVJfR1JPVVBTID0gewotICAgICdAVG9U
IC0gd2Via2l0Lm9yZyc6IG51bGwsCi19OwoKUHJvcGVydHkgY2hhbmdlcyBvbjogVG9vbHMvVGVz
dFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9idWlsZGVycy5qcwpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRl
bGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotTEYKXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBwcm9wZXJ0eQpJbmRleDogVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJv
YXJkcy9idWlsZGVycy5qc29ucAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0UmVzdWx0U2VydmVy
L3N0YXRpYy1kYXNoYm9hcmRzL2J1aWxkZXJzLmpzb25wCShyZXZpc2lvbiAyNjQ1MjcpCisrKyBU
b29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2J1aWxkZXJzLmpzb25wCShu
b25leGlzdGVudCkKQEAgLTEsMzUgKzAsMCBAQAotLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJh
dGVkIGJ5IFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvZ2VuZXJhdGVfYnVpbGRlcnNfanNvbi5weS4g
SXQgc2hvdWxkIG5vdCBiZSBtYW51YWxseSBtb2RpZmllZC4KLS8vIEl0IHVzZXMganNvbnAgaW5z
dGVhZCBvZiBwcm9wZXIganNvbiBiZWNhdXNlIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBsb2FkIGl0
IGZyb20gYSBmaWxlIFVSTCBmb3IgbG9jYWwgdGVzdGluZy4KLUxPQURfQlVJTERCT1RfREFUQShb
Ci0gICAgewotICAgICAgICAibmFtZSI6ICJ3ZWJraXQub3JnIiwgCi0gICAgICAgICJ0ZXN0cyI6
IHsKLSAgICAgICAgICAgICJsYXlvdXQtdGVzdHMiOiB7Ci0gICAgICAgICAgICAgICAgImJ1aWxk
ZXJzIjogWwotICAgICAgICAgICAgICAgICAgICAiQXBwbGUgSGlnaCBTaWVycmEgRGVidWcgV0sx
IChUZXN0cykiLCAKLSAgICAgICAgICAgICAgICAgICAgIkFwcGxlIEhpZ2ggU2llcnJhIERlYnVn
IFdLMiAoVGVzdHMpIiwgCi0gICAgICAgICAgICAgICAgICAgICJBcHBsZSBIaWdoIFNpZXJyYSBS
ZWxlYXNlIFdLMSAoVGVzdHMpIiwgCi0gICAgICAgICAgICAgICAgICAgICJBcHBsZSBIaWdoIFNp
ZXJyYSBSZWxlYXNlIFdLMiAoVGVzdHMpIiwgCi0gICAgICAgICAgICAgICAgICAgICJBcHBsZSBN
b2phdmUgKExlYWtzKSIsIAotICAgICAgICAgICAgICAgICAgICAiQXBwbGUgTW9qYXZlIERlYnVn
IFdLMSAoVGVzdHMpIiwgCi0gICAgICAgICAgICAgICAgICAgICJBcHBsZSBNb2phdmUgRGVidWcg
V0syIChUZXN0cykiLCAKLSAgICAgICAgICAgICAgICAgICAgIkFwcGxlIE1vamF2ZSBSZWxlYXNl
IFdLMSAoVGVzdHMpIiwgCi0gICAgICAgICAgICAgICAgICAgICJBcHBsZSBNb2phdmUgUmVsZWFz
ZSBXSzIgKFRlc3RzKSIsIAotICAgICAgICAgICAgICAgICAgICAiQXBwbGUgV2luIDEwIERlYnVn
IChUZXN0cykiLCAKLSAgICAgICAgICAgICAgICAgICAgIkFwcGxlIFdpbiAxMCBSZWxlYXNlIChU
ZXN0cykiLCAKLSAgICAgICAgICAgICAgICAgICAgIkFwcGxlIFdpbiA3IFJlbGVhc2UgKFRlc3Rz
KSIsIAotICAgICAgICAgICAgICAgICAgICAiQXBwbGUgaU9TIDEzIFNpbXVsYXRvciBEZWJ1ZyBX
SzIgKFRlc3RzKSIsIAotICAgICAgICAgICAgICAgICAgICAiQXBwbGUgaU9TIDEzIFNpbXVsYXRv
ciBSZWxlYXNlIFdLMiAoVGVzdHMpIiwgCi0gICAgICAgICAgICAgICAgICAgICJHVEsgTGludXgg
NjQtYml0IERlYnVnIChUZXN0cykiLCAKLSAgICAgICAgICAgICAgICAgICAgIkdUSyBMaW51eCA2
NC1iaXQgUmVsZWFzZSAoVGVzdHMpIiwgCi0gICAgICAgICAgICAgICAgICAgICJHVEsgTGludXgg
NjQtYml0IFJlbGVhc2UgV2F5bGFuZCAoVGVzdHMpIiwgCi0gICAgICAgICAgICAgICAgICAgICJX
UEUgTGludXggNjQtYml0IERlYnVnIChUZXN0cykiLCAKLSAgICAgICAgICAgICAgICAgICAgIldQ
RSBMaW51eCA2NC1iaXQgUmVsZWFzZSAoVGVzdHMpIiwgCi0gICAgICAgICAgICAgICAgICAgICJX
aW5DYWlybyA2NC1iaXQgV0tMIERlYnVnIChUZXN0cykiLCAKLSAgICAgICAgICAgICAgICAgICAg
IldpbkNhaXJvIDY0LWJpdCBXS0wgUmVsZWFzZSAoVGVzdHMpIgotICAgICAgICAgICAgICAgIF0K
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSwgCi0gICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9idWls
ZC53ZWJraXQub3JnIgotICAgIH0KLV0pOwpJbmRleDogVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9z
dGF0aWMtZGFzaGJvYXJkcy9idWlsZGVyc191bml0dGVzdHMuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9idWlsZGVyc191bml0dGVzdHMu
anMJKHJldmlzaW9uIDI2NDUyNykKKysrIFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRh
c2hib2FyZHMvYnVpbGRlcnNfdW5pdHRlc3RzLmpzCShub25leGlzdGVudCkKQEAgLTEsNDEgKzAs
MCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8g
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0v
LyBkaXN0cmlidXRpb24uCi0vLyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0v
LyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLXRlc3QoJ2xv
YWRpbmcgc3RlcHMnLCA0LCBmdW5jdGlvbigpIHsKLSAgICB2YXIgdGVzdHMgPSB7fQotICAgIHZh
ciBiYXNlVXJsID0gJ2h0dHA6Ly9kdW1teXVybCc7Ci0gICAgdmFyIG5hbWUgPSAnZHVtbXluYW1l
JzsKLSAgICB2YXIgbWFzdGVyID0gbmV3IGJ1aWxkZXJzLkJ1aWxkZXJNYXN0ZXIobmFtZSwgYmFz
ZVVybCwgdGVzdHMpOwotCi0gICAgdmFyIGJ1aWxkZXIgPSAnZHVtbXlidWlsZGVyJzsKLSAgICB2
YXIgYnVpbGROdW1iZXIgPSAxMjM0NTsKLSAgICBlcXVhbChtYXN0ZXIubG9nUGF0aChidWlsZGVy
LCBidWlsZE51bWJlciksIGJhc2VVcmwgKyAnL2J1aWxkZXJzLycgKyBidWlsZGVyICsgJy9idWls
ZHMvJyArIGJ1aWxkTnVtYmVyKTsKLSAgICBlcXVhbChtYXN0ZXIuYnVpbGRlckpzb25QYXRoKCks
IGJhc2VVcmwgKyAnL2pzb24vYnVpbGRlcnMnKTsKLSAgICBlcXVhbChtYXN0ZXIudGVzdHMsIHRl
c3RzKTsKLSAgICBlcXVhbChtYXN0ZXIubmFtZSwgbmFtZSk7Ci19KQpJbmRleDogVG9vbHMvVGVz
dFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9kYXNoYm9hcmRfYmFzZS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Rhc2hib2Fy
ZF9iYXNlLmpzCShyZXZpc2lvbiAyNjQ1MjcpCisrKyBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0
YXRpYy1kYXNoYm9hcmRzL2Rhc2hib2FyZF9iYXNlLmpzCShub25leGlzdGVudCkKQEAgLTEsMTU2
ICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8K
LS8vICAgICAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
Ly8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotCi0vLyBAZmlsZW92ZXJ2aWV3IEJhc2UgSlMgZmlsZSBmb3IgcGFnZXMgdGhhdCB3
YW50IHRvIHBhcnNlIHRoZSByZXN1bHRzIEpTT04KLS8vIGZyb20gdGhlIHRlc3RpbmcgYm90cy4g
VGhpcyBkZWFscyB3aXRoIGdlbmVyaWMgdXRpbGl0eSBmdW5jdGlvbnMsIHZpc2libGUKLS8vIGhp
c3RvcnksIHBvcHVwcyBhbmQgYXBwZW5kaW5nIHRoZSBzY3JpcHQgZWxlbWVudHMgZm9yIHRoZSBK
U09OIGZpbGVzLgotCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8gQ09OU1RBTlRTCi0vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLXZhciBHVEVTVF9FWFBFQ1RBVElPTlNfTUFQXyA9IHsKLSAgICAn
UCc6ICdQQVNTJywKLSAgICAnRic6ICdGQUlMJywKLSAgICAnTic6ICdOTyBEQVRBJywKLSAgICAn
WCc6ICdTS0lQUEVEJwotfTsKLQotdmFyIExBWU9VVF9URVNUX0VYUEVDVEFUSU9OU19NQVBfID0g
ewotICAgICdQJzogJ1BBU1MnLAotICAgICdOJzogJ05PIERBVEEnLAotICAgICdYJzogJ1NLSVAn
LAotICAgICdUJzogJ1RJTUVPVVQnLAotICAgICdGJzogJ1RFWFQnLAotICAgICdDJzogJ0NSQVNI
JywKLSAgICAnSSc6ICdJTUFHRScsCi0gICAgJ1onOiAnSU1BR0UrVEVYVCcsCi0gICAgLy8gV2Ug
dXNlZCB0byBnbG9iIGEgYnVuY2ggb2YgZXhwZWN0YXRpb25zIGludG8gIk8iIGFzIE9USEVSLiBF
eHBlY3RhdGlvbnMKLSAgICAvLyBhcmUgbW9yZSBwcmVjaXNlIG5vdyB0aG91Z2ggYW5kIGl0IGp1
c3QgbWVhbnMgTUlTU0lORy4KLSAgICAnTyc6ICdNSVNTSU5HJwotfTsKLQotCi0vLyBLZXlzIGlu
IHRoZSBKU09OIGZpbGVzLgotdmFyIFdPTlRGSVhfQ09VTlRTX0tFWSA9ICd3b250Zml4Q291bnRz
JzsKLXZhciBGSVhBQkxFX0NPVU5UU19LRVkgPSAnZml4YWJsZUNvdW50cyc7Ci12YXIgREVGRVJS
RURfQ09VTlRTX0tFWSA9ICdkZWZlcnJlZENvdW50cyc7Ci12YXIgV09OVEZJWF9ERVNDUklQVElP
TiA9ICdUZXN0cyBuZXZlciB0byBiZSBmaXhlZCAoV09OVEZJWCknOwotdmFyIEZJWEFCTEVfREVT
Q1JJUFRJT04gPSAnQWxsIHRlc3RzIGZvciB0aGlzIHJlbGVhc2UnOwotdmFyIERFRkVSUkVEX0RF
U0NSSVBUSU9OID0gJ0FsbCBkZWZlcnJlZCB0ZXN0cyAoREVGRVIpJzsKLXZhciBGSVhBQkxFX0NP
VU5UX0tFWSA9ICdmaXhhYmxlQ291bnQnOwotdmFyIEFMTF9GSVhBQkxFX0NPVU5UX0tFWSA9ICdh
bGxGaXhhYmxlQ291bnQnOwotdmFyIFdFQktJVF9SRVZJU0lPTlNfS0VZID0gJ3dlYmtpdFJldmlz
aW9uJzsKLXZhciBUSU1FU1RBTVBTX0tFWSA9ICdzZWNvbmRzU2luY2VFcG9jaCc7Ci12YXIgQlVJ
TERfTlVNQkVSU19LRVkgPSAnYnVpbGROdW1iZXJzJzsKLXZhciBURVNUU19LRVkgPSAndGVzdHMn
OwotdmFyIE9ORV9EQVlfU0VDT05EUyA9IDYwICogNjAgKiAyNDsKLXZhciBPTkVfV0VFS19TRUNP
TkRTID0gT05FX0RBWV9TRUNPTkRTICogNzsKLQotLy8gVGhlc2Ugc2hvdWxkIG1hdGNoIHRoZSB0
ZXN0dHlwZSB1cGxvYWRlZCB0byB3ZWJraXQtdGVzdC1yZXN1bHRzLndlYmtpdC5vcmcuCi0vLyBT
ZWUgaHR0cHM6Ly93ZWJraXQtdGVzdC1yZXN1bHRzLndlYmtpdC5vcmcvdGVzdGZpbGUuCi12YXIg
VEVTVF9UWVBFUyA9IFsKLSAgICAnbGF5b3V0LXRlc3RzJwotXTsKLQotCi0vLyBFbnVtIGZvciBp
bmRleGluZyBpbnRvIHRoZSBydW4tbGVuZ3RoIGVuY29kZWQgcmVzdWx0cyBpbiB0aGUgSlNPTiBm
aWxlcy4KLS8vIDAgaXMgd2hlcmUgdGhlIGNvdW50IGlzIGxlbmd0aCBpcyBzdG9yZWQuIDEgaXMg
dGhlIHZhbHVlLgotdmFyIFJMRSA9IHsKLSAgICBMRU5HVEg6IDAsCi0gICAgVkFMVUU6IDEKLX0K
LQotZnVuY3Rpb24gaXNGYWlsaW5nUmVzdWx0KHZhbHVlKQotewotICAgIHJldHVybiAnRlNUT0NJ
WicuaW5kZXhPZih2YWx1ZSkgIT0gLTE7Ci19Ci0KLS8vIEdlbmVyaWMgdXRpbGl0eSBmdW5jdGlv
bnMuCi1mdW5jdGlvbiAkKGlkKQotewotICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZChpZCk7Ci19Ci0KLWZ1bmN0aW9uIGN1cnJlbnRCdWlsZGVyR3JvdXBDYXRlZ29yeSgpCi17Ci0g
ICAgcmV0dXJuIExBWU9VVF9URVNUU19CVUlMREVSX0dST1VQUzsKLX0KLQotZnVuY3Rpb24gY3Vy
cmVudEJ1aWxkZXJHcm91cE5hbWUoKQotewotICAgIHJldHVybiBnX2hpc3RvcnkuY3Jvc3NEYXNo
Ym9hcmRTdGF0ZS5ncm91cCB8fCBPYmplY3Qua2V5cyhjdXJyZW50QnVpbGRlckdyb3VwQ2F0ZWdv
cnkoKSlbMF07Ci19Ci0KLWZ1bmN0aW9uIGN1cnJlbnRCdWlsZGVyR3JvdXAoKQotewotICAgIHJl
dHVybiBjdXJyZW50QnVpbGRlckdyb3VwQ2F0ZWdvcnkoKVtjdXJyZW50QnVpbGRlckdyb3VwTmFt
ZSgpXTsKLX0KLQotZnVuY3Rpb24gY3VycmVudEJ1aWxkZXJzKCkKLXsKLSAgICByZXR1cm4gY3Vy
cmVudEJ1aWxkZXJHcm91cCgpLmJ1aWxkZXJzOwotfQotCi1mdW5jdGlvbiBpc1RpcE9mVHJlZVdl
YktpdEJ1aWxkZXIoKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi12YXIgZ19yZXN1bHRzQnlC
dWlsZGVyID0ge307Ci12YXIgZ19leHBlY3RhdGlvbnNCeVBsYXRmb3JtID0ge307Ci0KLWZ1bmN0
aW9uIGlzRmxha2luZXNzRGFzaGJvYXJkKCkKLXsKLSAgICByZXR1cm4gc3RyaW5nLmVuZHNXaXRo
KHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSwgJ2ZsYWtpbmVzc19kYXNoYm9hcmQuaHRtbCcpOwot
fQotCi0vLyBDcmVhdGUgYSBuZXcgZnVuY3Rpb24gd2l0aCBzb21lIG9mIGl0cyBhcmd1ZW1lbnRz
Ci0vLyBwcmUtZmlsbGVkLgotLy8gVGFrZW4gZnJvbSBnb29nLnBhcnRpYWwgaW4gdGhlIENsb3N1
cmUgbGlicmFyeS4KLS8vIEBwYXJhbSB7RnVuY3Rpb259IGZuIEEgZnVuY3Rpb24gdG8gcGFydGlh
bGx5IGFwcGx5LgotLy8gQHBhcmFtIHsuLi4qfSB2YXJfYXJncyBBZGRpdGlvbmFsIGFyZ3VtZW50
cyB0aGF0IGFyZSBwYXJ0aWFsbHkKLS8vICAgICAgICAgYXBwbGllZCB0byBmbi4KLS8vIEByZXR1
cm4geyFGdW5jdGlvbn0gQSBwYXJ0aWFsbHktYXBwbGllZCBmb3JtIG9mIHRoZSBmdW5jdGlvbiBi
aW5kKCkgd2FzCi0vLyAgICAgICAgIGludm9rZWQgYXMgYSBtZXRob2Qgb2YuCi1mdW5jdGlvbiBw
YXJ0aWFsKGZuLCB2YXJfYXJncykKLXsKLSAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5z
bGljZS5jYWxsKGFyZ3VtZW50cywgMSk7Ci0gICAgcmV0dXJuIGZ1bmN0aW9uKCkgewotICAgICAg
ICAvLyBQcmVwZW5kIHRoZSBib3VuZCBhcmd1bWVudHMgdG8gdGhlIGN1cnJlbnQgYXJndW1lbnRz
LgotICAgICAgICB2YXIgbmV3QXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3Vt
ZW50cyk7Ci0gICAgICAgIG5ld0FyZ3MudW5zaGlmdC5hcHBseShuZXdBcmdzLCBhcmdzKTsKLSAg
ICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIG5ld0FyZ3MpOwotICAgIH07Ci19OwotCi0vLyBS
ZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBleHBlY3RhdGlvbnMgbWFwIGZvciB0aGUgY3VycmVudCB0
ZXN0VHlwZS4KLWZ1bmN0aW9uIGV4cGVjdGF0aW9uc01hcCgpCi17Ci0gICAgcmV0dXJuIGdfaGlz
dG9yeS5pc0xheW91dFRlc3RSZXN1bHRzKCkgPyBMQVlPVVRfVEVTVF9FWFBFQ1RBVElPTlNfTUFQ
XyA6IEdURVNUX0VYUEVDVEFUSU9OU19NQVBfOwotfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogVG9v
bHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9kYXNoYm9hcmRfYmFzZS5qcwpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotTEYKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9z
dGF0aWMtZGFzaGJvYXJkcy9keWdyYXBoLWNvbWJpbmVkLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZHlncmFwaC1jb21iaW5lZC5qcwko
cmV2aXNpb24gMjY0NTI3KQorKysgVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJv
YXJkcy9keWdyYXBoLWNvbWJpbmVkLmpzCShub25leGlzdGVudCkKQEAgLTEgKzAsMCBAQAotRHln
cmFwaExheW91dD1mdW5jdGlvbihiLGEpe3RoaXMuZHlncmFwaF89Yjt0aGlzLm9wdGlvbnM9e307
RHlncmFwaC51cGRhdGUodGhpcy5vcHRpb25zLGE/YTp7fSk7dGhpcy5kYXRhc2V0cz1uZXcgQXJy
YXkoKTt0aGlzLmFubm90YXRpb25zPW5ldyBBcnJheSgpfTtEeWdyYXBoTGF5b3V0LnByb3RvdHlw
ZS5hdHRyXz1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5keWdyYXBoXy5hdHRyXyhhKX07RHlncmFw
aExheW91dC5wcm90b3R5cGUuYWRkRGF0YXNldD1mdW5jdGlvbihhLGIpe3RoaXMuZGF0YXNldHNb
YV09Yn07RHlncmFwaExheW91dC5wcm90b3R5cGUuc2V0QW5ub3RhdGlvbnM9ZnVuY3Rpb24oZCl7
dmFyIGU9dGhpcy5hdHRyXygieFZhbHVlUGFyc2VyIik7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aDtj
Kyspe3ZhciBiPXt9O2lmKCFkW2NdLnh2YWwmJiFkW2NdLngpe3RoaXMuZHlncmFwaF8uZXJyb3Io
IkFubm90YXRpb25zIG11c3QgaGF2ZSBhbiAneCcgcHJvcGVydHkiKTtyZXR1cm59aWYoZFtjXS5p
Y29uJiYhKGRbY10uaGFzT3duUHJvcGVydHkoIndpZHRoIikmJmRbY10uaGFzT3duUHJvcGVydHko
ImhlaWdodCIpKSl7dGhpcy5keWdyYXBoXy5lcnJvcigiTXVzdCBzZXQgd2lkdGggYW5kIGhlaWdo
dCB3aGVuIHNldHRpbmcgYW5ub3RhdGlvbi5pY29uIHByb3BlcnR5Iik7cmV0dXJufUR5Z3JhcGgu
dXBkYXRlKGIsZFtjXSk7aWYoIWIueHZhbCl7Yi54dmFsPWUoYi54KX10aGlzLmFubm90YXRpb25z
LnB1c2goYil9fTtEeWdyYXBoTGF5b3V0LnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbigpe3Ro
aXMuX2V2YWx1YXRlTGltaXRzKCk7dGhpcy5fZXZhbHVhdGVMaW5lQ2hhcnRzKCk7dGhpcy5fZXZh
bHVhdGVMaW5lVGlja3MoKTt0aGlzLl9ldmFsdWF0ZUFubm90YXRpb25zKCl9O0R5Z3JhcGhMYXlv
dXQucHJvdG90eXBlLl9ldmFsdWF0ZUxpbWl0cz1mdW5jdGlvbigpe3RoaXMubWlueHZhbD10aGlz
Lm1heHh2YWw9bnVsbDtpZih0aGlzLm9wdGlvbnMuZGF0ZVdpbmRvdyl7dGhpcy5taW54dmFsPXRo
aXMub3B0aW9ucy5kYXRlV2luZG93WzBdO3RoaXMubWF4eHZhbD10aGlzLm9wdGlvbnMuZGF0ZVdp
bmRvd1sxXX1lbHNle2Zvcih2YXIgYyBpbiB0aGlzLmRhdGFzZXRzKXtpZighdGhpcy5kYXRhc2V0
cy5oYXNPd25Qcm9wZXJ0eShjKSl7Y29udGludWV9dmFyIGQ9dGhpcy5kYXRhc2V0c1tjXTt2YXIg
Yj1kWzBdWzBdO2lmKCF0aGlzLm1pbnh2YWx8fGI8dGhpcy5taW54dmFsKXt0aGlzLm1pbnh2YWw9
Yn12YXIgYT1kW2QubGVuZ3RoLTFdWzBdO2lmKCF0aGlzLm1heHh2YWx8fGE+dGhpcy5tYXh4dmFs
KXt0aGlzLm1heHh2YWw9YX19fXRoaXMueHJhbmdlPXRoaXMubWF4eHZhbC10aGlzLm1pbnh2YWw7
dGhpcy54c2NhbGU9KHRoaXMueHJhbmdlIT0wPzEvdGhpcy54cmFuZ2U6MSk7dGhpcy5taW55dmFs
PXRoaXMub3B0aW9ucy55QXhpc1swXTt0aGlzLm1heHl2YWw9dGhpcy5vcHRpb25zLnlBeGlzWzFd
O3RoaXMueXJhbmdlPXRoaXMubWF4eXZhbC10aGlzLm1pbnl2YWw7dGhpcy55c2NhbGU9KHRoaXMu
eXJhbmdlIT0wPzEvdGhpcy55cmFuZ2U6MSl9O0R5Z3JhcGhMYXlvdXQucHJvdG90eXBlLl9ldmFs
dWF0ZUxpbmVDaGFydHM9ZnVuY3Rpb24oKXt0aGlzLnBvaW50cz1uZXcgQXJyYXkoKTtmb3IodmFy
IGUgaW4gdGhpcy5kYXRhc2V0cyl7aWYoIXRoaXMuZGF0YXNldHMuaGFzT3duUHJvcGVydHkoZSkp
e2NvbnRpbnVlfXZhciBkPXRoaXMuZGF0YXNldHNbZV07Zm9yKHZhciBiPTA7YjxkLmxlbmd0aDti
Kyspe3ZhciBjPWRbYl07dmFyIGE9e3g6KChwYXJzZUZsb2F0KGNbMF0pLXRoaXMubWlueHZhbCkq
dGhpcy54c2NhbGUpLHk6MS0oKHBhcnNlRmxvYXQoY1sxXSktdGhpcy5taW55dmFsKSp0aGlzLnlz
Y2FsZSkseHZhbDpwYXJzZUZsb2F0KGNbMF0pLHl2YWw6cGFyc2VGbG9hdChjWzFdKSxuYW1lOmV9
O2lmKGEueTw9MCl7YS55PTB9aWYoYS55Pj0xKXthLnk9MX10aGlzLnBvaW50cy5wdXNoKGEpfX19
O0R5Z3JhcGhMYXlvdXQucHJvdG90eXBlLl9ldmFsdWF0ZUxpbmVUaWNrcz1mdW5jdGlvbigpe3Ro
aXMueHRpY2tzPW5ldyBBcnJheSgpO2Zvcih2YXIgYz0wO2M8dGhpcy5vcHRpb25zLnhUaWNrcy5s
ZW5ndGg7YysrKXt2YXIgYj10aGlzLm9wdGlvbnMueFRpY2tzW2NdO3ZhciBhPWIubGFiZWw7dmFy
IGQ9dGhpcy54c2NhbGUqKGIudi10aGlzLm1pbnh2YWwpO2lmKChkPj0wKSYmKGQ8PTEpKXt0aGlz
Lnh0aWNrcy5wdXNoKFtkLGFdKX19dGhpcy55dGlja3M9bmV3IEFycmF5KCk7Zm9yKHZhciBjPTA7
Yzx0aGlzLm9wdGlvbnMueVRpY2tzLmxlbmd0aDtjKyspe3ZhciBiPXRoaXMub3B0aW9ucy55VGlj
a3NbY107dmFyIGE9Yi5sYWJlbDt2YXIgZD0xLSh0aGlzLnlzY2FsZSooYi52LXRoaXMubWlueXZh
bCkpO2lmKChkPj0wKSYmKGQ8PTEpKXt0aGlzLnl0aWNrcy5wdXNoKFtkLGFdKX19fTtEeWdyYXBo
TGF5b3V0LnByb3RvdHlwZS5ldmFsdWF0ZVdpdGhFcnJvcj1mdW5jdGlvbigpe3RoaXMuZXZhbHVh
dGUoKTtpZighdGhpcy5vcHRpb25zLmVycm9yQmFycyl7cmV0dXJufXZhciBkPTA7Zm9yKHZhciBn
IGluIHRoaXMuZGF0YXNldHMpe2lmKCF0aGlzLmRhdGFzZXRzLmhhc093blByb3BlcnR5KGcpKXtj
b250aW51ZX12YXIgYz0wO3ZhciBmPXRoaXMuZGF0YXNldHNbZ107Zm9yKHZhciBjPTA7YzxmLmxl
bmd0aDtjKyssZCsrKXt2YXIgZT1mW2NdO3ZhciBhPXBhcnNlRmxvYXQoZVswXSk7dmFyIGI9cGFy
c2VGbG9hdChlWzFdKTtpZihhPT10aGlzLnBvaW50c1tkXS54dmFsJiZiPT10aGlzLnBvaW50c1tk
XS55dmFsKXt0aGlzLnBvaW50c1tkXS5lcnJvck1pbnVzPXBhcnNlRmxvYXQoZVsyXSk7dGhpcy5w
b2ludHNbZF0uZXJyb3JQbHVzPXBhcnNlRmxvYXQoZVszXSl9fX19O0R5Z3JhcGhMYXlvdXQucHJv
dG90eXBlLl9ldmFsdWF0ZUFubm90YXRpb25zPWZ1bmN0aW9uKCl7dmFyIGY9e307Zm9yKHZhciBk
PTA7ZDx0aGlzLmFubm90YXRpb25zLmxlbmd0aDtkKyspe3ZhciBiPXRoaXMuYW5ub3RhdGlvbnNb
ZF07ZltiLnh2YWwrIiwiK2Iuc2VyaWVzXT1ifXRoaXMuYW5ub3RhdGVkX3BvaW50cz1bXTtmb3Io
dmFyIGQ9MDtkPHRoaXMucG9pbnRzLmxlbmd0aDtkKyspe3ZhciBlPXRoaXMucG9pbnRzW2RdO3Zh
ciBjPWUueHZhbCsiLCIrZS5uYW1lO2lmKGMgaW4gZil7ZS5hbm5vdGF0aW9uPWZbY107dGhpcy5h
bm5vdGF0ZWRfcG9pbnRzLnB1c2goZSl9fX07RHlncmFwaExheW91dC5wcm90b3R5cGUucmVtb3Zl
QWxsRGF0YXNldHM9ZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5kYXRhc2V0czt0aGlzLmRhdGFzZXRz
PW5ldyBBcnJheSgpfTtEeWdyYXBoTGF5b3V0LnByb3RvdHlwZS51cGRhdGVPcHRpb25zPWZ1bmN0
aW9uKGEpe0R5Z3JhcGgudXBkYXRlKHRoaXMub3B0aW9ucyxhP2E6e30pfTtEeWdyYXBoQ2FudmFz
UmVuZGVyZXI9ZnVuY3Rpb24oYyxiLGQsYSl7dGhpcy5keWdyYXBoXz1jO3RoaXMub3B0aW9ucz17
c3Ryb2tlV2lkdGg6MC41LGRyYXdYQXhpczp0cnVlLGRyYXdZQXhpczp0cnVlLGF4aXNMaW5lQ29s
b3I6ImJsYWNrIixheGlzTGluZVdpZHRoOjAuNSxheGlzVGlja1NpemU6MyxheGlzTGFiZWxDb2xv
cjoiYmxhY2siLGF4aXNMYWJlbEZvbnQ6IkFyaWFsIixheGlzTGFiZWxGb250U2l6ZTo5LGF4aXNM
YWJlbFdpZHRoOjUwLGRyYXdZR3JpZDp0cnVlLGRyYXdYR3JpZDp0cnVlLGdyaWRMaW5lQ29sb3I6
InJnYigxMjgsMTI4LDEyOCkiLGZpbGxBbHBoYTowLjE1LHVuZGVybGF5Q2FsbGJhY2s6bnVsbH07
RHlncmFwaC51cGRhdGUodGhpcy5vcHRpb25zLGEpO3RoaXMubGF5b3V0PWQ7dGhpcy5lbGVtZW50
PWI7dGhpcy5jb250YWluZXI9dGhpcy5lbGVtZW50LnBhcmVudE5vZGU7dGhpcy5oZWlnaHQ9dGhp
cy5lbGVtZW50LmhlaWdodDt0aGlzLndpZHRoPXRoaXMuZWxlbWVudC53aWR0aDtpZighdGhpcy5p
c0lFJiYhKER5Z3JhcGhDYW52YXNSZW5kZXJlci5pc1N1cHBvcnRlZCh0aGlzLmVsZW1lbnQpKSl7
dGhyb3ciQ2FudmFzIGlzIG5vdCBzdXBwb3J0ZWQuIn10aGlzLnhsYWJlbHM9bmV3IEFycmF5KCk7
dGhpcy55bGFiZWxzPW5ldyBBcnJheSgpO3RoaXMuYW5ub3RhdGlvbnM9bmV3IEFycmF5KCk7dGhp
cy5hcmVhPXt4OnRoaXMub3B0aW9ucy55QXhpc0xhYmVsV2lkdGgrMip0aGlzLm9wdGlvbnMuYXhp
c1RpY2tTaXplLHk6MH07dGhpcy5hcmVhLnc9dGhpcy53aWR0aC10aGlzLmFyZWEueC10aGlzLm9w
dGlvbnMucmlnaHRHYXA7dGhpcy5hcmVhLmg9dGhpcy5oZWlnaHQtdGhpcy5vcHRpb25zLmF4aXNM
YWJlbEZvbnRTaXplLTIqdGhpcy5vcHRpb25zLmF4aXNUaWNrU2l6ZTt0aGlzLmNvbnRhaW5lci5z
dHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiO3RoaXMuY29udGFpbmVyLnN0eWxlLndpZHRoPXRoaXMu
d2lkdGgrInB4In07RHlncmFwaENhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlv
bigpe2lmKHRoaXMuaXNJRSl7dHJ5e2lmKHRoaXMuY2xlYXJEZWxheSl7dGhpcy5jbGVhckRlbGF5
LmNhbmNlbCgpO3RoaXMuY2xlYXJEZWxheT1udWxsfXZhciBiPXRoaXMuZWxlbWVudC5nZXRDb250
ZXh0KCIyZCIpfWNhdGNoKGQpe3RoaXMuY2xlYXJEZWxheT1Nb2NoaUtpdC5Bc3luYy53YWl0KHRo
aXMuSUVEZWxheSk7dGhpcy5jbGVhckRlbGF5LmFkZENhbGxiYWNrKGJpbmQodGhpcy5jbGVhcix0
aGlzKSk7cmV0dXJufX12YXIgYj10aGlzLmVsZW1lbnQuZ2V0Q29udGV4dCgiMmQiKTtiLmNsZWFy
UmVjdCgwLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCk7Zm9yKHZhciBhPTA7YTx0aGlzLnhsYWJl
bHMubGVuZ3RoO2ErKyl7dmFyIGM9dGhpcy54bGFiZWxzW2FdO2MucGFyZW50Tm9kZS5yZW1vdmVD
aGlsZChjKX1mb3IodmFyIGE9MDthPHRoaXMueWxhYmVscy5sZW5ndGg7YSsrKXt2YXIgYz10aGlz
LnlsYWJlbHNbYV07Yy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpfWZvcih2YXIgYT0wO2E8dGhp
cy5hbm5vdGF0aW9ucy5sZW5ndGg7YSsrKXt2YXIgYz10aGlzLmFubm90YXRpb25zW2FdO2MucGFy
ZW50Tm9kZS5yZW1vdmVDaGlsZChjKX10aGlzLnhsYWJlbHM9bmV3IEFycmF5KCk7dGhpcy55bGFi
ZWxzPW5ldyBBcnJheSgpO3RoaXMuYW5ub3RhdGlvbnM9bmV3IEFycmF5KCl9O0R5Z3JhcGhDYW52
YXNSZW5kZXJlci5pc1N1cHBvcnRlZD1mdW5jdGlvbihnKXt2YXIgYj1udWxsO3RyeXtpZih0eXBl
b2YoZyk9PSJ1bmRlZmluZWQifHxnPT1udWxsKXtiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNh
bnZhcyIpfWVsc2V7Yj1nfXZhciBjPWIuZ2V0Q29udGV4dCgiMmQiKX1jYXRjaChkKXt2YXIgZj1u
YXZpZ2F0b3IuYXBwVmVyc2lvbi5tYXRjaCgvTVNJRSAoXGRcLlxkKS8pO3ZhciBhPShuYXZpZ2F0
b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZigib3BlcmEiKSE9LTEpO2lmKCghZil8
fChmWzFdPDYpfHwoYSkpe3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX1yZXR1cm4gdHJ1ZX07RHln
cmFwaENhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgYj10aGlz
LmVsZW1lbnQuZ2V0Q29udGV4dCgiMmQiKTtpZih0aGlzLm9wdGlvbnMudW5kZXJsYXlDYWxsYmFj
ayl7dGhpcy5vcHRpb25zLnVuZGVybGF5Q2FsbGJhY2soYix0aGlzLmFyZWEsdGhpcy5sYXlvdXQs
dGhpcy5keWdyYXBoXyl9aWYodGhpcy5vcHRpb25zLmRyYXdZR3JpZCl7dmFyIGQ9dGhpcy5sYXlv
dXQueXRpY2tzO2Iuc2F2ZSgpO2Iuc3Ryb2tlU3R5bGU9dGhpcy5vcHRpb25zLmdyaWRMaW5lQ29s
b3I7Yi5saW5lV2lkdGg9dGhpcy5vcHRpb25zLmF4aXNMaW5lV2lkdGg7Zm9yKHZhciBjPTA7Yzxk
Lmxlbmd0aDtjKyspe3ZhciBhPXRoaXMuYXJlYS54O3ZhciBlPXRoaXMuYXJlYS55K2RbY11bMF0q
dGhpcy5hcmVhLmg7Yi5iZWdpblBhdGgoKTtiLm1vdmVUbyhhLGUpO2IubGluZVRvKGErdGhpcy5h
cmVhLncsZSk7Yi5jbG9zZVBhdGgoKTtiLnN0cm9rZSgpfX1pZih0aGlzLm9wdGlvbnMuZHJhd1hH
cmlkKXt2YXIgZD10aGlzLmxheW91dC54dGlja3M7Yi5zYXZlKCk7Yi5zdHJva2VTdHlsZT10aGlz
Lm9wdGlvbnMuZ3JpZExpbmVDb2xvcjtiLmxpbmVXaWR0aD10aGlzLm9wdGlvbnMuYXhpc0xpbmVX
aWR0aDtmb3IodmFyIGM9MDtjPGQubGVuZ3RoO2MrKyl7dmFyIGE9dGhpcy5hcmVhLngrZFtjXVsw
XSp0aGlzLmFyZWEudzt2YXIgZT10aGlzLmFyZWEueSt0aGlzLmFyZWEuaDtiLmJlZ2luUGF0aCgp
O2IubW92ZVRvKGEsZSk7Yi5saW5lVG8oYSx0aGlzLmFyZWEueSk7Yi5jbG9zZVBhdGgoKTtiLnN0
cm9rZSgpfX10aGlzLl9yZW5kZXJMaW5lQ2hhcnQoKTt0aGlzLl9yZW5kZXJBeGlzKCk7dGhpcy5f
cmVuZGVyQW5ub3RhdGlvbnMoKX07RHlncmFwaENhbnZhc1JlbmRlcmVyLnByb3RvdHlwZS5fcmVu
ZGVyQXhpcz1mdW5jdGlvbigpe2lmKCF0aGlzLm9wdGlvbnMuZHJhd1hBeGlzJiYhdGhpcy5vcHRp
b25zLmRyYXdZQXhpcyl7cmV0dXJufXZhciBiPXRoaXMuZWxlbWVudC5nZXRDb250ZXh0KCIyZCIp
O3ZhciBnPXtwb3NpdGlvbjoiYWJzb2x1dGUiLGZvbnRTaXplOnRoaXMub3B0aW9ucy5heGlzTGFi
ZWxGb250U2l6ZSsicHgiLHpJbmRleDoxMCxjb2xvcjp0aGlzLm9wdGlvbnMuYXhpc0xhYmVsQ29s
b3Isd2lkdGg6dGhpcy5vcHRpb25zLmF4aXNMYWJlbFdpZHRoKyJweCIsb3ZlcmZsb3c6ImhpZGRl
biJ9O3ZhciBkPWZ1bmN0aW9uKG8pe3ZhciBxPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
O2Zvcih2YXIgcCBpbiBnKXtpZihnLmhhc093blByb3BlcnR5KHApKXtxLnN0eWxlW3BdPWdbcF19
fXEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobykpO3JldHVybiBxfTtiLnNh
dmUoKTtiLnN0cm9rZVN0eWxlPXRoaXMub3B0aW9ucy5heGlzTGluZUNvbG9yO2IubGluZVdpZHRo
PXRoaXMub3B0aW9ucy5heGlzTGluZVdpZHRoO2lmKHRoaXMub3B0aW9ucy5kcmF3WUF4aXMpe2lm
KHRoaXMubGF5b3V0Lnl0aWNrcyYmdGhpcy5sYXlvdXQueXRpY2tzLmxlbmd0aD4wKXtmb3IodmFy
IGU9MDtlPHRoaXMubGF5b3V0Lnl0aWNrcy5sZW5ndGg7ZSsrKXt2YXIgZj10aGlzLmxheW91dC55
dGlja3NbZV07aWYodHlwZW9mKGYpPT0iZnVuY3Rpb24iKXtyZXR1cm59dmFyIGw9dGhpcy5hcmVh
Lng7dmFyIGo9dGhpcy5hcmVhLnkrZlswXSp0aGlzLmFyZWEuaDtiLmJlZ2luUGF0aCgpO2IubW92
ZVRvKGwsaik7Yi5saW5lVG8obC10aGlzLm9wdGlvbnMuYXhpc1RpY2tTaXplLGopO2IuY2xvc2VQ
YXRoKCk7Yi5zdHJva2UoKTt2YXIgaz1kKGZbMV0pO3ZhciBoPShqLXRoaXMub3B0aW9ucy5heGlz
TGFiZWxGb250U2l6ZS8yKTtpZihoPDApe2g9MH1pZihoK3RoaXMub3B0aW9ucy5heGlzTGFiZWxG
b250U2l6ZSszPnRoaXMuaGVpZ2h0KXtrLnN0eWxlLmJvdHRvbT0iMHB4In1lbHNle2suc3R5bGUu
dG9wPWgrInB4In1rLnN0eWxlLmxlZnQ9IjBweCI7ay5zdHlsZS50ZXh0QWxpZ249InJpZ2h0Ijtr
LnN0eWxlLndpZHRoPXRoaXMub3B0aW9ucy55QXhpc0xhYmVsV2lkdGgrInB4Ijt0aGlzLmNvbnRh
aW5lci5hcHBlbmRDaGlsZChrKTt0aGlzLnlsYWJlbHMucHVzaChrKX12YXIgbT10aGlzLnlsYWJl
bHNbMF07dmFyIG49dGhpcy5vcHRpb25zLmF4aXNMYWJlbEZvbnRTaXplO3ZhciBhPXBhcnNlSW50
KG0uc3R5bGUudG9wKStuO2lmKGE+dGhpcy5oZWlnaHQtbil7bS5zdHlsZS50b3A9KHBhcnNlSW50
KG0uc3R5bGUudG9wKS1uLzIpKyJweCJ9fWIuYmVnaW5QYXRoKCk7Yi5tb3ZlVG8odGhpcy5hcmVh
LngsdGhpcy5hcmVhLnkpO2IubGluZVRvKHRoaXMuYXJlYS54LHRoaXMuYXJlYS55K3RoaXMuYXJl
YS5oKTtiLmNsb3NlUGF0aCgpO2Iuc3Ryb2tlKCl9aWYodGhpcy5vcHRpb25zLmRyYXdYQXhpcyl7
aWYodGhpcy5sYXlvdXQueHRpY2tzKXtmb3IodmFyIGU9MDtlPHRoaXMubGF5b3V0Lnh0aWNrcy5s
ZW5ndGg7ZSsrKXt2YXIgZj10aGlzLmxheW91dC54dGlja3NbZV07aWYodHlwZW9mKGRhdGFzZXQp
PT0iZnVuY3Rpb24iKXtyZXR1cm59dmFyIGw9dGhpcy5hcmVhLngrZlswXSp0aGlzLmFyZWEudzt2
YXIgaj10aGlzLmFyZWEueSt0aGlzLmFyZWEuaDtiLmJlZ2luUGF0aCgpO2IubW92ZVRvKGwsaik7
Yi5saW5lVG8obCxqK3RoaXMub3B0aW9ucy5heGlzVGlja1NpemUpO2IuY2xvc2VQYXRoKCk7Yi5z
dHJva2UoKTt2YXIgaz1kKGZbMV0pO2suc3R5bGUudGV4dEFsaWduPSJjZW50ZXIiO2suc3R5bGUu
Ym90dG9tPSIwcHgiO3ZhciBjPShsLXRoaXMub3B0aW9ucy5heGlzTGFiZWxXaWR0aC8yKTtpZihj
K3RoaXMub3B0aW9ucy5heGlzTGFiZWxXaWR0aD50aGlzLndpZHRoKXtjPXRoaXMud2lkdGgtdGhp
cy5vcHRpb25zLnhBeGlzTGFiZWxXaWR0aDtrLnN0eWxlLnRleHRBbGlnbj0icmlnaHQifWlmKGM8
MCl7Yz0wO2suc3R5bGUudGV4dEFsaWduPSJsZWZ0In1rLnN0eWxlLmxlZnQ9YysicHgiO2suc3R5
bGUud2lkdGg9dGhpcy5vcHRpb25zLnhBeGlzTGFiZWxXaWR0aCsicHgiO3RoaXMuY29udGFpbmVy
LmFwcGVuZENoaWxkKGspO3RoaXMueGxhYmVscy5wdXNoKGspfX1iLmJlZ2luUGF0aCgpO2IubW92
ZVRvKHRoaXMuYXJlYS54LHRoaXMuYXJlYS55K3RoaXMuYXJlYS5oKTtiLmxpbmVUbyh0aGlzLmFy
ZWEueCt0aGlzLmFyZWEudyx0aGlzLmFyZWEueSt0aGlzLmFyZWEuaCk7Yi5jbG9zZVBhdGgoKTti
LnN0cm9rZSgpfWIucmVzdG9yZSgpfTtEeWdyYXBoQ2FudmFzUmVuZGVyZXIucHJvdG90eXBlLl9y
ZW5kZXJBbm5vdGF0aW9ucz1mdW5jdGlvbigpe3ZhciBoPXtwb3NpdGlvbjoiYWJzb2x1dGUiLGZv
bnRTaXplOnRoaXMub3B0aW9ucy5heGlzTGFiZWxGb250U2l6ZSsicHgiLHpJbmRleDoxMCxvdmVy
ZmxvdzoiaGlkZGVuIn07dmFyIGo9ZnVuY3Rpb24ocSxyLHMsYSl7cmV0dXJuIGZ1bmN0aW9uKHQp
e3ZhciBwPXMuYW5ub3RhdGlvbjtpZihwLmhhc093blByb3BlcnR5KHEpKXtwW3FdKHAscyxhLmR5
Z3JhcGhfLHQpfWVsc2V7aWYoYS5keWdyYXBoXy5hdHRyXyhyKSl7YS5keWdyYXBoXy5hdHRyXyhy
KShwLHMsYS5keWdyYXBoXyx0KX19fX07dmFyIG09dGhpcy5sYXlvdXQuYW5ub3RhdGVkX3BvaW50
cztmb3IodmFyIGc9MDtnPG0ubGVuZ3RoO2crKyl7dmFyIGU9bVtnXTtpZihlLmNhbnZhc3g8dGhp
cy5hcmVhLnh8fGUuY2FudmFzeD50aGlzLmFyZWEueCt0aGlzLmFyZWEudyl7Y29udGludWV9dmFy
IGs9ZS5hbm5vdGF0aW9uO3ZhciBsPTY7aWYoay5oYXNPd25Qcm9wZXJ0eSgidGlja0hlaWdodCIp
KXtsPWsudGlja0hlaWdodH12YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtmb3Io
dmFyIGIgaW4gaCl7aWYoaC5oYXNPd25Qcm9wZXJ0eShiKSl7Yy5zdHlsZVtiXT1oW2JdfX1pZigh
ay5oYXNPd25Qcm9wZXJ0eSgiaWNvbiIpKXtjLmNsYXNzTmFtZT0iZHlncmFwaERlZmF1bHRBbm5v
dGF0aW9uIn1pZihrLmhhc093blByb3BlcnR5KCJjc3NDbGFzcyIpKXtjLmNsYXNzTmFtZSs9IiAi
K2suY3NzQ2xhc3N9dmFyIGQ9ay5oYXNPd25Qcm9wZXJ0eSgid2lkdGgiKT9rLndpZHRoOjE2O3Zh
ciBuPWsuaGFzT3duUHJvcGVydHkoImhlaWdodCIpP2suaGVpZ2h0OjE2O2lmKGsuaGFzT3duUHJv
cGVydHkoImljb24iKSl7dmFyIGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7Zi5zcmM9
ay5pY29uO2Yud2lkdGg9ZDtmLmhlaWdodD1uO2MuYXBwZW5kQ2hpbGQoZil9ZWxzZXtpZihlLmFu
bm90YXRpb24uaGFzT3duUHJvcGVydHkoInNob3J0VGV4dCIpKXtjLmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZVRleHROb2RlKGUuYW5ub3RhdGlvbi5zaG9ydFRleHQpKX19Yy5zdHlsZS5sZWZ0
PShlLmNhbnZhc3gtZC8yKSsicHgiO2lmKGsuYXR0YWNoQXRCb3R0b20pe2Muc3R5bGUudG9wPSh0
aGlzLmFyZWEuaC1uLWwpKyJweCJ9ZWxzZXtjLnN0eWxlLnRvcD0oZS5jYW52YXN5LW4tbCkrInB4
In1jLnN0eWxlLndpZHRoPWQrInB4IjtjLnN0eWxlLmhlaWdodD1uKyJweCI7Yy50aXRsZT1lLmFu
bm90YXRpb24udGV4dDtjLnN0eWxlLmNvbG9yPXRoaXMuY29sb3JzW2UubmFtZV07Yy5zdHlsZS5i
b3JkZXJDb2xvcj10aGlzLmNvbG9yc1tlLm5hbWVdO2suZGl2PWM7RHlncmFwaC5hZGRFdmVudChj
LCJjbGljayIsaigiY2xpY2tIYW5kbGVyIiwiYW5ub3RhdGlvbkNsaWNrSGFuZGxlciIsZSx0aGlz
KSk7RHlncmFwaC5hZGRFdmVudChjLCJtb3VzZW92ZXIiLGooIm1vdXNlT3ZlckhhbmRsZXIiLCJh
bm5vdGF0aW9uTW91c2VPdmVySGFuZGxlciIsZSx0aGlzKSk7RHlncmFwaC5hZGRFdmVudChjLCJt
b3VzZW91dCIsaigibW91c2VPdXRIYW5kbGVyIiwiYW5ub3RhdGlvbk1vdXNlT3V0SGFuZGxlciIs
ZSx0aGlzKSk7RHlncmFwaC5hZGRFdmVudChjLCJkYmxjbGljayIsaigiZGJsQ2xpY2tIYW5kbGVy
IiwiYW5ub3RhdGlvbkRibENsaWNrSGFuZGxlciIsZSx0aGlzKSk7dGhpcy5jb250YWluZXIuYXBw
ZW5kQ2hpbGQoYyk7dGhpcy5hbm5vdGF0aW9ucy5wdXNoKGMpO3ZhciBvPXRoaXMuZWxlbWVudC5n
ZXRDb250ZXh0KCIyZCIpO28uc3Ryb2tlU3R5bGU9dGhpcy5jb2xvcnNbZS5uYW1lXTtvLmJlZ2lu
UGF0aCgpO2lmKCFrLmF0dGFjaEF0Qm90dG9tKXtvLm1vdmVUbyhlLmNhbnZhc3gsZS5jYW52YXN5
KTtvLmxpbmVUbyhlLmNhbnZhc3gsZS5jYW52YXN5LTItbCl9ZWxzZXtvLm1vdmVUbyhlLmNhbnZh
c3gsdGhpcy5hcmVhLmgpO28ubGluZVRvKGUuY2FudmFzeCx0aGlzLmFyZWEuaC0yLWwpfW8uY2xv
c2VQYXRoKCk7by5zdHJva2UoKX19O0R5Z3JhcGhDYW52YXNSZW5kZXJlci5wcm90b3R5cGUuX3Jl
bmRlckxpbmVDaGFydD1mdW5jdGlvbigpe3ZhciBjPXRoaXMuZWxlbWVudC5nZXRDb250ZXh0KCIy
ZCIpO3ZhciBmPXRoaXMub3B0aW9ucy5jb2xvclNjaGVtZS5sZW5ndGg7dmFyIG89dGhpcy5vcHRp
b25zLmNvbG9yU2NoZW1lO3ZhciB6PXRoaXMub3B0aW9ucy5maWxsQWxwaGE7dmFyIEU9dGhpcy5s
YXlvdXQub3B0aW9ucy5lcnJvckJhcnM7dmFyIHQ9dGhpcy5sYXlvdXQub3B0aW9ucy5maWxsR3Jh
cGg7dmFyIGQ9dGhpcy5sYXlvdXQub3B0aW9ucy5zdGFja2VkR3JhcGg7dmFyIGw9dGhpcy5sYXlv
dXQub3B0aW9ucy5zdGVwUGxvdDt2YXIgRz1bXTtmb3IodmFyIEggaW4gdGhpcy5sYXlvdXQuZGF0
YXNldHMpe2lmKHRoaXMubGF5b3V0LmRhdGFzZXRzLmhhc093blByb3BlcnR5KEgpKXtHLnB1c2go
SCl9fXZhciBBPUcubGVuZ3RoO3RoaXMuY29sb3JzPXt9O2Zvcih2YXIgQz0wO0M8QTtDKyspe3Ro
aXMuY29sb3JzW0dbQ11dPW9bQyVmXX1mb3IodmFyIEM9MDtDPHRoaXMubGF5b3V0LnBvaW50cy5s
ZW5ndGg7QysrKXt2YXIgdj10aGlzLmxheW91dC5wb2ludHNbQ107di5jYW52YXN4PXRoaXMuYXJl
YS53KnYueCt0aGlzLmFyZWEueDt2LmNhbnZhc3k9dGhpcy5hcmVhLmgqdi55K3RoaXMuYXJlYS55
fXZhciBwPWZ1bmN0aW9uKGope3JldHVybiBqJiYhaXNOYU4oail9O3ZhciB1PWM7aWYoRSl7aWYo
dCl7dGhpcy5keWdyYXBoXy53YXJuKCJDYW4ndCB1c2UgZmlsbEdyYXBoIG9wdGlvbiB3aXRoIGVy
cm9yIGJhcnMiKX1mb3IodmFyIEM9MDtDPEE7QysrKXt2YXIgaz1HW0NdO3ZhciB4PXRoaXMuY29s
b3JzW2tdO3Uuc2F2ZSgpO3ZhciBoPU5hTjt2YXIgZT1OYU47dmFyIGc9Wy0xLC0xXTt2YXIgRD10
aGlzLmxheW91dC55c2NhbGU7dmFyIGE9bmV3IFJHQkNvbG9yKHgpO3ZhciBGPSJyZ2JhKCIrYS5y
KyIsIithLmcrIiwiK2EuYisiLCIreisiKSI7dS5maWxsU3R5bGU9Rjt1LmJlZ2luUGF0aCgpO2Zv
cih2YXIgeT0wO3k8dGhpcy5sYXlvdXQucG9pbnRzLmxlbmd0aDt5Kyspe3ZhciB2PXRoaXMubGF5
b3V0LnBvaW50c1t5XTtpZih2Lm5hbWU9PWspe2lmKCFwKHYueSkpe2g9TmFOO2NvbnRpbnVlfWlm
KGwpe3ZhciByPVtlLXYuZXJyb3JQbHVzKkQsZSt2LmVycm9yTWludXMqRF07ZT12Lnl9ZWxzZXt2
YXIgcj1bdi55LXYuZXJyb3JQbHVzKkQsdi55K3YuZXJyb3JNaW51cypEXX1yWzBdPXRoaXMuYXJl
YS5oKnJbMF0rdGhpcy5hcmVhLnk7clsxXT10aGlzLmFyZWEuaCpyWzFdK3RoaXMuYXJlYS55O2lm
KCFpc05hTihoKSl7aWYobCl7dS5tb3ZlVG8oaCxyWzBdKX1lbHNle3UubW92ZVRvKGgsZ1swXSl9
dS5saW5lVG8odi5jYW52YXN4LHJbMF0pO3UubGluZVRvKHYuY2FudmFzeCxyWzFdKTtpZihsKXt1
LmxpbmVUbyhoLHJbMV0pfWVsc2V7dS5saW5lVG8oaCxnWzFdKX11LmNsb3NlUGF0aCgpfWc9cjto
PXYuY2FudmFzeH19dS5maWxsKCl9fWVsc2V7aWYodCl7dmFyIGI9MSt0aGlzLmxheW91dC5taW55
dmFsKnRoaXMubGF5b3V0LnlzY2FsZTtpZihiPDApe2I9MH1lbHNle2lmKGI+MSl7Yj0xfX1iPXRo
aXMuYXJlYS5oKmIrdGhpcy5hcmVhLnk7dmFyIHE9W107Zm9yKHZhciBDPUEtMTtDPj0wO0MtLSl7
dmFyIGs9R1tDXTt2YXIgeD10aGlzLmNvbG9yc1trXTt1LnNhdmUoKTt2YXIgaD1OYU47dmFyIGc9
Wy0xLC0xXTt2YXIgRD10aGlzLmxheW91dC55c2NhbGU7dmFyIGE9bmV3IFJHQkNvbG9yKHgpO3Zh
ciBGPSJyZ2JhKCIrYS5yKyIsIithLmcrIiwiK2EuYisiLCIreisiKSI7dS5maWxsU3R5bGU9Rjt1
LmJlZ2luUGF0aCgpO2Zvcih2YXIgeT0wO3k8dGhpcy5sYXlvdXQucG9pbnRzLmxlbmd0aDt5Kysp
e3ZhciB2PXRoaXMubGF5b3V0LnBvaW50c1t5XTtpZih2Lm5hbWU9PWspe2lmKCFwKHYueSkpe2g9
TmFOO2NvbnRpbnVlfXZhciByO2lmKGQpe2xhc3RZPXFbdi5jYW52YXN4XTtpZihsYXN0WT09PXVu
ZGVmaW5lZCl7bGFzdFk9Yn1xW3YuY2FudmFzeF09di5jYW52YXN5O3I9W3YuY2FudmFzeSxsYXN0
WV19ZWxzZXtyPVt2LmNhbnZhc3ksYl19aWYoIWlzTmFOKGgpKXt1Lm1vdmVUbyhoLGdbMF0pO2lm
KGwpe3UubGluZVRvKHYuY2FudmFzeCxnWzBdKX1lbHNle3UubGluZVRvKHYuY2FudmFzeCxyWzBd
KX11LmxpbmVUbyh2LmNhbnZhc3gsclsxXSk7dS5saW5lVG8oaCxnWzFdKTt1LmNsb3NlUGF0aCgp
fWc9cjtoPXYuY2FudmFzeH19dS5maWxsKCl9fX1mb3IodmFyIEM9MDtDPEE7QysrKXt2YXIgaz1H
W0NdO3ZhciB4PXRoaXMuY29sb3JzW2tdO3ZhciBzPXRoaXMuZHlncmFwaF8uYXR0cl8oInN0cm9r
ZVdpZHRoIixrKTtjLnNhdmUoKTt2YXIgdj10aGlzLmxheW91dC5wb2ludHNbMF07dmFyIG09dGhp
cy5keWdyYXBoXy5hdHRyXygicG9pbnRTaXplIixrKTt2YXIgaD1udWxsLGU9bnVsbDt2YXIgdz10
aGlzLmR5Z3JhcGhfLmF0dHJfKCJkcmF3UG9pbnRzIixrKTt2YXIgQj10aGlzLmxheW91dC5wb2lu
dHM7Zm9yKHZhciB5PTA7eTxCLmxlbmd0aDt5Kyspe3ZhciB2PUJbeV07aWYodi5uYW1lPT1rKXtp
ZighcCh2LmNhbnZhc3kpKXtoPWU9bnVsbH1lbHNle3ZhciBuPSghaCYmKHk9PUIubGVuZ3RoLTF8
fCFwKEJbeSsxXS5jYW52YXN5KSkpO2lmKCFoKXtoPXYuY2FudmFzeDtlPXYuY2FudmFzeX1lbHNl
e2lmKHMpe3UuYmVnaW5QYXRoKCk7dS5zdHJva2VTdHlsZT14O3UubGluZVdpZHRoPXM7dS5tb3Zl
VG8oaCxlKTtpZihsKXt1LmxpbmVUbyh2LmNhbnZhc3gsZSl9aD12LmNhbnZhc3g7ZT12LmNhbnZh
c3k7dS5saW5lVG8oaCxlKTt1LnN0cm9rZSgpfX1pZih3fHxuKXt1LmJlZ2luUGF0aCgpO3UuZmls
bFN0eWxlPXg7dS5hcmModi5jYW52YXN4LHYuY2FudmFzeSxtLDAsMipNYXRoLlBJLGZhbHNlKTt1
LmZpbGwoKX19fX19Yy5yZXN0b3JlKCl9O0R5Z3JhcGg9ZnVuY3Rpb24oYyxiLGEpe2lmKGFyZ3Vt
ZW50cy5sZW5ndGg+MCl7aWYoYXJndW1lbnRzLmxlbmd0aD09NCl7dGhpcy53YXJuKCJVc2luZyBk
ZXByZWNhdGVkIGZvdXItYXJndW1lbnQgZHlncmFwaCBjb25zdHJ1Y3RvciIpO3RoaXMuX19vbGRf
aW5pdF9fKGMsYixhcmd1bWVudHNbMl0sYXJndW1lbnRzWzNdKX1lbHNle3RoaXMuX19pbml0X18o
YyxiLGEpfX19O0R5Z3JhcGguTkFNRT0iRHlncmFwaCI7RHlncmFwaC5WRVJTSU9OPSIxLjIiO0R5
Z3JhcGguX19yZXByX189ZnVuY3Rpb24oKXtyZXR1cm4iWyIrdGhpcy5OQU1FKyIgIit0aGlzLlZF
UlNJT04rIl0ifTtEeWdyYXBoLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19yZXBy
X18oKX07RHlncmFwaC5ERUZBVUxUX1JPTExfUEVSSU9EPTE7RHlncmFwaC5ERUZBVUxUX1dJRFRI
PTQ4MDtEeWdyYXBoLkRFRkFVTFRfSEVJR0hUPTMyMDtEeWdyYXBoLkFYSVNfTElORV9XSURUSD0w
LjM7RHlncmFwaC5ERUZBVUxUX0FUVFJTPXtoaWdobGlnaHRDaXJjbGVTaXplOjMscGl4ZWxzUGVy
WExhYmVsOjYwLHBpeGVsc1BlcllMYWJlbDozMCxsYWJlbHNEaXZXaWR0aDoyNTAsbGFiZWxzRGl2
U3R5bGVzOnt9LGxhYmVsc1NlcGFyYXRlTGluZXM6ZmFsc2UsbGFiZWxzU2hvd1plcm9WYWx1ZXM6
dHJ1ZSxsYWJlbHNLTUI6ZmFsc2UsbGFiZWxzS01HMjpmYWxzZSxzaG93TGFiZWxzT25IaWdobGln
aHQ6dHJ1ZSx5VmFsdWVGb3JtYXR0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIER5Z3JhcGgucm91bmRf
KGEsMil9LHN0cm9rZVdpZHRoOjEsYXhpc1RpY2tTaXplOjMsYXhpc0xhYmVsRm9udFNpemU6MTQs
eEF4aXNMYWJlbFdpZHRoOjUwLHlBeGlzTGFiZWxXaWR0aDo1MCx4QXhpc0xhYmVsRm9ybWF0dGVy
OkR5Z3JhcGguZGF0ZUF4aXNGb3JtYXR0ZXIscmlnaHRHYXA6NSxzaG93Um9sbGVyOmZhbHNlLHhW
YWx1ZUZvcm1hdHRlcjpEeWdyYXBoLmRhdGVTdHJpbmdfLHhWYWx1ZVBhcnNlcjpEeWdyYXBoLmRh
dGVQYXJzZXIseFRpY2tlcjpEeWdyYXBoLmRhdGVUaWNrZXIsZGVsaW1pdGVyOiIsIixsb2dTY2Fs
ZTpmYWxzZSxzaWdtYToyLGVycm9yQmFyczpmYWxzZSxmcmFjdGlvbnM6ZmFsc2Usd2lsc29uSW50
ZXJ2YWw6dHJ1ZSxjdXN0b21CYXJzOmZhbHNlLGZpbGxHcmFwaDpmYWxzZSxmaWxsQWxwaGE6MC4x
NSxjb25uZWN0U2VwYXJhdGVkUG9pbnRzOmZhbHNlLHN0YWNrZWRHcmFwaDpmYWxzZSxoaWRlT3Zl
cmxheU9uTW91c2VPdXQ6dHJ1ZSxzdGVwUGxvdDpmYWxzZX07RHlncmFwaC5ERUJVRz0xO0R5Z3Jh
cGguSU5GTz0yO0R5Z3JhcGguV0FSTklORz0zO0R5Z3JhcGguRVJST1I9MztEeWdyYXBoLmFkZGVk
QW5ub3RhdGlvbkNTUz1mYWxzZTtEeWdyYXBoLnByb3RvdHlwZS5fX29sZF9pbml0X189ZnVuY3Rp
b24oZixkLGUsYil7aWYoZSE9bnVsbCl7dmFyIGE9WyJEYXRlIl07Zm9yKHZhciBjPTA7YzxlLmxl
bmd0aDtjKyspe2EucHVzaChlW2NdKX1EeWdyYXBoLnVwZGF0ZShiLHtsYWJlbHM6YX0pfXRoaXMu
X19pbml0X18oZixkLGIpfTtEeWdyYXBoLnByb3RvdHlwZS5fX2luaXRfXz1mdW5jdGlvbihjLGIs
YSl7aWYoYT09bnVsbCl7YT17fX10aGlzLm1haW5kaXZfPWM7dGhpcy5maWxlXz1iO3RoaXMucm9s
bFBlcmlvZF89YS5yb2xsUGVyaW9kfHxEeWdyYXBoLkRFRkFVTFRfUk9MTF9QRVJJT0Q7dGhpcy5w
cmV2aW91c1ZlcnRpY2FsWF89LTE7dGhpcy5mcmFjdGlvbnNfPWEuZnJhY3Rpb25zfHxmYWxzZTt0
aGlzLmRhdGVXaW5kb3dfPWEuZGF0ZVdpbmRvd3x8bnVsbDt0aGlzLnZhbHVlUmFuZ2VfPWEudmFs
dWVSYW5nZXx8bnVsbDt0aGlzLndpbHNvbkludGVydmFsXz1hLndpbHNvbkludGVydmFsfHx0cnVl
O3RoaXMuaXNfaW5pdGlhbF9kcmF3Xz10cnVlO3RoaXMuYW5ub3RhdGlvbnNfPVtdO2MuaW5uZXJI
VE1MPSIiO2lmKGMuc3R5bGUud2lkdGg9PSIiKXtjLnN0eWxlLndpZHRoPWEud2lkdGh8fER5Z3Jh
cGguREVGQVVMVF9XSURUSCsicHgifWlmKGMuc3R5bGUuaGVpZ2h0PT0iIil7Yy5zdHlsZS5oZWln
aHQ9YS5oZWlnaHR8fER5Z3JhcGguREVGQVVMVF9IRUlHSFQrInB4In10aGlzLndpZHRoXz1wYXJz
ZUludChjLnN0eWxlLndpZHRoLDEwKTt0aGlzLmhlaWdodF89cGFyc2VJbnQoYy5zdHlsZS5oZWln
aHQsMTApO2lmKGMuc3R5bGUud2lkdGguaW5kZXhPZigiJSIpPT1jLnN0eWxlLndpZHRoLmxlbmd0
aC0xKXt0aGlzLndpZHRoXz1jLm9mZnNldFdpZHRofWlmKGMuc3R5bGUuaGVpZ2h0LmluZGV4T2Yo
IiUiKT09Yy5zdHlsZS5oZWlnaHQubGVuZ3RoLTEpe3RoaXMuaGVpZ2h0Xz1jLm9mZnNldEhlaWdo
dH1pZih0aGlzLndpZHRoXz09MCl7dGhpcy5lcnJvcigiZHlncmFwaCBoYXMgemVybyB3aWR0aC4g
UGxlYXNlIHNwZWNpZnkgYSB3aWR0aCBpbiBwaXhlbHMuIil9aWYodGhpcy5oZWlnaHRfPT0wKXt0
aGlzLmVycm9yKCJkeWdyYXBoIGhhcyB6ZXJvIGhlaWdodC4gUGxlYXNlIHNwZWNpZnkgYSBoZWln
aHQgaW4gcGl4ZWxzLiIpfWlmKGEuc3RhY2tlZEdyYXBoKXthLmZpbGxHcmFwaD10cnVlfXRoaXMu
dXNlcl9hdHRyc189e307RHlncmFwaC51cGRhdGUodGhpcy51c2VyX2F0dHJzXyxhKTt0aGlzLmF0
dHJzXz17fTtEeWdyYXBoLnVwZGF0ZSh0aGlzLmF0dHJzXyxEeWdyYXBoLkRFRkFVTFRfQVRUUlMp
O3RoaXMuYm91bmRhcnlJZHNfPVtdO3RoaXMubGFiZWxzRnJvbUNTVl89KHRoaXMuYXR0cl8oImxh
YmVscyIpPT1udWxsKTtEeWdyYXBoLmFkZEFubm90YXRpb25SdWxlKCk7dGhpcy5jcmVhdGVJbnRl
cmZhY2VfKCk7dGhpcy5zdGFydF8oKX07RHlncmFwaC5wcm90b3R5cGUuYXR0cl89ZnVuY3Rpb24o
YixhKXtpZihhJiZ0eXBlb2YodGhpcy51c2VyX2F0dHJzX1thXSkhPSJ1bmRlZmluZWQiJiZ0aGlz
LnVzZXJfYXR0cnNfW2FdIT1udWxsJiZ0eXBlb2YodGhpcy51c2VyX2F0dHJzX1thXVtiXSkhPSJ1
bmRlZmluZWQiKXtyZXR1cm4gdGhpcy51c2VyX2F0dHJzX1thXVtiXX1lbHNle2lmKHR5cGVvZih0
aGlzLnVzZXJfYXR0cnNfW2JdKSE9InVuZGVmaW5lZCIpe3JldHVybiB0aGlzLnVzZXJfYXR0cnNf
W2JdfWVsc2V7aWYodHlwZW9mKHRoaXMuYXR0cnNfW2JdKSE9InVuZGVmaW5lZCIpe3JldHVybiB0
aGlzLmF0dHJzX1tiXX1lbHNle3JldHVybiBudWxsfX19fTtEeWdyYXBoLnByb3RvdHlwZS5sb2c9
ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YoY29uc29sZSkhPSJ1bmRlZmluZWQiKXtzd2l0Y2goYSl7
Y2FzZSBEeWdyYXBoLkRFQlVHOmNvbnNvbGUuZGVidWcoImR5Z3JhcGhzOiAiK2IpO2JyZWFrO2Nh
c2UgRHlncmFwaC5JTkZPOmNvbnNvbGUuaW5mbygiZHlncmFwaHM6ICIrYik7YnJlYWs7Y2FzZSBE
eWdyYXBoLldBUk5JTkc6Y29uc29sZS53YXJuKCJkeWdyYXBoczogIitiKTticmVhaztjYXNlIER5
Z3JhcGguRVJST1I6Y29uc29sZS5lcnJvcigiZHlncmFwaHM6ICIrYik7YnJlYWt9fX07RHlncmFw
aC5wcm90b3R5cGUuaW5mbz1mdW5jdGlvbihhKXt0aGlzLmxvZyhEeWdyYXBoLklORk8sYSl9O0R5
Z3JhcGgucHJvdG90eXBlLndhcm49ZnVuY3Rpb24oYSl7dGhpcy5sb2coRHlncmFwaC5XQVJOSU5H
LGEpfTtEeWdyYXBoLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbihhKXt0aGlzLmxvZyhEeWdyYXBo
LkVSUk9SLGEpfTtEeWdyYXBoLnByb3RvdHlwZS5yb2xsUGVyaW9kPWZ1bmN0aW9uKCl7cmV0dXJu
IHRoaXMucm9sbFBlcmlvZF99O0R5Z3JhcGgucHJvdG90eXBlLnhBeGlzUmFuZ2U9ZnVuY3Rpb24o
KXtpZih0aGlzLmRhdGVXaW5kb3dfKXtyZXR1cm4gdGhpcy5kYXRlV2luZG93X312YXIgYj10aGlz
LnJhd0RhdGFfWzBdWzBdO3ZhciBhPXRoaXMucmF3RGF0YV9bdGhpcy5yYXdEYXRhXy5sZW5ndGgt
MV1bMF07cmV0dXJuW2IsYV19O0R5Z3JhcGgucHJvdG90eXBlLnlBeGlzUmFuZ2U9ZnVuY3Rpb24o
KXtyZXR1cm4gdGhpcy5kaXNwbGF5ZWRZUmFuZ2VffTtEeWdyYXBoLnByb3RvdHlwZS50b0RvbUNv
b3Jkcz1mdW5jdGlvbihiLGYpe3ZhciBjPVtudWxsLG51bGxdO3ZhciBkPXRoaXMucGxvdHRlcl8u
YXJlYTtpZihiIT09bnVsbCl7dmFyIGE9dGhpcy54QXhpc1JhbmdlKCk7Y1swXT1kLngrKGItYVsw
XSkvKGFbMV0tYVswXSkqZC53fWlmKGYhPT1udWxsKXt2YXIgZT10aGlzLnlBeGlzUmFuZ2UoKTtj
WzFdPWQueSsoZVsxXS1mKS8oZVsxXS1lWzBdKSpkLmh9cmV0dXJuIGN9O0R5Z3JhcGgucHJvdG90
eXBlLnRvRGF0YUNvb3Jkcz1mdW5jdGlvbihiLGYpe3ZhciBjPVtudWxsLG51bGxdO3ZhciBkPXRo
aXMucGxvdHRlcl8uYXJlYTtpZihiIT09bnVsbCl7dmFyIGE9dGhpcy54QXhpc1JhbmdlKCk7Y1sw
XT1hWzBdKyhiLWQueCkvZC53KihhWzFdLWFbMF0pfWlmKGYhPT1udWxsKXt2YXIgZT10aGlzLnlB
eGlzUmFuZ2UoKTtjWzFdPWVbMF0rKGQuaC1mKS9kLmgqKGVbMV0tZVswXSl9cmV0dXJuIGN9O0R5
Z3JhcGgucHJvdG90eXBlLm51bUNvbHVtbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYXdEYXRh
X1swXS5sZW5ndGh9O0R5Z3JhcGgucHJvdG90eXBlLm51bVJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4g
dGhpcy5yYXdEYXRhXy5sZW5ndGh9O0R5Z3JhcGgucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9u
KGIsYSl7aWYoYjwwfHxiPnRoaXMucmF3RGF0YV8ubGVuZ3RoKXtyZXR1cm4gbnVsbH1pZihhPDB8
fGE+dGhpcy5yYXdEYXRhX1tiXS5sZW5ndGgpe3JldHVybiBudWxsfXJldHVybiB0aGlzLnJhd0Rh
dGFfW2JdW2FdfTtEeWdyYXBoLmFkZEV2ZW50PWZ1bmN0aW9uKGMsYSxiKXt2YXIgZD1mdW5jdGlv
bihmKXtpZighZil7dmFyIGY9d2luZG93LmV2ZW50fWIoZil9O2lmKHdpbmRvdy5hZGRFdmVudExp
c3RlbmVyKXtjLmFkZEV2ZW50TGlzdGVuZXIoYSxkLGZhbHNlKX1lbHNle2MuYXR0YWNoRXZlbnQo
Im9uIithLGQpfX07RHlncmFwaC5jbGlwQ2FudmFzXz1mdW5jdGlvbihiLGMpe3ZhciBhPWIuZ2V0
Q29udGV4dCgiMmQiKTthLmJlZ2luUGF0aCgpO2EucmVjdChjLmxlZnQsYy50b3AsYy53aWR0aCxj
LmhlaWdodCk7YS5jbGlwKCl9O0R5Z3JhcGgucHJvdG90eXBlLmNyZWF0ZUludGVyZmFjZV89ZnVu
Y3Rpb24oKXt2YXIgYT10aGlzLm1haW5kaXZfO3RoaXMuZ3JhcGhEaXY9ZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik7dGhpcy5ncmFwaERpdi5zdHlsZS53aWR0aD10aGlzLndpZHRoXysicHgi
O3RoaXMuZ3JhcGhEaXYuc3R5bGUuaGVpZ2h0PXRoaXMuaGVpZ2h0XysicHgiO2EuYXBwZW5kQ2hp
bGQodGhpcy5ncmFwaERpdik7dmFyIGM9e3RvcDowLGxlZnQ6dGhpcy5hdHRyXygieUF4aXNMYWJl
bFdpZHRoIikrMip0aGlzLmF0dHJfKCJheGlzVGlja1NpemUiKX07Yy53aWR0aD10aGlzLndpZHRo
Xy1jLmxlZnQtdGhpcy5hdHRyXygicmlnaHRHYXAiKTtjLmhlaWdodD10aGlzLmhlaWdodF8tdGhp
cy5hdHRyXygiYXhpc0xhYmVsRm9udFNpemUiKS0yKnRoaXMuYXR0cl8oImF4aXNUaWNrU2l6ZSIp
O3RoaXMuY2xpcHBpbmdBcmVhXz1jO3RoaXMuY2FudmFzXz1EeWdyYXBoLmNyZWF0ZUNhbnZhcygp
O3RoaXMuY2FudmFzXy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiO3RoaXMuY2FudmFzXy53aWR0
aD10aGlzLndpZHRoXzt0aGlzLmNhbnZhc18uaGVpZ2h0PXRoaXMuaGVpZ2h0Xzt0aGlzLmNhbnZh
c18uc3R5bGUud2lkdGg9dGhpcy53aWR0aF8rInB4Ijt0aGlzLmNhbnZhc18uc3R5bGUuaGVpZ2h0
PXRoaXMuaGVpZ2h0XysicHgiO3RoaXMuaGlkZGVuXz10aGlzLmNyZWF0ZVBsb3RLaXRDYW52YXNf
KHRoaXMuY2FudmFzXyk7dGhpcy5ncmFwaERpdi5hcHBlbmRDaGlsZCh0aGlzLmhpZGRlbl8pO3Ro
aXMuZ3JhcGhEaXYuYXBwZW5kQ2hpbGQodGhpcy5jYW52YXNfKTt0aGlzLm1vdXNlRXZlbnRFbGVt
ZW50Xz10aGlzLmNhbnZhc187RHlncmFwaC5jbGlwQ2FudmFzXyh0aGlzLmhpZGRlbl8sdGhpcy5j
bGlwcGluZ0FyZWFfKTtEeWdyYXBoLmNsaXBDYW52YXNfKHRoaXMuY2FudmFzXyx0aGlzLmNsaXBw
aW5nQXJlYV8pO3ZhciBiPXRoaXM7RHlncmFwaC5hZGRFdmVudCh0aGlzLm1vdXNlRXZlbnRFbGVt
ZW50XywibW91c2Vtb3ZlIixmdW5jdGlvbihkKXtiLm1vdXNlTW92ZV8oZCl9KTtEeWdyYXBoLmFk
ZEV2ZW50KHRoaXMubW91c2VFdmVudEVsZW1lbnRfLCJtb3VzZW91dCIsZnVuY3Rpb24oZCl7Yi5t
b3VzZU91dF8oZCl9KTt0aGlzLmxheW91dE9wdGlvbnNfPXt4T3JpZ2luSXNaZXJvOmZhbHNlfTtE
eWdyYXBoLnVwZGF0ZSh0aGlzLmxheW91dE9wdGlvbnNfLHRoaXMuYXR0cnNfKTtEeWdyYXBoLnVw
ZGF0ZSh0aGlzLmxheW91dE9wdGlvbnNfLHRoaXMudXNlcl9hdHRyc18pO0R5Z3JhcGgudXBkYXRl
KHRoaXMubGF5b3V0T3B0aW9uc18se2Vycm9yQmFyczoodGhpcy5hdHRyXygiZXJyb3JCYXJzIil8
fHRoaXMuYXR0cl8oImN1c3RvbUJhcnMiKSl9KTt0aGlzLmxheW91dF89bmV3IER5Z3JhcGhMYXlv
dXQodGhpcyx0aGlzLmxheW91dE9wdGlvbnNfKTt0aGlzLnJlbmRlck9wdGlvbnNfPXtjb2xvclNj
aGVtZTp0aGlzLmNvbG9yc18sc3Ryb2tlQ29sb3I6bnVsbCxheGlzTGluZVdpZHRoOkR5Z3JhcGgu
QVhJU19MSU5FX1dJRFRIfTtEeWdyYXBoLnVwZGF0ZSh0aGlzLnJlbmRlck9wdGlvbnNfLHRoaXMu
YXR0cnNfKTtEeWdyYXBoLnVwZGF0ZSh0aGlzLnJlbmRlck9wdGlvbnNfLHRoaXMudXNlcl9hdHRy
c18pO3RoaXMucGxvdHRlcl89bmV3IER5Z3JhcGhDYW52YXNSZW5kZXJlcih0aGlzLHRoaXMuaGlk
ZGVuXyx0aGlzLmxheW91dF8sdGhpcy5yZW5kZXJPcHRpb25zXyk7dGhpcy5jcmVhdGVTdGF0dXNN
ZXNzYWdlXygpO3RoaXMuY3JlYXRlUm9sbEludGVyZmFjZV8oKTt0aGlzLmNyZWF0ZURyYWdJbnRl
cmZhY2VfKCl9O0R5Z3JhcGgucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgYT1mdW5j
dGlvbihjKXt3aGlsZShjLmhhc0NoaWxkTm9kZXMoKSl7YShjLmZpcnN0Q2hpbGQpO2MucmVtb3Zl
Q2hpbGQoYy5maXJzdENoaWxkKX19O2EodGhpcy5tYWluZGl2Xyk7dmFyIGI9ZnVuY3Rpb24oYyl7
Zm9yKHZhciBkIGluIGMpe2lmKHR5cGVvZihjW2RdKT09PSJvYmplY3QiKXtjW2RdPW51bGx9fX07
Yih0aGlzLmxheW91dF8pO2IodGhpcy5wbG90dGVyXyk7Yih0aGlzKX07RHlncmFwaC5wcm90b3R5
cGUuY3JlYXRlUGxvdEtpdENhbnZhc189ZnVuY3Rpb24oYSl7dmFyIGI9RHlncmFwaC5jcmVhdGVD
YW52YXMoKTtiLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7Yi5zdHlsZS50b3A9YS5zdHlsZS50
b3A7Yi5zdHlsZS5sZWZ0PWEuc3R5bGUubGVmdDtiLndpZHRoPXRoaXMud2lkdGhfO2IuaGVpZ2h0
PXRoaXMuaGVpZ2h0XztiLnN0eWxlLndpZHRoPXRoaXMud2lkdGhfKyJweCI7Yi5zdHlsZS5oZWln
aHQ9dGhpcy5oZWlnaHRfKyJweCI7cmV0dXJuIGJ9O0R5Z3JhcGguaHN2VG9SR0I9ZnVuY3Rpb24o
aCxnLGspe3ZhciBjO3ZhciBkO3ZhciBsO2lmKGc9PT0wKXtjPWs7ZD1rO2w9a31lbHNle3ZhciBl
PU1hdGguZmxvb3IoaCo2KTt2YXIgaj0oaCo2KS1lO3ZhciBiPWsqKDEtZyk7dmFyIGE9ayooMS0o
ZypqKSk7dmFyIG09ayooMS0oZyooMS1qKSkpO3N3aXRjaChlKXtjYXNlIDE6Yz1hO2Q9aztsPWI7
YnJlYWs7Y2FzZSAyOmM9YjtkPWs7bD1tO2JyZWFrO2Nhc2UgMzpjPWI7ZD1hO2w9azticmVhaztj
YXNlIDQ6Yz1tO2Q9YjtsPWs7YnJlYWs7Y2FzZSA1OmM9aztkPWI7bD1hO2JyZWFrO2Nhc2UgNjpj
YXNlIDA6Yz1rO2Q9bTtsPWI7YnJlYWt9fWM9TWF0aC5mbG9vcigyNTUqYyswLjUpO2Q9TWF0aC5m
bG9vcigyNTUqZCswLjUpO2w9TWF0aC5mbG9vcigyNTUqbCswLjUpO3JldHVybiJyZ2IoIitjKyIs
IitkKyIsIitsKyIpIn07RHlncmFwaC5wcm90b3R5cGUuc2V0Q29sb3JzXz1mdW5jdGlvbigpe3Zh
ciBlPXRoaXMuYXR0cl8oImxhYmVscyIpLmxlbmd0aC0xO3RoaXMuY29sb3JzXz1bXTt2YXIgYT10
aGlzLmF0dHJfKCJjb2xvcnMiKTtpZighYSl7dmFyIGM9dGhpcy5hdHRyXygiY29sb3JTYXR1cmF0
aW9uIil8fDE7dmFyIGI9dGhpcy5hdHRyXygiY29sb3JWYWx1ZSIpfHwwLjU7dmFyIGo9TWF0aC5j
ZWlsKGUvMik7Zm9yKHZhciBkPTE7ZDw9ZTtkKyspe2lmKCF0aGlzLnZpc2liaWxpdHkoKVtkLTFd
KXtjb250aW51ZX12YXIgZz1kJTI/TWF0aC5jZWlsKGQvMik6KGorZC8yKTt2YXIgZj0oMSpnLygx
K2UpKTt0aGlzLmNvbG9yc18ucHVzaChEeWdyYXBoLmhzdlRvUkdCKGYsYyxiKSl9fWVsc2V7Zm9y
KHZhciBkPTA7ZDxlO2QrKyl7aWYoIXRoaXMudmlzaWJpbGl0eSgpW2RdKXtjb250aW51ZX12YXIg
aD1hW2QlYS5sZW5ndGhdO3RoaXMuY29sb3JzXy5wdXNoKGgpfX10aGlzLnJlbmRlck9wdGlvbnNf
LmNvbG9yU2NoZW1lPXRoaXMuY29sb3JzXztEeWdyYXBoLnVwZGF0ZSh0aGlzLnBsb3R0ZXJfLm9w
dGlvbnMsdGhpcy5yZW5kZXJPcHRpb25zXyk7RHlncmFwaC51cGRhdGUodGhpcy5sYXlvdXRPcHRp
b25zXyx0aGlzLnVzZXJfYXR0cnNfKTtEeWdyYXBoLnVwZGF0ZSh0aGlzLmxheW91dE9wdGlvbnNf
LHRoaXMuYXR0cnNfKX07RHlncmFwaC5wcm90b3R5cGUuZ2V0Q29sb3JzPWZ1bmN0aW9uKCl7cmV0
dXJuIHRoaXMuY29sb3JzX307RHlncmFwaC5maW5kUG9zWD1mdW5jdGlvbihhKXt2YXIgYj0wO2lm
KGEub2Zmc2V0UGFyZW50KXt3aGlsZSgxKXtiKz1hLm9mZnNldExlZnQ7aWYoIWEub2Zmc2V0UGFy
ZW50KXticmVha31hPWEub2Zmc2V0UGFyZW50fX1lbHNle2lmKGEueCl7Yis9YS54fX1yZXR1cm4g
Yn07RHlncmFwaC5maW5kUG9zWT1mdW5jdGlvbihiKXt2YXIgYT0wO2lmKGIub2Zmc2V0UGFyZW50
KXt3aGlsZSgxKXthKz1iLm9mZnNldFRvcDtpZighYi5vZmZzZXRQYXJlbnQpe2JyZWFrfWI9Yi5v
ZmZzZXRQYXJlbnR9fWVsc2V7aWYoYi55KXthKz1iLnl9fXJldHVybiBhfTtEeWdyYXBoLnByb3Rv
dHlwZS5jcmVhdGVTdGF0dXNNZXNzYWdlXz1mdW5jdGlvbigpe3ZhciBkPXRoaXMudXNlcl9hdHRy
c18ubGFiZWxzRGl2O2lmKGQmJm51bGwhPWQmJih0eXBlb2YoZCk9PSJzdHJpbmcifHxkIGluc3Rh
bmNlb2YgU3RyaW5nKSl7dGhpcy51c2VyX2F0dHJzXy5sYWJlbHNEaXY9ZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoZCl9aWYoIXRoaXMuYXR0cl8oImxhYmVsc0RpdiIpKXt2YXIgYT10aGlzLmF0dHJf
KCJsYWJlbHNEaXZXaWR0aCIpO3ZhciBjPXtwb3NpdGlvbjoiYWJzb2x1dGUiLGZvbnRTaXplOiIx
NHB4Iix6SW5kZXg6MTAsd2lkdGg6YSsicHgiLHRvcDoiMHB4IixsZWZ0Oih0aGlzLndpZHRoXy1h
LTIpKyJweCIsYmFja2dyb3VuZDoid2hpdGUiLHRleHRBbGlnbjoibGVmdCIsb3ZlcmZsb3c6Imhp
ZGRlbiJ9O0R5Z3JhcGgudXBkYXRlKGMsdGhpcy5hdHRyXygibGFiZWxzRGl2U3R5bGVzIikpO3Zh
ciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2Zvcih2YXIgYiBpbiBjKXtpZihjLmhh
c093blByb3BlcnR5KGIpKXtlLnN0eWxlW2JdPWNbYl19fXRoaXMuZ3JhcGhEaXYuYXBwZW5kQ2hp
bGQoZSk7dGhpcy5hdHRyc18ubGFiZWxzRGl2PWV9fTtEeWdyYXBoLnByb3RvdHlwZS5jcmVhdGVS
b2xsSW50ZXJmYWNlXz1mdW5jdGlvbigpe3ZhciBmPXRoaXMuYXR0cl8oInNob3dSb2xsZXIiKT8i
YmxvY2siOiJub25lIjt2YXIgYj17cG9zaXRpb246ImFic29sdXRlIix6SW5kZXg6MTAsdG9wOih0
aGlzLnBsb3R0ZXJfLmFyZWEuaC0yNSkrInB4IixsZWZ0Oih0aGlzLnBsb3R0ZXJfLmFyZWEueCsx
KSsicHgiLGRpc3BsYXk6Zn07dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtl
LnR5cGU9InRleHQiO2Uuc2l6ZT0iMiI7ZS52YWx1ZT10aGlzLnJvbGxQZXJpb2RfO2Zvcih2YXIg
YSBpbiBiKXtpZihiLmhhc093blByb3BlcnR5KGEpKXtlLnN0eWxlW2FdPWJbYV19fXZhciBkPXRo
aXMuZ3JhcGhEaXY7ZC5hcHBlbmRDaGlsZChlKTt2YXIgYz10aGlzO2Uub25jaGFuZ2U9ZnVuY3Rp
b24oKXtjLmFkanVzdFJvbGwoZS52YWx1ZSl9O3JldHVybiBlfTtEeWdyYXBoLnBhZ2VYPWZ1bmN0
aW9uKGMpe2lmKGMucGFnZVgpe3JldHVybighYy5wYWdlWHx8Yy5wYWdlWDwwKT8wOmMucGFnZVh9
ZWxzZXt2YXIgZD1kb2N1bWVudDt2YXIgYT1kb2N1bWVudC5ib2R5O3JldHVybiBjLmNsaWVudFgr
KGQuc2Nyb2xsTGVmdHx8YS5zY3JvbGxMZWZ0KS0oZC5jbGllbnRMZWZ0fHwwKX19O0R5Z3JhcGgu
cGFnZVk9ZnVuY3Rpb24oYyl7aWYoYy5wYWdlWSl7cmV0dXJuKCFjLnBhZ2VZfHxjLnBhZ2VZPDAp
PzA6Yy5wYWdlWX1lbHNle3ZhciBkPWRvY3VtZW50O3ZhciBhPWRvY3VtZW50LmJvZHk7cmV0dXJu
IGMuY2xpZW50WSsoZC5zY3JvbGxUb3B8fGEuc2Nyb2xsVG9wKS0oZC5jbGllbnRUb3B8fDApfX07
RHlncmFwaC5wcm90b3R5cGUuY3JlYXRlRHJhZ0ludGVyZmFjZV89ZnVuY3Rpb24oKXt2YXIgbz10
aGlzO3ZhciBjPWZhbHNlO3ZhciBlPWZhbHNlO3ZhciBiPW51bGw7dmFyIGE9bnVsbDt2YXIgbj1u
dWxsO3ZhciBsPW51bGw7dmFyIGY9bnVsbDt2YXIgbT1udWxsO3ZhciBrPW51bGw7dmFyIGc9MDt2
YXIgZD0wO3ZhciBqPWZ1bmN0aW9uKHApe3JldHVybiBEeWdyYXBoLnBhZ2VYKHApLWd9O3ZhciBo
PWZ1bmN0aW9uKHApe3JldHVybiBEeWdyYXBoLnBhZ2VZKHApLWR9O0R5Z3JhcGguYWRkRXZlbnQo
dGhpcy5tb3VzZUV2ZW50RWxlbWVudF8sIm1vdXNlbW92ZSIsZnVuY3Rpb24ocCl7aWYoYyl7bj1q
KHApO2w9aChwKTtvLmRyYXdab29tUmVjdF8oYixuLGYpO2Y9bn1lbHNle2lmKGUpe249aihwKTts
PWgocCk7by5kYXRlV2luZG93X1swXT1tLShuL28ud2lkdGhfKSprO28uZGF0ZVdpbmRvd19bMV09
by5kYXRlV2luZG93X1swXStrO28uZHJhd0dyYXBoXyhvLnJhd0RhdGFfKX19fSk7RHlncmFwaC5h
ZGRFdmVudCh0aGlzLm1vdXNlRXZlbnRFbGVtZW50XywibW91c2Vkb3duIixmdW5jdGlvbihwKXtn
PUR5Z3JhcGguZmluZFBvc1goby5jYW52YXNfKTtkPUR5Z3JhcGguZmluZFBvc1koby5jYW52YXNf
KTtiPWoocCk7YT1oKHApO2lmKHAuYWx0S2V5fHxwLnNoaWZ0S2V5KXtpZighby5kYXRlV2luZG93
Xyl7cmV0dXJufWU9dHJ1ZTtrPW8uZGF0ZVdpbmRvd19bMV0tby5kYXRlV2luZG93X1swXTttPShi
L28ud2lkdGhfKSprK28uZGF0ZVdpbmRvd19bMF19ZWxzZXtjPXRydWV9fSk7RHlncmFwaC5hZGRF
dmVudChkb2N1bWVudCwibW91c2V1cCIsZnVuY3Rpb24ocCl7aWYoY3x8ZSl7Yz1mYWxzZTtiPW51
bGw7YT1udWxsfWlmKGUpe2U9ZmFsc2U7bT1udWxsO2s9bnVsbH19KTtEeWdyYXBoLmFkZEV2ZW50
KHRoaXMubW91c2VFdmVudEVsZW1lbnRfLCJtb3VzZW91dCIsZnVuY3Rpb24ocCl7aWYoYyl7bj1u
dWxsO2w9bnVsbH19KTtEeWdyYXBoLmFkZEV2ZW50KHRoaXMubW91c2VFdmVudEVsZW1lbnRfLCJt
b3VzZXVwIixmdW5jdGlvbihyKXtpZihjKXtjPWZhbHNlO249aihyKTtsPWgocik7dmFyIHU9TWF0
aC5hYnMobi1iKTt2YXIgcz1NYXRoLmFicyhsLWEpO2lmKHU8MiYmczwyJiZvLmxhc3R4XyE9dW5k
ZWZpbmVkJiZvLmxhc3R4XyE9LTEpe2lmKG8uYXR0cl8oImNsaWNrQ2FsbGJhY2siKSE9bnVsbCl7
by5hdHRyXygiY2xpY2tDYWxsYmFjayIpKHIsby5sYXN0eF8sby5zZWxQb2ludHNfKX1pZihvLmF0
dHJfKCJwb2ludENsaWNrQ2FsbGJhY2siKSl7dmFyIHg9LTE7dmFyIHk9MDtmb3IodmFyIHY9MDt2
PG8uc2VsUG9pbnRzXy5sZW5ndGg7disrKXt2YXIgdD1vLnNlbFBvaW50c19bdl07dmFyIHE9TWF0
aC5wb3codC5jYW52YXN4LW4sMikrTWF0aC5wb3codC5jYW52YXN5LWwsMik7aWYoeD09LTF8fHE8
eSl7eT1xO3g9dn19dmFyIHc9by5hdHRyXygiaGlnaGxpZ2h0Q2lyY2xlU2l6ZSIpKzI7aWYoeTw9
NSo1KXtvLmF0dHJfKCJwb2ludENsaWNrQ2FsbGJhY2siKShyLG8uc2VsUG9pbnRzX1t4XSl9fX1p
Zih1Pj0xMCl7by5kb1pvb21fKE1hdGgubWluKGIsbiksTWF0aC5tYXgoYixuKSl9ZWxzZXtvLmNh
bnZhc18uZ2V0Q29udGV4dCgiMmQiKS5jbGVhclJlY3QoMCwwLG8uY2FudmFzXy53aWR0aCxvLmNh
bnZhc18uaGVpZ2h0KX1iPW51bGw7YT1udWxsfWlmKGUpe2U9ZmFsc2U7bT1udWxsO2s9bnVsbH19
KTtEeWdyYXBoLmFkZEV2ZW50KHRoaXMubW91c2VFdmVudEVsZW1lbnRfLCJkYmxjbGljayIsZnVu
Y3Rpb24ocCl7aWYoby5kYXRlV2luZG93Xz09bnVsbCl7cmV0dXJufW8uZGF0ZVdpbmRvd189bnVs
bDtvLmRyYXdHcmFwaF8oby5yYXdEYXRhXyk7dmFyIHE9by5yYXdEYXRhX1swXVswXTt2YXIgcj1v
LnJhd0RhdGFfW28ucmF3RGF0YV8ubGVuZ3RoLTFdWzBdO2lmKG8uYXR0cl8oInpvb21DYWxsYmFj
ayIpKXtvLmF0dHJfKCJ6b29tQ2FsbGJhY2siKShxLHIpfX0pfTtEeWdyYXBoLnByb3RvdHlwZS5k
cmF3Wm9vbVJlY3RfPWZ1bmN0aW9uKGMsZCxiKXt2YXIgYT10aGlzLmNhbnZhc18uZ2V0Q29udGV4
dCgiMmQiKTtpZihiKXthLmNsZWFyUmVjdChNYXRoLm1pbihjLGIpLDAsTWF0aC5hYnMoYy1iKSx0
aGlzLmhlaWdodF8pfWlmKGQmJmMpe2EuZmlsbFN0eWxlPSJyZ2JhKDEyOCwxMjgsMTI4LDAuMzMp
IjthLmZpbGxSZWN0KE1hdGgubWluKGMsZCksMCxNYXRoLmFicyhkLWMpLHRoaXMuaGVpZ2h0Xyl9
fTtEeWdyYXBoLnByb3RvdHlwZS5kb1pvb21fPWZ1bmN0aW9uKGQsYSl7dmFyIGI9dGhpcy50b0Rh
dGFDb29yZHMoZCxudWxsKTt2YXIgYz1iWzBdO2I9dGhpcy50b0RhdGFDb29yZHMoYSxudWxsKTt2
YXIgZT1iWzBdO3RoaXMuZGF0ZVdpbmRvd189W2MsZV07dGhpcy5kcmF3R3JhcGhfKHRoaXMucmF3
RGF0YV8pO2lmKHRoaXMuYXR0cl8oInpvb21DYWxsYmFjayIpKXt0aGlzLmF0dHJfKCJ6b29tQ2Fs
bGJhY2siKShjLGUpfX07RHlncmFwaC5wcm90b3R5cGUubW91c2VNb3ZlXz1mdW5jdGlvbihiKXt2
YXIgYT1EeWdyYXBoLnBhZ2VYKGIpLUR5Z3JhcGguZmluZFBvc1godGhpcy5tb3VzZUV2ZW50RWxl
bWVudF8pO3ZhciByPXRoaXMubGF5b3V0Xy5wb2ludHM7dmFyIG09LTE7dmFyIGo9LTE7dmFyIG89
MWUrMTAwO3ZhciBxPS0xO2Zvcih2YXIgZj0wO2Y8ci5sZW5ndGg7ZisrKXt2YXIgaD1NYXRoLmFi
cyhyW2ZdLmNhbnZhc3gtYSk7aWYoaD5vKXtjb250aW51ZX1vPWg7cT1mfWlmKHE+PTApe209cltx
XS54dmFsfWlmKGE+cltyLmxlbmd0aC0xXS5jYW52YXN4KXttPXJbci5sZW5ndGgtMV0ueHZhbH10
aGlzLnNlbFBvaW50c189W107dmFyIGQ9ci5sZW5ndGg7aWYoIXRoaXMuYXR0cl8oInN0YWNrZWRH
cmFwaCIpKXtmb3IodmFyIGY9MDtmPGQ7ZisrKXtpZihyW2ZdLnh2YWw9PW0pe3RoaXMuc2VsUG9p
bnRzXy5wdXNoKHJbZl0pfX19ZWxzZXt2YXIgZz0wO2Zvcih2YXIgZj1kLTE7Zj49MDtmLS0pe2lm
KHJbZl0ueHZhbD09bSl7dmFyIGM9e307Zm9yKHZhciBlIGluIHJbZl0pe2NbZV09cltmXVtlXX1j
Lnl2YWwtPWc7Zys9Yy55dmFsO3RoaXMuc2VsUG9pbnRzXy5wdXNoKGMpfX10aGlzLnNlbFBvaW50
c18ucmV2ZXJzZSgpfWlmKHRoaXMuYXR0cl8oImhpZ2hsaWdodENhbGxiYWNrIikpe3ZhciBuPXRo
aXMubGFzdHhfO2lmKG4hPT1udWxsJiZtIT1uKXt0aGlzLmF0dHJfKCJoaWdobGlnaHRDYWxsYmFj
ayIpKGIsbSx0aGlzLnNlbFBvaW50c18pfX10aGlzLmxhc3R4Xz1tO3RoaXMudXBkYXRlU2VsZWN0
aW9uXygpfTtEeWdyYXBoLnByb3RvdHlwZS51cGRhdGVTZWxlY3Rpb25fPWZ1bmN0aW9uKCl7dmFy
IHE9dGhpcy5jYW52YXNfLmdldENvbnRleHQoIjJkIik7aWYodGhpcy5wcmV2aW91c1ZlcnRpY2Fs
WF8+PTApe3ZhciBoPTA7dmFyIGo9dGhpcy5hdHRyXygibGFiZWxzIik7Zm9yKHZhciBnPTE7Zzxq
Lmxlbmd0aDtnKyspe3ZhciBiPXRoaXMuYXR0cl8oImhpZ2hsaWdodENpcmNsZVNpemUiLGpbZ10p
O2lmKGI+aCl7aD1ifX12YXIgbz10aGlzLnByZXZpb3VzVmVydGljYWxYXztxLmNsZWFyUmVjdChv
LWgtMSwwLDIqaCsyLHRoaXMuaGVpZ2h0Xyl9dmFyIHA9ZnVuY3Rpb24oYyl7cmV0dXJuIGMmJiFp
c05hTihjKX07aWYodGhpcy5zZWxQb2ludHNfLmxlbmd0aD4wKXt2YXIgZD10aGlzLnNlbFBvaW50
c19bMF0uY2FudmFzeDt2YXIgZT10aGlzLmF0dHJfKCJ4VmFsdWVGb3JtYXR0ZXIiKSh0aGlzLmxh
c3R4Xyx0aGlzKSsiOiI7dmFyIGY9dGhpcy5hdHRyXygieVZhbHVlRm9ybWF0dGVyIik7dmFyIG09
dGhpcy5jb2xvcnNfLmxlbmd0aDtpZih0aGlzLmF0dHJfKCJzaG93TGFiZWxzT25IaWdobGlnaHQi
KSl7Zm9yKHZhciBnPTA7Zzx0aGlzLnNlbFBvaW50c18ubGVuZ3RoO2crKyl7aWYoIXRoaXMuYXR0
cl8oImxhYmVsc1Nob3daZXJvVmFsdWVzIikmJnRoaXMuc2VsUG9pbnRzX1tnXS55dmFsPT0wKXtj
b250aW51ZX1pZighcCh0aGlzLnNlbFBvaW50c19bZ10uY2FudmFzeSkpe2NvbnRpbnVlfWlmKHRo
aXMuYXR0cl8oImxhYmVsc1NlcGFyYXRlTGluZXMiKSl7ZSs9Ijxici8+In12YXIgbj10aGlzLnNl
bFBvaW50c19bZ107dmFyIGw9bmV3IFJHQkNvbG9yKHRoaXMuY29sb3JzX1tnJW1dKTt2YXIgaz1m
KG4ueXZhbCk7ZSs9IiA8Yj48Zm9udCBjb2xvcj0nIitsLnRvSGV4KCkrIic+IituLm5hbWUrIjwv
Zm9udD48L2I+OiIra310aGlzLmF0dHJfKCJsYWJlbHNEaXYiKS5pbm5lckhUTUw9ZX1xLnNhdmUo
KTtmb3IodmFyIGc9MDtnPHRoaXMuc2VsUG9pbnRzXy5sZW5ndGg7ZysrKXtpZighcCh0aGlzLnNl
bFBvaW50c19bZ10uY2FudmFzeSkpe2NvbnRpbnVlfXZhciBhPXRoaXMuYXR0cl8oImhpZ2hsaWdo
dENpcmNsZVNpemUiLHRoaXMuc2VsUG9pbnRzX1tnXS5uYW1lKTtxLmJlZ2luUGF0aCgpO3EuZmls
bFN0eWxlPXRoaXMucGxvdHRlcl8uY29sb3JzW3RoaXMuc2VsUG9pbnRzX1tnXS5uYW1lXTtxLmFy
YyhkLHRoaXMuc2VsUG9pbnRzX1tnXS5jYW52YXN5LGEsMCwyKk1hdGguUEksZmFsc2UpO3EuZmls
bCgpfXEucmVzdG9yZSgpO3RoaXMucHJldmlvdXNWZXJ0aWNhbFhfPWR9fTtEeWdyYXBoLnByb3Rv
dHlwZS5zZXRTZWxlY3Rpb249ZnVuY3Rpb24oYil7dGhpcy5zZWxQb2ludHNfPVtdO3ZhciBjPTA7
aWYoYiE9PWZhbHNlKXtiPWItdGhpcy5ib3VuZGFyeUlkc19bMF1bMF19aWYoYiE9PWZhbHNlJiZi
Pj0wKXtmb3IodmFyIGEgaW4gdGhpcy5sYXlvdXRfLmRhdGFzZXRzKXtpZihiPHRoaXMubGF5b3V0
Xy5kYXRhc2V0c1thXS5sZW5ndGgpe3RoaXMuc2VsUG9pbnRzXy5wdXNoKHRoaXMubGF5b3V0Xy5w
b2ludHNbYytiXSl9Yys9dGhpcy5sYXlvdXRfLmRhdGFzZXRzW2FdLmxlbmd0aH19aWYodGhpcy5z
ZWxQb2ludHNfLmxlbmd0aCl7dGhpcy5sYXN0eF89dGhpcy5zZWxQb2ludHNfWzBdLnh2YWw7dGhp
cy51cGRhdGVTZWxlY3Rpb25fKCl9ZWxzZXt0aGlzLmxhc3R4Xz0tMTt0aGlzLmNsZWFyU2VsZWN0
aW9uKCl9fTtEeWdyYXBoLnByb3RvdHlwZS5tb3VzZU91dF89ZnVuY3Rpb24oYSl7aWYodGhpcy5h
dHRyXygidW5oaWdobGlnaHRDYWxsYmFjayIpKXt0aGlzLmF0dHJfKCJ1bmhpZ2hsaWdodENhbGxi
YWNrIikoYSl9aWYodGhpcy5hdHRyXygiaGlkZU92ZXJsYXlPbk1vdXNlT3V0Iikpe3RoaXMuY2xl
YXJTZWxlY3Rpb24oKX19O0R5Z3JhcGgucHJvdG90eXBlLmNsZWFyU2VsZWN0aW9uPWZ1bmN0aW9u
KCl7dmFyIGE9dGhpcy5jYW52YXNfLmdldENvbnRleHQoIjJkIik7YS5jbGVhclJlY3QoMCwwLHRo
aXMud2lkdGhfLHRoaXMuaGVpZ2h0Xyk7dGhpcy5hdHRyXygibGFiZWxzRGl2IikuaW5uZXJIVE1M
PSIiO3RoaXMuc2VsUG9pbnRzXz1bXTt0aGlzLmxhc3R4Xz0tMX07RHlncmFwaC5wcm90b3R5cGUu
Z2V0U2VsZWN0aW9uPWZ1bmN0aW9uKCl7aWYoIXRoaXMuc2VsUG9pbnRzX3x8dGhpcy5zZWxQb2lu
dHNfLmxlbmd0aDwxKXtyZXR1cm4gLTF9Zm9yKHZhciBhPTA7YTx0aGlzLmxheW91dF8ucG9pbnRz
Lmxlbmd0aDthKyspe2lmKHRoaXMubGF5b3V0Xy5wb2ludHNbYV0ueD09dGhpcy5zZWxQb2ludHNf
WzBdLngpe3JldHVybiBhK3RoaXMuYm91bmRhcnlJZHNfWzBdWzBdfX1yZXR1cm4gLTF9O0R5Z3Jh
cGguemVyb3BhZD1mdW5jdGlvbihhKXtpZihhPDEwKXtyZXR1cm4iMCIrYX1lbHNle3JldHVybiIi
K2F9fTtEeWdyYXBoLmhtc1N0cmluZ189ZnVuY3Rpb24oYSl7dmFyIGM9RHlncmFwaC56ZXJvcGFk
O3ZhciBiPW5ldyBEYXRlKGEpO2lmKGIuZ2V0U2Vjb25kcygpKXtyZXR1cm4gYyhiLmdldEhvdXJz
KCkpKyI6IitjKGIuZ2V0TWludXRlcygpKSsiOiIrYyhiLmdldFNlY29uZHMoKSl9ZWxzZXtyZXR1
cm4gYyhiLmdldEhvdXJzKCkpKyI6IitjKGIuZ2V0TWludXRlcygpKX19O0R5Z3JhcGguZGF0ZUF4
aXNGb3JtYXR0ZXI9ZnVuY3Rpb24oYixjKXtpZihjPj1EeWdyYXBoLk1PTlRITFkpe3JldHVybiBi
LnN0cmZ0aW1lKCIlYiAleSIpfWVsc2V7dmFyIGE9Yi5nZXRIb3VycygpKjM2MDArYi5nZXRNaW51
dGVzKCkqNjArYi5nZXRTZWNvbmRzKCkrYi5nZXRNaWxsaXNlY29uZHMoKTtpZihhPT0wfHxjPj1E
eWdyYXBoLkRBSUxZKXtyZXR1cm4gbmV3IERhdGUoYi5nZXRUaW1lKCkrMzYwMCoxMDAwKS5zdHJm
dGltZSgiJWQlYiIpfWVsc2V7cmV0dXJuIER5Z3JhcGguaG1zU3RyaW5nXyhiLmdldFRpbWUoKSl9
fX07RHlncmFwaC5kYXRlU3RyaW5nXz1mdW5jdGlvbihiLGspe3ZhciBjPUR5Z3JhcGguemVyb3Bh
ZDt2YXIgZz1uZXcgRGF0ZShiKTt2YXIgaD0iIitnLmdldEZ1bGxZZWFyKCk7dmFyIGU9YyhnLmdl
dE1vbnRoKCkrMSk7dmFyIGo9YyhnLmdldERhdGUoKSk7dmFyIGY9IiI7dmFyIGE9Zy5nZXRIb3Vy
cygpKjM2MDArZy5nZXRNaW51dGVzKCkqNjArZy5nZXRTZWNvbmRzKCk7aWYoYSl7Zj0iICIrRHln
cmFwaC5obXNTdHJpbmdfKGIpfXJldHVybiBoKyIvIitlKyIvIitqK2Z9O0R5Z3JhcGgucm91bmRf
PWZ1bmN0aW9uKGMsYil7dmFyIGE9TWF0aC5wb3coMTAsYik7cmV0dXJuIE1hdGgucm91bmQoYyph
KS9hfTtEeWdyYXBoLnByb3RvdHlwZS5sb2FkZWRFdmVudF89ZnVuY3Rpb24oYSl7dGhpcy5yYXdE
YXRhXz10aGlzLnBhcnNlQ1NWXyhhKTt0aGlzLmRyYXdHcmFwaF8odGhpcy5yYXdEYXRhXyl9O0R5
Z3JhcGgucHJvdG90eXBlLm1vbnRocz1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1
biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO0R5Z3JhcGgucHJvdG90eXBl
LnF1YXJ0ZXJzPVsiSmFuIiwiQXByIiwiSnVsIiwiT2N0Il07RHlncmFwaC5wcm90b3R5cGUuYWRk
WFRpY2tzXz1mdW5jdGlvbigpe3ZhciBhLGM7aWYodGhpcy5kYXRlV2luZG93Xyl7YT10aGlzLmRh
dGVXaW5kb3dfWzBdO2M9dGhpcy5kYXRlV2luZG93X1sxXX1lbHNle2E9dGhpcy5yYXdEYXRhX1sw
XVswXTtjPXRoaXMucmF3RGF0YV9bdGhpcy5yYXdEYXRhXy5sZW5ndGgtMV1bMF19dmFyIGI9dGhp
cy5hdHRyXygieFRpY2tlciIpKGEsYyx0aGlzKTt0aGlzLmxheW91dF8udXBkYXRlT3B0aW9ucyh7
eFRpY2tzOmJ9KX07RHlncmFwaC5TRUNPTkRMWT0wO0R5Z3JhcGguVFdPX1NFQ09ORExZPTE7RHln
cmFwaC5GSVZFX1NFQ09ORExZPTI7RHlncmFwaC5URU5fU0VDT05ETFk9MztEeWdyYXBoLlRISVJU
WV9TRUNPTkRMWT00O0R5Z3JhcGguTUlOVVRFTFk9NTtEeWdyYXBoLlRXT19NSU5VVEVMWT02O0R5
Z3JhcGguRklWRV9NSU5VVEVMWT03O0R5Z3JhcGguVEVOX01JTlVURUxZPTg7RHlncmFwaC5USElS
VFlfTUlOVVRFTFk9OTtEeWdyYXBoLkhPVVJMWT0xMDtEeWdyYXBoLlRXT19IT1VSTFk9MTE7RHln
cmFwaC5TSVhfSE9VUkxZPTEyO0R5Z3JhcGguREFJTFk9MTM7RHlncmFwaC5XRUVLTFk9MTQ7RHln
cmFwaC5NT05USExZPTE1O0R5Z3JhcGguUVVBUlRFUkxZPTE2O0R5Z3JhcGguQklBTk5VQUw9MTc7
RHlncmFwaC5BTk5VQUw9MTg7RHlncmFwaC5ERUNBREFMPTE5O0R5Z3JhcGguTlVNX0dSQU5VTEFS
SVRJRVM9MjA7RHlncmFwaC5TSE9SVF9TUEFDSU5HUz1bXTtEeWdyYXBoLlNIT1JUX1NQQUNJTkdT
W0R5Z3JhcGguU0VDT05ETFldPTEwMDAqMTtEeWdyYXBoLlNIT1JUX1NQQUNJTkdTW0R5Z3JhcGgu
VFdPX1NFQ09ORExZXT0xMDAwKjI7RHlncmFwaC5TSE9SVF9TUEFDSU5HU1tEeWdyYXBoLkZJVkVf
U0VDT05ETFldPTEwMDAqNTtEeWdyYXBoLlNIT1JUX1NQQUNJTkdTW0R5Z3JhcGguVEVOX1NFQ09O
RExZXT0xMDAwKjEwO0R5Z3JhcGguU0hPUlRfU1BBQ0lOR1NbRHlncmFwaC5USElSVFlfU0VDT05E
TFldPTEwMDAqMzA7RHlncmFwaC5TSE9SVF9TUEFDSU5HU1tEeWdyYXBoLk1JTlVURUxZXT0xMDAw
KjYwO0R5Z3JhcGguU0hPUlRfU1BBQ0lOR1NbRHlncmFwaC5UV09fTUlOVVRFTFldPTEwMDAqNjAq
MjtEeWdyYXBoLlNIT1JUX1NQQUNJTkdTW0R5Z3JhcGguRklWRV9NSU5VVEVMWV09MTAwMCo2MCo1
O0R5Z3JhcGguU0hPUlRfU1BBQ0lOR1NbRHlncmFwaC5URU5fTUlOVVRFTFldPTEwMDAqNjAqMTA7
RHlncmFwaC5TSE9SVF9TUEFDSU5HU1tEeWdyYXBoLlRISVJUWV9NSU5VVEVMWV09MTAwMCo2MCoz
MDtEeWdyYXBoLlNIT1JUX1NQQUNJTkdTW0R5Z3JhcGguSE9VUkxZXT0xMDAwKjM2MDA7RHlncmFw
aC5TSE9SVF9TUEFDSU5HU1tEeWdyYXBoLlRXT19IT1VSTFldPTEwMDAqMzYwMCoyO0R5Z3JhcGgu
U0hPUlRfU1BBQ0lOR1NbRHlncmFwaC5TSVhfSE9VUkxZXT0xMDAwKjM2MDAqNjtEeWdyYXBoLlNI
T1JUX1NQQUNJTkdTW0R5Z3JhcGguREFJTFldPTEwMDAqODY0MDA7RHlncmFwaC5TSE9SVF9TUEFD
SU5HU1tEeWdyYXBoLldFRUtMWV09MTAwMCo2MDQ4MDA7RHlncmFwaC5wcm90b3R5cGUuTnVtWFRp
Y2tzPWZ1bmN0aW9uKGUsYixnKXtpZihnPER5Z3JhcGguTU9OVEhMWSl7dmFyIGg9RHlncmFwaC5T
SE9SVF9TUEFDSU5HU1tnXTtyZXR1cm4gTWF0aC5mbG9vcigwLjUrMSooYi1lKS9oKX1lbHNle3Zh
ciBmPTE7dmFyIGQ9MTI7aWYoZz09RHlncmFwaC5RVUFSVEVSTFkpe2Q9M31pZihnPT1EeWdyYXBo
LkJJQU5OVUFMKXtkPTJ9aWYoZz09RHlncmFwaC5BTk5VQUwpe2Q9MX1pZihnPT1EeWdyYXBoLkRF
Q0FEQUwpe2Q9MTtmPTEwfXZhciBjPTM2NS4yNTI0KjI0KjM2MDAqMTAwMDt2YXIgYT0xKihiLWUp
L2M7cmV0dXJuIE1hdGguZmxvb3IoMC41KzEqYSpkL2YpfX07RHlncmFwaC5wcm90b3R5cGUuR2V0
WEF4aXM9ZnVuY3Rpb24obSxoLGEpe3ZhciByPXRoaXMuYXR0cl8oInhBeGlzTGFiZWxGb3JtYXR0
ZXIiKTt2YXIgeT1bXTtpZihhPER5Z3JhcGguTU9OVEhMWSl7dmFyIGM9RHlncmFwaC5TSE9SVF9T
UEFDSU5HU1thXTt2YXIgdT0iJWQlYiI7dmFyIHY9Yy8xMDAwO3ZhciB3PW5ldyBEYXRlKG0pO2lm
KHY8PTYwKXt2YXIgZj13LmdldFNlY29uZHMoKTt3LnNldFNlY29uZHMoZi1mJXYpfWVsc2V7dy5z
ZXRTZWNvbmRzKDApO3YvPTYwO2lmKHY8PTYwKXt2YXIgZj13LmdldE1pbnV0ZXMoKTt3LnNldE1p
bnV0ZXMoZi1mJXYpfWVsc2V7dy5zZXRNaW51dGVzKDApO3YvPTYwO2lmKHY8PTI0KXt2YXIgZj13
LmdldEhvdXJzKCk7dy5zZXRIb3VycyhmLWYldil9ZWxzZXt3LnNldEhvdXJzKDApO3YvPTI0O2lm
KHY9PTcpe3cuc2V0RGF0ZSh3LmdldERhdGUoKS13LmdldERheSgpKX19fX1tPXcuZ2V0VGltZSgp
O2Zvcih2YXIgaz1tO2s8PWg7ays9Yyl7eS5wdXNoKHt2OmssbGFiZWw6cihuZXcgRGF0ZShrKSxh
KX0pfX1lbHNle3ZhciBlO3ZhciBuPTE7aWYoYT09RHlncmFwaC5NT05USExZKXtlPVswLDEsMiwz
LDQsNSw2LDcsOCw5LDEwLDExLDEyXX1lbHNle2lmKGE9PUR5Z3JhcGguUVVBUlRFUkxZKXtlPVsw
LDMsNiw5XX1lbHNle2lmKGE9PUR5Z3JhcGguQklBTk5VQUwpe2U9WzAsNl19ZWxzZXtpZihhPT1E
eWdyYXBoLkFOTlVBTCl7ZT1bMF19ZWxzZXtpZihhPT1EeWdyYXBoLkRFQ0FEQUwpe2U9WzBdO249
MTB9fX19fXZhciBxPW5ldyBEYXRlKG0pLmdldEZ1bGxZZWFyKCk7dmFyIG89bmV3IERhdGUoaCku
Z2V0RnVsbFllYXIoKTt2YXIgYj1EeWdyYXBoLnplcm9wYWQ7Zm9yKHZhciBzPXE7czw9bztzKysp
e2lmKHMlbiE9MCl7Y29udGludWV9Zm9yKHZhciBwPTA7cDxlLmxlbmd0aDtwKyspe3ZhciBsPXMr
Ii8iK2IoMStlW3BdKSsiLzAxIjt2YXIgaz1EYXRlLnBhcnNlKGwpO2lmKGs8bXx8az5oKXtjb250
aW51ZX15LnB1c2goe3Y6ayxsYWJlbDpyKG5ldyBEYXRlKGspLGEpfSl9fX1yZXR1cm4geX07RHln
cmFwaC5kYXRlVGlja2VyPWZ1bmN0aW9uKGEsZixkKXt2YXIgYj0tMTtmb3IodmFyIGU9MDtlPER5
Z3JhcGguTlVNX0dSQU5VTEFSSVRJRVM7ZSsrKXt2YXIgYz1kLk51bVhUaWNrcyhhLGYsZSk7aWYo
ZC53aWR0aF8vYz49ZC5hdHRyXygicGl4ZWxzUGVyWExhYmVsIikpe2I9ZTticmVha319aWYoYj49
MCl7cmV0dXJuIGQuR2V0WEF4aXMoYSxmLGIpfWVsc2V7fX07RHlncmFwaC5udW1lcmljVGlja3M9
ZnVuY3Rpb24odix1LGwpe2lmKGwuYXR0cl8oImxhYmVsc0tNRzIiKSl7dmFyIGY9WzEsMiw0LDhd
fWVsc2V7dmFyIGY9WzEsMiw1XX12YXIgeCxwLGEscTt2YXIgaD1sLmF0dHJfKCJwaXhlbHNQZXJZ
TGFiZWwiKTtmb3IodmFyIHQ9LTEwO3Q8NTA7dCsrKXtpZihsLmF0dHJfKCJsYWJlbHNLTUcyIikp
e3ZhciBjPU1hdGgucG93KDE2LHQpfWVsc2V7dmFyIGM9TWF0aC5wb3coMTAsdCl9Zm9yKHZhciBz
PTA7czxmLmxlbmd0aDtzKyspe3g9YypmW3NdO3A9TWF0aC5mbG9vcih2L3gpKng7YT1NYXRoLmNl
aWwodS94KSp4O3E9TWF0aC5hYnMoYS1wKS94O3ZhciBkPWwuaGVpZ2h0Xy9xO2lmKGQ+aCl7YnJl
YWt9fWlmKGQ+aCl7YnJlYWt9fXZhciB3PVtdO3ZhciByO3ZhciBvPVtdO2lmKGwuYXR0cl8oImxh
YmVsc0tNQiIpKXtyPTEwMDA7bz1bIksiLCJNIiwiQiIsIlQiXX1pZihsLmF0dHJfKCJsYWJlbHNL
TUcyIikpe2lmKHIpe2wud2FybigiU2V0dGluZyBib3RoIGxhYmVsc0tNQiBhbmQgbGFiZWxzS01H
Mi4gUGljayBvbmUhIil9cj0xMDI0O289WyJrIiwiTSIsIkciLCJUIl19aWYocD5hKXt4Kj0tMX1m
b3IodmFyIHQ9MDt0PHE7dCsrKXt2YXIgZz1wK3QqeDt2YXIgYj1NYXRoLmFicyhnKTt2YXIgZT1E
eWdyYXBoLnJvdW5kXyhnLDIpO2lmKG8ubGVuZ3RoKXt2YXIgbT1yKnIqcipyO2Zvcih2YXIgcz0z
O3M+PTA7cy0tLG0vPXIpe2lmKGI+PW0pe2U9RHlncmFwaC5yb3VuZF8oZy9tLDEpK29bc107YnJl
YWt9fX13LnB1c2goe2xhYmVsOmUsdjpnfSl9cmV0dXJuIHd9O0R5Z3JhcGgucHJvdG90eXBlLmFk
ZFlUaWNrc189ZnVuY3Rpb24oYyxiKXt2YXIgYT1EeWdyYXBoLm51bWVyaWNUaWNrcyhjLGIsdGhp
cyk7dGhpcy5sYXlvdXRfLnVwZGF0ZU9wdGlvbnMoe3lBeGlzOltjLGJdLHlUaWNrczphfSl9O0R5
Z3JhcGgucHJvdG90eXBlLmV4dHJlbWVWYWx1ZXNfPWZ1bmN0aW9uKGQpe3ZhciBoPW51bGwsZj1u
dWxsO3ZhciBiPXRoaXMuYXR0cl8oImVycm9yQmFycyIpfHx0aGlzLmF0dHJfKCJjdXN0b21CYXJz
Iik7aWYoYil7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aDtjKyspe3ZhciBnPWRbY11bMV1bMF07aWYo
IWcpe2NvbnRpbnVlfXZhciBhPWctZFtjXVsxXVsxXTt2YXIgZT1nK2RbY11bMV1bMl07aWYoYT5n
KXthPWd9aWYoZTxnKXtlPWd9aWYoZj09bnVsbHx8ZT5mKXtmPWV9aWYoaD09bnVsbHx8YTxoKXto
PWF9fX1lbHNle2Zvcih2YXIgYz0wO2M8ZC5sZW5ndGg7YysrKXt2YXIgZz1kW2NdWzFdO2lmKGc9
PT1udWxsfHxpc05hTihnKSl7Y29udGludWV9aWYoZj09bnVsbHx8Zz5mKXtmPWd9aWYoaD09bnVs
bHx8ZzxoKXtoPWd9fX1yZXR1cm5baCxmXX07RHlncmFwaC5wcm90b3R5cGUuZHJhd0dyYXBoXz1m
dW5jdGlvbihEKXt2YXIgbj10aGlzLmlzX2luaXRpYWxfZHJhd187dGhpcy5pc19pbml0aWFsX2Ry
YXdfPWZhbHNlO3ZhciB6PW51bGwseT1udWxsO3RoaXMubGF5b3V0Xy5yZW1vdmVBbGxEYXRhc2V0
cygpO3RoaXMuc2V0Q29sb3JzXygpO3RoaXMuYXR0cnNfLnBvaW50U2l6ZT0wLjUqdGhpcy5hdHRy
XygiaGlnaGxpZ2h0Q2lyY2xlU2l6ZSIpO3ZhciBkPVtdO3ZhciBmPVtdO2Zvcih2YXIgdz1EWzBd
Lmxlbmd0aC0xO3c+PTE7dy0tKXtpZighdGhpcy52aXNpYmlsaXR5KClbdy0xXSl7Y29udGludWV9
dmFyIGI9dGhpcy5hdHRyXygiY29ubmVjdFNlcGFyYXRlZFBvaW50cyIsdyk7dmFyIG09W107Zm9y
KHZhciB1PTA7dTxELmxlbmd0aDt1Kyspe2lmKERbdV1bd10hPW51bGx8fCFiKXt2YXIgQT1EW3Vd
WzBdO20ucHVzaChbQSxEW3VdW3ddXSl9fW09dGhpcy5yb2xsaW5nQXZlcmFnZShtLHRoaXMucm9s
bFBlcmlvZF8pO3ZhciBwPXRoaXMuYXR0cl8oImVycm9yQmFycyIpfHx0aGlzLmF0dHJfKCJjdXN0
b21CYXJzIik7aWYodGhpcy5kYXRlV2luZG93Xyl7dmFyIEY9dGhpcy5kYXRlV2luZG93X1swXTt2
YXIgZz10aGlzLmRhdGVXaW5kb3dfWzFdO3ZhciBxPVtdO3ZhciBlPW51bGwsRT1udWxsO2Zvcih2
YXIgdD0wO3Q8bS5sZW5ndGg7dCsrKXtpZihtW3RdWzBdPj1GJiZlPT09bnVsbCl7ZT10fWlmKG1b
dF1bMF08PWcpe0U9dH19aWYoZT09PW51bGwpe2U9MH1pZihlPjApe2UtLX1pZihFPT09bnVsbCl7
RT1tLmxlbmd0aC0xfWlmKEU8bS5sZW5ndGgtMSl7RSsrfXRoaXMuYm91bmRhcnlJZHNfW3ctMV09
W2UsRV07Zm9yKHZhciB0PWU7dDw9RTt0Kyspe3EucHVzaChtW3RdKX1tPXF9ZWxzZXt0aGlzLmJv
dW5kYXJ5SWRzX1t3LTFdPVswLG0ubGVuZ3RoLTFdfXZhciBhPXRoaXMuZXh0cmVtZVZhbHVlc18o
bSk7dmFyIHI9YVswXTt2YXIgbz1hWzFdO2lmKHo9PT1udWxsfHxyPHope3o9cn1pZih5PT09bnVs
bHx8bz55KXt5PW99aWYocCl7Zm9yKHZhciB1PTA7dTxtLmxlbmd0aDt1Kyspe3ZhbD1bbVt1XVsw
XSxtW3VdWzFdWzBdLG1bdV1bMV1bMV0sbVt1XVsxXVsyXV07bVt1XT12YWx9fWVsc2V7aWYodGhp
cy5hdHRyXygic3RhY2tlZEdyYXBoIikpe3ZhciBzPW0ubGVuZ3RoO3ZhciBCO2Zvcih2YXIgdT0w
O3U8czt1Kyspe3ZhciBoPW1bdV1bMF07aWYoZFtoXT09PXVuZGVmaW5lZCl7ZFtoXT0wfUI9bVt1
XVsxXTtkW2hdKz1CO21bdV09W2gsZFtoXV07aWYoIXl8fGRbaF0+eSl7eT1kW2hdfX19fWZbd109
bX1mb3IodmFyIHc9MTt3PGYubGVuZ3RoO3crKyl7aWYoIXRoaXMudmlzaWJpbGl0eSgpW3ctMV0p
e2NvbnRpbnVlfXRoaXMubGF5b3V0Xy5hZGREYXRhc2V0KHRoaXMuYXR0cl8oImxhYmVscyIpW3dd
LGZbd10pfWlmKHRoaXMudmFsdWVSYW5nZV8hPW51bGwpe3RoaXMuYWRkWVRpY2tzXyh0aGlzLnZh
bHVlUmFuZ2VfWzBdLHRoaXMudmFsdWVSYW5nZV9bMV0pO3RoaXMuZGlzcGxheWVkWVJhbmdlXz10
aGlzLnZhbHVlUmFuZ2VffWVsc2V7aWYodGhpcy5hdHRyXygiaW5jbHVkZVplcm8iKSYmej4wKXt6
PTB9dmFyIHY9eS16O2lmKHY9PTApe3Y9eX12YXIgYz15KzAuMSp2O3ZhciBDPXotMC4xKnY7aWYo
QzwwJiZ6Pj0wKXtDPTB9aWYoYz4wJiZ5PD0wKXtjPTB9aWYodGhpcy5hdHRyXygiaW5jbHVkZVpl
cm8iKSl7aWYoeTwwKXtjPTB9aWYoej4wKXtDPTB9fXRoaXMuYWRkWVRpY2tzXyhDLGMpO3RoaXMu
ZGlzcGxheWVkWVJhbmdlXz1bQyxjXX10aGlzLmFkZFhUaWNrc18oKTt0aGlzLmxheW91dF8udXBk
YXRlT3B0aW9ucyh7ZGF0ZVdpbmRvdzp0aGlzLmRhdGVXaW5kb3dffSk7dGhpcy5sYXlvdXRfLmV2
YWx1YXRlV2l0aEVycm9yKCk7dGhpcy5wbG90dGVyXy5jbGVhcigpO3RoaXMucGxvdHRlcl8ucmVu
ZGVyKCk7dGhpcy5jYW52YXNfLmdldENvbnRleHQoIjJkIikuY2xlYXJSZWN0KDAsMCx0aGlzLmNh
bnZhc18ud2lkdGgsdGhpcy5jYW52YXNfLmhlaWdodCk7aWYodGhpcy5hdHRyXygiZHJhd0NhbGxi
YWNrIikhPT1udWxsKXt0aGlzLmF0dHJfKCJkcmF3Q2FsbGJhY2siKSh0aGlzLG4pfX07RHlncmFw
aC5wcm90b3R5cGUucm9sbGluZ0F2ZXJhZ2U9ZnVuY3Rpb24obSxkKXtpZihtLmxlbmd0aDwyKXty
ZXR1cm4gbX12YXIgZD1NYXRoLm1pbihkLG0ubGVuZ3RoLTEpO3ZhciBiPVtdO3ZhciBzPXRoaXMu
YXR0cl8oInNpZ21hIik7aWYodGhpcy5mcmFjdGlvbnNfKXt2YXIgaz0wO3ZhciBoPTA7dmFyIGU9
MTAwO2Zvcih2YXIgeD0wO3g8bS5sZW5ndGg7eCsrKXtrKz1tW3hdWzFdWzBdO2grPW1beF1bMV1b
MV07aWYoeC1kPj0wKXtrLT1tW3gtZF1bMV1bMF07aC09bVt4LWRdWzFdWzFdfXZhciBCPW1beF1b
MF07dmFyIHY9aD9rL2g6MDtpZih0aGlzLmF0dHJfKCJlcnJvckJhcnMiKSl7aWYodGhpcy53aWxz
b25JbnRlcnZhbF8pe2lmKGgpe3ZhciB0PXY8MD8wOnYsdT1oO3ZhciBBPXMqTWF0aC5zcXJ0KHQq
KDEtdCkvdStzKnMvKDQqdSp1KSk7dmFyIGE9MStzKnMvaDt2YXIgRj0odCtzKnMvKDIqaCktQSkv
YTt2YXIgbz0odCtzKnMvKDIqaCkrQSkvYTtiW3hdPVtCLFt0KmUsKHQtRikqZSwoby10KSplXV19
ZWxzZXtiW3hdPVtCLFswLDAsMF1dfX1lbHNle3ZhciB6PWg/cypNYXRoLnNxcnQodiooMS12KS9o
KToxO2JbeF09W0IsW2UqdixlKnosZSp6XV19fWVsc2V7Ylt4XT1bQixlKnZdfX19ZWxzZXtpZih0
aGlzLmF0dHJfKCJjdXN0b21CYXJzIikpe3ZhciBGPTA7dmFyIEM9MDt2YXIgbz0wO3ZhciBnPTA7
Zm9yKHZhciB4PTA7eDxtLmxlbmd0aDt4Kyspe3ZhciBFPW1beF1bMV07dmFyIGw9RVsxXTtiW3hd
PVttW3hdWzBdLFtsLGwtRVswXSxFWzJdLWxdXTtpZihsIT1udWxsJiYhaXNOYU4obCkpe0YrPUVb
MF07Qys9bDtvKz1FWzJdO2crPTF9aWYoeC1kPj0wKXt2YXIgcj1tW3gtZF07aWYoclsxXVsxXSE9
bnVsbCYmIWlzTmFOKHJbMV1bMV0pKXtGLT1yWzFdWzBdO0MtPXJbMV1bMV07by09clsxXVsyXTtn
LT0xfX1iW3hdPVttW3hdWzBdLFsxKkMvZywxKihDLUYpL2csMSooby1DKS9nXV19fWVsc2V7dmFy
IHE9TWF0aC5taW4oZC0xLG0ubGVuZ3RoLTIpO2lmKCF0aGlzLmF0dHJfKCJlcnJvckJhcnMiKSl7
aWYoZD09MSl7cmV0dXJuIG19Zm9yKHZhciB4PTA7eDxtLmxlbmd0aDt4Kyspe3ZhciBjPTA7dmFy
IEQ9MDtmb3IodmFyIHc9TWF0aC5tYXgoMCx4LWQrMSk7dzx4KzE7dysrKXt2YXIgbD1tW3ddWzFd
O2lmKGw9PW51bGx8fGlzTmFOKGwpKXtjb250aW51ZX1EKys7Yys9bVt3XVsxXX1pZihEKXtiW3hd
PVttW3hdWzBdLGMvRF19ZWxzZXtiW3hdPVttW3hdWzBdLG51bGxdfX19ZWxzZXtmb3IodmFyIHg9
MDt4PG0ubGVuZ3RoO3grKyl7dmFyIGM9MDt2YXIgZj0wO3ZhciBEPTA7Zm9yKHZhciB3PU1hdGgu
bWF4KDAseC1kKzEpO3c8eCsxO3crKyl7dmFyIGw9bVt3XVsxXVswXTtpZihsPT1udWxsfHxpc05h
TihsKSl7Y29udGludWV9RCsrO2MrPW1bd11bMV1bMF07Zis9TWF0aC5wb3cobVt3XVsxXVsxXSwy
KX1pZihEKXt2YXIgej1NYXRoLnNxcnQoZikvRDtiW3hdPVttW3hdWzBdLFtjL0Qscyp6LHMqel1d
fWVsc2V7Ylt4XT1bbVt4XVswXSxbbnVsbCxudWxsLG51bGxdXX19fX19cmV0dXJuIGJ9O0R5Z3Jh
cGguZGF0ZVBhcnNlcj1mdW5jdGlvbihiLGEpe3ZhciBjO3ZhciBlO2lmKGIuc2VhcmNoKCItIikh
PS0xKXtjPWIucmVwbGFjZSgiLSIsIi8iLCJnIik7d2hpbGUoYy5zZWFyY2goIi0iKSE9LTEpe2M9
Yy5yZXBsYWNlKCItIiwiLyIpfWU9RGF0ZS5wYXJzZShjKX1lbHNle2lmKGIubGVuZ3RoPT04KXtj
PWIuc3Vic3RyKDAsNCkrIi8iK2Iuc3Vic3RyKDQsMikrIi8iK2Iuc3Vic3RyKDYsMik7ZT1EYXRl
LnBhcnNlKGMpfWVsc2V7ZT1EYXRlLnBhcnNlKGIpfX1pZighZXx8aXNOYU4oZSkpe2EuZXJyb3Io
IkNvdWxkbid0IHBhcnNlICIrYisiIGFzIGEgZGF0ZSIpfXJldHVybiBlfTtEeWdyYXBoLnByb3Rv
dHlwZS5kZXRlY3RUeXBlRnJvbVN0cmluZ189ZnVuY3Rpb24oYil7dmFyIGE9ZmFsc2U7aWYoYi5p
bmRleE9mKCItIik+PTB8fGIuaW5kZXhPZigiLyIpPj0wfHxpc05hTihwYXJzZUZsb2F0KGIpKSl7
YT10cnVlfWVsc2V7aWYoYi5sZW5ndGg9PTgmJmI+IjE5NzAwMTAxIiYmYjwiMjAzNzEyMzEiKXth
PXRydWV9fWlmKGEpe3RoaXMuYXR0cnNfLnhWYWx1ZUZvcm1hdHRlcj1EeWdyYXBoLmRhdGVTdHJp
bmdfO3RoaXMuYXR0cnNfLnhWYWx1ZVBhcnNlcj1EeWdyYXBoLmRhdGVQYXJzZXI7dGhpcy5hdHRy
c18ueFRpY2tlcj1EeWdyYXBoLmRhdGVUaWNrZXI7dGhpcy5hdHRyc18ueEF4aXNMYWJlbEZvcm1h
dHRlcj1EeWdyYXBoLmRhdGVBeGlzRm9ybWF0dGVyfWVsc2V7dGhpcy5hdHRyc18ueFZhbHVlRm9y
bWF0dGVyPWZ1bmN0aW9uKGMpe3JldHVybiBjfTt0aGlzLmF0dHJzXy54VmFsdWVQYXJzZXI9ZnVu
Y3Rpb24oYyl7cmV0dXJuIHBhcnNlRmxvYXQoYyl9O3RoaXMuYXR0cnNfLnhUaWNrZXI9RHlncmFw
aC5udW1lcmljVGlja3M7dGhpcy5hdHRyc18ueEF4aXNMYWJlbEZvcm1hdHRlcj10aGlzLmF0dHJz
Xy54VmFsdWVGb3JtYXR0ZXJ9fTtEeWdyYXBoLnByb3RvdHlwZS5wYXJzZUNTVl89ZnVuY3Rpb24o
aCl7dmFyIG49W107dmFyIHI9aC5zcGxpdCgiXG4iKTt2YXIgYj10aGlzLmF0dHJfKCJkZWxpbWl0
ZXIiKTtpZihyWzBdLmluZGV4T2YoYik9PS0xJiZyWzBdLmluZGV4T2YoIlx0Iik+PTApe2I9Ilx0
In12YXIgYT0wO2lmKHRoaXMubGFiZWxzRnJvbUNTVl8pe2E9MTt0aGlzLmF0dHJzXy5sYWJlbHM9
clswXS5zcGxpdChiKX12YXIgaz1mdW5jdGlvbihqKXt2YXIgcz1wYXJzZUZsb2F0KGopO3JldHVy
biBpc05hTihzKT9udWxsOnN9O3ZhciBjO3ZhciBwPWZhbHNlO3ZhciBkPXRoaXMuYXR0cl8oImxh
YmVscyIpLmxlbmd0aDt2YXIgbT1mYWxzZTtmb3IodmFyIGc9YTtnPHIubGVuZ3RoO2crKyl7dmFy
IHE9cltnXTtpZihxLmxlbmd0aD09MCl7Y29udGludWV9aWYocVswXT09IiMiKXtjb250aW51ZX12
YXIgZj1xLnNwbGl0KGIpO2lmKGYubGVuZ3RoPDIpe2NvbnRpbnVlfXZhciBsPVtdO2lmKCFwKXt0
aGlzLmRldGVjdFR5cGVGcm9tU3RyaW5nXyhmWzBdKTtjPXRoaXMuYXR0cl8oInhWYWx1ZVBhcnNl
ciIpO3A9dHJ1ZX1sWzBdPWMoZlswXSx0aGlzKTtpZih0aGlzLmZyYWN0aW9uc18pe2Zvcih2YXIg
ZT0xO2U8Zi5sZW5ndGg7ZSsrKXt2YXIgbz1mW2VdLnNwbGl0KCIvIik7bFtlXT1bayhvWzBdKSxr
KG9bMV0pXX19ZWxzZXtpZih0aGlzLmF0dHJfKCJlcnJvckJhcnMiKSl7Zm9yKHZhciBlPTE7ZTxm
Lmxlbmd0aDtlKz0yKXtsWyhlKzEpLzJdPVtrKGZbZV0pLGsoZltlKzFdKV19fWVsc2V7aWYodGhp
cy5hdHRyXygiY3VzdG9tQmFycyIpKXtmb3IodmFyIGU9MTtlPGYubGVuZ3RoO2UrKyl7dmFyIG89
ZltlXS5zcGxpdCgiOyIpO2xbZV09W2sob1swXSksayhvWzFdKSxrKG9bMl0pXX19ZWxzZXtmb3Io
dmFyIGU9MTtlPGYubGVuZ3RoO2UrKyl7bFtlXT1rKGZbZV0pfX19fWlmKG4ubGVuZ3RoPjAmJmxb
MF08bltuLmxlbmd0aC0xXVswXSl7bT10cnVlfW4ucHVzaChsKTtpZihsLmxlbmd0aCE9ZCl7dGhp
cy5lcnJvcigiTnVtYmVyIG9mIGNvbHVtbnMgaW4gbGluZSAiK2crIiAoIitsLmxlbmd0aCsiKSBk
b2VzIG5vdCBhZ3JlZSB3aXRoIG51bWJlciBvZiBsYWJlbHMgKCIrZCsiKSAiK3EpfX1pZihtKXt0
aGlzLndhcm4oIkNTViBpcyBvdXQgb2Ygb3JkZXI7IG9yZGVyIGl0IGNvcnJlY3RseSB0byBzcGVl
ZCBsb2FkaW5nLiIpO24uc29ydChmdW5jdGlvbihzLGope3JldHVybiBzWzBdLWpbMF19KX1yZXR1
cm4gbn07RHlncmFwaC5wcm90b3R5cGUucGFyc2VBcnJheV89ZnVuY3Rpb24oYil7aWYoYi5sZW5n
dGg9PTApe3RoaXMuZXJyb3IoIkNhbid0IHBsb3QgZW1wdHkgZGF0YSBzZXQiKTtyZXR1cm4gbnVs
bH1pZihiWzBdLmxlbmd0aD09MCl7dGhpcy5lcnJvcigiRGF0YSBzZXQgY2Fubm90IGNvbnRhaW4g
YW4gZW1wdHkgcm93Iik7cmV0dXJuIG51bGx9aWYodGhpcy5hdHRyXygibGFiZWxzIik9PW51bGwp
e3RoaXMud2FybigiVXNpbmcgZGVmYXVsdCBsYWJlbHMuIFNldCBsYWJlbHMgZXhwbGljaXRseSB2
aWEgJ2xhYmVscycgaW4gdGhlIG9wdGlvbnMgcGFyYW1ldGVyIik7dGhpcy5hdHRyc18ubGFiZWxz
PVsiWCJdO2Zvcih2YXIgYT0xO2E8YlswXS5sZW5ndGg7YSsrKXt0aGlzLmF0dHJzXy5sYWJlbHMu
cHVzaCgiWSIrYSl9fWlmKER5Z3JhcGguaXNEYXRlTGlrZShiWzBdWzBdKSl7dGhpcy5hdHRyc18u
eFZhbHVlRm9ybWF0dGVyPUR5Z3JhcGguZGF0ZVN0cmluZ187dGhpcy5hdHRyc18ueEF4aXNMYWJl
bEZvcm1hdHRlcj1EeWdyYXBoLmRhdGVBeGlzRm9ybWF0dGVyO3RoaXMuYXR0cnNfLnhUaWNrZXI9
RHlncmFwaC5kYXRlVGlja2VyO3ZhciBjPUR5Z3JhcGguY2xvbmUoYik7Zm9yKHZhciBhPTA7YTxi
Lmxlbmd0aDthKyspe2lmKGNbYV0ubGVuZ3RoPT0wKXt0aGlzLmVycm9yKCJSb3cgIisoMSthKSsi
IG9mIGRhdGEgaXMgZW1wdHkiKTtyZXR1cm4gbnVsbH1pZihjW2FdWzBdPT1udWxsfHx0eXBlb2Yo
Y1thXVswXS5nZXRUaW1lKSE9ImZ1bmN0aW9uInx8aXNOYU4oY1thXVswXS5nZXRUaW1lKCkpKXt0
aGlzLmVycm9yKCJ4IHZhbHVlIGluIHJvdyAiKygxK2EpKyIgaXMgbm90IGEgRGF0ZSIpO3JldHVy
biBudWxsfWNbYV1bMF09Y1thXVswXS5nZXRUaW1lKCl9cmV0dXJuIGN9ZWxzZXt0aGlzLmF0dHJz
Xy54VmFsdWVGb3JtYXR0ZXI9ZnVuY3Rpb24oZCl7cmV0dXJuIGR9O3RoaXMuYXR0cnNfLnhUaWNr
ZXI9RHlncmFwaC5udW1lcmljVGlja3M7cmV0dXJuIGJ9fTtEeWdyYXBoLnByb3RvdHlwZS5wYXJz
ZURhdGFUYWJsZV89ZnVuY3Rpb24odil7dmFyIGc9di5nZXROdW1iZXJPZkNvbHVtbnMoKTt2YXIg
Zj12LmdldE51bWJlck9mUm93cygpO3ZhciBlPXYuZ2V0Q29sdW1uVHlwZSgwKTtpZihlPT0iZGF0
ZSJ8fGU9PSJkYXRldGltZSIpe3RoaXMuYXR0cnNfLnhWYWx1ZUZvcm1hdHRlcj1EeWdyYXBoLmRh
dGVTdHJpbmdfO3RoaXMuYXR0cnNfLnhWYWx1ZVBhcnNlcj1EeWdyYXBoLmRhdGVQYXJzZXI7dGhp
cy5hdHRyc18ueFRpY2tlcj1EeWdyYXBoLmRhdGVUaWNrZXI7dGhpcy5hdHRyc18ueEF4aXNMYWJl
bEZvcm1hdHRlcj1EeWdyYXBoLmRhdGVBeGlzRm9ybWF0dGVyfWVsc2V7aWYoZT09Im51bWJlciIp
e3RoaXMuYXR0cnNfLnhWYWx1ZUZvcm1hdHRlcj1mdW5jdGlvbihqKXtyZXR1cm4gan07dGhpcy5h
dHRyc18ueFZhbHVlUGFyc2VyPWZ1bmN0aW9uKGope3JldHVybiBwYXJzZUZsb2F0KGopfTt0aGlz
LmF0dHJzXy54VGlja2VyPUR5Z3JhcGgubnVtZXJpY1RpY2tzO3RoaXMuYXR0cnNfLnhBeGlzTGFi
ZWxGb3JtYXR0ZXI9dGhpcy5hdHRyc18ueFZhbHVlRm9ybWF0dGVyfWVsc2V7dGhpcy5lcnJvcigi
b25seSAnZGF0ZScsICdkYXRldGltZScgYW5kICdudW1iZXInIHR5cGVzIGFyZSBzdXBwb3J0ZWQg
Zm9yIGNvbHVtbiAxIG9mIERhdGFUYWJsZSBpbnB1dCAoR290ICciK2UrIicpIik7cmV0dXJuIG51
bGx9fXZhciBsPVtdO3ZhciBzPXt9O3ZhciByPWZhbHNlO2Zvcih2YXIgcD0xO3A8ZztwKyspe3Zh
ciBiPXYuZ2V0Q29sdW1uVHlwZShwKTtpZihiPT0ibnVtYmVyIil7bC5wdXNoKHApfWVsc2V7aWYo
Yj09InN0cmluZyImJnRoaXMuYXR0cl8oImRpc3BsYXlBbm5vdGF0aW9ucyIpKXt2YXIgcT1sW2wu
bGVuZ3RoLTFdO2lmKCFzLmhhc093blByb3BlcnR5KHEpKXtzW3FdPVtwXX1lbHNle3NbcV0ucHVz
aChwKX1yPXRydWV9ZWxzZXt0aGlzLmVycm9yKCJPbmx5ICdudW1iZXInIGlzIHN1cHBvcnRlZCBh
cyBhIGRlcGVuZGVudCB0eXBlIHdpdGggR3Zpei4gJ3N0cmluZycgaXMgb25seSBzdXBwb3J0ZWQg
aWYgZGlzcGxheUFubm90YXRpb25zIGlzIHRydWUiKX19fXZhciB0PVt2LmdldENvbHVtbkxhYmVs
KDApXTtmb3IodmFyIHA9MDtwPGwubGVuZ3RoO3ArKyl7dC5wdXNoKHYuZ2V0Q29sdW1uTGFiZWwo
bFtwXSkpfXRoaXMuYXR0cnNfLmxhYmVscz10O2c9dC5sZW5ndGg7dmFyIHU9W107dmFyIGg9ZmFs
c2U7dmFyIGE9W107Zm9yKHZhciBwPTA7cDxmO3ArKyl7dmFyIGQ9W107aWYodHlwZW9mKHYuZ2V0
VmFsdWUocCwwKSk9PT0idW5kZWZpbmVkInx8di5nZXRWYWx1ZShwLDApPT09bnVsbCl7dGhpcy53
YXJuKCJJZ25vcmluZyByb3cgIitwKyIgb2YgRGF0YVRhYmxlIGJlY2F1c2Ugb2YgdW5kZWZpbmVk
IG9yIG51bGwgZmlyc3QgY29sdW1uLiIpO2NvbnRpbnVlfWlmKGU9PSJkYXRlInx8ZT09ImRhdGV0
aW1lIil7ZC5wdXNoKHYuZ2V0VmFsdWUocCwwKS5nZXRUaW1lKCkpfWVsc2V7ZC5wdXNoKHYuZ2V0
VmFsdWUocCwwKSl9aWYoIXRoaXMuYXR0cl8oImVycm9yQmFycyIpKXtmb3IodmFyIG49MDtuPGwu
bGVuZ3RoO24rKyl7dmFyIGM9bFtuXTtkLnB1c2godi5nZXRWYWx1ZShwLGMpKTtpZihyJiZzLmhh
c093blByb3BlcnR5KGMpJiZ2LmdldFZhbHVlKHAsc1tjXVswXSkhPW51bGwpe3ZhciBvPXt9O28u
c2VyaWVzPXYuZ2V0Q29sdW1uTGFiZWwoYyk7by54dmFsPWRbMF07by5zaG9ydFRleHQ9U3RyaW5n
LmZyb21DaGFyQ29kZSg2NSthLmxlbmd0aCk7by50ZXh0PSIiO2Zvcih2YXIgbT0wO208c1tjXS5s
ZW5ndGg7bSsrKXtpZihtKXtvLnRleHQrPSJcbiJ9by50ZXh0Kz12LmdldFZhbHVlKHAsc1tjXVtt
XSl9YS5wdXNoKG8pfX19ZWxzZXtmb3IodmFyIG49MDtuPGctMTtuKyspe2QucHVzaChbdi5nZXRW
YWx1ZShwLDErMipuKSx2LmdldFZhbHVlKHAsMisyKm4pXSl9fWlmKHUubGVuZ3RoPjAmJmRbMF08
dVt1Lmxlbmd0aC0xXVswXSl7aD10cnVlfXUucHVzaChkKX1pZihoKXt0aGlzLndhcm4oIkRhdGFU
YWJsZSBpcyBvdXQgb2Ygb3JkZXI7IG9yZGVyIGl0IGNvcnJlY3RseSB0byBzcGVlZCBsb2FkaW5n
LiIpO3Uuc29ydChmdW5jdGlvbihrLGope3JldHVybiBrWzBdLWpbMF19KX10aGlzLnJhd0RhdGFf
PXU7aWYoYS5sZW5ndGg+MCl7dGhpcy5zZXRBbm5vdGF0aW9ucyhhLHRydWUpfX07RHlncmFwaC51
cGRhdGU9ZnVuY3Rpb24oYixjKXtpZih0eXBlb2YoYykhPSJ1bmRlZmluZWQiJiZjIT09bnVsbCl7
Zm9yKHZhciBhIGluIGMpe2lmKGMuaGFzT3duUHJvcGVydHkoYSkpe2JbYV09Y1thXX19fXJldHVy
biBifTtEeWdyYXBoLmlzQXJyYXlMaWtlPWZ1bmN0aW9uKGIpe3ZhciBhPXR5cGVvZihiKTtpZigo
YSE9Im9iamVjdCImJiEoYT09ImZ1bmN0aW9uIiYmdHlwZW9mKGIuaXRlbSk9PSJmdW5jdGlvbiIp
KXx8Yj09PW51bGx8fHR5cGVvZihiLmxlbmd0aCkhPSJudW1iZXIifHxiLm5vZGVUeXBlPT09Myl7
cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfTtEeWdyYXBoLmlzRGF0ZUxpa2U9ZnVuY3Rpb24oYSl7
aWYodHlwZW9mKGEpIT0ib2JqZWN0Inx8YT09PW51bGx8fHR5cGVvZihhLmdldFRpbWUpIT0iZnVu
Y3Rpb24iKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9O0R5Z3JhcGguY2xvbmU9ZnVuY3Rpb24o
Yyl7dmFyIGI9W107Zm9yKHZhciBhPTA7YTxjLmxlbmd0aDthKyspe2lmKER5Z3JhcGguaXNBcnJh
eUxpa2UoY1thXSkpe2IucHVzaChEeWdyYXBoLmNsb25lKGNbYV0pKX1lbHNle2IucHVzaChjW2Fd
KX19cmV0dXJuIGJ9O0R5Z3JhcGgucHJvdG90eXBlLnN0YXJ0Xz1mdW5jdGlvbigpe2lmKHR5cGVv
ZiB0aGlzLmZpbGVfPT0iZnVuY3Rpb24iKXt0aGlzLmxvYWRlZEV2ZW50Xyh0aGlzLmZpbGVfKCkp
fWVsc2V7aWYoRHlncmFwaC5pc0FycmF5TGlrZSh0aGlzLmZpbGVfKSl7dGhpcy5yYXdEYXRhXz10
aGlzLnBhcnNlQXJyYXlfKHRoaXMuZmlsZV8pO3RoaXMuZHJhd0dyYXBoXyh0aGlzLnJhd0RhdGFf
KX1lbHNle2lmKHR5cGVvZiB0aGlzLmZpbGVfPT0ib2JqZWN0IiYmdHlwZW9mIHRoaXMuZmlsZV8u
Z2V0Q29sdW1uUmFuZ2U9PSJmdW5jdGlvbiIpe3RoaXMucGFyc2VEYXRhVGFibGVfKHRoaXMuZmls
ZV8pO3RoaXMuZHJhd0dyYXBoXyh0aGlzLnJhd0RhdGFfKX1lbHNle2lmKHR5cGVvZiB0aGlzLmZp
bGVfPT0ic3RyaW5nIil7aWYodGhpcy5maWxlXy5pbmRleE9mKCJcbiIpPj0wKXt0aGlzLmxvYWRl
ZEV2ZW50Xyh0aGlzLmZpbGVfKX1lbHNle3ZhciBiPW5ldyBYTUxIdHRwUmVxdWVzdCgpO3ZhciBh
PXRoaXM7Yi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtpZihiLnJlYWR5U3RhdGU9PTQp
e2lmKGIuc3RhdHVzPT0yMDApe2EubG9hZGVkRXZlbnRfKGIucmVzcG9uc2VUZXh0KX19fTtiLm9w
ZW4oIkdFVCIsdGhpcy5maWxlXyx0cnVlKTtiLnNlbmQobnVsbCl9fWVsc2V7dGhpcy5lcnJvcigi
VW5rbm93biBkYXRhIGZvcm1hdDogIisodHlwZW9mIHRoaXMuZmlsZV8pKX19fX19O0R5Z3JhcGgu
cHJvdG90eXBlLnVwZGF0ZU9wdGlvbnM9ZnVuY3Rpb24oYSl7aWYoYS5yb2xsUGVyaW9kKXt0aGlz
LnJvbGxQZXJpb2RfPWEucm9sbFBlcmlvZH1pZihhLmRhdGVXaW5kb3cpe3RoaXMuZGF0ZVdpbmRv
d189YS5kYXRlV2luZG93fWlmKGEudmFsdWVSYW5nZSl7dGhpcy52YWx1ZVJhbmdlXz1hLnZhbHVl
UmFuZ2V9RHlncmFwaC51cGRhdGUodGhpcy51c2VyX2F0dHJzXyxhKTtEeWdyYXBoLnVwZGF0ZSh0
aGlzLnJlbmRlck9wdGlvbnNfLGEpO3RoaXMubGFiZWxzRnJvbUNTVl89KHRoaXMuYXR0cl8oImxh
YmVscyIpPT1udWxsKTt0aGlzLmxheW91dF8udXBkYXRlT3B0aW9ucyh7ZXJyb3JCYXJzOnRoaXMu
YXR0cl8oImVycm9yQmFycyIpfSk7aWYoYS5maWxlKXt0aGlzLmZpbGVfPWEuZmlsZTt0aGlzLnN0
YXJ0XygpfWVsc2V7dGhpcy5kcmF3R3JhcGhfKHRoaXMucmF3RGF0YV8pfX07RHlncmFwaC5wcm90
b3R5cGUucmVzaXplPWZ1bmN0aW9uKGIsYSl7aWYodGhpcy5yZXNpemVfbG9jayl7cmV0dXJufXRo
aXMucmVzaXplX2xvY2s9dHJ1ZTtpZigoYj09PW51bGwpIT0oYT09PW51bGwpKXt0aGlzLndhcm4o
IkR5Z3JhcGgucmVzaXplKCkgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHplcm8gcGFyYW1ldGVycyBv
ciB0d28gbm9uLU5VTEwgcGFyYW1ldGVycy4gUHJldGVuZGluZyBpdCB3YXMgemVyby4iKTtiPWE9
bnVsbH10aGlzLm1haW5kaXZfLmlubmVySFRNTD0iIjt0aGlzLmF0dHJzXy5sYWJlbHNEaXY9bnVs
bDtpZihiKXt0aGlzLm1haW5kaXZfLnN0eWxlLndpZHRoPWIrInB4Ijt0aGlzLm1haW5kaXZfLnN0
eWxlLmhlaWdodD1hKyJweCI7dGhpcy53aWR0aF89Yjt0aGlzLmhlaWdodF89YX1lbHNle3RoaXMu
d2lkdGhfPXRoaXMubWFpbmRpdl8ub2Zmc2V0V2lkdGg7dGhpcy5oZWlnaHRfPXRoaXMubWFpbmRp
dl8ub2Zmc2V0SGVpZ2h0fXRoaXMuY3JlYXRlSW50ZXJmYWNlXygpO3RoaXMuZHJhd0dyYXBoXyh0
aGlzLnJhd0RhdGFfKTt0aGlzLnJlc2l6ZV9sb2NrPWZhbHNlfTtEeWdyYXBoLnByb3RvdHlwZS5h
ZGp1c3RSb2xsPWZ1bmN0aW9uKGEpe3RoaXMucm9sbFBlcmlvZF89YTt0aGlzLmRyYXdHcmFwaF8o
dGhpcy5yYXdEYXRhXyl9O0R5Z3JhcGgucHJvdG90eXBlLnZpc2liaWxpdHk9ZnVuY3Rpb24oKXtp
ZighdGhpcy5hdHRyXygidmlzaWJpbGl0eSIpKXt0aGlzLmF0dHJzXy52aXNpYmlsaXR5PVtdfXdo
aWxlKHRoaXMuYXR0cl8oInZpc2liaWxpdHkiKS5sZW5ndGg8dGhpcy5yYXdEYXRhX1swXS5sZW5n
dGgtMSl7dGhpcy5hdHRyXygidmlzaWJpbGl0eSIpLnB1c2godHJ1ZSl9cmV0dXJuIHRoaXMuYXR0
cl8oInZpc2liaWxpdHkiKX07RHlncmFwaC5wcm90b3R5cGUuc2V0VmlzaWJpbGl0eT1mdW5jdGlv
bihiLGMpe3ZhciBhPXRoaXMudmlzaWJpbGl0eSgpO2lmKGI8MCYmYj49YS5sZW5ndGgpe3RoaXMu
d2FybigiaW52YWxpZCBzZXJpZXMgbnVtYmVyIGluIHNldFZpc2liaWxpdHk6ICIrYil9ZWxzZXth
W2JdPWM7dGhpcy5kcmF3R3JhcGhfKHRoaXMucmF3RGF0YV8pfX07RHlncmFwaC5wcm90b3R5cGUu
c2V0QW5ub3RhdGlvbnM9ZnVuY3Rpb24oYixhKXt0aGlzLmFubm90YXRpb25zXz1iO3RoaXMubGF5
b3V0Xy5zZXRBbm5vdGF0aW9ucyh0aGlzLmFubm90YXRpb25zXyk7aWYoIWEpe3RoaXMuZHJhd0dy
YXBoXyh0aGlzLnJhd0RhdGFfKX19O0R5Z3JhcGgucHJvdG90eXBlLmFubm90YXRpb25zPWZ1bmN0
aW9uKCl7cmV0dXJuIHRoaXMuYW5ub3RhdGlvbnNffTtEeWdyYXBoLnByb3RvdHlwZS5pbmRleEZy
b21TZXROYW1lPWZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMuYXR0cl8oImxhYmVscyIpO2Zvcih2YXIg
Yj0wO2I8Yy5sZW5ndGg7YisrKXtpZihjW2JdPT1hKXtyZXR1cm4gYn19cmV0dXJuIG51bGx9O0R5
Z3JhcGguYWRkQW5ub3RhdGlvblJ1bGU9ZnVuY3Rpb24oKXtpZihEeWdyYXBoLmFkZGVkQW5ub3Rh
dGlvbkNTUyl7cmV0dXJufXZhciBhO2lmKGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aD4wKXth
PWRvY3VtZW50LnN0eWxlU2hlZXRzWzBdfWVsc2V7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgic3R5bGUiKTtjLnR5cGU9InRleHQvY3NzIjtkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKGMpO2ZvcihpPTA7aTxkb2N1bWVudC5zdHlsZVNoZWV0
cy5sZW5ndGg7aSsrKXtpZihkb2N1bWVudC5zdHlsZVNoZWV0c1tpXS5kaXNhYmxlZCl7Y29udGlu
dWV9YT1kb2N1bWVudC5zdHlsZVNoZWV0c1tpXX19dmFyIGI9ImJvcmRlcjogMXB4IHNvbGlkIGJs
YWNrOyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgdGV4dC1hbGlnbjogY2VudGVyOyI7aWYoYS5p
bnNlcnRSdWxlKXthLmluc2VydFJ1bGUoIi5keWdyYXBoRGVmYXVsdEFubm90YXRpb24geyAiK2Ir
IiB9IiwwKX1lbHNle2lmKGEuYWRkUnVsZSl7YS5hZGRSdWxlKCIuZHlncmFwaERlZmF1bHRBbm5v
dGF0aW9uIixiKX19RHlncmFwaC5hZGRlZEFubm90YXRpb25DU1M9dHJ1ZX07RHlncmFwaC5jcmVh
dGVDYW52YXM9ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMi
KTtpc0lFPSgvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXdpbmRvdy5vcGVyYSk7
aWYoaXNJRSl7YT1HX3ZtbENhbnZhc01hbmFnZXIuaW5pdEVsZW1lbnQoYSl9cmV0dXJuIGF9O0R5
Z3JhcGguR1ZpekNoYXJ0PWZ1bmN0aW9uKGEpe3RoaXMuY29udGFpbmVyPWF9O0R5Z3JhcGguR1Zp
ekNoYXJ0LnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKGIsYSl7dGhpcy5jb250YWluZXIuaW5uZXJI
VE1MPSIiO3RoaXMuZGF0ZV9ncmFwaD1uZXcgRHlncmFwaCh0aGlzLmNvbnRhaW5lcixiLGEpfTtE
eWdyYXBoLkdWaXpDaGFydC5wcm90b3R5cGUuc2V0U2VsZWN0aW9uPWZ1bmN0aW9uKGIpe3ZhciBh
PWZhbHNlO2lmKGIubGVuZ3RoKXthPWJbMF0ucm93fXRoaXMuZGF0ZV9ncmFwaC5zZXRTZWxlY3Rp
b24oYSl9O0R5Z3JhcGguR1ZpekNoYXJ0LnByb3RvdHlwZS5nZXRTZWxlY3Rpb249ZnVuY3Rpb24o
KXt2YXIgYj1bXTt2YXIgYz10aGlzLmRhdGVfZ3JhcGguZ2V0U2VsZWN0aW9uKCk7aWYoYzwwKXty
ZXR1cm4gYn1jb2w9MTtmb3IodmFyIGEgaW4gdGhpcy5kYXRlX2dyYXBoLmxheW91dF8uZGF0YXNl
dHMpe2IucHVzaCh7cm93OmMsY29sdW1uOmNvbH0pO2NvbCsrfXJldHVybiBifTtEYXRlR3JhcGg9
RHlncmFwaDtmdW5jdGlvbiBSR0JDb2xvcihnKXt0aGlzLm9rPWZhbHNlO2lmKGcuY2hhckF0KDAp
PT0iIyIpe2c9Zy5zdWJzdHIoMSw2KX1nPWcucmVwbGFjZSgvIC9nLCIiKTtnPWcudG9Mb3dlckNh
c2UoKTt2YXIgYT17YWxpY2VibHVlOiJmMGY4ZmYiLGFudGlxdWV3aGl0ZToiZmFlYmQ3IixhcXVh
OiIwMGZmZmYiLGFxdWFtYXJpbmU6IjdmZmZkNCIsYXp1cmU6ImYwZmZmZiIsYmVpZ2U6ImY1ZjVk
YyIsYmlzcXVlOiJmZmU0YzQiLGJsYWNrOiIwMDAwMDAiLGJsYW5jaGVkYWxtb25kOiJmZmViY2Qi
LGJsdWU6IjAwMDBmZiIsYmx1ZXZpb2xldDoiOGEyYmUyIixicm93bjoiYTUyYTJhIixidXJseXdv
b2Q6ImRlYjg4NyIsY2FkZXRibHVlOiI1ZjllYTAiLGNoYXJ0cmV1c2U6IjdmZmYwMCIsY2hvY29s
YXRlOiJkMjY5MWUiLGNvcmFsOiJmZjdmNTAiLGNvcm5mbG93ZXJibHVlOiI2NDk1ZWQiLGNvcm5z
aWxrOiJmZmY4ZGMiLGNyaW1zb246ImRjMTQzYyIsY3lhbjoiMDBmZmZmIixkYXJrYmx1ZToiMDAw
MDhiIixkYXJrY3lhbjoiMDA4YjhiIixkYXJrZ29sZGVucm9kOiJiODg2MGIiLGRhcmtncmF5OiJh
OWE5YTkiLGRhcmtncmVlbjoiMDA2NDAwIixkYXJra2hha2k6ImJkYjc2YiIsZGFya21hZ2VudGE6
IjhiMDA4YiIsZGFya29saXZlZ3JlZW46IjU1NmIyZiIsZGFya29yYW5nZToiZmY4YzAwIixkYXJr
b3JjaGlkOiI5OTMyY2MiLGRhcmtyZWQ6IjhiMDAwMCIsZGFya3NhbG1vbjoiZTk5NjdhIixkYXJr
c2VhZ3JlZW46IjhmYmM4ZiIsZGFya3NsYXRlYmx1ZToiNDgzZDhiIixkYXJrc2xhdGVncmF5OiIy
ZjRmNGYiLGRhcmt0dXJxdW9pc2U6IjAwY2VkMSIsZGFya3Zpb2xldDoiOTQwMGQzIixkZWVwcGlu
azoiZmYxNDkzIixkZWVwc2t5Ymx1ZToiMDBiZmZmIixkaW1ncmF5OiI2OTY5NjkiLGRvZGdlcmJs
dWU6IjFlOTBmZiIsZmVsZHNwYXI6ImQxOTI3NSIsZmlyZWJyaWNrOiJiMjIyMjIiLGZsb3JhbHdo
aXRlOiJmZmZhZjAiLGZvcmVzdGdyZWVuOiIyMjhiMjIiLGZ1Y2hzaWE6ImZmMDBmZiIsZ2FpbnNi
b3JvOiJkY2RjZGMiLGdob3N0d2hpdGU6ImY4ZjhmZiIsZ29sZDoiZmZkNzAwIixnb2xkZW5yb2Q6
ImRhYTUyMCIsZ3JheToiODA4MDgwIixncmVlbjoiMDA4MDAwIixncmVlbnllbGxvdzoiYWRmZjJm
Iixob25leWRldzoiZjBmZmYwIixob3RwaW5rOiJmZjY5YjQiLGluZGlhbnJlZDoiY2Q1YzVjIixp
bmRpZ286IjRiMDA4MiIsaXZvcnk6ImZmZmZmMCIsa2hha2k6ImYwZTY4YyIsbGF2ZW5kZXI6ImU2
ZTZmYSIsbGF2ZW5kZXJibHVzaDoiZmZmMGY1IixsYXduZ3JlZW46IjdjZmMwMCIsbGVtb25jaGlm
Zm9uOiJmZmZhY2QiLGxpZ2h0Ymx1ZToiYWRkOGU2IixsaWdodGNvcmFsOiJmMDgwODAiLGxpZ2h0
Y3lhbjoiZTBmZmZmIixsaWdodGdvbGRlbnJvZHllbGxvdzoiZmFmYWQyIixsaWdodGdyZXk6ImQz
ZDNkMyIsbGlnaHRncmVlbjoiOTBlZTkwIixsaWdodHBpbms6ImZmYjZjMSIsbGlnaHRzYWxtb246
ImZmYTA3YSIsbGlnaHRzZWFncmVlbjoiMjBiMmFhIixsaWdodHNreWJsdWU6Ijg3Y2VmYSIsbGln
aHRzbGF0ZWJsdWU6Ijg0NzBmZiIsbGlnaHRzbGF0ZWdyYXk6Ijc3ODg5OSIsbGlnaHRzdGVlbGJs
dWU6ImIwYzRkZSIsbGlnaHR5ZWxsb3c6ImZmZmZlMCIsbGltZToiMDBmZjAwIixsaW1lZ3JlZW46
IjMyY2QzMiIsbGluZW46ImZhZjBlNiIsbWFnZW50YToiZmYwMGZmIixtYXJvb246IjgwMDAwMCIs
bWVkaXVtYXF1YW1hcmluZToiNjZjZGFhIixtZWRpdW1ibHVlOiIwMDAwY2QiLG1lZGl1bW9yY2hp
ZDoiYmE1NWQzIixtZWRpdW1wdXJwbGU6IjkzNzBkOCIsbWVkaXVtc2VhZ3JlZW46IjNjYjM3MSIs
bWVkaXVtc2xhdGVibHVlOiI3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIwMGZhOWEiLG1lZGl1
bXR1cnF1b2lzZToiNDhkMWNjIixtZWRpdW12aW9sZXRyZWQ6ImM3MTU4NSIsbWlkbmlnaHRibHVl
OiIxOTE5NzAiLG1pbnRjcmVhbToiZjVmZmZhIixtaXN0eXJvc2U6ImZmZTRlMSIsbW9jY2FzaW46
ImZmZTRiNSIsbmF2YWpvd2hpdGU6ImZmZGVhZCIsbmF2eToiMDAwMDgwIixvbGRsYWNlOiJmZGY1
ZTYiLG9saXZlOiI4MDgwMDAiLG9saXZlZHJhYjoiNmI4ZTIzIixvcmFuZ2U6ImZmYTUwMCIsb3Jh
bmdlcmVkOiJmZjQ1MDAiLG9yY2hpZDoiZGE3MGQ2IixwYWxlZ29sZGVucm9kOiJlZWU4YWEiLHBh
bGVncmVlbjoiOThmYjk4IixwYWxldHVycXVvaXNlOiJhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6ImQ4
NzA5MyIscGFwYXlhd2hpcDoiZmZlZmQ1IixwZWFjaHB1ZmY6ImZmZGFiOSIscGVydToiY2Q4NTNm
IixwaW5rOiJmZmMwY2IiLHBsdW06ImRkYTBkZCIscG93ZGVyYmx1ZToiYjBlMGU2IixwdXJwbGU6
IjgwMDA4MCIscmVkOiJmZjAwMDAiLHJvc3licm93bjoiYmM4ZjhmIixyb3lhbGJsdWU6IjQxNjll
MSIsc2FkZGxlYnJvd246IjhiNDUxMyIsc2FsbW9uOiJmYTgwNzIiLHNhbmR5YnJvd246ImY0YTQ2
MCIsc2VhZ3JlZW46IjJlOGI1NyIsc2Vhc2hlbGw6ImZmZjVlZSIsc2llbm5hOiJhMDUyMmQiLHNp
bHZlcjoiYzBjMGMwIixza3libHVlOiI4N2NlZWIiLHNsYXRlYmx1ZToiNmE1YWNkIixzbGF0ZWdy
YXk6IjcwODA5MCIsc25vdzoiZmZmYWZhIixzcHJpbmdncmVlbjoiMDBmZjdmIixzdGVlbGJsdWU6
IjQ2ODJiNCIsdGFuOiJkMmI0OGMiLHRlYWw6IjAwODA4MCIsdGhpc3RsZToiZDhiZmQ4Iix0b21h
dG86ImZmNjM0NyIsdHVycXVvaXNlOiI0MGUwZDAiLHZpb2xldDoiZWU4MmVlIix2aW9sZXRyZWQ6
ImQwMjA5MCIsd2hlYXQ6ImY1ZGViMyIsd2hpdGU6ImZmZmZmZiIsd2hpdGVzbW9rZToiZjVmNWY1
Iix5ZWxsb3c6ImZmZmYwMCIseWVsbG93Z3JlZW46IjlhY2QzMiJ9O2Zvcih2YXIgYyBpbiBhKXtp
ZihnPT1jKXtnPWFbY119fXZhciBoPVt7cmU6L15yZ2JcKChcZHsxLDN9KSxccyooXGR7MSwzfSks
XHMqKFxkezEsM30pXCkkLyxleGFtcGxlOlsicmdiKDEyMywgMjM0LCA0NSkiLCJyZ2IoMjU1LDIz
NCwyNDUpIl0scHJvY2VzczpmdW5jdGlvbihqKXtyZXR1cm5bcGFyc2VJbnQoalsxXSkscGFyc2VJ
bnQoalsyXSkscGFyc2VJbnQoalszXSldfX0se3JlOi9eKFx3ezJ9KShcd3syfSkoXHd7Mn0pJC8s
ZXhhbXBsZTpbIiMwMGZmMDAiLCIzMzY2OTkiXSxwcm9jZXNzOmZ1bmN0aW9uKGope3JldHVybltw
YXJzZUludChqWzFdLDE2KSxwYXJzZUludChqWzJdLDE2KSxwYXJzZUludChqWzNdLDE2KV19fSx7
cmU6L14oXHd7MX0pKFx3ezF9KShcd3sxfSkkLyxleGFtcGxlOlsiI2ZiMCIsImYwZiJdLHByb2Nl
c3M6ZnVuY3Rpb24oail7cmV0dXJuW3BhcnNlSW50KGpbMV0ralsxXSwxNikscGFyc2VJbnQoalsy
XStqWzJdLDE2KSxwYXJzZUludChqWzNdK2pbM10sMTYpXX19XTtmb3IodmFyIGI9MDtiPGgubGVu
Z3RoO2IrKyl7dmFyIGU9aFtiXS5yZTt2YXIgZD1oW2JdLnByb2Nlc3M7dmFyIGY9ZS5leGVjKGcp
O2lmKGYpe2NoYW5uZWxzPWQoZik7dGhpcy5yPWNoYW5uZWxzWzBdO3RoaXMuZz1jaGFubmVsc1sx
XTt0aGlzLmI9Y2hhbm5lbHNbMl07dGhpcy5vaz10cnVlfX10aGlzLnI9KHRoaXMucjwwfHxpc05h
Tih0aGlzLnIpKT8wOigodGhpcy5yPjI1NSk/MjU1OnRoaXMucik7dGhpcy5nPSh0aGlzLmc8MHx8
aXNOYU4odGhpcy5nKSk/MDooKHRoaXMuZz4yNTUpPzI1NTp0aGlzLmcpO3RoaXMuYj0odGhpcy5i
PDB8fGlzTmFOKHRoaXMuYikpPzA6KCh0aGlzLmI+MjU1KT8yNTU6dGhpcy5iKTt0aGlzLnRvUkdC
PWZ1bmN0aW9uKCl7cmV0dXJuInJnYigiK3RoaXMucisiLCAiK3RoaXMuZysiLCAiK3RoaXMuYisi
KSJ9O3RoaXMudG9IZXg9ZnVuY3Rpb24oKXt2YXIgbD10aGlzLnIudG9TdHJpbmcoMTYpO3ZhciBr
PXRoaXMuZy50b1N0cmluZygxNik7dmFyIGo9dGhpcy5iLnRvU3RyaW5nKDE2KTtpZihsLmxlbmd0
aD09MSl7bD0iMCIrbH1pZihrLmxlbmd0aD09MSl7az0iMCIra31pZihqLmxlbmd0aD09MSl7aj0i
MCIran1yZXR1cm4iIyIrbCtrK2p9fURhdGUuZXh0PXt9O0RhdGUuZXh0LnV0aWw9e307RGF0ZS5l
eHQudXRpbC54UGFkPWZ1bmN0aW9uKGEsYyxiKXtpZih0eXBlb2YoYik9PSJ1bmRlZmluZWQiKXti
PTEwfWZvcig7cGFyc2VJbnQoYSwxMCk8YiYmYj4xO2IvPTEwKXthPWMudG9TdHJpbmcoKSthfXJl
dHVybiBhLnRvU3RyaW5nKCl9O0RhdGUucHJvdG90eXBlLmxvY2FsZT0iZW4tR0IiO2lmKGRvY3Vt
ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJodG1sIikmJmRvY3VtZW50LmdldEVsZW1lbnRzQnlU
YWdOYW1lKCJodG1sIilbMF0ubGFuZyl7RGF0ZS5wcm90b3R5cGUubG9jYWxlPWRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCJodG1sIilbMF0ubGFuZ31EYXRlLmV4dC5sb2NhbGVzPXt9O0Rh
dGUuZXh0LmxvY2FsZXMuZW49e2E6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmki
LCJTYXQiXSxBOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJz
ZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxiOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5
IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sQjpbIkphbnVhcnki
LCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIs
IlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sYzoiJWEgJWQgJWIg
JVkgJVQgJVoiLHA6WyJBTSIsIlBNIl0sUDpbImFtIiwicG0iXSx4OiIlZC8lbS8leSIsWDoiJVQi
fTtEYXRlLmV4dC5sb2NhbGVzWyJlbi1VUyJdPURhdGUuZXh0LmxvY2FsZXMuZW47RGF0ZS5leHQu
bG9jYWxlc1siZW4tVVMiXS5jPSIlYSAlZCAlYiAlWSAlciAlWiI7RGF0ZS5leHQubG9jYWxlc1si
ZW4tVVMiXS54PSIlRCI7RGF0ZS5leHQubG9jYWxlc1siZW4tVVMiXS5YPSIlciI7RGF0ZS5leHQu
bG9jYWxlc1siZW4tR0IiXT1EYXRlLmV4dC5sb2NhbGVzLmVuO0RhdGUuZXh0LmxvY2FsZXNbImVu
LUFVIl09RGF0ZS5leHQubG9jYWxlc1siZW4tR0IiXTtEYXRlLmV4dC5mb3JtYXRzPXthOmZ1bmN0
aW9uKGEpe3JldHVybiBEYXRlLmV4dC5sb2NhbGVzW2EubG9jYWxlXS5hW2EuZ2V0RGF5KCldfSxB
OmZ1bmN0aW9uKGEpe3JldHVybiBEYXRlLmV4dC5sb2NhbGVzW2EubG9jYWxlXS5BW2EuZ2V0RGF5
KCldfSxiOmZ1bmN0aW9uKGEpe3JldHVybiBEYXRlLmV4dC5sb2NhbGVzW2EubG9jYWxlXS5iW2Eu
Z2V0TW9udGgoKV19LEI6ZnVuY3Rpb24oYSl7cmV0dXJuIERhdGUuZXh0LmxvY2FsZXNbYS5sb2Nh
bGVdLkJbYS5nZXRNb250aCgpXX0sYzoidG9Mb2NhbGVTdHJpbmciLEM6ZnVuY3Rpb24oYSl7cmV0
dXJuIERhdGUuZXh0LnV0aWwueFBhZChwYXJzZUludChhLmdldEZ1bGxZZWFyKCkvMTAwLDEwKSww
KX0sZDpbImdldERhdGUiLCIwIl0sZTpbImdldERhdGUiLCIgIl0sZzpmdW5jdGlvbihhKXtyZXR1
cm4gRGF0ZS5leHQudXRpbC54UGFkKHBhcnNlSW50KERhdGUuZXh0LnV0aWwuRyhhKS8xMDAsMTAp
LDApfSxHOmZ1bmN0aW9uKGMpe3ZhciBlPWMuZ2V0RnVsbFllYXIoKTt2YXIgYj1wYXJzZUludChE
YXRlLmV4dC5mb3JtYXRzLlYoYyksMTApO3ZhciBhPXBhcnNlSW50KERhdGUuZXh0LmZvcm1hdHMu
VyhjKSwxMCk7aWYoYT5iKXtlKyt9ZWxzZXtpZihhPT09MCYmYj49NTIpe2UtLX19cmV0dXJuIGV9
LEg6WyJnZXRIb3VycyIsIjAiXSxJOmZ1bmN0aW9uKGIpe3ZhciBhPWIuZ2V0SG91cnMoKSUxMjty
ZXR1cm4gRGF0ZS5leHQudXRpbC54UGFkKGE9PT0wPzEyOmEsMCl9LGo6ZnVuY3Rpb24oYyl7dmFy
IGE9Yy1uZXcgRGF0ZSgiIitjLmdldEZ1bGxZZWFyKCkrIi8xLzEgR01UIik7YSs9Yy5nZXRUaW1l
em9uZU9mZnNldCgpKjYwMDAwO3ZhciBiPXBhcnNlSW50KGEvNjAwMDAvNjAvMjQsMTApKzE7cmV0
dXJuIERhdGUuZXh0LnV0aWwueFBhZChiLDAsMTAwKX0sbTpmdW5jdGlvbihhKXtyZXR1cm4gRGF0
ZS5leHQudXRpbC54UGFkKGEuZ2V0TW9udGgoKSsxLDApfSxNOlsiZ2V0TWludXRlcyIsIjAiXSxw
OmZ1bmN0aW9uKGEpe3JldHVybiBEYXRlLmV4dC5sb2NhbGVzW2EubG9jYWxlXS5wW2EuZ2V0SG91
cnMoKT49MTI/MTowXX0sUDpmdW5jdGlvbihhKXtyZXR1cm4gRGF0ZS5leHQubG9jYWxlc1thLmxv
Y2FsZV0uUFthLmdldEhvdXJzKCk+PTEyPzE6MF19LFM6WyJnZXRTZWNvbmRzIiwiMCJdLHU6ZnVu
Y3Rpb24oYSl7dmFyIGI9YS5nZXREYXkoKTtyZXR1cm4gYj09PTA/NzpifSxVOmZ1bmN0aW9uKGUp
e3ZhciBhPXBhcnNlSW50KERhdGUuZXh0LmZvcm1hdHMuaihlKSwxMCk7dmFyIGM9Ni1lLmdldERh
eSgpO3ZhciBiPXBhcnNlSW50KChhK2MpLzcsMTApO3JldHVybiBEYXRlLmV4dC51dGlsLnhQYWQo
YiwwKX0sVjpmdW5jdGlvbihlKXt2YXIgYz1wYXJzZUludChEYXRlLmV4dC5mb3JtYXRzLlcoZSks
MTApO3ZhciBhPShuZXcgRGF0ZSgiIitlLmdldEZ1bGxZZWFyKCkrIi8xLzEiKSkuZ2V0RGF5KCk7
dmFyIGI9YysoYT40fHxhPD0xPzA6MSk7aWYoYj09NTMmJihuZXcgRGF0ZSgiIitlLmdldEZ1bGxZ
ZWFyKCkrIi8xMi8zMSIpKS5nZXREYXkoKTw0KXtiPTF9ZWxzZXtpZihiPT09MCl7Yj1EYXRlLmV4
dC5mb3JtYXRzLlYobmV3IERhdGUoIiIrKGUuZ2V0RnVsbFllYXIoKS0xKSsiLzEyLzMxIikpfX1y
ZXR1cm4gRGF0ZS5leHQudXRpbC54UGFkKGIsMCl9LHc6ImdldERheSIsVzpmdW5jdGlvbihlKXt2
YXIgYT1wYXJzZUludChEYXRlLmV4dC5mb3JtYXRzLmooZSksMTApO3ZhciBjPTctRGF0ZS5leHQu
Zm9ybWF0cy51KGUpO3ZhciBiPXBhcnNlSW50KChhK2MpLzcsMTApO3JldHVybiBEYXRlLmV4dC51
dGlsLnhQYWQoYiwwLDEwKX0seTpmdW5jdGlvbihhKXtyZXR1cm4gRGF0ZS5leHQudXRpbC54UGFk
KGEuZ2V0RnVsbFllYXIoKSUxMDAsMCl9LFk6ImdldEZ1bGxZZWFyIix6OmZ1bmN0aW9uKGMpe3Zh
ciBiPWMuZ2V0VGltZXpvbmVPZmZzZXQoKTt2YXIgYT1EYXRlLmV4dC51dGlsLnhQYWQocGFyc2VJ
bnQoTWF0aC5hYnMoYi82MCksMTApLDApO3ZhciBlPURhdGUuZXh0LnV0aWwueFBhZChiJTYwLDAp
O3JldHVybihiPjA/Ii0iOiIrIikrYStlfSxaOmZ1bmN0aW9uKGEpe3JldHVybiBhLnRvU3RyaW5n
KCkucmVwbGFjZSgvXi4qXCgoW14pXSspXCkkLywiJDEiKX0sIiUiOmZ1bmN0aW9uKGEpe3JldHVy
biIlIn19O0RhdGUuZXh0LmFnZ3JlZ2F0ZXM9e2M6ImxvY2FsZSIsRDoiJW0vJWQvJXkiLGg6IiVi
IixuOiJcbiIscjoiJUk6JU06JVMgJXAiLFI6IiVIOiVNIix0OiJcdCIsVDoiJUg6JU06JVMiLHg6
ImxvY2FsZSIsWDoibG9jYWxlIn07RGF0ZS5leHQuYWdncmVnYXRlcy56PURhdGUuZXh0LmZvcm1h
dHMueihuZXcgRGF0ZSgpKTtEYXRlLmV4dC5hZ2dyZWdhdGVzLlo9RGF0ZS5leHQuZm9ybWF0cy5a
KG5ldyBEYXRlKCkpO0RhdGUuZXh0LnVuc3VwcG9ydGVkPXt9O0RhdGUucHJvdG90eXBlLnN0cmZ0
aW1lPWZ1bmN0aW9uKGEpe2lmKCEodGhpcy5sb2NhbGUgaW4gRGF0ZS5leHQubG9jYWxlcykpe2lm
KHRoaXMubG9jYWxlLnJlcGxhY2UoLy1bYS16QS1aXSskLywiIikgaW4gRGF0ZS5leHQubG9jYWxl
cyl7dGhpcy5sb2NhbGU9dGhpcy5sb2NhbGUucmVwbGFjZSgvLVthLXpBLVpdKyQvLCIiKX1lbHNl
e3RoaXMubG9jYWxlPSJlbi1HQiJ9fXZhciBjPXRoaXM7d2hpbGUoYS5tYXRjaCgvJVtjRGhuclJ0
VHhYelpdLykpe2E9YS5yZXBsYWNlKC8lKFtjRGhuclJ0VHhYelpdKS9nLGZ1bmN0aW9uKGUsZCl7
dmFyIGc9RGF0ZS5leHQuYWdncmVnYXRlc1tkXTtyZXR1cm4oZz09ImxvY2FsZSI/RGF0ZS5leHQu
bG9jYWxlc1tjLmxvY2FsZV1bZF06Zyl9KX12YXIgYj1hLnJlcGxhY2UoLyUoW2FBYkJDZGVnR0hJ
am1NcFBTdVVWd1d5WSVdKS9nLGZ1bmN0aW9uKGUsZCl7dmFyIGc9RGF0ZS5leHQuZm9ybWF0c1tk
XTtpZih0eXBlb2YoZyk9PSJzdHJpbmciKXtyZXR1cm4gY1tnXSgpfWVsc2V7aWYodHlwZW9mKGcp
PT0iZnVuY3Rpb24iKXtyZXR1cm4gZy5jYWxsKGMsYyl9ZWxzZXtpZih0eXBlb2YoZyk9PSJvYmpl
Y3QiJiZ0eXBlb2YoZ1swXSk9PSJzdHJpbmciKXtyZXR1cm4gRGF0ZS5leHQudXRpbC54UGFkKGNb
Z1swXV0oKSxnWzFdKX1lbHNle3JldHVybiBkfX19fSk7Yz1udWxsO3JldHVybiBifTsKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9UZXN0UmVz
dWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2R5Z3JhcGgtY29tYmluZWQuanMKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLUxGClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRh
c2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZC5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVz
dFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmNzcwko
cmV2aXNpb24gMjY0NTI3KQorKysgVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJv
YXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmNzcwkobm9uZXhpc3RlbnQpCkBAIC0xLDc0ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci1ib2R5IHsKLSAgICBmb250LWZhbWlseTogYXJpYWw7Ci0gICAgZm9udC1zaXplOiAxM3B4Owot
fQotaDIgewotICAgIGZvbnQtc2l6ZTogMTZweDsKLSAgICBtYXJnaW4tYm90dG9tOiAuMjVlbTsK
LX0KLWgzIHsKLSAgICBmb250LXNpemU6IDEzcHg7Ci0gICAgbWFyZ2luOiAwOwotfQotaW5wdXQg
ewotICAgIG1hcmdpbi1yaWdodDogMTVweDsKLX0KLWxhYmVsIHsKLSAgICBwYWRkaW5nLWxlZnQ6
IDJlbTsKLSAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwotfQotdGQub3B0aW9ucy1jb250YWluZXIg
ewotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLX0KLS5mb3JtcyB7Ci0gICAgZGlzcGxheTogLXdl
YmtpdC1ib3g7Ci0gICAgLXdlYmtpdC1ib3gtYWxpZ246IGJhc2VsaW5lOwotfQotLmZvcm1zID4g
KiB7Ci0gICAgZGlzcGxheTogYmxvY2s7Ci19Ci0uZm9ybXMgc3BhbiB7Ci0gICAgcGFkZGluZzog
MHB4IDNweDsKLX0KLSN0ZXN0cy1mb3JtIHsKLSAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKLSAg
ICAtd2Via2l0LWJveC1hbGlnbjogYmFzZWxpbmU7Ci0gICAgLXdlYmtpdC1ib3gtZmxleDogMTsK
LX0KLSN0ZXN0cy1mb3JtID4gKiB7Ci0gICAgZGlzcGxheTogYmxvY2s7Ci19Ci0jdGVzdHMtaW5w
dXQgewotICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OwotICAgIC13ZWJraXQtYm94LWZsZXg6IDE7
Ci19CkluZGV4OiBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtp
bmVzc19kYXNoYm9hcmQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0UmVzdWx0U2VydmVy
L3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmQuaHRtbAkocmV2aXNpb24gMjY0
NTI3KQorKysgVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5l
c3NfZGFzaGJvYXJkLmh0bWwJKG5vbmV4aXN0ZW50KQpAQCAtMSwzOSArMCwwIEBACi08IS0tIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLW1ldDoKLQotICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLW5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLWNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLWluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLWRpc3RyaWJ1dGlvbi4KLSAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLWNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi10aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0iQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi1BIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci1TUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi1MSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLURBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi1PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotLS0+Ci08IURPQ1RZUEUgSFRNTD4KLTx0aXRsZT5XZWJLaXQg
VGVzdCBIaXN0b3J5PC90aXRsZT4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iZmxha2lu
ZXNzX2Rhc2hib2FyZC5jc3MiPjwvbGluaz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
Zmxha2luZXNzX2Rhc2hib2FyZF90ZXN0cy5jc3MiPjwvbGluaz4KLTxzY3JpcHQgc3JjPSJidWls
ZGVycy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ibG9hZGVyLmpzIj48L3NjcmlwdD4KLTxz
Y3JpcHQgc3JjPSJzdHJpbmcuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Imhpc3RvcnkuanMi
Pjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImRhc2hib2FyZF9iYXNlLmpzIj48L3NjcmlwdD4KLTxz
Y3JpcHQgc3JjPSJ1aS5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iZmxha2luZXNzX2Rhc2hi
b2FyZC5qcyI+PC9zY3JpcHQ+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9UZXN0UmVzdWx0
U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmQuaHRtbApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotTEYKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMt
ZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rl
c3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZC5qcwko
cmV2aXNpb24gMjY0NTI3KQorKysgVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJv
YXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkLmpzCShub25leGlzdGVudCkKQEAgLTEsMjMzMyArMCww
IEBACi0vLyBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
Ly8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotLy8gIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotLy8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LS8vIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0vLyBDT05TVEFOVFMKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotdmFy
IEFMTCA9ICdBTEwnOwotdmFyIEZPUldBUkQgPSAnZm9yd2FyZCc7Ci12YXIgQkFDS1dBUkQgPSAn
YmFja3dhcmQnOwotdmFyIEdURVNUX01PRElGSUVSUyA9IFsnRkxBS1knLCAnRkFJTFMnLCAnTUFZ
QkUnLCAnRElTQUJMRUQnXTsKLXZhciBURVNUX1VSTF9CQVNFX1BBVEhfVFJBQyA9ICdodHRwczov
L3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL0xheW91dFRlc3RzLyc7Ci12YXIgVEVTVF9V
UkxfQkFTRV9QQVRIID0gImh0dHBzOi8vc3ZuLndlYmtpdC5vcmcvcmVwb3NpdG9yeS93ZWJraXQv
dHJ1bmsvTGF5b3V0VGVzdHMvIjsKLXZhciBFWFBFQ1RBVElPTlNfVVJMX0JBU0VfUEFUSCA9IFRF
U1RfVVJMX0JBU0VfUEFUSCArICJwbGF0Zm9ybS8iOwotCi12YXIgUExBVEZPUk1TID0gewotICAg
ICdBUFBMRSc6IHsKLSAgICAgICAgc3ViUGxhdGZvcm1zOiB7Ci0gICAgICAgICAgICAnTUFDJzog
ewotICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9uc0RpcmVjdG9yeTogJ21hYycsCi0gICAgICAg
ICAgICAgICAgc3ViUGxhdGZvcm1zOiB7Ci0gICAgICAgICAgICAgICAgICAgICdTSUVSUkEnOiB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWJQbGF0Zm9ybXM6IHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnV0sxJzogeyBmYWxsYmFja1BsYXRmb3JtczogWydBUFBMRV9NQUNfU0lF
UlJBJywgJ0FQUExFX01BQyddIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dLMic6
IHsgZmFsbGJhY2tQbGF0Zm9ybXM6IFsnQVBQTEVfTUFDX1NJRVJSQScsICdBUFBMRV9NQUMnLCAn
V0syJ10sIGV4cGVjdGF0aW9uc0RpcmVjdG9yeTogJ21hYy13azInfQotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAn
SElHSFNJRVJSQSc6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1YlBsYXRmb3Jtczogewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXSzEnOiB7IGZhbGxiYWNrUGxhdGZvcm1zOiBb
J0FQUExFX01BQ19ISUdIU0lFUlJBJywgJ0FQUExFX01BQyddIH0sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ1dLMic6IHsgZmFsbGJhY2tQbGF0Zm9ybXM6IFsnQVBQTEVfTUFDX0hJR0hT
SUVSUkEnLCAnQVBQTEVfTUFDJywgJ1dLMiddLCBleHBlY3RhdGlvbnNEaXJlY3Rvcnk6ICdtYWMt
d2syJ30KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSwK
LSAgICAgICAgICAgICAgICAgICAgJ01PSkFWRSc6IHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN1YlBsYXRmb3JtczogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXSzEnOiB7IGZh
bGxiYWNrUGxhdGZvcm1zOiBbJ0FQUExFX01BQ19NT0pBVkUnLCAnQVBQTEVfTUFDJ10gfSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnV0syJzogeyBmYWxsYmFja1BsYXRmb3JtczogWydB
UFBMRV9NQUNfTU9KQVZFJywgJ0FQUExFX01BQycsICdXSzInXSwgZXhwZWN0YXRpb25zRGlyZWN0
b3J5OiAnbWFjLXdrMid9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICdDQVRBTElOQSc6IHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN1YlBsYXRmb3JtczogewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdXSzEnOiB7IGZhbGxiYWNrUGxhdGZvcm1zOiBbJ0FQUExFX01BQ19DQVRBTElOQScsICdBUFBM
RV9NQUMnXSB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXSzInOiB7IGZhbGxiYWNr
UGxhdGZvcm1zOiBbJ0FQUExFX01BQ19DQVRBTElOQScsICdBUFBMRV9NQUMnLCAnV0syJ10sIGV4
cGVjdGF0aW9uc0RpcmVjdG9yeTogJ21hYy13azInfQotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0sCi0gICAgICAgICAgICAnV0lOJzogewotICAgICAgICAgICAgICAgIGV4cGVjdGF0aW9uc0Rp
cmVjdG9yeTogJ3dpbicsCi0gICAgICAgICAgICAgICAgc3ViUGxhdGZvcm1zOiB7Ci0gICAgICAg
ICAgICAgICAgICAgICdYUCc6IHsgZmFsbGJhY2tQbGF0Zm9ybXM6IFsnQVBQTEVfV0lOJ10gfSwK
LSAgICAgICAgICAgICAgICAgICAgJ1dJTjcnOiB7IGZhbGxiYWNrUGxhdGZvcm1zOiBbJ0FQUExF
X1dJTiddIH0sCi0gICAgICAgICAgICAgICAgICAgICdXSU4xMCc6IHsgZmFsbGJhY2tQbGF0Zm9y
bXM6IFsnQVBQTEVfV0lOJ10gfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0sCi0gICAgJ0dUSyc6IHsKLSAgICAgICAgZXhwZWN0YXRpb25zRGlyZWN0
b3J5OiAnZ3RrJywKLSAgICAgICAgc3ViUGxhdGZvcm1zOiB7Ci0gICAgICAgICAgICAnTElOVVgn
OiB7IGZhbGxiYWNrUGxhdGZvcm1zOiBbJ0dUSycsICdXSzInXSB9Ci0gICAgICAgIH0KLSAgICB9
LAotICAgICdXSzInOiB7Ci0gICAgICAgIGJhc2VQbGF0Zm9ybTogdHJ1ZSwKLSAgICAgICAgZXhw
ZWN0YXRpb25zRGlyZWN0b3J5OiAnd2syJwotICAgIH0sCi0gICAgJ1dQRSc6IHsKLSAgICAgICAg
ZXhwZWN0YXRpb25zRGlyZWN0b3J5OiAnd3BlJywKLSAgICAgICAgc3ViUGxhdGZvcm1zOiB7Ci0g
ICAgICAgICAgICAnTElOVVgnOiB7IGZhbGxiYWNrUGxhdGZvcm1zOiBbJ1dQRScsICdXSzInXSB9
Ci0gICAgICAgIH0KLSAgICB9LAotICAgICdXSU5DQUlSTyc6IHsKLSAgICAgICAgZXhwZWN0YXRp
b25zRGlyZWN0b3J5OiAnd2luY2Fpcm8nLAotICAgIH0KLX07Ci0KLXZhciBCVUlMRF9UWVBFUyA9
IHsnREVCVUcnOiAnREJHJywgJ1JFTEVBU0UnOiAnUkVMRUFTRSd9OwotdmFyIE1JTl9TRUNPTkRT
X0ZPUl9TTE9XX1RFU1QgPSA0OwotdmFyIE1JTl9TRUNPTkRTX0ZPUl9TTE9XX1RFU1RfREVCVUcg
PSAyICogTUlOX1NFQ09ORFNfRk9SX1NMT1dfVEVTVDsKLXZhciBGQUlMX1JFU1VMVFMgPSBbJ0lN
QUdFJywgJ0lNQUdFK1RFWFQnLCAnVEVYVCcsICdNSVNTSU5HJ107Ci12YXIgQ0hVTktfU0laRSA9
IDI1OwotdmFyIE1BWF9SRVNVTFRTID0gMTUwMDsKLQotdmFyIHJlc291cmNlTG9hZGVyOwotCi1m
dW5jdGlvbiBnZW5lcmF0ZVBhZ2UoaGlzdG9yeUluc3RhbmNlKQotewotICAgIGlmIChoaXN0b3J5
SW5zdGFuY2UuY3Jvc3NEYXNoYm9hcmRTdGF0ZS51c2VUZXN0RGF0YSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAnPGRpdiBpZD0ibG9hZGluZy11aSI+
TE9BRElORy4uLjwvZGl2Pic7Ci0gICAgcmVzb3VyY2VMb2FkZXIuc2hvd0Vycm9ycygpOwotCi0g
ICAgLy8gdGVzdHMgZXhwYW5kcyB0byBhbGwgdGVzdHMgdGhhdCBtYXRjaCB0aGUgQ1NWIGxpc3Qu
Ci0gICAgLy8gcmVzdWx0IGV4cGFuZHMgdG8gYWxsIHRlc3RzIHRoYXQgZXZlciBoYXZlIHRoZSBn
aXZlbiByZXN1bHQKLSAgICBpZiAoaGlzdG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3Rh
dGUudGVzdHMgfHwgaGlzdG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUucmVzdWx0
KQotICAgICAgICBnZW5lcmF0ZVBhZ2VGb3JJbmRpdmlkdWFsVGVzdHMoaW5kaXZpZHVhbFRlc3Rz
KCkpOwotICAgIGVsc2UgaWYgKGhpc3RvcnlJbnN0YW5jZS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRl
LmV4cGVjdGF0aW9uc1VwZGF0ZSkKLSAgICAgICAgZ2VuZXJhdGVQYWdlRm9yRXhwZWN0YXRpb25z
VXBkYXRlKCk7Ci0gICAgZWxzZQotICAgICAgICBnZW5lcmF0ZVBhZ2VGb3JCdWlsZGVyKGhpc3Rv
cnlJbnN0YW5jZS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLmJ1aWxkZXIgfHwgY3VycmVudEJ1aWxk
ZXJHcm91cCgpLmRlZmF1bHRCdWlsZGVyKCkpOwotCi0gICAgZm9yICh2YXIgYnVpbGRlciBpbiBj
dXJyZW50QnVpbGRlcnMoKSkKLSAgICAgICAgcHJvY2Vzc1Rlc3RSZXN1bHRzRm9yQnVpbGRlckFz
eW5jKGJ1aWxkZXIpOwotCi0gICAgcG9zdEhlaWdodENoYW5nZWRNZXNzYWdlKCk7Ci19Ci0KLWZ1
bmN0aW9uIGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcihoaXN0b3J5SW5zdGFuY2UsIGtleSwgdmFs
dWUpCi17Ci0gICAgc3dpdGNoKGtleSkgewotICAgIGNhc2UgJ3Rlc3RzJzoKLSAgICAgICAgaGlz
dG9yeS52YWxpZGF0ZVBhcmFtZXRlcihoaXN0b3J5SW5zdGFuY2UuZGFzaGJvYXJkU3BlY2lmaWNT
dGF0ZSwga2V5LCB2YWx1ZSwKLSAgICAgICAgICAgIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg
ICAgIHJldHVybiBzdHJpbmcuaXNWYWxpZE5hbWUodmFsdWUpOwotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY2FzZSAncmVzdWx0JzoKLSAgICAgICAgdmFsdWUg
PSB2YWx1ZS50b1VwcGVyQ2FzZSgpOwotICAgICAgICBoaXN0b3J5LnZhbGlkYXRlUGFyYW1ldGVy
KGhpc3RvcnlJbnN0YW5jZS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLCBrZXksIHZhbHVlLAotICAg
ICAgICAgICAgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgZm9yICh2YXIgcmVzdWx0IGlu
IExBWU9VVF9URVNUX0VYUEVDVEFUSU9OU19NQVBfKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICh2YWx1ZSA9PSBMQVlPVVRfVEVTVF9FWFBFQ1RBVElPTlNfTUFQX1tyZXN1bHRdKQotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIGNhc2UgJ2J1aWxkZXInOgotICAgICAgICBoaXN0b3J5LnZhbGlkYXRlUGFy
YW1ldGVyKGhpc3RvcnlJbnN0YW5jZS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLCBrZXksIHZhbHVl
LAotICAgICAgICAgICAgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVl
IGluIGN1cnJlbnRCdWlsZGVycygpOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBjYXNlICdzb3J0Q29sdW1uJzoKLSAgICAgICAgaGlzdG9yeS52YWxpZGF0
ZVBhcmFtZXRlcihoaXN0b3J5SW5zdGFuY2UuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZSwga2V5LCB2
YWx1ZSwKLSAgICAgICAgICAgIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIC8vIEdldCBh
bGwgcG9zc2libGUgaGVhZGVycyBzaW5jZSB0aGUgYWN0dWFsIHVzZWQgc2V0IG9mIGhlYWRlcnMK
LSAgICAgICAgICAgICAgICAvLyBkZXBlbmRzIG9uIHRoZSB2YWx1ZXMgaW4gaGlzdG9yeUluc3Rh
bmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUsIHdoaWNoIGFyZSBjdXJyZW50bHkgYmVpbmcgc2V0
LgotICAgICAgICAgICAgICAgIHZhciBoZWFkZXJzID0gdGFibGVIZWFkZXJzKHRydWUpOwotICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkrKykgewot
ICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gc29ydENvbHVtbkZyb21UYWJsZUhlYWRl
cihoZWFkZXJzW2ldKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT0gJ3Rlc3QnIHx8
IHZhbHVlID09ICdidWlsZGVyJzsKLSAgICAgICAgICAgIH0pOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLQotICAgIGNhc2UgJ3NvcnRPcmRlcic6Ci0gICAgICAgIGhpc3RvcnkudmFsaWRhdGVQYXJh
bWV0ZXIoaGlzdG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUsIGtleSwgdmFsdWUs
Ci0gICAgICAgICAgICBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUg
PT0gRk9SV0FSRCB8fCB2YWx1ZSA9PSBCQUNLV0FSRDsKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgJ3Jlc3VsdHNIZWlnaHQnOgotICAgIGNhc2UgJ3Vw
ZGF0ZUluZGV4JzoKLSAgICBjYXNlICdyZXZpc2lvbic6Ci0gICAgICAgIGhpc3RvcnkudmFsaWRh
dGVQYXJhbWV0ZXIoaGlzdG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUsIGtleSwg
TnVtYmVyKHZhbHVlKSwKLSAgICAgICAgICAgIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZS5tYXRjaCgvXlxkKyQvKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgJ3Nob3dDaHJvbWUnOgotICAgIGNhc2UgJ3Nob3dDb3Jy
ZWN0RXhwZWN0YXRpb25zJzoKLSAgICBjYXNlICdzaG93V3JvbmdFeHBlY3RhdGlvbnMnOgotICAg
IGNhc2UgJ3Nob3dFeHBlY3RhdGlvbnMnOgotICAgIGNhc2UgJ3Nob3dGbGFreSc6Ci0gICAgY2Fz
ZSAnc2hvd0xhcmdlRXhwZWN0YXRpb25zJzoKLSAgICBjYXNlICdsZWdhY3lFeHBlY3RhdGlvbnNT
ZW1hbnRpY3MnOgotICAgIGNhc2UgJ3Nob3dTa2lwcGVkJzoKLSAgICBjYXNlICdzaG93U2xvdyc6
Ci0gICAgY2FzZSAnc2hvd1VuZXhwZWN0ZWRQYXNzZXMnOgotICAgIGNhc2UgJ3Nob3dXb250Rml4
U2tpcCc6Ci0gICAgY2FzZSAnZXhwZWN0YXRpb25zVXBkYXRlJzoKLSAgICAgICAgaGlzdG9yeUlu
c3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGVba2V5XSA9IHZhbHVlID09ICd0cnVlJzsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotfQotCi0vLyBAcGFyYW0ge09iamVjdH0gcGFyYW1zIE5ldyBvciBtb2RpZmllZCBx
dWVyeSBwYXJhbWV0ZXJzIGFzIGtleTogdmFsdWUuCi1mdW5jdGlvbiBoYW5kbGVRdWVyeVBhcmFt
ZXRlckNoYW5nZShoaXN0b3J5SW5zdGFuY2UsIHBhcmFtcykKLXsKLSAgICBmb3IgKGtleSBpbiBw
YXJhbXMpIHsKLSAgICAgICAgaWYgKGtleSA9PSAndGVzdHMnKSB7Ci0gICAgICAgICAgICAvLyBF
bnRlcmluZyBjcm9zcy1idWlsZGVyIHZpZXcsIG9ubHkga2VlcCB2YWxpZCBrZXlzIGZvciB0aGF0
IHZpZXcuCi0gICAgICAgICAgICBmb3IgKHZhciBjdXJyZW50S2V5IGluIGhpc3RvcnlJbnN0YW5j
ZS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlKSB7Ci0gICAgICAgICAgICAgIGlmIChpc0ludmFsaWRL
ZXlGb3JDcm9zc0J1aWxkZXJWaWV3KGN1cnJlbnRLZXkpKSB7Ci0gICAgICAgICAgICAgICAgZGVs
ZXRlIGhpc3RvcnlJbnN0YW5jZS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlW2N1cnJlbnRLZXldOwot
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNJbnZh
bGlkS2V5Rm9yQ3Jvc3NCdWlsZGVyVmlldyhrZXkpKSB7Ci0gICAgICAgICAgICBkZWxldGUgaGlz
dG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUudGVzdHM7Ci0gICAgICAgICAgICBk
ZWxldGUgaGlzdG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUucmVzdWx0OwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZhciBkZWZhdWx0RGFzaGJv
YXJkU3BlY2lmaWNTdGF0ZVZhbHVlcyA9IHsKLSAgICBzb3J0T3JkZXI6IEJBQ0tXQVJELAotICAg
IHNvcnRDb2x1bW46ICdmbGFraW5lc3MnLAotICAgIHNob3dFeHBlY3RhdGlvbnM6IGZhbHNlLAot
ICAgIHNob3dGbGFreTogdHJ1ZSwKLSAgICBzaG93TGFyZ2VFeHBlY3RhdGlvbnM6IGZhbHNlLAot
ICAgIGxlZ2FjeUV4cGVjdGF0aW9uc1NlbWFudGljczogdHJ1ZSwKLSAgICBzaG93Q2hyb21lOiB0
cnVlLAotICAgIHNob3dDb3JyZWN0RXhwZWN0YXRpb25zOiBmYWxzZSwKLSAgICBzaG93V3JvbmdF
eHBlY3RhdGlvbnM6IGZhbHNlLAotICAgIHNob3dXb250Rml4U2tpcDogZmFsc2UsCi0gICAgc2hv
d1Nsb3c6IGZhbHNlLAotICAgIHNob3dTa2lwcGVkOiBmYWxzZSwKLSAgICBzaG93VW5leHBlY3Rl
ZFBhc3NlczogZmFsc2UsCi0gICAgZXhwZWN0YXRpb25zVXBkYXRlOiBmYWxzZSwKLSAgICB1cGRh
dGVJbmRleDogMCwKLSAgICByZXN1bHRzSGVpZ2h0OiAzMDAsCi0gICAgcmV2aXNpb246IG51bGws
Ci0gICAgdGVzdHM6ICcnLAotICAgIHJlc3VsdDogJycsCi0gICAgYnVpbGRlcjogbnVsbAotfTsK
LQotdmFyIERCX1NQRUNJRklDX0lOVkFMSURBVElOR19QQVJBTUVURVJTID0gewotICAgICd0ZXN0
cycgOiAnYnVpbGRlcicsCi0gICAgJ3Rlc3RUeXBlJzogJ2J1aWxkZXInLAotICAgICdncm91cCc6
ICdidWlsZGVyJwotfTsKLQotCi12YXIgZmxha2luZXNzQ29uZmlnID0gewotICAgIGRlZmF1bHRT
dGF0ZVZhbHVlczogZGVmYXVsdERhc2hib2FyZFNwZWNpZmljU3RhdGVWYWx1ZXMsCi0gICAgZ2Vu
ZXJhdGVQYWdlOiBnZW5lcmF0ZVBhZ2UsCi0gICAgaGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyOiBo
YW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIsCi0gICAgaGFuZGxlUXVlcnlQYXJhbWV0ZXJDaGFuZ2U6
IGhhbmRsZVF1ZXJ5UGFyYW1ldGVyQ2hhbmdlLAotICAgIGludmFsaWRhdGluZ0hhc2hQYXJhbWV0
ZXJzOiBEQl9TUEVDSUZJQ19JTlZBTElEQVRJTkdfUEFSQU1FVEVSUwotfTsKLQotLy8gRklYTUUo
anBhcmVudCk6IEV2ZW50dWFsbHkgcmVtb3ZlIGFsbCB1c2FnZSBvZiBnbG9iYWwgaGlzdG9yeSBv
YmplY3QuCi12YXIgZ19oaXN0b3J5ID0gbmV3IGhpc3RvcnkuSGlzdG9yeShmbGFraW5lc3NDb25m
aWcpOwotZ19oaXN0b3J5LnBhcnNlQ3Jvc3NEYXNoYm9hcmRQYXJhbWV0ZXJzKCk7Ci0KLS8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwotLy8gR0xPQkFMUwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLXZh
ciBnX3BlckJ1aWxkZXJQbGF0Zm9ybUFuZEJ1aWxkVHlwZSA9IHt9OwotdmFyIGdfcGVyQnVpbGRl
ckZhaWx1cmVzID0ge307Ci0vLyBNYXAgb2YgYnVpbGRlciB0byBhcnJheXMgb2YgdGVzdHMgdGhh
dCBhcmUgbGlzdGVkIGluIHRoZSBleHBlY3RhdGlvbnMgZmlsZQotLy8gYnV0IGhhdmUgZm9yIHRo
YXQgYnVpbGRlci4KLXZhciBnX3BlckJ1aWxkZXJXaXRoRXhwZWN0YXRpb25zQnV0Tm9GYWlsdXJl
cyA9IHt9OwotLy8gTWFwIG9mIGJ1aWxkZXIgdG8gYXJyYXlzIG9mIHBhdGhzIHRoYXQgYXJlIHNr
aXBwZWQuIFRoaXMgc2hvd3MgdGhlIHJhdwotLy8gcGF0aCB1c2VkIGluIFRlc3RFeHBlY3RhdGlv
bnMgcmF0aGVyIHRoYW4gdGhlIHRlc3QgcGF0aCBzaW5jZSB3ZQotLy8gZG9uJ3QgYWN0dWFsbHkg
aGF2ZSBhbnkgZGF0YSBoZXJlIGZvciBza2lwcGVkIHRlc3RzLgotdmFyIGdfcGVyQnVpbGRlclNr
aXBwZWRQYXRocyA9IHt9OwotLy8gTWFwcyB0ZXN0IHBhdGggdG8gYW4gYXJyYXkgb2Yge2J1aWxk
ZXIsIHRlc3RSZXN1bHRzfSBvYmplY3RzLgotdmFyIGdfdGVzdFRvUmVzdWx0c01hcCA9IHt9Owot
Ly8gVGVzdHMgdGhhdCB0aGUgdXNlciB3YW50cyB0byB1cGRhdGUgZXhwZWN0YXRpb25zIGZvci4K
LXZhciBnX2NvbmZpcm1lZFRlc3RzID0ge307Ci0KLWZ1bmN0aW9uIHRyYXZlcnNlUGxhdGZvcm1z
VHJlZShjYWxsYmFjaykKLXsKLSAgICBmdW5jdGlvbiB0cmF2ZXJzZShwbGF0Zm9ybU9iamVjdCwg
cGFyZW50UGxhdGZvcm0pIHsKLSAgICAgICAgT2JqZWN0LmtleXMocGxhdGZvcm1PYmplY3QpLmZv
ckVhY2goZnVuY3Rpb24ocGxhdGZvcm1OYW1lKSB7Ci0gICAgICAgICAgICB2YXIgcGxhdGZvcm0g
PSBwbGF0Zm9ybU9iamVjdFtwbGF0Zm9ybU5hbWVdOwotICAgICAgICAgICAgcGxhdGZvcm1OYW1l
ID0gcGFyZW50UGxhdGZvcm0gPyBwYXJlbnRQbGF0Zm9ybSArIHBsYXRmb3JtTmFtZSA6IHBsYXRm
b3JtTmFtZTsKLQotICAgICAgICAgICAgaWYgKHBsYXRmb3JtLnN1YlBsYXRmb3JtcykKLSAgICAg
ICAgICAgICAgICB0cmF2ZXJzZShwbGF0Zm9ybS5zdWJQbGF0Zm9ybXMsIHBsYXRmb3JtTmFtZSAr
ICdfJyk7Ci0gICAgICAgICAgICBlbHNlIGlmICghcGxhdGZvcm0uYmFzZVBsYXRmb3JtKQotICAg
ICAgICAgICAgICAgIGNhbGxiYWNrKHBsYXRmb3JtLCBwbGF0Zm9ybU5hbWUpOwotICAgICAgICB9
KTsKLSAgICB9Ci0gICAgdHJhdmVyc2UoUExBVEZPUk1TLCBudWxsKTsKLX0KLQotZnVuY3Rpb24g
Y3JlYXRlUmVzdWx0c09iamVjdEZvclRlc3QodGVzdCwgYnVpbGRlcikKLXsKLSAgICByZXR1cm4g
ewotICAgICAgICB0ZXN0OiB0ZXN0LAotICAgICAgICBidWlsZGVyOiBidWlsZGVyLAotICAgICAg
ICAvLyBIVE1MIGZvciBkaXNwbGF5IG9mIHRoZSByZXN1bHRzIGluIHRoZSBmbGFraW5lc3MgY29s
dW1uCi0gICAgICAgIGh0bWw6ICcnLAotICAgICAgICBmbGlwczogMCwKLSAgICAgICAgc2xvd2Vz
dFRpbWU6IDAsCi0gICAgICAgIHNsb3dlc3ROb25UaW1lb3V0Q3Jhc2hUaW1lOiAwLAotICAgICAg
ICBtZWV0c0V4cGVjdGF0aW9uczogdHJ1ZSwKLSAgICAgICAgaXNXb250Rml4U2tpcDogZmFsc2Us
Ci0gICAgICAgIGlzRmxha3k6IGZhbHNlLAotICAgICAgICAvLyBTb3J0ZWQgc3RyaW5nIG9mIG1p
c3NpbmcgZXhwZWN0YXRpb25zCi0gICAgICAgIG1pc3Npbmc6ICcnLAotICAgICAgICAvLyBTdHJp
bmcgb2YgZXh0cmEgZXhwZWN0YXRpb25zIChpLmUuIGV4cGVjdGF0aW9ucyB0aGF0IG5ldmVyIG9j
Y3VyKS4KLSAgICAgICAgZXh0cmE6ICcnLAotICAgICAgICBtb2RpZmllcnM6ICcnLAotICAgICAg
ICBidWdzOiAnJywKLSAgICAgICAgZXhwZWN0YXRpb25zIDogJycsCi0gICAgICAgIHJhd1Jlc3Vs
dHM6ICcnLAotICAgICAgICAvLyBMaXN0IG9mIGFsbCB0aGUgcmVzdWx0cyB0aGUgdGVzdCBhY3R1
YWxseSBoYXMuCi0gICAgICAgIGFjdHVhbFJlc3VsdHM6IFtdCi0gICAgfTsKLX0KLQotZnVuY3Rp
b24gbWF0Y2hpbmdFbGVtZW50KHN0cmluZ1RvTWF0Y2gsIGVsZW1lbnRzTWFwKQotewotICAgIGZv
ciAodmFyIGVsZW1lbnQgaW4gZWxlbWVudHNNYXApIHsKLSAgICAgICAgaWYgKHN0cmluZy5jb250
YWlucyhzdHJpbmdUb01hdGNoLCBlbGVtZW50c01hcFtlbGVtZW50XSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZWxlbWVudDsKLSAgICB9Ci19Ci0KLWZ1bmN0aW9uIGRldGVybWluZVdLUGxhdGZvcm0o
YnVpbGRlck5hbWUsIGJhc2VQbGF0Zm9ybSkKLXsKLSAgICB2YXIgaXNXSzJCdWlsZGVyID0gc3Ry
aW5nLmNvbnRhaW5zKGJ1aWxkZXJOYW1lLCAnV0syJykgfHwgc3RyaW5nLmNvbnRhaW5zKGJ1aWxk
ZXJOYW1lLCAnV0VCS0lUMicpOwotICAgIHJldHVybiBiYXNlUGxhdGZvcm0gKyAoaXNXSzJCdWls
ZGVyID8gJ19XSzInIDogJ19XSzEnKTsKLX0KLQotZnVuY3Rpb24gZGV0ZXJtaW5lQnVpbGRlclBs
YXRmb3JtKGJ1aWxkZXJOYW1lVXBwZXJDYXNlKQotewotICAgIGlmIChzdHJpbmcuY29udGFpbnMo
YnVpbGRlck5hbWVVcHBlckNhc2UsICdXSU4gMTAnKSkKLSAgICAgICAgcmV0dXJuICdBUFBMRV9X
SU5fV0lOMTAnOwotICAgIGlmIChzdHJpbmcuY29udGFpbnMoYnVpbGRlck5hbWVVcHBlckNhc2Us
ICdXSU4gNycpKQotICAgICAgICByZXR1cm4gJ0FQUExFX1dJTl9XSU43JzsKLSAgICBpZiAoc3Ry
aW5nLmNvbnRhaW5zKGJ1aWxkZXJOYW1lVXBwZXJDYXNlLCAnV0lOIFhQJykpCi0gICAgICAgIHJl
dHVybiAnQVBQTEVfV0lOX1hQJzsKLQotICAgIGlmIChzdHJpbmcuY29udGFpbnMoYnVpbGRlck5h
bWVVcHBlckNhc2UsICdHVEsgTElOVVgnKSkKLSAgICAgICAgcmV0dXJuICdHVEtfTElOVVgnOwot
ICAgIGlmIChzdHJpbmcuY29udGFpbnMoYnVpbGRlck5hbWVVcHBlckNhc2UsICdXUEUgTElOVVgn
KSkKLSAgICAgICAgcmV0dXJuICdXUEVfTElOVVgnOwotCi0gICAgaWYgKHN0cmluZy5jb250YWlu
cyhidWlsZGVyTmFtZVVwcGVyQ2FzZSwgJ1dJTkNBSVJPJykpCi0gICAgICAgIHJldHVybiAnV0lO
Q0FJUk8nOwotCi0gICAgaWYgKHN0cmluZy5jb250YWlucyhidWlsZGVyTmFtZVVwcGVyQ2FzZSwg
J0NBVEFMSU5BJykpCi0gICAgICAgIHJldHVybiBkZXRlcm1pbmVXS1BsYXRmb3JtKGJ1aWxkZXJO
YW1lVXBwZXJDYXNlLCAnQVBQTEVfTUFDX0NBVEFMSU5BJyk7Ci0gICAgaWYgKHN0cmluZy5jb250
YWlucyhidWlsZGVyTmFtZVVwcGVyQ2FzZSwgJ01PSkFWRScpKQotICAgICAgICByZXR1cm4gZGV0
ZXJtaW5lV0tQbGF0Zm9ybShidWlsZGVyTmFtZVVwcGVyQ2FzZSwgJ0FQUExFX01BQ19NT0pBVkUn
KTsKLSAgICBpZiAoc3RyaW5nLmNvbnRhaW5zKGJ1aWxkZXJOYW1lVXBwZXJDYXNlLCAnSElHSFNJ
RVJSQScpKQotICAgICAgICByZXR1cm4gZGV0ZXJtaW5lV0tQbGF0Zm9ybShidWlsZGVyTmFtZVVw
cGVyQ2FzZSwgJ0FQUExFX01BQ19ISUdIU0lFUlJBJyk7Ci0gICAgaWYgKHN0cmluZy5jb250YWlu
cyhidWlsZGVyTmFtZVVwcGVyQ2FzZSwgJ1NJRVJSQScpKQotICAgICAgICByZXR1cm4gZGV0ZXJt
aW5lV0tQbGF0Zm9ybShidWlsZGVyTmFtZVVwcGVyQ2FzZSwgJ0FQUExFX01BQ19TSUVSUkEnKTsK
LSAgICBpZiAoc3RyaW5nLmNvbnRhaW5zKGJ1aWxkZXJOYW1lVXBwZXJDYXNlLCAnRUwgQ0FQSVRB
TicpKQotICAgICAgICByZXR1cm4gZGV0ZXJtaW5lV0tQbGF0Zm9ybShidWlsZGVyTmFtZVVwcGVy
Q2FzZSwgJ0FQUExFX01BQ19FTENBUElUQU4nKTsKLSAgICBpZiAoc3RyaW5nLmNvbnRhaW5zKGJ1
aWxkZXJOYW1lVXBwZXJDYXNlLCAnTUFWRVJJQ0tTJykpCi0gICAgICAgIHJldHVybiBkZXRlcm1p
bmVXS1BsYXRmb3JtKGJ1aWxkZXJOYW1lVXBwZXJDYXNlLCAnQVBQTEVfTUFDX01BVkVSSUNLUycp
OwotICAgIGlmIChzdHJpbmcuY29udGFpbnMoYnVpbGRlck5hbWVVcHBlckNhc2UsICdMSU9OJykp
Ci0gICAgICAgIHJldHVybiBkZXRlcm1pbmVXS1BsYXRmb3JtKGJ1aWxkZXJOYW1lVXBwZXJDYXNl
LCAnQVBQTEVfTUFDX0xJT04nKTsKLSAgICBpZiAoc3RyaW5nLmNvbnRhaW5zKGJ1aWxkZXJOYW1l
VXBwZXJDYXNlLCAnIElPUyAnKSAmJiBzdHJpbmcuY29udGFpbnMoYnVpbGRlck5hbWVVcHBlckNh
c2UsICdTSU1VTEFUT1InKSkKLSAgICAgICAgcmV0dXJuIGRldGVybWluZVdLUGxhdGZvcm0oYnVp
bGRlck5hbWVVcHBlckNhc2UsICdBUFBMRV9JT1NfU0lNVUxBVE9SJyk7Ci19Ci0KLWZ1bmN0aW9u
IHBsYXRmb3JtQW5kQnVpbGRUeXBlKGJ1aWxkZXJOYW1lKQotewotICAgIGlmICghZ19wZXJCdWls
ZGVyUGxhdGZvcm1BbmRCdWlsZFR5cGVbYnVpbGRlck5hbWVdKSB7Ci0gICAgICAgIHZhciBidWls
ZGVyTmFtZVVwcGVyQ2FzZSA9IGJ1aWxkZXJOYW1lLnRvVXBwZXJDYXNlKCk7Ci0gICAgICAgIHZh
ciBwbGF0Zm9ybSA9IGRldGVybWluZUJ1aWxkZXJQbGF0Zm9ybShidWlsZGVyTmFtZVVwcGVyQ2Fz
ZSk7Ci0gICAgICAgIGlmICghcGxhdGZvcm0pCi0gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdD
b3VsZCBub3QgcmVzb2x2ZSBwbGF0Zm9ybSBmb3IgYnVpbGRlcjogJyArIGJ1aWxkZXJOYW1lKTsK
LQotICAgICAgICB2YXIgYnVpbGRUeXBlID0gc3RyaW5nLmNvbnRhaW5zKGJ1aWxkZXJOYW1lVXBw
ZXJDYXNlLCAnREVCVUcnKSA/ICdERUJVRycgOiAnUkVMRUFTRSc7Ci0gICAgICAgIGdfcGVyQnVp
bGRlclBsYXRmb3JtQW5kQnVpbGRUeXBlW2J1aWxkZXJOYW1lXSA9IHtwbGF0Zm9ybTogcGxhdGZv
cm0sIGJ1aWxkVHlwZTogYnVpbGRUeXBlfTsKLSAgICB9Ci0gICAgcmV0dXJuIGdfcGVyQnVpbGRl
clBsYXRmb3JtQW5kQnVpbGRUeXBlW2J1aWxkZXJOYW1lXTsKLX0KLQotZnVuY3Rpb24gaXNEZWJ1
ZyhidWlsZGVyTmFtZSkKLXsKLSAgICByZXR1cm4gcGxhdGZvcm1BbmRCdWlsZFR5cGUoYnVpbGRl
ck5hbWUpLmJ1aWxkVHlwZSA9PSAnREVCVUcnOwotfQotCi0vLyBSZXR1cm5zIHRoZSBleHBlY3Rh
dGlvbiBzdHJpbmcgZm9yIHRoZSBnaXZlbiBzaW5nbGUgY2hhcmFjdGVyIHJlc3VsdC4KLS8vIFRo
aXMgc3RyaW5nIHNob3VsZCBtYXRjaCB0aGUgZXhwZWN0YXRpb25zIHRoYXQgYXJlIHB1dCBpbnRv
Ci0vLyB0ZXN0X2V4cGVjdGF0aW9ucy5weS4KLS8vCi0vLyBGb3IgZXhhbXBsZSwgaWYgd2Ugc3Rh
cnQgZXhwbGljaXRseSBsaXN0aW5nIElNQUdFIHJlc3VsdCBmYWlsdXJlcywKLS8vIHRoaXMgZnVu
Y3Rpb24gc2hvdWxkIHN0YXJ0IHJldHVybmluZyAnSU1BR0UnLgotZnVuY3Rpb24gZXhwZWN0YXRp
b25zRmlsZVN0cmluZ0ZvclJlc3VsdChyZXN1bHQpCi17Ci0gICAgLy8gRm9yIHRoZSBwdXJwb3Nl
cyBvZiBjb21wYXJpbmcgYWdhaW5zdCB0aGUgZXhwZWNhdGlvbnMgb2YgYSB0ZXN0LAotICAgIC8v
IGNvbnNpZGVyIHNpbXBsaWZpZWQgZGlmZiBmYWlsdXJlcyBhcyBqdXN0IHRleHQgZmFpbHVyZXMg
c2luY2UKLSAgICAvLyB0aGUgdGVzdF9leHBlY3RhdGlvbnMgZmlsZSBkb2Vzbid0IHRyZWF0IHRo
ZW0gc3BlY2lhbGx5LgotICAgIGlmIChyZXN1bHQgPT0gJ1MnKQotICAgICAgICByZXR1cm4gJ1RF
WFQnOwotCi0gICAgaWYgKHJlc3VsdCA9PSAnTicpCi0gICAgICAgIHJldHVybiAnJzsKLQotICAg
IHJldHVybiBleHBlY3RhdGlvbnNNYXAoKVtyZXN1bHRdOwotfQotCi12YXIgVGVzdFRyaWUgPSBm
dW5jdGlvbihidWlsZGVycywgcmVzdWx0c0J5QnVpbGRlcikKLXsKLSAgICB0aGlzLl90cmllID0g
e307Ci0KLSAgICBmb3IgKHZhciBidWlsZGVyIGluIGJ1aWxkZXJzKSB7Ci0gICAgICAgIHZhciB0
ZXN0c0ZvckJ1aWxkZXIgPSByZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLnRlc3RzOwotICAgICAg
ICBmb3IgKHZhciB0ZXN0IGluIHRlc3RzRm9yQnVpbGRlcikKLSAgICAgICAgICAgIHRoaXMuX2Fk
ZFRlc3QodGVzdC5zcGxpdCgnLycpLCB0aGlzLl90cmllKTsKLSAgICB9Ci19Ci0KLVRlc3RUcmll
LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHN0YXJ0aW5nVHJpZVBhdGgp
Ci17Ci0gICAgdmFyIHRlc3RzVHJpZSA9IHRoaXMuX3RyaWU7Ci0gICAgaWYgKHN0YXJ0aW5nVHJp
ZVBhdGgpIHsKLSAgICAgICAgdmFyIHNwbGl0UGF0aCA9IHN0YXJ0aW5nVHJpZVBhdGguc3BsaXQo
Jy8nKTsKLSAgICAgICAgd2hpbGUgKHNwbGl0UGF0aC5sZW5ndGggJiYgdGVzdHNUcmllKQotICAg
ICAgICAgICAgdGVzdHNUcmllID0gdGVzdHNUcmllW3NwbGl0UGF0aC5zaGlmdCgpXTsKLSAgICB9
Ci0KLSAgICBpZiAoIXRlc3RzVHJpZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZnVuY3Rpb24g
dHJhdmVyc2UodHJpZSwgdHJpZVBhdGgpIHsKLSAgICAgICAgaWYgKHRyaWUgPT0gdHJ1ZSkKLSAg
ICAgICAgICAgIGNhbGxiYWNrKHRyaWVQYXRoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBmb3IgKHZhciBtZW1iZXIgaW4gdHJpZSkKLSAgICAgICAgICAgICAgICB0cmF2ZXJzZSh0cmll
W21lbWJlcl0sIHRyaWVQYXRoID8gdHJpZVBhdGggKyAnLycgKyBtZW1iZXIgOiBtZW1iZXIpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIHRyYXZlcnNlKHRlc3RzVHJpZSwgc3RhcnRpbmdUcmllUGF0
aCk7Ci19Ci0KLVRlc3RUcmllLnByb3RvdHlwZS5fYWRkVGVzdCA9IGZ1bmN0aW9uKHRlc3QsIHRy
aWUpCi17Ci0gICAgdmFyIHJvb3RDb21wb25lbnQgPSB0ZXN0LnNoaWZ0KCk7Ci0gICAgaWYgKCF0
ZXN0Lmxlbmd0aCkgewotICAgICAgICBpZiAoIXRyaWVbcm9vdENvbXBvbmVudF0pCi0gICAgICAg
ICAgICB0cmllW3Jvb3RDb21wb25lbnRdID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICghdHJpZVtyb290Q29tcG9uZW50XSB8fCB0cmllW3Jvb3RDb21wb25lbnRdID09
IHRydWUpCi0gICAgICAgIHRyaWVbcm9vdENvbXBvbmVudF0gPSB7fTsKLSAgICB0aGlzLl9hZGRU
ZXN0KHRlc3QsIHRyaWVbcm9vdENvbXBvbmVudF0pOwotfQotCi0vLyBNYXAgb2YgYWxsIHRlc3Rz
IHRvIHRydWUgdmFsdWVzLiBUaGlzIGlzIGp1c3Qgc28gd2UgY2FuIGhhdmUgdGhlIGxpc3Qgb2YK
LS8vIGFsbCB0ZXN0cyBhY3Jvc3MgYWxsIHRoZSBidWlsZGVycy4KLXZhciBnX2FsbFRlc3RzVHJp
ZTsKLQotZnVuY3Rpb24gZ2V0QWxsVGVzdHNUcmllKCkKLXsKLSAgICBpZiAoIWdfYWxsVGVzdHNU
cmllKQotICAgICAgICBnX2FsbFRlc3RzVHJpZSA9IG5ldyBUZXN0VHJpZShjdXJyZW50QnVpbGRl
cnMoKSwgZ19yZXN1bHRzQnlCdWlsZGVyKTsKLQotICAgIHJldHVybiBnX2FsbFRlc3RzVHJpZTsK
LX0KLQotLy8gUmV0dXJucyBhbiBhcnJheSBvZiB0ZXN0cyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhl
IGluZGl2aWR1YWwgdGVzdHMgdmlldy4KLS8vIE5vdGUgdGhhdCBhIGRpcmVjdG9yeSBjYW4gYmUg
bGlzdGVkIGFzIGEgdGVzdCwgc28gd2UgZXhwYW5kIHRoYXQgaW50byBhbGwKLS8vIHRlc3RzIGlu
IHRoZSBkaXJlY3RvcnkuCi1mdW5jdGlvbiBpbmRpdmlkdWFsVGVzdHMoKQotewotICAgIGlmIChn
X2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5yZXN1bHQpCi0gICAgICAgIHJldHVybiBh
bGxUZXN0c1dpdGhSZXN1bHQoZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUucmVzdWx0
KTsKLQotICAgIGlmICghZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUudGVzdHMpCi0g
ICAgICAgIHJldHVybiBbXTsKLQotICAgIHJldHVybiBpbmRpdmlkdWFsVGVzdHNGb3JTdWJzdHJp
bmdMaXN0KCk7Ci19Ci0KLWZ1bmN0aW9uIHN1YnN0cmluZ0xpc3QoKQotewotICAgIC8vIENvbnZl
cnQgd2luZG93cyBzbGFzaGVzIHRvIHVuaXggc2xhc2hlcy4KLSAgICB2YXIgdGVzdHMgPSBnX2hp
c3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS50ZXN0cy5yZXBsYWNlKC9cXC9nLCAnLycpOwot
ICAgIHZhciBzZXBhcmF0b3IgPSBzdHJpbmcuY29udGFpbnModGVzdHMsICcgJykgPyAnICcgOiAn
LCc7Ci0gICAgdmFyIHRlc3RMaXN0ID0gdGVzdHMuc3BsaXQoc2VwYXJhdG9yKTsKLQotICAgIGlm
IChnX2hpc3RvcnkuaXNMYXlvdXRUZXN0UmVzdWx0cygpKQotICAgICAgICByZXR1cm4gdGVzdExp
c3Q7Ci0KLSAgICB2YXIgdGVzdExpc3RXaXRob3V0TW9kaWZpZXJzID0gW107Ci0gICAgdGVzdExp
c3QuZm9yRWFjaChmdW5jdGlvbihwYXRoKSB7Ci0gICAgICAgIEdURVNUX01PRElGSUVSUy5mb3JF
YWNoKGZ1bmN0aW9uKG1vZGlmaWVyKSB7Ci0gICAgICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNl
KCcuJyArIG1vZGlmaWVyICsgJ18nLCAnLicpOwotICAgICAgICB9KTsKLSAgICAgICAgdGVzdExp
c3RXaXRob3V0TW9kaWZpZXJzLnB1c2gocGF0aCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHRlc3RM
aXN0V2l0aG91dE1vZGlmaWVyczsKLX0KLQotZnVuY3Rpb24gaW5kaXZpZHVhbFRlc3RzRm9yU3Vi
c3RyaW5nTGlzdCgpCi17Ci0gICAgdmFyIHRlc3RMaXN0ID0gc3Vic3RyaW5nTGlzdCgpOwotCi0g
ICAgLy8gUHV0IHRoZSB0ZXN0cyBpbnRvIGFuIG9iamVjdCBmaXJzdCBhbmQgdGhlbiBtb3ZlIHRo
ZW0gaW50byBhbiBhcnJheQotICAgIC8vIGFzIGEgd2F5IG9mIGRlZHVwaW5nLgotICAgIHZhciB0
ZXN0c01hcCA9IHt9OwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdExpc3QubGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgdmFyIHBhdGggPSB0ZXN0TGlzdFtpXTsKLQotICAgICAgICAvLyBJZ25v
cmUgd2hpdGVzcGFjZSBlbnRyaWVzIGFzIHRoZXknZCBtYXRjaCBldmVyeSB0ZXN0LgotICAgICAg
ICBpZiAocGF0aC5tYXRjaCgvXlxzKiQvKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgIHZhciBoYXNBbnlNYXRjaGVzID0gZmFsc2U7Ci0gICAgICAgIGdldEFsbFRlc3RzVHJpZSgp
LmZvckVhY2goZnVuY3Rpb24odHJpZVBhdGgpIHsKLSAgICAgICAgICAgIGlmIChzdHJpbmcuY2Fz
ZUluc2Vuc2l0aXZlQ29udGFpbnModHJpZVBhdGgsIHBhdGgpKSB7Ci0gICAgICAgICAgICAgICAg
dGVzdHNNYXBbdHJpZVBhdGhdID0gMTsKLSAgICAgICAgICAgICAgICBoYXNBbnlNYXRjaGVzID0g
dHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgLy8gSWYgYSBwYXRo
IGRvZXNuJ3QgbWF0Y2ggYW55IHRlc3RzLCB0aGVuIGFzc3VtZSBpdCdzIGEgZnVsbCBwYXRoCi0g
ICAgICAgIC8vIHRvIGEgdGVzdCB0aGF0IHBhc3NlcyBvbiBhbGwgYnVpbGRlcnMuCi0gICAgICAg
IGlmICghaGFzQW55TWF0Y2hlcykKLSAgICAgICAgICAgIHRlc3RzTWFwW3BhdGhdID0gMTsKLSAg
ICB9Ci0KLSAgICB2YXIgdGVzdHNBcnJheSA9IFtdOwotICAgIGZvciAodmFyIHRlc3QgaW4gdGVz
dHNNYXApCi0gICAgICAgIHRlc3RzQXJyYXkucHVzaCh0ZXN0KTsKLSAgICByZXR1cm4gdGVzdHNB
cnJheTsKLX0KLQotLy8gUmV0dXJucyB3aGV0aGVyIHRoaXMgdGVzdCdzIHNsb3dlc3QgdGltZSBp
cyBhYm92ZSB0aGUgY3V0b2ZmIGZvcgotLy8gYmVpbmcgYSBzbG93IHRlc3QuCi1mdW5jdGlvbiBp
c1Nsb3dUZXN0KHJlc3VsdHNGb3JUZXN0KQotewotICAgIHZhciBtYXhUaW1lID0gaXNEZWJ1Zyhy
ZXN1bHRzRm9yVGVzdC5idWlsZGVyKSA/IE1JTl9TRUNPTkRTX0ZPUl9TTE9XX1RFU1RfREVCVUcg
OiBNSU5fU0VDT05EU19GT1JfU0xPV19URVNUOwotICAgIHJldHVybiByZXN1bHRzRm9yVGVzdC5z
bG93ZXN0Tm9uVGltZW91dENyYXNoVGltZSA+IG1heFRpbWU7Ci19Ci0KLS8vIFJldHVybnMgd2hl
dGhlciB0aGlzIHRlc3QncyBzbG93ZXN0IHRpbWUgaXMgKndlbGwqIGJlbG93IHRoZSBjdXRvZmYg
Zm9yCi0vLyBiZWluZyBhIHNsb3cgdGVzdC4KLWZ1bmN0aW9uIGlzRmFzdFRlc3QocmVzdWx0c0Zv
clRlc3QpCi17Ci0gICAgdmFyIG1heFRpbWUgPSBpc0RlYnVnKHJlc3VsdHNGb3JUZXN0LmJ1aWxk
ZXIpID8gTUlOX1NFQ09ORFNfRk9SX1NMT1dfVEVTVF9ERUJVRyA6IE1JTl9TRUNPTkRTX0ZPUl9T
TE9XX1RFU1Q7Ci0gICAgcmV0dXJuIHJlc3VsdHNGb3JUZXN0LnNsb3dlc3ROb25UaW1lb3V0Q3Jh
c2hUaW1lIDwgbWF4VGltZSAvIDI7Ci19Ci0KLWZ1bmN0aW9uIGFsbFRlc3RzV2l0aFJlc3VsdChy
ZXN1bHQpCi17Ci0gICAgcHJvY2Vzc1Rlc3RSdW5zRm9yQWxsQnVpbGRlcnMoKTsKLSAgICB2YXIg
cmV0VmFsID0gW107Ci0KLSAgICBnZXRBbGxUZXN0c1RyaWUoKS5mb3JFYWNoKGZ1bmN0aW9uKHRy
aWVQYXRoKSB7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ190ZXN0VG9SZXN1bHRzTWFw
W3RyaWVQYXRoXS5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgaWYgKGdfdGVzdFRvUmVzdWx0
c01hcFt0cmllUGF0aF1baV0uYWN0dWFsUmVzdWx0cy5pbmRleE9mKHJlc3VsdCkgIT0gLTEpIHsK
LSAgICAgICAgICAgICAgICByZXRWYWwucHVzaCh0cmllUGF0aCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9KTsKLQotICAgIHJldHVybiBy
ZXRWYWw7Ci19Ci0KLQotLy8gQWRkcyBhbGwgdGhlIHRlc3RzIGZvciB0aGUgZ2l2ZW4gYnVpbGRl
ciB0byB0aGUgdGVzdE1hcFRvUG9wdWxhdGUuCi1mdW5jdGlvbiBhZGRUZXN0c0ZvckJ1aWxkZXIo
YnVpbGRlciwgdGVzdE1hcFRvUG9wdWxhdGUpCi17Ci0gICAgdmFyIHRlc3RzID0gZ19yZXN1bHRz
QnlCdWlsZGVyW2J1aWxkZXJdLnRlc3RzOwotICAgIGZvciAodmFyIHRlc3QgaW4gdGVzdHMpIHsK
LSAgICAgICAgdGVzdE1hcFRvUG9wdWxhdGVbdGVzdF0gPSB0cnVlOwotICAgIH0KLX0KLQotLy8g
TWFwIG9mIGFsbCB0ZXN0cyB0byB0cnVlIHZhbHVlcyBieSBwbGF0Zm9ybSBhbmQgYnVpbGQgdHlw
ZS4KLS8vIGUuZy4gZ19hbGxUZXN0c0J5UGxhdGZvcm1BbmRCdWlsZFR5cGVbJ1hQJ11bJ0RFQlVH
J10gd2lsbCBoYXZlIHRoZSB1bmlvbgotLy8gb2YgYWxsIHRlc3RzIHJ1biBvbiB0aGUgeHAtZGVi
dWcgYnVpbGRlcnMuCi12YXIgZ19hbGxUZXN0c0J5UGxhdGZvcm1BbmRCdWlsZFR5cGUgPSB7fTsK
LXRyYXZlcnNlUGxhdGZvcm1zVHJlZShmdW5jdGlvbihwbGF0Zm9ybSwgcGxhdGZvcm1OYW1lKSB7
Ci0gICAgZ19hbGxUZXN0c0J5UGxhdGZvcm1BbmRCdWlsZFR5cGVbcGxhdGZvcm1OYW1lXSA9IHt9
OwotfSk7Ci0KLS8vIE1hcCBvZiBhbGwgdGVzdHMgdG8gdHJ1ZSB2YWx1ZXMgYnkgcGxhdGZvcm0g
YW5kIGJ1aWxkIHR5cGUuCi0vLyBlLmcuIGdfYWxsVGVzdHNCeVBsYXRmb3JtQW5kQnVpbGRUeXBl
WydXSU4nXVsnREVCVUcnXSB3aWxsIGhhdmUgdGhlIHVuaW9uCi0vLyBvZiBhbGwgdGVzdHMgcnVu
IG9uIHRoZSB3aW4tZGVidWcgYnVpbGRlcnMuCi1mdW5jdGlvbiBhbGxUZXN0c1dpdGhTYW1lUGxh
dGZvcm1BbmRCdWlsZFR5cGUocGxhdGZvcm0sIGJ1aWxkVHlwZSkKLXsKLSAgICBpZiAoIWdfYWxs
VGVzdHNCeVBsYXRmb3JtQW5kQnVpbGRUeXBlW3BsYXRmb3JtXSkKLSAgICAgICAgcmV0dXJuIHt9
OwotCi0gICAgaWYgKCFnX2FsbFRlc3RzQnlQbGF0Zm9ybUFuZEJ1aWxkVHlwZVtwbGF0Zm9ybV1b
YnVpbGRUeXBlXSkgewotICAgICAgICB2YXIgdGVzdHMgPSB7fTsKLSAgICAgICAgZm9yICh2YXIg
dGhpc0J1aWxkZXIgaW4gY3VycmVudEJ1aWxkZXJzKCkpIHsKLSAgICAgICAgICAgIHZhciB0aGlz
QnVpbGRlckJ1aWxkSW5mbyA9IHBsYXRmb3JtQW5kQnVpbGRUeXBlKHRoaXNCdWlsZGVyKTsKLSAg
ICAgICAgICAgIGlmICh0aGlzQnVpbGRlckJ1aWxkSW5mby5idWlsZFR5cGUgPT0gYnVpbGRUeXBl
ICYmIHRoaXNCdWlsZGVyQnVpbGRJbmZvLnBsYXRmb3JtID09IHBsYXRmb3JtKSB7Ci0gICAgICAg
ICAgICAgICAgYWRkVGVzdHNGb3JCdWlsZGVyKHRoaXNCdWlsZGVyLCB0ZXN0cyk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZ19hbGxUZXN0c0J5UGxhdGZvcm1BbmRCdWlsZFR5
cGVbcGxhdGZvcm1dW2J1aWxkVHlwZV0gPSB0ZXN0czsKLSAgICB9Ci0KLSAgICByZXR1cm4gZ19h
bGxUZXN0c0J5UGxhdGZvcm1BbmRCdWlsZFR5cGVbcGxhdGZvcm1dW2J1aWxkVHlwZV07Ci19Ci0K
LWZ1bmN0aW9uIGdldEV4cGVjdGF0aW9ucyh0ZXN0LCBwbGF0Zm9ybSwgYnVpbGRUeXBlKQotewot
ICAgIHZhciB0ZXN0T2JqZWN0ID0gZ19hbGxFeHBlY3RhdGlvbnNbdGVzdF07Ci0gICAgaWYgKCF0
ZXN0T2JqZWN0KQotICAgICAgICByZXR1cm4gbnVsbDsKLQotICAgIHZhciBwbGF0Zm9ybU9iamVj
dCA9IHRlc3RPYmplY3RbcGxhdGZvcm1dOwotICAgIGlmICghcGxhdGZvcm1PYmplY3QpCi0gICAg
ICAgIHJldHVybiBudWxsOwotICAgICAgICAKLSAgICByZXR1cm4gcGxhdGZvcm1PYmplY3RbYnVp
bGRUeXBlXTsKLX0KLQotZnVuY3Rpb24gZmlsdGVyQnVncyhtb2RpZmllcnMpCi17Ci0gICAgdmFy
IGJ1Z3MgPSBtb2RpZmllcnMubWF0Y2goL1xiKEJ1Z3x3ZWJraXQub3JnfGNyYnVnLmNvbXxjb2Rl
Lmdvb2dsZS5jb20pXFMqL2cpOwotICAgIGlmICghYnVncykKLSAgICAgICAgcmV0dXJuIHtidWdz
OiAnJywgbW9kaWZpZXJzOiBtb2RpZmllcnN9OwotICAgIGZvciAodmFyIGogPSAwOyBqIDwgYnVn
cy5sZW5ndGg7IGorKykKLSAgICAgICAgbW9kaWZpZXJzID0gbW9kaWZpZXJzLnJlcGxhY2UoYnVn
c1tqXSwgJycpOwotICAgIHJldHVybiB7YnVnczogYnVncy5qb2luKCcgJyksIG1vZGlmaWVyczog
c3RyaW5nLmNvbGxhcHNlV2hpdGVzcGFjZShzdHJpbmcudHJpbVN0cmluZyhtb2RpZmllcnMpKX07
Ci19Ci0KLWZ1bmN0aW9uIHBvcHVsYXRlRXhwZWN0YXRpb25zRGF0YShyZXN1bHRzT2JqZWN0KQot
ewotICAgIHZhciBidWlsZEluZm8gPSBwbGF0Zm9ybUFuZEJ1aWxkVHlwZShyZXN1bHRzT2JqZWN0
LmJ1aWxkZXIpOwotICAgIHZhciBleHBlY3RhdGlvbnMgPSBnZXRFeHBlY3RhdGlvbnMocmVzdWx0
c09iamVjdC50ZXN0LCBidWlsZEluZm8ucGxhdGZvcm0sIGJ1aWxkSW5mby5idWlsZFR5cGUpOwot
ICAgIGlmICghZXhwZWN0YXRpb25zKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZXN1bHRzT2Jq
ZWN0LmV4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9ucy5leHBlY3RhdGlvbnM7Ci0gICAgdmFyIGZp
bHRlcmVkTW9kaWZpZXJzID0gZmlsdGVyQnVncyhleHBlY3RhdGlvbnMubW9kaWZpZXJzKTsKLSAg
ICByZXN1bHRzT2JqZWN0Lm1vZGlmaWVycyA9IGZpbHRlcmVkTW9kaWZpZXJzLm1vZGlmaWVyczsK
LSAgICByZXN1bHRzT2JqZWN0LmJ1Z3MgPSBmaWx0ZXJlZE1vZGlmaWVycy5idWdzOwotICAgIHJl
c3VsdHNPYmplY3QuaXNXb250Rml4U2tpcCA9IHN0cmluZy5jb250YWlucyhleHBlY3RhdGlvbnMu
bW9kaWZpZXJzLCAnV09OVEZJWCcpIHx8IHN0cmluZy5jb250YWlucyhleHBlY3RhdGlvbnMubW9k
aWZpZXJzLCAnU0tJUCcpOyAKLX0KLQotZnVuY3Rpb24gcGxhdGZvcm1PYmplY3RGb3JOYW1lKHBs
YXRmb3JtTmFtZSkKLXsKLSAgICB2YXIgcGxhdGZvcm1zTGlzdCA9IHBsYXRmb3JtTmFtZS5zcGxp
dCgiXyIpOwotICAgIHZhciBwbGF0Zm9ybU9iamVjdCA9IFBMQVRGT1JNU1twbGF0Zm9ybXNMaXN0
LnNoaWZ0KCldOwotICAgIHBsYXRmb3Jtc0xpc3QuZm9yRWFjaChmdW5jdGlvbihwbGF0Zm9ybU5h
bWUpIHsKLSAgICAgICAgcGxhdGZvcm1PYmplY3QgPSBwbGF0Zm9ybU9iamVjdC5zdWJQbGF0Zm9y
bXNbcGxhdGZvcm1OYW1lXTsKLSAgICB9KTsKLSAgICByZXR1cm4gcGxhdGZvcm1PYmplY3Q7Ci19
Ci0KLS8vIERhdGEgc3RydWN0dXJlIHRvIGhvbGQgdGhlIHByb2Nlc3NlZCBleHBlY3RhdGlvbnMu
Ci0vLyBnX2FsbEV4cGVjdGF0aW9uc1t0ZXN0UGF0aF1bcGxhdGZvcm1dW2J1aWxkVHlwZV0gZ2V0
cyB0aGUgb2JqZWN0IHRoYXQgaGFzCi0vLyBleHBlY3RhdGlvbnMgYW5kIG1vZGlmaWVycyBwcm9w
ZXJ0aWVzIGZvciB0aGlzIHBsYXRmb3JtL2J1aWxkVHlwZS4KLS8vCi0vLyBwbGF0Zm9ybSBhbmQg
YnVpbGRUeXBlIGJvdGggZ28gdGhyb3VnaCBmYWxsYmFjayBzZXRzIG9mIGtleXMgZnJvbSBtb3N0
Ci0vLyBzcGVjaWZpYyBrZXkgdG8gbGVhc3Qgc3BlY2lmaWMuIEZvciBleGFtcGxlLCBvbiBXaW5k
b3dzIFhQLCB3ZSBmaXJzdAotLy8gY2hlY2sgdGhlIHBsYXRmb3JtIFdJTi1YUCwgaWYgdGhlcmUn
cyBubyBzdWNoIG9iamVjdCwgd2UgY2hlY2sgV0lOLAotLy8gdGhlbiBmaW5hbGx5IHdlIGNoZWNr
IEFMTC4gRm9yIGJ1aWxkIHR5cGVzLCB3ZSBjaGVjayB0aGUgY3VycmVudAotLy8gYnVpbGRUeXBl
LCB0aGVuIEFMTC4KLXZhciBnX2FsbEV4cGVjdGF0aW9uczsKLQotZnVuY3Rpb24gZ2V0UGFyc2Vk
RXhwZWN0YXRpb25zKGRhdGEpCi17Ci0gICAgdmFyIGV4cGVjdGF0aW9ucyA9IFtdOwotICAgIHZh
ciBsaW5lcyA9IGRhdGEuc3BsaXQoJ1xuJyk7Ci0gICAgbGluZXMuZm9yRWFjaChmdW5jdGlvbihs
aW5lKSB7Ci0gICAgICAgIGxpbmUgPSBzdHJpbmcudHJpbVN0cmluZyhsaW5lKTsKLSAgICAgICAg
aWYgKCFsaW5lIHx8IHN0cmluZy5zdGFydHNXaXRoKGxpbmUsICcjJykpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgLy8gVGhpcyBjb2RlIG1pbWljcyBfdG9rZW5pemVfbGluZV91c2lu
Z19uZXdfZm9ybWF0KCkgaW4KLSAgICAgICAgLy8gVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbW9kZWxzL3Rlc3RfZXhwZWN0YXRpb25zLnB5Ci0gICAgICAgIC8vCi0gICAgICAg
IC8vIEZJWE1FOiBjb25zaWRlciBkb2luZyBtb3JlIGVycm9yIGNoZWNraW5nIGhlcmUuCi0gICAg
ICAgIC8vCi0gICAgICAgIC8vIEZJWE1FOiBDbGVhbiB0aGlzIGFsbCB1cCBvbmNlIHdlJ3ZlIGZ1
bGx5IGN1dCBvdmVyIHRvIHRoZSBuZXcgc3ludGF4LgotICAgICAgICB2YXIgdG9rZW5zID0gbGlu
ZS5zcGxpdCgvXHMrLykKLSAgICAgICAgdmFyIHBhcnNlZF9idWdzID0gW107Ci0gICAgICAgIHZh
ciBwYXJzZWRfbW9kaWZpZXJzID0gW107Ci0gICAgICAgIHZhciBwYXJzZWRfcGF0aDsKLSAgICAg
ICAgdmFyIHBhcnNlZF9leHBlY3RhdGlvbnMgPSBbXTsKLSAgICAgICAgdmFyIHN0YXRlID0gJ3N0
YXJ0JzsKLQotICAgICAgICAvLyBUaGlzIGNsb25lcyBfY29uZmlndXJhdGlvbl90b2tlbnNfbGlz
dCBpbiB0ZXN0X2V4cGVjdGF0aW9ucy5weS4KLSAgICAgICAgLy8gRklYTUU6IHVuaWZ5IHdpdGgg
dGhlIHBsYXRmb3JtcyBjb25zdGFudHMgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZS4KLSAgICAgICAg
dmFyIGNvbmZpZ3VyYXRpb25fdG9rZW5zID0gewotICAgICAgICAgICAgJ1JlbGVhc2UnOiAnUkVM
RUFTRScsCi0gICAgICAgICAgICAnRGVidWcnOiAnREVCVUcnLAotICAgICAgICAgICAgJ01hYyc6
ICdNQUMnLAotICAgICAgICAgICAgJ1dpbic6ICdXSU4nLAotICAgICAgICAgICAgJ0xpbnV4Jzog
J0xJTlVYJywKLSAgICAgICAgICAgICdTbm93TGVvcGFyZCc6ICdTTk9XTEVPUEFSRCcsCi0gICAg
ICAgICAgICAnTGlvbic6ICdMSU9OJywKLSAgICAgICAgICAgICdNb3VudGFpbkxpb24nOiAnTU9V
TlRBSU5MSU9OJywKLSAgICAgICAgICAgICdNYXZlcmlja3MnOiAnTUFWRVJJQ0tTJywKLSAgICAg
ICAgICAgICdZb3NlbWl0ZSc6ICdZT1NFTUlURScsCi0gICAgICAgICAgICAnRWxDYXBpdGFuJzog
J0VMQ0FQSVRBTicsCi0gICAgICAgICAgICAnU2llcnJhJzogJ1NJRVJSQScsCi0gICAgICAgICAg
ICAnSGlnaFNpZXJyYSc6ICdISUdIU0lFUlJBJywKLSAgICAgICAgICAgICdNb2phdmUnOiAnTU9K
QVZFJywKLSAgICAgICAgICAgICdDYXRhbGluYSc6ICdDQVRBTElOQScsCi0gICAgICAgICAgICAn
V2luNyc6ICdXSU43JywKLSAgICAgICAgICAgICdXaW4xMCc6ICdXSU4xMCcsCi0gICAgICAgICAg
ICAnWFAnOiAnWFAnLAotICAgICAgICAgICAgJ1Zpc3RhJzogJ1ZJU1RBJywKLSAgICAgICAgICAg
ICdBbmRyb2lkJzogJ0FORFJPSUQnLAotICAgICAgICB9OwotCi0gICAgICAgIHZhciBleHBlY3Rh
dGlvbl90b2tlbnMgPSB7Ci0gICAgICAgICAgICAnQ3Jhc2gnOiAnQ1JBU0gnLAotICAgICAgICAg
ICAgJ0ZhaWx1cmUnOiAnRkFJTCcsCi0gICAgICAgICAgICAnSW1hZ2VPbmx5RmFpbHVyZSc6ICdJ
TUFHRScsCi0gICAgICAgICAgICAnTWlzc2luZyc6ICdNSVNTSU5HJywKLSAgICAgICAgICAgICdQ
YXNzJzogJ1BBU1MnLAotICAgICAgICAgICAgJ1JlYmFzZWxpbmUnOiAnUkVCQVNFTElORScsCi0g
ICAgICAgICAgICAnU2tpcCc6ICdTS0lQJywKLSAgICAgICAgICAgICdTbG93JzogJ1NMT1cnLAot
ICAgICAgICAgICAgJ1RpbWVvdXQnOiAnVElNRU9VVCcsCi0gICAgICAgICAgICAnV29udEZpeCc6
ICdXT05URklYJywKLSAgICAgICAgfTsKLQotICAgICAgICAgICAgCi0gICAgICAgIHRva2Vucy5m
b3JFYWNoKGZ1bmN0aW9uKHRva2VuKSB7Ci0gICAgICAgICAgaWYgKHRva2VuLmluZGV4T2YoJ0J1
ZycpICE9IC0xIHx8Ci0gICAgICAgICAgICAgIHRva2VuLmluZGV4T2YoJ3dlYmtpdC5vcmcnKSAh
PSAtMSB8fAotICAgICAgICAgICAgICB0b2tlbi5pbmRleE9mKCdjcmJ1Zy5jb20nKSAhPSAtMSB8
fAotICAgICAgICAgICAgICB0b2tlbi5pbmRleE9mKCdjb2RlLmdvb2dsZS5jb20nKSAhPSAtMSkg
ewotICAgICAgICAgICAgICBwYXJzZWRfYnVncy5wdXNoKHRva2VuKTsKLSAgICAgICAgICB9IGVs
c2UgaWYgKHRva2VuID09ICdbJykgewotICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gJ3N0YXJ0
JykgewotICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnY29uZmlndXJhdGlvbic7Ci0gICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gJ25hbWVfZm91bmQnKSB7Ci0gICAgICAgICAgICAg
ICAgICBzdGF0ZSA9ICdleHBlY3RhdGlvbnMnOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
fSBlbHNlIGlmICh0b2tlbiA9PSAnXScpIHsKLSAgICAgICAgICAgICAgaWYgKHN0YXRlID09ICdj
b25maWd1cmF0aW9uJykgewotICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnbmFtZSc7Ci0gICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gJ2V4cGVjdGF0aW9ucycpIHsKLSAgICAgICAg
ICAgICAgICAgIHN0YXRlID0gJ2RvbmUnOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfSBl
bHNlIGlmIChzdGF0ZSA9PSAnY29uZmlndXJhdGlvbicpIHsKLSAgICAgICAgICAgICAgcGFyc2Vk
X21vZGlmaWVycy5wdXNoKGNvbmZpZ3VyYXRpb25fdG9rZW5zW3Rva2VuXSk7Ci0gICAgICAgICAg
fSBlbHNlIGlmIChzdGF0ZSA9PSAnZXhwZWN0YXRpb25zJykgewotICAgICAgICAgICAgICBpZiAo
dG9rZW4gPT0gJ1JlYmFzZWxpbmUnIHx8IHRva2VuID09ICdTa2lwJyB8fCB0b2tlbiA9PSAnU2xv
dycgfHwgdG9rZW4gPT0gJ1dvbnRGaXgnKSB7Ci0gICAgICAgICAgICAgICAgICBwYXJzZWRfbW9k
aWZpZXJzLnB1c2godG9rZW4udG9VcHBlckNhc2UoKSk7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICBwYXJzZWRfZXhwZWN0YXRpb25zLnB1c2goZXhwZWN0YXRpb25f
dG9rZW5zW3Rva2VuXSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UgaWYgKHRv
a2VuID09ICcjJykgewotICAgICAgICAgICAgICBzdGF0ZSA9ICdkb25lJzsKLSAgICAgICAgICB9
IGVsc2UgaWYgKHN0YXRlID09ICduYW1lJyB8fCBzdGF0ZSA9PSAnc3RhcnQnKSB7Ci0gICAgICAg
ICAgICAgIHBhcnNlZF9wYXRoID0gdG9rZW47Ci0gICAgICAgICAgICAgIHN0YXRlID0gJ25hbWVf
Zm91bmQnOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0KLSAgICAgICAgaWYgKCFwYXJzZWRf
ZXhwZWN0YXRpb25zLmxlbmd0aCkgewotICAgICAgICAgICAgaWYgKHBhcnNlZF9tb2RpZmllcnMu
aW5kZXhPZignU2xvdycpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgcGFyc2VkX21vZGlmaWVy
cy5wdXNoKCdTa2lwJyk7Ci0gICAgICAgICAgICAgICAgcGFyc2VkX2V4cGVjdGF0aW9ucyA9IFsn
UGFzcyddOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRklYTUU6IFNo
b3VsZCB3ZSBpbmNsdWRlIGxpbmUgbnVtYmVyIGFuZCBjb21tZW50IGxpbmVzIGhlcmU/Ci0gICAg
ICAgIGV4cGVjdGF0aW9ucy5wdXNoKHsKLSAgICAgICAgICAgIG1vZGlmaWVyczogcGFyc2VkX2J1
Z3MuY29uY2F0KHBhcnNlZF9tb2RpZmllcnMpLmpvaW4oJyAnKSwKLSAgICAgICAgICAgIHBhdGg6
IHBhcnNlZF9wYXRoLAotICAgICAgICAgICAgZXhwZWN0YXRpb25zOiBwYXJzZWRfZXhwZWN0YXRp
b25zLmpvaW4oJyAnKSwKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIGV4cGVjdGF0
aW9uczsKLX0KLQotCi1mdW5jdGlvbiBhZGRUZXN0VG9BbGxFeHBlY3RhdGlvbnNGb3JQbGF0Zm9y
bSh0ZXN0LCBwbGF0Zm9ybU5hbWUsIGV4cGVjdGF0aW9ucywgbW9kaWZpZXJzKQotewotICAgIGlm
ICghZ19hbGxFeHBlY3RhdGlvbnNbdGVzdF0pCi0gICAgICAgIGdfYWxsRXhwZWN0YXRpb25zW3Rl
c3RdID0ge307Ci0KLSAgICBpZiAoIWdfYWxsRXhwZWN0YXRpb25zW3Rlc3RdW3BsYXRmb3JtTmFt
ZV0pCi0gICAgICAgIGdfYWxsRXhwZWN0YXRpb25zW3Rlc3RdW3BsYXRmb3JtTmFtZV0gPSB7fTsK
LQotICAgIHZhciBhbGxCdWlsZFR5cGVzID0gW107Ci0gICAgbW9kaWZpZXJzLnNwbGl0KCcgJyku
Zm9yRWFjaChmdW5jdGlvbihtb2RpZmllcikgewotICAgICAgICBpZiAobW9kaWZpZXIgaW4gQlVJ
TERfVFlQRVMpIHsKLSAgICAgICAgICAgIGFsbEJ1aWxkVHlwZXMucHVzaChtb2RpZmllcik7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9KTsKLSAgICBpZiAoIWFsbEJ1aWxk
VHlwZXMubGVuZ3RoKQotICAgICAgICBhbGxCdWlsZFR5cGVzID0gT2JqZWN0LmtleXMoQlVJTERf
VFlQRVMpOwotCi0gICAgYWxsQnVpbGRUeXBlcy5mb3JFYWNoKGZ1bmN0aW9uKGJ1aWxkVHlwZSkg
ewotICAgICAgICBnX2FsbEV4cGVjdGF0aW9uc1t0ZXN0XVtwbGF0Zm9ybU5hbWVdW2J1aWxkVHlw
ZV0gPSB7bW9kaWZpZXJzOiBtb2RpZmllcnMsIGV4cGVjdGF0aW9uczogZXhwZWN0YXRpb25zfTsK
LSAgICB9KTsKLX0KLQotZnVuY3Rpb24gcHJvY2Vzc0V4cGVjdGF0aW9uc0ZvclBsYXRmb3JtKHBs
YXRmb3JtT2JqZWN0LCBwbGF0Zm9ybU5hbWUsIGV4cGVjdGF0aW9uc0FycmF5KQotewotICAgIGlm
ICghZ19hbGxFeHBlY3RhdGlvbnMpCi0gICAgICAgIGdfYWxsRXhwZWN0YXRpb25zID0ge307Ci0K
LSAgICBpZiAoIWV4cGVjdGF0aW9uc0FycmF5KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBT
b3J0IHRoZSBhcnJheSB0byBoaXQgbW9yZSBzcGVjaWZpYyBwYXRocyBsYXN0LiBNb3JlIHNwZWNp
ZmljCi0gICAgLy8gcGF0aHMgKGUuZy4gZm9vL2Jhci9iYXouaHRtbCkgb3ZlcnJpZGUgZW50cmll
cyBmb3IgbGVzcy1zcGVjaWZpYyBvbmVzIChlLmcuIGZvby9iYXIpLgotICAgIGV4cGVjdGF0aW9u
c0FycmF5LnNvcnQoYWxwaGFudW1lcmljQ29tcGFyZSgncGF0aCcpKTsKLQotICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgZXhwZWN0YXRpb25zQXJyYXkubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdmFy
IHBhdGggPSBleHBlY3RhdGlvbnNBcnJheVtpXS5wYXRoOwotICAgICAgICB2YXIgbW9kaWZpZXJz
ID0gZXhwZWN0YXRpb25zQXJyYXlbaV0ubW9kaWZpZXJzOwotICAgICAgICB2YXIgZXhwZWN0YXRp
b25zID0gZXhwZWN0YXRpb25zQXJyYXlbaV0uZXhwZWN0YXRpb25zOwotCi0gICAgICAgIGdldEFs
bFRlc3RzVHJpZSgpLmZvckVhY2goZnVuY3Rpb24odHJpZVBhdGgpIHsKLSAgICAgICAgICAgIGFk
ZFRlc3RUb0FsbEV4cGVjdGF0aW9uc0ZvclBsYXRmb3JtKHRyaWVQYXRoLCBwbGF0Zm9ybU5hbWUs
IGV4cGVjdGF0aW9ucywgbW9kaWZpZXJzKTsKLSAgICAgICAgfSwgcGF0aCk7Ci0gICAgfQotfQot
Ci1mdW5jdGlvbiBwcm9jZXNzRXhwZWN0YXRpb25zKCkKLXsKLSAgICAvLyBGSVhNRTogQW4gZXhw
ZWN0YXRpb25zLWJ5LXBsYXRmb3JtIG9iamVjdCBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBm
dW5jdGlvbiByYXRoZXIgdGhhbiBjaGVja2luZwotICAgIC8vIGZvciBhIGdsb2JhbCBvYmplY3Qu
IFRoYXQgd2F5IHRoaXMgZnVuY3Rpb24gY2FuIGJlIGJldHRlciB0ZXN0ZWQgYW5kIG1lYW5pbmdm
dWwgZXJyb3JzIGNhbgotICAgIC8vIGJlIHJlcG9ydGVkIHdoZW4gZXhwZWN0YXRpb25zIGZvciBh
IGdpdmVuIHBsYXRmb3JtIGFyZSBub3QgZm91bmQgaW4gdGhhdCBvYmplY3QuCi0gICAgaWYgKCFn
X2V4cGVjdGF0aW9uc0J5UGxhdGZvcm0pCi0gICAgICAgIHJldHVybjsKLQotICAgIHRyYXZlcnNl
UGxhdGZvcm1zVHJlZShmdW5jdGlvbihwbGF0Zm9ybSwgcGxhdGZvcm1OYW1lKSB7Ci0gICAgICAg
IGlmIChwbGF0Zm9ybS5mYWxsYmFja1BsYXRmb3JtcykgewotICAgICAgICAgICAgcGxhdGZvcm0u
ZmFsbGJhY2tQbGF0Zm9ybXMuZm9yRWFjaChmdW5jdGlvbihmYWxsYmFja1BsYXRmb3JtKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGZhbGxiYWNrUGxhdGZvcm0gaW4gZ19leHBlY3RhdGlvbnNCeVBs
YXRmb3JtKQotICAgICAgICAgICAgICAgICAgICBwcm9jZXNzRXhwZWN0YXRpb25zRm9yUGxhdGZv
cm0ocGxhdGZvcm0sIHBsYXRmb3JtTmFtZSwgZ19leHBlY3RhdGlvbnNCeVBsYXRmb3JtW2ZhbGxi
YWNrUGxhdGZvcm1dKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KHBsYXRmb3JtTmFtZSBpbiBnX2V4cGVjdGF0aW9uc0J5UGxhdGZvcm0pCi0gICAgICAgICAgICBw
cm9jZXNzRXhwZWN0YXRpb25zRm9yUGxhdGZvcm0ocGxhdGZvcm0sIHBsYXRmb3JtTmFtZSwgZ19l
eHBlY3RhdGlvbnNCeVBsYXRmb3JtW3BsYXRmb3JtTmFtZV0pOwotICAgIH0pOwotCi0gICAgZ19l
eHBlY3RhdGlvbnNCeVBsYXRmb3JtID0gdW5kZWZpbmVkOwotfQotCi1mdW5jdGlvbiBwcm9jZXNz
TWlzc2luZ1Rlc3RzV2l0aEV4cGVjdGF0aW9ucyhidWlsZGVyLCBwbGF0Zm9ybSwgYnVpbGRUeXBl
KQotewotICAgIHZhciBub0ZhaWx1cmVzID0gW107Ci0gICAgdmFyIHNraXBwZWQgPSBbXTsKLQot
ICAgIHZhciBhbGxUZXN0c0ZvclBsYXRmb3JtQW5kQnVpbGRUeXBlID0gYWxsVGVzdHNXaXRoU2Ft
ZVBsYXRmb3JtQW5kQnVpbGRUeXBlKHBsYXRmb3JtLCBidWlsZFR5cGUpOwotICAgIGZvciAodmFy
IHRlc3QgaW4gZ19hbGxFeHBlY3RhdGlvbnMpIHsKLSAgICAgICAgdmFyIGV4cGVjdGF0aW9ucyA9
IGdldEV4cGVjdGF0aW9ucyh0ZXN0LCBwbGF0Zm9ybSwgYnVpbGRUeXBlKTsKLQotICAgICAgICBp
ZiAoIWV4cGVjdGF0aW9ucykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8vIFRl
c3QgaGFzIGV4cGVjdGF0aW9ucywgYnV0IG5vIHJlc3VsdCBpbiB0aGUgYnVpbGRlcnMgcmVzdWx0
cy4KLSAgICAgICAgLy8gVGhpcyBtZWFucyBpdCdzIGVpdGhlciBTS0lQIG9yIHBhc3NlcyBvbiBh
bGwgYnVpbGRzLgotICAgICAgICBpZiAoIWFsbFRlc3RzRm9yUGxhdGZvcm1BbmRCdWlsZFR5cGVb
dGVzdF0gJiYgIXN0cmluZy5jb250YWlucyhleHBlY3RhdGlvbnMubW9kaWZpZXJzLCAnV09OVEZJ
WCcpKSB7Ci0gICAgICAgICAgICBpZiAoc3RyaW5nLmNvbnRhaW5zKGV4cGVjdGF0aW9ucy5tb2Rp
ZmllcnMsICdTS0lQJykpCi0gICAgICAgICAgICAgICAgc2tpcHBlZC5wdXNoKHRlc3QpOwotICAg
ICAgICAgICAgZWxzZSBpZiAoIWV4cGVjdGF0aW9ucy5leHBlY3RhdGlvbnMubWF0Y2goL15ccypQ
QVNTXHMqJC8pKSB7Ci0gICAgICAgICAgICAgICAgLy8gRG9uJ3Qgc2hvdyB0ZXN0cyBleHBlY3Rl
ZCB0byBhbHdheXMgcGFzcy4gVGhpcyBpcyB1c2VkIGluIHdheXMgbGlrZQotICAgICAgICAgICAg
ICAgIC8vIHRoZSBmb2xsb3dpbmc6Ci0gICAgICAgICAgICAgICAgLy8gZm9vL2JhciA9IEZBSUwK
LSAgICAgICAgICAgICAgICAvLyBmb28vYmFyL2Jhei5odG1sID0gUEFTUwotICAgICAgICAgICAg
ICAgIG5vRmFpbHVyZXMucHVzaCh7dGVzdDogdGVzdCwgZXhwZWN0YXRpb25zOiBleHBlY3RhdGlv
bnMuZXhwZWN0YXRpb25zLCBtb2RpZmllcnM6IGV4cGVjdGF0aW9ucy5tb2RpZmllcnN9KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGdfcGVyQnVpbGRlclNraXBwZWRQ
YXRoc1tidWlsZGVyXSA9IHNraXBwZWQuc29ydCgpOwotICAgIGdfcGVyQnVpbGRlcldpdGhFeHBl
Y3RhdGlvbnNCdXROb0ZhaWx1cmVzW2J1aWxkZXJdID0gbm9GYWlsdXJlcy5zb3J0KCk7Ci19Ci0K
LWZ1bmN0aW9uIHByb2Nlc3NUZXN0UmVzdWx0c0ZvckJ1aWxkZXJBc3luYyhidWlsZGVyKQotewot
ICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHByb2Nlc3NUZXN0UnVuc0ZvckJ1aWxkZXIoYnVp
bGRlcik7IH0sIDApOwotfQotCi1mdW5jdGlvbiBwcm9jZXNzVGVzdFJ1bnNGb3JBbGxCdWlsZGVy
cygpCi17Ci0gICAgZm9yICh2YXIgYnVpbGRlciBpbiBjdXJyZW50QnVpbGRlcnMoKSkKLSAgICAg
ICAgcHJvY2Vzc1Rlc3RSdW5zRm9yQnVpbGRlcihidWlsZGVyKTsKLX0KLQotZnVuY3Rpb24gcHJv
Y2Vzc1Rlc3RSdW5zRm9yQnVpbGRlcihidWlsZGVyTmFtZSkKLXsKLSAgICBpZiAoZ19wZXJCdWls
ZGVyRmFpbHVyZXNbYnVpbGRlck5hbWVdKQotICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFnX3Jl
c3VsdHNCeUJ1aWxkZXJbYnVpbGRlck5hbWVdKSB7Ci0gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05v
IHRlc3RzIGZvdW5kIGZvciAnICsgYnVpbGRlck5hbWUpOwotICAgICAgICBnX3BlckJ1aWxkZXJG
YWlsdXJlc1tidWlsZGVyTmFtZV0gPSBbXTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHByb2Nlc3NFeHBlY3RhdGlvbnMoKTsKLSAgIAotICAgIHZhciBidWlsZEluZm8gPSBwbGF0Zm9y
bUFuZEJ1aWxkVHlwZShidWlsZGVyTmFtZSk7Ci0gICAgdmFyIHBsYXRmb3JtID0gYnVpbGRJbmZv
LnBsYXRmb3JtOwotICAgIHZhciBidWlsZFR5cGUgPSBidWlsZEluZm8uYnVpbGRUeXBlOwotICAg
IGlmICghcGxhdGZvcm0pCi0gICAgICAgIHJldHVybjsKLQotICAgIHByb2Nlc3NNaXNzaW5nVGVz
dHNXaXRoRXhwZWN0YXRpb25zKGJ1aWxkZXJOYW1lLCBwbGF0Zm9ybSwgYnVpbGRUeXBlKTsKLQot
ICAgIHZhciBmYWlsdXJlcyA9IFtdOwotICAgIHZhciBhbGxUZXN0c0ZvclRoaXNCdWlsZGVyID0g
Z19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJOYW1lXS50ZXN0czsKLQotICAgIGZvciAodmFyIHRl
c3QgaW4gYWxsVGVzdHNGb3JUaGlzQnVpbGRlcikgewotICAgICAgICB2YXIgcmVzdWx0c0ZvclRl
c3QgPSBjcmVhdGVSZXN1bHRzT2JqZWN0Rm9yVGVzdCh0ZXN0LCBidWlsZGVyTmFtZSk7Ci0gICAg
ICAgIHBvcHVsYXRlRXhwZWN0YXRpb25zRGF0YShyZXN1bHRzRm9yVGVzdCk7Ci0KLSAgICAgICAg
dmFyIHJhd1Rlc3QgPSBnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlck5hbWVdLnRlc3RzW3Rlc3Rd
OwotICAgICAgICByZXN1bHRzRm9yVGVzdC5yYXdUaW1lcyA9IHJhd1Rlc3QudGltZXM7Ci0gICAg
ICAgIHZhciByYXdSZXN1bHRzID0gcmF3VGVzdC5yZXN1bHRzOwotICAgICAgICByZXN1bHRzRm9y
VGVzdC5yYXdSZXN1bHRzID0gcmF3UmVzdWx0czsKLQotICAgICAgICAvLyBGSVhNRTogU3dpdGNo
IHRvIHJlc3VsdHNCeUJ1aWxkCi0gICAgICAgIHZhciB0aW1lcyA9IHJlc3VsdHNGb3JUZXN0LnJh
d1RpbWVzOwotICAgICAgICB2YXIgbnVtVGltZXNTZWVuID0gMDsKLSAgICAgICAgdmFyIG51bVJl
c3VsdHNTZWVuID0gMDsKLSAgICAgICAgdmFyIHJlc3VsdHNJbmRleCA9IDA7Ci0gICAgICAgIHZh
ciBjdXJyZW50UmVzdWx0OwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRpbWVzLmxlbmd0
aDsgaSsrKSB7Ci0gICAgICAgICAgICBudW1UaW1lc1NlZW4gKz0gdGltZXNbaV1bUkxFLkxFTkdU
SF07Ci0KLSAgICAgICAgICAgIHdoaWxlIChyYXdSZXN1bHRzW3Jlc3VsdHNJbmRleF0gJiYgbnVt
VGltZXNTZWVuID4gKG51bVJlc3VsdHNTZWVuICsgcmF3UmVzdWx0c1tyZXN1bHRzSW5kZXhdW1JM
RS5MRU5HVEhdKSkgewotICAgICAgICAgICAgICAgIG51bVJlc3VsdHNTZWVuICs9IHJhd1Jlc3Vs
dHNbcmVzdWx0c0luZGV4XVtSTEUuTEVOR1RIXTsKLSAgICAgICAgICAgICAgICByZXN1bHRzSW5k
ZXgrKzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHJhd1Jlc3VsdHMgJiYgcmF3
UmVzdWx0c1tyZXN1bHRzSW5kZXhdKQotICAgICAgICAgICAgICAgIGN1cnJlbnRSZXN1bHQgPSBy
YXdSZXN1bHRzW3Jlc3VsdHNJbmRleF1bUkxFLlZBTFVFXTsKLQotICAgICAgICAgICAgdmFyIHRp
bWUgPSB0aW1lc1tpXVtSTEUuVkFMVUVdCi0KLSAgICAgICAgICAgIC8vIElnbm9yZSB0aW1lcyBm
b3IgY3Jhc2hpbmcvdGltZW91dCBydW5zIGZvciB0aGUgc2FrZSBvZiBzZWVpbmcgaWYKLSAgICAg
ICAgICAgIC8vIGEgdGVzdCBzaG91bGQgYmUgbWFya2VkIHNsb3cuCi0gICAgICAgICAgICBpZiAo
Y3VycmVudFJlc3VsdCAhPSAnQycgJiYgY3VycmVudFJlc3VsdCAhPSAnVCcpCi0gICAgICAgICAg
ICAgICAgcmVzdWx0c0ZvclRlc3Quc2xvd2VzdE5vblRpbWVvdXRDcmFzaFRpbWUgPSBNYXRoLm1h
eChyZXN1bHRzRm9yVGVzdC5zbG93ZXN0Tm9uVGltZW91dENyYXNoVGltZSwgdGltZSk7Ci0gICAg
ICAgICAgICByZXN1bHRzRm9yVGVzdC5zbG93ZXN0VGltZSA9IE1hdGgubWF4KHJlc3VsdHNGb3JU
ZXN0LnNsb3dlc3RUaW1lLCB0aW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIHByb2Nlc3NNaXNz
aW5nQW5kRXh0cmFFeHBlY3RhdGlvbnMocmVzdWx0c0ZvclRlc3QpOwotICAgICAgICBmYWlsdXJl
cy5wdXNoKHJlc3VsdHNGb3JUZXN0KTsKLQotICAgICAgICBpZiAoIWdfdGVzdFRvUmVzdWx0c01h
cFt0ZXN0XSkKLSAgICAgICAgICAgIGdfdGVzdFRvUmVzdWx0c01hcFt0ZXN0XSA9IFtdOwotICAg
ICAgICBnX3Rlc3RUb1Jlc3VsdHNNYXBbdGVzdF0ucHVzaChyZXN1bHRzRm9yVGVzdCk7Ci0gICAg
fQotCi0gICAgZ19wZXJCdWlsZGVyRmFpbHVyZXNbYnVpbGRlck5hbWVdID0gZmFpbHVyZXM7Ci19
Ci0KLWZ1bmN0aW9uIHByb2Nlc3NNaXNzaW5nQW5kRXh0cmFFeHBlY3RhdGlvbnMocmVzdWx0c0Zv
clRlc3QpCi17Ci0gICAgLy8gSGV1cmlzdGljIGZvciBkZXRlcm1pbmluZyB3aGV0aGVyIGV4cGVj
dGF0aW9ucyBhcHBseSB0byBhIGdpdmVuIHRlc3Q6Ci0gICAgLy8gLUlmIGEgdGVzdCByZXN1bHQg
aGFwcGVucyA8IE1JTl9SVU5TX0ZPUl9GTEFLRSwgdGhlbiBjb25zaWRlciBpdCBhIGZsYWt5Ci0g
ICAgLy8gcmVzdWx0IGFuZCBpbmNsdWRlIGl0IGluIHRoZSBsaXN0IG9mIGV4cGVjdGVkIHJlc3Vs
dHMuCi0gICAgLy8gLU90aGVyd2lzZSwgZ3JhYiB0aGUgZmlyc3QgY29udGlndW91cyBzZXQgb2Yg
cnVucyB3aXRoIHRoZSBzYW1lIHJlc3VsdAotICAgIC8vIGZvciA+PSBNSU5fUlVOU19GT1JfRkxB
S0UgYW5kIGlnbm9yZSBhbGwgZm9sbG93aW5nIHJ1bnMgPj0KLSAgICAvLyBNSU5fUlVOU19GT1Jf
RkxBS0UuCi0gICAgLy8gVGhpcyBsZXRzIHVzIHJ1bGUgb3V0IGNvbW1vbiBjYXNlcyBvZiBhIHRl
c3QgY2hhbmdpbmcgZXhwZWN0YXRpb25zIGZvcgotICAgIC8vIGEgZmV3IHJ1bnMsIHRoZW4gYmVp
bmcgZml4ZWQgb3Igb3RoZXJ3aXNlIG1vZGlmaWVkIGluIGEgbm9uLWZsYWt5IHdheS4KLSAgICB2
YXIgcmF3UmVzdWx0cyA9IHJlc3VsdHNGb3JUZXN0LnJhd1Jlc3VsdHM7Ci0KLSAgICAvLyBJZiB0
aGUgZmlyc3QgcmVzdWx0IGlzIG5vLWRhdGEgdGhhdCBtZWFucyB0aGUgdGVzdCBpcyBza2lwcGVk
IG9yIGlzCi0gICAgLy8gYmVpbmcgcnVuIG9uIGEgZGlmZmVyZW50IGJ1aWxkZXIgKGUuZy4gbW92
ZWQgZnJvbSBvbmUgc2hhcmQgdG8gYW5vdGhlcikuCi0gICAgLy8gSWdub3JlIHRoZXNlIHJlc3Vs
dHMgc2luY2Ugd2UgaGF2ZSBubyByZWFsIGRhdGEgYWJvdXQgd2hhdCdzIGdvaW5nIG9uLgotICAg
IGlmIChyYXdSZXN1bHRzWzBdW1JMRS5WQUxVRV0gPT0gJ04nKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBPbmx5IGNvbnNpZGVyIGZsYWtlIGlmIGl0IGRvZXNuJ3QgaGFwcGVuIHR3aWNlIGlu
IGEgcm93LgotICAgIHZhciBNSU5fUlVOU19GT1JfRkxBS0UgPSAyOwotICAgIHZhciByZXN1bHRz
TWFwID0ge30KLSAgICB2YXIgbnVtUmVzdWx0c1NlZW4gPSAwOwotICAgIHZhciBoYXZlU2Vlbk5v
bkZsYWtlUmVzdWx0ID0gZmFsc2U7Ci0gICAgdmFyIG51bVJlYWxSZXN1bHRzID0gMDsKLQotICAg
IHZhciBzZWVuUmVzdWx0cyA9IHt9OwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmF3UmVzdWx0
cy5sZW5ndGg7IGkrKykgewotICAgICAgICB2YXIgbnVtUmVzdWx0cyA9IHJhd1Jlc3VsdHNbaV1b
UkxFLkxFTkdUSF07Ci0gICAgICAgIG51bVJlc3VsdHNTZWVuICs9IG51bVJlc3VsdHM7Ci0KLSAg
ICAgICAgdmFyIHJlc3VsdCA9IHJhd1Jlc3VsdHNbaV1bUkxFLlZBTFVFXTsKLQotICAgICAgICB2
YXIgaGFzTWluUnVucyA9IG51bVJlc3VsdHMgPj0gTUlOX1JVTlNfRk9SX0ZMQUtFOwotICAgICAg
ICBpZiAoaGF2ZVNlZW5Ob25GbGFrZVJlc3VsdCAmJiBoYXNNaW5SdW5zKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGVsc2UgaWYgKGhhc01pblJ1bnMpCi0gICAgICAgICAgICBoYXZl
U2Vlbk5vbkZsYWtlUmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoIXNlZW5SZXN1bHRz
W3Jlc3VsdF0pIHsKLSAgICAgICAgICAgIC8vIE9ubHkgY29uc2lkZXIgYSBzaG9ydC1saXZlZCBy
ZXN1bHQgaWYgd2UndmUgc2VlbiBpdCBtb3JlIHRoYW4gb25jZS4KLSAgICAgICAgICAgIC8vIE90
aGVyd2lzZSwgd2UgaW5jbHVkZSBsb3RzIG9mIGZhbHNlLXBvc2l0aXZlcyBkdWUgdG8gdGVzdHMg
dGhhdCBmYWlsCi0gICAgICAgICAgICAvLyBmb3IgYSBjb3VwbGUgcnVucyBhbmQgdGhlbiBzdGFy
dCBwYXNzaW5nLgotICAgICAgICAgICAgc2VlblJlc3VsdHNbcmVzdWx0XSA9IHRydWU7Ci0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBleHBlY3RhdGlvbiA9
IGV4cGVjdGF0aW9uc0ZpbGVTdHJpbmdGb3JSZXN1bHQocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0
c01hcFtleHBlY3RhdGlvbl0gPSB0cnVlOwotICAgICAgICBudW1SZWFsUmVzdWx0cysrOwotICAg
IH0KLQotICAgIHJlc3VsdHNGb3JUZXN0LmZsaXBzID0gaSAtIDE7Ci0gICAgcmVzdWx0c0ZvclRl
c3QuaXNGbGFreSA9IG51bVJlYWxSZXN1bHRzID4gMTsKLQotICAgIHZhciBtaXNzaW5nRXhwZWN0
YXRpb25zID0gW107Ci0gICAgdmFyIGV4dHJhRXhwZWN0YXRpb25zID0gW107Ci0KLSAgICBpZiAo
Z19oaXN0b3J5LmlzTGF5b3V0VGVzdFJlc3VsdHMoKSkgewotICAgICAgICB2YXIgZXhwZWN0YXRp
b25zQXJyYXkgPSByZXN1bHRzRm9yVGVzdC5leHBlY3RhdGlvbnMgPyByZXN1bHRzRm9yVGVzdC5l
eHBlY3RhdGlvbnMuc3BsaXQoJyAnKSA6IFtdOwotICAgICAgICBleHRyYUV4cGVjdGF0aW9ucyA9
IGV4cGVjdGF0aW9uc0FycmF5LmZpbHRlcigKLSAgICAgICAgICAgIGZ1bmN0aW9uKGVsZW1lbnQp
IHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogT25jZSBhbGwgdGhlIEZBSUwgbGluZXMgYXJl
IHJlbW92ZWQgZnJvbQotICAgICAgICAgICAgICAgIC8vIFRlc3RFeHBlY3RhdGlvbnMsIGRlbGV0
ZSBhbGwgdGhlIGxlZ2FjeUV4cGVjdGF0aW9uc1NlbWFudGljcwotICAgICAgICAgICAgICAgIC8v
IGNvZGUuCi0gICAgICAgICAgICAgICAgaWYgKGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0
YXRlLmxlZ2FjeUV4cGVjdGF0aW9uc1NlbWFudGljcykgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoZWxlbWVudCA9PSAnRkFJTCcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgRkFJTF9SRVNVTFRTLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdHNNYXBbRkFJTF9SRVNVTFRTW2ldXSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gZWxl
bWVudCAmJiAhcmVzdWx0c01hcFtlbGVtZW50XSAmJiAhc3RyaW5nLmNvbnRhaW5zKGVsZW1lbnQs
ICdCVUcnKTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgIGZvciAodmFyIHJlc3VsdCBpbiBy
ZXN1bHRzTWFwKSB7Ci0gICAgICAgICAgICByZXN1bHRzRm9yVGVzdC5hY3R1YWxSZXN1bHRzLnB1
c2gocmVzdWx0KTsKLSAgICAgICAgICAgIHZhciBoYXNFeHBlY3RhdGlvbiA9IGZhbHNlOwotICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RhdGlvbnNBcnJheS5sZW5ndGg7IGkr
KykgewotICAgICAgICAgICAgICAgIHZhciBleHBlY3RhdGlvbiA9IGV4cGVjdGF0aW9uc0FycmF5
W2ldOwotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBPbmNlIGFsbCB0aGUgRkFJTCBsaW5lcyBh
cmUgcmVtb3ZlZCBmcm9tCi0gICAgICAgICAgICAgICAgLy8gVGVzdEV4cGVjdGF0aW9ucywgZGVs
ZXRlIGFsbCB0aGUgbGVnYWN5RXhwZWN0YXRpb25zU2VtYW50aWNzCi0gICAgICAgICAgICAgICAg
Ly8gY29kZS4KLSAgICAgICAgICAgICAgICBpZiAoZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmlj
U3RhdGUubGVnYWN5RXhwZWN0YXRpb25zU2VtYW50aWNzKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChleHBlY3RhdGlvbiA9PSAnRkFJTCcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciAodmFyIGogPSAwOyBqIDwgRkFJTF9SRVNVTFRTLmxlbmd0aDsgaisrKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBGQUlMX1JFU1VMVFNbal0pIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzRXhwZWN0YXRpb24gPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IGV4cGVj
dGF0aW9uKQotICAgICAgICAgICAgICAgICAgICBoYXNFeHBlY3RhdGlvbiA9IHRydWU7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoaGFzRXhwZWN0YXRpb24pCi0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBleHBlY3Rh
dGlvbnMgZm9yIGEgdGVzdCBhbmQgaXQgb25seSBwYXNzZXMsIHRoZW4gZG9uJ3QKLSAgICAgICAg
ICAgIC8vIGxpc3QgUEFTUyBhcyBhIG1pc3NpbmcgZXhwZWN0YXRpb24uIFdlIG9ubHkgd2FudCB0
byBsaXN0IFBBU1MgaWYgaXQKLSAgICAgICAgICAgIC8vIGZsYWt5IHBhc3Nlcywgc28gdGhlcmUg
d291bGQgYmUgb3RoZXIgZXhwZWN0YXRpb25zLgotICAgICAgICAgICAgaWYgKCFoYXNFeHBlY3Rh
dGlvbiAmJiAhKCFleHBlY3RhdGlvbnNBcnJheS5sZW5ndGggJiYgcmVzdWx0ID09ICdQQVNTJyAm
JiBudW1SZWFsUmVzdWx0cyA9PSAxKSkKLSAgICAgICAgICAgICAgICBtaXNzaW5nRXhwZWN0YXRp
b25zLnB1c2gocmVzdWx0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE9ubHkgaGlnaGxpZ2h0
IHRlc3RzIHRoYXQgdGFrZSA+IDIgc2Vjb25kcyBhcyBuZWVkaW5nIHRvIGJlIG1hcmtlZCBhcwot
ICAgICAgICAvLyBzbG93LiBUaGVyZSBhcmUgdG9vIG1hbnkgdGVzdHMgdGhhdCB0YWtlIH4yIHNl
Y29uZHMgZXZlcnkgY291cGxlCi0gICAgICAgIC8vIGh1bmRyZWQgcnVucy4gSXQncyBub3Qgd29y
dGggdGhlIG1hbnVhbCBtYWludGVuYW5jZSBlZmZvcnQuCi0gICAgICAgIC8vIEFsc28sIGlmIGEg
dGVzdCB0aW1lcyBvdXQsIHRoZW4gaXQgc2hvdWxkIG5vdCBiZSBtYXJrZWQgYXMgc2xvdy4KLSAg
ICAgICAgdmFyIG1pblRpbWVGb3JOZWVkc1Nsb3cgPSBpc0RlYnVnKHJlc3VsdHNGb3JUZXN0LmJ1
aWxkZXIpID8gMiA6IDE7Ci0gICAgICAgIGlmIChpc1Nsb3dUZXN0KHJlc3VsdHNGb3JUZXN0KSAm
JiAhcmVzdWx0c01hcFsnVElNRU9VVCddICYmICghcmVzdWx0c0ZvclRlc3QubW9kaWZpZXJzIHx8
ICFzdHJpbmcuY29udGFpbnMocmVzdWx0c0ZvclRlc3QubW9kaWZpZXJzLCAnU0xPVycpKSkKLSAg
ICAgICAgICAgIG1pc3NpbmdFeHBlY3RhdGlvbnMucHVzaCgnU0xPVycpOwotICAgICAgICBlbHNl
IGlmIChpc0Zhc3RUZXN0KHJlc3VsdHNGb3JUZXN0KSAmJiByZXN1bHRzRm9yVGVzdC5tb2RpZmll
cnMgJiYgc3RyaW5nLmNvbnRhaW5zKHJlc3VsdHNGb3JUZXN0Lm1vZGlmaWVycywgJ1NMT1cnKSkK
LSAgICAgICAgICAgIGV4dHJhRXhwZWN0YXRpb25zLnB1c2goJ1NMT1cnKTsKLQotICAgICAgICAv
LyBJZiB0aGVyZSBhcmUgbm8gbWlzc2luZyByZXN1bHRzIG9yIG1vZGlmaWVycyBiZXNpZGVzIGJ1
aWxkCi0gICAgICAgIC8vIHR5cGUsIHBsYXRmb3JtLCBvciBidWcgYW5kIHRoZSBleHBlY3RhdGlv
bnMgYXJlIGFsbCBleHRyYQotICAgICAgICAvLyB0aGF0IGlzLCBleHRyYUV4cGVjdGF0aW9ucyAt
IGV4cGVjdGF0aW9ucyA9IFBBU1MsCi0gICAgICAgIC8vIGluY2x1ZGUgUEFTUyBhcyBleHRyYSwg
c2luY2UgdGhhdCBtZWFucyB0aGlzIGxpbmUgaW4KLSAgICAgICAgLy8gdGVzdF9leHBlY3RhdGlv
bnMgY2FuIGJlIGRlbGV0ZWQuLgotICAgICAgICBpZiAoIW1pc3NpbmdFeHBlY3RhdGlvbnMubGVu
Z3RoICYmICEocmVzdWx0c0ZvclRlc3QubW9kaWZpZXJzICYmIHJlYWxNb2RpZmllcnMocmVzdWx0
c0ZvclRlc3QubW9kaWZpZXJzKSkpIHsKLSAgICAgICAgICAgIHZhciBleHRyYVBsdXNQYXNzID0g
ZXh0cmFFeHBlY3RhdGlvbnMuY29uY2F0KFsnUEFTUyddKTsKLSAgICAgICAgICAgIGlmIChleHRy
YVBsdXNQYXNzLnNvcnQoKS50b1N0cmluZygpID09IGV4cGVjdGF0aW9uc0FycmF5LnNsaWNlKDAp
LnNvcnQoKS50b1N0cmluZygpKQotICAgICAgICAgICAgICAgIGV4dHJhRXhwZWN0YXRpb25zLnB1
c2goJ1BBU1MnKTsKLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgcmVzdWx0c0ZvclRlc3QubWVl
dHNFeHBlY3RhdGlvbnMgPSAhbWlzc2luZ0V4cGVjdGF0aW9ucy5sZW5ndGggJiYgIWV4dHJhRXhw
ZWN0YXRpb25zLmxlbmd0aDsKLSAgICByZXN1bHRzRm9yVGVzdC5taXNzaW5nID0gbWlzc2luZ0V4
cGVjdGF0aW9ucy5zb3J0KCkuam9pbignICcpOwotICAgIHJlc3VsdHNGb3JUZXN0LmV4dHJhID0g
ZXh0cmFFeHBlY3RhdGlvbnMuc29ydCgpLmpvaW4oJyAnKTsKLX0KLQotCi12YXIgQlVHX1VSTF9Q
UkVGSVggPSAnPGEgaHJlZj0iaHR0cHM6Ly8nOwotdmFyIEJVR19VUkxfUE9TVEZJWCA9ICcvJDEi
PmNyYnVnLmNvbS8kMTwvYT4gJzsKLXZhciBXRUJLSVRfQlVHX1VSTF9QT1NURklYID0gJy8kMSI+
d2Via2l0Lm9yZy9iLyQxPC9hPiAnOwotdmFyIElOVEVSTkFMX0JVR19SRVBMQUNFX1ZBTFVFID0g
QlVHX1VSTF9QUkVGSVggKyAnYicgKyBCVUdfVVJMX1BPU1RGSVg7Ci12YXIgRVhURVJOQUxfQlVH
X1JFUExBQ0VfVkFMVUUgPSBCVUdfVVJMX1BSRUZJWCArICdjcmJ1Zy5jb20nICsgQlVHX1VSTF9Q
T1NURklYOwotdmFyIFdFQktJVF9CVUdfUkVQTEFDRV9WQUxVRSA9IEJVR19VUkxfUFJFRklYICsg
J3dlYmtpdC5vcmcvYicgKyBXRUJLSVRfQlVHX1VSTF9QT1NURklYOwotCi1mdW5jdGlvbiBodG1s
Rm9yQnVncyhidWdzKQotewotICAgIGJ1Z3MgPSBidWdzLnJlcGxhY2UoL2NyYnVnLmNvbVwvKFxk
KykoXCB8JCkvZywgRVhURVJOQUxfQlVHX1JFUExBQ0VfVkFMVUUpOwotICAgIGJ1Z3MgPSBidWdz
LnJlcGxhY2UoL3dlYmtpdC5vcmdcL2JcLyhcZCspKFwgfCQpL2csIFdFQktJVF9CVUdfUkVQTEFD
RV9WQUxVRSk7Ci0gICAgcmV0dXJuIGJ1Z3M7Ci19Ci0KLWZ1bmN0aW9uIGxpbmtIVE1MVG9PcGVu
V2luZG93KHVybCwgdGV4dCkKLXsKLSAgICByZXR1cm4gJzxhIGhyZWY9IicgKyB1cmwgKyAnIiB0
YXJnZXQ9Il9ibGFuayI+JyArIHRleHQgKyAnPC9hPic7Ci19Ci0KLS8vIEZJWE1FOiByZXBsYWNl
ZCB3aXRoIHVpLmh0bWwud2ViS2l0UmV2aXNpb25MaW5rCi1mdW5jdGlvbiBjcmVhdGVCbGFtZUxp
c3RIVE1MKHJldmlzaW9ucywgaW5kZXgsIHVybEJhc2UsIHNlcGFyYXRvciwgcmVwbykKLXsKLSAg
ICB2YXIgdGhpc1JldmlzaW9uID0gcmV2aXNpb25zW2luZGV4XTsKLSAgICBpZiAoIXRoaXNSZXZp
c2lvbikKLSAgICAgICAgcmV0dXJuICcnOwotCi0gICAgdmFyIHByZXZpb3VzUmV2aXNpb24gPSBy
ZXZpc2lvbnNbaW5kZXggKyAxXTsKLSAgICBpZiAocHJldmlvdXNSZXZpc2lvbiAmJiBwcmV2aW91
c1JldmlzaW9uICE9IHRoaXNSZXZpc2lvbikgewotICAgICAgICBwcmV2aW91c1JldmlzaW9uKys7
Ci0gICAgICAgIHJldHVybiBsaW5rSFRNTFRvT3BlbldpbmRvdyh1cmxCYXNlICsgdGhpc1Jldmlz
aW9uICsgc2VwYXJhdG9yICsgcHJldmlvdXNSZXZpc2lvbiwKLSAgICAgICAgICAgIHJlcG8gKyAn
IGJsYW1lbGlzdCByJyArIHByZXZpb3VzUmV2aXNpb24gKyAnOnInICsgdGhpc1JldmlzaW9uKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuICdBdCAnICsgcmVwbyArICcgcmV2aXNpb246ICcg
KyB0aGlzUmV2aXNpb247Ci19Ci0KLS8vIFJldHVybnMgd2hldGhlciB0aGUgcmVzdWx0IGZvciBp
bmRleCd0aCByZXN1bHQgZm9yIHRlc3ROYW1lIG9uIGJ1aWxkZXIgd2FzCi0vLyBhIGZhaWx1cmUu
Ci1mdW5jdGlvbiBpc0ZhaWx1cmUoYnVpbGRlciwgdGVzdE5hbWUsIGluZGV4KQotewotICAgIHZh
ciBjdXJyZW50SW5kZXggPSAwOwotICAgIHZhciByYXdSZXN1bHRzID0gZ19yZXN1bHRzQnlCdWls
ZGVyW2J1aWxkZXJdLnRlc3RzW3Rlc3ROYW1lXS5yZXN1bHRzOwotICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgcmF3UmVzdWx0cy5sZW5ndGg7IGkrKykgewotICAgICAgICBjdXJyZW50SW5kZXggKz0g
cmF3UmVzdWx0c1tpXVtSTEUuTEVOR1RIXTsKLSAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA+IGlu
ZGV4KQotICAgICAgICAgICAgcmV0dXJuIGlzRmFpbGluZ1Jlc3VsdChyYXdSZXN1bHRzW2ldW1JM
RS5WQUxVRV0pOwotICAgIH0KLSAgICBjb25zb2xlLmVycm9yKCdJbmRleCBleGNlZWRzIG51bWJl
ciBvZiByZXN1bHRzOiAnICsgaW5kZXgpOwotfQotCi0vLyBSZXR1cm5zIGFuIGFycmF5IG9mIGlu
ZGV4ZXMgZm9yIGFsbCBidWlsZHMgd2hlcmUgdGhpcyB0ZXN0IGZhaWxlZC4KLWZ1bmN0aW9uIGlu
ZGV4ZXNGb3JGYWlsdXJlcyhidWlsZGVyLCB0ZXN0TmFtZSkKLXsKLSAgICB2YXIgcmF3UmVzdWx0
cyA9IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS50ZXN0c1t0ZXN0TmFtZV0ucmVzdWx0czsK
LSAgICB2YXIgYnVpbGROdW1iZXJzID0gZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLmJ1aWxk
TnVtYmVyczsKLSAgICB2YXIgaW5kZXggPSAwOwotICAgIHZhciBmYWlsdXJlcyA9IFtdOwotICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgcmF3UmVzdWx0cy5sZW5ndGg7IGkrKykgewotICAgICAgICB2
YXIgbnVtUmVzdWx0cyA9IHJhd1Jlc3VsdHNbaV1bUkxFLkxFTkdUSF07Ci0gICAgICAgIGlmIChp
c0ZhaWxpbmdSZXN1bHQocmF3UmVzdWx0c1tpXVtSTEUuVkFMVUVdKSkgewotICAgICAgICAgICAg
Zm9yICh2YXIgaiA9IDA7IGogPCBudW1SZXN1bHRzOyBqKyspCi0gICAgICAgICAgICAgICAgZmFp
bHVyZXMucHVzaChpbmRleCArIGopOwotICAgICAgICB9Ci0gICAgICAgIGluZGV4ICs9IG51bVJl
c3VsdHM7Ci0gICAgfQotICAgIHJldHVybiBmYWlsdXJlczsKLX0KLQotLy8gUmV0dXJucyB0aGUg
cGF0aCB0byB0aGUgZmFpbHVyZSBsb2cgZm9yIHRoaXMgbm9uLXdlYmtpdCB0ZXN0LgotZnVuY3Rp
b24gcGF0aFRvRmFpbHVyZUxvZyh0ZXN0TmFtZSkKLXsKLSAgICByZXR1cm4gJy9zdGVwcy8nICsg
Z19oaXN0b3J5LmNyb3NzRGFzaGJvYXJkU3RhdGUudGVzdFR5cGUgKyAnL2xvZ3MvJyArIHRlc3RO
YW1lLnNwbGl0KCcuJylbMV0KLX0KLQotZnVuY3Rpb24gc2hvd1BvcHVwRm9yQnVpbGQoZSwgYnVp
bGRlciwgaW5kZXgsIG9wdF90ZXN0TmFtZSkKLXsKLSAgICB2YXIgaHRtbCA9ICcnOwotCi0gICAg
dmFyIHRpbWUgPSBnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0uc2Vjb25kc1NpbmNlRXBvY2hb
aW5kZXhdOwotICAgIGlmICh0aW1lKSB7Ci0gICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUodGlt
ZSAqIDEwMDApOwotICAgICAgICBodG1sICs9IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCkgKyAn
ICcgKyBkYXRlLnRvTG9jYWxlVGltZVN0cmluZygpOwotICAgIH0KLQotICAgIHZhciBidWlsZE51
bWJlciA9IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS5idWlsZE51bWJlcnNbaW5kZXhdOwot
ICAgIHZhciBtYXN0ZXIgPSBidWlsZGVyTWFzdGVyKGJ1aWxkZXIpOwotICAgIHZhciBidWlsZEJh
c2VQYXRoID0gbWFzdGVyLmxvZ1BhdGgoYnVpbGRlciwgYnVpbGROdW1iZXIpOwotCi0gICAgaHRt
bCArPSAnPHVsPjxsaT4nICsgbGlua0hUTUxUb09wZW5XaW5kb3coYnVpbGRCYXNlUGF0aCwgJ0J1
aWxkIGxvZycpICsKLSAgICAgICAgJzwvbGk+PGxpPicgKwotICAgICAgICBjcmVhdGVCbGFtZUxp
c3RIVE1MKGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS53ZWJraXRSZXZpc2lvbiwgaW5kZXgs
Ci0gICAgICAgICAgICAnaHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvbG9nLz92ZXJib3NlPW9uJnJl
dj0nLCAnJnN0b3BfcmV2PScsCi0gICAgICAgICAgICAnV2ViS2l0JykgKwotICAgICAgICAnPC9s
aT4nOwotCi0gICAgaWYgKG1hc3Rlci5uYW1lID09IFdFQktJVF9CVUlMREVSX01BU1RFUikgewot
ICAgICAgICB2YXIgcmV2aXNpb24gPSBnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0ud2Via2l0
UmV2aXNpb25baW5kZXhdOwotICAgICAgICBodG1sICs9ICc8bGk+PHNwYW4gY2xhc3M9bGluayBv
bmNsaWNrPSJnX2hpc3Rvcnkuc2V0UXVlcnlQYXJhbWV0ZXIoXCdyZXZpc2lvblwnLCcgKwotICAg
ICAgICAgICAgcmV2aXNpb24gKyAnKSI+U2hvdyByZXN1bHRzIGZvciBXZWJLaXQgcicgKyByZXZp
c2lvbiArCi0gICAgICAgICAgICAnPC9zcGFuPjwvbGk+JzsKLSAgICB9IGVsc2UKLSAgICAgICAg
Y29uc29sZS5lcnJvcigiVW5leHBlY3RlZCBtYXN0ZXIgbmFtZTogIiArIG1hc3Rlci5uYW1lKTsK
LQotICAgIGlmICghZ19oaXN0b3J5LmlzTGF5b3V0VGVzdFJlc3VsdHMoKSAmJiBvcHRfdGVzdE5h
bWUgJiYgaXNGYWlsdXJlKGJ1aWxkZXIsIG9wdF90ZXN0TmFtZSwgaW5kZXgpKQotICAgICAgICBo
dG1sICs9ICc8bGk+JyArIGxpbmtIVE1MVG9PcGVuV2luZG93KGJ1aWxkQmFzZVBhdGggKyBwYXRo
VG9GYWlsdXJlTG9nKG9wdF90ZXN0TmFtZSksICdGYWlsdXJlIGxvZycpICsgJzwvbGk+JzsKLQot
ICAgIGh0bWwgKz0gJzwvdWw+JzsKLSAgICB1aS5wb3B1cC5zaG93KGUudGFyZ2V0LCBodG1sKTsK
LX0KLQotZnVuY3Rpb24gaHRtbEZvclRlc3RSZXN1bHRzKHRlc3QpCi17Ci0gICAgdmFyIGh0bWwg
PSAnJzsKLSAgICB2YXIgcmVzdWx0cyA9IHRlc3QucmF3UmVzdWx0cy5jb25jYXQoKTsKLSAgICB2
YXIgdGltZXMgPSB0ZXN0LnJhd1RpbWVzLmNvbmNhdCgpOwotICAgIHZhciBidWlsZGVyID0gdGVz
dC5idWlsZGVyOwotICAgIHZhciBtYXN0ZXIgPSBidWlsZGVyTWFzdGVyKGJ1aWxkZXIpOwotICAg
IHZhciBidWlsZE51bWJlcnMgPSBnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0uYnVpbGROdW1i
ZXJzOwotCi0gICAgdmFyIGluZGV4VG9SZXBsYWNlQ3VycmVudFJlc3VsdCA9IC0xOwotICAgIHZh
ciBpbmRleFRvUmVwbGFjZUN1cnJlbnRUaW1lID0gLTE7Ci0gICAgdmFyIGN1cnJlbnRSZXN1bHRB
cnJheSwgY3VycmVudFRpbWVBcnJheSwgY3VycmVudFJlc3VsdCwgaW5uZXJIVE1MLCByZXN1bHRT
dHJpbmc7Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWlsZE51bWJlcnMubGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgaWYgKGkgPiBpbmRleFRvUmVwbGFjZUN1cnJlbnRSZXN1bHQpIHsKLSAgICAg
ICAgICAgIGN1cnJlbnRSZXN1bHRBcnJheSA9IHJlc3VsdHMuc2hpZnQoKTsKLSAgICAgICAgICAg
IGlmIChjdXJyZW50UmVzdWx0QXJyYXkpIHsKLSAgICAgICAgICAgICAgICBjdXJyZW50UmVzdWx0
ID0gY3VycmVudFJlc3VsdEFycmF5W1JMRS5WQUxVRV07Ci0gICAgICAgICAgICAgICAgLy8gVHJl
YXQgc2ltcGxpZmllZCBkaWZmIGZhaWx1cmVzIGFzIGp1c3QgdGV4dCBmYWlsdXJlcy4KLSAgICAg
ICAgICAgICAgICBpZiAoY3VycmVudFJlc3VsdCA9PSAnUycpCi0gICAgICAgICAgICAgICAgICAg
IGN1cnJlbnRSZXN1bHQgPSAnRic7Ci0gICAgICAgICAgICAgICAgaW5kZXhUb1JlcGxhY2VDdXJy
ZW50UmVzdWx0ICs9IGN1cnJlbnRSZXN1bHRBcnJheVtSTEUuTEVOR1RIXTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3VycmVudFJlc3VsdCA9ICdOJzsKLSAgICAgICAg
ICAgICAgICBpbmRleFRvUmVwbGFjZUN1cnJlbnRSZXN1bHQgKz0gYnVpbGROdW1iZXJzLmxlbmd0
aDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlc3VsdFN0cmluZyA9IGV4cGVjdGF0aW9u
c0ZpbGVTdHJpbmdGb3JSZXN1bHQoY3VycmVudFJlc3VsdCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoaSA+IGluZGV4VG9SZXBsYWNlQ3VycmVudFRpbWUpIHsKLSAgICAgICAgICAgIGN1cnJl
bnRUaW1lQXJyYXkgPSB0aW1lcy5zaGlmdCgpOwotICAgICAgICAgICAgdmFyIGN1cnJlbnRUaW1l
ID0gMDsKLSAgICAgICAgICAgIGlmIChjdXJyZW50UmVzdWx0QXJyYXkpIHsKLSAgICAgICAgICAg
ICAgY3VycmVudFRpbWUgPSBjdXJyZW50VGltZUFycmF5W1JMRS5WQUxVRV07Ci0gICAgICAgICAg
ICAgIGluZGV4VG9SZXBsYWNlQ3VycmVudFRpbWUgKz0gY3VycmVudFRpbWVBcnJheVtSTEUuTEVO
R1RIXTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICBpbmRleFRvUmVwbGFjZUN1
cnJlbnRUaW1lICs9IGJ1aWxkTnVtYmVycy5sZW5ndGg7Ci0KLSAgICAgICAgICAgIGlubmVySFRN
TCA9IGN1cnJlbnRUaW1lIHx8ICcmbmJzcDsnOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIGV4
dHJhQ2xhc3NOYW1lcyA9ICcnOwotICAgICAgICB2YXIgd2Via2l0UmV2aXNpb24gPSBnX3Jlc3Vs
dHNCeUJ1aWxkZXJbYnVpbGRlcl0ud2Via2l0UmV2aXNpb247Ci0gICAgICAgIHZhciBpc1dlYmtp
dE1lcmdlID0gd2Via2l0UmV2aXNpb25baSArIDFdICYmIHdlYmtpdFJldmlzaW9uW2ldICE9IHdl
YmtpdFJldmlzaW9uW2kgKyAxXTsKLSAgICAgICAgaWYgKGlzV2Via2l0TWVyZ2UgJiYgbWFzdGVy
Lm5hbWUgIT0gV0VCS0lUX0JVSUxERVJfTUFTVEVSKQotICAgICAgICAgICAgZXh0cmFDbGFzc05h
bWVzICs9ICcgbWVyZ2UnOwotCi0gICAgICAgIGh0bWwgKz0gJzx0ZCB0aXRsZT0iJyArIChyZXN1
bHRTdHJpbmcgfHwgJ05PIERBVEEnKSArICcuIENsaWNrIGZvciBtb3JlIGluZm8uIiBjbGFzcz0i
cmVzdWx0cyAnICsgY3VycmVudFJlc3VsdCArCi0gICAgICAgICAgZXh0cmFDbGFzc05hbWVzICsg
JyIgb25jbGljaz1cJ3Nob3dQb3B1cEZvckJ1aWxkKGV2ZW50LCAiJyArIGJ1aWxkZXIgKyAnIiwn
ICsgaSArICcsIicgKyB0ZXN0LnRlc3QgKyAnIilcJz4nICsgaW5uZXJIVE1MOwotICAgIH0KLSAg
ICByZXR1cm4gaHRtbDsKLX0KLQotZnVuY3Rpb24gaHRtbEZvclRlc3RzV2l0aEV4cGVjdGF0aW9u
c0J1dE5vRmFpbHVyZXMoYnVpbGRlcikKLXsKLSAgICB2YXIgdGVzdHMgPSBnX3BlckJ1aWxkZXJX
aXRoRXhwZWN0YXRpb25zQnV0Tm9GYWlsdXJlc1tidWlsZGVyXTsKLSAgICB2YXIgc2tpcHBlZFBh
dGhzID0gZ19wZXJCdWlsZGVyU2tpcHBlZFBhdGhzW2J1aWxkZXJdOwotICAgIHZhciBzaG93VW5l
eHBlY3RlZFBhc3Nlc0xpbmsgPSAgbGlua0hUTUxUb1RvZ2dsZVN0YXRlKCdzaG93VW5leHBlY3Rl
ZFBhc3NlcycsICd0ZXN0cyB0aGF0IGhhdmUgbm90IGZhaWxlZCBpbiBsYXN0ICcgKyBnX3Jlc3Vs
dHNCeUJ1aWxkZXJbYnVpbGRlcl0uYnVpbGROdW1iZXJzLmxlbmd0aCArICcgcnVucycpOwotICAg
IHZhciBzaG93U2tpcHBlZExpbmsgPSBsaW5rSFRNTFRvVG9nZ2xlU3RhdGUoJ3Nob3dTa2lwcGVk
JywgJ3NraXBwZWQgdGVzdHMgaW4gVGVzdEV4cGVjdGF0aW9ucycpOwotICAgIAotICAgIHZhciBo
dG1sID0gJyc7Ci0gICAgaWYgKGdfaGlzdG9yeS5pc0xheW91dFRlc3RSZXN1bHRzKCkgJiYgKHRl
c3RzLmxlbmd0aCB8fCBza2lwcGVkUGF0aHMubGVuZ3RoKSkgewotICAgICAgICB2YXIgYnVpbGRJ
bmZvID0gcGxhdGZvcm1BbmRCdWlsZFR5cGUoYnVpbGRlcik7Ci0gICAgICAgIGh0bWwgKz0gJzxo
MiBzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxvY2siPkV4cGVjdGF0aW9ucyBmb3IgJyArIGJ1aWxk
SW5mby5wbGF0Zm9ybSArICctJyArIGJ1aWxkSW5mby5idWlsZFR5cGUgKyAnPC9oMj4gJzsKLSAg
ICAgICAgaWYgKCFnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5zaG93VW5leHBlY3Rl
ZFBhc3NlcyAmJiB0ZXN0cy5sZW5ndGgpCi0gICAgICAgICAgICBodG1sICs9IHNob3dVbmV4cGVj
dGVkUGFzc2VzTGluazsKLSAgICAgICAgaHRtbCArPSAnICc7Ci0gICAgICAgIGlmICghZ19oaXN0
b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUuc2hvd1NraXBwZWQgJiYgc2tpcHBlZFBhdGhzLmxl
bmd0aCkKLSAgICAgICAgICAgIGh0bWwgKz0gc2hvd1NraXBwZWRMaW5rOwotICAgIH0KLQotICAg
IHZhciBvcGVuID0gJzxkaXYgb25jbGljaz0ic2VsZWN0Q29udGVudHModGhpcykiPic7Ci0KLSAg
ICBpZiAoZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUuc2hvd1VuZXhwZWN0ZWRQYXNz
ZXMgJiYgdGVzdHMubGVuZ3RoKSB7Ci0gICAgICAgIGh0bWwgKz0gJzxkaXYgaWQ9InBhc3Npbmct
dGVzdHMiPicgKyBzaG93VW5leHBlY3RlZFBhc3Nlc0xpbms7Ci0gICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspCi0gICAgICAgICAgICBodG1sICs9IG9wZW4gKyB0
ZXN0c1tpXS50ZXN0ICsgJzwvZGl2Pic7Ci0gICAgICAgIGh0bWwgKz0gJzwvZGl2Pic7Ci0gICAg
fQotCi0gICAgaWYgKGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnNob3dTa2lwcGVk
ICYmIHNraXBwZWRQYXRocy5sZW5ndGgpCi0gICAgICAgIGh0bWwgKz0gJzxkaXYgaWQ9InNraXBw
ZWQtdGVzdHMiPicgKyBzaG93U2tpcHBlZExpbmsgKyBvcGVuICsgc2tpcHBlZFBhdGhzLmpvaW4o
JzwvZGl2PicgKyBvcGVuKSArICc8L2Rpdj48L2Rpdj4nOwotICAgIHJldHVybiBodG1sICsgJzxi
cj4nOwotfQotCi0vLyBSZXR1cm5zIHdoZXRoZXIgd2Ugc2hvdWxkIGV4Y2x1ZGUgdGVzdCByZXN1
bHRzIGZyb20gdGhlIHRlc3QgdGFibGUuCi1mdW5jdGlvbiBzaG91bGRIaWRlVGVzdCh0ZXN0UmVz
dWx0KQotewotICAgIC8vIEZvciBub24tbGF5b3V0IHRlc3RzLCB3ZSBhbHdheXMgc2hvdyBldmVy
eXRoaW5nLgotICAgIGlmICghZ19oaXN0b3J5LmlzTGF5b3V0VGVzdFJlc3VsdHMoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHRlc3RSZXN1bHQuaXNXb250Rml4U2tpcCkKLSAg
ICAgICAgcmV0dXJuICFnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5zaG93V29udEZp
eFNraXA7Ci0KLSAgICBpZiAodGVzdFJlc3VsdC5pc0ZsYWt5KQotICAgICAgICByZXR1cm4gIWdf
aGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnNob3dGbGFreTsKLQotICAgIGlmIChpc1Ns
b3dUZXN0KHRlc3RSZXN1bHQpKQotICAgICAgICByZXR1cm4gIWdfaGlzdG9yeS5kYXNoYm9hcmRT
cGVjaWZpY1N0YXRlLnNob3dTbG93OwotCi0gICAgaWYgKHRlc3RSZXN1bHQubWVldHNFeHBlY3Rh
dGlvbnMpCi0gICAgICAgIHJldHVybiAhZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUu
c2hvd0NvcnJlY3RFeHBlY3RhdGlvbnM7Ci0KLSAgICByZXR1cm4gIWdfaGlzdG9yeS5kYXNoYm9h
cmRTcGVjaWZpY1N0YXRlLnNob3dXcm9uZ0V4cGVjdGF0aW9uczsKLX0KLQotLy8gU2V0cyB0aGUg
YnJvd3NlcidzIHNlbGVjdGlvbiB0byB0aGUgZWxlbWVudCdzIGNvbnRlbnRzLgotZnVuY3Rpb24g
c2VsZWN0Q29udGVudHMoZWxlbWVudCkKLXsKLSAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2Vs
ZWN0QWxsQ2hpbGRyZW4oZWxlbWVudCk7Ci19Ci0KLWZ1bmN0aW9uIGNyZWF0ZUJ1Z0hUTUwodGVz
dCkKLXsKLSAgICB2YXIgc3ltcHRvbSA9IHRlc3QuaXNGbGFreSA/ICdmbGFreScgOiAnZmFpbGlu
Zyc7Ci0gICAgdmFyIHRpdGxlID0gZW5jb2RlVVJJQ29tcG9uZW50KCdMYXlvdXQgVGVzdCAnICsg
dGVzdC50ZXN0ICsgJyBpcyAnICsgc3ltcHRvbSk7Ci0gICAgdmFyIGRhc2hib2FyZFVSTCA9ICdo
dHRwczovL3dlYmtpdC10ZXN0LXJlc3VsdHMud2Via2l0Lm9yZy9kYXNoYm9hcmRzL2ZsYWtpbmVz
c19kYXNoYm9hcmQuaHRtbCNzaG93QWxsUnVucz10cnVlJnRlc3RzPScgKyBlbmNvZGVVUklDb21w
b25lbnQodGVzdC50ZXN0KTsKLSAgICB2YXIgZGVzY3JpcHRpb24gPSBlbmNvZGVVUklDb21wb25l
bnQoJ1RoZSBmb2xsb3dpbmcgbGF5b3V0IHRlc3QgaXMgJyArIHN5bXB0b20gKyAnIG9uICcgKwot
ICAgICAgICAnW2luc2VydCBwbGF0Zm9ybV1cblxuJyArIHRlc3QudGVzdCArICdcblxuUHJvYmFi
bGUgY2F1c2U6XG5cbicgKyAnW2luc2VydCBwcm9iYWJsZSBjYXVzZV0nICsKLSAgICAgICAgJ1xu
XG5GbGFraW5lc3MgRGFzaGJvYXJkOlxuXG4nICsgZGFzaGJvYXJkVVJMKTsKLSAgICAKLSAgICB2
YXIgY29tcG9uZW50ID0gZW5jb2RlVVJJQ29tcG9uZW50KCdUb29scyAvIFRlc3RzJyk7Ci0gICAg
dXJsID0gJ2h0dHBzOi8vYnVncy53ZWJraXQub3JnL2VudGVyX2J1Zy5jZ2k/YXNzaWduZWRfdG89
d2Via2l0LXVuYXNzaWduZWQlNDBsaXN0cy53ZWJraXQub3JnJnByb2R1Y3Q9V2ViS2l0JmZvcm1f
bmFtZT1lbnRlcl9idWcmY29tcG9uZW50PScgKyBjb21wb25lbnQgKyAnJnNob3J0X2Rlc2M9JyAr
IHRpdGxlICsgJyZjb21tZW50PScgKyBkZXNjcmlwdGlvbjsKLSAgICByZXR1cm4gJzxhIGhyZWY9
IicgKyB1cmwgKyAnIiBjbGFzcz0iZmlsZS1idWciIHRhcmdldD0iX2JsYW5rIj5GaWxlPC9hPic7
Ci19Ci0KLWZ1bmN0aW9uIGlzQ3Jvc3NCdWlsZGVyVmlldygpCi17Ci0gICAgcmV0dXJuIGdfaGlz
dG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnRlc3RzIHx8IGdfaGlzdG9yeS5kYXNoYm9hcmRT
cGVjaWZpY1N0YXRlLnJlc3VsdCB8fCBnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5l
eHBlY3RhdGlvbnNVcGRhdGU7Ci19Ci0KLWZ1bmN0aW9uIHRhYmxlSGVhZGVycyhvcHRfZ2V0QWxs
KQotewotICAgIHZhciBoZWFkZXJzID0gW107Ci0gICAgaWYgKGlzQ3Jvc3NCdWlsZGVyVmlldygp
IHx8IG9wdF9nZXRBbGwpCi0gICAgICAgIGhlYWRlcnMucHVzaCgnQnVpbGRlcicpOwotCi0gICAg
aWYgKCFpc0Nyb3NzQnVpbGRlclZpZXcoKSB8fCBvcHRfZ2V0QWxsKQotICAgICAgICBoZWFkZXJz
LnB1c2goJ1Rlc3QnKTsKLQotICAgIGlmIChnX2hpc3RvcnkuaXNMYXlvdXRUZXN0UmVzdWx0cygp
IHx8IG9wdF9nZXRBbGwpCi0gICAgICAgIGhlYWRlcnMucHVzaCgnQnVnKHMpJywgJ01vZGlmaWVy
cycsICdFeHBlY3RhdGlvbihzKScpOwotCi0gICAgaGVhZGVycy5wdXNoKCdTbG93ZXN0IFJ1bics
ICdGbGFraW5lc3MgKE51bWJlcnMgYXJlIHJ1bnRpbWVzIGluIHNlY29uZHMpJyk7Ci0gICAgcmV0
dXJuIGhlYWRlcnM7Ci19Ci0KLWZ1bmN0aW9uIGh0bWxGb3JTaW5nbGVUZXN0Um93KHRlc3QpCi17
Ci0gICAgaWYgKCFpc0Nyb3NzQnVpbGRlclZpZXcoKSAmJiBzaG91bGRIaWRlVGVzdCh0ZXN0KSkg
ewotICAgICAgICAvLyBUaGUgaW5uZXJIVE1MIGNhbGwgaXMgY29uc2lkZXJhYmx5IGZhc3RlciBp
ZiB3ZSBleGNsdWRlIHRoZSByb3dzIGZvcgotICAgICAgICAvLyBpdGVtcyB3ZSdyZSBub3Qgc2hv
d2luZyB0aGFuIGlmIHdlIGhpZGUgdGhlbSB1c2luZyBkaXNwbGF5Om5vbmUuCi0gICAgICAgIC8v
IEZvciB0aGUgY3Jvc3NCdWlsZGVyVmlldywgd2Ugd2FudCB0byBzaG93IGFsbCByb3dzIHRoZSB1
c2VyIGlzCi0gICAgICAgIC8vIGV4cGxpY2l0bHkgbGlzdGluZyB0ZXN0cyB0byB2aWV3LgotICAg
ICAgICByZXR1cm4gJyc7Ci0gICAgfQotCi0gICAgdmFyIGhlYWRlcnMgPSB0YWJsZUhlYWRlcnMo
KTsKLSAgICB2YXIgaHRtbCA9ICcnOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGVhZGVycy5s
ZW5ndGg7IGkrKykgewotICAgICAgICB2YXIgaGVhZGVyID0gaGVhZGVyc1tpXTsKLSAgICAgICAg
aWYgKHN0cmluZy5zdGFydHNXaXRoKGhlYWRlciwgJ1Rlc3QnKSB8fCBzdHJpbmcuc3RhcnRzV2l0
aChoZWFkZXIsICdCdWlsZGVyJykpIHsKLSAgICAgICAgICAgIC8vIElmIGlzQ3Jvc3NCdWlsZGVy
VmlldygpIGlzIHRydWUsIHdlJ3JlIGp1c3Qgdmlld2luZyBhIHNpbmdsZSB0ZXN0Ci0gICAgICAg
ICAgICAvLyB3aXRoIHJlc3VsdHMgZm9yIG1hbnkgYnVpbGRlcnMsIHNvIHRoZSBmaXJzdCBjb2x1
bW4gaXMgYnVpbGRlciBuYW1lcwotICAgICAgICAgICAgLy8gaW5zdGVhZCBvZiB0ZXN0IHBhdGhz
LgotICAgICAgICAgICAgdmFyIHRlc3RDZWxsQ2xhc3NOYW1lID0gJ3Rlc3QtbGluaycgKyAoaXND
cm9zc0J1aWxkZXJWaWV3KCkgPyAnIGJ1aWxkZXItbmFtZScgOiAnJyk7Ci0gICAgICAgICAgICB2
YXIgdGVzdENlbGxIVE1MID0gaXNDcm9zc0J1aWxkZXJWaWV3KCkgPyB0ZXN0LmJ1aWxkZXIgOiAn
PHNwYW4gY2xhc3M9ImxpbmsiIG9uY2xpY2s9ImdfaGlzdG9yeS5zZXRRdWVyeVBhcmFtZXRlcihc
J3Rlc3RzXCcsXCcnICsgdGVzdC50ZXN0ICsnXCcpOyI+JyArIHRlc3QudGVzdCArICc8L3NwYW4+
JzsKLQotICAgICAgICAgICAgaHRtbCArPSAnPHRyPjx0ZCBjbGFzcz0iJyArIHRlc3RDZWxsQ2xh
c3NOYW1lICsgJyI+JyArIHRlc3RDZWxsSFRNTDsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJpbmcu
c3RhcnRzV2l0aChoZWFkZXIsICdCdWcocyknKSkKLSAgICAgICAgICAgIGh0bWwgKz0gJzx0ZCBj
bGFzcz1vcHRpb25zLWNvbnRhaW5lciBidWdzPicgKyAodGVzdC5idWdzID8gaHRtbEZvckJ1Z3Mo
dGVzdC5idWdzKSA6IGNyZWF0ZUJ1Z0hUTUwodGVzdCkpOwotICAgICAgICBlbHNlIGlmIChzdHJp
bmcuc3RhcnRzV2l0aChoZWFkZXIsICdNb2RpZmllcnMnKSkKLSAgICAgICAgICAgIGh0bWwgKz0g
Jzx0ZCBjbGFzcz1vcHRpb25zLWNvbnRhaW5lcj4nICsgdGVzdC5tb2RpZmllcnM7Ci0gICAgICAg
IGVsc2UgaWYgKHN0cmluZy5zdGFydHNXaXRoKGhlYWRlciwgJ0V4cGVjdGF0aW9uKHMpJykpCi0g
ICAgICAgICAgICBodG1sICs9ICc8dGQgY2xhc3M9b3B0aW9ucy1jb250YWluZXI+JyArIHRlc3Qu
ZXhwZWN0YXRpb25zLnNwbGl0KCcgJykuam9pbignIHwgJyk7Ci0gICAgICAgIGVsc2UgaWYgKHN0
cmluZy5zdGFydHNXaXRoKGhlYWRlciwgJ1Nsb3dlc3QnKSkKLSAgICAgICAgICAgIGh0bWwgKz0g
Jzx0ZCBjbGFzcz1vcHRpb25zLWNvbnRhaW5lcj4nICsgKHRlc3Quc2xvd2VzdFRpbWUgPyB0ZXN0
LnNsb3dlc3RUaW1lICsgJ3MnIDogJycpOwotICAgICAgICBlbHNlIGlmIChzdHJpbmcuc3RhcnRz
V2l0aChoZWFkZXIsICdGbGFraW5lc3MnKSkKLSAgICAgICAgICAgIGh0bWwgKz0gaHRtbEZvclRl
c3RSZXN1bHRzKHRlc3QpOwotICAgIH0KLSAgICByZXR1cm4gaHRtbDsKLX0KLQotZnVuY3Rpb24g
c29ydENvbHVtbkZyb21UYWJsZUhlYWRlcihoZWFkZXJUZXh0KQotewotICAgIHJldHVybiBoZWFk
ZXJUZXh0LnNwbGl0KCcgJywgMSlbMF07Ci19Ci0KLWZ1bmN0aW9uIGh0bWxGb3JUYWJsZUNvbHVt
bkhlYWRlcihoZWFkZXJOYW1lLCBvcHRfZmlsbENvbFNwYW4pCi17Ci0gICAgLy8gVXNlIHRoZSBm
aXJzdCB3b3JkIG9mIHRoZSBoZWFkZXIgdGl0bGUgYXMgdGhlIHNvcnRrZXkKLSAgICB2YXIgdGhp
c1NvcnRWYWx1ZSA9IHNvcnRDb2x1bW5Gcm9tVGFibGVIZWFkZXIoaGVhZGVyTmFtZSk7Ci0gICAg
dmFyIGFycm93SFRNTCA9IHRoaXNTb3J0VmFsdWUgPT0gZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNp
ZmljU3RhdGUuc29ydENvbHVtbiA/Ci0gICAgICAgICc8c3BhbiBjbGFzcz0nICsgZ19oaXN0b3J5
LmRhc2hib2FyZFNwZWNpZmljU3RhdGUuc29ydE9yZGVyICsgJz4nICsgKGdfaGlzdG9yeS5kYXNo
Ym9hcmRTcGVjaWZpY1N0YXRlLnNvcnRPcmRlciA9PSBGT1JXQVJEID8gJyZ1YXJyOycgOiAnJmRh
cnI7JyApICsgJzwvc3Bhbj4nIDogJyc7Ci0gICAgcmV0dXJuICc8dGggc29ydFZhbHVlPScgKyB0
aGlzU29ydFZhbHVlICsKLSAgICAgICAgLy8gRXh0ZW5kIGxhc3QgdGggdGhyb3VnaCBhbGwgdGhl
IHJlc3Qgb2YgdGhlIGNvbHVtbnMuCi0gICAgICAgIChvcHRfZmlsbENvbFNwYW4gPyAnIGNvbHNw
YW49MTAwMDAnIDogJycpICsKLSAgICAgICAgLy8gRXh0cmEgc3BhbiBoZXJlIGlzIHNvIGZsZXgg
Ym94aW5nIGFjdHVhbGx5IGNlbnRlcnMuCi0gICAgICAgIC8vIFRoZXJlJ3MgcHJvYmFibHkgYSBi
ZXR0ZXIgd2F5IHRvIGRvIHRoaXMgd2l0aCBDU1Mgb25seSB0aG91Z2guCi0gICAgICAgICc+PGRp
diBjbGFzcz10YWJsZS1oZWFkZXItY29udGVudD48c3Bhbj48L3NwYW4+JyArIGFycm93SFRNTCAr
Ci0gICAgICAgICc8c3BhbiBjbGFzcz1oZWFkZXItdGV4dD4nICsgaGVhZGVyTmFtZSArICc8L3Nw
YW4+JyArIGFycm93SFRNTCArICc8L2Rpdj48L3RoPic7Ci19Ci0KLWZ1bmN0aW9uIGh0bWxGb3JU
ZXN0VGFibGUocm93c0hUTUwsIG9wdF9leGNsdWRlSGVhZGVycykKLXsKLSAgICB2YXIgaHRtbCA9
ICc8dGFibGUgY2xhc3M9dGVzdC10YWJsZT4nOwotICAgIGlmICghb3B0X2V4Y2x1ZGVIZWFkZXJz
KSB7Ci0gICAgICAgIGh0bWwgKz0gJzx0aGVhZD48dHI+JzsKLSAgICAgICAgdmFyIGhlYWRlcnMg
PSB0YWJsZUhlYWRlcnMoKTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWFkZXJzLmxl
bmd0aDsgaSsrKQotICAgICAgICAgICAgaHRtbCArPSBodG1sRm9yVGFibGVDb2x1bW5IZWFkZXIo
aGVhZGVyc1tpXSwgaSA9PSBoZWFkZXJzLmxlbmd0aCAtIDEpOwotICAgICAgICBodG1sICs9ICc8
L3RyPjwvdGhlYWQ+JzsKLSAgICB9Ci0gICAgcmV0dXJuIGh0bWwgKyAnPHRib2R5PicgKyByb3dz
SFRNTCArICc8L3Rib2R5PjwvdGFibGU+JzsKLX0KLQotZnVuY3Rpb24gYXBwZW5kSFRNTChodG1s
KQotewotICAgIC8vIElubmVySFRNTCB0byBhIGRpdiB0aGF0J3Mgbm90IGluIHRoZSBkb2N1bWVu
dC4gVGhpcyBpcwotICAgIC8vIH4zMDBtcyBmYXN0ZXIgaW4gU2FmYXJpIDQgYW5kIENocm9tZSA0
IG9uIG1hYy4KLSAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0g
ICAgZGl2LmlubmVySFRNTCA9IGh0bWw7Ci0gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChk
aXYpOwotICAgIHBvc3RIZWlnaHRDaGFuZ2VkTWVzc2FnZSgpOwotfQotCi1mdW5jdGlvbiBhbHBo
YW51bWVyaWNDb21wYXJlKGNvbHVtbiwgcmV2ZXJzZSkKLXsKLSAgICByZXR1cm4gcmV2ZXJzaWJs
ZUNvbXBhcmVGdW5jdGlvbihmdW5jdGlvbihhLCBiKSB7Ci0gICAgICAgIC8vIFB1dCBudWxsIGVu
dHJpZXMgYXQgdGhlIGJvdHRvbQotICAgICAgICB2YXIgYSA9IGFbY29sdW1uXSA/IFN0cmluZyhh
W2NvbHVtbl0pIDogJ3onOwotICAgICAgICB2YXIgYiA9IGJbY29sdW1uXSA/IFN0cmluZyhiW2Nv
bHVtbl0pIDogJ3onOwotCi0gICAgICAgIGlmIChhIDwgYikKLSAgICAgICAgICAgIHJldHVybiAt
MTsKLSAgICAgICAgZWxzZSBpZiAoYSA9PSBiKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgIH0sIHJldmVyc2UpOwotfQotCi1m
dW5jdGlvbiBudW1lcmljU29ydChjb2x1bW4sIHJldmVyc2UpCi17Ci0gICAgcmV0dXJuIHJldmVy
c2libGVDb21wYXJlRnVuY3Rpb24oZnVuY3Rpb24oYSwgYikgewotICAgICAgICBhID0gcGFyc2VG
bG9hdChhW2NvbHVtbl0pOwotICAgICAgICBiID0gcGFyc2VGbG9hdChiW2NvbHVtbl0pOwotICAg
ICAgICByZXR1cm4gYSAtIGI7Ci0gICAgfSwgcmV2ZXJzZSk7Ci19Ci0KLWZ1bmN0aW9uIHJldmVy
c2libGVDb21wYXJlRnVuY3Rpb24oY29tcGFyZSwgcmV2ZXJzZSkKLXsKLSAgICByZXR1cm4gZnVu
Y3Rpb24oYSwgYikgewotICAgICAgICByZXR1cm4gY29tcGFyZShyZXZlcnNlID8gYiA6IGEsIHJl
dmVyc2UgPyBhIDogYik7Ci0gICAgfTsKLX0KLQotZnVuY3Rpb24gY2hhbmdlU29ydChlKQotewot
ICAgIHZhciB0YXJnZXQgPSBlLmN1cnJlbnRUYXJnZXQ7Ci0gICAgZS5wcmV2ZW50RGVmYXVsdCgp
OwotCi0gICAgdmFyIHNvcnRWYWx1ZSA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoJ3NvcnRWYWx1ZScp
OwotICAgIHdoaWxlICh0YXJnZXQgJiYgdGFyZ2V0LnRhZ05hbWUgIT0gJ1RBQkxFJykKLSAgICAg
ICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7Ci0KLSAgICB2YXIgc29ydCA9ICdzb3J0Q29s
dW1uJzsKLSAgICB2YXIgb3JkZXJLZXkgPSAnc29ydE9yZGVyJzsKLSAgICBpZiAoc29ydFZhbHVl
ID09IGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlW3NvcnRdICYmIGdfaGlzdG9yeS5k
YXNoYm9hcmRTcGVjaWZpY1N0YXRlW29yZGVyS2V5XSA9PSBGT1JXQVJEKQotICAgICAgICBvcmRl
ciA9IEJBQ0tXQVJEOwotICAgIGVsc2UKLSAgICAgICAgb3JkZXIgPSBGT1JXQVJEOwotCi0gICAg
Z19oaXN0b3J5LnNldFF1ZXJ5UGFyYW1ldGVyKHNvcnQsIHNvcnRWYWx1ZSwgb3JkZXJLZXksIG9y
ZGVyKTsKLX0KLQotZnVuY3Rpb24gc29ydFRlc3RzKHRlc3RzLCBjb2x1bW4sIG9yZGVyKQotewot
ICAgIHZhciByZXN1bHRzUHJvcGVydHksIHNvcnRGdW5jdGlvbkdldHRlcjsKLSAgICBpZiAoY29s
dW1uID09ICdmbGFraW5lc3MnKSB7Ci0gICAgICAgIHNvcnRGdW5jdGlvbkdldHRlciA9IG51bWVy
aWNTb3J0OwotICAgICAgICByZXN1bHRzUHJvcGVydHkgPSAnZmxpcHMnOwotICAgIH0gZWxzZSBp
ZiAoY29sdW1uID09ICdzbG93ZXN0JykgewotICAgICAgICBzb3J0RnVuY3Rpb25HZXR0ZXIgPSBu
dW1lcmljU29ydDsKLSAgICAgICAgcmVzdWx0c1Byb3BlcnR5ID0gJ3Nsb3dlc3RUaW1lJzsKLSAg
ICB9IGVsc2UgewotICAgICAgICBzb3J0RnVuY3Rpb25HZXR0ZXIgPSBhbHBoYW51bWVyaWNDb21w
YXJlOwotICAgICAgICByZXN1bHRzUHJvcGVydHkgPSBjb2x1bW47Ci0gICAgfQotCi0gICAgdGVz
dHMuc29ydChzb3J0RnVuY3Rpb25HZXR0ZXIocmVzdWx0c1Byb3BlcnR5LCBvcmRlciA9PSBCQUNL
V0FSRCkpOwotfQotCi0vLyBTb3J0cyBhIHNwYWNlIHNlcGFyYXRlZCBleHBlY3RhdGlvbnMgc3Ry
aW5nIGluIGFscGhhbnVtZXJpYyBvcmRlci4KLS8vIEBwYXJhbSB7c3RyaW5nfSBzdHIgVGhlIGV4
cGVjdGF0aW9ucyBzdHJpbmcuCi0vLyBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzb3J0ZWQgc3RyaW5n
LgotZnVuY3Rpb24gc29ydEV4cGVjdGF0aW9uc1N0cmluZyhzdHIpCi17Ci0gICAgcmV0dXJuIHN0
ci5zcGxpdCgnICcpLnNvcnQoKS5qb2luKCcgJyk7Ci19Ci0KLWZ1bmN0aW9uIGFkZFVwZGF0ZSh0
ZXN0c05lZWRpbmdVcGRhdGUsIHRlc3QsIGJ1aWxkZXJOYW1lLCBtaXNzaW5nLCBleHRyYSkKLXsK
LSAgICBpZiAoIXRlc3RzTmVlZGluZ1VwZGF0ZVt0ZXN0XSkKLSAgICAgICAgdGVzdHNOZWVkaW5n
VXBkYXRlW3Rlc3RdID0ge307Ci0KLSAgICB2YXIgYnVpbGRJbmZvID0gcGxhdGZvcm1BbmRCdWls
ZFR5cGUoYnVpbGRlck5hbWUpOwotICAgIHZhciBidWlsZGVyID0gYnVpbGRJbmZvLnBsYXRmb3Jt
ICsgJyAnICsgYnVpbGRJbmZvLmJ1aWxkVHlwZTsKLSAgICBpZiAoIXRlc3RzTmVlZGluZ1VwZGF0
ZVt0ZXN0XVtidWlsZGVyXSkKLSAgICAgICAgdGVzdHNOZWVkaW5nVXBkYXRlW3Rlc3RdW2J1aWxk
ZXJdID0ge307Ci0KLSAgICBpZiAobWlzc2luZykKLSAgICAgICAgdGVzdHNOZWVkaW5nVXBkYXRl
W3Rlc3RdW2J1aWxkZXJdLm1pc3NpbmcgPSBzb3J0RXhwZWN0YXRpb25zU3RyaW5nKG1pc3Npbmcp
OwotCi0gICAgaWYgKGV4dHJhKQotICAgICAgICB0ZXN0c05lZWRpbmdVcGRhdGVbdGVzdF1bYnVp
bGRlcl0uZXh0cmEgPSBzb3J0RXhwZWN0YXRpb25zU3RyaW5nKGV4dHJhKTsKLX0KLQotCi0vLyBG
cm9tIGEgc3RyaW5nIG9mIG1vZGlmaWVycywgcmV0dXJucyBhIHN0cmluZyBvZiBtb2RpZmllcnMg
dGhhdAotLy8gYXJlIGZvciByZWFsIHJlc3VsdCBjaGFuZ2VzLCBsaWtlIFNMT1csIGFuZCBleGNs
dWRlcyBtb2RpZmllcnMKLS8vIHRoYXQgc3BlY2lmaWN5IHRoaW5ncyBsaWtlIHBsYXRmb3JtLCBi
dWlsZF90eXBlLCBidWcuCi0vLyBAcGFyYW0ge3N0cmluZ30gbW9kaWZpZXJTdHJpbmcgU3RyaW5n
IGNvbnRhaW5pbmcgYWxsIG1vZGlmaWVycy4KLS8vIEByZXR1cm4ge3N0cmluZ30gU3RyaW5nIGNv
bnRhaW5pbmcgb25seSBtb2RpZmllcnMgdGhhdCBlZmZlY3QgdGhlIHJlc3VsdHMuCi1mdW5jdGlv
biByZWFsTW9kaWZpZXJzKG1vZGlmaWVyU3RyaW5nKQotewotICAgIHZhciBtb2RpZmllcnMgPSBt
b2RpZmllclN0cmluZy5zcGxpdCgnICcpOzsKLSAgICByZXR1cm4gbW9kaWZpZXJzLmZpbHRlcihm
dW5jdGlvbihtb2RpZmllcikgewotICAgICAgICByZXR1cm4gIShtb2RpZmllciBpbiBCVUlMRF9U
WVBFUyB8fCBzdHJpbmcuc3RhcnRzV2l0aChtb2RpZmllciwgJ0JVRycpKTsKLSAgICB9KS5qb2lu
KCcgJyk7Ci19Ci0KLWZ1bmN0aW9uIGdlbmVyYXRlUGFnZUZvckV4cGVjdGF0aW9uc1VwZGF0ZSgp
Ci17Ci0gICAgLy8gQWx3YXlzIHNob3cgYWxsIHJ1bnMgd2hlbiBhdXRvLXVwZGF0aW5nIGV4cGVj
dGF0aW9ucy4KLSAgICBpZiAoIWdfaGlzdG9yeS5jcm9zc0Rhc2hib2FyZFN0YXRlLnNob3dBbGxS
dW5zKQotICAgICAgICBnX2hpc3Rvcnkuc2V0UXVlcnlQYXJhbWV0ZXIoJ3Nob3dBbGxSdW5zJywg
dHJ1ZSk7Ci0KLSAgICBwcm9jZXNzVGVzdFJ1bnNGb3JBbGxCdWlsZGVycygpOwotICAgIHZhciB0
ZXN0c05lZWRpbmdVcGRhdGUgPSB7fTsKLSAgICBmb3IgKHZhciB0ZXN0IGluIGdfdGVzdFRvUmVz
dWx0c01hcCkgewotICAgICAgICB2YXIgcmVzdWx0cyA9IGdfdGVzdFRvUmVzdWx0c01hcFt0ZXN0
XTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7Ci0g
ICAgICAgICAgICB2YXIgdGhpc1Jlc3VsdCA9IHJlc3VsdHNbaV07Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmICghdGhpc1Jlc3VsdC5taXNzaW5nICYmICF0aGlzUmVzdWx0LmV4dHJhKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICB2YXIgYWxsUGFzc2VzT3JO
b0RhdGFzID0gdGhpc1Jlc3VsdC5yYXdSZXN1bHRzLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1
cm4geFsxXSAhPSAiUCIgJiYgeFsxXSAhPSAiTiI7IH0pLmxlbmd0aCA9PSAwOwotCi0gICAgICAg
ICAgICBpZiAoYWxsUGFzc2VzT3JOb0RhdGFzKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgICAgICBhZGRVcGRhdGUodGVzdHNOZWVkaW5nVXBkYXRlLCB0ZXN0LCB0aGlzUmVz
dWx0LmJ1aWxkZXIsIHRoaXNSZXN1bHQubWlzc2luZywgdGhpc1Jlc3VsdC5leHRyYSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKHZhciBidWlsZGVyIGluIGN1cnJlbnRCdWlsZGVycygp
KSB7Ci0gICAgICAgIHZhciB0ZXN0cyA9IGdfcGVyQnVpbGRlcldpdGhFeHBlY3RhdGlvbnNCdXRO
b0ZhaWx1cmVzW2J1aWxkZXJdCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdHMubGVu
Z3RoOyBpKyspIHsKLSAgICAgICAgICAgIC8vIEFueXRoaW5nIGV4dHJhIGluIHRoaXMgY2FzZSBp
cyB3aGF0IGlzIGxpc3RlZCBpbiBleHBlY3RhdGlvbnMKLSAgICAgICAgICAgIC8vIHBsdXMgbW9k
aWZpZXJzIG90aGVyIHRoYW4gYnVnLCBwbGF0Zm9ybSwgYnVpbGQgdHlwZS4KLSAgICAgICAgICAg
IHZhciBtb2RpZmllcnMgPSByZWFsTW9kaWZpZXJzKHRlc3RzW2ldLm1vZGlmaWVycyk7Ci0gICAg
ICAgICAgICB2YXIgZXh0cmFzID0gdGVzdHNbaV0uZXhwZWN0YXRpb25zOwotICAgICAgICAgICAg
ZXh0cmFzICs9IG1vZGlmaWVycyA/ICcgJyArIG1vZGlmaWVycyA6ICcnOwotICAgICAgICAgICAg
YWRkVXBkYXRlKHRlc3RzTmVlZGluZ1VwZGF0ZSwgdGVzdHNbaV0udGVzdCwgYnVpbGRlciwgbnVs
bCwgZXh0cmFzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEdldCB0aGUga2V5cyBpbiBh
bHBoYWJldGljYWwgb3JkZXIsIHNvIGl0IGlzIGVhc3kgdG8gcHJvY2VzcyBncm91cHMKLSAgICAv
LyBvZiB0ZXN0cy4KLSAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHRlc3RzTmVlZGluZ1VwZGF0
ZSkuc29ydCgpOwotICAgIHNob3dVcGRhdGVJbmZvRm9yVGVzdCh0ZXN0c05lZWRpbmdVcGRhdGUs
IGtleXMpOwotfQotCi0vLyBTaG93IHRoZSB0ZXN0IHJlc3VsdHMgYW5kIHRoZSBqc29uIGZvciBk
aWZmZXJpbmcgZXhwZWN0YXRpb25zLCBhbmQKLS8vIGFsbG93IHRoZSB1c2VyIHRvIGluY2x1ZGUg
b3IgZXhjbHVkZSB0aGlzIHVwZGF0ZS4KLS8vCi0vLyBAcGFyYW0ge09iamVjdH0gdGVzdHNOZWVk
aW5nVXBkYXRlIFRlc3RzIHRoYXQgbmVlZCB1cGRhdGluZy4KLS8vIEBwYXJhbSB7QXJyYXkuPHN0
cmluZz59IGtleXMgS2V5cyBpbnRvIHRoZSB0ZXN0TmVlZGluZ1VwZGF0ZSBvYmplY3QuCi1mdW5j
dGlvbiBzaG93VXBkYXRlSW5mb0ZvclRlc3QodGVzdHNOZWVkaW5nVXBkYXRlLCBrZXlzKQotewot
ICAgIHZhciB0ZXN0ID0ga2V5c1tnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS51cGRh
dGVJbmRleF07Ci0gICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAnJzsKLQotICAgIC8vIEZJ
WE1FOiBNYWtlIHRoaXMgRE9NIGNyZWF0aW9uIGxlc3MgdmVyYm9zZS4KLSAgICB2YXIgaW5kZXgg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICBpbmRleC5zdHlsZS5jc3NGbG9h
dCA9ICdyaWdodCc7Ci0gICAgaW5kZXgudGV4dENvbnRlbnQgPSAoZ19oaXN0b3J5LmRhc2hib2Fy
ZFNwZWNpZmljU3RhdGUudXBkYXRlSW5kZXggKyAxKSArICcgb2YgJyArIGtleXMubGVuZ3RoICsg
JyB0ZXN0cyc7Ci0gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbmRleCk7Ci0KLSAgICB2
YXIgYnV0dG9uUmVnaW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgdmFy
IGluY2x1ZGVCdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwotICAgIGluY2x1
ZGVCdG4udHlwZSA9ICdidXR0b24nOwotICAgIGluY2x1ZGVCdG4udmFsdWUgPSAnaW5jbHVkZSBz
ZWxlY3RlZCc7Ci0gICAgaW5jbHVkZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHBhcnRp
YWwoaGFuZGxlVXBkYXRlLCB0ZXN0c05lZWRpbmdVcGRhdGUsIGtleXMpLCBmYWxzZSk7Ci0gICAg
YnV0dG9uUmVnaW9uLmFwcGVuZENoaWxkKGluY2x1ZGVCdG4pOwotCi0gICAgdmFyIHByZXZpb3Vz
QnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKLSAgICBwcmV2aW91c0J0bi50
eXBlID0gJ2J1dHRvbic7Ci0gICAgcHJldmlvdXNCdG4udmFsdWUgPSAncHJldmlvdXMnOwotICAg
IHByZXZpb3VzQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywKLSAgICAgICAgZnVuY3Rpb24o
KSB7Ci0gICAgICAgICAgc2V0VXBkYXRlSW5kZXgoZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmlj
U3RhdGUudXBkYXRlSW5kZXggLSAxLCB0ZXN0c05lZWRpbmdVcGRhdGUsIGtleXMpOwotICAgICAg
ICB9LAotICAgICAgICBmYWxzZSk7Ci0gICAgYnV0dG9uUmVnaW9uLmFwcGVuZENoaWxkKHByZXZp
b3VzQnRuKTsKLQotICAgIHZhciBuZXh0QnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5w
dXQnKTsKLSAgICBuZXh0QnRuLnR5cGUgPSAnYnV0dG9uJzsKLSAgICBuZXh0QnRuLnZhbHVlID0g
J25leHQnOwotICAgIG5leHRCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBwYXJ0aWFsKG5l
eHRVcGRhdGUsIHRlc3RzTmVlZGluZ1VwZGF0ZSwga2V5cyksIGZhbHNlKTsKLSAgICBidXR0b25S
ZWdpb24uYXBwZW5kQ2hpbGQobmV4dEJ0bik7Ci0KLSAgICB2YXIgZG9uZUJ0biA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7Ci0gICAgZG9uZUJ0bi50eXBlID0gJ2J1dHRvbic7Ci0g
ICAgZG9uZUJ0bi52YWx1ZSA9ICdkb25lJzsKLSAgICBkb25lQnRuLmFkZEV2ZW50TGlzdGVuZXIo
J2NsaWNrJywgZmluaXNoVXBkYXRlLCBmYWxzZSk7Ci0gICAgYnV0dG9uUmVnaW9uLmFwcGVuZENo
aWxkKGRvbmVCdG4pOwotCi0gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChidXR0b25SZWdp
b24pOwotCi0gICAgdmFyIHVwZGF0ZXMgPSB0ZXN0c05lZWRpbmdVcGRhdGVbdGVzdF07Ci0gICAg
dmFyIGNoZWNrYm94ZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICBmb3Ig
KHZhciBidWlsZGVyIGluIHVwZGF0ZXMpIHsKLSAgICAgICAgLy8gQ3JlYXRlIGEgY2hlY2tib3gg
Zm9yIGVhY2ggYnVpbGRlci4KLSAgICAgICAgdmFyIGNoZWNrYm94UmVnaW9uID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgICAgIHZhciBjaGVja2JveCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7Ci0gICAgICAgIGNoZWNrYm94LnR5cGUgPSAnY2hlY2tib3gn
OwotICAgICAgICBjaGVja2JveC5pZCA9IGJ1aWxkZXI7Ci0gICAgICAgIGNoZWNrYm94LmNoZWNr
ZWQgPSB0cnVlOwotICAgICAgICBjaGVja2JveFJlZ2lvbi5hcHBlbmRDaGlsZChjaGVja2JveCk7
Ci0gICAgICAgIGNoZWNrYm94UmVnaW9uLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKGJ1aWxkZXIgKyAnIDogJyArIEpTT04uc3RyaW5naWZ5KHVwZGF0ZXNbYnVpbGRlcl0pKSk7
Ci0gICAgICAgIGNoZWNrYm94ZXMuYXBwZW5kQ2hpbGQoY2hlY2tib3hSZWdpb24pOwotICAgIH0K
LSAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNoZWNrYm94ZXMpOwotCi0gICAgdmFyIGRp
diA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgIGRpdi5pbm5lckhUTUwgPSBo
dG1sRm9ySW5kaXZpZHVhbFRlc3RPbkFsbEJ1aWxkZXJzV2l0aFJlc3VsdHNMaW5rcyh0ZXN0KTsK
LSAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7Ci0gICAgYXBwZW5kRXhwZWN0YXRp
b25zKCk7Ci19Ci0KLQotLy8gV2hlbiB0aGUgdXNlciBoYXMgZmluaXNoZWQgc2VsZWN0aW5nIGV4
cGVjdGF0aW9ucyB0byB1cGRhdGUsIHByb3ZpZGUgdGhlbQotLy8gd2l0aCBqc29uIHRvIGNvcHkg
b3Zlci4KLWZ1bmN0aW9uIGZpbmlzaFVwZGF0ZSgpCi17Ci0gICAgZG9jdW1lbnQuYm9keS5pbm5l
ckhUTUwgPSAnVGhlIG5leHQgc3RlcCBpcyB0byBjb3B5IHRoZSBvdXRwdXQgYmVsb3cgJyArCi0g
ICAgICAgICdpbnRvIGEgbG9jYWwgZmlsZSBhbmQgc2F2ZSBpdC4gIFRoZW4sIHJ1bjxicj48Y29k
ZT5weXRob24gJyArCi0gICAgICAgICdzcmMvd2Via2l0L3Rvb2xzL2xheW91dF90ZXN0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvdXBkYXRlX2V4cGVjdGF0JyArCi0gICAgICAgICdpb25zX2Zyb21f
ZGFzaGJvYXJkLnB5IHBhdGgvdG8vbG9jYWwvZmlsZTwvY29kZT48YnI+aW4gb3JkZXIgdG8gJyAr
Ci0gICAgICAgICd1cGRhdGUgdGhlIGV4cGVjdGF0aW9ucyBmaWxlLjxicj48dGV4dGFyZWEgaWQ9
InJlc3VsdHMiICcrCi0gICAgICAgICdzdHlsZT0id2lkdGg6NjAwcHg7aGVpZ2h0OjYwMHB4OyI+
ICcgKwotICAgICAgICBKU09OLnN0cmluZ2lmeShnX2NvbmZpcm1lZFRlc3RzKSArICc8L3RleHRh
cmVhPic7Ci0gICAgcmVzdWx0cy5mb2N1cygpOwotICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdT
ZWxlY3RBbGwnKTsKLX0KLQotLy8gSGFuZGxlIHVzZXIgY2xpY2sgb24gImluY2x1ZGUgc2VsZWN0
ZWQiIGJ1dHRvbi4KLS8vIEluY2x1ZGVzIHRoZSB0ZXN0cyB0aGF0IGFyZSBzZWxlY3RlZCBhbmQg
ZXhjbHVkZSB0aGUgcmVzdC4KLS8vIEBwYXJhbSB7T2JqZWN0fSB0ZXN0c05lZWRpbmdVcGRhdGUg
VGVzdHMgdGhhdCBuZWVkIHVwZGF0aW5nLgotLy8gQHBhcmFtIHtBcnJheS48c3RyaW5nPn0ga2V5
cyBLZXlzIGludG8gdGhlIHRlc3ROZWVkaW5nVXBkYXRlIG9iamVjdC4KLWZ1bmN0aW9uIGhhbmRs
ZVVwZGF0ZSh0ZXN0c05lZWRpbmdVcGRhdGUsIGtleXMpCi17Ci0gICAgdmFyIHRlc3QgPSBrZXlz
W2dfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnVwZGF0ZUluZGV4XTsKLSAgICB2YXIg
dXBkYXRlcyA9IHRlc3RzTmVlZGluZ1VwZGF0ZVt0ZXN0XTsKLSAgICBmb3IgKHZhciBidWlsZGVy
IGluIHVwZGF0ZXMpIHsKLSAgICAgICAgLy8gQWRkIGluY2x1ZGVkIHRlc3RzLCBhbmQgZGVsZXRl
IGV4Y2x1ZGVkIHRlc3RzIGlmCi0gICAgICAgIC8vIHRoZXkgd2VyZSBwcmV2aW91c2x5IGluY2x1
ZGVkLgotICAgICAgICBpZiAoJChidWlsZGVyKS5jaGVja2VkKSB7Ci0gICAgICAgICAgICBpZiAo
IWdfY29uZmlybWVkVGVzdHNbdGVzdF0pCi0gICAgICAgICAgICAgICAgZ19jb25maXJtZWRUZXN0
c1t0ZXN0XSA9IHt9OwotICAgICAgICAgICAgZ19jb25maXJtZWRUZXN0c1t0ZXN0XVtidWlsZGVy
XSA9IHRlc3RzTmVlZGluZ1VwZGF0ZVt0ZXN0XVtidWlsZGVyXTsKLSAgICAgICAgfSBlbHNlIGlm
IChnX2NvbmZpcm1lZFRlc3RzW3Rlc3RdICYmIGdfY29uZmlybWVkVGVzdHNbdGVzdF1bYnVpbGRl
cl0pIHsKLSAgICAgICAgICAgIGRlbGV0ZSBnX2NvbmZpcm1lZFRlc3RzW3Rlc3RdW2J1aWxkZXJd
OwotICAgICAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhnX2NvbmZpcm1lZFRlc3RzW3Rlc3RdKS5s
ZW5ndGgpCi0gICAgICAgICAgICAgICAgZGVsZXRlIGdfY29uZmlybWVkVGVzdHNbdGVzdF07Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgbmV4dFVwZGF0ZSh0ZXN0c05lZWRpbmdVcGRhdGUsIGtleXMp
OwotfQotCi0KLS8vIE1vdmUgdG8gdGhlIG5leHQgaXRlbSB0byB1cGRhdGUuCi0vLyBAcGFyYW0g
e09iamVjdH0gdGVzdHNOZWVkaW5nVXBkYXRlIFRlc3RzIHRoYXQgbmVlZCB1cGRhdGluZy4KLS8v
IEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IGtleXMgS2V5cyBpbnRvIHRoZSB0ZXN0TmVlZGluZ1Vw
ZGF0ZSBvYmplY3QuCi1mdW5jdGlvbiBuZXh0VXBkYXRlKHRlc3RzTmVlZGluZ1VwZGF0ZSwga2V5
cykKLXsKLSAgICBzZXRVcGRhdGVJbmRleChnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0
ZS51cGRhdGVJbmRleCArIDEsIHRlc3RzTmVlZGluZ1VwZGF0ZSwga2V5cyk7Ci19Ci0KLQotLy8g
QWR2YW5jZSB0aGUgaW5kZXggd2UgYXJlIHVwZGF0aW5nIGF0LiAgSWYgd2Ugd2FsayBvdmVyIHRo
ZSBlbmQKLS8vIG9yIGJlZ2lubmluZywganVzdCBsb29wLgotLy8gQHBhcmFtIHtzdHJpbmd9IG5l
d0luZGV4IFRoZSBpbmRleCBpbnRvIHRoZSBrZXlzIHRvIG1vdmUgdG8uCi0vLyBAcGFyYW0ge09i
amVjdH0gdGVzdHNOZWVkaW5nVXBkYXRlIFRlc3RzIHRoYXQgbmVlZCB1cGRhdGluZy4KLS8vIEBw
YXJhbSB7QXJyYXkuPHN0cmluZz59IGtleXMgS2V5cyBpbnRvIHRoZSB0ZXN0TmVlZGluZ1VwZGF0
ZSBvYmplY3QuCi1mdW5jdGlvbiBzZXRVcGRhdGVJbmRleChuZXdJbmRleCwgdGVzdHNOZWVkaW5n
VXBkYXRlLCBrZXlzKQotewotICAgIGlmIChuZXdJbmRleCA9PSAtMSkKLSAgICAgICAgbmV3SW5k
ZXggPSBrZXlzLmxlbmd0aCAtIDE7Ci0gICAgZWxzZSBpZiAobmV3SW5kZXggPT0ga2V5cy5sZW5n
dGgpCi0gICAgICAgIG5ld0luZGV4ID0gMDsKLSAgICBnX2hpc3Rvcnkuc2V0UXVlcnlQYXJhbWV0
ZXIoInVwZGF0ZUluZGV4IiwgbmV3SW5kZXgpOwotICAgIHNob3dVcGRhdGVJbmZvRm9yVGVzdCh0
ZXN0c05lZWRpbmdVcGRhdGUsIGtleXMpOwotfQotCi1mdW5jdGlvbiBodG1sRm9ySW5kaXZpZHVh
bFRlc3RPbkFsbEJ1aWxkZXJzKHRlc3QpCi17Ci0gICAgcHJvY2Vzc1Rlc3RSdW5zRm9yQWxsQnVp
bGRlcnMoKTsKLQotICAgIHZhciB0ZXN0UmVzdWx0cyA9IGdfdGVzdFRvUmVzdWx0c01hcFt0ZXN0
XTsKLSAgICBpZiAoIXRlc3RSZXN1bHRzKQotICAgICAgICByZXR1cm4gJzxkaXYgY2xhc3M9Im5v
dC1mb3VuZCI+VGVzdCBub3QgZm91bmQuIEVpdGhlciBpdCBkb2VzIG5vdCBleGlzdCwgaXMgc2tp
cHBlZCBvciBwYXNzZXMgb24gYWxsIHBsYXRmb3Jtcy48L2Rpdj4nOwotICAgICAgICAKLSAgICB2
YXIgaHRtbCA9ICcnOwotICAgIHZhciBzaG93bkJ1aWxkZXJzID0gW107Ci0gICAgZm9yICh2YXIg
aiA9IDA7IGogPCB0ZXN0UmVzdWx0cy5sZW5ndGg7IGorKykgewotICAgICAgICBzaG93bkJ1aWxk
ZXJzLnB1c2godGVzdFJlc3VsdHNbal0uYnVpbGRlcik7Ci0gICAgICAgIGh0bWwgKz0gaHRtbEZv
clNpbmdsZVRlc3RSb3codGVzdFJlc3VsdHNbal0pOwotICAgIH0KLQotICAgIHZhciBza2lwcGVk
QnVpbGRlcnMgPSBbXQotICAgIGZvciAoYnVpbGRlciBpbiBjdXJyZW50QnVpbGRlcnMoKSkgewot
ICAgICAgICBpZiAoc2hvd25CdWlsZGVycy5pbmRleE9mKGJ1aWxkZXIpID09IC0xKQotICAgICAg
ICAgICAgc2tpcHBlZEJ1aWxkZXJzLnB1c2goYnVpbGRlcik7Ci0gICAgfQotCi0gICAgdmFyIHNr
aXBwZWRCdWlsZGVyc0h0bWwgPSAnJzsKLSAgICBpZiAoc2tpcHBlZEJ1aWxkZXJzLmxlbmd0aCkg
ewotICAgICAgICBza2lwcGVkQnVpbGRlcnNIdG1sID0gJzxkaXY+VGhlIGZvbGxvd2luZyBidWls
ZGVycyBlaXRoZXIgZG9uXCd0IHJ1biB0aGlzIHRlc3QgKGUuZy4gaXRcJ3Mgc2tpcHBlZCkgb3Ig
YWxsIHJ1bnMgcGFzc2VkOjwvZGl2PicgKwotICAgICAgICAgICAgJzxkaXYgY2xhc3M9c2tpcHBl
ZC1idWlsZGVyLWxpc3Q+PGRpdiBjbGFzcz1za2lwcGVkLWJ1aWxkZXI+JyArIHNraXBwZWRCdWls
ZGVycy5qb2luKCc8L2Rpdj48ZGl2IGNsYXNzPXNraXBwZWQtYnVpbGRlcj4nKSArICc8L2Rpdj48
L2Rpdj4nOwotICAgIH0KLQotICAgIHJldHVybiBodG1sRm9yVGVzdFRhYmxlKGh0bWwpICsgc2tp
cHBlZEJ1aWxkZXJzSHRtbDsKLX0KLQotZnVuY3Rpb24gaHRtbEZvckluZGl2aWR1YWxUZXN0T25B
bGxCdWlsZGVyc1dpdGhSZXN1bHRzTGlua3ModGVzdCkKLXsKLSAgICBwcm9jZXNzVGVzdFJ1bnNG
b3JBbGxCdWlsZGVycygpOwotCi0gICAgdmFyIHRlc3RSZXN1bHRzID0gZ190ZXN0VG9SZXN1bHRz
TWFwW3Rlc3RdOwotICAgIHZhciBodG1sID0gJyc7Ci0gICAgaHRtbCArPSBodG1sRm9ySW5kaXZp
ZHVhbFRlc3RPbkFsbEJ1aWxkZXJzKHRlc3QpOwotCi0gICAgaHRtbCArPSAnPGRpdiBjbGFzcz1l
eHBlY3RhdGlvbnMgdGVzdD0nICsgdGVzdCArICc+PGRpdj4nICsKLSAgICAgICAgbGlua0hUTUxU
b1RvZ2dsZVN0YXRlKCdzaG93RXhwZWN0YXRpb25zJywgJ3Jlc3VsdHMnKQotCi0gICAgaWYgKGdf
aGlzdG9yeS5pc0xheW91dFRlc3RSZXN1bHRzKCkpIHsKLSAgICAgICAgaHRtbCArPSAnIHwgJyAr
IGxpbmtIVE1MVG9Ub2dnbGVTdGF0ZSgnc2hvd0xhcmdlRXhwZWN0YXRpb25zJywgJ2xhcmdlIHRo
dW1ibmFpbHMnKTsKLSAgICAgICAgaWYgKHRlc3RSZXN1bHRzICYmIGN1cnJlbnRCdWlsZGVyR3Jv
dXAoKS5tYXN0ZXIoKS5uYW1lID09IFdFQktJVF9CVUlMREVSX01BU1RFUikgewotICAgICAgICAg
ICAgdmFyIHJldmlzaW9uID0gZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUucmV2aXNp
b24gfHwgJyc7Ci0gICAgICAgICAgICBodG1sICs9ICc8Zm9ybSBvbnN1Ym1pdD0iZ19oaXN0b3J5
LnNldFF1ZXJ5UGFyYW1ldGVyKFwncmV2aXNpb25cJywgcmV2aXNpb24udmFsdWUpOycgKwotICAg
ICAgICAgICAgICAgICdyZXR1cm4gZmFsc2U7Ij5TaG93IHJlc3VsdHMgZm9yIFdlYktpdCByZXZp
c2lvbjogJyArCi0gICAgICAgICAgICAgICAgJzxpbnB1dCBuYW1lPXJldmlzaW9uIHBsYWNlaG9s
ZGVyPSJlLmcuIDY1NTQwIiB2YWx1ZT0iJyArIHJldmlzaW9uICsKLSAgICAgICAgICAgICAgICAn
IiBpZD1yZXZpc2lvbi1pbnB1dD48L2Zvcm0+JzsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBodG1sICs9ICcgfCA8Yj5Pbmx5IHNob3dzIGFjdHVhbCByZXN1bHRzL2RpZmZzIGZyb20gdGhl
IG1vc3QgcmVjZW50ICpmYWlsdXJlKiBvbiBlYWNoIGJvdC48L2I+JzsKLSAgICB9IGVsc2Ugewot
ICAgICAgaHRtbCArPSAnIHwgPHNwYW4+UmVzdWx0cyBoZWlnaHQ6PGlucHV0ICcgKwotICAgICAg
ICAgICdvbmNoYW5nZT0iZ19oaXN0b3J5LnNldFF1ZXJ5UGFyYW1ldGVyKFwncmVzdWx0c0hlaWdo
dFwnLHRoaXMudmFsdWUpIiB2YWx1ZT0iJyArCi0gICAgICAgICAgZ19oaXN0b3J5LmRhc2hib2Fy
ZFNwZWNpZmljU3RhdGUucmVzdWx0c0hlaWdodCArICciIHN0eWxlPSJ3aWR0aDoyLjVlbSI+cHg8
L3NwYW4+JzsKLSAgICB9Ci0gICAgaHRtbCArPSAnPC9kaXY+PC9kaXY+JzsKLSAgICByZXR1cm4g
aHRtbDsKLX0KLQotZnVuY3Rpb24gZ2V0RXhwZWN0YXRpb25zQ29udGFpbmVyKGV4cGVjdGF0aW9u
c0NvbnRhaW5lcnMsIHBhcmVudENvbnRhaW5lciwgZXhwZWN0YXRpb25zVHlwZSkKLXsKLSAgICBp
ZiAoIWV4cGVjdGF0aW9uc0NvbnRhaW5lcnNbZXhwZWN0YXRpb25zVHlwZV0pIHsKLSAgICAgICAg
dmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgICAgICBj
b250YWluZXIuY2xhc3NOYW1lID0gJ2V4cGVjdGF0aW9ucy1jb250YWluZXInOwotICAgICAgICBw
YXJlbnRDb250YWluZXIuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKLSAgICAgICAgZXhwZWN0YXRp
b25zQ29udGFpbmVyc1tleHBlY3RhdGlvbnNUeXBlXSA9IGNvbnRhaW5lcjsKLSAgICB9Ci0gICAg
cmV0dXJuIGV4cGVjdGF0aW9uc0NvbnRhaW5lcnNbZXhwZWN0YXRpb25zVHlwZV07Ci19Ci0KLWZ1
bmN0aW9uIGVuc3VyZVRyYWlsaW5nU2xhc2gocGF0aCkKLXsKLSAgICBpZiAocGF0aC5tYXRjaCgv
XC8kLykpCi0gICAgICAgIHJldHVybiBwYXRoOwotICAgIHJldHVybiBwYXRoICsgJy8nOwotfQot
Ci1mdW5jdGlvbiBtYXliZUFkZFBuZ0NoZWNrc3VtKGV4cGVjdGF0aW9uRGl2LCBwbmdVcmwpCi17
Ci0gICAgLy8gcG5nVXJsIGdldHMgc2VydmVkIGZyb20gdGhlIGJyb3dzZXIgY2FjaGUgc2luY2Ug
d2UganVzdCBsb2FkZWQgaXQgaW4gYW4KLSAgICAvLyA8aW1nPiB0YWcuCi0gICAgbG9hZGVyLnJl
cXVlc3QocG5nVXJsLAotICAgICAgICBmdW5jdGlvbih4aHIpIHsKLSAgICAgICAgICAgIC8vIENv
bnZlcnQgdGhlIGZpcnN0IDJrIG9mIHRoZSByZXNwb25zZSB0byBhIGJ5dGUgc3RyaW5nLgotICAg
ICAgICAgICAgdmFyIGJ5dGVzID0geGhyLnJlc3BvbnNlVGV4dC5zdWJzdHJpbmcoMCwgMjA0OCk7
Ci0gICAgICAgICAgICBmb3IgKHZhciBwb3NpdGlvbiA9IDA7IHBvc2l0aW9uIDwgYnl0ZXMubGVu
Z3RoOyArK3Bvc2l0aW9uKQotICAgICAgICAgICAgICAgIGJ5dGVzW3Bvc2l0aW9uXSA9IGJ5dGVz
W3Bvc2l0aW9uXSAmIDB4ZmY7Ci0KLSAgICAgICAgICAgIC8vIExvb2sgZm9yIHRoZSBjb21tZW50
LgotICAgICAgICAgICAgdmFyIGNvbW1lbnRLZXkgPSAndEVYdGNoZWNrc3VtXHgwMCc7Ci0gICAg
ICAgICAgICB2YXIgY2hlY2tzdW1Qb3NpdGlvbiA9IGJ5dGVzLmluZGV4T2YoY29tbWVudEtleSk7
Ci0gICAgICAgICAgICBpZiAoY2hlY2tzdW1Qb3NpdGlvbiA9PSAtMSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgICAgIHZhciBjaGVja3N1bSA9IGJ5dGVzLnN1YnN0cmluZyhj
aGVja3N1bVBvc2l0aW9uICsgY29tbWVudEtleS5sZW5ndGgsIGNoZWNrc3VtUG9zaXRpb24gKyBj
b21tZW50S2V5Lmxlbmd0aCArIDMyKTsKLSAgICAgICAgICAgIHZhciBjaGVja3N1bUNvbnRhaW5l
ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKLSAgICAgICAgICAgIGNoZWNrc3Vt
Q29udGFpbmVyLmlubmVyVGV4dCA9ICdFbWJlZGRlZCBjaGVja3N1bTogJyArIGNoZWNrc3VtOwot
ICAgICAgICAgICAgY2hlY2tzdW1Db250YWluZXIuc2V0QXR0cmlidXRlKCdjbGFzcycsICdwbmdj
aGVja3N1bScpOwotICAgICAgICAgICAgZXhwZWN0YXRpb25EaXYucGFyZW50Tm9kZS5hcHBlbmRD
aGlsZChjaGVja3N1bUNvbnRhaW5lcik7Ci0gICAgICAgIH0sCi0gICAgICAgIGZ1bmN0aW9uKHho
cikge30sCi0gICAgICAgIHRydWUpOwotfQotCi0vLyBBZGRzIGEgc3BlY2lmaWMgZXhwZWN0YXRp
b24uIElmIGl0J3MgYW4gaW1hZ2UsIGl0J3Mgb25seSBhZGRlZCBvbiB0aGUKLS8vIGltYWdlJ3Mg
b25sb2FkIGhhbmRsZXIuIElmIGl0J3MgYSB0ZXh0IGZpbGUsIHRoZW4gYSBzY3JpcHQgdGFnIGlz
IGFwcGVuZGVkCi0vLyBhcyBhIGhhY2sgdG8gc2VlIGlmIHRoZSBmaWxlIDQwNHMgKG5lY2Vzc2Fy
eSBzaW5jZSBpdCdzIGNyb3NzLWRvbWFpbikuCi0vLyBPbmNlIGFsbCB0aGUgZXhwZWN0YXRpb25z
IGZvciBhIHNwZWNpZmljIHR5cGUgaGF2ZSBsb2FkZWQgb3IgZXJyb3JlZAotLy8gKGUuZy4gYWxs
IHRoZSB0ZXh0IHJlc3VsdHMpLCB0aGVuIHdlIGdvIHRocm91Z2ggYW5kIGlkZW50aWZ5IHdoaWNo
IHBsYXRmb3JtCi0vLyB1c2VzIHdoaWNoIGV4cGVjdGF0aW9uLgotLy8KLS8vIEBwYXJhbSB7T2Jq
ZWN0fSBleHBlY3RhdGlvbnNDb250YWluZXJzIE1hcCBmcm9tIGV4cGVjdGF0aW9ucyB0eXBlIHRv
Ci0vLyAgICAgY29udGFpbmVyIERJVi4KLS8vIEBwYXJhbSB7RWxlbWVudH0gcGFyZW50Q29udGFp
bmVyIENvbnRhaW5lciBlbGVtZW50IGZvcgotLy8gICAgIGV4cGVjdGF0aW9uc0NvbnRhaW5lciBk
aXZzLgotLy8gQHBhcmFtIHtzdHJpbmd9IHBsYXRmb3JtIFBsYXRmb3JtIHN0cmluZy4gRW1wdHkg
c3RyaW5nIGZvciBub24tcGxhdGZvcm0KLS8vICAgICBzcGVjaWZpYyBleHBlY3RhdGlvbnMuCi0v
LyBAcGFyYW0ge3N0cmluZ30gcGF0aCBSZWxhdGl2ZSBwYXRoIHRvIHRoZSBleHBlY3RhdGlvbi4K
LS8vIEBwYXJhbSB7c3RyaW5nfSBiYXNlIEJhc2UgcGF0aCBmb3IgdGhlIGV4cGVjdGF0aW9uIFVS
TC4KLS8vIEBwYXJhbSB7c3RyaW5nfSBvcHRfYnVpbGRlciBCdWlsZGVyIHdob3NlIGFjdHVhbCBy
ZXN1bHRzIHRoaXMgZXhwZWN0YXRpb24KLS8vICAgICBwb2ludHMgdG8uCi1mdW5jdGlvbiBhZGRF
eHBlY3RhdGlvbkl0ZW0oZXhwZWN0YXRpb25zQ29udGFpbmVycywgcGFyZW50Q29udGFpbmVyLCBw
bGF0Zm9ybSwgcGF0aCwgYmFzZSwgb3B0X2J1aWxkZXIpCi17Ci0gICAgdmFyIHBhcnRzID0gcGF0
aC5zcGxpdCgnLicpCi0gICAgdmFyIGZpbGVFeHRlbnNpb24gPSBwYXJ0c1twYXJ0cy5sZW5ndGgg
LSAxXTsKLSAgICBpZiAoZmlsZUV4dGVuc2lvbiA9PSAnaHRtbCcpCi0gICAgICAgIGZpbGVFeHRl
bnNpb24gPSAndHh0JzsKLSAgICAKLSAgICB2YXIgY29udGFpbmVyID0gZ2V0RXhwZWN0YXRpb25z
Q29udGFpbmVyKGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMsIHBhcmVudENvbnRhaW5lciwgZmlsZUV4
dGVuc2lvbik7Ci0gICAgdmFyIGlzSW1hZ2UgPSBwYXRoLm1hdGNoKC9cLnBuZyQvKTsKLQotICAg
IC8vIEZJWE1FOiBTdG9wIHVzaW5nIHNjcmlwdCB0YWdzIG9uY2UgYWxsIHRoZSBwbGFjZXMgd2Ug
cHVsbCBmcm9tIHN1cHBvcnQgQ09SUy4KLSAgICB2YXIgcGxhdGZvcm1QYXJ0ID0gcGxhdGZvcm0g
PyBlbnN1cmVUcmFpbGluZ1NsYXNoKHBsYXRmb3JtKSA6ICcnOwotCi0gICAgdmFyIGNoaWxkQ29u
dGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwotICAgIGNoaWxkQ29udGFp
bmVyLmNsYXNzTmFtZSA9ICd1bmxvYWRlZCc7Ci0KLSAgICB2YXIgYXBwZW5kRXhwZWN0YXRpb25z
SXRlbSA9IGZ1bmN0aW9uKGl0ZW0pIHsKLSAgICAgICAgY2hpbGRDb250YWluZXIuYXBwZW5kQ2hp
bGQoZXhwZWN0YXRpb25zVGl0bGUocGxhdGZvcm1QYXJ0LCBwYXRoLCBvcHRfYnVpbGRlcikpOwot
ICAgICAgICBjaGlsZENvbnRhaW5lci5jbGFzc05hbWUgPSAnZXhwZWN0YXRpb25zLWl0ZW0nOwot
ICAgICAgICBpdGVtLmNsYXNzTmFtZSA9ICdleHBlY3RhdGlvbiAnICsgZmlsZUV4dGVuc2lvbjsK
LSAgICAgICAgaWYgKGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnNob3dMYXJnZUV4
cGVjdGF0aW9ucykKLSAgICAgICAgICAgIGl0ZW0uY2xhc3NOYW1lICs9ICcgbGFyZ2UnOwotICAg
ICAgICBjaGlsZENvbnRhaW5lci5hcHBlbmRDaGlsZChpdGVtKTsKLSAgICB9OwotCi0gICAgdmFy
IHVybCA9IGJhc2UgKyBwbGF0Zm9ybVBhcnQgKyBwYXRoOwotICAgIGlmIChpc0ltYWdlIHx8ICFz
dHJpbmcuc3RhcnRzV2l0aChiYXNlLCAnaHR0cHM6Ly9zdm4ud2Via2l0Lm9yZycpKSB7Ci0gICAg
ICAgIHZhciBkdW1teU5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGlzSW1hZ2UgPyAnaW1n
JyA6ICdzY3JpcHQnKTsKLSAgICAgICAgZHVtbXlOb2RlLnNyYyA9IHVybDsKLSAgICAgICAgZHVt
bXlOb2RlLm9ubG9hZCA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdmFyIGl0ZW07Ci0gICAg
ICAgICAgICBpZiAoaXNJbWFnZSkgewotICAgICAgICAgICAgICAgIGl0ZW0gPSBkdW1teU5vZGU7
Ci0gICAgICAgICAgICAgICAgaWYgKHN0cmluZy5zdGFydHNXaXRoKGJhc2UsICdodHRwczovL3N2
bi53ZWJraXQub3JnJykpCi0gICAgICAgICAgICAgICAgICAgIG1heWJlQWRkUG5nQ2hlY2tzdW0o
aXRlbSwgdXJsKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaXRlbSA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOwotICAgICAgICAgICAgICAgIGl0ZW0u
c3JjID0gdXJsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXBwZW5kRXhwZWN0YXRpb25z
SXRlbShpdGVtKTsKLSAgICAgICAgfQotICAgICAgICBkdW1teU5vZGUub25lcnJvciA9IGZ1bmN0
aW9uKCkgewotICAgICAgICAgICAgY2hpbGRDb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGls
ZChjaGlsZENvbnRhaW5lcik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBcHBlbmQgc2NyaXB0
IGVsZW1lbnRzIG5vdyBzbyB0aGF0IHRoZXkgbG9hZC4gSW1hZ2VzIGxvYWQgd2l0aG91dCBiZWlu
ZwotICAgICAgICAvLyBhcHBlbmRlZCB0byB0aGUgRE9NLgotICAgICAgICBpZiAoIWlzSW1hZ2Up
Ci0gICAgICAgICAgICBjaGlsZENvbnRhaW5lci5hcHBlbmRDaGlsZChkdW1teU5vZGUpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGxvYWRlci5yZXF1ZXN0KHVybCwKLSAgICAgICAgICAgIGZ1bmN0
aW9uKHhocikgewotICAgICAgICAgICAgICAgIHZhciBpdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgncHJlJyk7Ci0gICAgICAgICAgICAgICAgaXRlbS5pbm5lclRleHQgPSB4aHIucmVzcG9u
c2VUZXh0OwotICAgICAgICAgICAgICAgIGFwcGVuZEV4cGVjdGF0aW9uc0l0ZW0oaXRlbSk7Ci0g
ICAgICAgICAgICB9LAotICAgICAgICAgICAgZnVuY3Rpb24oeGhyKSB7LyogRG8gbm90aGluZyBv
biBlcnJvcnMgc2luY2UgdGhleSdyZSBleHBlY3RlZCAqL30pOwotICAgIH0KLQotICAgIGNvbnRh
aW5lci5hcHBlbmRDaGlsZChjaGlsZENvbnRhaW5lcik7Ci19Ci0KLWZ1bmN0aW9uIGFkZEV4cGVj
dGF0aW9ucyhleHBlY3RhdGlvbnNDb250YWluZXJzLCBjb250YWluZXIsIGJhc2UsCi0gICAgcGxh
dGZvcm0sIHRleHQsIHBuZywgcmVmdGVzdF9odG1sX2ZpbGUsIHJlZnRlc3RfbWlzbWF0Y2hfaHRt
bF9maWxlKQotewotICAgIHZhciBidWlsZGVyID0gJyc7Ci0gICAgYWRkRXhwZWN0YXRpb25JdGVt
KGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMsIGNvbnRhaW5lciwgcGxhdGZvcm0sIHRleHQsIGJhc2Us
IGJ1aWxkZXIpOwotICAgIGFkZEV4cGVjdGF0aW9uSXRlbShleHBlY3RhdGlvbnNDb250YWluZXJz
LCBjb250YWluZXIsIHBsYXRmb3JtLCBwbmcsIGJhc2UsIGJ1aWxkZXIpOwotICAgIGFkZEV4cGVj
dGF0aW9uSXRlbShleHBlY3RhdGlvbnNDb250YWluZXJzLCBjb250YWluZXIsIHBsYXRmb3JtLCBy
ZWZ0ZXN0X2h0bWxfZmlsZSwgYmFzZSwgYnVpbGRlcik7Ci0gICAgYWRkRXhwZWN0YXRpb25JdGVt
KGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMsIGNvbnRhaW5lciwgcGxhdGZvcm0sIHJlZnRlc3RfbWlz
bWF0Y2hfaHRtbF9maWxlLCBiYXNlLCBidWlsZGVyKTsKLX0KLQotZnVuY3Rpb24gZXhwZWN0YXRp
b25zVGl0bGUocGxhdGZvcm0sIHBhdGgsIGJ1aWxkZXIpCi17Ci0gICAgdmFyIGhlYWRlciA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2gzJyk7Ci0gICAgaGVhZGVyLmNsYXNzTmFtZSA9ICdleHBl
Y3RhdGlvbnMtdGl0bGUnOwotCi0gICAgdmFyIGlubmVySFRNTDsKLSAgICBpZiAoYnVpbGRlcikg
ewotICAgICAgICB2YXIgcmVzdWx0c1R5cGU7Ci0gICAgICAgIGlmIChzdHJpbmcuZW5kc1dpdGgo
cGF0aCwgJy1jcmFzaC1sb2cudHh0JykpCi0gICAgICAgICAgICByZXN1bHRzVHlwZSA9ICdTVEFD
S1RSQUNFJzsKLSAgICAgICAgZWxzZSBpZiAoc3RyaW5nLmVuZHNXaXRoKHBhdGgsICctYWN0dWFs
LnR4dCcpIHx8IHN0cmluZy5lbmRzV2l0aChwYXRoLCAnLWFjdHVhbC5wbmcnKSkKLSAgICAgICAg
ICAgIHJlc3VsdHNUeXBlID0gJ0FDVFVBTCBSRVNVTFRTJzsKLSAgICAgICAgZWxzZSBpZiAoc3Ry
aW5nLmVuZHNXaXRoKHBhdGgsICctd2RpZmYuaHRtbCcpKQotICAgICAgICAgICAgcmVzdWx0c1R5
cGUgPSAnV0RJRkYnOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHRzVHlwZSA9ICdE
SUZGJzsKLQotICAgICAgICBpbm5lckhUTUwgPSByZXN1bHRzVHlwZSArICc6ICcgKyBidWlsZGVy
OwotICAgIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICIiKSB7Ci0gICAgICAgIHZhciBwYXJ0cyA9
IHBhdGguc3BsaXQoJy8nKTsKLSAgICAgICAgaW5uZXJIVE1MID0gcGFydHNbcGFydHMubGVuZ3Ro
IC0gMV07Ci0gICAgfSBlbHNlCi0gICAgICAgIGlubmVySFRNTCA9IHBsYXRmb3JtIHx8IHBhdGg7
Ci0KLSAgICBoZWFkZXIuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9dGl0bGU+JyArIGlubmVySFRN
TCArCi0gICAgICAgICc8L2Rpdj48ZGl2IHN0eWxlPSJmbG9hdDpsZWZ0Ij4mbmJzcDs8L2Rpdj4n
ICsKLSAgICAgICAgJzxkaXYgY2xhc3M9cGxhdGZvcm1zIHN0eWxlPSJmbG9hdDpyaWdodCI+PC9k
aXY+JzsKLSAgICBoZWFkZXIucGxhdGZvcm0gPSBwbGF0Zm9ybTsKLSAgICByZXR1cm4gaGVhZGVy
OwotfQotCi1mdW5jdGlvbiBsb2FkRXhwZWN0YXRpb25zKGV4cGVjdGF0aW9uc0NvbnRhaW5lcikK
LXsKLSAgICB2YXIgdGVzdCA9IGV4cGVjdGF0aW9uc0NvbnRhaW5lci5nZXRBdHRyaWJ1dGUoJ3Rl
c3QnKTsKLSAgICBpZiAoZ19oaXN0b3J5LmlzTGF5b3V0VGVzdFJlc3VsdHMoKSkKLSAgICAgICAg
bG9hZEV4cGVjdGF0aW9uc0xheW91dFRlc3RzKHRlc3QsIGV4cGVjdGF0aW9uc0NvbnRhaW5lcik7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIHZhciByZXN1bHRzID0gZ190ZXN0VG9SZXN1bHRzTWFwW3Rl
c3RdOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspCi0g
ICAgICAgICAgICBsb2FkTm9uV2ViS2l0UmVzdWx0c0ZvckJ1aWxkZXIocmVzdWx0c1tpXS5idWls
ZGVyLCB0ZXN0LCBleHBlY3RhdGlvbnNDb250YWluZXIpOwotICAgIH0KLX0KLQotZnVuY3Rpb24g
bG9hZE5vbldlYktpdFJlc3VsdHNGb3JCdWlsZGVyKGJ1aWxkZXIsIHRlc3QsIGV4cGVjdGF0aW9u
c0NvbnRhaW5lcikKLXsKLSAgICB2YXIgZmFpbHVyZUluZGV4ZXMgPSBpbmRleGVzRm9yRmFpbHVy
ZXMoYnVpbGRlciwgdGVzdCk7Ci0gICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2RpdicpOwotICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAnPGRpdj48Yj4nICsgYnVp
bGRlciArICc8L2I+PC9kaXY+JzsKLSAgICBleHBlY3RhdGlvbnNDb250YWluZXIuYXBwZW5kQ2hp
bGQoY29udGFpbmVyKTsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZhaWx1cmVJbmRleGVzLmxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgc2VlbSB0byB3b3Jr
IGFueW1vcmUuIERpZCB0aGUgcGF0aHMgY2hhbmdlPwotICAgICAgICAvLyBPbmNlIHRoYXQncyBy
ZXNvbHZlZCwgc2VlIGlmIHdlIG5lZWQgdG8gdHJ5IGVhY2ggR1RFU1RfTU9ESUZJRVJTIHByZWZp
eCBhcyB3ZWxsLgotICAgICAgICB2YXIgYnVpbGROdW1iZXIgPSBnX3Jlc3VsdHNCeUJ1aWxkZXJb
YnVpbGRlcl0uYnVpbGROdW1iZXJzW2ZhaWx1cmVJbmRleGVzW2ldXTsKLSAgICAgICAgdmFyIHBh
dGhUb0xvZyA9IGJ1aWxkZXJNYXN0ZXIoYnVpbGRlcikubG9nUGF0aChidWlsZGVyLCBidWlsZE51
bWJlcikgKyBwYXRoVG9GYWlsdXJlTG9nKHRlc3QpOwotICAgICAgICBhcHBlbmROb25XZWJLaXRS
ZXN1bHRzKGNvbnRhaW5lciwgcGF0aFRvTG9nLCAnbm9uLXdlYmtpdC1yZXN1bHRzJyk7Ci0gICAg
fQotfQotCi1mdW5jdGlvbiBhcHBlbmROb25XZWJLaXRSZXN1bHRzKGNvbnRhaW5lciwgdXJsLCBp
dGVtQ2xhc3NOYW1lLCBvcHRfdGl0bGUpCi17Ci0gICAgLy8gVXNlIGEgc2NyaXB0IHRhZyB0byBk
ZXRlY3Qgd2hldGhlciB0aGUgVVJMIDQwNHMuCi0gICAgLy8gTmVlZCB0byB1c2UgYSBzY3JpcHQg
dGFnIHNpbmNlIHRoZSBVUkwgaXMgY3Jvc3MtZG9tYWluLgotICAgIHZhciBkdW1teU5vZGUgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKLSAgICBkdW1teU5vZGUuc3JjID0gdXJs
OwotCi0gICAgZHVtbXlOb2RlLm9ubG9hZCA9IGZ1bmN0aW9uKCkgewotICAgICAgICB2YXIgaXRl
bSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOwotICAgICAgICBpdGVtLnNyYyA9
IGR1bW15Tm9kZS5zcmM7Ci0gICAgICAgIGl0ZW0uY2xhc3NOYW1lID0gaXRlbUNsYXNzTmFtZTsK
LSAgICAgICAgaXRlbS5zdHlsZS5oZWlnaHQgPSBnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNT
dGF0ZS5yZXN1bHRzSGVpZ2h0ICsgJ3B4JzsKLQotICAgICAgICBpZiAob3B0X3RpdGxlKSB7Ci0g
ICAgICAgICAgICB2YXIgY2hpbGRDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdk
aXYnKTsKLSAgICAgICAgICAgIGNoaWxkQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5l
LWJsb2NrJzsKLSAgICAgICAgICAgIHZhciB0aXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpOwotICAgICAgICAgICAgdGl0bGUudGV4dENvbnRlbnQgPSBvcHRfdGl0bGU7Ci0gICAg
ICAgICAgICBjaGlsZENvbnRhaW5lci5hcHBlbmRDaGlsZCh0aXRsZSk7Ci0gICAgICAgICAgICBj
aGlsZENvbnRhaW5lci5hcHBlbmRDaGlsZChpdGVtKTsKLSAgICAgICAgICAgIGNvbnRhaW5lci5y
ZXBsYWNlQ2hpbGQoY2hpbGRDb250YWluZXIsIGR1bW15Tm9kZSk7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgY29udGFpbmVyLnJlcGxhY2VDaGlsZChpdGVtLCBkdW1teU5vZGUpOwotICAg
IH0KLSAgICBkdW1teU5vZGUub25lcnJvciA9IGZ1bmN0aW9uKCkgewotICAgICAgICBjb250YWlu
ZXIucmVtb3ZlQ2hpbGQoZHVtbXlOb2RlKTsKLSAgICB9Ci0KLSAgICBjb250YWluZXIuYXBwZW5k
Q2hpbGQoZHVtbXlOb2RlKTsKLX0KLQotZnVuY3Rpb24gYnVpbGRJbmZvRm9yUmV2aXNpb24oYnVp
bGRlciwgcmV2aXNpb24pCi17Ci0gICAgdmFyIHJldmlzaW9ucyA9IGdfcmVzdWx0c0J5QnVpbGRl
cltidWlsZGVyXS53ZWJraXRSZXZpc2lvbjsKLSAgICB2YXIgcmV2aXNpb25TdGFydCA9IDAsIHJl
dmlzaW9uRW5kID0gMCwgYnVpbGROdW1iZXIgPSAwOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
cmV2aXNpb25zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmIChyZXZpc2lvbiA+IHJldmlzaW9u
c1tpXSkgewotICAgICAgICAgICAgcmV2aXNpb25TdGFydCA9IHJldmlzaW9uc1tpIC0gMV07Ci0g
ICAgICAgICAgICByZXZpc2lvbkVuZCA9IHJldmlzaW9uc1tpXTsKLSAgICAgICAgICAgIGJ1aWxk
TnVtYmVyID0gZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJdLmJ1aWxkTnVtYmVyc1tpIC0gMV07
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChyZXZpc2lv
bkVuZCkKLSAgICAgIHJldmlzaW9uRW5kKys7Ci0gICAgZWxzZQotICAgICAgcmV2aXNpb25FbmQg
PSAnJzsKLQotICAgIHJldHVybiB7cmV2aXNpb25TdGFydDogcmV2aXNpb25TdGFydCwgcmV2aXNp
b25FbmQ6IHJldmlzaW9uRW5kLCBidWlsZE51bWJlcjogYnVpbGROdW1iZXJ9OwotfQotCi1mdW5j
dGlvbiBsb2FkQmFzZWxpbmVzRm9yVGVzdChleHBlY3RhdGlvbnNDb250YWluZXJzLCBleHBlY3Rh
dGlvbnNDb250YWluZXIsIHRlc3QpIHsKLSAgICB2YXIgdGVzdFdpdGhvdXRTdWZmaXggPSB0ZXN0
LnN1YnN0cmluZygwLCB0ZXN0Lmxhc3RJbmRleE9mKCcuJykpOwotICAgIHZhciB0ZXh0ID0gdGVz
dFdpdGhvdXRTdWZmaXggKyAiLWV4cGVjdGVkLnR4dCI7Ci0gICAgdmFyIHBuZyA9IHRlc3RXaXRo
b3V0U3VmZml4ICsgIi1leHBlY3RlZC5wbmciOwotICAgIHZhciByZWZ0ZXN0X2h0bWxfZmlsZSA9
IHRlc3RXaXRob3V0U3VmZml4ICsgIi1leHBlY3RlZC5odG1sIjsKLSAgICB2YXIgcmVmdGVzdF9t
aXNtYXRjaF9odG1sX2ZpbGUgPSB0ZXN0V2l0aG91dFN1ZmZpeCArICItZXhwZWN0ZWQtbWlzbWF0
Y2guaHRtbCI7Ci0KLSAgICBhZGRFeHBlY3RhdGlvbkl0ZW0oZXhwZWN0YXRpb25zQ29udGFpbmVy
cywgZXhwZWN0YXRpb25zQ29udGFpbmVyLCBudWxsLCB0ZXN0LCBURVNUX1VSTF9CQVNFX1BBVEgp
OwotCi0gICAgYWRkRXhwZWN0YXRpb25zKGV4cGVjdGF0aW9uc0NvbnRhaW5lcnMsIGV4cGVjdGF0
aW9uc0NvbnRhaW5lciwKLSAgICAgICAgVEVTVF9VUkxfQkFTRV9QQVRILCAnJywgdGV4dCwgcG5n
LCByZWZ0ZXN0X2h0bWxfZmlsZSwgcmVmdGVzdF9taXNtYXRjaF9odG1sX2ZpbGUpOwotfQotCi1m
dW5jdGlvbiBsb2FkRXhwZWN0YXRpb25zTGF5b3V0VGVzdHModGVzdCwgZXhwZWN0YXRpb25zQ29u
dGFpbmVyKQotewotICAgIC8vIE1hcCBmcm9tIGZpbGUgZXh0ZW5zaW9uIHRvIGNvbnRhaW5lciBk
aXYgZm9yIGV4cGVjdGF0aW9ucyBvZiB0aGF0IHR5cGUuCi0gICAgdmFyIGV4cGVjdGF0aW9uc0Nv
bnRhaW5lcnMgPSB7fTsKLQotICAgIHZhciByZXZpc2lvbkNvbnRhaW5lciA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgIHJldmlzaW9uQ29udGFpbmVyLnRleHRDb250ZW50ID0g
IlNob3dpbmcgcmVzdWx0cyBmb3I6ICIKLSAgICBleHBlY3RhdGlvbnNDb250YWluZXIuYXBwZW5k
Q2hpbGQocmV2aXNpb25Db250YWluZXIpOwotICAgIGZvciAodmFyIGJ1aWxkZXIgaW4gY3VycmVu
dEJ1aWxkZXJzKCkpIHsKLSAgICAgICAgaWYgKGJ1aWxkZXJNYXN0ZXIoYnVpbGRlcikubmFtZSA9
PSBXRUJLSVRfQlVJTERFUl9NQVNURVIpIHsKLSAgICAgICAgICAgIHZhciBsYXRlc3RSZXZpc2lv
biA9IGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnJldmlzaW9uIHx8IGdfcmVzdWx0
c0J5QnVpbGRlcltidWlsZGVyXS53ZWJraXRSZXZpc2lvblswXTsKLSAgICAgICAgICAgIHZhciBi
dWlsZEluZm8gPSBidWlsZEluZm9Gb3JSZXZpc2lvbihidWlsZGVyLCBsYXRlc3RSZXZpc2lvbik7
Ci0gICAgICAgICAgICB2YXIgcmV2aXNpb25JbmZvID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
ZGl2Jyk7Ci0gICAgICAgICAgICByZXZpc2lvbkluZm8uc3R5bGUuY3NzVGV4dCA9ICdiYWNrZ3Jv
dW5kOmxpZ2h0Z3JheTttYXJnaW46MCAzcHg7cGFkZGluZzowIDJweDtkaXNwbGF5OmlubGluZS1i
bG9jazsnOwotICAgICAgICAgICAgcmV2aXNpb25JbmZvLmlubmVySFRNTCA9IGJ1aWxkZXIgKyAn
IHInICsgYnVpbGRJbmZvLnJldmlzaW9uRW5kICsKLSAgICAgICAgICAgICAgICAnOnInICsgYnVp
bGRJbmZvLnJldmlzaW9uU3RhcnQgKyAnLCBidWlsZCAnICsgYnVpbGRJbmZvLmJ1aWxkTnVtYmVy
OwotICAgICAgICAgICAgcmV2aXNpb25Db250YWluZXIuYXBwZW5kQ2hpbGQocmV2aXNpb25JbmZv
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGxvYWRCYXNlbGluZXNGb3JUZXN0KGV4cGVjdGF0
aW9uc0NvbnRhaW5lcnMsIGV4cGVjdGF0aW9uc0NvbnRhaW5lciwgdGVzdCk7Ci0gICAgICAgIAot
ICAgIHZhciB0ZXN0V2l0aG91dFN1ZmZpeCA9IHRlc3Quc3Vic3RyaW5nKDAsIHRlc3QubGFzdElu
ZGV4T2YoJy4nKSk7Ci0gICAgdmFyIGFjdHVhbFJlc3VsdFN1ZmZpeGVzID0gWyctYWN0dWFsLnR4
dCcsICctYWN0dWFsLnBuZycsICctY3Jhc2gtbG9nLnR4dCcsICctZGlmZi50eHQnLCAnLXdkaWZm
Lmh0bWwnLCAnLWRpZmYucG5nJ107Ci0KLSAgICBmb3IgKHZhciBidWlsZGVyIGluIGN1cnJlbnRC
dWlsZGVycygpKSB7Ci0gICAgICAgIHZhciBhY3R1YWxSZXN1bHRzQmFzZTsKLSAgICAgICAgaWYg
KGJ1aWxkZXJNYXN0ZXIoYnVpbGRlcikubmFtZSA9PSBXRUJLSVRfQlVJTERFUl9NQVNURVIpIHsK
LSAgICAgICAgICAgIHZhciBsYXRlc3RSZXZpc2lvbiA9IGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVj
aWZpY1N0YXRlLnJldmlzaW9uIHx8IGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXS53ZWJraXRS
ZXZpc2lvblswXTsKLSAgICAgICAgICAgIHZhciBidWlsZEluZm8gPSBidWlsZEluZm9Gb3JSZXZp
c2lvbihidWlsZGVyLCBsYXRlc3RSZXZpc2lvbik7Ci0gICAgICAgICAgICBhY3R1YWxSZXN1bHRz
QmFzZSA9ICdodHRwczovL2J1aWxkLndlYmtpdC5vcmcvcmVzdWx0cy8nICsgYnVpbGRlciArCi0g
ICAgICAgICAgICAgICAgJy9yJyArIGJ1aWxkSW5mby5yZXZpc2lvblN0YXJ0ICsgJyAoJyArIGJ1
aWxkSW5mby5idWlsZE51bWJlciArICcpLyc7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
Y29uc29sZS5lcnJvcigiVW5leHBlY3RlZCBtYXN0ZXIgbmFtZTogIiArIG1hc3Rlci5uYW1lKTsK
LQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFjdHVhbFJlc3VsdFN1ZmZpeGVzLmxlbmd0
aDsgaSsrKSB7Ci0gICAgICAgICAgICBhZGRFeHBlY3RhdGlvbkl0ZW0oZXhwZWN0YXRpb25zQ29u
dGFpbmVycywgZXhwZWN0YXRpb25zQ29udGFpbmVyLCBudWxsLAotICAgICAgICAgICAgICAgIHRl
c3RXaXRob3V0U3VmZml4ICsgYWN0dWFsUmVzdWx0U3VmZml4ZXNbaV0sIGFjdHVhbFJlc3VsdHNC
YXNlLCBidWlsZGVyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEFkZCBhIGNsZWFyaW5n
IGVsZW1lbnQgc28gZmxvYXRlZCBlbGVtZW50cyBkb24ndCBibGVlZCBvdXQgb2YgdGhlaXIKLSAg
ICAvLyBjb250YWluaW5nIGJsb2NrLgotICAgIHZhciBiciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2JyJyk7Ci0gICAgYnIuc3R5bGUuY2xlYXIgPSAnYm90aCc7Ci0gICAgZXhwZWN0YXRpb25z
Q29udGFpbmVyLmFwcGVuZENoaWxkKGJyKTsKLX0KLQotZnVuY3Rpb24gYXBwZW5kRXhwZWN0YXRp
b25zKCkKLXsKLSAgICB2YXIgZXhwZWN0YXRpb25zID0gZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNp
ZmljU3RhdGUuc2hvd0V4cGVjdGF0aW9ucyA/IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05h
bWUoJ2V4cGVjdGF0aW9ucycpIDogW107Ci0gICAgLy8gTG9hZGluZyBleHBlY3RhdGlvbnMgaXMg
KnZlcnkqIHNsb3cuIFVzZSBhIGxhcmdlIHRpbWVvdXQgdG8gYXZvaWQKLSAgICAvLyB0b3RhbGx5
IGhhbmdpbmcgdGhlIHJlbmRlcmVyLgotICAgIHBlcmZvcm1DaHVua2VkQWN0aW9uKGV4cGVjdGF0
aW9ucywgZnVuY3Rpb24oY2h1bmspIHsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNo
dW5rLmxlbmd0aDsgaSA8IGxlbjsgaSsrKQotICAgICAgICAgICAgbG9hZEV4cGVjdGF0aW9ucyhj
aHVua1tpXSk7Ci0gICAgICAgIHBvc3RIZWlnaHRDaGFuZ2VkTWVzc2FnZSgpOwotCi0gICAgfSwg
aGlkZUxvYWRpbmdVSSwgMTAwMDApOwotfQotCi1mdW5jdGlvbiBoaWRlTG9hZGluZ1VJKCkKLXsK
LSAgICB2YXIgbG9hZGluZ0RpdiA9ICQoJ2xvYWRpbmctdWknKTsKLSAgICBpZiAobG9hZGluZ0Rp
dikKLSAgICAgICAgbG9hZGluZ0Rpdi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwotICAgIHBvc3RI
ZWlnaHRDaGFuZ2VkTWVzc2FnZSgpOwotfQotCi1mdW5jdGlvbiBnZW5lcmF0ZVBhZ2VGb3JJbmRp
dmlkdWFsVGVzdHModGVzdHMpCi17Ci0gICAgY29uc29sZS5sb2coJ051bWJlciBvZiB0ZXN0czog
JyArIHRlc3RzLmxlbmd0aCk7Ci0gICAgaWYgKGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0
YXRlLnNob3dDaHJvbWUpCi0gICAgICAgIGFwcGVuZEhUTUwoaHRtbEZvck5hdkJhcigpKTsKLSAg
ICBwZXJmb3JtQ2h1bmtlZEFjdGlvbih0ZXN0cywgZnVuY3Rpb24oY2h1bmspIHsKLSAgICAgICAg
YXBwZW5kSFRNTChodG1sRm9ySW5kaXZpZHVhbFRlc3RzKGNodW5rKSk7Ci0gICAgfSwgYXBwZW5k
RXhwZWN0YXRpb25zLCA1MDApOwotICAgIGlmIChnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNT
dGF0ZS5zaG93Q2hyb21lKQotICAgICAgICAkKCd0ZXN0cy1pbnB1dCcpLnZhbHVlID0gZ19oaXN0
b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUudGVzdHM7Ci19Ci0KLWZ1bmN0aW9uIHBlcmZvcm1D
aHVua2VkQWN0aW9uKHRlc3RzLCBoYW5kbGVDaHVuaywgb25Db21wbGV0ZSwgdGltZW91dCwgb3B0
X2luZGV4KSB7Ci0gICAgdmFyIGluZGV4ID0gb3B0X2luZGV4IHx8IDA7Ci0gICAgc2V0VGltZW91
dChmdW5jdGlvbigpIHsKLSAgICAgICAgdmFyIGNodW5rID0gQXJyYXkucHJvdG90eXBlLnNsaWNl
LmNhbGwodGVzdHMsIGluZGV4ICogQ0hVTktfU0laRSwgKGluZGV4ICsgMSkgKiBDSFVOS19TSVpF
KTsKLSAgICAgICAgaWYgKGNodW5rLmxlbmd0aCkgewotICAgICAgICAgICAgaGFuZGxlQ2h1bmso
Y2h1bmspOwotICAgICAgICAgICAgcGVyZm9ybUNodW5rZWRBY3Rpb24odGVzdHMsIGhhbmRsZUNo
dW5rLCBvbkNvbXBsZXRlLCB0aW1lb3V0LCArK2luZGV4KTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBvbkNvbXBsZXRlKCk7Ci0gICAgLy8gTm8gbmVlZCBmb3IgYSB0aW1lb3V0IG9uIHRo
ZSBmaXJzdCBjaHVua2VkIGFjdGlvbi4KLSAgICB9LCBpbmRleCA/IHRpbWVvdXQgOiAwKTsKLX0K
LQotZnVuY3Rpb24gaHRtbEZvckluZGl2aWR1YWxUZXN0cyh0ZXN0cykKLXsKLSAgICB2YXIgdGVz
dHNIVE1MID0gW107Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykg
ewotICAgICAgICB2YXIgdGVzdCA9IHRlc3RzW2ldOwotICAgICAgICB2YXIgdGVzdE5hbWVIdG1s
ID0gJyc7Ci0gICAgICAgIGlmIChnX2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5zaG93
Q2hyb21lIHx8IHRlc3RzLmxlbmd0aCA+IDEpIHsKLSAgICAgICAgICAgIGlmIChnX2hpc3Rvcnku
aXNMYXlvdXRUZXN0UmVzdWx0cygpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHRyYWNVUkwgPSBU
RVNUX1VSTF9CQVNFX1BBVEhfVFJBQyArIHRlc3Q7Ci0gICAgICAgICAgICAgICAgdGVzdE5hbWVI
dG1sICs9ICc8aDI+JyArIGxpbmtIVE1MVG9PcGVuV2luZG93KHRyYWNVUkwsIHRlc3QpICsgJzwv
aDI+JzsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHRlc3ROYW1lSHRtbCAr
PSAnPGgyPicgKyB0ZXN0ICsgJzwvaDI+JzsKLSAgICAgICAgfQotCi0gICAgICAgIHRlc3RzSFRN
TC5wdXNoKHRlc3ROYW1lSHRtbCArIGh0bWxGb3JJbmRpdmlkdWFsVGVzdE9uQWxsQnVpbGRlcnNX
aXRoUmVzdWx0c0xpbmtzKHRlc3QpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRlc3RzSFRNTC5qb2lu
KCc8aHI+Jyk7Ci19Ci0KLWZ1bmN0aW9uIGh0bWxGb3JOYXZCYXIoKQotewotICAgIHZhciBleHRy
YUhUTUwgPSAnJzsKLSAgICB2YXIgaHRtbCA9IHVpLmh0bWwudGVzdFR5cGVTd2l0Y2hlcihmYWxz
ZSwgZXh0cmFIVE1MLCBpc0Nyb3NzQnVpbGRlclZpZXcoKSk7Ci0gICAgaHRtbCArPSAnPGRpdiBj
bGFzcz1mb3Jtcz48Zm9ybSBpZD1yZXN1bHQtZm9ybSAnICsKLSAgICAgICAgJ29uc3VibWl0PSJn
X2hpc3Rvcnkuc2V0UXVlcnlQYXJhbWV0ZXIoXCdyZXN1bHRcJywgcmVzdWx0LnZhbHVlKTsnICsK
LSAgICAgICAgJ3JldHVybiBmYWxzZTsiPlNob3cgYWxsIHRlc3RzIHdpdGggcmVzdWx0OiAnICsK
LSAgICAgICAgJzxpbnB1dCBuYW1lPXJlc3VsdCBwbGFjZWhvbGRlcj0iZS5nLiBDUkFTSCIgaWQ9
cmVzdWx0LWlucHV0PicgKwotICAgICAgICAnPC9mb3JtPjxmb3JtIGlkPXRlc3RzLWZvcm0gJyAr
Ci0gICAgICAgICdvbnN1Ym1pdD0iZ19oaXN0b3J5LnNldFF1ZXJ5UGFyYW1ldGVyKFwndGVzdHNc
JywgdGVzdHMudmFsdWUpOycgKwotICAgICAgICAncmV0dXJuIGZhbHNlOyI+PHNwYW4+U2hvdyB0
ZXN0cyBvbiBhbGwgcGxhdGZvcm1zOiA8L3NwYW4+JyArCi0gICAgICAgICc8aW5wdXQgbmFtZT10
ZXN0cyAnICsKLSAgICAgICAgJ3BsYWNlaG9sZGVyPSJDb21tYSBvciBzcGFjZS1zZXBhcmF0ZWQg
bGlzdCBvZiB0ZXN0cyBvciBwYXJ0aWFsICcgKwotICAgICAgICAncGF0aHMgdG8gc2hvdyB0ZXN0
IHJlc3VsdHMgYWNyb3NzIGFsbCBidWlsZGVycywgZS5nLiwgJyArCi0gICAgICAgICdmb28vYmFy
Lmh0bWwsZm9vL2Jheixkb21zdG9yYWdlIiBpZD10ZXN0cy1pbnB1dD48L2Zvcm0+JyArCi0gICAg
ICAgICc8c3BhbiBjbGFzcz1saW5rIG9uY2xpY2s9InNob3dMZWdlbmQoKSI+U2hvdyBsZWdlbmQg
W3R5cGUgP108L3NwYW4+PC9kaXY+JzsKLSAgICByZXR1cm4gaHRtbDsKLX0KLQotZnVuY3Rpb24g
Y2hlY2tCb3hUb1RvZ2dsZVN0YXRlKGtleSwgdGV4dCkKLXsKLSAgICB2YXIgc3RhdGVFbmFibGVk
ID0gZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGVba2V5XTsKLSAgICByZXR1cm4gJzxs
YWJlbD48aW5wdXQgdHlwZT1jaGVja2JveCAnICsgKHN0YXRlRW5hYmxlZCA/ICdjaGVja2VkICcg
OiAnJykgKyAnb25jbGljaz0iZ19oaXN0b3J5LnNldFF1ZXJ5UGFyYW1ldGVyKFwnJyArIGtleSAr
ICdcJywgJyArICFzdGF0ZUVuYWJsZWQgKyAnKSI+JyArIHRleHQgKyAnPC9sYWJlbD4gJzsKLX0K
LQotZnVuY3Rpb24gbGlua0hUTUxUb1RvZ2dsZVN0YXRlKGtleSwgbGlua1RleHQpCi17Ci0gICAg
dmFyIHN0YXRlRW5hYmxlZCA9IGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlW2tleV07
Ci0gICAgcmV0dXJuICc8c3BhbiBjbGFzcz1saW5rIG9uY2xpY2s9ImdfaGlzdG9yeS5zZXRRdWVy
eVBhcmFtZXRlcihcJycgKyBrZXkgKyAnXCcsICcgKyAhc3RhdGVFbmFibGVkICsgJykiPicgKyAo
c3RhdGVFbmFibGVkID8gJ0hpZGUnIDogJ1Nob3cnKSArICcgJyArIGxpbmtUZXh0ICsgJzwvc3Bh
bj4nOwotfQotCi1mdW5jdGlvbiBoZWFkZXJGb3JUZXN0VGFibGVIdG1sKCkKLXsKLSAgICByZXR1
cm4gJzxoMiBzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxvY2siPlNob3cgVGVzdHMgRmxhZ2dlZCBB
cy9XaXRoOiA8L2gyPicgKwotICAgICAgICBjaGVja0JveFRvVG9nZ2xlU3RhdGUoJ3Nob3dXb250
Rml4U2tpcCcsICJXb24ndCBGaXgvU2tpcCIpICsKLSAgICAgICAgY2hlY2tCb3hUb1RvZ2dsZVN0
YXRlKCdzaG93Q29ycmVjdEV4cGVjdGF0aW9ucycsICdDb3JyZWN0IEV4cGVjdGF0aW9ucycpICsK
LSAgICAgICAgY2hlY2tCb3hUb1RvZ2dsZVN0YXRlKCdzaG93V3JvbmdFeHBlY3RhdGlvbnMnLCAn
SW5jb3JyZWN0IEV4cGVjdGF0aW9ucycpICsKLSAgICAgICAgY2hlY2tCb3hUb1RvZ2dsZVN0YXRl
KCdzaG93Rmxha3knLCAnRmxha3knKSArCi0gICAgICAgIGNoZWNrQm94VG9Ub2dnbGVTdGF0ZSgn
c2hvd1Nsb3cnLCAnU2xvdycpOwotfQotCi1mdW5jdGlvbiBnZW5lcmF0ZVBhZ2VGb3JCdWlsZGVy
KGJ1aWxkZXJOYW1lKQotewotICAgIHByb2Nlc3NUZXN0UnVuc0ZvckJ1aWxkZXIoYnVpbGRlck5h
bWUpOwotCi0gICAgdmFyIHJlc3VsdHMgPSBnX3BlckJ1aWxkZXJGYWlsdXJlc1tidWlsZGVyTmFt
ZV07Ci0gICAgc29ydFRlc3RzKHJlc3VsdHMsIGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0
YXRlLnNvcnRDb2x1bW4sIGdfaGlzdG9yeS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnNvcnRPcmRl
cik7Ci0KLSAgICB2YXIgdGVzdHNIVE1MID0gJyc7Ci0gICAgaWYgKHJlc3VsdHMubGVuZ3RoKSB7
Ci0gICAgICAgIHZhciB0YWJsZVJvd3NIVE1MID0gJyc7Ci0gICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykKLSAgICAgICAgICAgIHRhYmxlUm93c0hUTUwgKz0g
aHRtbEZvclNpbmdsZVRlc3RSb3cocmVzdWx0c1tpXSkKLSAgICAgICAgdGVzdHNIVE1MID0gaHRt
bEZvclRlc3RUYWJsZSh0YWJsZVJvd3NIVE1MKTsKLSAgICB9IGVsc2UgewotICAgICAgICB0ZXN0
c0hUTUwgPSAnPGRpdj5ObyB0ZXN0cyBmb3VuZC4gJzsKLSAgICAgICAgaWYgKGdfaGlzdG9yeS5p
c0xheW91dFRlc3RSZXN1bHRzKCkpCi0gICAgICAgICAgICB0ZXN0c0hUTUwgKz0gJ1RyeSBzaG93
aW5nIHRlc3RzIHdpdGggY29ycmVjdCBleHBlY3RhdGlvbnMuPC9kaXY+JzsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdGVzdHNIVE1MICs9ICdUaGlzIG1lYW5zIG5vIHRlc3RzIGhhdmUgZmFp
bGVkITwvZGl2Pic7Ci0gICAgfQotCi0gICAgdmFyIGh0bWwgPSBodG1sRm9yTmF2QmFyKCk7Ci0K
LSAgICBpZiAoZ19oaXN0b3J5LmlzTGF5b3V0VGVzdFJlc3VsdHMoKSkKLSAgICAgICAgaHRtbCAr
PSBodG1sRm9yVGVzdHNXaXRoRXhwZWN0YXRpb25zQnV0Tm9GYWlsdXJlcyhidWlsZGVyTmFtZSkg
KyBoZWFkZXJGb3JUZXN0VGFibGVIdG1sKCk7Ci0KLSAgICBodG1sICs9ICc8YnI+JyArIHRlc3Rz
SFRNTDsKLSAgICBhcHBlbmRIVE1MKGh0bWwpOwotCi0gICAgdmFyIHRocyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCd0aCcpOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhzLmxl
bmd0aDsgaSsrKSB7Ci0gICAgICAgIHRoc1tpXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGNo
YW5nZVNvcnQsIGZhbHNlKTsKLSAgICAgICAgdGhzW2ldLmNsYXNzTmFtZSA9ICJzb3J0YWJsZSI7
Ci0gICAgfQotCi0gICAgaGlkZUxvYWRpbmdVSSgpOwotfQotCi12YXIgVkFMSURfS0VZU19GT1Jf
Q1JPU1NfQlVJTERFUl9WSUVXID0gewotICAgIHRlc3RzOiAxLAotICAgIHJlc3VsdDogMSwKLSAg
ICBzaG93Q2hyb21lOiAxLAotICAgIHNob3dFeHBlY3RhdGlvbnM6IDEsCi0gICAgc2hvd0xhcmdl
RXhwZWN0YXRpb25zOiAxLAotICAgIGxlZ2FjeUV4cGVjdGF0aW9uc1NlbWFudGljczogMSwKLSAg
ICByZXN1bHRzSGVpZ2h0OiAxLAotICAgIHJldmlzaW9uOiAxCi19OwotCi1mdW5jdGlvbiBpc0lu
dmFsaWRLZXlGb3JDcm9zc0J1aWxkZXJWaWV3KGtleSkKLXsKLSAgICByZXR1cm4gIShrZXkgaW4g
VkFMSURfS0VZU19GT1JfQ1JPU1NfQlVJTERFUl9WSUVXKSAmJiAhKGtleSBpbiBoaXN0b3J5LkRF
RkFVTFRfQ1JPU1NfREFTSEJPQVJEX1NUQVRFX1ZBTFVFUyk7Ci19Ci0KLWZ1bmN0aW9uIGhpZGVM
ZWdlbmQoKQotewotICAgIHZhciBsZWdlbmQgPSAkKCdsZWdlbmQnKTsKLSAgICBpZiAobGVnZW5k
KQotICAgICAgICBsZWdlbmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChsZWdlbmQpOwotfQotCi1m
dW5jdGlvbiBzaG93TGVnZW5kKCkKLXsKLSAgICB2YXIgbGVnZW5kID0gJCgnbGVnZW5kJyk7Ci0g
ICAgaWYgKCFsZWdlbmQpIHsKLSAgICAgICAgbGVnZW5kID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2Jyk7Ci0gICAgICAgIGxlZ2VuZC5pZCA9ICdsZWdlbmQnOwotICAgICAgICBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKGxlZ2VuZCk7Ci0gICAgfQotCi0gICAgdmFyIGh0bWwgPSAnPGRp
diBpZD1sZWdlbmQtdG9nZ2xlIG9uY2xpY2s9ImhpZGVMZWdlbmQoKSI+SGlkZSAnICsKLSAgICAg
ICAgJ2xlZ2VuZCBbdHlwZSBlc2NdPC9kaXY+PGRpdiBpZD1sZWdlbmQtY29udGVudHM+JzsKLSAg
ICBmb3IgKHZhciBleHBlY3RhdGlvbiBpbiBleHBlY3RhdGlvbnNNYXAoKSkKLSAgICAgICAgaHRt
bCArPSAnPGRpdiBjbGFzcz0nICsgZXhwZWN0YXRpb24gKyAnPicgKyBleHBlY3RhdGlvbnNNYXAo
KVtleHBlY3RhdGlvbl0gKyAnPC9kaXY+JzsKLQotICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9bWVy
Z2U+V0VCS0lUIE1FUkdFPC9kaXY+JzsKLSAgICBpZiAoZ19oaXN0b3J5LmlzTGF5b3V0VGVzdFJl
c3VsdHMoKSkKLSAgICAgIGh0bWwgKz0gJzwvZGl2PjxiciBzdHlsZT0iY2xlYXI6Ym90aCI+PGRp
dj5USU1FUzo8L2Rpdj4nICsKLSAgICAgICAgICBodG1sRm9yU2xvd1RpbWVzKE1JTl9TRUNPTkRT
X0ZPUl9TTE9XX1RFU1QpICsKLSAgICAgICAgICAnPGRpdj5ERUJVRyBUSU1FUzo8L2Rpdj4nICsK
LSAgICAgICAgICBodG1sRm9yU2xvd1RpbWVzKE1JTl9TRUNPTkRTX0ZPUl9TTE9XX1RFU1RfREVC
VUcpOwotCi0gICAgbGVnZW5kLmlubmVySFRNTCA9IGh0bWw7Ci19Ci0KLWZ1bmN0aW9uIGh0bWxG
b3JTbG93VGltZXMobWluVGltZSkKLXsKLSAgICByZXR1cm4gJzx1bD48bGk+Jmx0OzEgc2Vjb25k
ID09ICFTTE9XPC9saT48bGk+Jmd0OzEgc2Vjb25kICYmICZsdDsnICsKLSAgICAgICAgbWluVGlt
ZSArICcgc2Vjb25kcyA9PSBTTE9XIHx8ICFTTE9XIGlzIGZpbmU8L2xpPjxsaT4mZ3Q7JyArCi0g
ICAgICAgIG1pblRpbWUgKyAnIHNlY29uZHMgPT0gU0xPVzwvbGk+PC91bD4nOwotfQotCi1mdW5j
dGlvbiBwb3N0SGVpZ2h0Q2hhbmdlZE1lc3NhZ2UoKQotewotICAgIGlmICh3aW5kb3cgPT0gcGFy
ZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50
RWxlbWVudDsKLSAgICB2YXIgaGVpZ2h0ID0gcm9vdC5vZmZzZXRIZWlnaHQ7Ci0gICAgaWYgKHJv
b3Qub2Zmc2V0V2lkdGggPCByb290LnNjcm9sbFdpZHRoKSB7Ci0gICAgICAgIC8vIFdlIGhhdmUg
YSBob3Jpem9udGFsIHNjcm9sbGJhci4gSW5jbHVkZSBpdCBpbiB0aGUgaGVpZ2h0LgotICAgICAg
ICB2YXIgZHVtbXlOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgICAg
IGR1bW15Tm9kZS5zdHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnOwotICAgICAgICBkb2N1bWVudC5i
b2R5LmFwcGVuZENoaWxkKGR1bW15Tm9kZSk7Ci0gICAgICAgIHZhciBzY3JvbGxiYXJXaWR0aCA9
IGR1bW15Tm9kZS5vZmZzZXRIZWlnaHQgLSBkdW1teU5vZGUuY2xpZW50SGVpZ2h0OwotICAgICAg
ICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGR1bW15Tm9kZSk7Ci0gICAgICAgIGhlaWdodCAr
PSBzY3JvbGxiYXJXaWR0aDsKLSAgICB9Ci0gICAgcGFyZW50LnBvc3RNZXNzYWdlKHtjb21tYW5k
OiAnaGVpZ2h0Q2hhbmdlZCcsIGhlaWdodDogaGVpZ2h0fSwgJyonKQotfQotCi1pZiAod2luZG93
ICE9IHBhcmVudCkKLSAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHVpLnBvcHVw
LmhpZGUpOwotCi1kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24o
ZSkgewotICAgIGlmIChlLmtleUlkZW50aWZpZXIgPT0gJ1UrMDAzRicgfHwgZS5rZXlJZGVudGlm
aWVyID09ICdVKzAwQkYnKSB7Ci0gICAgICAgIC8vIFdlYktpdCBNQUMgcmV0dXJzbiAzRi4gV2Vi
S2l0IFdJTiByZXR1cm5zIEJGLiBUaGlzIGlzIGEgYnVnIQotICAgICAgICAvLyA/IGtleQotICAg
ICAgICBzaG93TGVnZW5kKCk7Ci0gICAgfSBlbHNlIGlmIChlLmtleUlkZW50aWZpZXIgPT0gJ1Ur
MDAxQicpIHsKLSAgICAgICAgLy8gZXNjYXBlIGtleQotICAgICAgICBoaWRlTGVnZW5kKCk7Ci0g
ICAgICAgIHVpLnBvcHVwLmhpZGUoKTsKLSAgICB9Ci19LCBmYWxzZSk7Ci0KLXdpbmRvdy5hZGRF
dmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24oKSB7Ci0gICAgcmVzb3VyY2VMb2FkZXIgPSBu
ZXcgbG9hZGVyLkxvYWRlcigpOwotICAgIHJlc291cmNlTG9hZGVyLmxvYWQoKTsKLX0sIGZhbHNl
KTsKClByb3BlcnR5IGNoYW5nZXMgb246IFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRh
c2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZC5qcwpfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjpl
b2wtc3R5bGUKIyMgLTEgKzAsMCAjIwotTEYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpJbmRleDogVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5l
c3NfZGFzaGJvYXJkX2VtYmVkZGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkX2VtYmVkZGVkLmh0
bWwJKHJldmlzaW9uIDI2NDUyNykKKysrIFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRh
c2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZF9lbWJlZGRlZC5odG1sCShub25leGlzdGVudCkK
QEAgLTEsODMgKzAsMCBAQAotPCEtLSBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi1tZXQ6Ci0KLSAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci1ub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi1jb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi1pbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi1kaXN0cmlidXRpb24u
Ci0gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi1jb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLUxJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLU9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi1EQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLVRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLShJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLS0tPgotPCFET0NU
WVBFIEhUTUw+Ci08c3R5bGU+Ci1pZnJhbWUgewotICAgIHdpZHRoOiAxMDAlOwotICAgIGRpc3Bs
YXk6IGJsb2NrOwotfQotI3Rvb2xiYXIgewotICAgIGRpc3BsYXk6IC13ZWJraXQtZmxleGJveDsK
LSAgICAtd2Via2l0LWZsZXgtYWxpZ246IGJhc2VsaW5lOwotfQotI3Rlc3RzIHsKLSAgICAtd2Vi
a2l0LWZsZXg6IDE7Ci0gICAgLyogV2ViS2l0IGJ1Zy4gRG9uJ3QgcHJvcGVybHkgd3JhcCBpbnB1
dCBlbGVtZW50cyBmb3IgZmxleGluZy4gKi8KLSAgICBkaXNwbGF5OiBibG9jazsKLX0KLTwvc3R5
bGU+Ci0KLTxkaXY+VGhpcyBpcyBhIGRlbW8gcGFnZSBmb3Igd29ya2luZyBvbiBpZnJhbWUgZW1i
ZWRkaW5nIHRoZSBmbGFraW5lc3MgZGFzaGJvYXJkLjwvZGl2PgotPGRpdiBpZD0idG9vbGJhciI+
Ci0gICAgPGlucHV0IGlkPSJjaHJvbWUiIHR5cGU9Y2hlY2tib3g+PC9pbnB1dD48bGFiZWw+SGlk
ZSBjaHJvbWU8L2xhYmVsPiB8IAotICAgIDxsYWJlbD5UZXN0czo8L2xhYmVsPjxpbnB1dCBpZD10
ZXN0cyBwbGFjZWhvbGRlcj0iVHlwZSB0ZXN0IG5hbWUgaGVyZSB0byBsb2FkIGEgZGlmZmVyZW50
IHRlc3QgaW4gdGhlIGZyYW1lIiA+PC9pbnB1dD4KLTwvZGl2PgotPGlmcmFtZSBzcmM9ImZsYWtp
bmVzc19kYXNoYm9hcmQuaHRtbCI+PC9pZnJhbWU+Ci0KLTxzY3JpcHQ+Ci12YXIgdGltZW91dElk
OwotZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3Rlc3RzJykub25pbnB1dCA9IGZ1bmN0aW9uKGV2
ZW50KSB7Ci0gICAgaWYgKHRpbWVvdXRJZCkKLSAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJ
ZCk7Ci0gICAgdGltZW91dElkID0gc2V0VGltZW91dChzZXRGcmFtZVNyYywgMTAwMCk7Ci19Owot
ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2Nocm9tZScpLm9uY2hhbmdlID0gc2V0RnJhbWVTcmM7
Ci0KLWZ1bmN0aW9uIHNldEZyYW1lU3JjKCkgewotICAgIHZhciB0ZXN0cyA9IGRvY3VtZW50LnF1
ZXJ5U2VsZWN0b3IoJyN0ZXN0cycpLnZhbHVlOwotICAgIHZhciBoaWRlQ2hyb21lID0gZG9jdW1l
bnQucXVlcnlTZWxlY3RvcignI2Nocm9tZScpLmNoZWNrZWQgPyAnJnNob3dDaHJvbWU9ZmFsc2Un
IDogJyc7Ci0gICAgdmFyIHVybCA9ICdmbGFraW5lc3NfZGFzaGJvYXJkLmh0bWwjdGVzdHM9JyAr
IHRlc3RzICsgaGlkZUNocm9tZTsKLSAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpZnJhbWUn
KS5zcmMgPSB1cmw7Ci19OwotCi1mdW5jdGlvbiBzaXplSWZyYW1lVG9Db250ZW50cygpIHsKLSAg
ICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpZnJhbWUnKS5jb250ZW50V2luZG93LnBvc3RNZXNz
YWdlKHtjb21tYW5kOiAncXVlcnlDb250ZW50SGVpZ2h0J30sICcqJyk7Ci19OwotCi13aW5kb3cu
YWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmN0aW9uKGV2ZW50KSB7Ci0gICAgc3dpdGNo
KGV2ZW50LmRhdGEuY29tbWFuZCkgewotICAgIGNhc2UgJ2hlaWdodENoYW5nZWQnOgotICAgICAg
ICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpZnJhbWUnKS5zdHlsZS5oZWlnaHQgPSBldmVudC5k
YXRhLmhlaWdodCArICdweCc7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAg
ICAgY29uc29sZS5lcnJvcignRGlkIG5vdCB1bmRlcnN0YW5kIG1lc3NhZ2U6ICcgKyBldmVudC5k
YXRhKTsKLSAgICB9Ci19KTsKLTwvc2NyaXB0PgpJbmRleDogVG9vbHMvVGVzdFJlc3VsdFNlcnZl
ci9zdGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkX2VtYmVkZGVkX3VuaXR0ZXN0
cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9h
cmRzL2ZsYWtpbmVzc19kYXNoYm9hcmRfZW1iZWRkZWRfdW5pdHRlc3RzLmpzCShyZXZpc2lvbiAy
NjQ1MjcpCisrKyBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtp
bmVzc19kYXNoYm9hcmRfZW1iZWRkZWRfdW5pdHRlc3RzLmpzCShub25leGlzdGVudCkKQEAgLTEs
NDAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0v
LwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8v
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8v
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0K
LXRlc3QoJ2hpZGVQb3B1cE9uQmx1cicsIDIsIGZ1bmN0aW9uKCkgewotICAgIHVpLnBvcHVwLnNo
b3coZG9jdW1lbnQuYm9keSwgJ2R1bW15IGNvbnRlbnQnKTsKLSAgICBvayhkb2N1bWVudC5xdWVy
eVNlbGVjdG9yKCcjcG9wdXAnKSk7Ci0KLSAgICAvLyBDYXVzZSB0aGUgd2luZG93IHRvIGJlIGJs
dXJyZWQuCi0gICAgdmFyIGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7
Ci0gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmcmFtZSk7Ci0gICAgZnJhbWUuZm9jdXMo
KTsKLSAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGZyYW1lKTsKLQotICAgIG9rKCFkb2N1
bWVudC5xdWVyeVNlbGVjdG9yKCcjcG9wdXAnKSk7Ci19KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCkluZGV4OiBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2Zs
YWtpbmVzc19kYXNoYm9hcmRfdGVzdHMuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RSZXN1
bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZF90ZXN0cy5jc3MJ
KHJldmlzaW9uIDI2NDUyNykKKysrIFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hi
b2FyZHMvZmxha2luZXNzX2Rhc2hib2FyZF90ZXN0cy5jc3MJKG5vbmV4aXN0ZW50KQpAQCAtMSwy
NzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNlcnJvcnMgewotICAgIGNvbG9yOiByZWQ7Ci0gICAgZm9udC1zaXplOiAxNnB4
OwotICAgIG1hcmdpbjogMDsKLX0KLSNyZXN1bHQtaW5wdXQgewotICAgIHdpZHRoOiA3ZW07Ci19
Ci0udGVzdC1saW5rLmJ1aWxkZXItbmFtZSB7Ci0gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLX0K
LS50ZXN0LWxpbmssIC5vcHRpb25zLWNvbnRhaW5lciB7Ci0gICAgcGFkZGluZzogMCAycHg7Ci19
Ci0udGVzdC10YWJsZSB7Ci0gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLSAgICBib3JkZXItc3Bh
Y2luZzogMXB4OwotfQotLyogTGV0IHRoZSBidWdzIGNvbHVtbiB3cmFwLiAqLwotLnRlc3QtdGFi
bGUgdHIgPiB0ZDpudGgtY2hpbGQoMikgewotICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7Ci19Ci0u
dGVzdC10YWJsZSB7Ci0gICAgd2lkdGg6IDEwMCU7Ci19Ci0udGVzdC10YWJsZSB0ciB7Ci0gICAg
Ym9yZGVyOiAxcHggc29saWQgcmVkOwotICAgIGJhY2tncm91bmQtY29sb3I6ICNFOEU4RTg7Ci19
Ci0udGVzdC10YWJsZSB0Ym9keSB0cjpob3ZlciB7Ci0gICAgb3BhY2l0eTogLjc7Ci19Ci0udGVz
dC10YWJsZSB0aCB7Ci0gICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKLSAgICAtbW96LXVz
ZXItc2VsZWN0OiBub25lOwotfQotLmxpbmssIC5zb3J0YWJsZSAuaGVhZGVyLXRleHQgewotICAg
IGNvbG9yOiBibHVlOwotICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwotICAgIGN1cnNv
cjogcG9pbnRlcjsKLX0KLS50YWJsZS1oZWFkZXItY29udGVudCwKLS50YWJsZS1oZWFkZXItY29u
dGVudCAqIHsKLSAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKLX0KLS50YWJsZS1oZWFkZXItY29u
dGVudCAqIHsKLSAgICAtd2Via2l0LWJveC1mbGV4OiAxOwotICAgIGN1cnNvcjogcG9pbnRlcjsK
LX0KLS5yZXN1bHRzIHsKLSAgICBjdXJzb3I6IHBvaW50ZXI7Ci0gICAgcGFkZGluZzogMCAxcHg7
Ci0gICAgZm9udC1zaXplOiAxMHB4OwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLX0KLSNsZWdl
bmQgewotICAgIHBvc2l0aW9uOiBmaXhlZDsKLSAgICB0b3A6IDVweDsKLSAgICByaWdodDogNXB4
OwotICAgIHdpZHRoOiA0MDBweDsKLSAgICBwYWRkaW5nOiAycHg7Ci0gICAgYm9yZGVyOiAycHgg
c29saWQgZ3JleTsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKLSAgICB6LWluZGV4OiAx
OwotfQotI2xlZ2VuZCB1bCwgI2xlZ2VuZCBvbCB7Ci0gICAgbWFyZ2luLXRvcDogMDsKLSAgICBt
YXJnaW4tYm90dG9tOiA1cHg7Ci19Ci0jbGVnZW5kLWNvbnRlbnRzICogewotICAgIG1hcmdpbjog
M3B4IDA7Ci0gICAgcGFkZGluZzogMCAycHg7Ci0gICAgZmxvYXQ6IGxlZnQ7Ci0gICAgYm9yZGVy
OiAxcHggc29saWQgZ3JleTsKLX0KLS5QIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2YzOwot
fQotLk4gewotICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7Ci19Ci0uWCB7Ci0gICAgYmFja2dy
b3VuZC1jb2xvcjogbGlnaHRncmF5OwotfQotLkMgewotICAgIGJhY2tncm91bmQtY29sb3I6ICNj
OTA7Ci19Ci0uVCB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmM2YzsKLX0KLS5JIHsKLSAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiAjNjlmOwotfQotLlMgewotICAgIGJhY2tncm91bmQtY29sb3I6
ICNjNmM7Ci19Ci0uRiB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogI2U5ODA4MDsKLX0KLS5PIHsK
LSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjOGE3NzAwOwotfQotLlogewotICAgIGJhY2tncm91bmQt
Y29sb3I6ICM5NmY7Ci19Ci0jbGVnZW5kIC5tZXJnZSB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjog
YmxhY2s7Ci0gICAgY29sb3I6IHdoaXRlOwotfQotLnRlc3QtdGFibGUgLm1lcmdlIHsKLSAgICBi
b3JkZXItcmlnaHQ6IHNvbGlkIDJweCAjMDAwOwotICAgIHBhZGRpbmctcmlnaHQ6IDA7Ci19Ci0u
c2VwYXJhdG9yIHsKLSAgICBib3JkZXI6IDFweCBzb2xpZCBsaWdodGdyYXk7Ci0gICAgaGVpZ2h0
OiAwcHg7Ci19Ci0jcGFzc2luZy10ZXN0cywKLSNza2lwcGVkLXRlc3RzIHsKLSAgICAtd2Via2l0
LWNvbHVtbi1jb3VudDogMzsKLSAgICAtd2Via2l0LWNvbHVtbi1nYXA6IDI1cHg7Ci0gICAgLXdl
YmtpdC1jb2x1bW4tcnVsZTogMXB4IGRhc2hlZCBibGFjazsKLSAgICAtbW96LWNvbHVtbi1jb3Vu
dDogMzsKLSAgICAtbW96LWNvbHVtbi1nYXA6IDI1cHg7Ci0gICAgLW1vei1jb2x1bW4tcnVsZTog
MXB4IGRhc2hlZCBibGFjazsKLSAgICBib3JkZXItdG9wOiAxcHggZGFzaGVkIGJsYWNrOwotICAg
IGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgYmxhY2s7Ci19Ci0ubm90LWZvdW5kIHsKLSAgICBj
b2xvcjogcmVkOwotICAgIGZvbnQtc2l6ZTogbGFyZ2U7Ci19Ci0jbG9hZGluZy11aSB7Ci0gICAg
cG9zaXRpb246IGZpeGVkOwotICAgIHRvcDogMDsKLSAgICBsZWZ0OiAwOwotICAgIGJhY2tncm91
bmQtY29sb3I6IHllbGxvdzsKLSAgICBwYWRkaW5nOiA1cHg7Ci0gICAgdGV4dC1hbGlnbjogY2Vu
dGVyOwotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotI3BvcHVwIHsKLSAgICBiYWNrZ3JvdW5k
LWNvbG9yOiB3aGl0ZTsKLSAgICB6LWluZGV4OiAxOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsK
LSAgICBib3JkZXI6IDNweCBzb2xpZCBncmV5OwotICAgIHBhZGRpbmc6IDNweDsKLSAgICAtd2Vi
a2l0LWJveC1zaGFkb3c6IDVweCA1cHggNXB4IHJnYmEoMCwgMCwgMCwgMC41KTsKLSAgICAtbW96
LWJveC1zaGFkb3c6IDVweCA1cHggNXB4IHJnYmEoMCwgMCwgMCwgMC41KTsKLSAgICAtd2Via2l0
LWJvcmRlci1yYWRpdXM6IDVweDsKLSAgICAtbW96LWJvcmRlci1yYWRpdXM6IDVweDsKLX0KLSNw
b3B1cCA+IHVsIHsKLSAgICBtYXJnaW46IDA7Ci0gICAgcGFkZGluZy1sZWZ0OiAyMHB4OwotfQot
LmV4cGVjdGF0aW9ucy1jb250YWluZXIgewotICAgIGNsZWFyOiBib3RoOwotfQotLmV4cGVjdGF0
aW9ucy1pdGVtIHsKLSAgICBmbG9hdDogbGVmdDsKLSAgICBib3JkZXI6IDFweCBzb2xpZCBncmV5
OwotICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OwotICAgIGRpc3BsYXk6IC1tb3otYm94OwotICAg
IHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsOwot
ICAgIC1tb3otYm94LW9yaWVudDogdmVydGljYWw7Ci19Ci0uZXhwZWN0YXRpb25zLWl0ZW0gLmV4
cGVjdGF0aW9uIHsKLSAgICB3aWR0aDogNDAwcHg7Ci0gICAgaGVpZ2h0OiAzMDBweDsKLSAgICBi
b3JkZXI6IDA7Ci0gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIGdyZXk7Ci0gICAgb3ZlcmZsb3c6
IGF1dG87Ci0gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7Ci0gICAgZGlzcGxheTogLW1vei1ib3g7
Ci0gICAgLXdlYmtpdC1ib3gtZmxleDogMTsKLSAgICAtbW96LWJveC1mbGV4OiAxOwotfQotcHJl
LmV4cGVjdGF0aW9uIHsKLSAgICBwYWRkaW5nOiA4cHg7Ci0gICAgbWFyZ2luOiAwOwotICAgIGJv
eC1zaXppbmc6IGJvcmRlci1ib3g7Ci19Ci0uZXhwZWN0YXRpb25zLWl0ZW0gLmxhcmdlIHsKLSAg
ICB3aWR0aDogODAwcHg7Ci0gICAgaGVpZ2h0OiA2MDBweDsKLX0KLS5ub24td2Via2l0LXJlc3Vs
dHMgewotICAgIHdpZHRoOiA5OSU7Ci19Ci0udXNlZC1wbGF0Zm9ybSB7Ci0gICAgZmxvYXQ6IHJp
Z2h0OwotICAgIGNvbG9yOiBkYXJrYmx1ZTsKLSAgICBtYXJnaW46IDAgNXB4OwotfQotLmV4cGVj
dGF0aW9ucy10aXRsZSB7Ci0gICAgLyogSGFjayB0byBtYWtlIGEgY29udGFpbmluZyBibG9jayBm
b3IgYWJzb2x1dGUgcG9zaXRpb25lZCBlbGVtZW50cy4gKi8KLSAgICBwb3NpdGlvbjogcmVsYXRp
dmU7Ci0gICAgY2xlYXI6IGJvdGg7Ci19Ci0udGl0bGUgewotICAgIC8qIFBvc2l0aW9uIGFic29s
dXRlbHkgc28gdGhlIGNvbnRhaW5lciBkb2VzIG5vdCBncm93IHRvIGNvbnRhaW4gdGhpcy4gKi8K
LSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci19Ci0ucGxhdGZvcm1zIHsKLSAgICBwb3NpdGlvbjog
YWJzb2x1dGU7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgei1pbmRleDogMTsKLX0KLS5maWxlLWJ1ZyB7
Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgZm9udC1zaXplOiAxMXB4OwotfQotLnBuZ2No
ZWNrc3VtIHsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgcmlnaHQ6IDA7Ci0gICAgYm90
dG9tOiAwOwotICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmYzg7Ci0gICAgdmlzaWJpbGl0eTog
aGlkZGVuOwotfQotLmV4cGVjdGF0aW9ucy1pdGVtOmhvdmVyIC5wbmdjaGVja3N1bSB7Ci0gICAg
dmlzaWJpbGl0eTogdmlzaWJsZTsKLX0KLS5za2lwcGVkLWJ1aWxkZXItbGlzdCB7Ci0gICAgbWFy
Z2luLWxlZnQ6IDIwcHg7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogI0U4RThFODsKLX0KLS5za2lw
cGVkLWJ1aWxkZXIgewotICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICB3aGl0ZS1zcGFj
ZTogbm93cmFwOwotfQotLnNraXBwZWQtYnVpbGRlcjphZnRlciB7Ci0gICAgY29udGVudDogJ3wn
OwotICAgIG1hcmdpbjogNXB4OwotfQotLnNraXBwZWQtYnVpbGRlcjpsYXN0LWNoaWxkOmFmdGVy
IHsKLSAgICBjb250ZW50OiAnJzsKLX0KLQpJbmRleDogVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9z
dGF0aWMtZGFzaGJvYXJkcy9mbGFraW5lc3NfZGFzaGJvYXJkX3VuaXR0ZXN0cy5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVz
c19kYXNoYm9hcmRfdW5pdHRlc3RzLmpzCShyZXZpc2lvbiAyNjQ1MjcpCisrKyBUb29scy9UZXN0
UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmRfdW5pdHRl
c3RzLmpzCShub25leGlzdGVudCkKQEAgLTEsNjIxICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0v
LyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8g
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyBGSVhNRShqcGFyZW50KTogUmVuYW1lIHRo
aXMgb25jZSBpdCBpc24ndCBnbG9iYWxzLgotZnVuY3Rpb24gcmVzZXRHbG9iYWxzKCkKLXsKLSAg
ICBhbGxFeHBlY3RhdGlvbnMgPSBudWxsOwotICAgIGFsbFRlc3RzID0gbnVsbDsKLSAgICBnX2V4
cGVjdGF0aW9uc0J5UGxhdGZvcm0gPSB7fTsKLSAgICBnX3Jlc3VsdHNCeUJ1aWxkZXIgPSB7fTsK
LSAgICBnX2FsbEV4cGVjdGF0aW9ucyA9IG51bGw7Ci0gICAgZ19hbGxUZXN0c1RyaWUgPSBudWxs
OwotICAgIHZhciBoaXN0b3J5SW5zdGFuY2UgPSBuZXcgaGlzdG9yeS5IaXN0b3J5KGZsYWtpbmVz
c0NvbmZpZyk7Ci0gICAgLy8gRklYTUUoanBhcmVudCk6IFJlbW92ZSB0aGlzIG9uY2UgZ2xvYmFs
IGlzbid0IHVzZWQuCi0gICAgZ19oaXN0b3J5ID0gaGlzdG9yeUluc3RhbmNlOwotICAgIGdfdGVz
dFRvUmVzdWx0c01hcCA9IHt9OwotCi0gICAgZm9yICh2YXIga2V5IGluIGhpc3RvcnkuREVGQVVM
VF9DUk9TU19EQVNIQk9BUkRfU1RBVEVfVkFMVUVTKQotICAgICAgICBoaXN0b3J5SW5zdGFuY2Uu
Y3Jvc3NEYXNoYm9hcmRTdGF0ZVtrZXldID0gaGlzdG9yeS5ERUZBVUxUX0NST1NTX0RBU0hCT0FS
RF9TVEFURV9WQUxVRVNba2V5XTsKLQotICAgIExPQURfQlVJTERCT1RfREFUQShbewotICAgICAg
ICBuYW1lOiAnd2Via2l0Lm9yZycsCi0gICAgICAgIHVybDogJ2R1bW15dXJsJywKLSAgICAgICAg
dGVzdHM6IHsnbGF5b3V0LXRlc3RzJzogeydidWlsZGVycyc6IFsnQXBwbGUgTGlvbiBSZWxlYXNl
IFdLMiAoVGVzdHMpJywgJ0FwcGxlIExpb24gRGVidWcgV0syIChUZXN0cyknLCAnR1RLIExpbnV4
IDY0LWJpdCBSZWxlYXNlIChUZXN0cyknLCAnV1BFIExpbnV4IDY0LWJpdCBSZWxlYXNlIChUZXN0
cyknXX19Ci0gICAgfV0pOwotIAotICAgIGZvciAodmFyIGdyb3VwIGluIExBWU9VVF9URVNUU19C
VUlMREVSX0dST1VQUykKLSAgICAgICAgTEFZT1VUX1RFU1RTX0JVSUxERVJfR1JPVVBTW2dyb3Vw
XSA9IG51bGw7Ci0KLSAgICByZXR1cm4gaGlzdG9yeUluc3RhbmNlOwotfQotCi1mdW5jdGlvbiBz
dHViUmVzdWx0c0J5QnVpbGRlcihkYXRhKQotewotICAgIGZvciAodmFyIGJ1aWxkZXIgaW4gY3Vy
cmVudEJ1aWxkZXJzKCkpCi0gICAgewotICAgICAgICBnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRl
cl0gPSBkYXRhW2J1aWxkZXJdIHx8IHsndGVzdHMnOiBbXX07Ci0gICAgfTsKLX0KLQotZnVuY3Rp
b24gcnVuRXhwZWN0YXRpb25zVGVzdChidWlsZGVyLCB0ZXN0LCBleHBlY3RhdGlvbnMsIG1vZGlm
aWVycykKLXsKLSAgICAvLyBQdXQgaW4gc29tZSBkdW1teSByZXN1bHRzLiBwcm9jZXNzRXhwZWN0
YXRpb25zIGV4cGVjdHMgdGhlIHRlc3QgdG8gYmUKLSAgICAvLyB0aGVyZS4KLSAgICB2YXIgdGVz
dHMgPSB7fTsKLSAgICB0ZXN0c1t0ZXN0XSA9IHsncmVzdWx0cyc6IFtbMTAwLCAnRiddXSwgJ3Rp
bWVzJzogW1sxMDAsIDBdXX07Ci0gICAgdmFyIHJlc3VsdHMgPSB7fTsKLSAgICByZXN1bHRzW2J1
aWxkZXJdID0geyd0ZXN0cyc6IHRlc3RzfTsKLSAgICBzdHViUmVzdWx0c0J5QnVpbGRlcihyZXN1
bHRzKTsKLQotICAgIHByb2Nlc3NFeHBlY3RhdGlvbnMoKTsKLSAgICB2YXIgcmVzdWx0c0ZvclRl
c3QgPSBjcmVhdGVSZXN1bHRzT2JqZWN0Rm9yVGVzdCh0ZXN0LCBidWlsZGVyKTsKLSAgICBwb3B1
bGF0ZUV4cGVjdGF0aW9uc0RhdGEocmVzdWx0c0ZvclRlc3QpOwotCi0gICAgdmFyIG1lc3NhZ2Ug
PSAnQnVpbGRlcjogJyArIHJlc3VsdHNGb3JUZXN0LmJ1aWxkZXIgKyAnIHRlc3Q6ICcgKyByZXN1
bHRzRm9yVGVzdC50ZXN0OwotICAgIGVxdWFsKHJlc3VsdHNGb3JUZXN0LmV4cGVjdGF0aW9ucywg
ZXhwZWN0YXRpb25zLCBtZXNzYWdlKTsKLSAgICBlcXVhbChyZXN1bHRzRm9yVGVzdC5tb2RpZmll
cnMsIG1vZGlmaWVycywgbWVzc2FnZSk7Ci19Ci0KLXRlc3QoJ3JlbGVhc2VGYWlsJywgMiwgZnVu
Y3Rpb24oKSB7Ci0gICAgcmVzZXRHbG9iYWxzKCk7Ci0gICAgbG9hZEJ1aWxkZXJzTGlzdCgnQFRv
VCAtIHdlYmtpdC5vcmcnLCAnbGF5b3V0LXRlc3RzJyk7Ci0KLSAgICB2YXIgYnVpbGRlciA9ICdB
cHBsZSBMaW9uIFJlbGVhc2UgV0syIChUZXN0cyknOwotICAgIHZhciB0ZXN0ID0gJ2Zvby8xLmh0
bWwnOwotICAgIHZhciBleHBlY3RhdGlvbnNBcnJheSA9IFsKLSAgICAgICAgeydtb2RpZmllcnMn
OiAnUkVMRUFTRScsICdleHBlY3RhdGlvbnMnOiAnRkFJTCd9Ci0gICAgXTsKLSAgICBnX2V4cGVj
dGF0aW9uc0J5UGxhdGZvcm1bJ0FQUExFX01BQ19MSU9OX1dLMiddID0gZ2V0UGFyc2VkRXhwZWN0
YXRpb25zKCdbIFJlbGVhc2UgXSAnICsgdGVzdCArICcgWyBGYWlsdXJlIF0nKTsKLSAgICBydW5F
eHBlY3RhdGlvbnNUZXN0KGJ1aWxkZXIsIHRlc3QsICdGQUlMJywgJ1JFTEVBU0UnKTsKLX0pOwot
Ci10ZXN0KCdyZWxlYXNlRmFpbERlYnVnQ3Jhc2hSZWxlYXNlQnVpbGRlcicsIDIsIGZ1bmN0aW9u
KCkgewotICAgIHJlc2V0R2xvYmFscygpOwotICAgIGxvYWRCdWlsZGVyc0xpc3QoJ0BUb1QgLSB3
ZWJraXQub3JnJywgJ2xheW91dC10ZXN0cycpOwotCi0gICAgdmFyIGJ1aWxkZXIgPSAnQXBwbGUg
TGlvbiBSZWxlYXNlIFdLMiAoVGVzdHMpJzsKLSAgICB2YXIgdGVzdCA9ICdmb28vMS5odG1sJzsK
LSAgICB2YXIgZXhwZWN0YXRpb25zQXJyYXkgPSBbCi0gICAgICAgIHsnbW9kaWZpZXJzJzogJ1JF
TEVBU0UnLCAnZXhwZWN0YXRpb25zJzogJ0ZBSUwnfSwKLSAgICAgICAgeydtb2RpZmllcnMnOiAn
REVCVUcnLCAnZXhwZWN0YXRpb25zJzogJ0NSQVNIJ30KLSAgICBdOwotICAgIGdfZXhwZWN0YXRp
b25zQnlQbGF0Zm9ybVsnQVBQTEVfTUFDX0xJT05fV0syJ10gPSBnZXRQYXJzZWRFeHBlY3RhdGlv
bnMoJ1sgUmVsZWFzZSBdICcgKyB0ZXN0ICsgJyBbIEZhaWx1cmUgXVxuJyArCi0gICAgICAgICdb
IERlYnVnIF0gJyArIHRlc3QgKyAnIFsgQ3Jhc2ggXScpOwotICAgIHJ1bkV4cGVjdGF0aW9uc1Rl
c3QoYnVpbGRlciwgdGVzdCwgJ0ZBSUwnLCAnUkVMRUFTRScpOwotfSk7Ci0KLXRlc3QoJ3JlbGVh
c2VGYWlsRGVidWdDcmFzaERlYnVnQnVpbGRlcicsIDIsIGZ1bmN0aW9uKCkgewotICAgIHJlc2V0
R2xvYmFscygpOwotICAgIGxvYWRCdWlsZGVyc0xpc3QoJ0BUb1QgLSB3ZWJraXQub3JnJywgJ2xh
eW91dC10ZXN0cycpOwotCi0gICAgdmFyIGJ1aWxkZXIgPSAnQXBwbGUgTGlvbiBEZWJ1ZyBXSzIg
KFRlc3RzKSc7Ci0gICAgdmFyIHRlc3QgPSAnZm9vLzEuaHRtbCc7Ci0gICAgdmFyIGV4cGVjdGF0
aW9uc0FycmF5ID0gWwotICAgICAgICB7J21vZGlmaWVycyc6ICdSRUxFQVNFJywgJ2V4cGVjdGF0
aW9ucyc6ICdGQUlMJ30sCi0gICAgICAgIHsnbW9kaWZpZXJzJzogJ0RFQlVHJywgJ2V4cGVjdGF0
aW9ucyc6ICdDUkFTSCd9Ci0gICAgXTsKLSAgICBnX2V4cGVjdGF0aW9uc0J5UGxhdGZvcm1bJ0FQ
UExFX01BQ19MSU9OX1dLMiddID0gZ2V0UGFyc2VkRXhwZWN0YXRpb25zKCdbIFJlbGVhc2UgXSAn
ICsgdGVzdCArICcgWyBGYWlsdXJlIF1cbicgKwotICAgICAgICAnWyBEZWJ1ZyBdICcgKyB0ZXN0
ICsgJyBbIENyYXNoIF0nKTsKLSAgICBydW5FeHBlY3RhdGlvbnNUZXN0KGJ1aWxkZXIsIHRlc3Qs
ICdDUkFTSCcsICdERUJVRycpOwotfSk7Ci0KLXRlc3QoJ292ZXJyaWRlSnVzdEJ1aWxkVHlwZScs
IDQsIGZ1bmN0aW9uKCkgewotICAgIHJlc2V0R2xvYmFscygpOwotICAgIGxvYWRCdWlsZGVyc0xp
c3QoJ0BUb1QgLSB3ZWJraXQub3JnJywgJ2xheW91dC10ZXN0cycpOwotICAgIHZhciB0ZXN0ID0g
J2Jhci8xLmh0bWwnOwotICAgIGdfZXhwZWN0YXRpb25zQnlQbGF0Zm9ybVsnQVBQTEVfTUFDX0xJ
T05fV0syJ10gPSBnZXRQYXJzZWRFeHBlY3RhdGlvbnMoJ2JhciBbIFdvbnRGaXggRmFpbHVyZSBQ
YXNzIFRpbWVvdXQgXVxuJyArCi0gICAgICAgICdbIFJlbGVhc2UgXSAnICsgdGVzdCArICcgWyBX
b250Rml4IEZhaWx1cmUgXVxuJyArCi0gICAgICAgICdbIERlYnVnIF0gJyArIHRlc3QgKyAnIFsg
Q3Jhc2ggXScpOwotCi0gICAgcnVuRXhwZWN0YXRpb25zVGVzdCgnQXBwbGUgTGlvbiBSZWxlYXNl
IFdLMiAoVGVzdHMpJywgdGVzdCwgJ0ZBSUwnLCAnUkVMRUFTRSBXT05URklYJyk7Ci0gICAgcnVu
RXhwZWN0YXRpb25zVGVzdCgnQXBwbGUgTGlvbiBEZWJ1ZyBXSzIgKFRlc3RzKScsIHRlc3QsICdD
UkFTSCcsICdERUJVRycpOwotfSk7Ci0KLXRlc3QoJ3BsYXRmb3JtQW5kQnVpbGRUeXBlJywgMzAs
IGZ1bmN0aW9uKCkgewotICAgIHZhciBoaXN0b3J5SW5zdGFuY2UgPSBuZXcgaGlzdG9yeS5IaXN0
b3J5KGZsYWtpbmVzc0NvbmZpZyk7Ci0gICAgLy8gRklYTUUoanBhcmVudCk6IENoYW5nZSB0byB1
c2UgdGhlIGZsYWtpbmVzc19kYidzIGhpc3Rvcnkgb2JqZWN0Ci0gICAgLy8gb25jZSBpdCBleGlz
dHMsIHJhdGhlciB0aGFuIHRyYWNraW5nIGdsb2JhbC4KLSAgICBnX2hpc3RvcnkgPSBoaXN0b3J5
SW5zdGFuY2U7Ci0KLSAgICB2YXIgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0ID0gZnVuY3Rp
b24oYnVpbGRlciwgZXhwZWN0ZWRQbGF0Zm9ybSwgZXhwZWN0ZWRCdWlsZFR5cGUpIHsKLSAgICAg
ICAgZ19wZXJCdWlsZGVyUGxhdGZvcm1BbmRCdWlsZFR5cGUgPSB7fTsKLSAgICAgICAgYnVpbGRJ
bmZvID0gcGxhdGZvcm1BbmRCdWlsZFR5cGUoYnVpbGRlcik7Ci0gICAgICAgIHZhciBtZXNzYWdl
ID0gJ0J1aWxkZXI6ICcgKyBidWlsZGVyOwotICAgICAgICBlcXVhbChidWlsZEluZm8ucGxhdGZv
cm0sIGV4cGVjdGVkUGxhdGZvcm0sIG1lc3NhZ2UpOwotICAgICAgICBlcXVhbChidWlsZEluZm8u
YnVpbGRUeXBlLCBleHBlY3RlZEJ1aWxkVHlwZSwgbWVzc2FnZSk7Ci0gICAgfQotICAgIC8vIEZJ
WE1FOiBUaGVzZSBwbGF0Zm9ybXMgc2hvdWxkIG1hdGNoIHdoYXRldmVyIHdlIHVzZSBpbiB0aGUg
VGVzdEV4cGVjdGF0aW9ucyBmb3JtYXQuCi0gICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0
KCdMaW9uIFJlbGVhc2UgKFRlc3RzKScsICdBUFBMRV9NQUNfTElPTl9XSzEnLCAnUkVMRUFTRScp
OwotICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnTGlvbiBEZWJ1ZyAoVGVzdHMpJywg
J0FQUExFX01BQ19MSU9OX1dLMScsICdERUJVRycpOwotICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRU
eXBlVGVzdCgnTW91bnRhaW5MaW9uIFJlbGVhc2UgKFRlc3RzKScsICdBUFBMRV9NQUNfTU9VTlRB
SU5MSU9OX1dLMScsICdSRUxFQVNFJyk7Ci0gICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0
KCdNb3VudGFpbkxpb24gTGVha3MnLCAnQVBQTEVfTUFDX01PVU5UQUlOTElPTl9XSzEnLCAnUkVM
RUFTRScpOwotICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnTW91bnRhaW5MaW9uIERl
YnVnIChUZXN0cyknLCAnQVBQTEVfTUFDX01PVU5UQUlOTElPTl9XSzEnLCAnREVCVUcnKTsKLSAg
ICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ0dUSyBMaW51eCAzMi1iaXQgUmVsZWFzZScs
ICdHVEtfTElOVVhfV0sxJywgJ1JFTEVBU0UnKTsKLSAgICBydW5QbGF0Zm9ybUFuZEJ1aWxkVHlw
ZVRlc3QoJ0dUSyBMaW51eCA2NC1iaXQgUmVsZWFzZSAoVGVzdHMpJywgJ0dUS19MSU5VWF9XSzIn
LCAnUkVMRUFTRScpOwotICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnR1RLIExpbnV4
IDY0LWJpdCBEZWJ1ZyAoVGVzdHMpJywgJ0dUS19MSU5VWF9XSzInLCAnREVCVUcnKTsKLSAgICBy
dW5QbGF0Zm9ybUFuZEJ1aWxkVHlwZVRlc3QoJ1dpbmRvd3MgNyBSZWxlYXNlIChUZXN0cyknLCAn
QVBQTEVfV0lOX1dJTjcnLCAnUkVMRUFTRScpOwotICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBl
VGVzdCgnV2luZG93cyBYUCBEZWJ1ZyAoVGVzdHMpJywgJ0FQUExFX1dJTl9YUCcsICdERUJVRycp
OwotICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnV1BFIExpbnV4IDY0LWJpdCBSZWxl
YXNlIChUZXN0cyknLCAnV1BFX0xJTlVYJywgJ1JFTEVBU0UnKTsKLSAgICBydW5QbGF0Zm9ybUFu
ZEJ1aWxkVHlwZVRlc3QoJ1dQRSBMaW51eCA2NC1iaXQgRGVidWcgKFRlc3RzKScsICdXUEVfTElO
VVgnLCAnREVCVUcnKTsKLSAgICAKLSAgICAvLyBGSVhNRTogU2hvdWxkIFdlYktpdDIgYmUgaXQn
cyBvd24gcGxhdGZvcm0/Ci0gICAgcnVuUGxhdGZvcm1BbmRCdWlsZFR5cGVUZXN0KCdNb3VudGFp
bkxpb24gUmVsZWFzZSAoV2ViS2l0MiBUZXN0cyknLCAnQVBQTEVfTUFDX01PVU5UQUlOTElPTl9X
SzInLCAnUkVMRUFTRScpOwotICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnTW91bnRh
aW5MaW9uIERlYnVnIChXZWJLaXQyIFRlc3RzKScsICdBUFBMRV9NQUNfTU9VTlRBSU5MSU9OX1dL
MicsICdERUJVRycpOwotICAgIHJ1blBsYXRmb3JtQW5kQnVpbGRUeXBlVGVzdCgnV2luZG93cyA3
IFJlbGVhc2UgKFdlYktpdDIgVGVzdHMpJywgJ0FQUExFX1dJTl9XSU43JywgJ1JFTEVBU0UnKTsg
ICAgCi19KTsKLQotdGVzdCgncmVhbE1vZGlmaWVycycsIDMsIGZ1bmN0aW9uKCkgewotICAgIGVx
dWFsKHJlYWxNb2RpZmllcnMoJ0JVRyhGb28pIERFQlVHIFNMT1cnKSwgJ1NMT1cnKTsKLSAgICBl
cXVhbChyZWFsTW9kaWZpZXJzKCdCVUcoRm9vKSBSRUxFQVNFJyksICcnKTsKLSAgICBlcXVhbChy
ZWFsTW9kaWZpZXJzKCdCVUcoRm9vKScpLCAnJyk7Ci19KTsKLQotdGVzdCgnYWxsVGVzdHNXaXRo
U2FtZVBsYXRmb3JtQW5kQnVpbGRUeXBlJywgMSwgZnVuY3Rpb24oKSB7Ci0gICAgLy8gRklYTUU6
IHRlc3QgdGhhdCBhbGxUZXN0c1dpdGhTYW1lUGxhdGZvcm1BbmRCdWlsZFR5cGUgYWN0dWFsbHkg
cmV0dXJucyB0aGUgcmlnaHQgc2V0IG9mIHRlc3RzLgotICAgIHZhciBleHBlY3RlZFBsYXRmb3Jt
c0xpc3QgPSBbJ0FQUExFX01BQ19MSU9OX1dLMScsICdBUFBMRV9NQUNfTElPTl9XSzInLCAnQVBQ
TEVfTUFDX01PVU5UQUlOTElPTl9XSzEnLCAnQVBQTEVfTUFDX01PVU5UQUlOTElPTl9XSzInLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FQUExFX1dJTl9YUCcsICdBUFBMRV9X
SU5fV0lONycsICAnR1RLX0xJTlVYX1dLMScsICdHVEtfTElOVVhfV0syJywgJ0VGTF9MSU5VWF9X
SzInXTsKLSAgICB2YXIgYWN0dWFsUGxhdGZvcm1zTGlzdCA9IE9iamVjdC5rZXlzKGdfYWxsVGVz
dHNCeVBsYXRmb3JtQW5kQnVpbGRUeXBlKTsKLSAgICBkZWVwRXF1YWwoZXhwZWN0ZWRQbGF0Zm9y
bXNMaXN0LCBhY3R1YWxQbGF0Zm9ybXNMaXN0KTsKLX0pOwotCi10ZXN0KCdmaWx0ZXJCdWdzJyw0
LCBmdW5jdGlvbigpIHsKLSAgICB2YXIgZmlsdGVyZWQgPSBmaWx0ZXJCdWdzKCdTa2lwIGNyYnVn
LmNvbS8xMjMgd2Via2l0Lm9yZy9iLzEyMyBTbG93IEJ1ZyhUb255KSBEZWJ1ZycpCi0gICAgZXF1
YWwoZmlsdGVyZWQubW9kaWZpZXJzLCAnU2tpcCBTbG93IERlYnVnJyk7Ci0gICAgZXF1YWwoZmls
dGVyZWQuYnVncywgJ2NyYnVnLmNvbS8xMjMgd2Via2l0Lm9yZy9iLzEyMyBCdWcoVG9ueSknKTsK
LQotICAgIGZpbHRlcmVkID0gZmlsdGVyQnVncygnU2tpcCBTbG93IERlYnVnJykKLSAgICBlcXVh
bChmaWx0ZXJlZC5tb2RpZmllcnMsICdTa2lwIFNsb3cgRGVidWcnKTsKLSAgICBlcXVhbChmaWx0
ZXJlZC5idWdzLCAnJyk7Ci19KTsKLQotdGVzdCgnZ2V0RXhwZWN0YXRpb25zJywgMTQsIGZ1bmN0
aW9uKCkgewotICAgIHJlc2V0R2xvYmFscygpOwotICAgIGxvYWRCdWlsZGVyc0xpc3QoJ0BUb1Qg
LSB3ZWJraXQub3JnJywgJ2xheW91dC10ZXN0cycpOwotIAotICAgIHN0dWJSZXN1bHRzQnlCdWls
ZGVyKHsKLSAgICAgICAgJ0FwcGxlIExpb24gUmVsZWFzZSBXSzIgKFRlc3RzKScgOiB7Ci0gICAg
ICAgICAgICAndGVzdHMnOiB7Ci0gICAgICAgICAgICAgICAgJ2Zvby90ZXN0MS5odG1sJzogeydy
ZXN1bHRzJzogW1sxMDAsICdGJ11dLCAndGltZXMnOiBbWzEwMCwgMF1dfSwKLSAgICAgICAgICAg
ICAgICAnZm9vL3Rlc3QyLmh0bWwnOiB7J3Jlc3VsdHMnOiBbWzEwMCwgJ0YnXV0sICd0aW1lcyc6
IFtbMTAwLCAwXV19LAotICAgICAgICAgICAgICAgICdmb28vdGVzdDMuaHRtbCc6IHsncmVzdWx0
cyc6IFtbMTAwLCAnRiddXSwgJ3RpbWVzJzogW1sxMDAsIDBdXX0sCi0gICAgICAgICAgICAgICAg
J3Rlc3QxLmh0bWwnOiB7J3Jlc3VsdHMnOiBbWzEwMCwgJ0YnXV0sICd0aW1lcyc6IFtbMTAwLCAw
XV19Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9KTsKLQotICAgIGdfZXhwZWN0YXRp
b25zQnlQbGF0Zm9ybVsnQVBQTEVfTUFDX0xJT05fV0syJ10gPSBnZXRQYXJzZWRFeHBlY3RhdGlv
bnMoJ0J1ZygxMjMpIGZvbyBbIEZhaWx1cmUgUGFzcyBDcmFzaCBdXG4nICsKLSAgICAgICAgJ0J1
ZyhGb28pIFsgUmVsZWFzZSBdIGZvby90ZXN0MS5odG1sIFsgRmFpbHVyZSBdXG4nICsKLSAgICAg
ICAgJ1sgRGVidWcgXSBmb28vdGVzdDEuaHRtbCBbIENyYXNoIF1cbicgKwotICAgICAgICAnQnVn
KDQ1NikgZm9vL3Rlc3QyLmh0bWwgWyBGYWlsdXJlIF1cbicgKwotICAgICAgICAnWyBEZWJ1ZyBd
IGZvby90ZXN0Mi5odG1sIFsgQ3Jhc2ggXVxuJyArCi0gICAgICAgICdbIFJlbGVhc2UgXSB0ZXN0
MS5odG1sIFsgRmFpbHVyZSBdXG4nICsKLSAgICAgICAgJ1sgRGVidWcgXSB0ZXN0MS5odG1sIFsg
Q3Jhc2ggXVxuJyk7Ci0KLSAgICBnX2V4cGVjdGF0aW9uc0J5UGxhdGZvcm1bJ0dUSyddID0gZ2V0
UGFyc2VkRXhwZWN0YXRpb25zKCdCdWcoNDIpIGZvby90ZXN0Mi5odG1sIFsgSW1hZ2VPbmx5RmFp
bHVyZSBdXG4nICsKLSAgICAgICAgJ1sgRGVidWcgXSB0ZXN0MS5odG1sIFsgQ3Jhc2ggXVxuJyk7
Ci0gICAgZ19leHBlY3RhdGlvbnNCeVBsYXRmb3JtWydHVEtfTElOVVhfV0sxJ10gPSBnZXRQYXJz
ZWRFeHBlY3RhdGlvbnMoJ1sgUmVsZWFzZSBdIGZvby90ZXN0MS5odG1sIFsgSW1hZ2VPbmx5RmFp
bHVyZSBdXG4nICsKLSAgICAgICAgJ0J1Zyg3ODkpIGZvby90ZXN0Mi5odG1sIFsgQ3Jhc2ggXVxu
Jyk7Ci0gICAgZ19leHBlY3RhdGlvbnNCeVBsYXRmb3JtWydHVEtfTElOVVhfV0syJ10gPSBnZXRQ
YXJzZWRFeHBlY3RhdGlvbnMoJ0J1Zyg5ODcpIGZvby90ZXN0Mi5odG1sIFsgRmFpbHVyZSBdXG4n
KTsKLQotICAgIHByb2Nlc3NFeHBlY3RhdGlvbnMoKTsKLSAgICAKLSAgICB2YXIgZXhwZWN0YXRp
b25zID0gZ2V0RXhwZWN0YXRpb25zKCdmb28vdGVzdDEuaHRtbCcsICdBUFBMRV9NQUNfTElPTl9X
SzInLCAnREVCVUcnKTsKLSAgICBlcXVhbChKU09OLnN0cmluZ2lmeShleHBlY3RhdGlvbnMpLCAn
eyJtb2RpZmllcnMiOiJERUJVRyIsImV4cGVjdGF0aW9ucyI6IkNSQVNIIn0nKTsKLQotICAgIHZh
ciBleHBlY3RhdGlvbnMgPSBnZXRFeHBlY3RhdGlvbnMoJ2Zvby90ZXN0MS5odG1sJywgJ0FQUExF
X01BQ19MSU9OX1dLMicsICdSRUxFQVNFJyk7Ci0gICAgZXF1YWwoSlNPTi5zdHJpbmdpZnkoZXhw
ZWN0YXRpb25zKSwgJ3sibW9kaWZpZXJzIjoiQnVnKEZvbykgUkVMRUFTRSIsImV4cGVjdGF0aW9u
cyI6IkZBSUwifScpOwotCi0gICAgdmFyIGV4cGVjdGF0aW9ucyA9IGdldEV4cGVjdGF0aW9ucygn
Zm9vL3Rlc3QyLmh0bWwnLCAnQVBQTEVfTUFDX0xJT05fV0syJywgJ1JFTEVBU0UnKTsKLSAgICBl
cXVhbChKU09OLnN0cmluZ2lmeShleHBlY3RhdGlvbnMpLCAneyJtb2RpZmllcnMiOiJCdWcoNDU2
KSIsImV4cGVjdGF0aW9ucyI6IkZBSUwifScpOwotCi0gICAgdmFyIGV4cGVjdGF0aW9ucyA9IGdl
dEV4cGVjdGF0aW9ucygnZm9vL3Rlc3QyLmh0bWwnLCAnQVBQTEVfTUFDX0xJT05fV0syJywgJ0RF
QlVHJyk7Ci0gICAgZXF1YWwoSlNPTi5zdHJpbmdpZnkoZXhwZWN0YXRpb25zKSwgJ3sibW9kaWZp
ZXJzIjoiREVCVUciLCJleHBlY3RhdGlvbnMiOiJDUkFTSCJ9Jyk7Ci0KLSAgICB2YXIgZXhwZWN0
YXRpb25zID0gZ2V0RXhwZWN0YXRpb25zKCd0ZXN0MS5odG1sJywgJ0FQUExFX01BQ19MSU9OX1dL
MicsICdSRUxFQVNFJyk7Ci0gICAgZXF1YWwoSlNPTi5zdHJpbmdpZnkoZXhwZWN0YXRpb25zKSwg
J3sibW9kaWZpZXJzIjoiUkVMRUFTRSIsImV4cGVjdGF0aW9ucyI6IkZBSUwifScpOwotCi0gICAg
dmFyIGV4cGVjdGF0aW9ucyA9IGdldEV4cGVjdGF0aW9ucygnZm9vL3Rlc3QzLmh0bWwnLCAnQVBQ
TEVfTUFDX0xJT05fV0syJywgJ0RFQlVHJyk7Ci0gICAgZXF1YWwoSlNPTi5zdHJpbmdpZnkoZXhw
ZWN0YXRpb25zKSwgJ3sibW9kaWZpZXJzIjoiQnVnKDEyMykiLCJleHBlY3RhdGlvbnMiOiJGQUlM
IFBBU1MgQ1JBU0gifScpOwotCi0gICAgdmFyIGV4cGVjdGF0aW9ucyA9IGdldEV4cGVjdGF0aW9u
cygndGVzdDEuaHRtbCcsICdBUFBMRV9NQUNfTElPTl9XSzInLCAnREVCVUcnKTsKLSAgICBlcXVh
bChKU09OLnN0cmluZ2lmeShleHBlY3RhdGlvbnMpLCAneyJtb2RpZmllcnMiOiJERUJVRyIsImV4
cGVjdGF0aW9ucyI6IkNSQVNIIn0nKTsKLQotICAgIHZhciBleHBlY3RhdGlvbnMgPSBnZXRFeHBl
Y3RhdGlvbnMoJ3Rlc3QxLmh0bWwnLCAnQVBQTEVfTUFDX0xJT05fV0syJywgJ1JFTEVBU0UnKTsK
LSAgICBlcXVhbChKU09OLnN0cmluZ2lmeShleHBlY3RhdGlvbnMpLCAneyJtb2RpZmllcnMiOiJS
RUxFQVNFIiwiZXhwZWN0YXRpb25zIjoiRkFJTCJ9Jyk7Ci0KLSAgICB2YXIgZXhwZWN0YXRpb25z
ID0gZ2V0RXhwZWN0YXRpb25zKCdmb28vdGVzdDEuaHRtbCcsICdHVEtfTElOVVhfV0sxJywgJ1JF
TEVBU0UnKTsKLSAgICBlcXVhbChKU09OLnN0cmluZ2lmeShleHBlY3RhdGlvbnMpLCAneyJtb2Rp
ZmllcnMiOiJSRUxFQVNFIiwiZXhwZWN0YXRpb25zIjoiSU1BR0UifScpOwotCi0gICAgdmFyIGV4
cGVjdGF0aW9ucyA9IGdldEV4cGVjdGF0aW9ucygnZm9vL3Rlc3QyLmh0bWwnLCAnR1RLX0xJTlVY
X1dLMScsICdERUJVRycpOwotICAgIGVxdWFsKEpTT04uc3RyaW5naWZ5KGV4cGVjdGF0aW9ucyks
ICd7Im1vZGlmaWVycyI6IkJ1Zyg3ODkpIiwiZXhwZWN0YXRpb25zIjoiQ1JBU0gifScpOwotCi0g
ICAgdmFyIGV4cGVjdGF0aW9ucyA9IGdldEV4cGVjdGF0aW9ucygndGVzdDEuaHRtbCcsICdHVEtf
TElOVVhfV0sxJywgJ0RFQlVHJyk7Ci0gICAgZXF1YWwoSlNPTi5zdHJpbmdpZnkoZXhwZWN0YXRp
b25zKSwgJ3sibW9kaWZpZXJzIjoiREVCVUciLCJleHBlY3RhdGlvbnMiOiJDUkFTSCJ9Jyk7Ci0K
LSAgICB2YXIgZXhwZWN0YXRpb25zID0gZ2V0RXhwZWN0YXRpb25zKCdmb28vdGVzdDIuaHRtbCcs
ICdHVEtfTElOVVhfV0syJywgJ0RFQlVHJyk7Ci0gICAgZXF1YWwoSlNPTi5zdHJpbmdpZnkoZXhw
ZWN0YXRpb25zKSwgJ3sibW9kaWZpZXJzIjoiQnVnKDk4NykiLCJleHBlY3RhdGlvbnMiOiJGQUlM
In0nKTsKLQotICAgIHZhciBleHBlY3RhdGlvbnMgPSBnZXRFeHBlY3RhdGlvbnMoJ2Zvby90ZXN0
Mi5odG1sJywgJ0dUS19MSU5VWF9XSzInLCAnUkVMRUFTRScpOwotICAgIGVxdWFsKEpTT04uc3Ry
aW5naWZ5KGV4cGVjdGF0aW9ucyksICd7Im1vZGlmaWVycyI6IkJ1Zyg5ODcpIiwiZXhwZWN0YXRp
b25zIjoiRkFJTCJ9Jyk7Ci0KLSAgICB2YXIgZXhwZWN0YXRpb25zID0gZ2V0RXhwZWN0YXRpb25z
KCd0ZXN0MS5odG1sJywgJ0dUS19MSU5VWF9XSzInLCAnREVCVUcnKTsKLSAgICBlcXVhbChKU09O
LnN0cmluZ2lmeShleHBlY3RhdGlvbnMpLCAneyJtb2RpZmllcnMiOiJERUJVRyIsImV4cGVjdGF0
aW9ucyI6IkNSQVNIIn0nKTsKLX0pOwotCi10ZXN0KCdzdWJzdHJpbmdMaXN0JywgMiwgZnVuY3Rp
b24oKSB7Ci0gICAgdmFyIGhpc3RvcnlJbnN0YW5jZSA9IG5ldyBoaXN0b3J5Lkhpc3RvcnkoZmxh
a2luZXNzQ29uZmlnKTsKLSAgICAvLyBGSVhNRShqcGFyZW50KTogUmVtb3ZlIHRoaXMgb25jZSBn
bG9iYWwgaXNuJ3QgdXNlZC4KLSAgICBnX2hpc3RvcnkgPSBoaXN0b3J5SW5zdGFuY2U7Ci0gICAg
aGlzdG9yeUluc3RhbmNlLmNyb3NzRGFzaGJvYXJkU3RhdGUudGVzdFR5cGUgPSAnZ3Rlc3QnOwot
ICAgIGhpc3RvcnlJbnN0YW5jZS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnRlc3RzID0gJ3Rlc3Qu
RkxBS1lfZm9vIHRlc3QuRkFJTFNfZm9vMSB0ZXN0LkRJU0FCTEVEX2ZvbzIgdGVzdC5NQVlCRV9m
b28zIHRlc3QuZm9vNCc7Ci0gICAgZXF1YWwoc3Vic3RyaW5nTGlzdCgpLnRvU3RyaW5nKCksICd0
ZXN0LmZvbyx0ZXN0LmZvbzEsdGVzdC5mb28yLHRlc3QuZm9vMyx0ZXN0LmZvbzQnKTsKLQotICAg
IGhpc3RvcnlJbnN0YW5jZS5jcm9zc0Rhc2hib2FyZFN0YXRlLnRlc3RUeXBlID0gJ2xheW91dC10
ZXN0cyc7Ci0gICAgaGlzdG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUudGVzdHMg
PSAnZm9vL2Jhci5GTEFLWV9mb28uaHRtbCc7Ci0gICAgZXF1YWwoc3Vic3RyaW5nTGlzdCgpLnRv
U3RyaW5nKCksICdmb28vYmFyLkZMQUtZX2Zvby5odG1sJyk7Ci19KTsKLQotdGVzdCgnaHRtbEZv
clRlc3RzV2l0aEV4cGVjdGF0aW9uc0J1dE5vRmFpbHVyZXMnLCA0LCBmdW5jdGlvbigpIHsKLSAg
ICB2YXIgaGlzdG9yeUluc3RhbmNlID0gbmV3IGhpc3RvcnkuSGlzdG9yeShkZWZhdWx0RGFzaGJv
YXJkU3BlY2lmaWNTdGF0ZVZhbHVlcywgZ2VuZXJhdGVQYWdlLCBoYW5kbGVWYWxpZEhhc2hQYXJh
bWV0ZXIpOwotICAgIC8vIEZJWE1FKGpwYXJlbnQpOiBSZW1vdmUgdGhpcyBvbmNlIGdsb2JhbCBp
c24ndCB1c2VkLgotICAgIGdfaGlzdG9yeSA9IGhpc3RvcnlJbnN0YW5jZTsKLSAgICBsb2FkQnVp
bGRlcnNMaXN0KCdAVG9UIC0gd2Via2l0Lm9yZycsICdsYXlvdXQtdGVzdHMnKTsKLSAgICB2YXIg
YnVpbGRlciA9ICdBcHBsZSBMaW9uIFJlbGVhc2UgV0syIChUZXN0cyknOwotICAgIGdfcGVyQnVp
bGRlcldpdGhFeHBlY3RhdGlvbnNCdXROb0ZhaWx1cmVzW2J1aWxkZXJdID0gWydwYXNzaW5nLXRl
c3QxLmh0bWwnLCAncGFzc2luZy10ZXN0Mi5odG1sJ107Ci0gICAgZ19wZXJCdWlsZGVyU2tpcHBl
ZFBhdGhzW2J1aWxkZXJdID0gWydza2lwcGVkLXRlc3QxLmh0bWwnXTsKLSAgICBnX3Jlc3VsdHNC
eUJ1aWxkZXJbYnVpbGRlcl0gPSB7IGJ1aWxkTnVtYmVyczogWzUsIDQsIDMsIDFdIH07Ci0KLSAg
ICBoaXN0b3J5SW5zdGFuY2UuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5zaG93VW5leHBlY3RlZFBh
c3NlcyA9IHRydWU7Ci0gICAgaGlzdG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUu
c2hvd1NraXBwZWQgPSB0cnVlOwotCi0gICAgaGlzdG9yeUluc3RhbmNlLmNyb3NzRGFzaGJvYXJk
U3RhdGUuZ3JvdXAgPSAnQFRvVCAtIHdlYmtpdC5vcmcnOwotICAgIGhpc3RvcnlJbnN0YW5jZS5j
cm9zc0Rhc2hib2FyZFN0YXRlLnRlc3RUeXBlID0gJ2xheW91dC10ZXN0cyc7Ci0gICAgCi0gICAg
dmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAgIGNvbnRh
aW5lci5pbm5lckhUTUwgPSBodG1sRm9yVGVzdHNXaXRoRXhwZWN0YXRpb25zQnV0Tm9GYWlsdXJl
cyhidWlsZGVyKTsKLSAgICBlcXVhbChjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnI3Bhc3Np
bmctdGVzdHMgPiBkaXYnKS5sZW5ndGgsIDIpOwotICAgIGVxdWFsKGNvbnRhaW5lci5xdWVyeVNl
bGVjdG9yQWxsKCcjc2tpcHBlZC10ZXN0cyA+IGRpdicpLmxlbmd0aCwgMSk7Ci0gICAgCi0gICAg
aGlzdG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUuc2hvd1VuZXhwZWN0ZWRQYXNz
ZXMgPSBmYWxzZTsKLSAgICBoaXN0b3J5SW5zdGFuY2UuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5z
aG93U2tpcHBlZCA9IGZhbHNlOwotICAgIAotICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICBjb250YWluZXIuaW5uZXJIVE1MID0gaHRtbEZvclRl
c3RzV2l0aEV4cGVjdGF0aW9uc0J1dE5vRmFpbHVyZXMoYnVpbGRlcik7Ci0gICAgZXF1YWwoY29u
dGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJyNwYXNzaW5nLXRlc3RzID4gZGl2JykubGVuZ3RoLCAw
KTsKLSAgICBlcXVhbChjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnI3NraXBwZWQtdGVzdHMg
PiBkaXYnKS5sZW5ndGgsIDApOwotfSk7Ci0KLXRlc3QoJ2hlYWRlckZvclRlc3RUYWJsZUh0bWwn
LCAxLCBmdW5jdGlvbigpIHsKLSAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnZGl2Jyk7Ci0gICAgY29udGFpbmVyLmlubmVySFRNTCA9IGhlYWRlckZvclRlc3RUYWJs
ZUh0bWwoKTsKLSAgICBlcXVhbChjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQnKS5s
ZW5ndGgsIDUpOwotfSk7Ci0KLXRlc3QoJ2h0bWxGb3JUZXN0VHlwZVN3aXRjaGVyR3JvdXAnLCA2
LCBmdW5jdGlvbigpIHsKLSAgICB2YXIgaGlzdG9yeUluc3RhbmNlID0gbmV3IGhpc3RvcnkuSGlz
dG9yeShmbGFraW5lc3NDb25maWcpOwotICAgIC8vIEZJWE1FKGpwYXJlbnQpOiBSZW1vdmUgdGhp
cyBvbmNlIGdsb2JhbCBpc24ndCB1c2VkLgotICAgIGdfaGlzdG9yeSA9IGhpc3RvcnlJbnN0YW5j
ZTsKLSAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0g
ICAgaGlzdG9yeUluc3RhbmNlLmNyb3NzRGFzaGJvYXJkU3RhdGUudGVzdFR5cGUgPSAndWlfdGVz
dHMnOwotICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSB1aS5odG1sLnRlc3RUeXBlU3dpdGNoZXIo
dHJ1ZSk7Ci0gICAgdmFyIHNlbGVjdHMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnc2Vs
ZWN0Jyk7Ci0gICAgZXF1YWwoc2VsZWN0cy5sZW5ndGgsIDIpOwotICAgIHZhciBncm91cCA9IHNl
bGVjdHNbMV07Ci0gICAgZXF1YWwoZ3JvdXAucGFyZW50Tm9kZS50ZXh0Q29udGVudC5pbmRleE9m
KCdHcm91cDonKSwgMCk7Ci0gICAgZXF1YWwoZ3JvdXAuY2hpbGRyZW4ubGVuZ3RoLCAxKTsKLQot
ICAgIGhpc3RvcnlJbnN0YW5jZS5jcm9zc0Rhc2hib2FyZFN0YXRlLnRlc3RUeXBlID0gJ2xheW91
dC10ZXN0cyc7Ci0gICAgY29udGFpbmVyLmlubmVySFRNTCA9IHVpLmh0bWwudGVzdFR5cGVTd2l0
Y2hlcih0cnVlKTsKLSAgICB2YXIgc2VsZWN0cyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxs
KCdzZWxlY3QnKTsKLSAgICBlcXVhbChzZWxlY3RzLmxlbmd0aCwgMik7Ci0gICAgdmFyIGdyb3Vw
ID0gc2VsZWN0c1sxXTsKLSAgICBlcXVhbChncm91cC5wYXJlbnROb2RlLnRleHRDb250ZW50Lmlu
ZGV4T2YoJ0dyb3VwOicpLCAwKTsKLSAgICBlcXVhbChncm91cC5jaGlsZHJlbi5sZW5ndGgsIDEp
OwotfSk7Ci0KLXRlc3QoJ2h0bWxGb3JJbmRpdmlkdWFsVGVzdE9uQWxsQnVpbGRlcnMnLCAxLCBm
dW5jdGlvbigpIHsKLSAgICByZXNldEdsb2JhbHMoKTsKLSAgICBsb2FkQnVpbGRlcnNMaXN0KCdA
VG9UIC0gd2Via2l0Lm9yZycsICdsYXlvdXQtdGVzdHMnKTsKLSAgICBlcXVhbChodG1sRm9ySW5k
aXZpZHVhbFRlc3RPbkFsbEJ1aWxkZXJzKCdmb28vbm9uZXhpc3RhbnQuaHRtbCcpLCAnPGRpdiBj
bGFzcz0ibm90LWZvdW5kIj5UZXN0IG5vdCBmb3VuZC4gRWl0aGVyIGl0IGRvZXMgbm90IGV4aXN0
LCBpcyBza2lwcGVkIG9yIHBhc3NlcyBvbiBhbGwgcGxhdGZvcm1zLjwvZGl2PicpOwotfSk7Ci0K
LXRlc3QoJ2h0bWxGb3JJbmRpdmlkdWFsVGVzdE9uQWxsQnVpbGRlcnNXaXRoUmVzdWx0c0xpbmtz
Tm9uZXhpc3RhbnQnLCAxLCBmdW5jdGlvbigpIHsKLSAgICByZXNldEdsb2JhbHMoKTsKLSAgICBs
b2FkQnVpbGRlcnNMaXN0KCdAVG9UIC0gd2Via2l0Lm9yZycsICdsYXlvdXQtdGVzdHMnKTsKLSAg
ICBlcXVhbChodG1sRm9ySW5kaXZpZHVhbFRlc3RPbkFsbEJ1aWxkZXJzV2l0aFJlc3VsdHNMaW5r
cygnZm9vL25vbmV4aXN0YW50Lmh0bWwnKSwKLSAgICAgICAgJzxkaXYgY2xhc3M9Im5vdC1mb3Vu
ZCI+VGVzdCBub3QgZm91bmQuIEVpdGhlciBpdCBkb2VzIG5vdCBleGlzdCwgaXMgc2tpcHBlZCBv
ciBwYXNzZXMgb24gYWxsIHBsYXRmb3Jtcy48L2Rpdj4nICsKLSAgICAgICAgJzxkaXYgY2xhc3M9
ZXhwZWN0YXRpb25zIHRlc3Q9Zm9vL25vbmV4aXN0YW50Lmh0bWw+JyArCi0gICAgICAgICAgICAn
PGRpdj4nICsKLSAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9bGluayBvbmNsaWNrPSJnX2hp
c3Rvcnkuc2V0UXVlcnlQYXJhbWV0ZXIoXCdzaG93RXhwZWN0YXRpb25zXCcsIHRydWUpIj5TaG93
IHJlc3VsdHM8L3NwYW4+IHwgJyArCi0gICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPWxpbmsg
b25jbGljaz0iZ19oaXN0b3J5LnNldFF1ZXJ5UGFyYW1ldGVyKFwnc2hvd0xhcmdlRXhwZWN0YXRp
b25zXCcsIHRydWUpIj5TaG93IGxhcmdlIHRodW1ibmFpbHM8L3NwYW4+IHwgJyArCi0gICAgICAg
ICAgICAgICAgJzxiPk9ubHkgc2hvd3MgYWN0dWFsIHJlc3VsdHMvZGlmZnMgZnJvbSB0aGUgbW9z
dCByZWNlbnQgKmZhaWx1cmUqIG9uIGVhY2ggYm90LjwvYj4nICsKLSAgICAgICAgICAgICc8L2Rp
dj4nICsKLSAgICAgICAgJzwvZGl2PicpOwotfSk7Ci0KLXRlc3QoJ2h0bWxGb3JJbmRpdmlkdWFs
VGVzdE9uQWxsQnVpbGRlcnNXaXRoUmVzdWx0c0xpbmtzJywgMSwgZnVuY3Rpb24oKSB7Ci0gICAg
dmFyIGhpc3RvcnlJbnN0YW5jZSA9IHJlc2V0R2xvYmFscygpOwotICAgIGhpc3RvcnlJbnN0YW5j
ZS5jcm9zc0Rhc2hib2FyZFN0YXRlLmdyb3VwID0gJ0BUb1QgLSB3ZWJraXQub3JnJzsKLSAgICBs
b2FkQnVpbGRlcnNMaXN0KCdAVG9UIC0gd2Via2l0Lm9yZycsICdsYXlvdXQtdGVzdHMnKTsKLQot
ICAgIHZhciBidWlsZGVyTmFtZSA9ICdBcHBsZSBMaW9uIFJlbGVhc2UgV0syIChUZXN0cyknOwot
ICAgIHZhciB0ZXN0ID0gJ2R1bW15dGVzdC5odG1sJzsKLSAgICBnX3Rlc3RUb1Jlc3VsdHNNYXBb
dGVzdF0gPSBbY3JlYXRlUmVzdWx0c09iamVjdEZvclRlc3QodGVzdCwgYnVpbGRlck5hbWUpXTsK
LQotICAgIGVxdWFsKGh0bWxGb3JJbmRpdmlkdWFsVGVzdE9uQWxsQnVpbGRlcnNXaXRoUmVzdWx0
c0xpbmtzKHRlc3QpLAotICAgICAgICAnPHRhYmxlIGNsYXNzPXRlc3QtdGFibGU+PHRoZWFkPjx0
cj4nICsKLSAgICAgICAgICAgICAgICAnPHRoIHNvcnRWYWx1ZT10ZXN0PjxkaXYgY2xhc3M9dGFi
bGUtaGVhZGVyLWNvbnRlbnQ+PHNwYW4+PC9zcGFuPjxzcGFuIGNsYXNzPWhlYWRlci10ZXh0PnRl
c3Q8L3NwYW4+PC9kaXY+PC90aD4nICsKLSAgICAgICAgICAgICAgICAnPHRoIHNvcnRWYWx1ZT1i
dWdzPjxkaXYgY2xhc3M9dGFibGUtaGVhZGVyLWNvbnRlbnQ+PHNwYW4+PC9zcGFuPjxzcGFuIGNs
YXNzPWhlYWRlci10ZXh0PmJ1Z3M8L3NwYW4+PC9kaXY+PC90aD4nICsKLSAgICAgICAgICAgICAg
ICAnPHRoIHNvcnRWYWx1ZT1tb2RpZmllcnM+PGRpdiBjbGFzcz10YWJsZS1oZWFkZXItY29udGVu
dD48c3Bhbj48L3NwYW4+PHNwYW4gY2xhc3M9aGVhZGVyLXRleHQ+bW9kaWZpZXJzPC9zcGFuPjwv
ZGl2PjwvdGg+JyArCi0gICAgICAgICAgICAgICAgJzx0aCBzb3J0VmFsdWU9ZXhwZWN0YXRpb25z
PjxkaXYgY2xhc3M9dGFibGUtaGVhZGVyLWNvbnRlbnQ+PHNwYW4+PC9zcGFuPjxzcGFuIGNsYXNz
PWhlYWRlci10ZXh0PmV4cGVjdGF0aW9uczwvc3Bhbj48L2Rpdj48L3RoPicgKwotICAgICAgICAg
ICAgICAgICc8dGggc29ydFZhbHVlPXNsb3dlc3Q+PGRpdiBjbGFzcz10YWJsZS1oZWFkZXItY29u
dGVudD48c3Bhbj48L3NwYW4+PHNwYW4gY2xhc3M9aGVhZGVyLXRleHQ+c2xvd2VzdCBydW48L3Nw
YW4+PC9kaXY+PC90aD4nICsKLSAgICAgICAgICAgICAgICAnPHRoIHNvcnRWYWx1ZT1mbGFraW5l
c3MgY29sc3Bhbj0xMDAwMD48ZGl2IGNsYXNzPXRhYmxlLWhlYWRlci1jb250ZW50PjxzcGFuPjwv
c3Bhbj48c3BhbiBjbGFzcz1oZWFkZXItdGV4dD5mbGFraW5lc3MgKG51bWJlcnMgYXJlIHJ1bnRp
bWVzIGluIHNlY29uZHMpPC9zcGFuPjwvZGl2PjwvdGg+JyArCi0gICAgICAgICAgICAnPC90cj48
L3RoZWFkPicgKwotICAgICAgICAgICAgJzx0Ym9keT48L3Rib2R5PicgKwotICAgICAgICAnPC90
YWJsZT4nICsKLSAgICAgICAgJzxkaXY+VGhlIGZvbGxvd2luZyBidWlsZGVycyBlaXRoZXIgZG9u
XCd0IHJ1biB0aGlzIHRlc3QgKGUuZy4gaXRcJ3Mgc2tpcHBlZCkgb3IgYWxsIHJ1bnMgcGFzc2Vk
OjwvZGl2PicgKwotICAgICAgICAnPGRpdiBjbGFzcz1za2lwcGVkLWJ1aWxkZXItbGlzdD4nICsK
LSAgICAgICAgICAgICc8ZGl2IGNsYXNzPXNraXBwZWQtYnVpbGRlcj5BcHBsZSBMaW9uIERlYnVn
IFdLMiAoVGVzdHMpPC9kaXY+PGRpdiBjbGFzcz1za2lwcGVkLWJ1aWxkZXI+R1RLIExpbnV4IDY0
LWJpdCBSZWxlYXNlIChUZXN0cyk8L2Rpdj4nICsKLSAgICAgICAgJzwvZGl2PicgKwotICAgICAg
ICAnPGRpdiBjbGFzcz1leHBlY3RhdGlvbnMgdGVzdD1kdW1teXRlc3QuaHRtbD4nICsKLSAgICAg
ICAgICAgICc8ZGl2PjxzcGFuIGNsYXNzPWxpbmsgb25jbGljaz0iZ19oaXN0b3J5LnNldFF1ZXJ5
UGFyYW1ldGVyKFwnc2hvd0V4cGVjdGF0aW9uc1wnLCB0cnVlKSI+U2hvdyByZXN1bHRzPC9zcGFu
PiB8ICcgKwotICAgICAgICAgICAgJzxzcGFuIGNsYXNzPWxpbmsgb25jbGljaz0iZ19oaXN0b3J5
LnNldFF1ZXJ5UGFyYW1ldGVyKFwnc2hvd0xhcmdlRXhwZWN0YXRpb25zXCcsIHRydWUpIj5TaG93
IGxhcmdlIHRodW1ibmFpbHM8L3NwYW4+JyArCi0gICAgICAgICAgICAnPGZvcm0gb25zdWJtaXQ9
ImdfaGlzdG9yeS5zZXRRdWVyeVBhcmFtZXRlcihcJ3JldmlzaW9uXCcsIHJldmlzaW9uLnZhbHVl
KTtyZXR1cm4gZmFsc2U7Ij4nICsKLSAgICAgICAgICAgICAgICAnU2hvdyByZXN1bHRzIGZvciBX
ZWJLaXQgcmV2aXNpb246IDxpbnB1dCBuYW1lPXJldmlzaW9uIHBsYWNlaG9sZGVyPSJlLmcuIDY1
NTQwIiB2YWx1ZT0iIiBpZD1yZXZpc2lvbi1pbnB1dD4nICsKLSAgICAgICAgICAgICc8L2Zvcm0+
PC9kaXY+JyArCi0gICAgICAgICc8L2Rpdj4nKTsKLX0pOwotCi10ZXN0KCdodG1sRm9ySW5kaXZp
ZHVhbFRlc3RzJywgNCwgZnVuY3Rpb24oKSB7Ci0gICAgdmFyIGhpc3RvcnlJbnN0YW5jZSA9IHJl
c2V0R2xvYmFscygpOwotICAgIGxvYWRCdWlsZGVyc0xpc3QoJ0BUb1QgLSB3ZWJraXQub3JnJywg
J2xheW91dC10ZXN0cycpOwotICAgIHZhciB0ZXN0MSA9ICdmb28vbm9uZXhpc3RhbnQuaHRtbCc7
Ci0gICAgdmFyIHRlc3QyID0gJ2Jhci9ub25leGlzdGFudC5odG1sJzsKLQotICAgIGhpc3RvcnlJ
bnN0YW5jZS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLnNob3dDaHJvbWUgPSBmYWxzZTsKLQotICAg
IHZhciB0ZXN0cyA9IFt0ZXN0MSwgdGVzdDJdOwotICAgIGVxdWFsKGh0bWxGb3JJbmRpdmlkdWFs
VGVzdHModGVzdHMpLAotICAgICAgICAnPGgyPjxhIGhyZWY9Imh0dHBzOi8vdHJhYy53ZWJraXQu
b3JnL2Jyb3dzZXIvdHJ1bmsvTGF5b3V0VGVzdHMvZm9vL25vbmV4aXN0YW50Lmh0bWwiIHRhcmdl
dD0iX2JsYW5rIj5mb28vbm9uZXhpc3RhbnQuaHRtbDwvYT48L2gyPicgKwotICAgICAgICBodG1s
Rm9ySW5kaXZpZHVhbFRlc3RPbkFsbEJ1aWxkZXJzKHRlc3QxKSArIAotICAgICAgICAnPGRpdiBj
bGFzcz1leHBlY3RhdGlvbnMgdGVzdD1mb28vbm9uZXhpc3RhbnQuaHRtbD4nICsKLSAgICAgICAg
ICAgICc8ZGl2PjxzcGFuIGNsYXNzPWxpbmsgb25jbGljaz1cImdfaGlzdG9yeS5zZXRRdWVyeVBh
cmFtZXRlcihcJ3Nob3dFeHBlY3RhdGlvbnNcJywgdHJ1ZSlcIj5TaG93IHJlc3VsdHM8L3NwYW4+
IHwgJyArCi0gICAgICAgICAgICAnPHNwYW4gY2xhc3M9bGluayBvbmNsaWNrPVwiZ19oaXN0b3J5
LnNldFF1ZXJ5UGFyYW1ldGVyKFwnc2hvd0xhcmdlRXhwZWN0YXRpb25zXCcsIHRydWUpXCI+U2hv
dyBsYXJnZSB0aHVtYm5haWxzPC9zcGFuPiB8ICcgKwotICAgICAgICAgICAgJzxiPk9ubHkgc2hv
d3MgYWN0dWFsIHJlc3VsdHMvZGlmZnMgZnJvbSB0aGUgbW9zdCByZWNlbnQgKmZhaWx1cmUqIG9u
IGVhY2ggYm90LjwvYj48L2Rpdj4nICsKLSAgICAgICAgJzwvZGl2PicgKwotICAgICAgICAnPGhy
PicgKwotICAgICAgICAnPGgyPjxhIGhyZWY9Imh0dHBzOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dz
ZXIvdHJ1bmsvTGF5b3V0VGVzdHMvYmFyL25vbmV4aXN0YW50Lmh0bWwiIHRhcmdldD0iX2JsYW5r
Ij5iYXIvbm9uZXhpc3RhbnQuaHRtbDwvYT48L2gyPicgKwotICAgICAgICBodG1sRm9ySW5kaXZp
ZHVhbFRlc3RPbkFsbEJ1aWxkZXJzKHRlc3QyKSArCi0gICAgICAgICc8ZGl2IGNsYXNzPWV4cGVj
dGF0aW9ucyB0ZXN0PWJhci9ub25leGlzdGFudC5odG1sPicgKwotICAgICAgICAgICAgJzxkaXY+
PHNwYW4gY2xhc3M9bGluayBvbmNsaWNrPVwiZ19oaXN0b3J5LnNldFF1ZXJ5UGFyYW1ldGVyKFwn
c2hvd0V4cGVjdGF0aW9uc1wnLCB0cnVlKVwiPlNob3cgcmVzdWx0czwvc3Bhbj4gfCAnICsKLSAg
ICAgICAgICAgICc8c3BhbiBjbGFzcz1saW5rIG9uY2xpY2s9XCJnX2hpc3Rvcnkuc2V0UXVlcnlQ
YXJhbWV0ZXIoXCdzaG93TGFyZ2VFeHBlY3RhdGlvbnNcJywgdHJ1ZSlcIj5TaG93IGxhcmdlIHRo
dW1ibmFpbHM8L3NwYW4+IHwgJyArCi0gICAgICAgICAgICAnPGI+T25seSBzaG93cyBhY3R1YWwg
cmVzdWx0cy9kaWZmcyBmcm9tIHRoZSBtb3N0IHJlY2VudCAqZmFpbHVyZSogb24gZWFjaCBib3Qu
PC9iPjwvZGl2PicgKwotICAgICAgICAnPC9kaXY+Jyk7Ci0KLSAgICB0ZXN0cyA9IFt0ZXN0MV07
Ci0gICAgZXF1YWwoaHRtbEZvckluZGl2aWR1YWxUZXN0cyh0ZXN0cyksIGh0bWxGb3JJbmRpdmlk
dWFsVGVzdE9uQWxsQnVpbGRlcnModGVzdDEpICsKLSAgICAgICAgJzxkaXYgY2xhc3M9ZXhwZWN0
YXRpb25zIHRlc3Q9Zm9vL25vbmV4aXN0YW50Lmh0bWw+JyArCi0gICAgICAgICAgICAnPGRpdj48
c3BhbiBjbGFzcz1saW5rIG9uY2xpY2s9XCJnX2hpc3Rvcnkuc2V0UXVlcnlQYXJhbWV0ZXIoXCdz
aG93RXhwZWN0YXRpb25zXCcsIHRydWUpXCI+U2hvdyByZXN1bHRzPC9zcGFuPiB8ICcgKwotICAg
ICAgICAgICAgJzxzcGFuIGNsYXNzPWxpbmsgb25jbGljaz1cImdfaGlzdG9yeS5zZXRRdWVyeVBh
cmFtZXRlcihcJ3Nob3dMYXJnZUV4cGVjdGF0aW9uc1wnLCB0cnVlKVwiPlNob3cgbGFyZ2UgdGh1
bWJuYWlsczwvc3Bhbj4gfCAnICsKLSAgICAgICAgICAgICc8Yj5Pbmx5IHNob3dzIGFjdHVhbCBy
ZXN1bHRzL2RpZmZzIGZyb20gdGhlIG1vc3QgcmVjZW50ICpmYWlsdXJlKiBvbiBlYWNoIGJvdC48
L2I+PC9kaXY+JyArCi0gICAgICAgICc8L2Rpdj4nKTsKLQotICAgIGhpc3RvcnlJbnN0YW5jZS5k
YXNoYm9hcmRTcGVjaWZpY1N0YXRlLnNob3dDaHJvbWUgPSB0cnVlOwotCi0gICAgZXF1YWwoaHRt
bEZvckluZGl2aWR1YWxUZXN0cyh0ZXN0cyksCi0gICAgICAgICc8aDI+PGEgaHJlZj0iaHR0cHM6
Ly90cmFjLndlYmtpdC5vcmcvYnJvd3Nlci90cnVuay9MYXlvdXRUZXN0cy9mb28vbm9uZXhpc3Rh
bnQuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmZvby9ub25leGlzdGFudC5odG1sPC9hPjwvaDI+JyAr
Ci0gICAgICAgIGh0bWxGb3JJbmRpdmlkdWFsVGVzdE9uQWxsQnVpbGRlcnNXaXRoUmVzdWx0c0xp
bmtzKHRlc3QxKSk7Ci0KLSAgICB0ZXN0cyA9IFt0ZXN0MSwgdGVzdDJdOwotICAgIGVxdWFsKGh0
bWxGb3JJbmRpdmlkdWFsVGVzdHModGVzdHMpLAotICAgICAgICAnPGgyPjxhIGhyZWY9Imh0dHBz
Oi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvTGF5b3V0VGVzdHMvZm9vL25vbmV4aXN0
YW50Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5mb28vbm9uZXhpc3RhbnQuaHRtbDwvYT48L2gyPicg
KwotICAgICAgICBodG1sRm9ySW5kaXZpZHVhbFRlc3RPbkFsbEJ1aWxkZXJzV2l0aFJlc3VsdHNM
aW5rcyh0ZXN0MSkgKyAnPGhyPicgKwotICAgICAgICAnPGgyPjxhIGhyZWY9Imh0dHBzOi8vdHJh
Yy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvTGF5b3V0VGVzdHMvYmFyL25vbmV4aXN0YW50Lmh0
bWwiIHRhcmdldD0iX2JsYW5rIj5iYXIvbm9uZXhpc3RhbnQuaHRtbDwvYT48L2gyPicgKwotICAg
ICAgICBodG1sRm9ySW5kaXZpZHVhbFRlc3RPbkFsbEJ1aWxkZXJzV2l0aFJlc3VsdHNMaW5rcyh0
ZXN0MikpOwotfSk7Ci0KLXRlc3QoJ2h0bWxGb3JTaW5nbGVUZXN0Um93JywgMSwgZnVuY3Rpb24o
KSB7Ci0gICAgdmFyIGhpc3RvcnlJbnN0YW5jZSA9IHJlc2V0R2xvYmFscygpOwotICAgIHZhciBi
dWlsZGVyID0gJ2R1bW15QnVpbGRlcic7Ci0gICAgQlVJTERFUl9UT19NQVNURVJbYnVpbGRlcl0g
PSBXRUJLSVRfQlVJTERFUl9NQVNURVI7Ci0gICAgdmFyIHRlc3QgPSBjcmVhdGVSZXN1bHRzT2Jq
ZWN0Rm9yVGVzdCgnZm9vL2V4aXN0cy5odG1sJywgYnVpbGRlcik7Ci0gICAgaGlzdG9yeUluc3Rh
bmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUuc2hvd0NvcnJlY3RFeHBlY3RhdGlvbnMgPSB0cnVl
OwotICAgIGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyXSA9IHtidWlsZE51bWJlcnM6IFsyLCAx
XSwgd2Via2l0UmV2aXNpb246IFsxMjM0LCAxMjMzXX07Ci0gICAgdGVzdC5yYXdSZXN1bHRzID0g
W1sxLCAnRiddLCBbMiwgJ0knXV07Ci0gICAgdGVzdC5yYXdUaW1lcyA9IFtbMSwgMF0sIFsyLCA1
XV07Ci0gICAgdmFyIGV4cGVjdGVkID0gJzx0cj4nICsKLSAgICAgICAgJzx0ZCBjbGFzcz0idGVz
dC1saW5rIj48c3BhbiBjbGFzcz0ibGluayIgb25jbGljaz0iZ19oaXN0b3J5LnNldFF1ZXJ5UGFy
YW1ldGVyKFwndGVzdHNcJyxcJ2Zvby9leGlzdHMuaHRtbFwnKTsiPmZvby9leGlzdHMuaHRtbDwv
c3Bhbj4nICsKLSAgICAgICAgJzx0ZCBjbGFzcz1vcHRpb25zLWNvbnRhaW5lcj48YSBocmVmPSJo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9lbnRlcl9idWcuY2dpP2Fzc2lnbmVkX3RvPXdlYmtpdC11
bmFzc2lnbmVkJTQwbGlzdHMud2Via2l0Lm9yZyZwcm9kdWN0PVdlYktpdCZmb3JtX25hbWU9ZW50
ZXJfYnVnJmNvbXBvbmVudD1Ub29scyUyMCUyRiUyMFRlc3RzJnNob3J0X2Rlc2M9TGF5b3V0JTIw
VGVzdCUyMGZvbyUyRmV4aXN0cy5odG1sJTIwaXMlMjBmYWlsaW5nJmNvbW1lbnQ9VGhlJTIwZm9s
bG93aW5nJTIwbGF5b3V0JTIwdGVzdCUyMGlzJTIwZmFpbGluZyUyMG9uJTIwJTVCaW5zZXJ0JTIw
cGxhdGZvcm0lNUQlMEElMEFmb28lMkZleGlzdHMuaHRtbCUwQSUwQVByb2JhYmxlJTIwY2F1c2Ul
M0ElMEElMEElNUJpbnNlcnQlMjBwcm9iYWJsZSUyMGNhdXNlJTVEIiBjbGFzcz0iZmlsZS1idWci
PkZJTEUgQlVHPC9hPicgKwotICAgICAgICAnPHRkIGNsYXNzPW9wdGlvbnMtY29udGFpbmVyPicg
KwotICAgICAgICAgICAgJzx0ZCBjbGFzcz1vcHRpb25zLWNvbnRhaW5lcj4nICsKLSAgICAgICAg
ICAgICAgICAnPHRkPjx0ZCB0aXRsZT0iVEVYVC4gQ2xpY2sgZm9yIG1vcmUgaW5mby4iIGNsYXNz
PSJyZXN1bHRzIEYgbWVyZ2UiIG9uY2xpY2s9XCdzaG93UG9wdXBGb3JCdWlsZChldmVudCwgImR1
bW15QnVpbGRlciIsMCwiZm9vL2V4aXN0cy5odG1sIilcJz4mbmJzcDsnICsKLSAgICAgICAgICAg
ICAgICAnPHRkIHRpdGxlPSJJTUFHRS4gQ2xpY2sgZm9yIG1vcmUgaW5mby4iIGNsYXNzPSJyZXN1
bHRzIEkiIG9uY2xpY2s9XCdzaG93UG9wdXBGb3JCdWlsZChldmVudCwgImR1bW15QnVpbGRlciIs
MSwiZm9vL2V4aXN0cy5odG1sIilcJz41JzsKLQotICAgIGVxdWFsKGh0bWxGb3JTaW5nbGVUZXN0
Um93KHRlc3QpLCBleHBlY3RlZCk7Ci19KTsKLQotLy8gRklYTUU6IENyZWF0ZSBidWlsZGVyc190
ZXN0cy5qcyBhbmQgbW92ZSB0aGlzIHRoZXJlLgotCi10ZXN0KCdyZXF1ZXN0QnVpbGRlckxpc3RB
ZGRzQnVpbGRlckdyb3VwRW50cnknLCAxLCBmdW5jdGlvbigpIHsKLSAgICB2YXIgdGVzdEJ1aWxk
ZXJHcm91cHMgPSB7ICdAVG9UIC0gZHVtbXkub3JnJzogbnVsbCB9OwotICAgIHZhciBidWlsZGVy
R3JvdXAgPSBuZXcgQnVpbGRlckdyb3VwKCk7Ci0gICAgdmFyIGdyb3VwTmFtZSA9ICdAVG9UIC0g
ZHVtbXkub3JnJzsKLSAgICByZXF1ZXN0QnVpbGRlckxpc3QodGVzdEJ1aWxkZXJHcm91cHMsICd3
ZWJraXQub3JnJywgZ3JvdXBOYW1lLCBidWlsZGVyR3JvdXAsICdsYXlvdXQtdGVzdHMnKTsKLQot
ICAgIGVxdWFsKHRlc3RCdWlsZGVyR3JvdXBzWydAVG9UIC0gZHVtbXkub3JnJ10sIGJ1aWxkZXJH
cm91cCk7Ci19KQotCi10ZXN0KCdzb3J0VGVzdHMnLCA0LCBmdW5jdGlvbigpIHsKLSAgICB2YXIg
dGVzdDEgPSBjcmVhdGVSZXN1bHRzT2JqZWN0Rm9yVGVzdCgnZm9vL3Rlc3QxLmh0bWwnLCAnZHVt
bXlCdWlsZGVyJyk7Ci0gICAgdmFyIHRlc3QyID0gY3JlYXRlUmVzdWx0c09iamVjdEZvclRlc3Qo
J2Zvby90ZXN0Mi5odG1sJywgJ2R1bW15QnVpbGRlcicpOwotICAgIHZhciB0ZXN0MyA9IGNyZWF0
ZVJlc3VsdHNPYmplY3RGb3JUZXN0KCdmb28vdGVzdDMuaHRtbCcsICdkdW1teUJ1aWxkZXInKTsK
LSAgICB0ZXN0MS5tb2RpZmllcnMgPSAnYic7Ci0gICAgdGVzdDIubW9kaWZpZXJzID0gJ2EnOwot
ICAgIHRlc3QzLm1vZGlmaWVycyA9ICcnOwotCi0gICAgdmFyIHRlc3RzID0gW3Rlc3QxLCB0ZXN0
MiwgdGVzdDNdOwotICAgIHNvcnRUZXN0cyh0ZXN0cywgJ21vZGlmaWVycycsIEZPUldBUkQpOwot
ICAgIGRlZXBFcXVhbCh0ZXN0cywgW3Rlc3QyLCB0ZXN0MSwgdGVzdDNdKTsKLSAgICBzb3J0VGVz
dHModGVzdHMsICdtb2RpZmllcnMnLCBCQUNLV0FSRCk7Ci0gICAgZGVlcEVxdWFsKHRlc3RzLCBb
dGVzdDMsIHRlc3QxLCB0ZXN0Ml0pOwotCi0gICAgdGVzdDEuYnVncyA9ICdiJzsKLSAgICB0ZXN0
Mi5idWdzID0gJ2EnOwotICAgIHRlc3QzLmJ1Z3MgPSAnJzsKLQotICAgIHZhciB0ZXN0cyA9IFt0
ZXN0MSwgdGVzdDIsIHRlc3QzXTsKLSAgICBzb3J0VGVzdHModGVzdHMsICdidWdzJywgRk9SV0FS
RCk7Ci0gICAgZGVlcEVxdWFsKHRlc3RzLCBbdGVzdDIsIHRlc3QxLCB0ZXN0M10pOwotICAgIHNv
cnRUZXN0cyh0ZXN0cywgJ2J1Z3MnLCBCQUNLV0FSRCk7Ci0gICAgZGVlcEVxdWFsKHRlc3RzLCBb
dGVzdDMsIHRlc3QxLCB0ZXN0Ml0pOwotfSk7Ci0KLXRlc3QoJ3BvcHVwJywgMiwgZnVuY3Rpb24o
KSB7Ci0gICAgdWkucG9wdXAuc2hvdyhkb2N1bWVudC5ib2R5LCAnZHVtbXkgY29udGVudCcpOwot
ICAgIG9rKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwb3B1cCcpKTsKLSAgICB1aS5wb3B1cC5o
aWRlKCk7Ci0gICAgb2soIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwb3B1cCcpKTsKLX0pOwot
Ci10ZXN0KCdUZXN0VHJpZScsIDMsIGZ1bmN0aW9uKCkgewotICAgIHZhciBidWlsZGVycyA9IHsK
LSAgICAgICAgIkR1bW15IFdpbmRvd3MgQnVpbGRlciI6IHRydWUsCi0gICAgICAgICJEdW1teSBH
VEsgTGludXggQnVpbGRlciI6IHRydWUsCi0gICAgICAgICJEdW1teSBBcHBsZSBNYWMgTGlvbiBC
dWlsZGVyIjogdHJ1ZQotICAgIH07Ci0KLSAgICB2YXIgcmVzdWx0c0J5QnVpbGRlciA9IHsKLSAg
ICAgICAgIkR1bW15IFdpbmRvd3MgQnVpbGRlciI6IHsKLSAgICAgICAgICAgIHRlc3RzOiB7Ci0g
ICAgICAgICAgICAgICAgImZvbyI6IHRydWUsCi0gICAgICAgICAgICAgICAgImZvby9iYXIvMS5o
dG1sIjogdHJ1ZSwKLSAgICAgICAgICAgICAgICAiZm9vL2Jhci9iYXoiOiB0cnVlCi0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJEdW1teSBHVEsgTGludXggQnVpbGRlciI6IHsK
LSAgICAgICAgICAgIHRlc3RzOiB7Ci0gICAgICAgICAgICAgICAgImJhciI6IHRydWUsCi0gICAg
ICAgICAgICAgICAgImZvby8xLmh0bWwiOiB0cnVlLAotICAgICAgICAgICAgICAgICJmb28vYmFy
LzIuaHRtbCI6IHRydWUsCi0gICAgICAgICAgICAgICAgImZvby9iYXIvYmF6LzEuaHRtbCI6IHRy
dWUsCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0sCi0gICAgICAgICJEdW1teSBBcHBsZSBNYWMg
TGlvbiBCdWlsZGVyIjogewotICAgICAgICAgICAgdGVzdHM6IHsKLSAgICAgICAgICAgICAgICAi
Zm9vL2Jhci8zLmh0bWwiOiB0cnVlLAotICAgICAgICAgICAgICAgICJmb28vYmFyL2Jhei9mb28i
OiB0cnVlLAotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfTsKLSAgICB2YXIgZXhwZWN0
ZWRUcmllID0gewotICAgICAgICAiZm9vIjogewotICAgICAgICAgICAgImJhciI6IHsKLSAgICAg
ICAgICAgICAgICAiMS5odG1sIjogdHJ1ZSwKLSAgICAgICAgICAgICAgICAiMi5odG1sIjogdHJ1
ZSwKLSAgICAgICAgICAgICAgICAiMy5odG1sIjogdHJ1ZSwKLSAgICAgICAgICAgICAgICAiYmF6
IjogewotICAgICAgICAgICAgICAgICAgICAiMS5odG1sIjogdHJ1ZSwKLSAgICAgICAgICAgICAg
ICAgICAgImZvbyI6IHRydWUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotICAg
ICAgICAgICAgIjEuaHRtbCI6IHRydWUKLSAgICAgICAgfSwKLSAgICAgICAgImJhciI6IHRydWUK
LSAgICB9Ci0KLSAgICB2YXIgdHJpZSA9IG5ldyBUZXN0VHJpZShidWlsZGVycywgcmVzdWx0c0J5
QnVpbGRlcik7Ci0gICAgZGVlcEVxdWFsKHRyaWUuX3RyaWUsIGV4cGVjdGVkVHJpZSk7Ci0KLSAg
ICB2YXIgbGVhZnNPZkNvbXBsZXRlVHJpZVRyYXZlcnNhbCA9IFtdOwotICAgIHZhciBleHBlY3Rl
ZExlYWZzID0gWyJmb28vYmFyLzEuaHRtbCIsICJmb28vYmFyL2Jhei8xLmh0bWwiLCAiZm9vL2Jh
ci9iYXovZm9vIiwgImZvby9iYXIvMi5odG1sIiwgImZvby9iYXIvMy5odG1sIiwgImZvby8xLmh0
bWwiLCAiYmFyIl07Ci0gICAgdHJpZS5mb3JFYWNoKGZ1bmN0aW9uKHRyaWVQYXRoKSB7Ci0gICAg
ICAgIGxlYWZzT2ZDb21wbGV0ZVRyaWVUcmF2ZXJzYWwucHVzaCh0cmllUGF0aCk7Ci0gICAgfSk7
Ci0gICAgZGVlcEVxdWFsKGxlYWZzT2ZDb21wbGV0ZVRyaWVUcmF2ZXJzYWwsIGV4cGVjdGVkTGVh
ZnMpOwotCi0gICAgdmFyIGxlYWZzT2ZQYXJ0aWFsVHJpZVRyYXZlcnNhbCA9IFtdOwotICAgIGV4
cGVjdGVkTGVhZnMgPSBbImZvby9iYXIvMS5odG1sIiwgImZvby9iYXIvYmF6LzEuaHRtbCIsICJm
b28vYmFyL2Jhei9mb28iLCAiZm9vL2Jhci8yLmh0bWwiLCAiZm9vL2Jhci8zLmh0bWwiXTsKLSAg
ICB0cmllLmZvckVhY2goZnVuY3Rpb24odHJpZVBhdGgpIHsKLSAgICAgICAgbGVhZnNPZlBhcnRp
YWxUcmllVHJhdmVyc2FsLnB1c2godHJpZVBhdGgpOwotICAgIH0sICJmb28vYmFyIik7Ci0gICAg
ZGVlcEVxdWFsKGxlYWZzT2ZQYXJ0aWFsVHJpZVRyYXZlcnNhbCwgZXhwZWN0ZWRMZWFmcyk7Ci19
KTsKLQotdGVzdCgnY2hhbmdlVGVzdFR5cGVJbnZhbGlkYXRlc0dyb3VwJywgMSwgZnVuY3Rpb24o
KSB7Ci0gICAgdmFyIGhpc3RvcnlJbnN0YW5jZSA9IHJlc2V0R2xvYmFscygpOwotICAgIHZhciBv
cmlnaW5hbEdyb3VwID0gJ0BUb1QgLSB3ZWJraXQub3JnJzsKLSAgICB2YXIgb3JpZ2luYWxUZXN0
VHlwZSA9ICdsYXlvdXQtdGVzdHMnOwotICAgIGxvYWRCdWlsZGVyc0xpc3Qob3JpZ2luYWxHcm91
cCwgb3JpZ2luYWxUZXN0VHlwZSk7Ci0gICAgaGlzdG9yeUluc3RhbmNlLmNyb3NzRGFzaGJvYXJk
U3RhdGUuZ3JvdXAgPSBvcmlnaW5hbEdyb3VwOwotICAgIGhpc3RvcnlJbnN0YW5jZS5jcm9zc0Rh
c2hib2FyZFN0YXRlLnRlc3RUeXBlID0gb3JpZ2luYWxUZXN0VHlwZTsKLQotICAgIGhpc3RvcnlJ
bnN0YW5jZS5pbnZhbGlkYXRlUXVlcnlQYXJhbWV0ZXJzKHsndGVzdFR5cGUnOiAndWlfdGVzdHMn
fSk7Ci0gICAgbm90RXF1YWwoaGlzdG9yeUluc3RhbmNlLmNyb3NzRGFzaGJvYXJkU3RhdGUuZ3Jv
dXAsIG9yaWdpbmFsR3JvdXAsICJncm91cCBzaG91bGQgaGF2ZSBiZWVuIGludmFsaWRhdGVkIik7
ICAgCi19KTsKLQotdGVzdCgnc2hvdWxkSGlkZVRlc3QnLCAxMCwgZnVuY3Rpb24oKSB7Ci0gICAg
dmFyIGhpc3RvcnlJbnN0YW5jZSA9IG5ldyBoaXN0b3J5Lkhpc3RvcnkoZmxha2luZXNzQ29uZmln
KTsKLSAgICBoaXN0b3J5SW5zdGFuY2UucGFyc2VQYXJhbWV0ZXJzKCk7Ci0gICAgLy8gRklYTUUo
anBhcmVudCk6IENoYW5nZSB0byB1c2UgdGhlIGZsYWtpbmVzc19kYXNoYm9hcmQncyBoaXN0b3J5
IG9iamVjdAotICAgIC8vIG9uY2UgaXQgZXhpc3RzLCByYXRoZXIgdGhhbiB0cmFja2luZyBnbG9i
YWwuCi0gICAgZ19oaXN0b3J5ID0gaGlzdG9yeUluc3RhbmNlOwotICAgIHZhciB0ZXN0ID0gY3Jl
YXRlUmVzdWx0c09iamVjdEZvclRlc3QoJ2Zvby90ZXN0Lmh0bWwnLCAnZHVtbXlCdWlsZGVyJyk7
Ci0KLSAgICBlcXVhbChzaG91bGRIaWRlVGVzdCh0ZXN0KSwgdHJ1ZSwgJ2RlZmF1bHQgbGF5b3V0
IHRlc3QsIGhpZGUgaXQuJyk7Ci0gICAgaGlzdG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmlj
U3RhdGUuc2hvd0NvcnJlY3RFeHBlY3RhdGlvbnMgPSB0cnVlOwotICAgIGVxdWFsKHNob3VsZEhp
ZGVUZXN0KHRlc3QpLCBmYWxzZSwgJ3Nob3cgY29ycmVjdCBleHBlY3RhdGlvbnMuJyk7Ci0gICAg
aGlzdG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUuc2hvd0NvcnJlY3RFeHBlY3Rh
dGlvbnMgPSBmYWxzZTsKLQotICAgIHRlc3QgPSBjcmVhdGVSZXN1bHRzT2JqZWN0Rm9yVGVzdCgn
Zm9vL3Rlc3QuaHRtbCcsICdkdW1teUJ1aWxkZXInKTsKLSAgICB0ZXN0LmlzV29udEZpeFNraXAg
PSB0cnVlOwotICAgIGVxdWFsKHNob3VsZEhpZGVUZXN0KHRlc3QpLCB0cnVlLCAnYnkgZGVmYXVs
dCBoaWRlIHRoZXNlIHRvbycpOwotICAgIGhpc3RvcnlJbnN0YW5jZS5kYXNoYm9hcmRTcGVjaWZp
Y1N0YXRlLnNob3dXb250Rml4U2tpcCA9IHRydWU7Ci0gICAgZXF1YWwoc2hvdWxkSGlkZVRlc3Qo
dGVzdCksIGZhbHNlLCAnbm93IHdlIHNob3VsZCBzaG93IGl0Jyk7Ci0gICAgaGlzdG9yeUluc3Rh
bmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUuc2hvd1dvbnRGaXhTa2lwID0gZmFsc2U7Ci0KLSAg
ICB0ZXN0ID0gY3JlYXRlUmVzdWx0c09iamVjdEZvclRlc3QoJ2Zvby90ZXN0Lmh0bWwnLCAnZHVt
bXlCdWlsZGVyJyk7Ci0gICAgdGVzdC5pc0ZsYWt5ID0gdHJ1ZTsKLSAgICBlcXVhbChzaG91bGRI
aWRlVGVzdCh0ZXN0KSwgZmFsc2UsICd3ZSBzaG93IGZsYWt5IHRlc3RzIGJ5IGRlZmF1bHQnKTsK
LSAgICBoaXN0b3J5SW5zdGFuY2UuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5zaG93Rmxha3kgPSBm
YWxzZTsKLSAgICBlcXVhbChzaG91bGRIaWRlVGVzdCh0ZXN0KSwgdHJ1ZSwgJ2RvIG5vdCBzaG93
IGZsYWt5IHRlc3QnKTsKLSAgICBoaXN0b3J5SW5zdGFuY2UuZGFzaGJvYXJkU3BlY2lmaWNTdGF0
ZS5zaG93Rmxha3kgPSB0cnVlOwotCi0gICAgdGVzdCA9IGNyZWF0ZVJlc3VsdHNPYmplY3RGb3JU
ZXN0KCdmb28vdGVzdC5odG1sJywgJ2R1bW15QnVpbGRlcicpOwotICAgIHRlc3Quc2xvd2VzdE5v
blRpbWVvdXRDcmFzaFRpbWUgPSBNSU5fU0VDT05EU19GT1JfU0xPV19URVNUICsgMTsKLSAgICBl
cXVhbChzaG91bGRIaWRlVGVzdCh0ZXN0KSwgdHJ1ZSwgJ3dlIGhpZGUgc2xvdyB0ZXN0cyBieSBk
ZWZhdWx0Jyk7Ci0gICAgaGlzdG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUuc2hv
d1Nsb3cgPSB0cnVlOwotICAgIGVxdWFsKHNob3VsZEhpZGVUZXN0KHRlc3QpLCBmYWxzZSwgJ25v
dyBzaG93IHNsb3cgdGVzdCcpOwotICAgIGhpc3RvcnlJbnN0YW5jZS5kYXNoYm9hcmRTcGVjaWZp
Y1N0YXRlLnNob3dTbG93ID0gZmFsc2U7Ci0KLSAgICB0ZXN0ID0gY3JlYXRlUmVzdWx0c09iamVj
dEZvclRlc3QoJ2Zvby90ZXN0Lmh0bWwnLCAnZHVtbXlCdWlsZGVyJyk7Ci0gICAgaGlzdG9yeUlu
c3RhbmNlLmNyb3NzRGFzaGJvYXJkU3RhdGUudGVzdFR5cGUgPSAnbm90IGxheW91dCB0ZXN0cyc7
Ci0gICAgZXF1YWwoc2hvdWxkSGlkZVRlc3QodGVzdCksIGZhbHNlLCAnc2hvdyBhbGwgbm9uIGxh
eW91dCB0ZXN0cycpOwotICAgIHRlc3QuaXNXb250Rml4U2tpcCA9IHRydWU7Ci0gICAgZXF1YWwo
c2hvdWxkSGlkZVRlc3QodGVzdCksIGZhbHNlLCAnc2hvdyBhbGwgbm9uIGxheW91dCB0ZXN0cywg
ZXZlbiBpZiB3b250IGZpeCcpOwotfSk7CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9UZXN0
UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2ZsYWtpbmVzc19kYXNoYm9hcmRfdW5pdHRl
c3RzLmpzCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1M
RgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBUb29scy9UZXN0UmVzdWx0
U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2hpc3RvcnkuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9oaXN0b3J5LmpzCShyZXZpc2lvbiAy
NjQ1MjcpCisrKyBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL2hpc3Rv
cnkuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSwzMDMgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0v
LyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0vLyAgICAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9u
LgotLy8gICAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQotdmFyIGhpc3RvcnkgPSBo
aXN0b3J5IHx8IHt9OwotCi0oZnVuY3Rpb24oKSB7Ci0KLWhpc3RvcnkuREVGQVVMVF9DUk9TU19E
QVNIQk9BUkRfU1RBVEVfVkFMVUVTID0gewotICAgIGdyb3VwOiBudWxsLAotICAgIHNob3dBbGxS
dW5zOiBmYWxzZSwKLSAgICB0ZXN0VHlwZTogJ2xheW91dC10ZXN0cycsCi0gICAgdXNlVGVzdERh
dGE6IGZhbHNlLAotfSAgICAKLQotaGlzdG9yeS52YWxpZGF0ZVBhcmFtZXRlciA9IGZ1bmN0aW9u
KHN0YXRlLCBrZXksIHZhbHVlLCB2YWxpZGF0ZUZuKQotewotICAgIGlmICh2YWxpZGF0ZUZuKCkp
Ci0gICAgICAgIHN0YXRlW2tleV0gPSB2YWx1ZTsKLSAgICBlbHNlCi0gICAgICAgIGNvbnNvbGUu
bG9nKGtleSArICcgdmFsdWUgaXMgbm90IHZhbGlkOiAnICsgdmFsdWUpOwotfQotCi1oaXN0b3J5
LmlzVHJlZU1hcCA9IGZ1bmN0aW9uKCkKLXsKLSAgICByZXR1cm4gc3RyaW5nLmVuZHNXaXRoKHdp
bmRvdy5sb2NhdGlvbi5wYXRobmFtZSwgJ3RyZWVtYXAuaHRtbCcpOwotfQotCi0vLyBUT0RPKGpw
YXJlbnQpOiBNYWtlIHByaXZhdGUgb25jZSBjYWxsZXJzIG1vdmUgaGVyZS4KLWhpc3RvcnkucXVl
cnlIYXNoQXNNYXAgPSBmdW5jdGlvbigpCi17Ci0gICAgdmFyIGhhc2ggPSB3aW5kb3cubG9jYXRp
b24uaGFzaDsKLSAgICB2YXIgcGFyYW1zTGlzdCA9IGhhc2ggPyBoYXNoLnN1YnN0cmluZygxKS5z
cGxpdCgnJicpIDogW107Ci0gICAgdmFyIHBhcmFtc01hcCA9IHt9OwotICAgIHZhciBpbnZhbGlk
S2V5cyA9IFtdOwotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW1zTGlzdC5sZW5ndGg7IGkr
KykgewotICAgICAgICB2YXIgdGhpc1BhcmFtID0gcGFyYW1zTGlzdFtpXS5zcGxpdCgnPScpOwot
ICAgICAgICBpZiAodGhpc1BhcmFtLmxlbmd0aCAhPSAyKSB7Ci0gICAgICAgICAgICBjb25zb2xl
LmxvZygnSW52YWxpZCBxdWVyeSBwYXJhbWV0ZXI6ICcgKyBwYXJhbXNMaXN0W2ldKTsKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcGFyYW1zTWFwW3RoaXNQYXJh
bVswXV0gPSBkZWNvZGVVUklDb21wb25lbnQodGhpc1BhcmFtWzFdKTsKLSAgICB9Ci0KLSAgICAv
LyBGSVhNRTogcmVtb3ZlIHN1cHBvcnQgZm9yIG1hcHBpbmcgZnJvbSB0aGUgbWFzdGVyIHBhcmFt
ZXRlciB0byB0aGUgZ3JvdXAKLSAgICAvLyBvbmUgb25jZSB0aGUgd2F0ZXJmYWxsIHN0YXJ0cyB0
byBwYXNzIGluIHRoZSBidWlsZGVyIG5hbWUgaW5zdGVhZC4KLSAgICBpZiAocGFyYW1zTWFwLm1h
c3RlcikgewotICAgICAgICBwYXJhbXNNYXAuZ3JvdXAgPSBMRUdBQ1lfQlVJTERFUl9NQVNURVJT
X1RPX0dST1VQU1twYXJhbXNNYXAubWFzdGVyXTsKLSAgICAgICAgaWYgKCFwYXJhbXNNYXAuZ3Jv
dXApCi0gICAgICAgICAgICBjb25zb2xlLmxvZygnRVJST1I6IFVua25vd24gbWFzdGVyIG5hbWU6
ICcgKyBwYXJhbXNNYXAubWFzdGVyKTsKLSAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2ggPSB3
aW5kb3cubG9jYXRpb24uaGFzaC5yZXBsYWNlKCdtYXN0ZXI9JyArIHBhcmFtc01hcC5tYXN0ZXIs
ICdncm91cD0nICsgcGFyYW1zTWFwLmdyb3VwKTsKLSAgICAgICAgZGVsZXRlIHBhcmFtc01hcC5t
YXN0ZXI7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhcmFtc01hcDsKLX0KLQotaGlzdG9yeS5fZGlm
ZlN0YXRlcyA9IGZ1bmN0aW9uKG9sZFN0YXRlLCBuZXdTdGF0ZSkKLXsKLSAgICAvLyBJZiB0aGVy
ZSBpcyBubyBvbGQgc3RhdGUsIGV2ZXJ5dGhpbmcgaW4gdGhlIGN1cnJlbnQgc3RhdGUgaXMgbmV3
LgotICAgIGlmICghb2xkU3RhdGUpCi0gICAgICAgIHJldHVybiBuZXdTdGF0ZTsKLQotICAgIHZh
ciBjaGFuZ2VkUGFyYW1zID0ge307Ci0gICAgZm9yIChjdXJLZXkgaW4gbmV3U3RhdGUpIHsKLSAg
ICAgICAgdmFyIG9sZFZhbCA9IG9sZFN0YXRlW2N1cktleV07Ci0gICAgICAgIHZhciBuZXdWYWwg
PSBuZXdTdGF0ZVtjdXJLZXldOwotICAgICAgICAvLyBBZGQgbmV3IGtleXMgb3IgY2hhbmdlZCB2
YWx1ZXMuCi0gICAgICAgIGlmICghb2xkVmFsIHx8IG9sZFZhbCAhPSBuZXdWYWwpCi0gICAgICAg
ICAgICBjaGFuZ2VkUGFyYW1zW2N1cktleV0gPSBuZXdWYWw7Ci0gICAgfQotICAgIHJldHVybiBj
aGFuZ2VkUGFyYW1zOwotfQotCi1oaXN0b3J5Ll9maWxsTWlzc2luZ1ZhbHVlcyA9IGZ1bmN0aW9u
KHRvLCBmcm9tKQotewotICAgIGZvciAodmFyIHN0YXRlIGluIGZyb20pIHsKLSAgICAgICAgaWYg
KCEoc3RhdGUgaW4gdG8pKQotICAgICAgICAgICAgdG9bc3RhdGVdID0gZnJvbVtzdGF0ZV07Ci0g
ICAgfQotfQotCi1oaXN0b3J5Lkhpc3RvcnkgPSBmdW5jdGlvbihjb25maWd1cmF0aW9uKQotewot
ICAgIHRoaXMuY3Jvc3NEYXNoYm9hcmRTdGF0ZSA9IHt9OwotICAgIHRoaXMuZGFzaGJvYXJkU3Bl
Y2lmaWNTdGF0ZSA9IHt9OwotCi0gICAgaWYgKGNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgdGhp
cy5fZGVmYXVsdERhc2hib2FyZFNwZWNpZmljU3RhdGVWYWx1ZXMgPSBjb25maWd1cmF0aW9uLmRl
ZmF1bHRTdGF0ZVZhbHVlczsKLSAgICAgICAgdGhpcy5faGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVy
ID0gY29uZmlndXJhdGlvbi5oYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXI7Ci0gICAgICAgIHRoaXMu
X2hhbmRsZVF1ZXJ5UGFyYW1ldGVyQ2hhbmdlID0gY29uZmlndXJhdGlvbi5oYW5kbGVRdWVyeVBh
cmFtZXRlckNoYW5nZSB8fCBmdW5jdGlvbihoaXN0b3J5SW5zdGFuY2UsIHBhcmFtcykgeyByZXR1
cm4gdHJ1ZTsgfTsKLSAgICAgICAgdGhpcy5fZGFzaGJvYXJkU3BlY2lmaWNJbnZhbGlkYXRpbmdQ
YXJhbWV0ZXJzID0gY29uZmlndXJhdGlvbi5pbnZhbGlkYXRpbmdIYXNoUGFyYW1ldGVyczsKLSAg
ICAgICAgdGhpcy5fZ2VuZXJhdGVQYWdlID0gY29uZmlndXJhdGlvbi5nZW5lcmF0ZVBhZ2U7Ci0g
ICAgfQotfQotCi12YXIgUkVMT0FEX1JFUVVJUklOR19QQVJBTUVURVJTID0gWydzaG93QWxsUnVu
cycsICdncm91cCcsICd0ZXN0VHlwZSddOwotCi12YXIgQ1JPU1NfREJfSU5WQUxJREFUSU5HX1BB
UkFNRVRFUlMgPSB7Ci0gICAgJ3Rlc3RUeXBlJzogJ2dyb3VwJwotfTsKLQotaGlzdG9yeS5IaXN0
b3J5LnByb3RvdHlwZSA9IHsKLSAgICBpbml0aWFsaXplOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICB3aW5kb3cub25oYXNoY2hhbmdlID0gdGhpcy5faGFuZGxlTG9jYXRpb25DaGFuZ2UuYmlu
ZCh0aGlzKTsKLSAgICAgICAgdGhpcy5faGFuZGxlTG9jYXRpb25DaGFuZ2UoKTsKLSAgICB9LAot
ICAgIGlzTGF5b3V0VGVzdFJlc3VsdHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLmNyb3NzRGFzaGJvYXJkU3RhdGUudGVzdFR5cGUgPT0gJ2xheW91dC10ZXN0cyc7Ci0g
ICAgfSwKLSAgICBwYXJzZUNyb3NzRGFzaGJvYXJkUGFyYW1ldGVyczogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdGhpcy5jcm9zc0Rhc2hib2FyZFN0YXRlID0ge307Ci0gICAgICAgIHZhciBw
YXJhbWV0ZXJzID0gaGlzdG9yeS5xdWVyeUhhc2hBc01hcCgpOwotICAgICAgICBmb3IgKHBhcmFt
ZXRlck5hbWUgaW4gaGlzdG9yeS5ERUZBVUxUX0NST1NTX0RBU0hCT0FSRF9TVEFURV9WQUxVRVMp
Ci0gICAgICAgICAgICB0aGlzLnBhcnNlUGFyYW1ldGVyKHBhcmFtZXRlcnMsIHBhcmFtZXRlck5h
bWUpOwotCi0gICAgICAgIGhpc3RvcnkuX2ZpbGxNaXNzaW5nVmFsdWVzKHRoaXMuY3Jvc3NEYXNo
Ym9hcmRTdGF0ZSwgaGlzdG9yeS5ERUZBVUxUX0NST1NTX0RBU0hCT0FSRF9TVEFURV9WQUxVRVMp
OwotICAgIH0sCi0gICAgX3BhcnNlRGFzaGJvYXJkU3BlY2lmaWNQYXJhbWV0ZXJzOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB0aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGUgPSB7fTsKLSAg
ICAgICAgdmFyIHBhcmFtZXRlcnMgPSBoaXN0b3J5LnF1ZXJ5SGFzaEFzTWFwKCk7Ci0gICAgICAg
IGZvciAocGFyYW1ldGVyTmFtZSBpbiB0aGlzLl9kZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNTdGF0
ZVZhbHVlcykKLSAgICAgICAgICAgIHRoaXMucGFyc2VQYXJhbWV0ZXIocGFyYW1ldGVycywgcGFy
YW1ldGVyTmFtZSk7Ci0gICAgfSwKLSAgICAvLyBUT0RPKGpwYXJlbnQpOiBNYWtlIHByaXZhdGUg
b25jZSBjYWxsZXJzIG1vdmUgaGVyZS4KLSAgICBwYXJzZVBhcmFtZXRlcnM6IGZ1bmN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHZhciBvbGRDcm9zc0Rhc2hib2FyZFN0YXRlID0gdGhpcy5jcm9zc0Rh
c2hib2FyZFN0YXRlOwotICAgICAgICB2YXIgb2xkRGFzaGJvYXJkU3BlY2lmaWNTdGF0ZSA9IHRo
aXMuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZTsKLQotICAgICAgICB0aGlzLnBhcnNlQ3Jvc3NEYXNo
Ym9hcmRQYXJhbWV0ZXJzKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBTb21lIHBhcmFtZXRlcnMg
cmVxdWlyZSBsb2FkaW5nIGRpZmZlcmVudCBKU09OIGZpbGVzIHdoZW4gdGhlIHZhbHVlIGNoYW5n
ZXMuIERvIGEgcmVsb2FkLgotICAgICAgICBpZiAoT2JqZWN0LmtleXMob2xkQ3Jvc3NEYXNoYm9h
cmRTdGF0ZSkubGVuZ3RoKSB7Ci0gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jcm9z
c0Rhc2hib2FyZFN0YXRlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG9sZENyb3NzRGFzaGJvYXJk
U3RhdGVba2V5XSAhPSB0aGlzLmNyb3NzRGFzaGJvYXJkU3RhdGVba2V5XSAmJiBSRUxPQURfUkVR
VUlSSU5HX1BBUkFNRVRFUlMuaW5kZXhPZihrZXkpICE9IC0xKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIHRoaXMuX3BhcnNlRGFzaGJvYXJkU3BlY2lmaWNQYXJhbWV0ZXJzKCk7Ci0gICAgICAg
IHZhciBkYXNoYm9hcmRTcGVjaWZpY0RpZmZTdGF0ZSA9IGhpc3RvcnkuX2RpZmZTdGF0ZXMob2xk
RGFzaGJvYXJkU3BlY2lmaWNTdGF0ZSwgdGhpcy5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlKTsKLQot
ICAgICAgICBoaXN0b3J5Ll9maWxsTWlzc2luZ1ZhbHVlcyh0aGlzLmRhc2hib2FyZFNwZWNpZmlj
U3RhdGUsIHRoaXMuX2RlZmF1bHREYXNoYm9hcmRTcGVjaWZpY1N0YXRlVmFsdWVzKTsKLQotICAg
ICAgICAvLyBGSVhNRTogZGFzaGJvYXJkX2Jhc2Ugc2hvdWxkbid0IGtub3cgYW55dGhpbmcgYWJv
dXQgc3BlY2lmaWMgZGFzaGJvYXJkIHNwZWNpZmljIGtleXMuCi0gICAgICAgIGlmIChkYXNoYm9h
cmRTcGVjaWZpY0RpZmZTdGF0ZS5idWlsZGVyKQotICAgICAgICAgICAgZGVsZXRlIHRoaXMuZGFz
aGJvYXJkU3BlY2lmaWNTdGF0ZS50ZXN0czsKLSAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkU3Bl
Y2lmaWNTdGF0ZS50ZXN0cykKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmRhc2hib2FyZFNwZWNp
ZmljU3RhdGUuYnVpbGRlcjsKLQotICAgICAgICB2YXIgc2hvdWxkR2VuZXJhdGVQYWdlID0gdHJ1
ZTsKLSAgICAgICAgaWYgKE9iamVjdC5rZXlzKGRhc2hib2FyZFNwZWNpZmljRGlmZlN0YXRlKS5s
ZW5ndGgpCi0gICAgICAgICAgICBzaG91bGRHZW5lcmF0ZVBhZ2UgPSB0aGlzLl9oYW5kbGVRdWVy
eVBhcmFtZXRlckNoYW5nZSh0aGlzLCBkYXNoYm9hcmRTcGVjaWZpY0RpZmZTdGF0ZSk7Ci0gICAg
ICAgIHJldHVybiBzaG91bGRHZW5lcmF0ZVBhZ2U7Ci0gICAgfSwKLSAgICAvLyBUT0RPKGpwYXJl
bnQpOiBNYWtlIHByaXZhdGUgb25jZSBjYWxsZXJzIG1vdmUgaGVyZS4KLSAgICBwYXJzZVBhcmFt
ZXRlcjogZnVuY3Rpb24ocGFyYW1ldGVycywga2V5KQotICAgIHsKLSAgICAgICAgaWYgKCEoa2V5
IGluIHBhcmFtZXRlcnMpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB2YXIgdmFsdWUg
PSBwYXJhbWV0ZXJzW2tleV07Ci0gICAgICAgIGlmICghdGhpcy5faGFuZGxlVmFsaWRIYXNoUGFy
YW1ldGVyV3JhcHBlcihrZXksIHZhbHVlKSkKLSAgICAgICAgICAgIGNvbnNvbGUubG9nKCJJbnZh
bGlkIHF1ZXJ5IHBhcmFtZXRlcjogIiArIGtleSArICc9JyArIHZhbHVlKTsKLSAgICB9LAotICAg
IC8vIFRha2VzIGEga2V5IGFuZCBhIHZhbHVlIGFuZCBzZXRzIHRoZSB0aGlzLmRhc2hib2FyZFNw
ZWNpZmljU3RhdGVba2V5XSA9IHZhbHVlIGlmZiBrZXkgaXMKLSAgICAvLyBhIHZhbGlkIGhhc2gg
cGFyYW1ldGVyIGFuZCB0aGUgdmFsdWUgaXMgYSB2YWxpZCB2YWx1ZSBmb3IgdGhhdCBrZXkuIEhh
bmRsZXMKLSAgICAvLyBjcm9zcy1kYXNoYm9hcmQgcGFyYW1ldGVycyB0aGVuIGZhbGxzIGJhY2sg
dG8gY2FsbGluZwotICAgIC8vIGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlciBmb3IgZGFzaGJvYXJk
LXNwZWNpZmljIHBhcmFtZXRlcnMuCi0gICAgLy8KLSAgICAvLyBAcmV0dXJuIHtib29sZWFufSBX
aGV0aGVyIHRoZSBrZXkgd2hhdCBpbnNlcnRlZCBpbnRvIHRoZSB0aGlzLmRhc2hib2FyZFNwZWNp
ZmljU3RhdGUuCi0gICAgX2hhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcldyYXBwZXI6IGZ1bmN0aW9u
KGtleSwgdmFsdWUpCi0gICAgewotICAgICAgICBzd2l0Y2goa2V5KSB7Ci0gICAgICAgIGNhc2Ug
J3Rlc3RUeXBlJzoKLSAgICAgICAgICAgIGhpc3RvcnkudmFsaWRhdGVQYXJhbWV0ZXIodGhpcy5j
cm9zc0Rhc2hib2FyZFN0YXRlLCBrZXksIHZhbHVlLAotICAgICAgICAgICAgICAgIGZ1bmN0aW9u
KCkgeyByZXR1cm4gVEVTVF9UWVBFUy5pbmRleE9mKHZhbHVlKSAhPSAtMTsgfSk7Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBjYXNlICdncm91cCc6Ci0gICAgICAgICAgICBo
aXN0b3J5LnZhbGlkYXRlUGFyYW1ldGVyKHRoaXMuY3Jvc3NEYXNoYm9hcmRTdGF0ZSwga2V5LCB2
YWx1ZSwKLSAgICAgICAgICAgICAgICBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZSBpbiBMQVlPVVRfVEVTVFNfQlVJTERFUl9HUk9VUFM7Ci0gICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBjYXNlICd1c2VUZXN0
RGF0YSc6Ci0gICAgICAgIGNhc2UgJ3Nob3dBbGxSdW5zJzoKLSAgICAgICAgICAgIHRoaXMuY3Jv
c3NEYXNoYm9hcmRTdGF0ZVtrZXldID0gdmFsdWUgPT0gJ3RydWUnOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9o
YW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIodGhpcywga2V5LCB2YWx1ZSk7Ci0gICAgICAgIH0KLSAg
ICB9LAotICAgIHF1ZXJ5UGFyYW1ldGVyVmFsdWU6IGZ1bmN0aW9uKHBhcmFtZXRlcikKLSAgICB7
Ci0gICAgICAgIHJldHVybiB0aGlzLmRhc2hib2FyZFNwZWNpZmljU3RhdGVbcGFyYW1ldGVyXSB8
fCB0aGlzLmNyb3NzRGFzaGJvYXJkU3RhdGVbcGFyYW1ldGVyXTsKLSAgICB9LCAKLSAgICAvLyBT
ZXRzIHRoZSBwYWdlIHN0YXRlLiBUYWtlcyB2YXJhcmdzIG9mIGtleSwgdmFsdWUgcGFpcnMuCi0g
ICAgc2V0UXVlcnlQYXJhbWV0ZXI6IGZ1bmN0aW9uKHZhcl9hcmdzKQotICAgIHsKLSAgICAgICAg
dmFyIHF1ZXJ5UGFyYW1zQXNTdGF0ZSA9IHt9OwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGFyZ3VtZW50cy5sZW5ndGg7IGkgKz0gMikgewotICAgICAgICAgICAgdmFyIGtleSA9IGFyZ3Vt
ZW50c1tpXTsKLSAgICAgICAgICAgIHF1ZXJ5UGFyYW1zQXNTdGF0ZVtrZXldID0gYXJndW1lbnRz
W2kgKyAxXTsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMuaW52YWxpZGF0ZVF1ZXJ5UGFyYW1l
dGVycyhxdWVyeVBhcmFtc0FzU3RhdGUpOwotCi0gICAgICAgIHZhciBuZXdTdGF0ZSA9IHRoaXMu
X2NvbWJpbmVkRGFzaGJvYXJkU3RhdGUoKTsKLSAgICAgICAgZm9yICh2YXIga2V5IGluIHF1ZXJ5
UGFyYW1zQXNTdGF0ZSkgewotICAgICAgICAgICAgbmV3U3RhdGVba2V5XSA9IHF1ZXJ5UGFyYW1z
QXNTdGF0ZVtrZXldOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTm90ZTogV2UgdXNlIHdpbmRv
dy5sb2NhdGlvbi5oYXNoIHJhdGhlciB0aGF0IHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlCi0gICAg
ICAgIC8vIGJlY2F1c2Ugb2YgYnVncyBpbiBDaHJvbWUgd2hlcmUgZXh0cmEgZW50cmllcyB3ZXJl
IGdldHRpbmcgY3JlYXRlZAotICAgICAgICAvLyB3aGVuIGJhY2sgYnV0dG9uIHdhcyBwcmVzc2Vk
IGFuZCBmdWxsIHBhZ2UgbmF2aWdhdGlvbiB3YXMgb2NjdXJpbmcuCi0gICAgICAgIC8vIEZJWE1F
OiBmaWxlIHRob3NlIGJ1Z3MuCi0gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gdGhpcy5f
cGVybWFMaW5rVVJMSGFzaChuZXdTdGF0ZSk7Ci0gICAgfSwKLSAgICB0b2dnbGVRdWVyeVBhcmFt
ZXRlcjogZnVuY3Rpb24ocGFyYW0pCi0gICAgewotICAgICAgICB0aGlzLnNldFF1ZXJ5UGFyYW1l
dGVyKHBhcmFtLCAhdGhpcy5xdWVyeVBhcmFtZXRlclZhbHVlKHBhcmFtKSk7Ci0gICAgfSwKLSAg
ICBpbnZhbGlkYXRlUXVlcnlQYXJhbWV0ZXJzOiBmdW5jdGlvbihxdWVyeVBhcmFtc0FzU3RhdGUp
Ci0gICAgewotICAgICAgICBmb3IgKHZhciBrZXkgaW4gcXVlcnlQYXJhbXNBc1N0YXRlKSB7Ci0g
ICAgICAgICAgICBpZiAoa2V5IGluIENST1NTX0RCX0lOVkFMSURBVElOR19QQVJBTUVURVJTKQot
ICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNyb3NzRGFzaGJvYXJkU3RhdGVbQ1JPU1NfREJf
SU5WQUxJREFUSU5HX1BBUkFNRVRFUlNba2V5XV07Ci0gICAgICAgICAgICBpZiAodGhpcy5fZGFz
aGJvYXJkU3BlY2lmaWNJbnZhbGlkYXRpbmdQYXJhbWV0ZXJzICYmIGtleSBpbiB0aGlzLl9kYXNo
Ym9hcmRTcGVjaWZpY0ludmFsaWRhdGluZ1BhcmFtZXRlcnMpCi0gICAgICAgICAgICAgICAgZGVs
ZXRlIHRoaXMuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVt0aGlzLl9kYXNoYm9hcmRTcGVjaWZpY0lu
dmFsaWRhdGluZ1BhcmFtZXRlcnNba2V5XV07Ci0gICAgICAgIH0KLSAgICB9LAotICAgIF9qb2lu
UGFyYW1ldGVyczogZnVuY3Rpb24oc3RhdGVPYmplY3QpCi0gICAgewotICAgICAgICB2YXIgc3Rh
dGUgPSBbXTsKLSAgICAgICAgZm9yICh2YXIga2V5IGluIHN0YXRlT2JqZWN0KSB7Ci0gICAgICAg
ICAgICB2YXIgdmFsdWUgPSBzdGF0ZU9iamVjdFtrZXldOwotICAgICAgICAgICAgaWYgKHZhbHVl
ICE9IHRoaXMuX2RlZmF1bHRWYWx1ZShrZXkpKQotICAgICAgICAgICAgICAgIHN0YXRlLnB1c2go
a2V5ICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIHN0YXRlLmpvaW4oJyYnKTsKLSAgICB9LCAKLSAgICBfcGVybWFMaW5rVVJMSGFz
aDogZnVuY3Rpb24ob3B0X3N0YXRlKQotICAgIHsKLSAgICAgICAgdmFyIHN0YXRlID0gb3B0X3N0
YXRlIHx8IHRoaXMuX2NvbWJpbmVkRGFzaGJvYXJkU3RhdGUoKTsKLSAgICAgICAgcmV0dXJuICcj
JyArIHRoaXMuX2pvaW5QYXJhbWV0ZXJzKHN0YXRlKTsKLSAgICB9LAotICAgIF9jb21iaW5lZERh
c2hib2FyZFN0YXRlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgY29tYmluZWRTdGF0
ZSA9IE9iamVjdC5jcmVhdGUodGhpcy5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlKTsKLSAgICAgICAg
Zm9yICh2YXIga2V5IGluIHRoaXMuY3Jvc3NEYXNoYm9hcmRTdGF0ZSkKLSAgICAgICAgICAgIGNv
bWJpbmVkU3RhdGVba2V5XSA9IHRoaXMuY3Jvc3NEYXNoYm9hcmRTdGF0ZVtrZXldOwotICAgICAg
ICByZXR1cm4gY29tYmluZWRTdGF0ZTsgICAgCi0gICAgfSwKLSAgICBfZGVmYXVsdFZhbHVlOiBm
dW5jdGlvbihrZXkpCi0gICAgewotICAgICAgICBpZiAoa2V5IGluIHRoaXMuX2RlZmF1bHREYXNo
Ym9hcmRTcGVjaWZpY1N0YXRlVmFsdWVzKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1
bHREYXNoYm9hcmRTcGVjaWZpY1N0YXRlVmFsdWVzW2tleV07Ci0gICAgICAgIHJldHVybiBoaXN0
b3J5LkRFRkFVTFRfQ1JPU1NfREFTSEJPQVJEX1NUQVRFX1ZBTFVFU1trZXldOwotICAgIH0sCi0g
ICAgX2hhbmRsZUxvY2F0aW9uQ2hhbmdlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAo
dGhpcy5wYXJzZVBhcmFtZXRlcnMoKSkKLSAgICAgICAgICAgIHRoaXMuX2dlbmVyYXRlUGFnZSh0
aGlzKTsKLSAgICB9Ci0KLX0KLQotfSkoKTsKSW5kZXg6IFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIv
c3RhdGljLWRhc2hib2FyZHMvaGlzdG9yeV91bml0dGVzdHMuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9oaXN0b3J5X3VuaXR0ZXN0cy5q
cwkocmV2aXNpb24gMjY0NTI3KQorKysgVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFz
aGJvYXJkcy9oaXN0b3J5X3VuaXR0ZXN0cy5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDY1ICswLDAg
QEAKLS8vIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8g
ZGlzdHJpYnV0aW9uLgotLy8gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8g
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi10ZXN0KCdxdWVy
eUhhc2hBc01hcCcsIDIsIGZ1bmN0aW9uKCkgewotICAgIGVxdWFsKHdpbmRvdy5sb2NhdGlvbi5o
YXNoLCAnI3VzZVRlc3REYXRhPXRydWUnKTsKLSAgICBkZWVwRXF1YWwoaGlzdG9yeS5xdWVyeUhh
c2hBc01hcCgpLCB7dXNlVGVzdERhdGE6ICd0cnVlJ30pOwotfSk7Ci0KLXRlc3QoJ2RpZmZTdGF0
ZXMnLCA1LCBmdW5jdGlvbigpIHsKLSAgICB2YXIgbmV3U3RhdGUgPSB7YTogMSwgYjogMn07Ci0g
ICAgZGVlcEVxdWFsKGhpc3RvcnkuX2RpZmZTdGF0ZXMobnVsbCwgbmV3U3RhdGUpLCBuZXdTdGF0
ZSk7Ci0KLSAgICB2YXIgb2xkU3RhdGUgPSB7YTogMX07Ci0gICAgZGVlcEVxdWFsKGhpc3Rvcnku
X2RpZmZTdGF0ZXMob2xkU3RhdGUsIG5ld1N0YXRlKSwge2I6IDJ9KTsKLQotICAgIC8vIEZJWE1F
OiBUaGlzIGlzIGtpbmQgb2Ygd2VpcmQuIEkgdGhpbmsgdGhlIGV4aXN0aW5nIHVzZXJzIG9mIHRo
aXMgY29kZSB3b3JrIGNvcnJlY3RseSwgYnV0IGl0J3MgYSBjb25mdXNpbmcgcmVzdWx0LgotICAg
IHZhciBvbGRTdGF0ZSA9IHtjOiAxfTsKLSAgICBkZWVwRXF1YWwoaGlzdG9yeS5fZGlmZlN0YXRl
cyhvbGRTdGF0ZSwgbmV3U3RhdGUpLCB7YToxLCBiOiAyfSk7Ci0KLSAgICB2YXIgb2xkU3RhdGUg
PSB7YTogMSwgYjogMn07Ci0gICAgZGVlcEVxdWFsKGhpc3RvcnkuX2RpZmZTdGF0ZXMob2xkU3Rh
dGUsIG5ld1N0YXRlKSwge30pOwotCi0gICAgdmFyIG9sZFN0YXRlID0ge2E6IDIsIGI6IDN9Owot
ICAgIGRlZXBFcXVhbChoaXN0b3J5Ll9kaWZmU3RhdGVzKG9sZFN0YXRlLCBuZXdTdGF0ZSksIHth
OiAxLCBiOiAyfSk7Ci19KTsKLQotdGVzdCgncGFyc2VDcm9zc0Rhc2hib2FyZFBhcmFtZXRlcnMn
LCAyLCBmdW5jdGlvbigpIHsKLSAgICB2YXIgaGlzdG9yeUluc3RhbmNlID0gbmV3IGhpc3Rvcnku
SGlzdG9yeSgpOwotICAgIC8vIEZJWE1FKGpwYXJlbnQpOiBSZW1vdmUgdGhpcyBvbmNlIHBhcnNl
UGFyYW1ldGVycyBtb3ZlcyBvbnRvIGhpc3Rvcnkgb2JqLgotICAgIGdfaGlzdG9yeSA9IGhpc3Rv
cnlJbnN0YW5jZTsKLSAgICBlcXVhbCh3aW5kb3cubG9jYXRpb24uaGFzaCwgJyN1c2VUZXN0RGF0
YT10cnVlJyk7Ci0gICAgaGlzdG9yeUluc3RhbmNlLnBhcnNlQ3Jvc3NEYXNoYm9hcmRQYXJhbWV0
ZXJzKCk7Ci0KLSAgICB2YXIgZXhwZWN0ZWRQYXJhbWV0ZXJzID0ge307Ci0gICAgZm9yICh2YXIg
a2V5IGluIGhpc3RvcnkuREVGQVVMVF9DUk9TU19EQVNIQk9BUkRfU1RBVEVfVkFMVUVTKQotICAg
ICAgICBleHBlY3RlZFBhcmFtZXRlcnNba2V5XSA9IGhpc3RvcnkuREVGQVVMVF9DUk9TU19EQVNI
Qk9BUkRfU1RBVEVfVkFMVUVTW2tleV07Ci0gICAgZXhwZWN0ZWRQYXJhbWV0ZXJzLnVzZVRlc3RE
YXRhID0gdHJ1ZTsKLQotICAgIGRlZXBFcXVhbChoaXN0b3J5SW5zdGFuY2UuY3Jvc3NEYXNoYm9h
cmRTdGF0ZSwgZXhwZWN0ZWRQYXJhbWV0ZXJzKTsKLX0pOwpJbmRleDogVG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9sb2FkZXIuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9sb2FkZXIuanMJKHJldmlzaW9uIDI2
NDUyNykKKysrIFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvbG9hZGVy
LmpzCShub25leGlzdGVudCkKQEAgLTEsMjU4ICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gQ29weXJpZ2h0IChDKSAyMDEy
IFphbiBEb2JlcnNlayA8emFuZG9iZXJzZWtAZ21haWwuY29tPgotLy8KLS8vIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
Ly8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotLy8gbWV0OgotLy8KLS8vICAgICAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotLy8gICAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlv
bi4KLS8vICAgICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS8vCi0vLyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi12YXIgbG9hZGVyID0gbG9h
ZGVyIHx8IHt9OwotCi0oZnVuY3Rpb24oKSB7Ci0KLXZhciBURVNUX1JFU1VMVFNfU0VSVkVSID0g
J2h0dHBzOi8vd2Via2l0LXRlc3QtcmVzdWx0cy53ZWJraXQub3JnLyc7Ci0KLWZ1bmN0aW9uIHBh
dGhUb0J1aWxkZXJSZXN1bHRzRmlsZShidWlsZGVyTmFtZSkgewotICAgIHJldHVybiBURVNUX1JF
U1VMVFNfU0VSVkVSICsgJ3Rlc3RmaWxlP2J1aWxkZXI9JyArIGJ1aWxkZXJOYW1lICsKLSAgICAg
ICAgICAgJyZtYXN0ZXI9JyArIGJ1aWxkZXJNYXN0ZXIoYnVpbGRlck5hbWUpLm5hbWUgKwotICAg
ICAgICAgICAnJnRlc3R0eXBlPScgKyBnX2hpc3RvcnkuY3Jvc3NEYXNoYm9hcmRTdGF0ZS50ZXN0
VHlwZSArICcmbmFtZT0nOwotfQotCi1sb2FkZXIucmVxdWVzdCA9IGZ1bmN0aW9uKHVybCwgc3Vj
Y2VzcywgZXJyb3IsIG9wdF9pc0JpbmFyeURhdGEpCi17Ci0gICAgdmFyIHhociA9IG5ldyBYTUxI
dHRwUmVxdWVzdCgpOwotICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIHRydWUpOwotICAgIGlmIChv
cHRfaXNCaW5hcnlEYXRhKQotICAgICAgICB4aHIub3ZlcnJpZGVNaW1lVHlwZSgndGV4dC9wbGFp
bjsgY2hhcnNldD14LXVzZXItZGVmaW5lZCcpOwotICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2Ug
PSBmdW5jdGlvbihlKSB7Ci0gICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PSA0KSB7Ci0gICAg
ICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PSAyMDApCi0gICAgICAgICAgICAgICAgc3VjY2Vzcyh4
aHIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVycm9yKHhocik7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgeGhyLnNlbmQoKTsKLX0KLQotbG9hZGVyLkxvYWRlciA9IGZ1bmN0
aW9uKCkKLXsKLSAgICB0aGlzLl9sb2FkaW5nU3RlcHMgPSBbCi0gICAgICAgIHRoaXMuX2xvYWRC
dWlsZGVyc0xpc3QsCi0gICAgICAgIHRoaXMuX2xvYWRSZXN1bHRzRmlsZXMsCi0gICAgICAgIHRo
aXMuX2xvYWRFeHBlY3RhdGlvbnNGaWxlcywKLSAgICBdOwotCi0gICAgdGhpcy5fYnVpbGRlcnNU
aGF0RmFpbGVkVG9Mb2FkID0gW107Ci0gICAgdGhpcy5fc3RhbGVCdWlsZGVycyA9IFtdOwotICAg
IHRoaXMuX2Vycm9ycyA9IG5ldyB1aS5FcnJvcnMoKTsKLSAgICAvLyBUT0RPKGpwYXJlbnQpOiBQ
YXNzIGluIHRoZSBhcHByb3ByaWF0ZSBoaXN0b3J5IG9iaiBwZXIgZGIuCi0gICAgdGhpcy5faGlz
dG9yeSA9IGdfaGlzdG9yeTsKLX0KLQotLy8gVE9ETyhhYm94aGFsbCk6IGZpZ3VyZSBvdXQgd2hl
dGhlciB0aGlzIGlzIGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjayBhbmQKLS8vIGNoYW5nZSBjYWxs
aW5nIGNvZGUgdG8gdW5kZXJzdGFuZCB0aGUgdHJpZSBzdHJ1Y3R1cmUgaW5zdGVhZCBpZiBuZWNl
c3NhcnkuCi1sb2FkZXIuTG9hZGVyLl9mbGF0dGVuVHJpZSA9IGZ1bmN0aW9uKHRyaWUsIHByZWZp
eCkKLXsKLSAgICB2YXIgcmVzdWx0ID0ge307Ci0gICAgZm9yICh2YXIgbmFtZSBpbiB0cmllKSB7
Ci0gICAgICAgIHZhciBmdWxsTmFtZSA9IHByZWZpeCA/IHByZWZpeCArICIvIiArIG5hbWUgOiBu
YW1lOwotICAgICAgICB2YXIgZGF0YSA9IHRyaWVbbmFtZV07Ci0gICAgICAgIGlmICgicmVzdWx0
cyIgaW4gZGF0YSkKLSAgICAgICAgICAgIHJlc3VsdFtmdWxsTmFtZV0gPSBkYXRhOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIHZhciBwYXJ0aWFsUmVzdWx0ID0gbG9hZGVyLkxvYWRlci5f
ZmxhdHRlblRyaWUoZGF0YSwgZnVsbE5hbWUpOwotICAgICAgICAgICAgZm9yICh2YXIga2V5IGlu
IHBhcnRpYWxSZXN1bHQpIHsKLSAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHBhcnRpYWxS
ZXN1bHRba2V5XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1sb2FkZXIuTG9hZGVyLnByb3RvdHlwZSA9IHsKLSAgICBsb2FkOiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9sb2FkTmV4dCgpOwotICAgIH0sCi0gICAgc2hv
d0Vycm9yczogZnVuY3Rpb24oKSAKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Vycm9ycy5zaG93KCk7
Ci0gICAgfSwKLSAgICBfbG9hZE5leHQ6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBs
b2FkaW5nU3RlcCA9IHRoaXMuX2xvYWRpbmdTdGVwcy5zaGlmdCgpOwotICAgICAgICBpZiAoIWxv
YWRpbmdTdGVwKSB7Ci0gICAgICAgICAgICB0aGlzLl9hZGRFcnJvcnMoKTsKLSAgICAgICAgICAg
IHRoaXMuX2hpc3RvcnkuaW5pdGlhbGl6ZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIGxvYWRpbmdTdGVwLmFwcGx5KHRoaXMpOwotICAgIH0sCi0gICAgX2xvYWRC
dWlsZGVyc0xpc3Q6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGxvYWRCdWlsZGVyc0xpc3Qo
Y3VycmVudEJ1aWxkZXJHcm91cE5hbWUoKSwgdGhpcy5faGlzdG9yeS5jcm9zc0Rhc2hib2FyZFN0
YXRlLnRlc3RUeXBlKTsKLSAgICAgICAgdGhpcy5fbG9hZE5leHQoKTsKLSAgICB9LAotICAgIF9s
b2FkUmVzdWx0c0ZpbGVzOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICBmb3IgKHZhciBidWls
ZGVyTmFtZSBpbiBjdXJyZW50QnVpbGRlcnMoKSkKLSAgICAgICAgICAgIHRoaXMuX2xvYWRSZXN1
bHRzRmlsZUZvckJ1aWxkZXIoYnVpbGRlck5hbWUpOwotICAgIH0sCi0gICAgX2xvYWRSZXN1bHRz
RmlsZUZvckJ1aWxkZXI6IGZ1bmN0aW9uKGJ1aWxkZXJOYW1lKQotICAgIHsKLSAgICAgICAgdmFy
IHJlc3VsdHNGaWxlbmFtZTsKLSAgICAgICAgaWYgKGhpc3RvcnkuaXNUcmVlTWFwKCkpCi0gICAg
ICAgICAgICByZXN1bHRzRmlsZW5hbWUgPSAndGltZXNfbXMuanNvbic7Ci0gICAgICAgIGVsc2Ug
aWYgKHRoaXMuX2hpc3RvcnkuY3Jvc3NEYXNoYm9hcmRTdGF0ZS5zaG93QWxsUnVucykKLSAgICAg
ICAgICAgIHJlc3VsdHNGaWxlbmFtZSA9ICdyZXN1bHRzLmpzb24nOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICByZXN1bHRzRmlsZW5hbWUgPSAncmVzdWx0cy1zbWFsbC5qc29uJzsKLQotICAg
ICAgICB2YXIgcmVzdWx0c0ZpbGVMb2NhdGlvbiA9IHBhdGhUb0J1aWxkZXJSZXN1bHRzRmlsZShi
dWlsZGVyTmFtZSkgKyByZXN1bHRzRmlsZW5hbWU7Ci0gICAgICAgIGxvYWRlci5yZXF1ZXN0KHJl
c3VsdHNGaWxlTG9jYXRpb24sCi0gICAgICAgICAgICAgICAgcGFydGlhbChmdW5jdGlvbihsb2Fk
ZXIsIGJ1aWxkZXJOYW1lLCB4aHIpIHsKLSAgICAgICAgICAgICAgICAgICAgbG9hZGVyLl9oYW5k
bGVSZXN1bHRzRmlsZUxvYWRlZChidWlsZGVyTmFtZSwgeGhyLnJlc3BvbnNlVGV4dCk7Ci0gICAg
ICAgICAgICAgICAgfSwgdGhpcywgYnVpbGRlck5hbWUpLAotICAgICAgICAgICAgICAgIHBhcnRp
YWwoZnVuY3Rpb24obG9hZGVyLCBidWlsZGVyTmFtZSwgeGhyKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGxvYWRlci5faGFuZGxlUmVzdWx0c0ZpbGVMb2FkRXJyb3IoYnVpbGRlck5hbWUpOwotICAg
ICAgICAgICAgICAgIH0sIHRoaXMsIGJ1aWxkZXJOYW1lKSk7Ci0gICAgfSwKLSAgICBfaGFuZGxl
UmVzdWx0c0ZpbGVMb2FkZWQ6IGZ1bmN0aW9uKGJ1aWxkZXJOYW1lLCBmaWxlRGF0YSkKLSAgICB7
Ci0gICAgICAgIGlmIChoaXN0b3J5LmlzVHJlZU1hcCgpKQotICAgICAgICAgICAgdGhpcy5fcHJv
Y2Vzc1RpbWVzSlNPTkRhdGEoYnVpbGRlck5hbWUsIGZpbGVEYXRhKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc1Jlc3VsdHNKU09ORGF0YShidWlsZGVyTmFtZSwgZmls
ZURhdGEpOwotCi0gICAgICAgIC8vIFdlIG5lZWQgdGhpcyB3b3JrLWFyb3VuZCBmb3Igd2Via2l0
Lm9yZy9iLzUwNTg5LgotICAgICAgICBpZiAoIWdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyTmFt
ZV0pIHsKLSAgICAgICAgICAgIHRoaXMuX2hhbmRsZVJlc3VsdHNGaWxlTG9hZEVycm9yKGJ1aWxk
ZXJOYW1lKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHRoaXMu
X2hhbmRsZVJlc291cmNlTG9hZCgpOwotICAgIH0sCi0gICAgX3Byb2Nlc3NUaW1lc0pTT05EYXRh
OiBmdW5jdGlvbihidWlsZGVyTmFtZSwgZmlsZURhdGEpCi0gICAgewotICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIHByb2JhYmx5IGluY2x1ZGUgdGhlIGJ1aWxkZXJOYW1lIGluIHRoZSBKU09O
Ci0gICAgICAgIC8vIHJhdGhlciB0aGFuIHJlbHlpbmcgb24gb25seSBsb2FkaW5nIG9uZSBKU09O
IGZpbGUgcGVyIHBhZ2UuCi0gICAgICAgIGdfcmVzdWx0c0J5QnVpbGRlcltidWlsZGVyTmFtZV0g
PSBKU09OLnBhcnNlKGZpbGVEYXRhKTsKLSAgICB9LAotICAgIF9wcm9jZXNzUmVzdWx0c0pTT05E
YXRhOiBmdW5jdGlvbihidWlsZGVyTmFtZSwgZmlsZURhdGEpCi0gICAgewotICAgICAgICB2YXIg
YnVpbGRzID0gSlNPTi5wYXJzZShmaWxlRGF0YSk7Ci0KLSAgICAgICAgdmFyIGpzb25fdmVyc2lv
biA9IGJ1aWxkc1sndmVyc2lvbiddOwotICAgICAgICBmb3IgKHZhciBidWlsZGVyTmFtZSBpbiBi
dWlsZHMpIHsKLSAgICAgICAgICAgIGlmIChidWlsZGVyTmFtZSA9PSAndmVyc2lvbicpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIC8vIElmIGEgdGVzdCBzdWl0ZSBz
dG9wcyBiZWluZyBydW4gb24gYSBnaXZlbiBidWlsZGVyLCB3ZSBkb24ndCB3YW50IHRvIHNob3cg
aXQuCi0gICAgICAgICAgICAvLyBBc3N1bWUgYW55IGJ1aWxkZXIgd2l0aG91dCBhIHJ1biBpbiB0
d28gd2Vla3MgZm9yIGEgZ2l2ZW4gdGVzdCBzdWl0ZSBpc24ndAotICAgICAgICAgICAgLy8gcnVu
bmluZyB0aGF0IHN1aXRlIGFueW1vcmUuCi0gICAgICAgICAgICAvLyBGSVhNRTogR3JhYiB3aGlj
aCBib3RzIHJ1biB3aGljaCB0ZXN0cyBkaXJlY3RseSBmcm9tIHRoZSBidWlsZGJvdCBKU09OIGlu
c3RlYWQuCi0gICAgICAgICAgICB2YXIgbGFzdFJ1blNlY29uZHMgPSBidWlsZHNbYnVpbGRlck5h
bWVdLnNlY29uZHNTaW5jZUVwb2NoWzBdOwotICAgICAgICAgICAgaWYgKChEYXRlLm5vdygpIC8g
MTAwMCkgLSBsYXN0UnVuU2Vjb25kcyA+IE9ORV9XRUVLX1NFQ09ORFMpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlmICgoRGF0ZS5ub3coKSAvIDEwMDApIC0gbGFz
dFJ1blNlY29uZHMgPiBPTkVfREFZX1NFQ09ORFMpCi0gICAgICAgICAgICAgICAgdGhpcy5fc3Rh
bGVCdWlsZGVycy5wdXNoKGJ1aWxkZXJOYW1lKTsKLQotICAgICAgICAgICAgaWYgKGpzb25fdmVy
c2lvbiA+PSA0KQotICAgICAgICAgICAgICAgIGJ1aWxkc1tidWlsZGVyTmFtZV1bVEVTVFNfS0VZ
XSA9IGxvYWRlci5Mb2FkZXIuX2ZsYXR0ZW5UcmllKGJ1aWxkc1tidWlsZGVyTmFtZV1bVEVTVFNf
S0VZXSk7Ci0gICAgICAgICAgICBnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlck5hbWVdID0gYnVp
bGRzW2J1aWxkZXJOYW1lXTsKLSAgICAgICAgfQotICAgIH0sCi0gICAgX2hhbmRsZVJlc3VsdHNG
aWxlTG9hZEVycm9yOiBmdW5jdGlvbihidWlsZGVyTmFtZSkKLSAgICB7Ci0gICAgICAgIGNvbnNv
bGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHJlc3VsdHMgZmlsZSBmb3IgJyArIGJ1aWxkZXJOYW1l
ICsgJy4nKTsKLQotICAgICAgICAvLyBGSVhNRTogbG9hZGVyIHNob3VsZG4ndCBkZXBlbmQgb24g
c3RhdGUgZGVmaW5lZCBpbiBkYXNoYm9hcmRfYmFzZS5qcy4KLSAgICAgICAgdGhpcy5fYnVpbGRl
cnNUaGF0RmFpbGVkVG9Mb2FkLnB1c2goYnVpbGRlck5hbWUpOwotCi0gICAgICAgIC8vIFJlbW92
ZSB0aGlzIGJ1aWxkZXIgZnJvbSBidWlsZGVycywgc28gd2UgZG9uJ3QgdHJ5IHRvIHVzZSB0aGUK
LSAgICAgICAgLy8gZGF0YSB0aGF0IGlzbid0IHRoZXJlLgotICAgICAgICBkZWxldGUgY3VycmVu
dEJ1aWxkZXJzKClbYnVpbGRlck5hbWVdOwotCi0gICAgICAgIC8vIFByb2NlZWQgYXMgaWYgdGhl
IHJlc291cmNlIGhhZCBsb2FkZWQuCi0gICAgICAgIHRoaXMuX2hhbmRsZVJlc291cmNlTG9hZCgp
OwotICAgIH0sCi0gICAgX2hhbmRsZVJlc291cmNlTG9hZDogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgaWYgKHRoaXMuX2hhdmVSZXN1bHRzRmlsZXNMb2FkZWQoKSkKLSAgICAgICAgICAgIHRo
aXMuX2xvYWROZXh0KCk7Ci0gICAgfSwKLSAgICBfaGF2ZVJlc3VsdHNGaWxlc0xvYWRlZDogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgZm9yICh2YXIgYnVpbGRlciBpbiBjdXJyZW50QnVpbGRl
cnMoKSkgewotICAgICAgICAgICAgaWYgKCFnX3Jlc3VsdHNCeUJ1aWxkZXJbYnVpbGRlcl0pCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0sCi0gICAgX2xvYWRFeHBlY3RhdGlvbnNGaWxlczogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgaWYgKCFpc0ZsYWtpbmVzc0Rhc2hib2FyZCgpICYmICF0aGlzLl9oaXN0b3J5
LmNyb3NzRGFzaGJvYXJkU3RhdGUudXNlVGVzdERhdGEpIHsKLSAgICAgICAgICAgIHRoaXMuX2xv
YWROZXh0KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIg
ZXhwZWN0YXRpb25zRmlsZXNUb1JlcXVlc3QgPSB7fTsKLSAgICAgICAgdHJhdmVyc2VQbGF0Zm9y
bXNUcmVlKGZ1bmN0aW9uKHBsYXRmb3JtLCBwbGF0Zm9ybU5hbWUpIHsKLSAgICAgICAgICAgIGlm
IChwbGF0Zm9ybS5mYWxsYmFja1BsYXRmb3JtcykKLSAgICAgICAgICAgICAgICBwbGF0Zm9ybS5m
YWxsYmFja1BsYXRmb3Jtcy5mb3JFYWNoKGZ1bmN0aW9uKGZhbGxiYWNrUGxhdGZvcm0pIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmFyIGZhbGxiYWNrUGxhdGZvcm1PYmplY3QgPSBwbGF0Zm9ybU9i
amVjdEZvck5hbWUoZmFsbGJhY2tQbGF0Zm9ybSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChm
YWxsYmFja1BsYXRmb3JtT2JqZWN0LmV4cGVjdGF0aW9uc0RpcmVjdG9yeSAmJiAhKGZhbGxiYWNr
UGxhdGZvcm0gaW4gZXhwZWN0YXRpb25zRmlsZXNUb1JlcXVlc3QpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgZXhwZWN0YXRpb25zRmlsZXNUb1JlcXVlc3RbZmFsbGJhY2tQbGF0Zm9ybV0gPSBF
WFBFQ1RBVElPTlNfVVJMX0JBU0VfUEFUSCArIGZhbGxiYWNrUGxhdGZvcm1PYmplY3QuZXhwZWN0
YXRpb25zRGlyZWN0b3J5ICsgJy9UZXN0RXhwZWN0YXRpb25zJzsKLSAgICAgICAgICAgICAgICB9
KTsKLQotICAgICAgICAgICAgaWYgKHBsYXRmb3JtLmV4cGVjdGF0aW9uc0RpcmVjdG9yeSkKLSAg
ICAgICAgICAgICAgICBleHBlY3RhdGlvbnNGaWxlc1RvUmVxdWVzdFtwbGF0Zm9ybU5hbWVdID0g
RVhQRUNUQVRJT05TX1VSTF9CQVNFX1BBVEggKyBwbGF0Zm9ybS5leHBlY3RhdGlvbnNEaXJlY3Rv
cnkgKyAnL1Rlc3RFeHBlY3RhdGlvbnMnOwotICAgICAgICB9KTsKLQotICAgICAgICBmb3IgKHBs
YXRmb3JtV2l0aEV4cGVjdGF0aW9ucyBpbiBleHBlY3RhdGlvbnNGaWxlc1RvUmVxdWVzdCkKLSAg
ICAgICAgICAgIGxvYWRlci5yZXF1ZXN0KGV4cGVjdGF0aW9uc0ZpbGVzVG9SZXF1ZXN0W3BsYXRm
b3JtV2l0aEV4cGVjdGF0aW9uc10sCi0gICAgICAgICAgICAgICAgICAgIHBhcnRpYWwoZnVuY3Rp
b24obG9hZGVyLCBwbGF0Zm9ybU5hbWUsIHhocikgewotICAgICAgICAgICAgICAgICAgICAgICAg
Z19leHBlY3RhdGlvbnNCeVBsYXRmb3JtW3BsYXRmb3JtTmFtZV0gPSBnZXRQYXJzZWRFeHBlY3Rh
dGlvbnMoeGhyLnJlc3BvbnNlVGV4dCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0
ZSBleHBlY3RhdGlvbnNGaWxlc1RvUmVxdWVzdFtwbGF0Zm9ybU5hbWVdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhleHBlY3RhdGlvbnNGaWxlc1RvUmVxdWVzdCku
bGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlci5fbG9hZE5leHQoKTsK
LSAgICAgICAgICAgICAgICAgICAgfSwgdGhpcywgcGxhdGZvcm1XaXRoRXhwZWN0YXRpb25zKSwK
LSAgICAgICAgICAgICAgICAgICAgcGFydGlhbChmdW5jdGlvbihwbGF0Zm9ybU5hbWUsIHhocikg
ewotICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IGxvYWQg
ZXhwZWN0YXRpb25zIGZpbGUgZm9yICcgKyBwbGF0Zm9ybU5hbWUpOwotICAgICAgICAgICAgICAg
ICAgICB9LCBwbGF0Zm9ybVdpdGhFeHBlY3RhdGlvbnMpKTsKLSAgICB9LAotICAgIF9hZGRFcnJv
cnM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9idWlsZGVyc1RoYXRGYWls
ZWRUb0xvYWQubGVuZ3RoKQotICAgICAgICAgICAgdGhpcy5fZXJyb3JzLmFkZEVycm9yKCdFUlJP
UjogRmFpbGVkIHRvIGdldCBkYXRhIGZyb20gJyArIHRoaXMuX2J1aWxkZXJzVGhhdEZhaWxlZFRv
TG9hZC50b1N0cmluZygpICsnLicpOwotCi0gICAgICAgIGlmICh0aGlzLl9zdGFsZUJ1aWxkZXJz
Lmxlbmd0aCkKLSAgICAgICAgICAgIHRoaXMuX2Vycm9ycy5hZGRFcnJvcignRVJST1I6IERhdGEg
ZnJvbSAnICsgdGhpcy5fc3RhbGVCdWlsZGVycy50b1N0cmluZygpICsgJyBpcyBtb3JlIHRoYW4g
MSBkYXkgc3RhbGUuJyk7Ci0gICAgfQotfQotCi19KSgpOwpJbmRleDogVG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9sb2FkZXJfdW5pdHRlc3RzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvbG9hZGVyX3VuaXR0
ZXN0cy5qcwkocmV2aXNpb24gMjY0NTI3KQorKysgVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0
aWMtZGFzaGJvYXJkcy9sb2FkZXJfdW5pdHRlc3RzLmpzCShub25leGlzdGVudCkKQEAgLTEsMTY5
ICswLDAgQEAKLS8vIENvcHlyaWdodCAoQykgWmFuIERvYmVyc2VrIDx6YW5kb2JlcnNla0BnbWFp
bC5jb20+Ci0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwot
Ly8gICAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0v
LyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
Ly8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLW1vZHVsZSgnbG9hZGVyJyk7Ci0KLXRlc3QoJ2xvYWRpbmcgc3RlcHMnLCAxLCBm
dW5jdGlvbigpIHsKLSAgICByZXNldEdsb2JhbHMoKTsKLSAgICB2YXIgbG9hZGVkU3RlcHMgPSBb
XTsKLSAgICBnX2hpc3RvcnkuX2hhbmRsZUxvY2F0aW9uQ2hhbmdlID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIGRlZXBFcXVhbChsb2FkZWRTdGVwcywgWydzdGVwIDEnLCAnc3RlcCAyJ10pOwotICAg
IH0KLSAgICB2YXIgcmVzb3VyY2VMb2FkZXIgPSBuZXcgbG9hZGVyLkxvYWRlcigpOwotICAgIGZ1
bmN0aW9uIGxvYWRpbmdTdGVwMSgpIHsKLSAgICAgICAgbG9hZGVkU3RlcHMucHVzaCgnc3RlcCAx
Jyk7Ci0gICAgICAgIHJlc291cmNlTG9hZGVyLmxvYWQoKTsKLSAgICB9Ci0gICAgZnVuY3Rpb24g
bG9hZGluZ1N0ZXAyKCkgewotICAgICAgICBsb2FkZWRTdGVwcy5wdXNoKCdzdGVwIDInKTsKLSAg
ICAgICAgcmVzb3VyY2VMb2FkZXIubG9hZCgpOwotICAgIH0KLQotICAgIHJlc291cmNlTG9hZGVy
Ll9sb2FkaW5nU3RlcHMgPSBbbG9hZGluZ1N0ZXAxLCBsb2FkaW5nU3RlcDJdOwotICAgIHJlc291
cmNlTG9hZGVyLmxvYWQoKTsKLX0pOwotCi0vLyBUb3RhbCBudW1iZXIgb2YgYXNzZXJ0aW9ucyBp
cyAxIGZvciB0aGUgZGVlcEVxdWFsIG9mIHRoZSBidWlsZGVyIGxpc3RzCi0vLyBhbmQgdGhlbiAy
IHBlciBidWlsZGVyIChvbmUgZm9yIG9rLCBvbmUgZm9yIGRlZXBFcXVhbCBvZiB0ZXN0cykuCi10
ZXN0KCdyZXN1bHRzIGZpbGVzIGxvYWRpbmcnLCA5LCBmdW5jdGlvbigpIHsKLSAgICByZXNldEds
b2JhbHMoKTsKLSAgICB2YXIgZXhwZWN0ZWRMb2FkZWRCdWlsZGVycyA9ICBbJ0FwcGxlIExpb24g
RGVidWcgV0syIChUZXN0cyknLCAnQXBwbGUgTGlvbiBSZWxlYXNlIFdLMiAoVGVzdHMpJywgJ0dU
SyBMaW51eCA2NC1iaXQgUmVsZWFzZSAoVGVzdHMpJywgJ1dQRSBMaW51eCA2NC1iaXQgUmVsZWFz
ZSAoVGVzdHMpJ107Ci0gICAgdmFyIGxvYWRlZEJ1aWxkZXJzID0gW107Ci0gICAgdmFyIHJlc291
cmNlTG9hZGVyID0gbmV3IGxvYWRlci5Mb2FkZXIoKTsKLSAgICByZXNvdXJjZUxvYWRlci5fbG9h
ZE5leHQgPSBmdW5jdGlvbigpIHsKLSAgICAgICAgZGVlcEVxdWFsKGxvYWRlZEJ1aWxkZXJzLnNv
cnQoKSwgZXhwZWN0ZWRMb2FkZWRCdWlsZGVycyk7Ci0gICAgICAgIGxvYWRlZEJ1aWxkZXJzLmZv
ckVhY2goZnVuY3Rpb24oYnVpbGRlck5hbWUpIHsKLSAgICAgICAgICAgIG9rKCdzZWNvbmRzU2lu
Y2VFcG9jaCcgaW4gZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJOYW1lXSk7Ci0gICAgICAgICAg
ICBkZWVwRXF1YWwoZ19yZXN1bHRzQnlCdWlsZGVyW2J1aWxkZXJOYW1lXS50ZXN0cywge30pOwot
ICAgICAgICB9KTsKLSAgICB9Ci0KLSAgICB2YXIgcmVxdWVzdEZ1bmN0aW9uID0gbG9hZGVyLnJl
cXVlc3Q7Ci0gICAgbG9hZGVyLnJlcXVlc3QgPSBmdW5jdGlvbih1cmwsIHN1Y2Nlc3NDYWxsYmFj
aywgZXJyb3JDYWxsYmFjaykgewotICAgICAgICB2YXIgYnVpbGRlck5hbWUgPSAvYnVpbGRlcj0o
W1x3ICgpLi1dKykmLy5leGVjKHVybClbMV07Ci0gICAgICAgIGxvYWRlZEJ1aWxkZXJzLnB1c2go
YnVpbGRlck5hbWUpOwotICAgICAgICBzdWNjZXNzQ2FsbGJhY2soe3Jlc3BvbnNlVGV4dDogJ3si
dmVyc2lvbiI6IDQsICInICsgYnVpbGRlck5hbWUgKyAnIjogeyJzZWNvbmRzU2luY2VFcG9jaCI6
IFsnICsgRGF0ZS5ub3coKSArICddLCAidGVzdHMiOiB7fX19J30pOwotICAgIH0KLQotICAgIGxv
YWRCdWlsZGVyc0xpc3QoJ0BUb1QgLSB3ZWJraXQub3JnJywgJ2xheW91dC10ZXN0cycpOwotIAot
ICAgIHRyeSB7Ci0gICAgICAgIHJlc291cmNlTG9hZGVyLl9sb2FkUmVzdWx0c0ZpbGVzKCk7Ci0g
ICAgfSBmaW5hbGx5IHsKLSAgICAgICAgbG9hZGVyLnJlcXVlc3QgPSByZXF1ZXN0RnVuY3Rpb247
Ci0gICAgfQotfSk7Ci0KLXRlc3QoJ2V4cGVjdGF0aW9ucyBmaWxlcyBsb2FkaW5nJywgMSwgZnVu
Y3Rpb24oKSB7Ci0gICAgcmVzZXRHbG9iYWxzKCk7Ci0gICAgZ19oaXN0b3J5LnBhcnNlQ3Jvc3NE
YXNoYm9hcmRQYXJhbWV0ZXJzKCk7Ci0gICAgdmFyIGV4cGVjdGVkTG9hZGVkUGxhdGZvcm1zID0g
WyJndGsiLCAiZ3RrLXdrMiIsCi0gICAgICAgICJtYWMiLCAibWFjLWxpb24iLCAibWFjLXdrMiIs
ICJtYWMtd2syIiwgIndpbiIsICJ3azIiLCAid3BlIl07Ci0gICAgdmFyIGxvYWRlZFBsYXRmb3Jt
cyA9IFtdOwotICAgIHZhciByZXNvdXJjZUxvYWRlciA9IG5ldyBsb2FkZXIuTG9hZGVyKCk7Ci0g
ICAgcmVzb3VyY2VMb2FkZXIuX2xvYWROZXh0ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIGRlZXBF
cXVhbChsb2FkZWRQbGF0Zm9ybXMuc29ydCgpLCBleHBlY3RlZExvYWRlZFBsYXRmb3Jtcyk7Ci0g
ICAgfQotCi0gICAgdmFyIHJlcXVlc3RGdW5jdGlvbiA9IGxvYWRlci5yZXF1ZXN0OwotICAgIGxv
YWRlci5yZXF1ZXN0ID0gZnVuY3Rpb24odXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJh
Y2spIHsKLSAgICAgICAgbG9hZGVkUGxhdGZvcm1zLnB1c2goL0xheW91dFRlc3RzXC9wbGF0Zm9y
bVwvKC4rKVwvVGVzdEV4cGVjdGF0aW9ucy8uZXhlYyh1cmwpWzFdKTsKLSAgICAgICAgc3VjY2Vz
c0NhbGxiYWNrKHtyZXNwb25zZVRleHQ6ICcnfSk7Ci0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAg
ICAgcmVzb3VyY2VMb2FkZXIuX2xvYWRFeHBlY3RhdGlvbnNGaWxlcygpOwotICAgIH0gZmluYWxs
eSB7Ci0gICAgICAgIGxvYWRlci5yZXF1ZXN0ID0gcmVxdWVzdEZ1bmN0aW9uOwotICAgIH0KLX0p
OwotCi10ZXN0KCdyZXN1bHRzIGZpbGUgZmFpbGluZyB0byBsb2FkJywgMiwgZnVuY3Rpb24oKSB7
Ci0gICAgcmVzZXRHbG9iYWxzKCk7Ci0gICAgbG9hZEJ1aWxkZXJzTGlzdCgnQFRvVCAtIHdlYmtp
dC5vcmcnLCAnbGF5b3V0LXRlc3RzJyk7Ci0gICAgCi0gICAgdmFyIHJlc291cmNlTG9hZGVyID0g
bmV3IGxvYWRlci5Mb2FkZXIoKTsKLSAgICB2YXIgcmVzb3VyY2VMb2FkQ291bnQgPSAwOwotICAg
IHJlc291cmNlTG9hZGVyLl9oYW5kbGVSZXNvdXJjZUxvYWQgPSBmdW5jdGlvbigpIHsKLSAgICAg
ICAgcmVzb3VyY2VMb2FkQ291bnQrKzsKLSAgICB9Ci0KLSAgICB2YXIgYnVpbGRlcjEgPSAnYnVp
bGRlcjEnOwotICAgIGN1cnJlbnRCdWlsZGVycygpW2J1aWxkZXIxXSA9IHRydWU7Ci0gICAgcmVz
b3VyY2VMb2FkZXIuX2hhbmRsZVJlc3VsdHNGaWxlTG9hZEVycm9yKGJ1aWxkZXIxKTsKLQotICAg
IHZhciBidWlsZGVyMiA9ICdidWlsZGVyMic7Ci0gICAgY3VycmVudEJ1aWxkZXJzKClbYnVpbGRl
cjJdID0gdHJ1ZTsKLSAgICByZXNvdXJjZUxvYWRlci5faGFuZGxlUmVzdWx0c0ZpbGVMb2FkRXJy
b3IoYnVpbGRlcjIpOwotCi0gICAgZGVlcEVxdWFsKHJlc291cmNlTG9hZGVyLl9idWlsZGVyc1Ro
YXRGYWlsZWRUb0xvYWQsIFtidWlsZGVyMSwgYnVpbGRlcjJdKTsKLSAgICBlcXVhbChyZXNvdXJj
ZUxvYWRDb3VudCwgMik7Ci0KLX0pOwotCi10ZXN0KCdEZWZhdWx0IGJ1aWxkZXIgZ2V0cyBzZXQu
JywgMywgZnVuY3Rpb24oKSB7Ci0gICAgcmVzZXRHbG9iYWxzKCk7Ci0gICAgbG9hZEJ1aWxkZXJz
TGlzdCgnQFRvVCAtIHdlYmtpdC5vcmcnLCAnbGF5b3V0LXRlc3RzJyk7Ci0gICAgCi0gICAgdmFy
IGRlZmF1bHRCdWlsZGVyID0gY3VycmVudEJ1aWxkZXJHcm91cCgpLmRlZmF1bHRCdWlsZGVyKCk7
Ci0gICAgb2soZGVmYXVsdEJ1aWxkZXIsICJEZWZhdWx0IGJ1aWxkZXIgc2hvdWxkIGV4aXN0LiIp
OwotICAgCi0gICAgLy8gU2ltdWxhdGUgZXJyb3IgbG9hZGluZyB0aGUgZGVmYXVsdCBidWlsZGVy
IGRhdGEsIHRoZW4gbWFrZSBzdXJlCi0gICAgLy8gYSBuZXcgZGVmYXVsdEJ1aWxkZXIgaXMgc2V0
LCBhbmQgaXNuJ3QgdGhlIG5vdyBpbnZhbGlkIG9uZS4KLSAgICB2YXIgcmVzb3VyY2VMb2FkZXIg
PSBuZXcgbG9hZGVyLkxvYWRlcigpOwotICAgIHJlc291cmNlTG9hZGVyLl9oYW5kbGVSZXN1bHRz
RmlsZUxvYWRFcnJvcihkZWZhdWx0QnVpbGRlcik7Ci0gICAgdmFyIG5ld0RlZmF1bHRCdWlsZGVy
ID0gY3VycmVudEJ1aWxkZXJHcm91cCgpLmRlZmF1bHRCdWlsZGVyKCk7Ci0gICAgb2sobmV3RGVm
YXVsdEJ1aWxkZXIsICJUaGVyZSBzaG91bGQgc3RpbGwgYmUgYSBkZWZhdWx0IGJ1aWxkZXIuIik7
Ci0gICAgbm90RXF1YWwobmV3RGVmYXVsdEJ1aWxkZXIsIGRlZmF1bHRCdWlsZGVyLCAiRGVmYXVs
dCBidWlsZGVyIHNob3VsZCBub3QgYmUgdGhlIG9sZCBkZWZhdWx0IGJ1aWxkZXIiKTsKLX0pOwot
Ci10ZXN0KCdhZGRCdWlsZGVyTG9hZEVycm9ycycsIDEsIGZ1bmN0aW9uKCkgewotICAgIHZhciBy
ZXNvdXJjZUxvYWRlciA9IG5ldyBsb2FkZXIuTG9hZGVyKCk7Ci0gICAgcmVzb3VyY2VMb2FkZXIu
X2J1aWxkZXJzVGhhdEZhaWxlZFRvTG9hZCA9IFsnYnVpbGRlcjEnLCAnYnVpbGRlcjInXTsKLSAg
ICByZXNvdXJjZUxvYWRlci5fc3RhbGVCdWlsZGVycyA9IFsnc3RhbGVCdWlsZGVyMSddOwotICAg
IHJlc291cmNlTG9hZGVyLl9hZGRFcnJvcnMoKTsKLSAgICBlcXVhbChyZXNvdXJjZUxvYWRlci5f
ZXJyb3JzLl9tZXNzYWdlcywgJ0VSUk9SOiBGYWlsZWQgdG8gZ2V0IGRhdGEgZnJvbSBidWlsZGVy
MSxidWlsZGVyMi48YnI+RVJST1I6IERhdGEgZnJvbSBzdGFsZUJ1aWxkZXIxIGlzIG1vcmUgdGhh
biAxIGRheSBzdGFsZS48YnI+Jyk7Ci19KTsKLQotCi10ZXN0KCdmbGF0dGVuVHJpZScsIDEsIGZ1
bmN0aW9uKCkgewotICAgIHJlc2V0R2xvYmFscygpOwotICAgIHZhciB0ZXN0cyA9IHsKLSAgICAg
ICAgJ2Jhci5odG1sJzogeydyZXN1bHRzJzogW1sxMDAsICdGJ11dLCAndGltZXMnOiBbWzEwMCwg
MF1dfSwKLSAgICAgICAgJ2Zvbyc6IHsKLSAgICAgICAgICAgICdiYXInOiB7Ci0gICAgICAgICAg
ICAgICAgJ2Jhei5odG1sJzogeydyZXN1bHRzJzogW1sxMDAsICdGJ11dLCAndGltZXMnOiBbWzEw
MCwgMF1dfSwKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0gICAgdmFyIGV4cGVj
dGVkRmxhdHRlbmVkVGVzdHMgPSB7Ci0gICAgICAgICdiYXIuaHRtbCc6IHsncmVzdWx0cyc6IFtb
MTAwLCAnRiddXSwgJ3RpbWVzJzogW1sxMDAsIDBdXX0sCi0gICAgICAgICdmb28vYmFyL2Jhei5o
dG1sJzogeydyZXN1bHRzJzogW1sxMDAsICdGJ11dLCAndGltZXMnOiBbWzEwMCwgMF1dfSwKLSAg
ICB9OwotICAgIGVxdWFsKEpTT04uc3RyaW5naWZ5KGxvYWRlci5Mb2FkZXIuX2ZsYXR0ZW5Ucmll
KHRlc3RzKSksIEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkRmxhdHRlbmVkVGVzdHMpKQotfSk7Cklu
ZGV4OiBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3J1bi1lbWJlZGRl
ZC11bml0dGVzdHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0
YXRpYy1kYXNoYm9hcmRzL3J1bi1lbWJlZGRlZC11bml0dGVzdHMuaHRtbAkocmV2aXNpb24gMjY0
NTI3KQorKysgVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9ydW4tZW1i
ZWRkZWQtdW5pdHRlc3RzLmh0bWwJKG5vbmV4aXN0ZW50KQpAQCAtMSw3MiArMCwwIEBACi08IURP
Q1RZUEUgaHRtbD4KLTwhLS0KLUNvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotYXJlIG1ldDoKLTEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0yLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQot
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi1USEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi1QVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLUJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLUNPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi1TVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLUlOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi1DT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotLS0+Ci08aHRtbD4KLTxoZWFkPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSIuLi8uLi8uLi9Tb3VyY2UvVGhpcmRQYXJ0eS9xdW5pdC9xdW5pdC9xdW5pdC5jc3Mi
PgotPHNjcmlwdCBzcmM9Imh0dHBzOi8vd2Via2l0Lm9yZy9hamF4L2xpYnMvanF1ZXJ5L2pxdWVy
eS0xLjYuMi5taW4uanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Imh0dHBzOi8vd2Via2l0Lm9y
Zy9hamF4L2xpYnMvanF1ZXJ5dWkvMS44LjE1L3VpL2pxdWVyeS11aS5taW4uanMiPjwvc2NyaXB0
PgotPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL1NvdXJjZS9UaGlyZFBhcnR5L3F1bml0L3F1bml0L3F1
bml0LmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGgxIGlkPSJxdW5pdC1oZWFkZXIi
PlRlc3QgUmVzdWx0cyBTZXJ2ZXIgSmF2YVNjcmlwdCBVbml0IFRlc3RzPC9oMT4KLTxoMiBpZD0i
cXVuaXQtYmFubmVyIj48L2gyPgotPGRpdiBpZD0icXVuaXQtdGVzdHJ1bm5lci10b29sYmFyIj48
L2Rpdj4KLTxoMiBpZD0icXVuaXQtdXNlckFnZW50Ij48L2gyPgotPG9sIGlkPSJxdW5pdC10ZXN0
cyI+PC9vbD4KLQotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJmbGFraW5lc3NfZGFzaGJv
YXJkLmNzcyI+PC9saW5rPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJmbGFraW5lc3Nf
ZGFzaGJvYXJkX3Rlc3RzLmNzcyI+PC9saW5rPgotPHNjcmlwdCBzcmM9ImJ1aWxkZXJzLmpzIj48
L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJidWlsZGVyc191bml0dGVzdHMuanMiPjwvc2NyaXB0Pgot
Ci08c2NyaXB0PgotLy8gTWltaWMgYmVpbmcgZW1iZWRkZWQuIEFsbCBvdXIgZW1iZWRkZWQgY2hl
Y2tzIGNvbXBhcmUgd2luZG93IGFuZCBwYXJlbnQuCi13aW5kb3cucGFyZW50ID0gbnVsbDsKLTwv
c2NyaXB0PgotCi08c2NyaXB0IHNyYz0ic3RyaW5nLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3Jj
PSJoaXN0b3J5LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJoaXN0b3J5X3VuaXR0ZXN0cy5q
cyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iZGFzaGJvYXJkX2Jhc2UuanMiPjwvc2NyaXB0Pgot
PHNjcmlwdCBzcmM9InVpLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJsb2FkZXIuanMiPjwv
c2NyaXB0PgotPHNjcmlwdCBzcmM9ImxvYWRlcl91bml0dGVzdHMuanMiPjwvc2NyaXB0PgotPHNj
cmlwdD4KLSAgLy8gTW9jayBvdXQgbG9hZGVyLnJlcXVlc3Qgc28gdGhhdCB3ZSBkb24ndCBhY3R1
YWxseSBtYWtlIHhocnMgZm9yIHRlc3RzLgotICBsb2FkZXIucmVxdWVzdCA9IGZ1bmN0aW9uKHVy
bCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSB7fTsKLTwvc2NyaXB0PgotPHNjcmlw
dCBzcmM9ImZsYWtpbmVzc19kYXNoYm9hcmQuanMiPjwvc2NyaXB0PgotCi08c2NyaXB0Pgotd2lu
ZG93LmxvY2F0aW9uLmhyZWYgPSAnI3VzZVRlc3REYXRhPXRydWUnOwotPC9zY3JpcHQ+Ci0KLTxz
Y3JpcHQgc3JjPSJmbGFraW5lc3NfZGFzaGJvYXJkX2VtYmVkZGVkX3VuaXR0ZXN0cy5qcyI+PC9z
Y3JpcHQ+Ci08IS0tIEZJWE1FOiBTcGxpdCB0aGlzIHVwIGludG8gbXVsdGlwbGUgdW5pdHRlc3Qu
anMsIGUuZy4gb25lIGZvciBidWlsZGVycy5qcyBhbmQgb25lIGZvciBkYXNoYm9hcmRfYmFzZS5q
cy4gLS0+Ci08c2NyaXB0IHNyYz0iZmxha2luZXNzX2Rhc2hib2FyZF91bml0dGVzdHMuanMiPjwv
c2NyaXB0PgotCi08L2JvZHk+Ci08L2h0bWw+CkluZGV4OiBUb29scy9UZXN0UmVzdWx0U2VydmVy
L3N0YXRpYy1kYXNoYm9hcmRzL3J1bi11bml0dGVzdHMuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3J1bi11bml0dGVzdHMuaHRtbAko
cmV2aXNpb24gMjY0NTI3KQorKysgVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJv
YXJkcy9ydW4tdW5pdHRlc3RzLmh0bWwJKG5vbmV4aXN0ZW50KQpAQCAtMSw2NCArMCwwIEBACi08
IURPQ1RZUEUgaHRtbD4KLTwhLS0KLUNvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotYXJlIG1ldDoKLTEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0yLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJwotQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi1USEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi1QVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLUJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLUNPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi1TVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLUlOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi1DT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotLS0+Ci08aHRtbD4KLTxoZWFkPgotPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSIuLi8uLi8uLi9Tb3VyY2UvVGhpcmRQYXJ0eS9xdW5pdC9xdW5pdC9xdW5pdC5j
c3MiPgotPHNjcmlwdCBzcmM9Imh0dHBzOi8vd2Via2l0Lm9yZy9hamF4L2xpYnMvanF1ZXJ5L2px
dWVyeS0xLjYuMi5taW4uanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Imh0dHBzOi8vd2Via2l0
Lm9yZy9hamF4L2xpYnMvanF1ZXJ5dWkvanF1ZXJ5LXVpLTEuOC4xNS5taW4uanMiPjwvc2NyaXB0
PgotPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL1NvdXJjZS9UaGlyZFBhcnR5L3F1bml0L3F1bml0L3F1
bml0LmpzIj48L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGgxIGlkPSJxdW5pdC1oZWFkZXIi
PlRlc3QgUmVzdWx0cyBTZXJ2ZXIgSmF2YVNjcmlwdCBVbml0IFRlc3RzPC9oMT4KLTxoMiBpZD0i
cXVuaXQtYmFubmVyIj48L2gyPgotPGRpdiBpZD0icXVuaXQtdGVzdHJ1bm5lci10b29sYmFyIj48
L2Rpdj4KLTxoMiBpZD0icXVuaXQtdXNlckFnZW50Ij48L2gyPgotPG9sIGlkPSJxdW5pdC10ZXN0
cyI+PC9vbD4KLQotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJmbGFraW5lc3NfZGFzaGJv
YXJkLmNzcyI+PC9saW5rPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJmbGFraW5lc3Nf
ZGFzaGJvYXJkX3Rlc3RzLmNzcyI+PC9saW5rPgotPHNjcmlwdCBzcmM9ImJ1aWxkZXJzLmpzIj48
L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJidWlsZGVyc191bml0dGVzdHMuanMiPjwvc2NyaXB0Pgot
PHNjcmlwdCBzcmM9InN0cmluZy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iaGlzdG9yeS5q
cyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iaGlzdG9yeV91bml0dGVzdHMuanMiPjwvc2NyaXB0
PgotPHNjcmlwdCBzcmM9ImRhc2hib2FyZF9iYXNlLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3Jj
PSJ1aS5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ibG9hZGVyLmpzIj48L3NjcmlwdD4KLTxz
Y3JpcHQgc3JjPSJsb2FkZXJfdW5pdHRlc3RzLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQ+Ci0gIC8v
IE1vY2sgb3V0IGxvYWRlci5yZXF1ZXN0IHNvIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkgbWFrZSB4
aHJzIGZvciB0ZXN0cy4KLSAgbG9hZGVyLnJlcXVlc3QgPSBmdW5jdGlvbih1cmwsIHN1Y2Nlc3ND
YWxsYmFjaywgZXJyb3JDYWxsYmFjaykge307Ci08L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJmbGFr
aW5lc3NfZGFzaGJvYXJkLmpzIj48L3NjcmlwdD4KLQotPHNjcmlwdD4KLXdpbmRvdy5sb2NhdGlv
bi5ocmVmID0gJyN1c2VUZXN0RGF0YT10cnVlJzsKLTwvc2NyaXB0PgotCi08IS0tIEZJWE1FOiBT
cGxpdCB0aGlzIHVwIGludG8gbXVsdGlwbGUgdW5pdHRlc3QuanMsIGUuZy4gb25lIGZvciBidWls
ZGVycy5qcyBhbmQgb25lIGZvciBkYXNoYm9hcmRfYmFzZS5qcy4gLS0+Ci08c2NyaXB0IHNyYz0i
Zmxha2luZXNzX2Rhc2hib2FyZF91bml0dGVzdHMuanMiPjwvc2NyaXB0PgotPC9ib2R5PgotPC9o
dG1sPgpJbmRleDogVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy9zdHJp
bmcuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJv
YXJkcy9zdHJpbmcuanMJKHJldmlzaW9uIDI2NDUyNykKKysrIFRvb2xzL1Rlc3RSZXN1bHRTZXJ2
ZXIvc3RhdGljLWRhc2hib2FyZHMvc3RyaW5nLmpzCShub25leGlzdGVudCkKQEAgLTEsNjkgKzAs
MCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBtZXQ6Ci0vLwotLy8g
ICAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
Ly8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
Ly8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8g
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0KLS8vIEBmaWxlb3ZlcnZpZXcgR2VuZXJpYyBzdHJpbmcgdXRpbGl0eSBmdW5jdGlvbnMu
Ci12YXIgc3RyaW5nID0gc3RyaW5nIHx8IHt9OwotCi0oZnVuY3Rpb24oKSB7Ci0KLXN0cmluZy5j
b250YWlucyA9IGZ1bmN0aW9uKGEsIGIpCi17Ci0gICAgcmV0dXJuIGEuaW5kZXhPZihiKSAhPSAt
MTsKLX0KLQotc3RyaW5nLmNhc2VJbnNlbnNpdGl2ZUNvbnRhaW5zID0gZnVuY3Rpb24oYSwgYikK
LXsKLSAgICByZXR1cm4gYS5tYXRjaChuZXcgUmVnRXhwKGIsICdpJykpOwotfQotCi1zdHJpbmcu
c3RhcnRzV2l0aCA9IGZ1bmN0aW9uKGEsIGIpCi17Ci0gICAgcmV0dXJuIGEuaW5kZXhPZihiKSA9
PSAwOwotfQotCi1zdHJpbmcuZW5kc1dpdGggPSBmdW5jdGlvbihhLCBiKQotewotICAgIHJldHVy
biBhLmxhc3RJbmRleE9mKGIpID09IGEubGVuZ3RoIC0gYi5sZW5ndGg7Ci19Ci0KLXN0cmluZy5p
c1ZhbGlkTmFtZSA9IGZ1bmN0aW9uKHN0cikKLXsKLSAgICByZXR1cm4gc3RyLm1hdGNoKC9bQS1a
YS16MC05XC1cXyxdLyk7Ci19Ci0KLXN0cmluZy50cmltU3RyaW5nID0gZnVuY3Rpb24oc3RyKQot
ewotICAgIHJldHVybiBzdHIucmVwbGFjZSgvXlxzK3xccyskL2csICcnKTsKLX0KLQotc3RyaW5n
LmNvbGxhcHNlV2hpdGVzcGFjZSA9IGZ1bmN0aW9uKHN0cikKLXsKLSAgICByZXR1cm4gc3RyLnJl
cGxhY2UoL1xzKy9nLCAnICcpOwotfQotCi19KSgpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKSW5kZXg6IFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdGltZWxp
bmVfZXhwbG9yZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0
YXRpYy1kYXNoYm9hcmRzL3RpbWVsaW5lX2V4cGxvcmVyLmh0bWwJKHJldmlzaW9uIDI2NDUyNykK
KysrIFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdGltZWxpbmVfZXhw
bG9yZXIuaHRtbAkobm9uZXhpc3RlbnQpCkBAIC0xLDExNiArMCwwIEBACi08IS0tIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLW1ldDoKLQotICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLW5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLWNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLWluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLWRpc3RyaWJ1dGlvbi4KLSAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLWNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi10aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0iQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi1BIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi1TUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi1MSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLURBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci1PRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotLS0+Ci08IURPQ1RZUEUgSFRNTD4KLTxodG1sPgotCi08aGVhZD4KLTx0
aXRsZT5UZXN0IFRpbWVsaW5lIEV4cGxvcmVyPC90aXRsZT4KLTxzdHlsZT4KLWJvZHkgewotICAg
IGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOwotICAgIGZvbnQtc2l6
ZTogMTJweDsKLX0KLQotI3RpbWVsaW5lLWNvbnRhaW5lciB7Ci0gICAgcG9zaXRpb246IHJlbGF0
aXZlOwotfQotCi0jaW5zcGVjdG9yLWNvbnRhaW5lciB7Ci0gICAgd2lkdGg6IDMwMHB4OwotICAg
IGZsb2F0OiByaWdodDsKLSAgICBib3JkZXItbGVmdDogMXB4IGRhc2hlZDsKLSAgICBwYWRkaW5n
LWxlZnQ6IDVweDsKLSAgICBtYXJnaW4tbGVmdDogNXB4OwotfQotCi0jaW5zcGVjdG9yLWNvbnRh
aW5lciBjYXB0aW9uIHsKLSAgICBiYWNrZ3JvdW5kOiAjZWVlOwotICAgIGZvbnQtd2VpZ2h0OiBi
b2xkOwotICAgIHBhZGRpbmc6IDJweDsKLSAgICBmb250LXNpemU6IDE0cHg7Ci0gICAgdGV4dC1h
bGlnbjogbGVmdDsKLX0KLQotI2luc3BlY3Rvci10YWJsZSB7Ci0gICAgd2lkdGg6IDEwMCU7Ci19
Ci0KLSNpbnNwZWN0b3ItdGFibGUgdGQgewotICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Ci19Ci0K
LSNpbnNwZWN0b3ItdGFibGUgLmxhYmVsIHsKLSAgICBjb2xvcjogIzY2NjsKLSAgICB0ZXh0LWFs
aWduOiByaWdodDsKLSAgICB3aWR0aDogMTBlbTsKLX0KLQotI2luc3BlY3Rvci10YWJsZSAuZGVs
dGEucG9zaXRpdmUgewotICAgIGNvbG9yOiAjMDkwOwotfQotCi0jaW5zcGVjdG9yLXRhYmxlIC5k
ZWx0YS5uZWdhdGl2ZSB7Ci0gICAgY29sb3I6ICM5MDA7Ci19Ci0KLSNpbnNwZWN0b3ItY29udGFp
bmVyIC5idXR0b25zIHsKLSAgICBwYWRkaW5nOiAxZW0gMDsKLSAgICB0ZXh0LWFsaWduOiBjZW50
ZXI7Ci19Ci0KLSNpbnNwZWN0b3ItY29udGFpbmVyICNidWlsZC1idXR0b25zIHsKLSAgICBib3Jk
ZXItdG9wOiAxcHggZGFzaGVkOwotfQotCi0jaW5kaWNhdG9yIHsKLSAgICB0b3A6IDA7Ci0gICAg
d2lkdGg6IDFweDsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgYmFja2dyb3VuZDogcmVk
OwotfQotPC9zdHlsZT4KLTxzY3JpcHQgc3JjPSJkeWdyYXBoLWNvbWJpbmVkLmpzIj48L3Njcmlw
dD4KLTxzY3JpcHQgc3JjPSJidWlsZGVycy5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0ibG9h
ZGVyLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJzdHJpbmcuanMiPjwvc2NyaXB0PgotPHNj
cmlwdCBzcmM9Imhpc3RvcnkuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9ImRhc2hib2FyZF9i
YXNlLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJ0aW1lbGluZV9leHBsb3Jlci5qcyI+PC9z
Y3JpcHQ+Ci08c2NyaXB0IHNyYz0idWkuanMiPjwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci0g
ICAgPGRpdiBpZD0idGVzdC10eXBlLXN3aXRjaGVyIj48L2Rpdj4KLQotICAgIDxkaXYgaWQ9Imlu
c3BlY3Rvci1jb250YWluZXIiIHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW4iPgotICAgICAgICA8
cD5DbGljayBvbiBhIHBvaW50IG9uIHRoZSBncmFwaCB0byBzZWUgZGV0YWlscyBhYm91dCB0aGF0
IGJ1aWxkLjwvcD4KLSAgICAgICAgPHA+Q2xpY2sgYW5kIGRyYWcgb24gdGhlIGdyYXBoIHRvIHpv
b20gaW4gdG8gdGhhdCBwZXJpb2QuPC9wPgotICAgIDwvZGl2PgotICAgIDxkaXYgaWQ9InRpbWVs
aW5lLWNvbnRhaW5lciI+TG9hZGluZy4uLjwvZGl2PgotPC9ib2R5PgotPC9odG1sPgoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90
aW1lbGluZV9leHBsb3Jlci5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQoj
IyAtMSArMCwwICMjCi1MRgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBU
b29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RpbWVsaW5lX2V4cGxvcmVy
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2Fy
ZHMvdGltZWxpbmVfZXhwbG9yZXIuanMJKHJldmlzaW9uIDI2NDUyNykKKysrIFRvb2xzL1Rlc3RS
ZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdGltZWxpbmVfZXhwbG9yZXIuanMJKG5vbmV4
aXN0ZW50KQpAQCAtMSw0ODAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0vLyBtZXQ6Ci0vLwotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8v
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi12YXIgRkFJTElOR19URVNUU19EQVRBU0VUX05BTUUgPSAnRmFpbGluZyB0
ZXN0cyc7Ci0KLXZhciBnX2R5Z3JhcGg7Ci12YXIgZ19idWlsZEluZGljZXNCeVRpbWVzdGFtcCA9
IHt9OwotdmFyIGdfY3VycmVudEJ1aWxkSW5kZXggPSAtMTsKLXZhciBnX2N1cnJlbnRCdWlsZGVy
VGVzdFJlc3VsdHM7Ci0KLXZhciBkZWZhdWx0RGFzaGJvYXJkU3BlY2lmaWNTdGF0ZVZhbHVlcyA9
IHsKLSAgICBidWlsZGVyOiBudWxsLAotICAgIGJ1aWxkVGltZXN0YW1wOiAtMSwKLSAgICBpZ25v
cmVGbGFreVRlc3RzOiB0cnVlCi19OwotCi12YXIgREJfU1BFQ0lGSUNfSU5WQUxJREFUSU5HX1BB
UkFNRVRFUlMgPSB7Ci0gICAgJ3Rlc3RUeXBlJzogJ2J1aWxkZXInLAotICAgICdncm91cCc6ICdi
dWlsZGVyJwotfTsKLQotZnVuY3Rpb24gZ2VuZXJhdGVQYWdlKGhpc3RvcnlJbnN0YW5jZSkKLXsK
LSAgICBnX2J1aWxkSW5kaWNlc0J5VGltZXN0YW1wID0ge307Ci0gICAgdmFyIHJlc3VsdHMgPSBn
X3Jlc3VsdHNCeUJ1aWxkZXJbaGlzdG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUu
YnVpbGRlciB8fCBjdXJyZW50QnVpbGRlckdyb3VwKCkuZGVmYXVsdEJ1aWxkZXIoKV07Ci0KLSAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHNbRklYQUJMRV9DT1VOVFNfS0VZXS5sZW5ndGg7
IGkrKykgewotICAgICAgICB2YXIgYnVpbGREYXRlID0gbmV3IERhdGUocmVzdWx0c1tUSU1FU1RB
TVBTX0tFWV1baV0gKiAxMDAwKTsKLSAgICAgICAgZ19idWlsZEluZGljZXNCeVRpbWVzdGFtcFti
dWlsZERhdGUuZ2V0VGltZSgpXSA9IGk7Ci0gICAgfQotCi0gICAgaWYgKGhpc3RvcnlJbnN0YW5j
ZS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLmJ1aWxkVGltZXN0YW1wICE9IC0xICYmIGhpc3RvcnlJ
bnN0YW5jZS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLmJ1aWxkVGltZXN0YW1wIGluIGdfYnVpbGRJ
bmRpY2VzQnlUaW1lc3RhbXApIHsKLSAgICAgICAgdmFyIG5ld0J1aWxkSW5kZXggPSBnX2J1aWxk
SW5kaWNlc0J5VGltZXN0YW1wW2hpc3RvcnlJbnN0YW5jZS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRl
LmJ1aWxkVGltZXN0YW1wXTsKLQotICAgICAgICBpZiAobmV3QnVpbGRJbmRleCA9PSBnX2N1cnJl
bnRCdWlsZEluZGV4KSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGhhcHBlbnMgd2hlbiBzZWxlY3RC
dWlsZCBpcyBjYWxsZWQsIHdoaWNoIHVwZGF0ZXMgdGhlIFVJCi0gICAgICAgICAgICAvLyBpbW1l
ZGlhdGVseSwgaW4gYWRkaXRpb24gdG8gdXBkYXRpbmcgdGhlIGxvY2F0aW9uIGhhc2ggKHdlIGRv
bid0Ci0gICAgICAgICAgICAvLyBqdXN0IHJlbHkgb24gdGhlIGhhc2ggY2hhbmdlIHNpbmNlIHdl
IGRvbid0IHdhbnQgdG8gcmVnZW5lcmF0ZSB0aGUKLSAgICAgICAgICAgIC8vIHdob2xlIHBhZ2Ug
anVzdCBiZWNhdXNlIHRoZSB1c2VyIGNsaWNrZWQgb24gc29tZXRoaW5nKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9IGVsc2UgaWYgKG5ld0J1aWxkSW5kZXgpCi0gICAgICAgICAgICBn
X2N1cnJlbnRCdWlsZEluZGV4ID0gbmV3QnVpbGRJbmRleDsKLSAgICB9Ci0KLSAgICBpbml0Q3Vy
cmVudEJ1aWxkZXJUZXN0UmVzdWx0cygpOwotCi0gICAgJCgndGVzdC10eXBlLXN3aXRjaGVyJyku
aW5uZXJIVE1MID0gdWkuaHRtbC50ZXN0VHlwZVN3aXRjaGVyKCBmYWxzZSwKLSAgICAgICAgdWku
aHRtbC5jaGVja2JveCgnaWdub3JlRmxha3lUZXN0cycsICdJZ25vcmUgZmxha3kgdGVzdHMnLCBo
aXN0b3J5SW5zdGFuY2UuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5pZ25vcmVGbGFreVRlc3RzLCAn
Z19jdXJyZW50QnVpbGRJbmRleCA9IC0xJykKLSAgICApOwotCi0gICAgdXBkYXRlVGltZWxpbmVG
b3JCdWlsZGVyKCk7Ci19Ci0KLWZ1bmN0aW9uIGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcihoaXN0
b3J5SW5zdGFuY2UsIGtleSwgdmFsdWUpCi17Ci0gICAgc3dpdGNoKGtleSkgewotICAgIGNhc2Ug
J2J1aWxkZXInOgotICAgICAgICBoaXN0b3J5LnZhbGlkYXRlUGFyYW1ldGVyKGhpc3RvcnlJbnN0
YW5jZS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLCBrZXksIHZhbHVlLAotICAgICAgICAgICAgZnVu
Y3Rpb24oKSB7IHJldHVybiB2YWx1ZSBpbiBjdXJyZW50QnVpbGRlcnMoKTsgfSk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGNhc2UgJ2J1aWxkVGltZXN0YW1wJzoKLSAgICAgICAgaGlzdG9y
eUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUuYnVpbGRUaW1lc3RhbXAgPSBwYXJzZUlu
dCh2YWx1ZSwgMTApOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlICdpZ25vcmVGbGFr
eVRlc3RzJzoKLSAgICAgICAgaGlzdG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUu
aWdub3JlRmxha3lUZXN0cyA9IHZhbHVlID09ICd0cnVlJzsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotdmFyIHRp
bWVsaW5lQ29uZmlnID0gewotICAgIGRlZmF1bHRTdGF0ZVZhbHVlczogZGVmYXVsdERhc2hib2Fy
ZFNwZWNpZmljU3RhdGVWYWx1ZXMsCi0gICAgZ2VuZXJhdGVQYWdlOiBnZW5lcmF0ZVBhZ2UsCi0g
ICAgaGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyOiBoYW5kbGVWYWxpZEhhc2hQYXJhbWV0ZXIsCi0g
ICAgaW52YWxpZGF0aW5nSGFzaFBhcmFtZXRlcnM6IERCX1NQRUNJRklDX0lOVkFMSURBVElOR19Q
QVJBTUVURVJTCi19OwotCi0vLyBGSVhNRShqcGFyZW50KTogRXZlbnR1YWxseSByZW1vdmUgYWxs
IHVzYWdlIG9mIGdsb2JhbCBoaXN0b3J5IG9iamVjdC4KLXZhciBnX2hpc3RvcnkgPSBuZXcgaGlz
dG9yeS5IaXN0b3J5KHRpbWVsaW5lQ29uZmlnKTsKLWdfaGlzdG9yeS5wYXJzZUNyb3NzRGFzaGJv
YXJkUGFyYW1ldGVycygpOwotCi1mdW5jdGlvbiBpbml0Q3VycmVudEJ1aWxkZXJUZXN0UmVzdWx0
cygpCi17Ci0gICAgdmFyIHN0YXJ0VGltZSA9IERhdGUubm93KCk7Ci0gICAgZ19jdXJyZW50QnVp
bGRlclRlc3RSZXN1bHRzID0gX2RlY29tcHJlc3NSZXN1bHRzKGdfcmVzdWx0c0J5QnVpbGRlcltn
X2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5idWlsZGVyIHx8IGN1cnJlbnRCdWlsZGVy
R3JvdXAoKS5kZWZhdWx0QnVpbGRlcigpXSk7Ci0gICAgY29uc29sZS5sb2coICdUaW1lIHRvIGdl
dCB0ZXN0IHJlc3VsdHMgYnkgYnVpbGQ6ICcgKyAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSkpOwot
fQotCi1mdW5jdGlvbiB1cGRhdGVUaW1lbGluZUZvckJ1aWxkZXIoKQotewotICAgIHZhciBidWls
ZGVyID0gZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUuYnVpbGRlciB8fCBjdXJyZW50
QnVpbGRlckdyb3VwKCkuZGVmYXVsdEJ1aWxkZXIoKTsKLSAgICB2YXIgcmVzdWx0cyA9IGdfcmVz
dWx0c0J5QnVpbGRlcltidWlsZGVyXTsKLSAgICB2YXIgZ3JhcGhEYXRhID0gW107Ci0KLSAgICB2
YXIgYW5ub3RhdGlvbnMgPSBbXTsKLQotICAgIC8vIER5Z3JhcGggcHJlZmVycyB0byBiZSBoYW5k
ZWQgZGF0YSBpbiBjaHJvbm9sb2dpY2FsIG9yZGVyLgotICAgIGZvciAodmFyIGkgPSByZXN1bHRz
W0ZJWEFCTEVfQ09VTlRTX0tFWV0ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAg
dmFyIGJ1aWxkRGF0ZSA9IG5ldyBEYXRlKHJlc3VsdHNbVElNRVNUQU1QU19LRVldW2ldICogMTAw
MCk7Ci0gICAgICAgIC8vIEZJWE1FOiBGaW5kIGEgYmV0dGVyIHdheSB0byBleGNsdWRlIG91dGxp
ZXJzLiBUaGlzIGlzIGp1c3Qgc28gd2UKLSAgICAgICAgLy8gZXhjbHVkZSBydW5zIHdoZXJlIGV2
ZXJ5IHRlc3QgZmFpbGVkLgotICAgICAgICB2YXIgZmFpbHVyZUNvdW50ID0gTWF0aC5taW4ocmVz
dWx0c1tGSVhBQkxFX0NPVU5UX0tFWV1baV0sIDEwMDAwKTsKLQotICAgICAgICBpZiAoZ19oaXN0
b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUuaWdub3JlRmxha3lUZXN0cykKLSAgICAgICAgICAg
IGZhaWx1cmVDb3VudCAtPSBnX2N1cnJlbnRCdWlsZGVyVGVzdFJlc3VsdHMuZmxha3lEZWx0YXNC
eUJ1aWxkW2ldLnRvdGFsIHx8IDA7Ci0KLSAgICAgICAgZ3JhcGhEYXRhLnB1c2goW2J1aWxkRGF0
ZSwgZmFpbHVyZUNvdW50XSk7Ci0gICAgfQotCi0gICAgdmFyIHdpbmRvd1dpZHRoID0gZG9jdW1l
bnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoOwotICAgIHZhciB3aW5kb3dIZWlnaHQgPSBk
b2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OwotICAgIHZhciBzd2l0Y2hlck5v
ZGUgPSAkKCd0ZXN0LXR5cGUtc3dpdGNoZXInKTsKLSAgICB2YXIgaW5zcGVjdG9yTm9kZSA9ICQo
J2luc3BlY3Rvci1jb250YWluZXInKTsKLSAgICB2YXIgZ3JhcGhXaWR0aCA9IHdpbmRvd1dpZHRo
IC0gMjAgLSBpbnNwZWN0b3JOb2RlLm9mZnNldFdpZHRoOwotICAgIHZhciBncmFwaEhlaWdodCA9
IHdpbmRvd0hlaWdodCAtIHN3aXRjaGVyTm9kZS5vZmZzZXRUb3AgLSBzd2l0Y2hlck5vZGUub2Zm
c2V0SGVpZ2h0IC0gMjA7Ci0KLSAgICB2YXIgY29udGFpbmVyTm9kZSA9ICQoJ3RpbWVsaW5lLWNv
bnRhaW5lcicpOwotICAgIGNvbnRhaW5lck5vZGUuc3R5bGUuaGVpZ2h0ID0gZ3JhcGhIZWlnaHQg
KyAncHgnOwotICAgIGNvbnRhaW5lck5vZGUuc3R5bGUud2lkdGggPSBncmFwaFdpZHRoICsgJ3B4
JzsKLSAgICBpbnNwZWN0b3JOb2RlLnN0eWxlLmhlaWdodCA9IGdyYXBoSGVpZ2h0ICsgJ3B4JzsK
LQotICAgIGdfZHlncmFwaCA9IG5ldyBEeWdyYXBoKAotICAgICAgICBjb250YWluZXJOb2RlLAot
ICAgICAgICBncmFwaERhdGEsIHsKLSAgICAgICAgICAgIGxhYmVsczogWydEYXRlJywgRkFJTElO
R19URVNUU19EQVRBU0VUX05BTUVdLAotICAgICAgICAgICAgd2lkdGg6IGdyYXBoV2lkdGgsCi0g
ICAgICAgICAgICBoZWlnaHQ6IGdyYXBoSGVpZ2h0LAotICAgICAgICAgICAgY2xpY2tDYWxsYmFj
azogZnVuY3Rpb24oZXZlbnQsIGRhdGUpIHsKLSAgICAgICAgICAgICAgICBzZWxlY3RCdWlsZChy
ZXN1bHRzLCBidWlsZGVyLCBnX2R5Z3JhcGgsIGdfYnVpbGRJbmRpY2VzQnlUaW1lc3RhbXBbZGF0
ZV0pOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIGRyYXdDYWxsYmFjazogZnVuY3Rpb24o
ZHlncmFwaCwgaXNJbml0aWFsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzSW5pdGlhbCkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIHVwZGF0ZUJ1aWxkSW5k
aWNhdG9yKHJlc3VsdHMsIGR5Z3JhcGgpOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIC8v
IHhWYWx1ZVBhcnNlciBpcyBuZWNlc3NhcnkgZm9yIGFubm90YXRpb25zIHRvIHdvcmssIGV2ZW4g
dGhvdWdoIHdlCi0gICAgICAgICAgICAvLyBhbHJlYWR5IGhhdmUgRGF0ZSBpbnN0YW5jZXMKLSAg
ICAgICAgICAgIHhWYWx1ZVBhcnNlcjogZnVuY3Rpb24oaW5wdXQpIHsgcmV0dXJuIGlucHV0Lmdl
dFRpbWUoKTsgfQotICAgICAgICB9KTsKLSAgICBpZiAoYW5ub3RhdGlvbnMubGVuZ3RoKQotICAg
ICAgICBnX2R5Z3JhcGguc2V0QW5ub3RhdGlvbnMoYW5ub3RhdGlvbnMpOwotCi0gICAgaW5zcGVj
dG9yTm9kZS5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnOwotCi0gICAgaWYgKGdfY3VycmVu
dEJ1aWxkSW5kZXggIT0gLTEpCi0gICAgICAgIHNlbGVjdEJ1aWxkKHJlc3VsdHMsIGJ1aWxkZXIs
IGdfZHlncmFwaCwgZ19jdXJyZW50QnVpbGRJbmRleCk7Ci19Ci0KLWZ1bmN0aW9uIHNlbGVjdEJ1
aWxkKHJlc3VsdHMsIGJ1aWxkZXIsIGR5Z3JhcGgsIGluZGV4KQotewotICAgIGdfY3VycmVudEJ1
aWxkSW5kZXggPSBpbmRleDsKLSAgICB1cGRhdGVCdWlsZEluZGljYXRvcihyZXN1bHRzLCBkeWdy
YXBoKTsKLSAgICB1cGRhdGVCdWlsZEluc3BlY3RvcihyZXN1bHRzLCBidWlsZGVyLCBkeWdyYXBo
LCBpbmRleCk7Ci0gICAgZ19oaXN0b3J5LnNldFF1ZXJ5UGFyYW1ldGVyKCdidWlsZFRpbWVzdGFt
cCcsIHJlc3VsdHNbVElNRVNUQU1QU19LRVldW2luZGV4XSAqIDEwMDApOwotfQotCi1mdW5jdGlv
biB1cGRhdGVCdWlsZEluZGljYXRvcihyZXN1bHRzLCBkeWdyYXBoKQotewotICAgIHZhciBpbmRp
Y2F0b3JOb2RlID0gJCgnaW5kaWNhdG9yJyk7Ci0KLSAgICBpZiAoIWluZGljYXRvck5vZGUpIHsK
LSAgICAgICAgdmFyIGNvbnRhaW5lck5vZGUgPSAkKCd0aW1lbGluZS1jb250YWluZXInKTsKLSAg
ICAgICAgaW5kaWNhdG9yTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICAg
ICAgICBpbmRpY2F0b3JOb2RlLmlkID0gJ2luZGljYXRvcic7Ci0gICAgICAgIGluZGljYXRvck5v
ZGUuc3R5bGUuaGVpZ2h0ID0gY29udGFpbmVyTm9kZS5vZmZzZXRIZWlnaHQgKyAncHgnOwotICAg
ICAgICBjb250YWluZXJOb2RlLmFwcGVuZENoaWxkKGluZGljYXRvck5vZGUpOwotICAgIH0KLQot
ICAgIGlmIChnX2N1cnJlbnRCdWlsZEluZGV4ID09IC0xKQotICAgICAgICBpbmRpY2F0b3JOb2Rl
LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGluZGljYXRvck5v
ZGUuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7Ci0gICAgICAgIHZhciBidWlsZERhdGUgPSBuZXcg
RGF0ZShyZXN1bHRzW1RJTUVTVEFNUFNfS0VZXVtnX2N1cnJlbnRCdWlsZEluZGV4XSAqIDEwMDAp
OwotICAgICAgICB2YXIgZG9tQ29vcmRzID0gZHlncmFwaC50b0RvbUNvb3JkcyhidWlsZERhdGUs
IDApOwotICAgICAgICBpbmRpY2F0b3JOb2RlLnN0eWxlLmxlZnQgPSBkb21Db29yZHNbMF0gKyAn
cHgnOwotICAgIH0KLX0KLQotZnVuY3Rpb24gdXBkYXRlQnVpbGRJbnNwZWN0b3IocmVzdWx0cywg
YnVpbGRlciwgZHlncmFwaCwgaW5kZXgpCi17Ci0gICAgdmFyIGh0bWwgPSAnPHRhYmxlIGlkPSJp
bnNwZWN0b3ItdGFibGUiPjxjYXB0aW9uPkRldGFpbHM8L2NhcHRpb24+JzsKLQotICAgIGZ1bmN0
aW9uIGFkZFJvdyhsYWJlbCwgdmFsdWUpCi0gICAgewotICAgICAgICBodG1sICs9ICc8dHI+PHRk
IGNsYXNzPSJsYWJlbCI+JyArIGxhYmVsICsgJzwvdGQ+PHRkPicgKyB2YWx1ZSArICc8L3RkPjwv
dHI+JzsKLSAgICB9Ci0KLSAgICAvLyBCdWlsZGVyIGFuZCByZXN1bHRzIGxpbmtzCi0gICAgdmFy
IGJ1aWxkTnVtYmVyID0gcmVzdWx0c1tCVUlMRF9OVU1CRVJTX0tFWV1baW5kZXhdOwotICAgIGFk
ZFJvdygnJywgJycpOwotICAgIHZhciBtYXN0ZXIgPSBidWlsZGVyTWFzdGVyKGJ1aWxkZXIpOwot
ICAgIHZhciBidWlsZFVybCA9IG1hc3Rlci5sb2dQYXRoKGJ1aWxkZXIsIHJlc3VsdHNbQlVJTERf
TlVNQkVSU19LRVldW2luZGV4XSk7Ci0gICAgdmFyIHJlc3VsdHNVcmwgPSAnaHR0cHM6Ly9idWls
ZC53ZWJraXQub3JnL3Jlc3VsdHMvJyArIGJ1aWxkZXIgKyAnL3InICsgcmVzdWx0c1tXRUJLSVRf
UkVWSVNJT05TX0tFWV1baW5kZXhdICsKLSAgICAgICAgJyAoJyArIHJlc3VsdHNbQlVJTERfTlVN
QkVSU19LRVldW2luZGV4XSArICcpJzsKLQotICAgIGFkZFJvdygnQnVpbGQ6JywgJzxhIGhyZWY9
IicgKyBidWlsZFVybCArICciIHRhcmdldD0iX2JsYW5rIj4nICsgYnVpbGROdW1iZXIgKyAnPC9h
PiAoPGEgaHJlZj0iJyArIHJlc3VsdHNVcmwgKyAnIiB0YXJnZXQ9Il9ibGFuayI+cmVzdWx0czwv
YT4pJyk7Ci0KLSAgICAvLyBSZXZpc2lvbiBsaW5rCi0gICAgYWRkUm93KCdXZWJLaXQgY2hhbmdl
OicsIHVpLmh0bWwud2ViS2l0UmV2aXNpb25MaW5rKHJlc3VsdHMsIGluZGV4KSk7Ci0KLSAgICAv
LyBUZXN0IHN0YXR1cy9jb3VudHMKLSAgICBhZGRSb3coJycsICcnKTsKLQotICAgIGZ1bmN0aW9u
IGFkZE51bWJlclJvdyhsYWJlbCwgY3VycmVudFZhbHVlLCBwcmV2aW91c1ZhbHVlKQotICAgIHsK
LSAgICAgICAgdmFyIGRlbHRhID0gY3VycmVudFZhbHVlIC0gcHJldmlvdXNWYWx1ZTsKLSAgICAg
ICAgdmFyIGRlbHRhVGV4dCA9ICcnCi0gICAgICAgIGlmIChkZWx0YSA8IDApCi0gICAgICAgICAg
ICBkZWx0YVRleHQgPSAnIDxzcGFuIGNsYXNzPSJkZWx0YSBuZWdhdGl2ZSI+JyArIGRlbHRhICsg
Jzwvc3Bhbj4nOwotICAgICAgICBlbHNlIGlmIChkZWx0YSA+IDApCi0gICAgICAgICAgICBkZWx0
YVRleHQgPSAnIDxzcGFuIGNsYXNzPSJkZWx0YSBwb3NpdGl2ZSI+KycgKyBkZWx0YSArICc8L3Nw
YW4+JzsKLQotICAgICAgICBhZGRSb3cobGFiZWwsIGN1cnJlbnRWYWx1ZSArIGRlbHRhVGV4dCk7
Ci0gICAgfQotCi0gICAgdmFyIGV4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9uc01hcCgpOwotICAg
IHZhciBmbGFreURlbHRhc0J5QnVpbGQgPSBnX2N1cnJlbnRCdWlsZGVyVGVzdFJlc3VsdHMuZmxh
a3lEZWx0YXNCeUJ1aWxkOwotICAgIGZvciAodmFyIGV4cGVjdGF0aW9uS2V5IGluIGV4cGVjdGF0
aW9ucykgewotICAgICAgICBpZiAoZXhwZWN0YXRpb25LZXkgaW4gcmVzdWx0c1tGSVhBQkxFX0NP
VU5UU19LRVldW2luZGV4XSkgewotICAgICAgICAgICAgdmFyIGN1cnJlbnRDb3VudCA9IHJlc3Vs
dHNbRklYQUJMRV9DT1VOVFNfS0VZXVtpbmRleF1bZXhwZWN0YXRpb25LZXldOwotICAgICAgICAg
ICAgdmFyIHByZXZpb3VzQ291bnQgPSByZXN1bHRzW0ZJWEFCTEVfQ09VTlRTX0tFWV1baW5kZXgg
KyAxXVtleHBlY3RhdGlvbktleV07Ci0gICAgICAgICAgICBpZiAoZ19oaXN0b3J5LmRhc2hib2Fy
ZFNwZWNpZmljU3RhdGUuaWdub3JlRmxha3lUZXN0cykgewotICAgICAgICAgICAgICAgIGN1cnJl
bnRDb3VudCAtPSBmbGFreURlbHRhc0J5QnVpbGRbaW5kZXhdW2V4cGVjdGF0aW9uS2V5XSB8fCAw
OwotICAgICAgICAgICAgICAgIHByZXZpb3VzQ291bnQgLT0gZmxha3lEZWx0YXNCeUJ1aWxkW2lu
ZGV4ICsgMV1bZXhwZWN0YXRpb25LZXldIHx8IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBhZGROdW1iZXJSb3coZXhwZWN0YXRpb25zW2V4cGVjdGF0aW9uS2V5XSwgY3VycmVudENvdW50
LCBwcmV2aW91c0NvdW50KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZhciBjdXJyZW50VG90
YWwgPSByZXN1bHRzW0ZJWEFCTEVfQ09VTlRfS0VZXVtpbmRleF07Ci0gICAgdmFyIHByZXZpb3Vz
VG90YWwgPSByZXN1bHRzW0ZJWEFCTEVfQ09VTlRfS0VZXVtpbmRleCArIDFdOwotICAgIGlmIChn
X2hpc3RvcnkuZGFzaGJvYXJkU3BlY2lmaWNTdGF0ZS5pZ25vcmVGbGFreVRlc3RzKSB7Ci0gICAg
ICAgIGN1cnJlbnRUb3RhbCAtPSBmbGFreURlbHRhc0J5QnVpbGRbaW5kZXhdLnRvdGFsIHx8IDA7
Ci0gICAgICAgIHByZXZpb3VzVG90YWwgLT0gZmxha3lEZWx0YXNCeUJ1aWxkW2luZGV4ICsgMV0u
dG90YWwgfHwgMDsKLSAgICB9Ci0gICAgYWRkTnVtYmVyUm93KCdUb3RhbCBmYWlsaW5nIHRlc3Rz
OicsIGN1cnJlbnRUb3RhbCwgcHJldmlvdXNUb3RhbCk7Ci0KLSAgICBodG1sICs9ICc8L3RhYmxl
Pic7Ci0KLSAgICBodG1sICs9ICc8ZGl2IGlkPSJjaGFuZ2VzLWJ1dHRvbiIgY2xhc3M9ImJ1dHRv
bnMiPic7Ci0gICAgaHRtbCArPSAnPGJ1dHRvbj5TaG93IGNoYW5nZWQgdGVzdCByZXN1bHRzPC9i
dXR0b24+JzsKLSAgICBodG1sICs9ICc8L2Rpdj4nOwotCi0gICAgaHRtbCArPSAnPGRpdiBpZD0i
YnVpbGQtYnV0dG9ucyIgY2xhc3M9ImJ1dHRvbnMiPic7Ci0gICAgaHRtbCArPSAnPGJ1dHRvbj5Q
cmV2aW91cyBidWlsZDwvYnV0dG9uPiA8YnV0dG9uPk5leHQgYnVpbGQ8L2J1dHRvbj4nOwotICAg
IGh0bWwgKz0gJzwvZGl2Pic7Ci0KLSAgICB2YXIgaW5zcGVjdG9yTm9kZSA9ICQoJ2luc3BlY3Rv
ci1jb250YWluZXInKTsKLSAgICBpbnNwZWN0b3JOb2RlLmlubmVySFRNTCA9IGh0bWw7Ci0KLSAg
ICBpbnNwZWN0b3JOb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVswXS5vbmNsaWNr
ID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHNob3dSZXN1bHRzRGVsdGEoaW5kZXgsIGJ1aWxkTnVt
YmVyLCBidWlsZFVybCwgcmVzdWx0c1VybCk7Ci0gICAgfTsKLSAgICBpbnNwZWN0b3JOb2RlLmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKVsxXS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7Ci0g
ICAgICAgIHNlbGVjdEJ1aWxkKHJlc3VsdHMsIGJ1aWxkZXIsIGR5Z3JhcGgsIGluZGV4ICsgMSk7
Ci0gICAgfTsKLSAgICBpbnNwZWN0b3JOb2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24n
KVsyXS5vbmNsaWNrID0gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHNlbGVjdEJ1aWxkKHJlc3VsdHMs
IGJ1aWxkZXIsIGR5Z3JhcGgsIGluZGV4IC0gMSk7Ci0gICAgfTsKLX0KLQotZnVuY3Rpb24gc2hv
d1Jlc3VsdHNEZWx0YShpbmRleCwgYnVpbGROdW1iZXIsIGJ1aWxkVXJsLCByZXN1bHRzVXJsKQot
ewotICAgIHZhciBmbGFreVRlc3RzID0gZ19jdXJyZW50QnVpbGRlclRlc3RSZXN1bHRzLmZsYWt5
VGVzdHM7Ci0gICAgdmFyIGN1cnJlbnRSZXN1bHRzID0gZ19jdXJyZW50QnVpbGRlclRlc3RSZXN1
bHRzLnJlc3VsdHNCeUJ1aWxkW2luZGV4XTsKLSAgICB2YXIgdGVzdE5hbWVzID0gZ19jdXJyZW50
QnVpbGRlclRlc3RSZXN1bHRzLnRlc3ROYW1lczsKLSAgICB2YXIgcHJldmlvdXNSZXN1bHRzID0g
Z19jdXJyZW50QnVpbGRlclRlc3RSZXN1bHRzLnJlc3VsdHNCeUJ1aWxkW2luZGV4ICsgMV07Ci0g
ICAgdmFyIGV4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9uc01hcCgpOwotCi0gICAgdmFyIGRlbHRh
cyA9IHt9OwotICAgIGZ1bmN0aW9uIGFkZERlbHRhKGNhdGVnb3J5LCB0ZXN0SW5kZXgpCi0gICAg
ewotICAgICAgICBpZiAoZ19oaXN0b3J5LmRhc2hib2FyZFNwZWNpZmljU3RhdGUuaWdub3JlRmxh
a3lUZXN0cyAmJiBmbGFreVRlc3RzW3Rlc3RJbmRleF0pCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIGlmICghKGNhdGVnb3J5IGluIGRlbHRhcykpCi0gICAgICAgICAgICBkZWx0YXNbY2F0
ZWdvcnldID0gW107Ci0gICAgICAgIHZhciB0ZXN0TmFtZSA9IHRlc3ROYW1lc1t0ZXN0SW5kZXhd
OwotICAgICAgICB2YXIgZmxha2luZXNzRGFzaGJvYXJkVXJsID0gJ2ZsYWtpbmVzc19kYXNoYm9h
cmQuaHRtbCcgKyAobG9jYXRpb24uaGFzaCA/IGxvY2F0aW9uLmhhc2ggKyAnJicgOiAnIycpICsg
J3Rlc3RzPScgKyB0ZXN0TmFtZTsKLSAgICAgICAgdmFyIGh0bWwgPSAnPGEgaHJlZj0iJyArIGZs
YWtpbmVzc0Rhc2hib2FyZFVybCArICciPicgKyB0ZXN0TmFtZSArICc8L2E+JzsKLSAgICAgICAg
aWYgKGZsYWt5VGVzdHNbdGVzdEluZGV4XSkKLSAgICAgICAgICAgIGh0bWwgKz0gJyA8c3BhbiBz
dHlsZT0iY29sb3I6ICNmNjYiPnBvc3NpYmx5IGZsYWt5PC9zcGFuPic7Ci0gICAgICAgIGRlbHRh
c1tjYXRlZ29yeV0ucHVzaChodG1sKTsKLSAgICB9Ci0KLSAgICBmb3IgKHZhciB0ZXN0SW5kZXgg
PSAwOyB0ZXN0SW5kZXggPCBjdXJyZW50UmVzdWx0cy5sZW5ndGg7IHRlc3RJbmRleCsrKSB7Ci0g
ICAgICAgIGlmIChjdXJyZW50UmVzdWx0c1t0ZXN0SW5kZXhdID09PSB1bmRlZmluZWQpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAocHJldmlvdXNSZXN1bHRzW3Rlc3RJbmRl
eF0gIT09IHVuZGVmaW5lZCkgewotICAgICAgICAgICAgaWYgKGN1cnJlbnRSZXN1bHRzW3Rlc3RJ
bmRleF0gPT0gcHJldmlvdXNSZXN1bHRzW3Rlc3RJbmRleF0pCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBhZGREZWx0YSgnV2FzIDxiPicgKyBleHBlY3RhdGlvbnNbcHJl
dmlvdXNSZXN1bHRzW3Rlc3RJbmRleF1dICsgJzwvYj4gbm93IDxiPicgKyBleHBlY3RhdGlvbnNb
Y3VycmVudFJlc3VsdHNbdGVzdEluZGV4XV0gKyAnPC9iPicsIHRlc3RJbmRleCk7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgYWRkRGVsdGEoJ05ld2x5IDxiPicgKyBleHBlY3RhdGlvbnNb
Y3VycmVudFJlc3VsdHNbdGVzdEluZGV4XV0gKyAnPC9iPicsIHRlc3RJbmRleCk7Ci0gICAgfQot
Ci0gICAgZm9yICh2YXIgdGVzdEluZGV4ID0gMDsgdGVzdEluZGV4IDwgcHJldmlvdXNSZXN1bHRz
Lmxlbmd0aDsgdGVzdEluZGV4KyspIHsKLSAgICAgICAgaWYgKHByZXZpb3VzUmVzdWx0c1t0ZXN0
SW5kZXhdID09PSB1bmRlZmluZWQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYg
KGN1cnJlbnRSZXN1bHRzW3Rlc3RJbmRleF0gPT09IHVuZGVmaW5lZCkKLSAgICAgICAgICAgIGFk
ZERlbHRhKCdXYXMgPGI+JyArIGV4cGVjdGF0aW9uc1twcmV2aW91c1Jlc3VsdHNbdGVzdEluZGV4
XV0gKyAnPC9iPicsIHRlc3RJbmRleCk7Ci0gICAgfQotCi0gICAgdmFyIGh0bWwgPSAnJzsKLQot
ICAgIGh0bWwgKz0gJzxoZWFkPjxiYXNlIHRhcmdldD0iX2JsYW5rIj48L2hlYWQ+JzsKLSAgICBo
dG1sICs9ICc8aDE+Q2hhbmdlcyBpbiB0ZXN0IHJlc3VsdHM8L2gxPic7Ci0KLSAgICBodG1sICs9
ICc8cD5Gb3IgYnVpbGQgPGEgaHJlZj0iJyArIGJ1aWxkVXJsICsgJyIgdGFyZ2V0PSJfYmxhbmsi
PicgKwotICAgICAgICBidWlsZE51bWJlciArICc8L2E+ICcgKyAnKDxhIGhyZWY9IicgKyByZXN1
bHRzVXJsICsKLSAgICAgICAgJyIgdGFyZ2V0PSJfYmxhbmsiPnJlc3VsdHM8L2E+KTwvcD4nOwot
Ci0gICAgZm9yICh2YXIgZGVsdGFDYXRlZ29yeSBpbiBkZWx0YXMpIHsKLSAgICAgICAgaHRtbCAr
PSAnPHA+PGRpdj4nICsgZGVsdGFDYXRlZ29yeSArICcgKCcgKyBkZWx0YXNbZGVsdGFDYXRlZ29y
eV0ubGVuZ3RoICsgJyk8L2Rpdj48dWw+JzsKLSAgICAgICAgZGVsdGFzW2RlbHRhQ2F0ZWdvcnld
LmZvckVhY2goZnVuY3Rpb24oZGVsdGFIdG1sKSB7Ci0gICAgICAgICAgICBodG1sICs9ICc8bGk+
JyArIGRlbHRhSHRtbCArICc8L2xpPic7Ci0gICAgICAgIH0pOwotICAgICAgICBodG1sICs9ICc8
L3VsPjwvcD4nOwotICAgIH0KLQotICAgIHZhciBkZWx0YVdpbmRvdyA9IHdpbmRvdy5vcGVuKCk7
Ci0gICAgZGVsdGFXaW5kb3cuZG9jdW1lbnQud3JpdGUoaHRtbCk7Ci19Ci0KLXZhciBfRkFJTFVS
RV9FWFBFQ1RBVElPTlMgPSB7Ci0gICAgJ1QnOiAxLAotICAgICdGJzogMSwKLSAgICAnQyc6IDEs
Ci0gICAgJ0knOiAxLAotICAgICdaJzogMQotfTsKLQotLy8gIkRlY29tcHJlc3NlcyIgdGhlIFJM
RS1lbmNvZGluZyBvZiB0ZXN0IHJlc3VsdHMgc28gdGhhdCB3ZSBjYW4gcXVlcnkgaXQKLS8vIGJ5
IGJ1aWxkIGluZGV4IGFuZCB0ZXN0IG5hbWUuCi0vLwotLy8gQHBhcmFtIHtPYmplY3R9IHJlc3Vs
dHMgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgYnVpbGRlcgotLy8gQHJldHVybiBPYmplY3Qgd2l0
aCB0aGVzZSBwcm9wZXJ0aWVzOgotLy8gICAgIC0gdGVzdE5hbWVzOiBhcnJheSBtYXBwaW5nIHRl
c3QgaW5kZXggdG8gdGVzdCBuYW1lcy4KLS8vICAgICAtIHJlc3VsdHNCeUJ1aWxkOiBhcnJheSBv
ZiBidWlsZHMsIGZvciBlYWNoIGJ1aWxkIGEgKHNwYXJzZSkgYXJyYXkgb2YgdGVzdCByZXN1bHRz
IGJ5IHRlc3QgaW5kZXguCi0vLyAgICAgLSBmbGFreVRlc3RzOiBhcnJheSB3aXRoIHRoZSBib29s
ZWFuIHZhbHVlIHRydWUgYXQgdGVzdCBpbmRpY2VzIHRoYXQgYXJlIGNvbnNpZGVyZWQgZmxha3kg
KG1vcmUgdGhhbiBvbmUgc2luZ2xlLWJ1aWxkIGZhaWx1cmUpLgotLy8gICAgIC0gZmxha3lEZWx0
YXNCeUJ1aWxkOiBhcnJheSBvZiBidWlsZHMsIGZvciBlYWNoIGJ1aWxkIGEgY291bnQgb2YgZmxh
a3kgdGVzdCByZXN1bHRzIGJ5IGV4cGVjdGF0aW9uLCBhcyB3ZWxsIGFzIGEgdG90YWwuCi1mdW5j
dGlvbiBfZGVjb21wcmVzc1Jlc3VsdHMoYnVpbGRlclJlc3VsdHMpCi17Ci0gICAgdmFyIGJ1aWxk
ZXJUZXN0UmVzdWx0cyA9IGJ1aWxkZXJSZXN1bHRzW1RFU1RTX0tFWV07Ci0gICAgdmFyIGJ1aWxk
Q291bnQgPSBidWlsZGVyUmVzdWx0c1tGSVhBQkxFX0NPVU5UU19LRVldLmxlbmd0aDsKLSAgICB2
YXIgcmVzdWx0c0J5QnVpbGQgPSBuZXcgQXJyYXkoYnVpbGRDb3VudCk7Ci0gICAgdmFyIGZsYWt5
RGVsdGFzQnlCdWlsZCA9IG5ldyBBcnJheShidWlsZENvdW50KTsKLQotICAgIC8vIFByZS1zaXpp
bmcgdGhlIHRlc3QgcmVzdWx0IGFycmF5cyBmb3IgZWFjaCBidWlsZCBzYXZlcyB1cyB+MjUwbXMK
LSAgICB2YXIgdGVzdENvdW50ID0gMDsKLSAgICBmb3IgKHZhciB0ZXN0TmFtZSBpbiBidWlsZGVy
VGVzdFJlc3VsdHMpCi0gICAgICAgIHRlc3RDb3VudCsrOwotICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgYnVpbGRDb3VudDsgaSsrKSB7Ci0gICAgICAgIHJlc3VsdHNCeUJ1aWxkW2ldID0gbmV3IEFy
cmF5KHRlc3RDb3VudCk7Ci0gICAgICAgIHJlc3VsdHNCeUJ1aWxkW2ldW3Rlc3RDb3VudCAtIDFd
ID0gdW5kZWZpbmVkOwotICAgICAgICBmbGFreURlbHRhc0J5QnVpbGRbaV0gPSB7fTsKLSAgICB9
Ci0KLSAgICAvLyBVc2luZyBpbmRpY2VzIGluc3RlYWQgb2YgdGhlIGZ1bGwgdGVzdCBuYW1lcyBm
b3IgZWFjaCBidWlsZCBzYXZlcyB1cwotICAgIC8vIH4xNTAwbXMKLSAgICB2YXIgdGVzdEluZGV4
ID0gMDsKLSAgICB2YXIgdGVzdE5hbWVzID0gbmV3IEFycmF5KHRlc3RDb3VudCk7Ci0gICAgdmFy
IGZsYWt5VGVzdHMgPSBuZXcgQXJyYXkodGVzdENvdW50KTsKLQotICAgIC8vIERlY29tcHJlc3Mg
YW5kICJpbnZlcnQiIHRlc3QgcmVzdWx0cyAoYnkgYnVpbGQgaW5zdGVhZCBvZiBieSB0ZXN0KSBh
bmQKLSAgICAvLyBkZXRlcm1pbmUgd2hpY2ggYXJlIGZsYWt5LgotICAgIGZvciAodmFyIHRlc3RO
YW1lIGluIGJ1aWxkZXJUZXN0UmVzdWx0cykgewotICAgICAgICB2YXIgb25lQnVpbGRGYWlsdXJl
Q291bnQgPSAwOwotCi0gICAgICAgIHRlc3ROYW1lc1t0ZXN0SW5kZXhdID0gdGVzdE5hbWU7Ci0g
ICAgICAgIHZhciB0ZXN0UmVzdWx0cyA9IGJ1aWxkZXJUZXN0UmVzdWx0c1t0ZXN0TmFtZV0ucmVz
dWx0czsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAsIHJsZVJlc3VsdCwgY3VycmVudEJ1aWxkSW5k
ZXggPSAwOyAocmxlUmVzdWx0ID0gdGVzdFJlc3VsdHNbaV0pICYmIGN1cnJlbnRCdWlsZEluZGV4
IDwgYnVpbGRDb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICB2YXIgY291bnQgPSBybGVSZXN1bHRb
UkxFLkxFTkdUSF07Ci0gICAgICAgICAgICB2YXIgdmFsdWUgPSBybGVSZXN1bHRbUkxFLlZBTFVF
XTsKLQotICAgICAgICAgICAgaWYgKGNvdW50ID09IDEgJiYgdmFsdWUgaW4gX0ZBSUxVUkVfRVhQ
RUNUQVRJT05TKQotICAgICAgICAgICAgICAgIG9uZUJ1aWxkRmFpbHVyZUNvdW50Kys7Ci0KLSAg
ICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY291bnQ7IGorKykgewotICAgICAgICAgICAg
ICAgIHJlc3VsdHNCeUJ1aWxkW2N1cnJlbnRCdWlsZEluZGV4KytdW3Rlc3RJbmRleF0gPSB2YWx1
ZTsKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJ1aWxkSW5kZXggPT0gYnVpbGRDb3VudCkK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAob25lQnVpbGRGYWlsdXJlQ291bnQgPiAyKQotICAgICAgICAgICAgZmxha3lU
ZXN0c1t0ZXN0SW5kZXhdID0gdHJ1ZTsKLQotICAgICAgICB0ZXN0SW5kZXgrKzsKLSAgICB9Ci0K
LSAgICAvLyBOb3cgdGhhdCB3ZSBrbm93IHdoaWNoIHRlc3RzIGFyZSBmbGFreSwgY291bnQgdGhl
IHRlc3QgcmVzdWx0cyB0aGF0IGFyZQotICAgIC8vIGZyb20gZmxha3kgdGVzdHMgZm9yIGVhY2gg
YnVpbGQuCi0gICAgdGVzdEluZGV4ID0gMDsKLSAgICBmb3IgKHZhciB0ZXN0TmFtZSBpbiBidWls
ZGVyVGVzdFJlc3VsdHMpIHsKLSAgICAgICAgaWYgKCFmbGFreVRlc3RzW3Rlc3RJbmRleCsrXSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHZhciB0ZXN0UmVzdWx0cyA9IGJ1aWxk
ZXJUZXN0UmVzdWx0c1t0ZXN0TmFtZV0ucmVzdWx0czsKLSAgICAgICAgZm9yICh2YXIgaSA9IDAs
IHJsZVJlc3VsdCwgY3VycmVudEJ1aWxkSW5kZXggPSAwOyAocmxlUmVzdWx0ID0gdGVzdFJlc3Vs
dHNbaV0pICYmIGN1cnJlbnRCdWlsZEluZGV4IDwgYnVpbGRDb3VudDsgaSsrKSB7Ci0gICAgICAg
ICAgICB2YXIgY291bnQgPSBybGVSZXN1bHRbUkxFLkxFTkdUSF07Ci0gICAgICAgICAgICB2YXIg
dmFsdWUgPSBybGVSZXN1bHRbUkxFLlZBTFVFXTsKLQotICAgICAgICAgICAgZm9yICh2YXIgaiA9
IDA7IGogPCBjb3VudDsgaisrKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGJ1aWxkVGVzdFJlc3Vs
dHMgPSBmbGFreURlbHRhc0J5QnVpbGRbY3VycmVudEJ1aWxkSW5kZXgrK107Ci0gICAgICAgICAg
ICAgICAgZnVuY3Rpb24gYWRkRmxha3lEZWx0YShrZXkpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gYnVpbGRUZXN0UmVzdWx0cykpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBidWlsZFRlc3RSZXN1bHRzW2tleV0gPSAwOwotICAgICAgICAgICAg
ICAgICAgICBidWlsZFRlc3RSZXN1bHRzW2tleV0rKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYWRkRmxha3lEZWx0YSh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHZh
bHVlICE9ICdQJyAmJiB2YWx1ZSAhPSAnTicpCi0gICAgICAgICAgICAgICAgICAgIGFkZEZsYWt5
RGVsdGEoJ3RvdGFsJyk7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCdWlsZEluZGV4ID09
IGJ1aWxkQ291bnQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgdGVzdE5hbWVzOiB0ZXN0
TmFtZXMsCi0gICAgICAgIHJlc3VsdHNCeUJ1aWxkOiByZXN1bHRzQnlCdWlsZCwKLSAgICAgICAg
Zmxha3lUZXN0czogZmxha3lUZXN0cywKLSAgICAgICAgZmxha3lEZWx0YXNCeUJ1aWxkOiBmbGFr
eURlbHRhc0J5QnVpbGQKLSAgICB9OwotfQotCi1kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdr
ZXlkb3duJywgZnVuY3Rpb24oZSkgewotICAgIGlmIChnX2N1cnJlbnRCdWlsZEluZGV4ID09IC0x
KQotICAgICAgICByZXR1cm47Ci0KLSAgICB2YXIgYnVpbGRlciA9IGdfaGlzdG9yeS5kYXNoYm9h
cmRTcGVjaWZpY1N0YXRlLmJ1aWxkZXIgfHwgY3VycmVudEJ1aWxkZXJHcm91cCgpLmRlZmF1bHRC
dWlsZGVyKCk7Ci0gICAgc3dpdGNoIChlLmtleUlkZW50aWZpZXIpIHsKLSAgICBjYXNlICdMZWZ0
JzoKLSAgICAgICAgc2VsZWN0QnVpbGQoCi0gICAgICAgICAgICBnX3Jlc3VsdHNCeUJ1aWxkZXJb
YnVpbGRlcl0sCi0gICAgICAgICAgICBidWlsZGVyLAotICAgICAgICAgICAgZ19keWdyYXBoLAot
ICAgICAgICAgICAgZ19jdXJyZW50QnVpbGRJbmRleCArIDEpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlICdSaWdodCc6Ci0gICAgICAgIHNlbGVjdEJ1aWxkKAotICAgICAgICAgICAgZ19yZXN1
bHRzQnlCdWlsZGVyW2J1aWxkZXJdLAotICAgICAgICAgICAgYnVpbGRlciwKLSAgICAgICAgICAg
IGdfZHlncmFwaCwKLSAgICAgICAgICAgIGdfY3VycmVudEJ1aWxkSW5kZXggLSAxKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotfSk7Ci0KLXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywg
ZnVuY3Rpb24oKSB7Ci0gICAgdmFyIHJlc291cmNlTG9hZGVyID0gbmV3IGxvYWRlci5Mb2FkZXIo
KTsKLSAgICByZXNvdXJjZUxvYWRlci5sb2FkKCk7Ci19LCBmYWxzZSk7CgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RpbWVsaW5l
X2V4cGxvcmVyLmpzCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCww
ICMjCi1MRgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBUb29scy9UZXN0
UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RyZWVtYXAuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RyZWVtYXAuaHRtbAko
cmV2aXNpb24gMjY0NTI3KQorKysgVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJv
YXJkcy90cmVlbWFwLmh0bWwJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjEgKzAsMCBAQAotPCEtLSBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi1tZXQ6Ci0KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci1ub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi1j
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi1pbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi1kaXN0cmlidXRpb24uCi0gICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi1jb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLUxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLU9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi1EQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLVRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLShJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLS0tPgotPCFET0NUWVBFIGh0bWw+Ci08dGl0bGU+VGVzdCBS
dW50aW1lczwvdGl0bGU+Ci08bGluayByZWw9J3N0eWxlc2hlZXQnIGhyZWY9J3dlYnRyZWVtYXAu
Y3NzJz48L2xpbms+Ci08c3R5bGU+Ci1ib2R5IHsKLSAgICBkaXNwbGF5OiAtbW96LWJveDsKLSAg
ICBkaXNwbGF5OiAtd2Via2l0LWJveDsKLSAgICBkaXNwbGF5OiBib3g7Ci0gICAgLW1vei1ib3gt
b3JpZW50OiB2ZXJ0aWNhbDsKLSAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsOwotICAg
IGJveC1vcmllbnQ6IHZlcnRpY2FsOwotCi0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRv
cDogMDsKLSAgICByaWdodDogMDsKLSAgICBib3R0b206IDA7Ci0gICAgbGVmdDogMDsKLX0KLQot
dGQ6Zmlyc3QtY2hpbGQgewotICAgIHRleHQtYWxpZ246IGxlZnQ7Ci19Ci0KLXRkIHsKLSAgICB0
ZXh0LWFsaWduOiByaWdodDsKLX0KLQotI21hcCB7Ci0gICAgZGlzcGxheTogLW1vei1ib3g7Ci0g
ICAgZGlzcGxheTogLXdlYmtpdC1ib3g7Ci0gICAgZGlzcGxheTogYm94OwotCi0gICAgLW1vei1i
b3gtZmxleDogMTsKLSAgICAtd2Via2l0LWJveC1mbGV4OiAxOwotICAgIGJveC1mbGV4OiAxOwot
Ci0gICAgcG9zaXRpb246IHJlbGF0aXZlOwotICAgIGN1cnNvcjogcG9pbnRlcjsKLSAgICAtd2Vi
a2l0LXVzZXItc2VsZWN0OiBub25lOwotICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7Ci19Ci0K
LS5leHRyYS1kb20gewotICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgYm9yZGVyOiBub25lOwotICAg
IGJvcmRlci10b3A6IDFweCBkYXNoZWQ7Ci0gICAgcGFkZGluZzogNHB4OwotICAgIG1hcmdpbjog
MDsKLSAgICBvdmVyZmxvdzogYXV0bzsKLSAgICBjdXJzb3I6IGF1dG87Ci0gICAgLXdlYmtpdC11
c2VyLXNlbGVjdDogdGV4dDsKLSAgICAtbW96LXVzZXItc2VsZWN0OiB0ZXh0OwotfQotCi0jZm9j
dXNlZC1sZWFmIHsKLSAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKLSAgICBkaXNwbGF5OiAtbW96
LWJveDsKLSAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsOwotICAgIC1tb3otYm94LW9y
aWVudDogdmVydGljYWw7Ci19Ci0KLSNmb2N1c2VkLWxlYWYgPiAuZXh0cmEtZG9tIHsKLSAgICBk
aXNwbGF5OiAtd2Via2l0LWJveDsKLSAgICBkaXNwbGF5OiAtbW96LWJveDsKLSAgICAtd2Via2l0
LWJveC1mbGV4OiAxOwotICAgIC1tb3otYm94LWZsZXg6IDE7Ci19Ci0KLSNmb2N1c2VkLWxlYWYu
d2VidHJlZW1hcC1ub2RlOmhvdmVyIHsKLSAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKLX0KLQotI2Zv
Y3VzZWQtbGVhZiAud2VidHJlZW1hcC1jYXB0aW9uOmhvdmVyIHsKLSAgICBiYWNrZ3JvdW5kOiAj
ZWVlOwotfQotCi0uZXJyb3IgewotICAgIGNvbG9yOiByZWQ7Ci0gICAgZm9udC1zdHlsZTogaXRh
bGljOwotfQotPC9zdHlsZT4KLTxzY3JpcHQgc3JjPSJidWlsZGVycy5qcyI+PC9zY3JpcHQ+Ci08
c2NyaXB0IHNyYz0ibG9hZGVyLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJzdHJpbmcuanMi
Pjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Imhpc3RvcnkuanMiPjwvc2NyaXB0PgotPHNjcmlwdCBz
cmM9ImRhc2hib2FyZF9iYXNlLmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSJ1aS5qcyI+PC9z
Y3JpcHQ+Ci08c2NyaXB0IHNyYz0idHJlZW1hcC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0i
d2VidHJlZW1hcC5qcyI+PC9zY3JpcHQ+Ci0KLTxkaXYgaWQ9J2hlYWRlci1jb250YWluZXInPjwv
ZGl2PgotPHA+Q2xpY2sgb24gYSBib3ggdG8gem9vbSBpbi4gQ2xpY2sgb24gdGhlIG91dGVybW9z
dCBib3ggdG8gem9vbSBvdXQuIDxhIGhyZWY9IiIgb25jbGljaz0ic2hvd0F2ZXJhZ2VzKCk7cmV0
dXJuIGZhbHNlOyI+U2hvdyBhdmVyYWdlczwvYT48L3A+Ci08ZGl2IGlkPSdtYXAnPjwvZGl2PgoK
UHJvcGVydHkgY2hhbmdlcyBvbjogVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJv
YXJkcy90cmVlbWFwLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0x
ICswLDAgIyMKLUxGClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFRvb2xz
L1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdHJlZW1hcC5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3RyZWVtYXAuanMJ
KHJldmlzaW9uIDI2NDUyNykKKysrIFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hi
b2FyZHMvdHJlZW1hcC5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDI4NyArMCwwIEBACi0vLyBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vCi0vLyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vCi0vLyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
Ly8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0
aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLwotLy8gVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotLy8gIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKLS8vIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgotLy8gQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLS8vIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAot
Ly8gU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0vLyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLS8vIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLS8vIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotLy8gT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotdmFyIGRlZmF1bHREYXNoYm9h
cmRTcGVjaWZpY1N0YXRlVmFsdWVzID0gewotICAgIGJ1aWxkZXI6IG51bGwsCi0gICAgdHJlZW1h
cGZvY3VzOiAnJywKLX07Ci0KLXZhciBEQl9TUEVDSUZJQ19JTlZBTElEQVRJTkdfUEFSQU1FVEVS
UyA9IHsKLSAgICAndGVzdFR5cGUnOiAnYnVpbGRlcicsCi0gICAgJ2dyb3VwJzogJ2J1aWxkZXIn
Ci19OwotCi1mdW5jdGlvbiBnZW5lcmF0ZVBhZ2UoaGlzdG9yeUluc3RhbmNlKQotewotICAgICQo
J2hlYWRlci1jb250YWluZXInKS5pbm5lckhUTUwgPSB1aS5odG1sLnRlc3RUeXBlU3dpdGNoZXIo
KTsKLQotICAgIGdfaXNHZW5lcmF0aW5nUGFnZSA9IHRydWU7Ci0KLSAgICB2YXIgcmF3VHJlZSA9
IGdfcmVzdWx0c0J5QnVpbGRlcltoaXN0b3J5SW5zdGFuY2UuZGFzaGJvYXJkU3BlY2lmaWNTdGF0
ZS5idWlsZGVyIHx8IGN1cnJlbnRCdWlsZGVyR3JvdXAoKS5kZWZhdWx0QnVpbGRlcigpXTsKLSAg
ICBnX3dlYlRyZWUgPSBjb252ZXJ0VG9XZWJUcmVlbWFwRm9ybWF0KCdMYXlvdXRUZXN0cycsIHJh
d1RyZWUpOwotICAgIGFwcGVuZFRyZWVtYXAoJCgnbWFwJyksIGdfd2ViVHJlZSk7Ci0KLSAgICBp
ZiAoaGlzdG9yeUluc3RhbmNlLmRhc2hib2FyZFNwZWNpZmljU3RhdGUudHJlZW1hcGZvY3VzKQot
ICAgICAgICBmb2N1c1BhdGgoZ193ZWJUcmVlLCBoaXN0b3J5SW5zdGFuY2UuZGFzaGJvYXJkU3Bl
Y2lmaWNTdGF0ZS50cmVlbWFwZm9jdXMpCi0KLSAgICBnX2lzR2VuZXJhdGluZ1BhZ2UgPSBmYWxz
ZTsKLX0KLQotZnVuY3Rpb24gaGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyKGhpc3RvcnlJbnN0YW5j
ZSwga2V5LCB2YWx1ZSkKLXsKLSAgICBzd2l0Y2goa2V5KSB7Ci0gICAgY2FzZSAnYnVpbGRlcic6
Ci0gICAgICAgIGhpc3RvcnkudmFsaWRhdGVQYXJhbWV0ZXIoaGlzdG9yeUluc3RhbmNlLmRhc2hi
b2FyZFNwZWNpZmljU3RhdGUsIGtleSwgdmFsdWUsCi0gICAgICAgICAgICBmdW5jdGlvbigpIHsg
cmV0dXJuIHZhbHVlIGluIGN1cnJlbnRCdWlsZGVycygpOyB9KTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBjYXNlICd0cmVlbWFwZm9jdXMnOgotICAgICAgICBoaXN0b3J5LnZhbGlkYXRl
UGFyYW1ldGVyKGhpc3RvcnlJbnN0YW5jZS5kYXNoYm9hcmRTcGVjaWZpY1N0YXRlLCBrZXksIHZh
bHVlLAotICAgICAgICAgICAgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6
IFRoZXJlJ3MgcHJvYmFibHkgYSBzaW1wbGVyIHJlZ2V4cCBoZXJlLiBKdXN0IHRyeWluZyB0byBt
YXRjaCBhc2NpaSArIGZvcndhcmQtc2xhc2guCi0gICAgICAgICAgICAgICAgLy8gZS5nLiBMYXlv
dXRUZXN0cy9mb28vYmFyLmh0bWwKLSAgICAgICAgICAgICAgICByZXR1cm4gKHZhbHVlLm1hdGNo
KC9eKFx3K1wvXHcqKSokLykpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotZnVu
Y3Rpb24gaGFuZGxlUXVlcnlQYXJhbWV0ZXJDaGFuZ2UoaGlzdG9yeUluc3RhbmNlLCBwYXJhbXMp
Ci17Ci0gICAgZm9yICh2YXIgcGFyYW0gaW4gcGFyYW1zKSB7Ci0gICAgICAgIGlmIChwYXJhbSAh
PSAndHJlZW1hcGZvY3VzJykgewotICAgICAgICAgICAgJCgnbWFwJykuaW5uZXJIVE1MID0gJ0xv
YWRpbmcuLi4nOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi12YXIgdHJlZW1hcENvbmZpZyA9IHsKLSAgICBkZWZhdWx0
U3RhdGVWYWx1ZXM6IGRlZmF1bHREYXNoYm9hcmRTcGVjaWZpY1N0YXRlVmFsdWVzLAotICAgIGdl
bmVyYXRlUGFnZTogZ2VuZXJhdGVQYWdlLAotICAgIGhhbmRsZVZhbGlkSGFzaFBhcmFtZXRlcjog
aGFuZGxlVmFsaWRIYXNoUGFyYW1ldGVyLAotICAgIGhhbmRsZVF1ZXJ5UGFyYW1ldGVyQ2hhbmdl
OiBoYW5kbGVRdWVyeVBhcmFtZXRlckNoYW5nZSwKLSAgICBpbnZhbGlkYXRpbmdIYXNoUGFyYW1l
dGVyczogREJfU1BFQ0lGSUNfSU5WQUxJREFUSU5HX1BBUkFNRVRFUlMKLX07Ci0KLS8vIEZJWE1F
KGpwYXJlbnQpOiBFdmVudHVhbGx5IHJlbW92ZSBhbGwgdXNhZ2Ugb2YgZ2xvYmFsIGhpc3Rvcnkg
b2JqZWN0LgotdmFyIGdfaGlzdG9yeSA9IG5ldyBoaXN0b3J5Lkhpc3RvcnkodHJlZW1hcENvbmZp
Zyk7Ci1nX2hpc3RvcnkucGFyc2VDcm9zc0Rhc2hib2FyZFBhcmFtZXRlcnMoKTsKLQotdmFyIFRF
U1RfVVJMX0JBU0VfUEFUSCA9ICJodHRwczovL3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Vi
a2l0L3RydW5rLyI7Ci0KLWZ1bmN0aW9uIGh1bWFuUmVhZGFibGVUaW1lKG1pbGxpc2Vjb25kcykK
LXsKLSAgICBpZiAobWlsbGlzZWNvbmRzIDwgMTAwMCkKLSAgICAgICAgcmV0dXJuIE1hdGguZmxv
b3IobWlsbGlzZWNvbmRzKSArICdtcyc7Ci0gICAgZWxzZSBpZiAobWlsbGlzZWNvbmRzIDwgNjAw
MDApCi0gICAgICAgIHJldHVybiAobWlsbGlzZWNvbmRzIC8gMTAwMCkudG9QcmVjaXNpb24oMikg
KyAncyc7Ci0KLSAgICB2YXIgbWludXRlcyA9IE1hdGguZmxvb3IobWlsbGlzZWNvbmRzIC8gNjAw
MDApOwotICAgIHZhciBzZWNvbmRzID0gTWF0aC5mbG9vcigobWlsbGlzZWNvbmRzIC0gbWludXRl
cyAqIDYwMDAwKSAvIDEwMDApOwotICAgIHJldHVybiBtaW51dGVzICsgJ20nICsgc2Vjb25kcyAr
ICdzJzsKLX0KLQotLy8gVGhpcyBsb29rcyBsaWtlOgotLy8geyAiZGF0YSI6IHsiJGFyZWEiOiAo
c3VtIG9mIGFsbCB0aW1pbmdzKX0sCi0vLyAgICJuYW1lIjogKG5hbWUgb2YgdGhpcyBub2RlKSwK
LS8vICAgImNoaWxkcmVuIjogWyAoY2hpbGQgbm9kZXMsIGluIHRoZSBzYW1lIGZvcm1hdCBhcyB0
aGlzKSBdIH0KLS8vIGNoaWxkQ291bnQgaXMgYWRkZWQganVzdCB0byBiZSBpbmNsdWRlcyBpbiB0
aGUgbm9kZSdzIG5hbWUKLWZ1bmN0aW9uIGNvbnZlcnRUb1dlYlRyZWVtYXBGb3JtYXQodHJlZW5h
bWUsIHRyZWUsIHBhdGgpCi17Ci0gICAgdmFyIHRvdGFsID0gMDsKLSAgICB2YXIgY2hpbGRDb3Vu
dCA9IDA7Ci0gICAgdmFyIGNoaWxkcmVuID0gW107Ci0gICAgZm9yICh2YXIgbmFtZSBpbiB0cmVl
KSB7Ci0gICAgICAgIHZhciB0cmVlTm9kZSA9IHRyZWVbbmFtZV07Ci0gICAgICAgIGlmICh0eXBl
b2YgdHJlZU5vZGUgPT0gIm51bWJlciIpIHsKLSAgICAgICAgICAgIHZhciB0aW1lID0gdHJlZU5v
ZGU7Ci0gICAgICAgICAgICB2YXIgbm9kZSA9IHsKLSAgICAgICAgICAgICAgICAiZGF0YSI6IHsi
JGFyZWEiOiB0aW1lfSwKLSAgICAgICAgICAgICAgICAibmFtZSI6IG5hbWUgKyAiICgiICsgaHVt
YW5SZWFkYWJsZVRpbWUodGltZSkgKyAiKSIKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBj
aGlsZHJlbi5wdXNoKG5vZGUpOwotICAgICAgICAgICAgdG90YWwgKz0gdGltZTsKLSAgICAgICAg
ICAgIGNoaWxkQ291bnQrKzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHZhciBuZXdQ
YXRoID0gcGF0aCA/IHBhdGggKyAnLycgKyBuYW1lIDogbmFtZTsKLSAgICAgICAgICAgIHZhciBz
dWJ0cmVlID0gY29udmVydFRvV2ViVHJlZW1hcEZvcm1hdChuYW1lLCB0cmVlTm9kZSwgbmV3UGF0
aCk7Ci0gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKHN1YnRyZWUpOwotICAgICAgICAgICAgdG90
YWwgKz0gc3VidHJlZVsiZGF0YSJdWyIkYXJlYSJdOwotICAgICAgICAgICAgY2hpbGRDb3VudCAr
PSBzdWJ0cmVlWyJjaGlsZENvdW50Il07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjaGlsZHJl
bi5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKLSAgICAgICAgYVRpbWUgPSBhLmRhdGFbIiRhcmVhIl0K
LSAgICAgICAgYlRpbWUgPSBiLmRhdGFbIiRhcmVhIl0KLSAgICAgICAgcmV0dXJuIGJUaW1lIC0g
YVRpbWU7Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gewotICAgICAgICAiZGF0YSI6IHsiJGFyZWEi
OiB0b3RhbH0sCi0gICAgICAgICJuYW1lIjogdHJlZW5hbWUgKyAiICgiICsgaHVtYW5SZWFkYWJs
ZVRpbWUodG90YWwpICsgIiAtICIgKyBjaGlsZENvdW50ICsgIiB0ZXN0cykiLAotICAgICAgICAi
Y2hpbGRyZW4iOiBjaGlsZHJlbiwKLSAgICAgICAgImNoaWxkQ291bnQiOiBjaGlsZENvdW50LAot
ICAgICAgICAicGF0aCI6IHBhdGgKLSAgICB9OwotfQotCi1mdW5jdGlvbiBsaXN0T2ZBbGxOb25M
ZWFmTm9kZXModHJlZSwgbGlzdCkKLXsKLSAgICBpZiAoIXRyZWUuY2hpbGRyZW4pCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmICghbGlzdCkKLSAgICAgICAgbGlzdCA9IFtdOwotICAgIGxpc3Qu
cHVzaCh0cmVlKTsKLQotICAgIHRyZWUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihjaGlsZCkg
ewotICAgICAgICBsaXN0T2ZBbGxOb25MZWFmTm9kZXMoY2hpbGQsIGxpc3QpOwotICAgIH0pOwot
ICAgIHJldHVybiBsaXN0OwotfQotCi1mdW5jdGlvbiByZXZlcnNlU29ydEJ5QXZlcmFnZShsaXN0
KQotewotICAgIGxpc3Quc29ydChmdW5jdGlvbihhLCBiKSB7Ci0gICAgICAgIHZhciBhdmdBID0g
YS5kYXRhWyckYXJlYSddIC8gYS5jaGlsZENvdW50OwotICAgICAgICB2YXIgYXZnQiA9IGIuZGF0
YVsnJGFyZWEnXSAvIGIuY2hpbGRDb3VudDsKLSAgICAgICAgcmV0dXJuIGF2Z0IgLSBhdmdBOwot
ICAgIH0pOwotfQotCi1mdW5jdGlvbiBzaG93QXZlcmFnZXMoKQotewotICAgIGlmICghZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ21hcCcpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB2YXIgdGFi
bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpOwotICAgIHRhYmxlLmlubmVySFRN
TCA9ICc8dGg+ZGlyZWN0b3J5PC90aD48dGg+IyB0ZXN0czwvdGg+PHRoPmF2ZyB0aW1lIC8gdGVz
dDwvdGg+JzsKLQotICAgIHZhciBhbGxOb2RlcyA9IGxpc3RPZkFsbE5vbkxlYWZOb2RlcyhnX3dl
YlRyZWUpOwotICAgIHJldmVyc2VTb3J0QnlBdmVyYWdlKGFsbE5vZGVzKTsKLSAgICBhbGxOb2Rl
cy5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpIHsKLSAgICAgICAgdmFyIGF2ZXJhZ2UgPSBub2RlLmRh
dGFbJyRhcmVhJ10gLyBub2RlLmNoaWxkQ291bnQ7Ci0gICAgICAgIGlmIChhdmVyYWdlID4gMTAw
ICYmIG5vZGUuY2hpbGRDb3VudCAhPSAxKSB7Ci0gICAgICAgICAgICB2YXIgdHIgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCd0cicpOwotICAgICAgICAgICAgdHIuaW5uZXJIVE1MID0gJzx0ZD48
L3RkPjx0ZD4nICsgbm9kZS5jaGlsZENvdW50ICsgJzwvdGQ+PHRkPicgKyBodW1hblJlYWRhYmxl
VGltZShhdmVyYWdlKSArICc8L3RkPic7Ci0gICAgICAgICAgICB0ci5xdWVyeVNlbGVjdG9yKCd0
ZCcpLmlubmVyVGV4dCA9IG5vZGUucGF0aDsKLSAgICAgICAgICAgIHRhYmxlLmFwcGVuZENoaWxk
KHRyKTsKLSAgICAgICAgfQotICAgIH0pOwotCi0gICAgdmFyIG1hcCA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdtYXAnKTsKLSAgICBtYXAucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGFibGUs
IG1hcCk7Ci19Ci0KLXZhciBnX2lzR2VuZXJhdGluZ1BhZ2UgPSBmYWxzZTsKLXZhciBnX3dlYlRy
ZWU7Ci0KLWZ1bmN0aW9uIGZvY3VzUGF0aCh0cmVlLCBwYXRoKQotewotICAgIHZhciBwYXJ0cyA9
IGRlY29kZVVSSUNvbXBvbmVudChwYXRoKS5zcGxpdCgnLycpOwotICAgIGlmIChleHRyYWN0TmFt
ZSh0cmVlKSAhPSBwYXJ0c1swXSkgewotICAgICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3Qg
Zm9jdXMgdHJlZSByb290ZWQgYXQgJyArIHBhcnRzWzBdKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGZvciAodmFyIGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHsKLSAgICAg
ICAgdmFyIGNoaWxkcmVuID0gdHJlZS5jaGlsZHJlbjsKLSAgICAgICAgZm9yICh2YXIgaiA9IDA7
IGogPCBjaGlsZHJlbi5sZW5ndGg7IGorKykgewotICAgICAgICAgICAgdmFyIGNoaWxkID0gY2hp
bGRyZW5bal07Ci0gICAgICAgICAgICBpZiAoZXh0cmFjdE5hbWUoY2hpbGQpID09IHBhcnRzW2ld
KSB7Ci0gICAgICAgICAgICAgICAgdHJlZSA9IGNoaWxkOwotICAgICAgICAgICAgICAgIGZvY3Vz
KHRyZWUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGlmIChqID09IGNoaWxkcmVuLmxlbmd0aCkgewotICAgICAgICAgICAgY29uc29s
ZS5lcnJvcignQ291bGQgbm90IGZpbmQgdHJlZSBhdCAnICsgcGFydHNbaV0pOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLX0KLQotZnVuY3Rpb24gZXh0cmFjdE5hbWUo
bm9kZSkKLXsKLSAgICByZXR1cm4gbm9kZS5uYW1lLnNwbGl0KCcgJylbMF07Ci19Ci0KLWZ1bmN0
aW9uIGZ1bGxOYW1lKG5vZGUpCi17Ci0gICAgdmFyIGJ1ZmZlciA9IFtleHRyYWN0TmFtZShub2Rl
KV07Ci0gICAgd2hpbGUgKG5vZGUucGFyZW50KSB7Ci0gICAgICAgIG5vZGUgPSBub2RlLnBhcmVu
dDsKLSAgICAgICAgYnVmZmVyLnVuc2hpZnQoZXh0cmFjdE5hbWUobm9kZSkpOwotICAgIH0KLSAg
ICByZXR1cm4gYnVmZmVyLmpvaW4oJy8nKTsKLX0KLQotZnVuY3Rpb24gaGFuZGxlRm9jdXModHJl
ZSkKLXsKLSAgICB2YXIgY3VycmVudGx5Rm9jdXNlZE5vZGUgPSAkKCdmb2N1c2VkLWxlYWYnKTsK
LSAgICBpZiAoY3VycmVudGx5Rm9jdXNlZE5vZGUpCi0gICAgICAgIGN1cnJlbnRseUZvY3VzZWRO
b2RlLmlkID0gJyc7Ci0KLSAgICBpZiAoIXRyZWUuY2hpbGRyZW4pCi0gICAgICAgIHRyZWUuZG9t
LmlkID0gJ2ZvY3VzZWQtbGVhZic7Ci0KLSAgICB2YXIgbmFtZSA9IGZ1bGxOYW1lKHRyZWUpOwot
Ci0gICAgaWYgKCF0cmVlLmNoaWxkcmVuICYmICF0cmVlLmV4dHJhRG9tICYmIGdfaGlzdG9yeS5p
c0xheW91dFRlc3RSZXN1bHRzKCkpIHsKLSAgICAgICAgdHJlZS5leHRyYURvbSA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ3ByZScpOwotICAgICAgICB0cmVlLmV4dHJhRG9tLmNsYXNzTmFtZSA9
ICdleHRyYS1kb20nOwotICAgICAgICB0cmVlLmRvbS5hcHBlbmRDaGlsZCh0cmVlLmV4dHJhRG9t
KTsKLQotICAgICAgICBsb2FkZXIucmVxdWVzdChURVNUX1VSTF9CQVNFX1BBVEggKyBuYW1lLAot
ICAgICAgICAgICAgZnVuY3Rpb24oeGhyKSB7Ci0gICAgICAgICAgICAgICAgdHJlZS5leHRyYURv
bS5vbm1vdXNlZG93biA9IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAgICAgICAgICAgZS5zdG9w
UHJvcGFnYXRpb24oKTsKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIHRyZWUu
ZXh0cmFEb20udGV4dENvbnRlbnQgPSB4aHIucmVzcG9uc2VUZXh0OwotICAgICAgICAgICAgfSwK
LSAgICAgICAgICAgIGZ1bmN0aW9uICh4aHIpIHsKLSAgICAgICAgICAgICAgICB0cmVlLmV4dHJh
RG9tLnRleHRDb250ZW50ID0gIkNvdWxkIG5vdCBsb2FkIHRlc3QuIgotICAgICAgICB9KTsKLSAg
ICB9Ci0KLSAgICAvLyBXZSBkb24ndCB3YW50IHRoZSBmb2N1cyBjYWxscyBkdXJpbmcgZ2VuZXJh
dGVQYWdlIHRvIHRyeSB0byBtb2RpZnkgdGhlIHF1ZXJ5IHN0YXRlLgotICAgIGlmICghZ19pc0dl
bmVyYXRpbmdQYWdlKQotICAgICAgICBnX2hpc3Rvcnkuc2V0UXVlcnlQYXJhbWV0ZXIoJ3RyZWVt
YXBmb2N1cycsIG5hbWUpOwotfQotCi13aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1
bmN0aW9uKCkgewotICAgIHZhciByZXNvdXJjZUxvYWRlciA9IG5ldyBsb2FkZXIuTG9hZGVyKCk7
Ci0gICAgcmVzb3VyY2VMb2FkZXIubG9hZCgpOwotfSwgZmFsc2UpOwoKUHJvcGVydHkgY2hhbmdl
cyBvbjogVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy90cmVlbWFwLmpz
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1MRgpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBUb29scy9UZXN0UmVzdWx0U2VydmVy
L3N0YXRpYy1kYXNoYm9hcmRzL3VpLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RSZXN1bHRT
ZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdWkuanMJKHJldmlzaW9uIDI2NDUyNykKKysrIFRvb2xz
L1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvdWkuanMJKG5vbmV4aXN0ZW50KQpA
QCAtMSwyMTAgKzAsMCBAQAotLy8gQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0vLwotLy8gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0vLyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0vLyBt
ZXQ6Ci0vLwotLy8gICAgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotLy8KLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0KLXZhciB1aSA9IHVpIHx8IHt9OwotCi0oZnVuY3Rpb24oKSB7Ci0K
LXVpLnBvcHVwID0ge307Ci0KLXVpLnBvcHVwLmhpZGUgPSBmdW5jdGlvbigpCi17Ci0gICAgdmFy
IHBvcHVwID0gJCgncG9wdXAnKTsKLSAgICBpZiAocG9wdXApIHsKLSAgICAgICAgcG9wdXAucGFy
ZW50Tm9kZS5yZW1vdmVDaGlsZChwb3B1cCk7Ci0gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50
TGlzdGVuZXIoJ21vdXNlZG93bicsIHVpLnBvcHVwLl9oYW5kbGVNb3VzZURvd24sIGZhbHNlKTsK
LSAgICB9Ci19Ci0KLXVpLnBvcHVwLnNob3cgPSBmdW5jdGlvbih0YXJnZXQsIGh0bWwpCi17Ci0g
ICAgdmFyIHBvcHVwID0gJCgncG9wdXAnKTsKLSAgICBpZiAoIXBvcHVwKSB7Ci0gICAgICAgIHBv
cHVwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Ci0gICAgICAgIHBvcHVwLmlkID0g
J3BvcHVwJzsKLSAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwb3B1cCk7Ci0gICAg
ICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHVpLnBvcHVwLl9oYW5k
bGVNb3VzZURvd24sIGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvLyBTZXQgaHRtbCBmaXJzdCBzbyB0
aGF0IHdlIGNhbiBnZXQgYWNjdXJhdGUgc2l6ZSBtZXRyaWNzIG9uIHRoZSBwb3B1cC4KLSAgICBw
b3B1cC5pbm5lckhUTUwgPSBodG1sOwotCi0gICAgdmFyIHRhcmdldFJlY3QgPSB0YXJnZXQuZ2V0
Qm91bmRpbmdDbGllbnRSZWN0KCk7Ci0KLSAgICB2YXIgeCA9IE1hdGgubWluKHRhcmdldFJlY3Qu
bGVmdCAtIDEwLCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggLSBwb3B1cC5v
ZmZzZXRXaWR0aCk7Ci0gICAgeCA9IE1hdGgubWF4KDAsIHgpOwotICAgIHBvcHVwLnN0eWxlLmxl
ZnQgPSB4ICsgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0ICsgJ3B4JzsKLQotICAgIHZhciB5ID0g
dGFyZ2V0UmVjdC50b3AgKyB0YXJnZXRSZWN0LmhlaWdodDsKLSAgICBpZiAoeSArIHBvcHVwLm9m
ZnNldEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpCi0gICAg
ICAgIHkgPSB0YXJnZXRSZWN0LnRvcCAtIHBvcHVwLm9mZnNldEhlaWdodDsKLSAgICB5ID0gTWF0
aC5tYXgoMCwgeSk7Ci0gICAgcG9wdXAuc3R5bGUudG9wID0geSArIGRvY3VtZW50LmJvZHkuc2Ny
b2xsVG9wICsgJ3B4JzsKLX0KLQotdWkucG9wdXAuX2hhbmRsZU1vdXNlRG93biA9IGZ1bmN0aW9u
KGUpIHsKLSAgICAvLyBDbGVhciB0aGUgb3BlbiBwb3B1cCwgdW5sZXNzIHRoZSBjbGljayB3YXMg
aW5zaWRlIHRoZSBwb3B1cC4KLSAgICB2YXIgcG9wdXAgPSAkKCdwb3B1cCcpOwotICAgIGlmIChw
b3B1cCAmJiBlLnRhcmdldCAhPSBwb3B1cCAmJiAhKHBvcHVwLmNvbXBhcmVEb2N1bWVudFBvc2l0
aW9uKGUudGFyZ2V0KSAmIDE2KSkgCi0gICAgICAgIHVpLnBvcHVwLmhpZGUoKTsgICAgCi19Ci0K
LXVpLmh0bWwgPSB7fTsKLQotdWkuaHRtbC5jaGVja2JveCA9IGZ1bmN0aW9uKHF1ZXJ5UGFyYW1l
dGVyLCBsYWJlbCwgaXNDaGVja2VkLCBvcHRfZXh0cmFKYXZhU2NyaXB0KQotewotICAgIHZhciBq
cyA9IG9wdF9leHRyYUphdmFTY3JpcHQgfHwgJyc7Ci0gICAgcmV0dXJuICc8bGFiZWwgc3R5bGU9
InBhZGRpbmctbGVmdDogMmVtIj4nICsKLSAgICAgICAgJzxpbnB1dCB0eXBlPSJjaGVja2JveCIg
b25jaGFuZ2U9ImdfaGlzdG9yeS50b2dnbGVRdWVyeVBhcmFtZXRlcihcJycgKyBxdWVyeVBhcmFt
ZXRlciArICdcJyk7JyArIGpzICsgJyIgJyArCi0gICAgICAgICAgICAoaXNDaGVja2VkID8gJ2No
ZWNrZWQnIDogJycpICsgJz4nICsgbGFiZWwgKwotICAgICAgICAnPC9sYWJlbD4gJzsKLX0KLQot
dWkuaHRtbC5zZWxlY3QgPSBmdW5jdGlvbihsYWJlbCwgcXVlcnlQYXJhbWV0ZXIsIG9wdGlvbnMp
Ci17Ci0gICAgdmFyIGh0bWwgPSAnPGxhYmVsIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDJlbSI+JyAr
IGxhYmVsICsgJzogJyArCi0gICAgICAgICc8c2VsZWN0IG9uY2hhbmdlPSJnX2hpc3Rvcnkuc2V0
UXVlcnlQYXJhbWV0ZXIoXCcnICsgcXVlcnlQYXJhbWV0ZXIgKyAnXCcsIHRoaXNbdGhpcy5zZWxl
Y3RlZEluZGV4XS52YWx1ZSkiPic7Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMu
bGVuZ3RoOyBpKyspIHsKLSAgICAgICAgdmFyIHZhbHVlID0gb3B0aW9uc1tpXTsKLSAgICAgICAg
aHRtbCArPSAnPG9wdGlvbiB2YWx1ZT0iJyArIHZhbHVlICsgJyIgJyArCi0gICAgICAgICAgICAo
Z19oaXN0b3J5LnF1ZXJ5UGFyYW1ldGVyVmFsdWUocXVlcnlQYXJhbWV0ZXIpID09IHZhbHVlID8g
J3NlbGVjdGVkJyA6ICcnKSArCi0gICAgICAgICAgICAnPicgKyB2YWx1ZSArICc8L29wdGlvbj4n
Ci0gICAgfQotICAgIGh0bWwgKz0gJzwvc2VsZWN0PjwvbGFiZWw+ICc7Ci0gICAgcmV0dXJuIGh0
bWw7Ci19Ci0KLS8vIFJldHVybnMgdGhlIEhUTUwgZm9yIHRoZSBzZWxlY3QgZWxlbWVudCB0byBz
d2l0Y2ggdG8gZGlmZmVyZW50IHRlc3RUeXBlcy4KLXVpLmh0bWwudGVzdFR5cGVTd2l0Y2hlciA9
IGZ1bmN0aW9uKG9wdF9ub0J1aWxkZXJNZW51LCBvcHRfZXh0cmFIdG1sLCBvcHRfaW5jbHVkZU5v
bmVCdWlsZGVyKQotewotICAgIHZhciBodG1sID0gJzxkaXYgc3R5bGU9ImJvcmRlci1ib3R0b206
MXB4IGRhc2hlZCI+JzsKLSAgICBodG1sICs9ICcnICsKLSAgICAgICAgdWkuaHRtbC5fZGFzaGJv
YXJkTGluaygnU3RhdHMnLCAnYWdncmVnYXRlX3Jlc3VsdHMuaHRtbCcpICsKLSAgICAgICAgdWku
aHRtbC5fZGFzaGJvYXJkTGluaygnVGltZWxpbmUnLCAndGltZWxpbmVfZXhwbG9yZXIuaHRtbCcp
ICsKLSAgICAgICAgdWkuaHRtbC5fZGFzaGJvYXJkTGluaygnUmVzdWx0cycsICdmbGFraW5lc3Nf
ZGFzaGJvYXJkLmh0bWwnKSArCi0gICAgICAgIHVpLmh0bWwuX2Rhc2hib2FyZExpbmsoJ1RyZWVt
YXAnLCAndHJlZW1hcC5odG1sJyk7Ci0KLSAgICBpZiAoIW9wdF9ub0J1aWxkZXJNZW51KSB7Ci0g
ICAgICAgIHZhciBidWlsZGVyc0Zvck1lbnUgPSBPYmplY3Qua2V5cyhjdXJyZW50QnVpbGRlcnMo
KSk7Ci0gICAgICAgIGlmIChvcHRfaW5jbHVkZU5vbmVCdWlsZGVyKQotICAgICAgICAgICAgYnVp
bGRlcnNGb3JNZW51LnVuc2hpZnQoJy0tLS0tLS0tLS0tLS0tJyk7Ci0gICAgICAgIGh0bWwgKz0g
dWkuaHRtbC5zZWxlY3QoJ0J1aWxkZXInLCAnYnVpbGRlcicsIGJ1aWxkZXJzRm9yTWVudSk7Ci0g
ICAgfQotCi0gICAgaWYgKCFoaXN0b3J5LmlzVHJlZU1hcCgpKQotICAgICAgICBodG1sICs9IHVp
Lmh0bWwuY2hlY2tib3goJ3Nob3dBbGxSdW5zJywgJ1Nob3cgYWxsIHJ1bnMnLCBnX2hpc3Rvcnku
Y3Jvc3NEYXNoYm9hcmRTdGF0ZS5zaG93QWxsUnVucyk7Ci0KLSAgICBpZiAob3B0X2V4dHJhSHRt
bCkKLSAgICAgICAgaHRtbCArPSBvcHRfZXh0cmFIdG1sOwotICAgIHJldHVybiBodG1sICsgJzwv
ZGl2Pic7Ci19Ci0KLXVpLmh0bWwuX2xvYWREYXNoYm9hcmQgPSBmdW5jdGlvbihmaWxlTmFtZSkK
LXsKLSAgICB2YXIgcGF0aE5hbWUgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7Ci0gICAgcGF0
aE5hbWUgPSBwYXRoTmFtZS5zdWJzdHJpbmcoMCwgcGF0aE5hbWUubGFzdEluZGV4T2YoJy8nKSAr
IDEpOwotICAgIHdpbmRvdy5sb2NhdGlvbiA9IHBhdGhOYW1lICsgZmlsZU5hbWUgKyB3aW5kb3cu
bG9jYXRpb24uaGFzaDsKLX0KLQotdWkuaHRtbC5fdG9wTGluayA9IGZ1bmN0aW9uKGh0bWwsIG9u
Q2xpY2ssIGlzU2VsZWN0ZWQpCi17Ci0gICAgdmFyIGNzc1RleHQgPSBpc1NlbGVjdGVkID8gJ2Zv
bnQtd2VpZ2h0OiBib2xkOycgOiAnY29sb3I6Ymx1ZTt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5l
O2N1cnNvcjpwb2ludGVyOyc7Ci0gICAgY3NzVGV4dCArPSAnbWFyZ2luOiAwIDVweDsnOwotICAg
IHJldHVybiAnPHNwYW4gc3R5bGU9IicgKyBjc3NUZXh0ICsgJyIgb25jbGljaz0iJyArIG9uQ2xp
Y2sgKyAnIj4nICsgaHRtbCArICc8L3NwYW4+JzsKLX0KLQotdWkuaHRtbC5fZGFzaGJvYXJkTGlu
ayA9IGZ1bmN0aW9uKGh0bWwsIGZpbGVOYW1lKQotewotICAgIHZhciBwYXRoTmFtZSA9IHdpbmRv
dy5sb2NhdGlvbi5wYXRobmFtZTsKLSAgICB2YXIgY3VycmVudEZpbGVOYW1lID0gcGF0aE5hbWUu
c3Vic3RyaW5nKHBhdGhOYW1lLmxhc3RJbmRleE9mKCcvJykgKyAxKTsKLSAgICB2YXIgaXNTZWxl
Y3RlZCA9IGN1cnJlbnRGaWxlTmFtZSA9PSBmaWxlTmFtZTsKLSAgICB2YXIgb25DbGljayA9ICd1
aS5odG1sLl9sb2FkRGFzaGJvYXJkKFwnJyArIGZpbGVOYW1lICsgJ1wnKSc7Ci0gICAgcmV0dXJu
IHVpLmh0bWwuX3RvcExpbmsoaHRtbCwgb25DbGljaywgaXNTZWxlY3RlZCk7Ci19Ci0KLXVpLmh0
bWwuX3JldmlzaW9uTGluayA9IGZ1bmN0aW9uKHJlc3VsdHMsIGluZGV4LCBrZXksIHNpbmdsZVVy
bFRlbXBsYXRlLCByYW5nZVVybFRlbXBsYXRlKQotewotICAgIHZhciBjdXJyZW50UmV2aXNpb24g
PSBwYXJzZUludChyZXN1bHRzW2tleV1baW5kZXhdLCAxMCk7Ci0gICAgdmFyIHByZXZpb3VzUmV2
aXNpb24gPSBwYXJzZUludChyZXN1bHRzW2tleV1baW5kZXggKyAxXSwgMTApOwotCi0gICAgZnVu
Y3Rpb24gc2luZ2xlVXJsKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzaW5nbGVVcmxUZW1wbGF0
ZS5yZXBsYWNlKCc8cmV2PicsIGN1cnJlbnRSZXZpc2lvbik7Ci0gICAgfQotCi0gICAgZnVuY3Rp
b24gcmFuZ2VVcmwoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJhbmdlVXJsVGVtcGxhdGUucmVw
bGFjZSgnPHJldjE+JywgY3VycmVudFJldmlzaW9uKS5yZXBsYWNlKCc8cmV2Mj4nLCBwcmV2aW91
c1JldmlzaW9uICsgMSk7Ci0gICAgfQotCi0gICAgaWYgKGN1cnJlbnRSZXZpc2lvbiA9PSBwcmV2
aW91c1JldmlzaW9uKQotICAgICAgICByZXR1cm4gJ0F0IDxhIGhyZWY9IicgKyBzaW5nbGVVcmwo
KSArICciPnInICsgY3VycmVudFJldmlzaW9uICAgICsgJzwvYT4nOwotICAgIGVsc2UgaWYgKGN1
cnJlbnRSZXZpc2lvbiAtIHByZXZpb3VzUmV2aXNpb24gPT0gMSkKLSAgICAgICAgcmV0dXJuICc8
YSBocmVmPSInICsgc2luZ2xlVXJsKCkgKyAnIj5yJyArIGN1cnJlbnRSZXZpc2lvbiAgICArICc8
L2E+JzsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAnPGEgaHJlZj0iJyArIHJhbmdlVXJsKCkg
KyAnIj5yJyArIChwcmV2aW91c1JldmlzaW9uICsgMSkgKyAnIHRvIHInICsgY3VycmVudFJldmlz
aW9uICsgJzwvYT4nOwotfQotCi11aS5odG1sLndlYktpdFJldmlzaW9uTGluayA9IGZ1bmN0aW9u
KHJlc3VsdHMsIGluZGV4KQotewotICAgIHJldHVybiB1aS5odG1sLl9yZXZpc2lvbkxpbmsoCi0g
ICAgICAgIHJlc3VsdHMsCi0gICAgICAgIGluZGV4LAotICAgICAgICBXRUJLSVRfUkVWSVNJT05T
X0tFWSwKLSAgICAgICAgJ2h0dHBzOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC88cmV2Pics
Ci0gICAgICAgICdodHRwczovL3RyYWMud2Via2l0Lm9yZy9sb2cvdHJ1bmsvP3Jldj08cmV2MT4m
c3RvcF9yZXY9PHJldjI+JmxpbWl0PTEwMCZ2ZXJib3NlPW9uJyk7Ci19Ci0KLQotdWkuRXJyb3Jz
ID0gZnVuY3Rpb24oKSB7Ci0gICAgdGhpcy5fbWVzc2FnZXMgPSAnJzsKLSAgICAvLyBFbGVtZW50
IHRvIGRpc3BsYXkgdGhlIGVycm9ycyB3aXRoaW4uCi0gICAgdGhpcy5fY29udGFpbmVyRWxlbWVu
dCA9IG51bGw7Ci19Ci0KLXVpLkVycm9ycy5wcm90b3R5cGUgPSB7Ci0gICAgc2hvdzogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl9jb250YWluZXJFbGVtZW50KSB7Ci0gICAg
ICAgICAgICB0aGlzLl9jb250YWluZXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
SDInKTsKLSAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuc3R5bGUuY29sb3IgPSAn
cmVkJzsKLSAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lckVsZW1lbnQuaWQgPSAnZXJyb3JzJzsK
LSAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyRWxl
bWVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICB0aGlzLl9jb250YWluZXJFbGVtZW50LmlubmVy
SFRNTCA9IHRoaXMuX21lc3NhZ2VzOwotICAgIH0sCi0gICAgLy8gUmVjb3JkIGEgbmV3IGVycm9y
IG1lc3NhZ2UuCi0gICAgYWRkRXJyb3I6IGZ1bmN0aW9uKG1lc3NhZ2UpCi0gICAgewotICAgICAg
ICB0aGlzLl9tZXNzYWdlcyArPSBtZXNzYWdlICsgJzxicj4nOwotICAgIH0KLX0KLQotfSkoKTsK
SW5kZXg6IFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvd2VidHJlZW1h
cC5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJv
YXJkcy93ZWJ0cmVlbWFwLmNzcwkocmV2aXNpb24gMjY0NTI3KQorKysgVG9vbHMvVGVzdFJlc3Vs
dFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy93ZWJ0cmVlbWFwLmNzcwkobm9uZXhpc3RlbnQpCkBA
IC0xLDc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0ud2VidHJlZW1hcC1ub2RlIHsKLSAgLyogUmVxdWlyZWQgYXR0cmlidXRl
cy4gKi8KLSAgcG9zaXRpb246IGFic29sdXRlOwotICBvdmVyZmxvdzogaGlkZGVuOyAgIC8qIFRv
IGhpZGUgb3ZlcmxvbmcgY2FwdGlvbnMuICovCi0gIGJhY2tncm91bmQ6IHdoaXRlOyAgLyogTm9k
ZXMgbXVzdCBiZSBvcGFxdWUgZm9yIHpJbmRleCBsYXllcmluZy4gKi8KLSAgYm9yZGVyOiBzb2xp
ZCAxcHggYmxhY2s7ICAvKiBDYWxjdWxhdGlvbnMgYXNzdW1lIDFweCBib3JkZXIuICovCi0KLSAg
LyogT3B0aW9uYWw6IENTUyBhbmltYXRpb24uICovCi0gIC13ZWJraXQtdHJhbnNpdGlvbjogdG9w
ICAgIDAuM3MsCi0gICAgICAgICAgICAgICAgICAgICAgbGVmdCAgIDAuM3MsCi0gICAgICAgICAg
ICAgICAgICAgICAgd2lkdGggIDAuM3MsCi0gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0IDAu
M3M7Ci19Ci0KLS8qIE9wdGlvbmFsOiBoaWdobGlnaHQgbm9kZXMgb24gbW91c2VvdmVyLiAqLwot
LndlYnRyZWVtYXAtbm9kZTpob3ZlciB7Ci0gIGJhY2tncm91bmQ6ICNlZWU7Ci19Ci0KLS8qIE9w
dGlvbmFsOiBEaWZmZXJlbnQgYm9yZGVycyBkZXBlbmRpbmcgb24gbGV2ZWwuICovCi0ud2VidHJl
ZW1hcC1sZXZlbDAgewotICBib3JkZXI6IHNvbGlkIDFweCAjNDQ0OwotfQotLndlYnRyZWVtYXAt
bGV2ZWwxIHsKLSAgYm9yZGVyOiBzb2xpZCAxcHggIzY2NjsKLX0KLS53ZWJ0cmVlbWFwLWxldmVs
MiB7Ci0gIGJvcmRlcjogc29saWQgMXB4ICM4ODg7Ci19Ci0ud2VidHJlZW1hcC1sZXZlbDMgewot
ICBib3JkZXI6IHNvbGlkIDFweCAjYWFhOwotfQotLndlYnRyZWVtYXAtbGV2ZWw0IHsKLSAgYm9y
ZGVyOiBzb2xpZCAxcHggI2NjYzsKLX0KLQotLyogT3B0aW9uYWw6IHN0eWxpbmcgb24gbm9kZSBj
YXB0aW9ucy4gKi8KLS53ZWJ0cmVlbWFwLWNhcHRpb24gewotICBmb250LWZhbWlseTogc2Fucy1z
ZXJpZjsKLSAgZm9udC1zaXplOiAxMXB4OwotICBwYWRkaW5nOiAycHg7Ci0gIHRleHQtYWxpZ246
IGNlbnRlcjsKLX0KLQotLyogT3B0aW9uYWw6IHN0eWxpbmcgb24gY2FwdGlvbnMgb24gbW91c2Ug
aG92ZXIuICovCi0vKi53ZWJ0cmVlbWFwLW5vZGU6aG92ZXIgPiAud2VidHJlZW1hcC1jYXB0aW9u
IHsKLSAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ci19Ki8KClByb3BlcnR5IGNoYW5nZXMg
b246IFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvd2VidHJlZW1hcC5j
c3MKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLUxGClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFRvb2xzL1Rlc3RSZXN1bHRTZXJ2
ZXIvc3RhdGljLWRhc2hib2FyZHMvd2VidHJlZW1hcC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9U
ZXN0UmVzdWx0U2VydmVyL3N0YXRpYy1kYXNoYm9hcmRzL3dlYnRyZWVtYXAuanMJKHJldmlzaW9u
IDI2NDUyNykKKysrIFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3RhdGljLWRhc2hib2FyZHMvd2Vi
dHJlZW1hcC5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDI0MyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlv
bi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gU2l6ZSBvZiBib3Jk
ZXIgYXJvdW5kIG5vZGVzLgotLy8gV2UgY291bGQgc3VwcG9ydCBhcmJpdHJhcnkgYm9yZGVycyB1
c2luZyBnZXRDb21wdXRlZFN0eWxlKCksIGJ1dCBJIGFtCi0vLyBza2VwdGljYWwgdGhlIGV4dHJh
IGNvbXBsZXhpdHkgKGFuZCBwZXJmb3JtYW5jZSBoaXQpIGlzIHdvcnRoIGl0LgotdmFyIGtCb3Jk
ZXJXaWR0aCA9IDE7Ci0KLS8vIFBhZGRpbmcgYXJvdW5kIGNvbnRlbnRzLgotLy8gVE9ETzogZG8g
dGhpcyB3aXRoIGEgbmVzdGVkIGRpdiB0byBhbGxvdyBpdCB0byBiZSBDU1Mtc3R5bGVhYmxlLgot
dmFyIGtQYWRkaW5nID0gNDsKLQotdmFyIGZvY3VzZWQgPSBudWxsOwotCi0vLyBDYWxsYmFjayBm
b3IgZW1iZWRkaW5nIHBhZ2UgdG8gdXBkYXRlIGFmdGVyIGEgZm9jdXMuCi1mdW5jdGlvbiBoYW5k
bGVGb2N1cyh0cmVlKSB7fQotCi1mdW5jdGlvbiBmb2N1cyh0cmVlKSB7Ci0gIGZvY3VzZWQgPSB0
cmVlOwotCi0gIC8vIEhpZGUgYWxsIHZpc2libGUgc2libGluZ3Mgb2YgYWxsIG91ciBhbmNlc3Rv
cnMgYnkgbG93ZXJpbmcgdGhlbS4KLSAgdmFyIGxldmVsID0gMDsKLSAgdmFyIHJvb3QgPSB0cmVl
OwotICB3aGlsZSAocm9vdC5wYXJlbnQpIHsKLSAgICByb290ID0gcm9vdC5wYXJlbnQ7Ci0gICAg
bGV2ZWwgKz0gMTsKLSAgICBmb3IgKHZhciBpID0gMCwgc2libGluZzsgc2libGluZyA9IHJvb3Qu
Y2hpbGRyZW5baV07ICsraSkgewotICAgICAgaWYgKHNpYmxpbmcuZG9tKQotICAgICAgICBzaWJs
aW5nLmRvbS5zdHlsZS56SW5kZXggPSAwOwotICAgIH0KLSAgfQotICB2YXIgd2lkdGggPSByb290
LmRvbS5vZmZzZXRXaWR0aDsKLSAgdmFyIGhlaWdodCA9IHJvb3QuZG9tLm9mZnNldEhlaWdodDsK
LSAgLy8gVW5oaWRlIChyYWlzZSkgYW5kIG1heGltaXplIHVzIGFuZCBvdXIgYW5jZXN0b3JzLgot
ICBmb3IgKHZhciB0ID0gdHJlZTsgdC5wYXJlbnQ7IHQgPSB0LnBhcmVudCkgewotICAgIC8vIFNo
aWZ0IG9mZiBieSBib3JkZXIgc28gd2UgZG9uJ3QgZ2V0IG5lc3RlZCBib3JkZXJzLgotICAgIC8v
IFRPRE86IGFjdHVhbGx5IG1ha2UgbmVzdGVkIGJvcmRlcnMgd29yayAobmVlZCB0byBhZGp1c3Qg
d2lkdGgvaGVpZ2h0KS4KLSAgICBwb3NpdGlvbih0LmRvbSwgLWtCb3JkZXJXaWR0aCwgLWtCb3Jk
ZXJXaWR0aCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgdC5kb20uc3R5bGUuekluZGV4ID0gMTsKLSAg
fQotICAvLyBBbmQgbGF5b3V0IGludG8gdGhlIHRvcG1vc3QgYm94LgotICBsYXlvdXQodHJlZSwg
bGV2ZWwsIHdpZHRoLCBoZWlnaHQpOwotICBoYW5kbGVGb2N1cyh0cmVlKTsKLX0KLQotZnVuY3Rp
b24gbWFrZURvbSh0cmVlLCBsZXZlbCkgewotICB2YXIgZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgnZGl2Jyk7Ci0gIGRvbS5zdHlsZS56SW5kZXggPSAxOwotICBkb20uY2xhc3NOYW1lID0g
J3dlYnRyZWVtYXAtbm9kZSB3ZWJ0cmVlbWFwLWxldmVsJyArIE1hdGgubWluKGxldmVsLCA0KTsK
LQotICBkb20ub25tb3VzZWRvd24gPSBmdW5jdGlvbihlKSB7Ci0gICAgaWYgKGUuYnV0dG9uID09
IDApIHsKLSAgICAgIGlmIChmb2N1c2VkICYmIHRyZWUgPT0gZm9jdXNlZCAmJiBmb2N1c2VkLnBh
cmVudCkgewotICAgICAgICBmb2N1cyhmb2N1c2VkLnBhcmVudCk7Ci0gICAgICB9IGVsc2Ugewot
ICAgICAgICBmb2N1cyh0cmVlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZS5zdG9wUHJvcGFnYXRp
b24oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfTsKLQotICB2YXIgY2FwdGlvbiA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwotICBjYXB0aW9uLmNsYXNzTmFtZSA9ICd3ZWJ0cmVlbWFw
LWNhcHRpb24nOwotICBjYXB0aW9uLmlubmVySFRNTCA9IHRyZWUubmFtZTsKLSAgZG9tLmFwcGVu
ZENoaWxkKGNhcHRpb24pOwotCi0gIHRyZWUuZG9tID0gZG9tOwotICByZXR1cm4gZG9tOwotfQot
Ci1mdW5jdGlvbiBwb3NpdGlvbihkb20sIHgsIHksIHdpZHRoLCBoZWlnaHQpIHsKLSAgLy8gQ1NT
IHdpZHRoL2hlaWdodCBkb2VzIG5vdCBpbmNsdWRlIGJvcmRlci4KLSAgd2lkdGggLT0ga0JvcmRl
cldpZHRoKjI7Ci0gIGhlaWdodCAtPSBrQm9yZGVyV2lkdGgqMjsKLQotICBkb20uc3R5bGUubGVm
dCAgID0geCArICdweCc7Ci0gIGRvbS5zdHlsZS50b3AgICAgPSB5ICsgJ3B4JzsKLSAgZG9tLnN0
eWxlLndpZHRoICA9IE1hdGgubWF4KHdpZHRoLCAwKSArICdweCc7Ci0gIGRvbS5zdHlsZS5oZWln
aHQgPSBNYXRoLm1heChoZWlnaHQsIDApICsgJ3B4JzsKLX0KLQotLy8gR2l2ZW4gYSBsaXN0IG9m
IHJlY3RhbmdsZXMgfG5vZGVzfCwgdGhlIDEtZCBzcGFjZSBhdmFpbGFibGUKLS8vIHxzcGFjZXws
IGFuZCBhIHN0YXJ0aW5nIHJlY3RhbmdsZSBpbmRleCB8c3RhcnR8LCBjb21wdXRlIGFuIHNwYW4g
b2YKLS8vIHJlY3RhbmdsZXMgdGhhdCBvcHRpbWl6ZXMgYSBwbGVhc2FudCBhc3BlY3QgcmF0aW8u
Ci0vLwotLy8gUmV0dXJucyBbZW5kLCBzdW1dLCB3aGVyZSBlbmQgaXMgb25lIHBhc3QgdGhlIGxh
c3QgcmVjdGFuZ2xlIGFuZCBzdW0gaXMgdGhlCi0vLyAyLWQgc3VtIG9mIHRoZSByZWN0YW5nbGVz
JyBhcmVhcy4KLWZ1bmN0aW9uIHNlbGVjdFNwYW4obm9kZXMsIHNwYWNlLCBzdGFydCkgewotICAv
LyBBZGQgcmVjdGFuZ2xlIG9uZSBieSBvbmUsIHN0b3BwaW5nIHdoZW4gYXNwZWN0IHJhdGlvcyBi
ZWdpbiB0byBnbwotICAvLyBiYWQuICBSZXN1bHQgaXMgW3N0YXJ0LGVuZCkgY292ZXJpbmcgdGhl
IGJlc3QgcnVuIGZvciB0aGlzIHNwYW4uCi0gIC8vIGh0dHA6Ly9zY2hvbGFyLmdvb2dsZS5jb20v
c2Nob2xhcj9jbHVzdGVyPTU5NzI1MTIxMDc4NDU2MTU0NzQKLSAgdmFyIG5vZGUgPSBub2Rlc1tz
dGFydF07Ci0gIHZhciBybWluID0gbm9kZS5kYXRhWyckYXJlYSddOyAgLy8gU21hbGxlc3Qgc2Vl
biBjaGlsZCBzbyBmYXIuCi0gIHZhciBybWF4ID0gcm1pbjsgICAgICAgICAgICAgICAgLy8gTGFy
Z2VzdCBjaGlsZC4KLSAgdmFyIHJzdW0gPSAwOyAgICAgICAgICAgICAgICAgICAvLyBTdW0gb2Yg
Y2hpbGRyZW4gaW4gdGhpcyBzcGFuLgotICB2YXIgbGFzdF9zY29yZSA9IDA7ICAgICAgICAgICAg
IC8vIEJlc3Qgc2NvcmUgeWV0IGZvdW5kLgotICBmb3IgKHZhciBlbmQgPSBzdGFydDsgbm9kZSA9
IG5vZGVzW2VuZF07ICsrZW5kKSB7Ci0gICAgdmFyIHNpemUgPSBub2RlLmRhdGFbJyRhcmVhJ107
Ci0gICAgaWYgKHNpemUgPCBybWluKQotICAgICAgcm1pbiA9IHNpemU7Ci0gICAgaWYgKHNpemUg
PiBybWF4KQotICAgICAgcm1heCA9IHNpemU7Ci0gICAgcnN1bSArPSBzaXplOwotCi0gICAgLy8g
VGhpcyBmb3JtdWxhIGlzIGZyb20gdGhlIHBhcGVyLCBidXQgeW91IGNhbiBlYXNpbHkgcHJvdmUg
dG8KLSAgICAvLyB5b3Vyc2VsZiBpdCdzIHRha2luZyB0aGUgbGFyZ2VyIG9mIHRoZSB4L3kgYXNw
ZWN0IHJhdGlvIG9yIHRoZQotICAgIC8vIHkveCBhc3BlY3QgcmF0aW8uICBUaGUgYWRkaXRpb25h
bCBtYWdpYyBmdWRnZSBjb25zdGFudCBvZiA1Ci0gICAgLy8gbWFrZXMgdXMgcHJlZmVyIHdpZGVy
IHJlY3RhbmdsZXMgdG8gdGFsbGVyIG9uZXMuCi0gICAgdmFyIHNjb3JlID0gTWF0aC5tYXgoNSpz
cGFjZSpzcGFjZSpybWF4IC8gKHJzdW0qcnN1bSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
MSpyc3VtKnJzdW0gLyAoc3BhY2Uqc3BhY2Uqcm1pbikpOwotICAgIGlmIChsYXN0X3Njb3JlICYm
IHNjb3JlID4gbGFzdF9zY29yZSkgewotICAgICAgcnN1bSAtPSBzaXplOyAgLy8gVW5kbyBzaXpl
IGFkZGl0aW9uIGZyb20ganVzdCBhYm92ZS4KLSAgICAgIGJyZWFrOwotICAgIH0KLSAgICBsYXN0
X3Njb3JlID0gc2NvcmU7Ci0gIH0KLSAgcmV0dXJuIFtlbmQsIHJzdW1dOwotfQotCi1mdW5jdGlv
biBsYXlvdXQodHJlZSwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQpIHsKLSAgaWYgKCEoJ2NoaWxkcmVu
JyBpbiB0cmVlKSkKLSAgICByZXR1cm47Ci0KLSAgdmFyIHRvdGFsID0gdHJlZS5kYXRhWyckYXJl
YSddOwotCi0gIC8vIFhYWCB3aHkgZG8gSSBuZWVkIGFuIGV4dHJhIC0xLy0yIGhlcmUgZm9yIHdp
ZHRoL2hlaWdodCB0byBsb29rIHJpZ2h0PwotICB2YXIgeDEgPSAwLCB5MSA9IDAsIHgyID0gd2lk
dGggLSAxLCB5MiA9IGhlaWdodCAtIDI7Ci0gIHgxICs9IGtQYWRkaW5nOyB5MSArPSBrUGFkZGlu
ZzsKLSAgeDIgLT0ga1BhZGRpbmc7IHkyIC09IGtQYWRkaW5nOwotICB5MSArPSAxNDsgIC8vIFhY
WCBnZXQgZmlyc3QgY2hpbGQgaGVpZ2h0IGZvciBjYXB0aW9uIHNwYWNpbmcKLQotICB2YXIgcGl4
ZWxzX3RvX3VuaXRzID0gTWF0aC5zcXJ0KHRvdGFsIC8gKCh4MiAtIHgxKSAqICh5MiAtIHkxKSkp
OwotCi0gIGZvciAodmFyIHN0YXJ0ID0gMCwgY2hpbGQ7IGNoaWxkID0gdHJlZS5jaGlsZHJlbltz
dGFydF07ICsrc3RhcnQpIHsKLSAgICBpZiAoeDIgLSB4MSA8IDYwIHx8IHkyIC0geTEgPCA0MCkg
ewotICAgICAgaWYgKGNoaWxkLmRvbSkgewotICAgICAgICBjaGlsZC5kb20uc3R5bGUuekluZGV4
ID0gMDsKLSAgICAgICAgcG9zaXRpb24oY2hpbGQuZG9tLCAtMiwgLTIsIDAsIDApOwotICAgICAg
fQotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgLy8gSW4gdGhlb3J5IHdlIGNhbiBkeW5h
bWljYWxseSBkZWNpZGUgd2hldGhlciB0byBzcGxpdCBpbiB4IG9yIHkgYmFzZWQKLSAgICAvLyBv
biBhc3BlY3QgcmF0aW8uICBJbiBwcmFjdGljZSwgY2hhbmdpbmcgc3BsaXQgZGlyZWN0aW9uIHdp
dGggdGhpcwotICAgIC8vIGxheW91dCBkb2Vzbid0IGxvb2sgdmVyeSBnb29kLgotICAgIC8vICAg
dmFyIHlzcGxpdCA9ICh5MiAtIHkxKSA+ICh4MiAtIHgxKTsKLSAgICB2YXIgeXNwbGl0ID0gdHJ1
ZTsKLQotICAgIHZhciBzcGFjZTsgIC8vIFNwYWNlIGF2YWlsYWJsZSBhbG9uZyBsYXlvdXQgYXhp
cy4KLSAgICBpZiAoeXNwbGl0KQotICAgICAgc3BhY2UgPSAoeTIgLSB5MSkgKiBwaXhlbHNfdG9f
dW5pdHM7Ci0gICAgZWxzZQotICAgICAgc3BhY2UgPSAoeDIgLSB4MSkgKiBwaXhlbHNfdG9fdW5p
dHM7Ci0KLSAgICB2YXIgc3BhbiA9IHNlbGVjdFNwYW4odHJlZS5jaGlsZHJlbiwgc3BhY2UsIHN0
YXJ0KTsKLSAgICB2YXIgZW5kID0gc3BhblswXSwgcnN1bSA9IHNwYW5bMV07Ci0KLSAgICAvLyBO
b3cgdGhhdCB3ZSd2ZSBzZWxlY3RlZCBhIHNwYW4sIGxheSBvdXQgcmVjdGFuZ2xlcyBbc3RhcnQs
ZW5kKSBpbiBvdXIKLSAgICAvLyBhdmFpbGFibGUgc3BhY2UuCi0gICAgdmFyIHggPSB4MSwgeSA9
IHkxOwotICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7Ci0gICAgICBjaGls
ZCA9IHRyZWUuY2hpbGRyZW5baV07Ci0gICAgICBpZiAoIWNoaWxkLmRvbSkgewotICAgICAgICBj
aGlsZC5wYXJlbnQgPSB0cmVlOwotICAgICAgICBjaGlsZC5kb20gPSBtYWtlRG9tKGNoaWxkLCBs
ZXZlbCArIDEpOwotICAgICAgICB0cmVlLmRvbS5hcHBlbmRDaGlsZChjaGlsZC5kb20pOwotICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgY2hpbGQuZG9tLnN0eWxlLnpJbmRleCA9IDE7Ci0gICAgICB9
Ci0gICAgICB2YXIgc2l6ZSA9IGNoaWxkLmRhdGFbJyRhcmVhJ107Ci0gICAgICB2YXIgZnJhYyA9
IHNpemUgLyByc3VtOwotICAgICAgaWYgKHlzcGxpdCkgewotICAgICAgICB3aWR0aCA9IHJzdW0g
LyBzcGFjZTsKLSAgICAgICAgaGVpZ2h0ID0gc2l6ZSAvIHdpZHRoOwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgaGVpZ2h0ID0gcnN1bSAvIHNwYWNlOwotICAgICAgICB3aWR0aCA9IHNpemUgLyBo
ZWlnaHQ7Ci0gICAgICB9Ci0gICAgICB3aWR0aCAvPSBwaXhlbHNfdG9fdW5pdHM7Ci0gICAgICBo
ZWlnaHQgLz0gcGl4ZWxzX3RvX3VuaXRzOwotICAgICAgd2lkdGggPSBNYXRoLnJvdW5kKHdpZHRo
KTsKLSAgICAgIGhlaWdodCA9IE1hdGgucm91bmQoaGVpZ2h0KTsKLSAgICAgIHBvc2l0aW9uKGNo
aWxkLmRvbSwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICBpZiAoJ2NoaWxkcmVuJyBpbiBj
aGlsZCkgewotICAgICAgICBsYXlvdXQoY2hpbGQsIGxldmVsICsgMSwgd2lkdGgsIGhlaWdodCk7
Ci0gICAgICB9Ci0gICAgICBpZiAoeXNwbGl0KQotICAgICAgICB5ICs9IGhlaWdodDsKLSAgICAg
IGVsc2UKLSAgICAgICAgeCArPSB3aWR0aDsKLSAgICB9Ci0KLSAgICAvLyBTaHJpbmsgb3VyIGF2
YWlsYWJsZSBzcGFjZSBiYXNlZCBvbiB0aGUgYW1vdW50IHdlIHVzZWQuCi0gICAgaWYgKHlzcGxp
dCkKLSAgICAgIHgxICs9IE1hdGgucm91bmQoKHJzdW0gLyBzcGFjZSkgLyBwaXhlbHNfdG9fdW5p
dHMpOwotICAgIGVsc2UKLSAgICAgIHkxICs9IE1hdGgucm91bmQoKHJzdW0gLyBzcGFjZSkgLyBw
aXhlbHNfdG9fdW5pdHMpOwotCi0gICAgLy8gZW5kIHBvaW50cyBvbmUgcGFzdCB3aGVyZSB3ZSBl
bmRlZCwgd2hpY2ggaXMgd2hlcmUgd2Ugd2FudCB0bwotICAgIC8vIGJlZ2luIHRoZSBuZXh0IGl0
ZXJhdGlvbiwgYnV0IHN1YnRyYWN0IG9uZSB0byBiYWxhbmNlIHRoZSArKyBpbgotICAgIC8vIHRo
ZSBsb29wLgotICAgIHN0YXJ0ID0gZW5kIC0gMTsKLSAgfQotfQotCi1mdW5jdGlvbiBhcHBlbmRU
cmVlbWFwKGRvbSwgZGF0YSkgewotICB2YXIgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGRvbSwg
bnVsbCk7Ci0gIHZhciB3aWR0aCA9IHBhcnNlSW50KHN0eWxlLndpZHRoKTsKLSAgdmFyIGhlaWdo
dCA9IHBhcnNlSW50KHN0eWxlLmhlaWdodCk7Ci0gIGlmICghZGF0YS5kb20pCi0gICAgbWFrZURv
bShkYXRhLCAwKTsKLSAgZG9tLmFwcGVuZENoaWxkKGRhdGEuZG9tKTsKLSAgcG9zaXRpb24oZGF0
YS5kb20sIDAsIDAsIHdpZHRoLCBoZWlnaHQpOwotICBsYXlvdXQoZGF0YSwgMCwgd2lkdGgsIGhl
aWdodCk7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKUHJvcGVydHkgY2hhbmdlcyBv
bjogVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdGF0aWMtZGFzaGJvYXJkcy93ZWJ0cmVlbWFwLmpz
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1MRgpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBUb29scy9UZXN0UmVzdWx0U2VydmVy
L3N0eWxlc2hlZXRzL2Zvcm0uY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RSZXN1bHRTZXJ2
ZXIvc3R5bGVzaGVldHMvZm9ybS5jc3MJKHJldmlzaW9uIDI2NDUyNykKKysrIFRvb2xzL1Rlc3RS
ZXN1bHRTZXJ2ZXIvc3R5bGVzaGVldHMvZm9ybS5jc3MJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNiAr
MCwwIEBACi1ib2R5IHsKLSAgZm9udC1mYW1pbHk6IFZlcmRhbmE7Ci0gIHBhZGRpbmc6IDBweDsK
LSAgY29sb3I6ICM0NDQ7Ci19Ci1oMSB7Ci0gIGNvbG9yOiAjNDQ0OwotICBmb250LXNpemU6IDE0
cHQ7Ci0gIGZvbnQtc3R5bGU6IGl0YWxpYzsKLSAgbWFyZ2luOiAwcHg7Ci0gIHBhZGRpbmc6IDVw
eDsKLX0KLS5sYWJlbCB7Ci0gIG1hcmdpbjogMXB4OwotICBwYWRkaW5nOiA1cHg7Ci0gIGZvbnQt
c2l6ZTogMTFwdDsKLSAgd2lkdGg6IDkwcHg7Ci19Ci0uaW5wdXR0ZXh0IHsKLSAgZm9udC1zaXpl
OiAxMXB0OwotfQotLmJ1dHRvbiB7Ci0gIG1hcmdpbjogMXB4OwotICBwYWRkaW5nOiAxcHg7Ci0g
IGZvbnQtc2l6ZTogMTFwdDsKLX0KSW5kZXg6IFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3R5bGVz
aGVldHMvbWVudS5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdHls
ZXNoZWV0cy9tZW51LmNzcwkocmV2aXNpb24gMjY0NTI3KQorKysgVG9vbHMvVGVzdFJlc3VsdFNl
cnZlci9zdHlsZXNoZWV0cy9tZW51LmNzcwkobm9uZXhpc3RlbnQpCkBAIC0xLDkgKzAsMCBAQAot
Ym9keSB7Ci0gIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7Ci19
Ci11bCB7Ci0gIGxpc3Qtc3R5bGU6IG5vbmU7Ci19Ci1saSB7Ci0gIHBhZGRpbmc6IDVweCAwOwot
fQpJbmRleDogVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdHlsZXNoZWV0cy90ZXN0ZmlsZS5jc3MK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFJlc3VsdFNlcnZlci9zdHlsZXNoZWV0cy90ZXN0Zmls
ZS5jc3MJKHJldmlzaW9uIDI2NDUyNykKKysrIFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvc3R5bGVz
aGVldHMvdGVzdGZpbGUuY3NzCShub25leGlzdGVudCkKQEAgLTEsMzAgKzAsMCBAQAotYm9keSB7
Ci0gIGZvbnQtZmFtaWx5OiBWZXJkYW5hLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7Ci0gIHBhZGRp
bmc6IDBweDsKLSAgY29sb3I6ICM0NDQ7Ci19Ci1oMSB7Ci0gIGNvbG9yOiAjNDQ0OwotICBmb250
LXNpemU6IDE0cHQ7Ci0gIGZvbnQtc3R5bGU6IGl0YWxpYzsKLSAgbWFyZ2luOiAwcHg7Ci0gIHBh
ZGRpbmc6IDVweDsKLX0KLXRhYmxlIHsKLSAgYm9yZGVyLXNwYWNpbmc6IDBweDsKLX0KLXRoIHsK
LSAgYmFja2dyb3VuZC1jb2xvcjogI0FBQTsKLSAgY29sb3I6IHdoaXRlOwotICB0ZXh0LWFsaWdu
OiBsZWZ0OwotICBwYWRkaW5nOiA1cHg7Ci0gIGZvbnQtc2l6ZTogMTJwdDsKLX0KLXRkIHsKLSAg
Zm9udC1zaXplOiAxMXB0OwotICBwYWRkaW5nOiAzcHg7Ci0gIHRleHQtYWxpZ246IGxlZnQ7Ci19
Ci10cjpob3ZlciB7Ci0gIGJhY2tncm91bmQtY29sb3I6ICNFRUU7Ci19CkluZGV4OiBUb29scy9U
ZXN0UmVzdWx0U2VydmVyL3RlbXBsYXRlcy9tZW51Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
VGVzdFJlc3VsdFNlcnZlci90ZW1wbGF0ZXMvbWVudS5odG1sCShyZXZpc2lvbiAyNjQ1MjcpCisr
KyBUb29scy9UZXN0UmVzdWx0U2VydmVyL3RlbXBsYXRlcy9tZW51Lmh0bWwJKG5vbmV4aXN0ZW50
KQpAQCAtMSwzNSArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxodG1sPgotPGhlYWQ+Ci08dGl0
bGU+VGVzdCBSZXN1bHQgU2VydmVyPC90aXRsZT4KLTxsaW5rIHR5cGU9InRleHQvY3NzIiByZWw9
InN0eWxlc2hlZXQiIGhyZWY9Ii9zdHlsZXNoZWV0cy9tZW51LmNzcyIgLz4KLTwvaGVhZD4KLTxi
b2R5PgotPGgxPlRlc3QgUmVzdWx0IFNlcnZlcjwvaDE+Ci0KLTxkaXYgY2xhc3M9bG9naW4+Ci0g
ICAgeyUgaWYgdXNlcl9lbWFpbCAlfQotICAgIDxzcGFuPnt7IHVzZXJfZW1haWwgfX08L3NwYW4+
Ci0gICAgeyUgZW5kaWYgJX0KLSAgICA8c3Bhbj48YSBocmVmPSJ7eyBsb2dpbl91cmwgfX0iPnt7
IGxvZ2luX3RleHQgfX08L2E+PC9zcGFuPgotPC9kaXY+Ci0KLTxoMj5EYXNoYm9hcmRzPC9oMj4K
LTxkaXY+Ci0gICAgPHVsPnslIGZvciB0aXRsZSxsaW5rIGluIGRhc2hib2FyZHMgJX0KLSAgICAg
ICAgPGxpPgotICAgICAgICAgICAgPGEgaHJlZj0ie3sgbGluayB9fSIgPnt7IHRpdGxlIH19PC9h
PgotICAgICAgICA8L2xpPnslIGVuZGZvciAlfQotICAgIDwvdWw+Ci08L2Rpdj4KLQotPGgyPkpT
T04gZmlsZXM8L2gyPgotPGRpdj4KLSAgICA8dWw+eyUgZm9yIHRpdGxlLGxpbmsgaW4gbWVudSAl
fQotICAgICAgICA8bGk+Ci0gICAgICAgICAgICA8YSBocmVmPSJ7eyBsaW5rIH19IiA+e3sgdGl0
bGUgfX08L2E+Ci0gICAgICAgIDwvbGk+eyUgZW5kZm9yICV9Ci0gICAgPC91bD4KLTwvZGl2Pgot
PC9ib2R5PgotPC9odG1sPgpJbmRleDogVG9vbHMvVGVzdFJlc3VsdFNlcnZlci90ZW1wbGF0ZXMv
c2hvd2ZpbGVsaXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFJlc3VsdFNlcnZlci90
ZW1wbGF0ZXMvc2hvd2ZpbGVsaXN0Lmh0bWwJKHJldmlzaW9uIDI2NDUyNykKKysrIFRvb2xzL1Rl
c3RSZXN1bHRTZXJ2ZXIvdGVtcGxhdGVzL3Nob3dmaWxlbGlzdC5odG1sCShub25leGlzdGVudCkK
QEAgLTEsNTggKzAsMCBAQAotPCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHRpdGxl
PlRlc3QgUmVzdWx0czwvdGl0bGU+Ci08bGluayB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNo
ZWV0IiBocmVmPSIvc3R5bGVzaGVldHMvdGVzdGZpbGUuY3NzIiAvPgotPC9oZWFkPgotPGJvZHk+
Ci08aDE+VGVzdCBSZXN1bHRzCi17JSBpZiBidWlsZGVyIG9yIHRlc3RfdHlwZSBvciBuYW1lICV9
Ci0tIHt7IGJ1aWxkZXIgfX0ge3t0ZXN0X3R5cGUgfX0ge3sgbmFtZSB9fQoteyUgZW5kaWYgJX0K
LTwvaDE+Ci08ZGl2PgotICAgIDx0YWJsZT4KLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRo
Pk1hc3RlcjwvdGg+Ci0gICAgICAgICAgICA8dGg+QnVpbGRlcjwvdGg+Ci0gICAgICAgICAgICA8
dGg+VGVzdCBUeXBlPC90aD4KLSAgICAgICAgICAgIDx0aD5GaWxlPC90aD4KLSAgICAgICAgICAg
IDx0aD5EYXRlPC90aD4KLSAgICAgICAgICAgIHslIGlmIGFkbWluICV9Ci0gICAgICAgICAgICA8
dGg+PC90aD4KLSAgICAgICAgICAgIHslIGVuZGlmICV9Ci0gICAgICAgIHslIGZvciBmaWxlIGlu
IGZpbGVzICV9Ci0gICAgICAgIDx0cj57JSBpZiBmaWxlLmJ1aWxkZXIgYW5kIGZpbGUubmFtZSAl
fQotICAgICAgICAgICAgPHRkPjxhIGhyZWY9Ii90ZXN0ZmlsZT9tYXN0ZXI9e3sgZmlsZS5tYXN0
ZXIgfX0iID4KLSAgICAgICAgICAgICAgICB7eyBmaWxlLm1hc3RlciB9fQotICAgICAgICAgICAg
ICAgIDwvYT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQ+PGEgaHJlZj0iL3Rl
c3RmaWxlP2J1aWxkZXI9e3sgZmlsZS5idWlsZGVyIH19IiA+Ci0gICAgICAgICAgICAgICAge3sg
ZmlsZS5idWlsZGVyIH19Ci0gICAgICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgPC90ZD4K
LSAgICAgICAgICAgIDx0ZD57JSBpZiBmaWxlLnRlc3RfdHlwZSAlfQotICAgICAgICAgICAgICAg
IDxhIGhyZWY9Ii90ZXN0ZmlsZT90ZXN0dHlwZT17eyBmaWxlLnRlc3RfdHlwZSB9fSIgPgotICAg
ICAgICAgICAgICAgIHt7IGZpbGUudGVzdF90eXBlIH19Ci0gICAgICAgICAgICAgICAgPC9hPgot
ICAgICAgICAgICAgICAgIHslIGVuZGlmICV9Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAg
ICAgPHRkPjxhIGhyZWY9Ii90ZXN0ZmlsZT9idWlsZGVyPXt7IGZpbGUuYnVpbGRlciB9fSZuYW1l
PXt7IGZpbGUubmFtZSB9fSIgPgotICAgICAgICAgICAgICAgIHt7IGZpbGUubmFtZSB9fQotICAg
ICAgICAgICAgICAgIDwvYT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQ+e3sg
ZmlsZS5kYXRlfGRhdGU6ImQtTS1ZIEg6aTpzIiB9fQotICAgICAgICAgICAgPC90ZD4KLSAgICAg
ICAgICAgIHslIGlmIGFkbWluICV9Ci0gICAgICAgICAgICA8dGQ+PGEgaHJlZj0iL3Rlc3RmaWxl
L2RlbGV0ZT9rZXk9e3sgZmlsZS5rZXkgfX0mYnVpbGRlcj17eyBidWlsZGVyIH19Jm5hbWU9e3sg
bmFtZSB9fSIgPgotICAgICAgICAgICAgICAgIERlbGV0ZQotICAgICAgICAgICAgICAgIDwvYT4K
LSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICB7JSBlbmRpZiAlfQotICAgICAgICB7JSBl
bmRpZiAlfQotICAgICAgICA8L3RyPgotICAgIHslIGVuZGZvciAlfQotICAgIDwvdGFibGU+Ci08
L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KSW5kZXg6IFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvdGVt
cGxhdGVzL3Nob3dmaWxlbGlzdC5qc29ucAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0UmVzdWx0
U2VydmVyL3RlbXBsYXRlcy9zaG93ZmlsZWxpc3QuanNvbnAJKHJldmlzaW9uIDI2NDUyNykKKysr
IFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvdGVtcGxhdGVzL3Nob3dmaWxlbGlzdC5qc29ucAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDMgKzAsMCBAQAotQ0FMTEJBQ0soW3slIGZvciBmaWxlIGluIGZpbGVz
ICV9Ci0gIHsgImtleSI6ICJ7eyBmaWxlLmtleSB9fSIgfSx7JSBlbmRmb3IgJX0KLV0pOwpJbmRl
eDogVG9vbHMvVGVzdFJlc3VsdFNlcnZlci90ZW1wbGF0ZXMvdXBsb2FkZm9ybS5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1Rlc3RSZXN1bHRTZXJ2ZXIvdGVtcGxhdGVzL3VwbG9hZGZvcm0uaHRt
bAkocmV2aXNpb24gMjY0NTI3KQorKysgVG9vbHMvVGVzdFJlc3VsdFNlcnZlci90ZW1wbGF0ZXMv
dXBsb2FkZm9ybS5odG1sCShub25leGlzdGVudCkKQEAgLTEsMzMgKzAsMCBAQAotPCFET0NUWVBF
IGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotPHRpdGxlPlVwbG9hZCBUZXN0IFJlc3VsdCBGaWxlPC90
aXRsZT4KLTxsaW5rIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9zdHls
ZXNoZWV0cy9mb3JtLmNzcyIgLz4KLTwvaGVhZD4KLTxib2R5PgotPGgxPlVwbG9hZCBUZXN0IFJl
c3VsdCBGaWxlPC9oMT4KLTxmb3JtIGlkPSJ1cGxvYWRGb3JtIiBuYW1lPSJ0ZXN0X3Jlc3VsdF91
cGxvYWQiIGFjY2VwdD0idGV4dC9odG1sIiBhY3Rpb249Int7IHVwbG9hZF91cmwgfX0iIGVuY3R5
cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0icG9zdCI+Ci0gICAgPGJyPgotICAgIDx0
YWJsZT4KLSAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz1sYWJlbD48bGFiZWw+TWFzdGVyOjwv
bGFiZWw+PC90ZD4KLSAgICAgICAgPHRkPjxpbnB1dCBjbGFzcz1pbnB1dHRleHQgdHlwZT0idGV4
dCIgbmFtZT0ibWFzdGVyIiBwbGFjZWhvbGRlcj0id2Via2l0Lm9yZyIvPjwvdGQ+Ci0gICAgPC90
cj4KLSAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz1sYWJlbD48bGFiZWw+QnVpbGRlcjo8L2xh
YmVsPjwvdGQ+Ci0gICAgICAgIDx0ZD48aW5wdXQgY2xhc3M9aW5wdXR0ZXh0IHR5cGU9InRleHQi
IG5hbWU9ImJ1aWxkZXIiIHBsYWNlaG9sZGVyPSJXZWJraXQiLz48L3RkPgotICAgIDwvdHI+Ci0g
ICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9bGFiZWw+PGxhYmVsPlRlc3QgVHlwZTo8L2xhYmVs
PjwvdGQ+Ci0gICAgICAgIDx0ZD48aW5wdXQgY2xhc3M9aW5wdXR0ZXh0IHR5cGU9InRleHQiIG5h
bWU9InRlc3R0eXBlIiBwbGFjZWhvbGRlcj0ibGF5b3V0LXRlc3RzIi8+PC90ZD4KLSAgICA8L3Ry
PgotICAgIDwvdGFibGU+Ci0gICAgPGJyPgotICAgIDxkaXY+PGlucHV0IGNsYXNzPWJ1dHRvbiB0
eXBlPSJjaGVja2JveCIgbmFtZT0iaW5jcmVtZW50YWwiPkluY3JlbWVudGFsIHJlc3VsdHMsIG1l
cmdlIHdpdGggc2VydmVyIGZpbGUuPC9kaXY+Ci0gICAgPGJyPgotICAgIDxkaXY+PGlucHV0IGNs
YXNzPWJ1dHRvbiB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIiBtdWx0aXBsZT48L2Rpdj4KLSAgICA8
YnI+Ci0gICAgPGRpdj48aW5wdXQgY2xhc3M9YnV0dG9uIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlVw
bG9hZCI+PC9kaXY+Ci08L2Zvcm0+Ci08L2JvZHk+Ci08L2h0bWw+Cg==
</data>
<flag name="review"
          id="419963"
          type_id="1"
          status="+"
          setter="jbedard"
    />
          </attachment>
      

    </bug>

</bugzilla>