<?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>222876</bug_id>
          
          <creation_ts>2021-03-06 18:55:29 -0800</creation_ts>
          <short_desc>[perf dashboard] Use async/await in tests for TimeSeriesChart and InteractiveTimeSeriesChart</short_desc>
          <delta_ts>2021-03-08 21:25:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>dewei_zhu</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
    
    <cc>zhifei_fang</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1736884</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-03-06 18:55:29 -0800</bug_when>
    <thetext>All these then chains are annoying. Replace them with async/await.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1736885</commentid>
    <comment_count>1</comment_count>
      <attachid>422517</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-03-06 18:58:49 -0800</bug_when>
    <thetext>Created attachment 422517
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1736963</commentid>
    <comment_count>2</comment_count>
    <who name="">dewei_zhu</who>
    <bug_when>2021-03-07 13:11:30 -0800</bug_when>
    <thetext>r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1737462</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-03-08 21:18:06 -0800</bug_when>
    <thetext>Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1737464</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-03-08 21:24:33 -0800</bug_when>
    <thetext>Committed r274134 (235055@main): &lt;https://commits.webkit.org/235055@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1737465</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-08 21:25:22 -0800</bug_when>
    <thetext>&lt;rdar://problem/75202131&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>422517</attachid>
            <date>2021-03-06 18:58:49 -0800</date>
            <delta_ts>2021-03-07 08:52:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-222876-20210306185848.patch</filename>
            <type>text/plain</type>
            <size>177000</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwkocmV2aXNpb24gMjc0MDQ4KQorKysg
V2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE2IEBACisyMDIxLTAzLTA2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgor
CisgICAgICAgIFtwZXJmIGRhc2hib2FyZF0gVXNlIGFzeW5jL2F3YWl0IGluIHRlc3RzIGZvciBU
aW1lU2VyaWVzQ2hhcnQgYW5kIEludGVyYWN0aXZlVGltZVNlcmllc0NoYXJ0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjI4NzYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgYXN5bmMvYXdhaXQgaW5z
dGVhZCBvZiBjaGFpbmluZyBwcm9taXNlcyBtYW51YWxseSBpbiB0aGUgYnJvd3NlciB0ZXN0cyBm
b3IKKyAgICAgICAgVGltZVNlcmllc0NoYXJ0IGFuZCBJbnRlcmFjdGl2ZVRpbWVTZXJpZXNDaGFy
dCBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5LgorCisgICAgICAgICogYnJvd3Nlci10ZXN0cy9pbnRl
cmFjdGl2ZS10aW1lLXNlcmllcy1jaGFydC10ZXN0cy5qczoKKyAgICAgICAgKiBicm93c2VyLXRl
c3RzL3RpbWUtc2VyaWVzLWNoYXJ0LXRlc3RzLmpzOgorCiAyMDIxLTAzLTA2ICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtwZXJmIGRhc2hib2FyZF0gTW9kZXJu
aXplIFRpbWVTZXJpZXMgYW5kIFRpbWVTZXJpZXNWaWV3CkluZGV4OiBXZWJzaXRlcy9wZXJmLndl
YmtpdC5vcmcvYnJvd3Nlci10ZXN0cy9pbnRlcmFjdGl2ZS10aW1lLXNlcmllcy1jaGFydC10ZXN0
cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy9wZXJmLndlYmtpdC5vcmcvYnJvd3Nlci10ZXN0
cy9pbnRlcmFjdGl2ZS10aW1lLXNlcmllcy1jaGFydC10ZXN0cy5qcwkocmV2aXNpb24gMjc0MDQ2
KQorKysgV2Vic2l0ZXMvcGVyZi53ZWJraXQub3JnL2Jyb3dzZXItdGVzdHMvaW50ZXJhY3RpdmUt
dGltZS1zZXJpZXMtY2hhcnQtdGVzdHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsODQzICsxLDgw
MSBAQAogCiBkZXNjcmliZSgnSW50ZXJhY3RpdmVUaW1lU2VyaWVzQ2hhcnQnLCAoKSA9PiB7CiAK
LSAgICBpdCgnc2hvdWxkIGNoYW5nZSB0aGUgdW5sb2NrZWQgaW5kaWNhdG9yIHRvIHRoZSBwb2lu
dCBjbG9zZXN0IHRvIHRoZSBsYXN0IG1vdXNlIG1vdmUgcG9zaXRpb24nLCAoKSA9PiB7CisgICAg
aXQoJ3Nob3VsZCBjaGFuZ2UgdGhlIHVubG9ja2VkIGluZGljYXRvciB0byB0aGUgcG9pbnQgY2xv
c2VzdCB0byB0aGUgbGFzdCBtb3VzZSBtb3ZlIHBvc2l0aW9uJywgYXN5bmMgKCkgPT4gewogICAg
ICAgICBjb25zdCBjb250ZXh0ID0gbmV3IEJyb3dzaW5nQ29udGV4dCgpOwotICAgICAgICByZXR1
cm4gQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhjb250ZXh0KS50aGVuKCgpID0+IHsKLSAg
ICAgICAgICAgIGNvbnN0IGNoYXJ0ID0gQ2hhcnRUZXN0LmNyZWF0ZUludGVyYWN0aXZlQ2hhcnRX
aXRoU2FtcGxlQ2x1c3Rlcihjb250ZXh0KTsKKyAgICAgICAgYXdhaXQgQ2hhcnRUZXN0LmltcG9y
dENoYXJ0U2NyaXB0cyhjb250ZXh0KTsKIAotICAgICAgICAgICAgY2hhcnQuc2V0RG9tYWluKENo
YXJ0VGVzdC5zYW1wbGVDbHVzdGVyLnN0YXJ0VGltZSwgQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIu
ZW5kVGltZSk7Ci0gICAgICAgICAgICBjaGFydC5mZXRjaE1lYXN1cmVtZW50U2V0cygpOwotICAg
ICAgICAgICAgQ2hhcnRUZXN0LnJlc3BvbmRXaXRoU2FtcGxlQ2x1c3Rlcihjb250ZXh0LnN5bWJv
bHMuTW9ja1JlbW90ZUFQSS5yZXF1ZXN0c1swXSk7CisgICAgICAgIGNvbnN0IGNoYXJ0ID0gQ2hh
cnRUZXN0LmNyZWF0ZUludGVyYWN0aXZlQ2hhcnRXaXRoU2FtcGxlQ2x1c3Rlcihjb250ZXh0KTsK
IAotICAgICAgICAgICAgY29uc3QgaW5kaWNhdG9yQ2hhbmdlQ2FsbHMgPSBbXTsKLSAgICAgICAg
ICAgIGNoYXJ0Lmxpc3RlblRvQWN0aW9uKCdpbmRpY2F0b3JDaGFuZ2UnLCAoLi4uYXJncykgPT4g
aW5kaWNhdG9yQ2hhbmdlQ2FsbHMucHVzaChhcmdzKSk7CisgICAgICAgIGNoYXJ0LnNldERvbWFp
bihDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5zdGFydFRpbWUsIENoYXJ0VGVzdC5zYW1wbGVDbHVz
dGVyLmVuZFRpbWUpOworICAgICAgICBjaGFydC5mZXRjaE1lYXN1cmVtZW50U2V0cygpOworICAg
ICAgICBDaGFydFRlc3QucmVzcG9uZFdpdGhTYW1wbGVDbHVzdGVyKGNvbnRleHQuc3ltYm9scy5N
b2NrUmVtb3RlQVBJLnJlcXVlc3RzWzBdKTsKIAotICAgICAgICAgICAgbGV0IHNlbGVjdGlvbkNo
YW5nZUNvdW50ID0gMDsKLSAgICAgICAgICAgIGNoYXJ0Lmxpc3RlblRvQWN0aW9uKCdzZWxlY3Rp
b25DaGFuZ2UnLCAoKSA9PiBzZWxlY3Rpb25DaGFuZ2VDb3VudCsrKTsKKyAgICAgICAgY29uc3Qg
aW5kaWNhdG9yQ2hhbmdlQ2FsbHMgPSBbXTsKKyAgICAgICAgY2hhcnQubGlzdGVuVG9BY3Rpb24o
J2luZGljYXRvckNoYW5nZScsICguLi5hcmdzKSA9PiBpbmRpY2F0b3JDaGFuZ2VDYWxscy5wdXNo
KGFyZ3MpKTsKIAotICAgICAgICAgICAgbGV0IGNhbnZhczsKLSAgICAgICAgICAgIHJldHVybiB3
YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNvbnRleHQpLnRoZW4oKCkgPT4gewotICAgICAgICAg
ICAgICAgIGV4cGVjdChjaGFydC5jdXJyZW50U2VsZWN0aW9uKCkpLnRvLmJlKG51bGwpOwotICAg
ICAgICAgICAgICAgIGV4cGVjdChjaGFydC5jdXJyZW50SW5kaWNhdG9yKCkpLnRvLmJlKG51bGwp
OwotICAgICAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3JDaGFuZ2VDYWxscykudG8uYmUuZXFs
KFtdKTsKLQotICAgICAgICAgICAgICAgIGNhbnZhcyA9IGNoYXJ0LmNvbnRlbnQoKS5xdWVyeVNl
bGVjdG9yKCdjYW52YXMnKTsKLSAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0gY2FudmFzLmdl
dEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotICAgICAgICAgICAgICAgIGNhbnZhcy5kaXNwYXRjaEV2
ZW50KG5ldyBNb3VzZUV2ZW50KCdtb3VzZW1vdmUnLCB7dGFyZ2V0OiBjYW52YXMsIGNsaWVudFg6
IHJlY3QucmlnaHQgLSAxLCBjbGllbnRZOiByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMiwgY29t
cG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWV9KSk7Ci0KLSAgICAgICAgICAgICAgICBDYW52YXNU
ZXN0LmZpbGxDYW52YXNCZWZvcmVSZWRyYXdDaGVjayhjYW52YXMpOwotICAgICAgICAgICAgICAg
IHJldHVybiB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNvbnRleHQpOwotICAgICAgICAgICAg
fSkudGhlbigoKSA9PiB7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KENhbnZhc1Rlc3QuaGFzQ2Fu
dmFzQmVlblJlZHJhd24oY2FudmFzKSkudG8uYmUodHJ1ZSk7Ci0KLSAgICAgICAgICAgICAgICBl
eHBlY3QoY2hhcnQuY3VycmVudFNlbGVjdGlvbigpKS50by5iZShudWxsKTsKLSAgICAgICAgICAg
ICAgICBjb25zdCBpbmRpY2F0b3IgPSBjaGFydC5jdXJyZW50SW5kaWNhdG9yKCk7Ci0gICAgICAg
ICAgICAgICAgZXhwZWN0KGluZGljYXRvcikudG8ubm90LmJlKG51bGwpOwotICAgICAgICAgICAg
ICAgIGNvbnN0IGN1cnJlbnRWaWV3ID0gY2hhcnQuc2FtcGxlZFRpbWVTZXJpZXNEYXRhKCdjdXJy
ZW50Jyk7Ci0gICAgICAgICAgICAgICAgY29uc3QgbGFzdFBvaW50ID0gY3VycmVudFZpZXcubGFz
dFBvaW50KCk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGluZGljYXRvci52aWV3KS50by5iZShj
dXJyZW50Vmlldyk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGluZGljYXRvci5wb2ludCkudG8u
YmUobGFzdFBvaW50KTsKLSAgICAgICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9yLmlzTG9ja2Vk
KS50by5iZShmYWxzZSk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGluZGljYXRvckNoYW5nZUNh
bGxzKS50by5iZS5lcWwoW1tsYXN0UG9pbnQuaWQsIGZhbHNlXV0pOworICAgICAgICBsZXQgc2Vs
ZWN0aW9uQ2hhbmdlQ291bnQgPSAwOworICAgICAgICBjaGFydC5saXN0ZW5Ub0FjdGlvbignc2Vs
ZWN0aW9uQ2hhbmdlJywgKCkgPT4gc2VsZWN0aW9uQ2hhbmdlQ291bnQrKyk7CiAKLSAgICAgICAg
ICAgICAgICBleHBlY3Qoc2VsZWN0aW9uQ2hhbmdlQ291bnQpLnRvLmJlKDApOwotICAgICAgICAg
ICAgfSk7Ci0gICAgICAgIH0pOworICAgICAgICBhd2FpdCB3YWl0Rm9yQ29tcG9uZW50c1RvUmVu
ZGVyKGNvbnRleHQpOworCisgICAgICAgIGV4cGVjdChjaGFydC5jdXJyZW50U2VsZWN0aW9uKCkp
LnRvLmJlKG51bGwpOworICAgICAgICBleHBlY3QoY2hhcnQuY3VycmVudEluZGljYXRvcigpKS50
by5iZShudWxsKTsKKyAgICAgICAgZXhwZWN0KGluZGljYXRvckNoYW5nZUNhbGxzKS50by5iZS5l
cWwoW10pOworCisgICAgICAgIGNvbnN0IGNhbnZhcyA9IGNoYXJ0LmNvbnRlbnQoKS5xdWVyeVNl
bGVjdG9yKCdjYW52YXMnKTsKKyAgICAgICAgY29uc3QgcmVjdCA9IGNhbnZhcy5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKTsKKyAgICAgICAgY2FudmFzLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZl
bnQoJ21vdXNlbW92ZScsIHt0YXJnZXQ6IGNhbnZhcywgY2xpZW50WDogcmVjdC5yaWdodCAtIDEs
IGNsaWVudFk6IHJlY3QudG9wICsgcmVjdC5oZWlnaHQgLyAyLCBjb21wb3NlZDogdHJ1ZSwgYnVi
YmxlczogdHJ1ZX0pKTsKKworICAgICAgICBDYW52YXNUZXN0LmZpbGxDYW52YXNCZWZvcmVSZWRy
YXdDaGVjayhjYW52YXMpOworICAgICAgICBhd2FpdCB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVy
KGNvbnRleHQpOworCisgICAgICAgIGV4cGVjdChDYW52YXNUZXN0Lmhhc0NhbnZhc0JlZW5SZWRy
YXduKGNhbnZhcykpLnRvLmJlKHRydWUpOworCisgICAgICAgIGV4cGVjdChjaGFydC5jdXJyZW50
U2VsZWN0aW9uKCkpLnRvLmJlKG51bGwpOworICAgICAgICBjb25zdCBpbmRpY2F0b3IgPSBjaGFy
dC5jdXJyZW50SW5kaWNhdG9yKCk7CisgICAgICAgIGV4cGVjdChpbmRpY2F0b3IpLnRvLm5vdC5i
ZShudWxsKTsKKyAgICAgICAgY29uc3QgY3VycmVudFZpZXcgPSBjaGFydC5zYW1wbGVkVGltZVNl
cmllc0RhdGEoJ2N1cnJlbnQnKTsKKyAgICAgICAgY29uc3QgbGFzdFBvaW50ID0gY3VycmVudFZp
ZXcubGFzdFBvaW50KCk7CisgICAgICAgIGV4cGVjdChpbmRpY2F0b3IudmlldykudG8uYmUoY3Vy
cmVudFZpZXcpOworICAgICAgICBleHBlY3QoaW5kaWNhdG9yLnBvaW50KS50by5iZShsYXN0UG9p
bnQpOworICAgICAgICBleHBlY3QoaW5kaWNhdG9yLmlzTG9ja2VkKS50by5iZShmYWxzZSk7Cisg
ICAgICAgIGV4cGVjdChpbmRpY2F0b3JDaGFuZ2VDYWxscykudG8uYmUuZXFsKFtbbGFzdFBvaW50
LmlkLCBmYWxzZV1dKTsKKworICAgICAgICBleHBlY3Qoc2VsZWN0aW9uQ2hhbmdlQ291bnQpLnRv
LmJlKDApOwogICAgIH0pOwogCi0gICAgaXQoJ3Nob3VsZCBsb2NrIHRoZSBpbmRpY2F0b3IgdG8g
dGhlIHBvaW50IGNsb3Nlc3QgdG8gdGhlIGNsaWNrZWQgcG9zaXRpb24nLCAoKSA9PiB7CisgICAg
aXQoJ3Nob3VsZCBsb2NrIHRoZSBpbmRpY2F0b3IgdG8gdGhlIHBvaW50IGNsb3Nlc3QgdG8gdGhl
IGNsaWNrZWQgcG9zaXRpb24nLCBhc3luYyAoKSA9PiB7CiAgICAgICAgIGNvbnN0IGNvbnRleHQg
PSBuZXcgQnJvd3NpbmdDb250ZXh0KCk7Ci0gICAgICAgIHJldHVybiBDaGFydFRlc3QuaW1wb3J0
Q2hhcnRTY3JpcHRzKGNvbnRleHQpLnRoZW4oKCkgPT4gewotICAgICAgICAgICAgY29uc3QgY2hh
cnQgPSBDaGFydFRlc3QuY3JlYXRlSW50ZXJhY3RpdmVDaGFydFdpdGhTYW1wbGVDbHVzdGVyKGNv
bnRleHQpOworICAgICAgICBhd2FpdCBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKGNvbnRl
eHQpOwogCi0gICAgICAgICAgICBjaGFydC5zZXREb21haW4oQ2hhcnRUZXN0LnNhbXBsZUNsdXN0
ZXIuc3RhcnRUaW1lLCBDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5lbmRUaW1lKTsKLSAgICAgICAg
ICAgIGNoYXJ0LmZldGNoTWVhc3VyZW1lbnRTZXRzKCk7Ci0gICAgICAgICAgICBDaGFydFRlc3Qu
cmVzcG9uZFdpdGhTYW1wbGVDbHVzdGVyKGNvbnRleHQuc3ltYm9scy5Nb2NrUmVtb3RlQVBJLnJl
cXVlc3RzWzBdKTsKKyAgICAgICAgY29uc3QgY2hhcnQgPSBDaGFydFRlc3QuY3JlYXRlSW50ZXJh
Y3RpdmVDaGFydFdpdGhTYW1wbGVDbHVzdGVyKGNvbnRleHQpOwogCi0gICAgICAgICAgICBjb25z
dCBpbmRpY2F0b3JDaGFuZ2VDYWxscyA9IFtdOwotICAgICAgICAgICAgY2hhcnQubGlzdGVuVG9B
Y3Rpb24oJ2luZGljYXRvckNoYW5nZScsICguLi5hcmdzKSA9PiBpbmRpY2F0b3JDaGFuZ2VDYWxs
cy5wdXNoKGFyZ3MpKTsKKyAgICAgICAgY2hhcnQuc2V0RG9tYWluKENoYXJ0VGVzdC5zYW1wbGVD
bHVzdGVyLnN0YXJ0VGltZSwgQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuZW5kVGltZSk7CisgICAg
ICAgIGNoYXJ0LmZldGNoTWVhc3VyZW1lbnRTZXRzKCk7CisgICAgICAgIENoYXJ0VGVzdC5yZXNw
b25kV2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4dC5zeW1ib2xzLk1vY2tSZW1vdGVBUEkucmVxdWVz
dHNbMF0pOwogCi0gICAgICAgICAgICBsZXQgc2VsZWN0aW9uQ2hhbmdlQ291bnQgPSAwOwotICAg
ICAgICAgICAgY2hhcnQubGlzdGVuVG9BY3Rpb24oJ3NlbGVjdGlvbkNoYW5nZScsICgpID0+IHNl
bGVjdGlvbkNoYW5nZUNvdW50KyspOworICAgICAgICBjb25zdCBpbmRpY2F0b3JDaGFuZ2VDYWxs
cyA9IFtdOworICAgICAgICBjaGFydC5saXN0ZW5Ub0FjdGlvbignaW5kaWNhdG9yQ2hhbmdlJywg
KC4uLmFyZ3MpID0+IGluZGljYXRvckNoYW5nZUNhbGxzLnB1c2goYXJncykpOwogCi0gICAgICAg
ICAgICBsZXQgY2FudmFzOwotICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JDb21wb25lbnRzVG9S
ZW5kZXIoY29udGV4dCkudGhlbigoKSA9PiB7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGNoYXJ0
LmN1cnJlbnRTZWxlY3Rpb24oKSkudG8uYmUobnVsbCk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0
KGNoYXJ0LmN1cnJlbnRJbmRpY2F0b3IoKSkudG8uYmUobnVsbCk7Ci0gICAgICAgICAgICAgICAg
ZXhwZWN0KGluZGljYXRvckNoYW5nZUNhbGxzKS50by5iZS5lcWwoW10pOwotICAgICAgICAgICAg
ICAgIGNhbnZhcyA9IGNoYXJ0LmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCdjYW52YXMnKTsKLSAg
ICAgICAgICAgICAgICBjb25zdCByZWN0ID0gY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
OwotCi0gICAgICAgICAgICAgICAgY29uc3QgeCA9IHJlY3QucmlnaHQgLSAxOwotICAgICAgICAg
ICAgICAgIGNvbnN0IHkgPSByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMjsKLSAgICAgICAgICAg
ICAgICBjYW52YXMuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnbW91c2Vtb3ZlJywge3Rh
cmdldDogY2FudmFzLCBjbGllbnRYOiB4LCBjbGllbnRZOiB5LCBjb21wb3NlZDogdHJ1ZSwgYnVi
YmxlczogdHJ1ZX0pKTsKLSAgICAgICAgICAgICAgICBjYW52YXMuZGlzcGF0Y2hFdmVudChuZXcg
TW91c2VFdmVudCgnbW91c2Vkb3duJywge3RhcmdldDogY2FudmFzLCBjbGllbnRYOiB4LCBjbGll
bnRZOiB5LCBjb21wb3NlZDogdHJ1ZSwgYnViYmxlczogdHJ1ZX0pKTsKLSAgICAgICAgICAgICAg
ICBjYW52YXMuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnbW91c2Vtb3ZlJywge3Rhcmdl
dDogY2FudmFzLCBjbGllbnRYOiB4IC0gMC41LCBjbGllbnRZOiB5ICsgMC41LCBjb21wb3NlZDog
dHJ1ZSwgYnViYmxlczogdHJ1ZX0pKTsKLSAgICAgICAgICAgICAgICBjYW52YXMuZGlzcGF0Y2hF
dmVudChuZXcgTW91c2VFdmVudCgnbW91c2V1cCcsIHt0YXJnZXQ6IGNhbnZhcywgY2xpZW50WDog
eCAtIDAuNSwgY2xpZW50WTogeSArIDAuNSwgY29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWV9
KSk7Ci0gICAgICAgICAgICAgICAgY2FudmFzLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQo
J2NsaWNrJywge3RhcmdldDogY2FudmFzLCBjbGllbnRYOiB4IC0gMC41LCBjbGllbnRZOiB5ICsg
MC41LCBjb21wb3NlZDogdHJ1ZSwgYnViYmxlczogdHJ1ZX0pKTsKLQotICAgICAgICAgICAgICAg
IENhbnZhc1Rlc3QuZmlsbENhbnZhc0JlZm9yZVJlZHJhd0NoZWNrKGNhbnZhcyk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHdhaXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29udGV4dCk7Ci0gICAg
ICAgICAgICB9KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICBleHBlY3QoQ2FudmFzVGVz
dC5oYXNDYW52YXNCZWVuUmVkcmF3bihjYW52YXMpKS50by5iZSh0cnVlKTsKLQotICAgICAgICAg
ICAgICAgIGNvbnN0IGN1cnJlbnRWaWV3ID0gY2hhcnQuc2FtcGxlZFRpbWVTZXJpZXNEYXRhKCdj
dXJyZW50Jyk7Ci0gICAgICAgICAgICAgICAgY29uc3QgbGFzdFBvaW50ID0gY3VycmVudFZpZXcu
bGFzdFBvaW50KCk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGNoYXJ0LmN1cnJlbnRTZWxlY3Rp
b24oKSkudG8uYmUobnVsbCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgaW5kaWNhdG9yID0gY2hh
cnQuY3VycmVudEluZGljYXRvcigpOwotICAgICAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3Iu
dmlldykudG8uYmUoY3VycmVudFZpZXcpOwotICAgICAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0
b3IucG9pbnQpLnRvLmJlKGxhc3RQb2ludCk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGluZGlj
YXRvci5pc0xvY2tlZCkudG8uYmUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGluZGlj
YXRvckNoYW5nZUNhbGxzKS50by5iZS5lcWwoW1tsYXN0UG9pbnQuaWQsIGZhbHNlXSwgW2xhc3RQ
b2ludC5pZCwgdHJ1ZV1dKTsKKyAgICAgICAgbGV0IHNlbGVjdGlvbkNoYW5nZUNvdW50ID0gMDsK
KyAgICAgICAgY2hhcnQubGlzdGVuVG9BY3Rpb24oJ3NlbGVjdGlvbkNoYW5nZScsICgpID0+IHNl
bGVjdGlvbkNoYW5nZUNvdW50KyspOwogCi0gICAgICAgICAgICAgICAgZXhwZWN0KHNlbGVjdGlv
bkNoYW5nZUNvdW50KS50by5iZSgwKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKKyAg
ICAgICAgYXdhaXQgd2FpdEZvckNvbXBvbmVudHNUb1JlbmRlcihjb250ZXh0KTsKKworICAgICAg
ICBleHBlY3QoY2hhcnQuY3VycmVudFNlbGVjdGlvbigpKS50by5iZShudWxsKTsKKyAgICAgICAg
ZXhwZWN0KGNoYXJ0LmN1cnJlbnRJbmRpY2F0b3IoKSkudG8uYmUobnVsbCk7CisgICAgICAgIGV4
cGVjdChpbmRpY2F0b3JDaGFuZ2VDYWxscykudG8uYmUuZXFsKFtdKTsKKyAgICAgICAgY29uc3Qg
Y2FudmFzID0gY2hhcnQuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJ2NhbnZhcycpOworICAgICAg
ICBjb25zdCByZWN0ID0gY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworCisgICAgICAg
IGNvbnN0IHggPSByZWN0LnJpZ2h0IC0gMTsKKyAgICAgICAgY29uc3QgeSA9IHJlY3QudG9wICsg
cmVjdC5oZWlnaHQgLyAyOworICAgICAgICBjYW52YXMuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VF
dmVudCgnbW91c2Vtb3ZlJywge3RhcmdldDogY2FudmFzLCBjbGllbnRYOiB4LCBjbGllbnRZOiB5
LCBjb21wb3NlZDogdHJ1ZSwgYnViYmxlczogdHJ1ZX0pKTsKKyAgICAgICAgY2FudmFzLmRpc3Bh
dGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ21vdXNlZG93bicsIHt0YXJnZXQ6IGNhbnZhcywgY2xp
ZW50WDogeCwgY2xpZW50WTogeSwgY29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWV9KSk7Cisg
ICAgICAgIGNhbnZhcy5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdtb3VzZW1vdmUnLCB7
dGFyZ2V0OiBjYW52YXMsIGNsaWVudFg6IHggLSAwLjUsIGNsaWVudFk6IHkgKyAwLjUsIGNvbXBv
c2VkOiB0cnVlLCBidWJibGVzOiB0cnVlfSkpOworICAgICAgICBjYW52YXMuZGlzcGF0Y2hFdmVu
dChuZXcgTW91c2VFdmVudCgnbW91c2V1cCcsIHt0YXJnZXQ6IGNhbnZhcywgY2xpZW50WDogeCAt
IDAuNSwgY2xpZW50WTogeSArIDAuNSwgY29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWV9KSk7
CisgICAgICAgIGNhbnZhcy5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdjbGljaycsIHt0
YXJnZXQ6IGNhbnZhcywgY2xpZW50WDogeCAtIDAuNSwgY2xpZW50WTogeSArIDAuNSwgY29tcG9z
ZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWV9KSk7CisKKyAgICAgICAgQ2FudmFzVGVzdC5maWxsQ2Fu
dmFzQmVmb3JlUmVkcmF3Q2hlY2soY2FudmFzKTsKKyAgICAgICAgYXdhaXQgd2FpdEZvckNvbXBv
bmVudHNUb1JlbmRlcihjb250ZXh0KTsKKworICAgICAgICBleHBlY3QoQ2FudmFzVGVzdC5oYXND
YW52YXNCZWVuUmVkcmF3bihjYW52YXMpKS50by5iZSh0cnVlKTsKKworICAgICAgICBjb25zdCBj
dXJyZW50VmlldyA9IGNoYXJ0LnNhbXBsZWRUaW1lU2VyaWVzRGF0YSgnY3VycmVudCcpOworICAg
ICAgICBjb25zdCBsYXN0UG9pbnQgPSBjdXJyZW50Vmlldy5sYXN0UG9pbnQoKTsKKyAgICAgICAg
ZXhwZWN0KGNoYXJ0LmN1cnJlbnRTZWxlY3Rpb24oKSkudG8uYmUobnVsbCk7CisgICAgICAgIGNv
bnN0IGluZGljYXRvciA9IGNoYXJ0LmN1cnJlbnRJbmRpY2F0b3IoKTsKKyAgICAgICAgZXhwZWN0
KGluZGljYXRvci52aWV3KS50by5iZShjdXJyZW50Vmlldyk7CisgICAgICAgIGV4cGVjdChpbmRp
Y2F0b3IucG9pbnQpLnRvLmJlKGxhc3RQb2ludCk7CisgICAgICAgIGV4cGVjdChpbmRpY2F0b3Iu
aXNMb2NrZWQpLnRvLmJlKHRydWUpOworICAgICAgICBleHBlY3QoaW5kaWNhdG9yQ2hhbmdlQ2Fs
bHMpLnRvLmJlLmVxbChbW2xhc3RQb2ludC5pZCwgZmFsc2VdLCBbbGFzdFBvaW50LmlkLCB0cnVl
XV0pOworCisgICAgICAgIGV4cGVjdChzZWxlY3Rpb25DaGFuZ2VDb3VudCkudG8uYmUoMCk7CiAg
ICAgfSk7CiAKLSAgICBpdCgnc2hvdWxkIGNsZWFyIHRoZSB1bmxvY2tlZCBpbmRpY2F0b3Igd2hl
biB0aGUgbW91c2UgY3Vyc29yIGV4aXRzIHRoZSBjaGFydCcsICgpID0+IHsKKyAgICBpdCgnc2hv
dWxkIGNsZWFyIHRoZSB1bmxvY2tlZCBpbmRpY2F0b3Igd2hlbiB0aGUgbW91c2UgY3Vyc29yIGV4
aXRzIHRoZSBjaGFydCcsIGFzeW5jICgpID0+IHsKICAgICAgICAgY29uc3QgY29udGV4dCA9IG5l
dyBCcm93c2luZ0NvbnRleHQoKTsKLSAgICAgICAgcmV0dXJuIENoYXJ0VGVzdC5pbXBvcnRDaGFy
dFNjcmlwdHMoY29udGV4dCkudGhlbigoKSA9PiB7Ci0gICAgICAgICAgICBjb25zdCBjaGFydCA9
IENoYXJ0VGVzdC5jcmVhdGVJbnRlcmFjdGl2ZUNoYXJ0V2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4
dCk7CisgICAgICAgIGF3YWl0IENoYXJ0VGVzdC5pbXBvcnRDaGFydFNjcmlwdHMoY29udGV4dCk7
CiAKLSAgICAgICAgICAgIGNoYXJ0LnNldERvbWFpbihDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5z
dGFydFRpbWUsIENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLmVuZFRpbWUpOwotICAgICAgICAgICAg
Y2hhcnQuZmV0Y2hNZWFzdXJlbWVudFNldHMoKTsKLSAgICAgICAgICAgIENoYXJ0VGVzdC5yZXNw
b25kV2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4dC5zeW1ib2xzLk1vY2tSZW1vdGVBUEkucmVxdWVz
dHNbMF0pOworICAgICAgICBjb25zdCBjaGFydCA9IENoYXJ0VGVzdC5jcmVhdGVJbnRlcmFjdGl2
ZUNoYXJ0V2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4dCk7CiAKLSAgICAgICAgICAgIGNvbnN0IGlu
ZGljYXRvckNoYW5nZUNhbGxzID0gW107Ci0gICAgICAgICAgICBjaGFydC5saXN0ZW5Ub0FjdGlv
bignaW5kaWNhdG9yQ2hhbmdlJywgKC4uLmFyZ3MpID0+IGluZGljYXRvckNoYW5nZUNhbGxzLnB1
c2goYXJncykpOworICAgICAgICBjaGFydC5zZXREb21haW4oQ2hhcnRUZXN0LnNhbXBsZUNsdXN0
ZXIuc3RhcnRUaW1lLCBDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5lbmRUaW1lKTsKKyAgICAgICAg
Y2hhcnQuZmV0Y2hNZWFzdXJlbWVudFNldHMoKTsKKyAgICAgICAgQ2hhcnRUZXN0LnJlc3BvbmRX
aXRoU2FtcGxlQ2x1c3Rlcihjb250ZXh0LnN5bWJvbHMuTW9ja1JlbW90ZUFQSS5yZXF1ZXN0c1sw
XSk7CiAKLSAgICAgICAgICAgIGxldCBzZWxlY3Rpb25DaGFuZ2VDb3VudCA9IDA7Ci0gICAgICAg
ICAgICBjaGFydC5saXN0ZW5Ub0FjdGlvbignc2VsZWN0aW9uQ2hhbmdlJywgKCkgPT4gc2VsZWN0
aW9uQ2hhbmdlQ291bnQrKyk7CisgICAgICAgIGNvbnN0IGluZGljYXRvckNoYW5nZUNhbGxzID0g
W107CisgICAgICAgIGNoYXJ0Lmxpc3RlblRvQWN0aW9uKCdpbmRpY2F0b3JDaGFuZ2UnLCAoLi4u
YXJncykgPT4gaW5kaWNhdG9yQ2hhbmdlQ2FsbHMucHVzaChhcmdzKSk7CiAKLSAgICAgICAgICAg
IGxldCBjYW52YXM7Ci0gICAgICAgICAgICBsZXQgcmVjdDsKLSAgICAgICAgICAgIGxldCBsYXN0
UG9pbnQ7Ci0gICAgICAgICAgICByZXR1cm4gd2FpdEZvckNvbXBvbmVudHNUb1JlbmRlcihjb250
ZXh0KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICBleHBlY3QoY2hhcnQuY3VycmVudFNl
bGVjdGlvbigpKS50by5iZShudWxsKTsKLSAgICAgICAgICAgICAgICBleHBlY3QoY2hhcnQuY3Vy
cmVudEluZGljYXRvcigpKS50by5iZShudWxsKTsKLSAgICAgICAgICAgICAgICBleHBlY3QoaW5k
aWNhdG9yQ2hhbmdlQ2FsbHMpLnRvLmJlLmVxbChbXSk7Ci0KLSAgICAgICAgICAgICAgICBjYW52
YXMgPSBjaGFydC5jb250ZW50KCkucXVlcnlTZWxlY3RvcignY2FudmFzJyk7Ci0gICAgICAgICAg
ICAgICAgcmVjdCA9IGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICAgICAgICAg
ICAgICBjYW52YXMuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnbW91c2Vtb3ZlJywge3Rh
cmdldDogY2FudmFzLCBjbGllbnRYOiByZWN0LnJpZ2h0IC0gMSwgY2xpZW50WTogcmVjdC50b3Ag
KyByZWN0LmhlaWdodCAvIDIsIGNvbXBvc2VkOiB0cnVlLCBidWJibGVzOiB0cnVlfSkpOwotCi0g
ICAgICAgICAgICAgICAgQ2FudmFzVGVzdC5maWxsQ2FudmFzQmVmb3JlUmVkcmF3Q2hlY2soY2Fu
dmFzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gd2FpdEZvckNvbXBvbmVudHNUb1JlbmRlcihj
b250ZXh0KTsKLSAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewotICAgICAgICAgICAgICAgIGV4
cGVjdChDYW52YXNUZXN0Lmhhc0NhbnZhc0JlZW5SZWRyYXduKGNhbnZhcykpLnRvLmJlKHRydWUp
OwotCi0gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZpZXcgPSBjaGFydC5zYW1wbGVkVGlt
ZVNlcmllc0RhdGEoJ2N1cnJlbnQnKTsKLSAgICAgICAgICAgICAgICBsYXN0UG9pbnQgPSBjdXJy
ZW50Vmlldy5sYXN0UG9pbnQoKTsKLSAgICAgICAgICAgICAgICBleHBlY3QoY2hhcnQuY3VycmVu
dFNlbGVjdGlvbigpKS50by5iZShudWxsKTsKLSAgICAgICAgICAgICAgICBjb25zdCBpbmRpY2F0
b3IgPSBjaGFydC5jdXJyZW50SW5kaWNhdG9yKCk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGlu
ZGljYXRvci52aWV3KS50by5iZShjdXJyZW50Vmlldyk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0
KGluZGljYXRvci5wb2ludCkudG8uYmUobGFzdFBvaW50KTsKLSAgICAgICAgICAgICAgICBleHBl
Y3QoaW5kaWNhdG9yLmlzTG9ja2VkKS50by5iZShmYWxzZSk7Ci0gICAgICAgICAgICAgICAgZXhw
ZWN0KGluZGljYXRvckNoYW5nZUNhbGxzKS50by5iZS5lcWwoW1tsYXN0UG9pbnQuaWQsIGZhbHNl
XV0pOwotCi0gICAgICAgICAgICAgICAgY2FudmFzLnBhcmVudE5vZGUuZGlzcGF0Y2hFdmVudChu
ZXcgTW91c2VFdmVudCgnbW91c2Vtb3ZlJywge3RhcmdldDogY2FudmFzLCBjbGllbnRYOiByZWN0
LnJpZ2h0ICsgNTAsIGNsaWVudFk6IHJlY3QuYm90dG9tICsgNTAsIGNvbXBvc2VkOiB0cnVlLCBi
dWJibGVzOiB0cnVlfSkpOwotICAgICAgICAgICAgICAgIGNhbnZhcy5kaXNwYXRjaEV2ZW50KG5l
dyBNb3VzZUV2ZW50KCdtb3VzZWxlYXZlJywge3RhcmdldDogY2FudmFzLCBjbGllbnRYOiByZWN0
LnJpZ2h0ICsgNTAsIGNsaWVudFk6IHJlY3QuYm90dG9tICsgNTAsIGNvbXBvc2VkOiB0cnVlLCBi
dWJibGVzOiB0cnVlfSkpOwotCi0gICAgICAgICAgICAgICAgQ2FudmFzVGVzdC5maWxsQ2FudmFz
QmVmb3JlUmVkcmF3Q2hlY2soY2FudmFzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gd2FpdEZv
ckNvbXBvbmVudHNUb1JlbmRlcihjb250ZXh0KTsKLSAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4g
ewotICAgICAgICAgICAgICAgIGV4cGVjdChDYW52YXNUZXN0Lmhhc0NhbnZhc0JlZW5SZWRyYXdu
KGNhbnZhcykpLnRvLmJlKHRydWUpOwotCi0gICAgICAgICAgICAgICAgZXhwZWN0KGNoYXJ0LmN1
cnJlbnRTZWxlY3Rpb24oKSkudG8uYmUobnVsbCk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGNo
YXJ0LmN1cnJlbnRJbmRpY2F0b3IoKSkudG8uYmUobnVsbCk7Ci0gICAgICAgICAgICAgICAgZXhw
ZWN0KGluZGljYXRvckNoYW5nZUNhbGxzKS50by5iZS5lcWwoW1tsYXN0UG9pbnQuaWQsIGZhbHNl
XSwgW251bGwsIGZhbHNlXV0pOworICAgICAgICBsZXQgc2VsZWN0aW9uQ2hhbmdlQ291bnQgPSAw
OworICAgICAgICBjaGFydC5saXN0ZW5Ub0FjdGlvbignc2VsZWN0aW9uQ2hhbmdlJywgKCkgPT4g
c2VsZWN0aW9uQ2hhbmdlQ291bnQrKyk7CiAKLSAgICAgICAgICAgICAgICBleHBlY3Qoc2VsZWN0
aW9uQ2hhbmdlQ291bnQpLnRvLmJlKDApOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwor
ICAgICAgICBhd2FpdCB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNvbnRleHQpOworCisgICAg
ICAgIGV4cGVjdChjaGFydC5jdXJyZW50U2VsZWN0aW9uKCkpLnRvLmJlKG51bGwpOworICAgICAg
ICBleHBlY3QoY2hhcnQuY3VycmVudEluZGljYXRvcigpKS50by5iZShudWxsKTsKKyAgICAgICAg
ZXhwZWN0KGluZGljYXRvckNoYW5nZUNhbGxzKS50by5iZS5lcWwoW10pOworCisgICAgICAgIGNv
bnN0IGNhbnZhcyA9IGNoYXJ0LmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCdjYW52YXMnKTsKKyAg
ICAgICAgY29uc3QgcmVjdCA9IGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAg
ICAgY2FudmFzLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ21vdXNlbW92ZScsIHt0YXJn
ZXQ6IGNhbnZhcywgY2xpZW50WDogcmVjdC5yaWdodCAtIDEsIGNsaWVudFk6IHJlY3QudG9wICsg
cmVjdC5oZWlnaHQgLyAyLCBjb21wb3NlZDogdHJ1ZSwgYnViYmxlczogdHJ1ZX0pKTsKKworICAg
ICAgICBDYW52YXNUZXN0LmZpbGxDYW52YXNCZWZvcmVSZWRyYXdDaGVjayhjYW52YXMpOworICAg
ICAgICBhd2FpdCB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNvbnRleHQpOworCisgICAgICAg
IGV4cGVjdChDYW52YXNUZXN0Lmhhc0NhbnZhc0JlZW5SZWRyYXduKGNhbnZhcykpLnRvLmJlKHRy
dWUpOworCisgICAgICAgIGNvbnN0IGN1cnJlbnRWaWV3ID0gY2hhcnQuc2FtcGxlZFRpbWVTZXJp
ZXNEYXRhKCdjdXJyZW50Jyk7CisgICAgICAgIGNvbnN0IGxhc3RQb2ludCA9IGN1cnJlbnRWaWV3
Lmxhc3RQb2ludCgpOworICAgICAgICBleHBlY3QoY2hhcnQuY3VycmVudFNlbGVjdGlvbigpKS50
by5iZShudWxsKTsKKyAgICAgICAgY29uc3QgaW5kaWNhdG9yID0gY2hhcnQuY3VycmVudEluZGlj
YXRvcigpOworICAgICAgICBleHBlY3QoaW5kaWNhdG9yLnZpZXcpLnRvLmJlKGN1cnJlbnRWaWV3
KTsKKyAgICAgICAgZXhwZWN0KGluZGljYXRvci5wb2ludCkudG8uYmUobGFzdFBvaW50KTsKKyAg
ICAgICAgZXhwZWN0KGluZGljYXRvci5pc0xvY2tlZCkudG8uYmUoZmFsc2UpOworICAgICAgICBl
eHBlY3QoaW5kaWNhdG9yQ2hhbmdlQ2FsbHMpLnRvLmJlLmVxbChbW2xhc3RQb2ludC5pZCwgZmFs
c2VdXSk7CisKKyAgICAgICAgY2FudmFzLnBhcmVudE5vZGUuZGlzcGF0Y2hFdmVudChuZXcgTW91
c2VFdmVudCgnbW91c2Vtb3ZlJywge3RhcmdldDogY2FudmFzLCBjbGllbnRYOiByZWN0LnJpZ2h0
ICsgNTAsIGNsaWVudFk6IHJlY3QuYm90dG9tICsgNTAsIGNvbXBvc2VkOiB0cnVlLCBidWJibGVz
OiB0cnVlfSkpOworICAgICAgICBjYW52YXMuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgn
bW91c2VsZWF2ZScsIHt0YXJnZXQ6IGNhbnZhcywgY2xpZW50WDogcmVjdC5yaWdodCArIDUwLCBj
bGllbnRZOiByZWN0LmJvdHRvbSArIDUwLCBjb21wb3NlZDogdHJ1ZSwgYnViYmxlczogdHJ1ZX0p
KTsKKworICAgICAgICBDYW52YXNUZXN0LmZpbGxDYW52YXNCZWZvcmVSZWRyYXdDaGVjayhjYW52
YXMpOworICAgICAgICBhd2FpdCB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNvbnRleHQpOwor
CisgICAgICAgIGV4cGVjdChDYW52YXNUZXN0Lmhhc0NhbnZhc0JlZW5SZWRyYXduKGNhbnZhcykp
LnRvLmJlKHRydWUpOworCisgICAgICAgIGV4cGVjdChjaGFydC5jdXJyZW50U2VsZWN0aW9uKCkp
LnRvLmJlKG51bGwpOworICAgICAgICBleHBlY3QoY2hhcnQuY3VycmVudEluZGljYXRvcigpKS50
by5iZShudWxsKTsKKyAgICAgICAgZXhwZWN0KGluZGljYXRvckNoYW5nZUNhbGxzKS50by5iZS5l
cWwoW1tsYXN0UG9pbnQuaWQsIGZhbHNlXSwgW251bGwsIGZhbHNlXV0pOworCisgICAgICAgIGV4
cGVjdChzZWxlY3Rpb25DaGFuZ2VDb3VudCkudG8uYmUoMCk7CiAgICAgfSk7CiAKLSAgICBpdCgn
c2hvdWxkIG5vdCBjbGVhciB0aGUgbG9ja2VkIGluZGljYXRvciB3aGVuIHRoZSBtb3VzZSBjdXJz
b3IgZXhpdHMgdGhlIGNoYXJ0JywgKCkgPT4geworICAgIGl0KCdzaG91bGQgbm90IGNsZWFyIHRo
ZSBsb2NrZWQgaW5kaWNhdG9yIHdoZW4gdGhlIG1vdXNlIGN1cnNvciBleGl0cyB0aGUgY2hhcnQn
LCBhc3luYyAoKSA9PiB7CiAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQnJvd3NpbmdDb250
ZXh0KCk7Ci0gICAgICAgIHJldHVybiBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKGNvbnRl
eHQpLnRoZW4oKCkgPT4gewotICAgICAgICAgICAgY29uc3QgY2hhcnQgPSBDaGFydFRlc3QuY3Jl
YXRlSW50ZXJhY3RpdmVDaGFydFdpdGhTYW1wbGVDbHVzdGVyKGNvbnRleHQpOworICAgICAgICBh
d2FpdCBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKGNvbnRleHQpOworICAgICAgICBjb25z
dCBjaGFydCA9IENoYXJ0VGVzdC5jcmVhdGVJbnRlcmFjdGl2ZUNoYXJ0V2l0aFNhbXBsZUNsdXN0
ZXIoY29udGV4dCk7CiAKLSAgICAgICAgICAgIGNoYXJ0LnNldERvbWFpbihDaGFydFRlc3Quc2Ft
cGxlQ2x1c3Rlci5zdGFydFRpbWUsIENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLmVuZFRpbWUpOwot
ICAgICAgICAgICAgY2hhcnQuZmV0Y2hNZWFzdXJlbWVudFNldHMoKTsKLSAgICAgICAgICAgIENo
YXJ0VGVzdC5yZXNwb25kV2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4dC5zeW1ib2xzLk1vY2tSZW1v
dGVBUEkucmVxdWVzdHNbMF0pOworICAgICAgICBjaGFydC5zZXREb21haW4oQ2hhcnRUZXN0LnNh
bXBsZUNsdXN0ZXIuc3RhcnRUaW1lLCBDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5lbmRUaW1lKTsK
KyAgICAgICAgY2hhcnQuZmV0Y2hNZWFzdXJlbWVudFNldHMoKTsKKyAgICAgICAgQ2hhcnRUZXN0
LnJlc3BvbmRXaXRoU2FtcGxlQ2x1c3Rlcihjb250ZXh0LnN5bWJvbHMuTW9ja1JlbW90ZUFQSS5y
ZXF1ZXN0c1swXSk7CiAKLSAgICAgICAgICAgIGNvbnN0IGluZGljYXRvckNoYW5nZUNhbGxzID0g
W107Ci0gICAgICAgICAgICBjaGFydC5saXN0ZW5Ub0FjdGlvbignaW5kaWNhdG9yQ2hhbmdlJywg
KC4uLmFyZ3MpID0+IGluZGljYXRvckNoYW5nZUNhbGxzLnB1c2goYXJncykpOworICAgICAgICBj
b25zdCBpbmRpY2F0b3JDaGFuZ2VDYWxscyA9IFtdOworICAgICAgICBjaGFydC5saXN0ZW5Ub0Fj
dGlvbignaW5kaWNhdG9yQ2hhbmdlJywgKC4uLmFyZ3MpID0+IGluZGljYXRvckNoYW5nZUNhbGxz
LnB1c2goYXJncykpOwogCi0gICAgICAgICAgICBsZXQgc2VsZWN0aW9uQ2hhbmdlQ291bnQgPSAw
OwotICAgICAgICAgICAgY2hhcnQubGlzdGVuVG9BY3Rpb24oJ3NlbGVjdGlvbkNoYW5nZScsICgp
ID0+IHNlbGVjdGlvbkNoYW5nZUNvdW50KyspOworICAgICAgICBsZXQgc2VsZWN0aW9uQ2hhbmdl
Q291bnQgPSAwOworICAgICAgICBjaGFydC5saXN0ZW5Ub0FjdGlvbignc2VsZWN0aW9uQ2hhbmdl
JywgKCkgPT4gc2VsZWN0aW9uQ2hhbmdlQ291bnQrKyk7CiAKLSAgICAgICAgICAgIGxldCBjYW52
YXM7Ci0gICAgICAgICAgICBsZXQgcmVjdDsKLSAgICAgICAgICAgIGxldCBjdXJyZW50VmlldzsK
LSAgICAgICAgICAgIGxldCBsYXN0UG9pbnQ7Ci0gICAgICAgICAgICByZXR1cm4gd2FpdEZvckNv
bXBvbmVudHNUb1JlbmRlcihjb250ZXh0KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICBl
eHBlY3QoY2hhcnQuY3VycmVudFNlbGVjdGlvbigpKS50by5iZShudWxsKTsKLSAgICAgICAgICAg
ICAgICBleHBlY3QoY2hhcnQuY3VycmVudEluZGljYXRvcigpKS50by5iZShudWxsKTsKLSAgICAg
ICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9yQ2hhbmdlQ2FsbHMpLnRvLmJlLmVxbChbXSk7Ci0K
LSAgICAgICAgICAgICAgICBjYW52YXMgPSBjaGFydC5jb250ZW50KCkucXVlcnlTZWxlY3Rvcign
Y2FudmFzJyk7Ci0gICAgICAgICAgICAgICAgcmVjdCA9IGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKTsKLSAgICAgICAgICAgICAgICBjYW52YXMuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VF
dmVudCgnY2xpY2snLCB7dGFyZ2V0OiBjYW52YXMsIGNsaWVudFg6IHJlY3QucmlnaHQgLSAxLCBj
bGllbnRZOiByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMiwgY29tcG9zZWQ6IHRydWUsIGJ1YmJs
ZXM6IHRydWV9KSk7Ci0KLSAgICAgICAgICAgICAgICBDYW52YXNUZXN0LmZpbGxDYW52YXNCZWZv
cmVSZWRyYXdDaGVjayhjYW52YXMpOwotICAgICAgICAgICAgICAgIHJldHVybiB3YWl0Rm9yQ29t
cG9uZW50c1RvUmVuZGVyKGNvbnRleHQpOwotICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7Ci0g
ICAgICAgICAgICAgICAgZXhwZWN0KENhbnZhc1Rlc3QuaGFzQ2FudmFzQmVlblJlZHJhd24oY2Fu
dmFzKSkudG8uYmUodHJ1ZSk7Ci0KLSAgICAgICAgICAgICAgICBjdXJyZW50VmlldyA9IGNoYXJ0
LnNhbXBsZWRUaW1lU2VyaWVzRGF0YSgnY3VycmVudCcpOwotICAgICAgICAgICAgICAgIGxhc3RQ
b2ludCA9IGN1cnJlbnRWaWV3Lmxhc3RQb2ludCgpOwotICAgICAgICAgICAgICAgIGV4cGVjdChj
aGFydC5jdXJyZW50U2VsZWN0aW9uKCkpLnRvLmJlKG51bGwpOwotICAgICAgICAgICAgICAgIGNv
bnN0IGluZGljYXRvciA9IGNoYXJ0LmN1cnJlbnRJbmRpY2F0b3IoKTsKLSAgICAgICAgICAgICAg
ICBleHBlY3QoaW5kaWNhdG9yLnZpZXcpLnRvLmJlKGN1cnJlbnRWaWV3KTsKLSAgICAgICAgICAg
ICAgICBleHBlY3QoaW5kaWNhdG9yLnBvaW50KS50by5iZShsYXN0UG9pbnQpOwotICAgICAgICAg
ICAgICAgIGV4cGVjdChpbmRpY2F0b3IuaXNMb2NrZWQpLnRvLmJlKHRydWUpOwotICAgICAgICAg
ICAgICAgIGV4cGVjdChpbmRpY2F0b3JDaGFuZ2VDYWxscykudG8uYmUuZXFsKFtbbGFzdFBvaW50
LmlkLCB0cnVlXV0pOwotCi0gICAgICAgICAgICAgICAgY2FudmFzLnBhcmVudE5vZGUuZGlzcGF0
Y2hFdmVudChuZXcgTW91c2VFdmVudCgnbW91c2Vtb3ZlJywge3RhcmdldDogY2FudmFzLCBjbGll
bnRYOiByZWN0LnJpZ2h0ICsgNTAsIGNsaWVudFk6IHJlY3QuYm90dG9tICsgNTAsIGNvbXBvc2Vk
OiB0cnVlLCBidWJibGVzOiB0cnVlfSkpOwotICAgICAgICAgICAgICAgIGNhbnZhcy5kaXNwYXRj
aEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdtb3VzZWxlYXZlJywge3RhcmdldDogY2FudmFzLCBjbGll
bnRYOiByZWN0LnJpZ2h0ICsgNTAsIGNsaWVudFk6IHJlY3QuYm90dG9tICsgNTAsIGNvbXBvc2Vk
OiB0cnVlLCBidWJibGVzOiB0cnVlfSkpOwotCi0gICAgICAgICAgICAgICAgQ2FudmFzVGVzdC5m
aWxsQ2FudmFzQmVmb3JlUmVkcmF3Q2hlY2soY2FudmFzKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gd2FpdEZvckNvbXBvbmVudHNUb1JlbmRlcihjb250ZXh0KTsKLSAgICAgICAgICAgIH0pLnRo
ZW4oKCkgPT4gewotICAgICAgICAgICAgICAgIGV4cGVjdChDYW52YXNUZXN0Lmhhc0NhbnZhc0Jl
ZW5SZWRyYXduKGNhbnZhcykpLnRvLmJlKGZhbHNlKTsKLQotICAgICAgICAgICAgICAgIGV4cGVj
dChjaGFydC5jdXJyZW50U2VsZWN0aW9uKCkpLnRvLmJlKG51bGwpOwotICAgICAgICAgICAgICAg
IGNvbnN0IGluZGljYXRvciA9IGNoYXJ0LmN1cnJlbnRJbmRpY2F0b3IoKTsKLSAgICAgICAgICAg
ICAgICBleHBlY3QoaW5kaWNhdG9yLnZpZXcpLnRvLmJlKGN1cnJlbnRWaWV3KTsKLSAgICAgICAg
ICAgICAgICBleHBlY3QoaW5kaWNhdG9yLnBvaW50KS50by5iZShsYXN0UG9pbnQpOwotICAgICAg
ICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3IuaXNMb2NrZWQpLnRvLmJlKHRydWUpOwotICAgICAg
ICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3JDaGFuZ2VDYWxscykudG8uYmUuZXFsKFtbbGFzdFBv
aW50LmlkLCB0cnVlXV0pOworICAgICAgICBhd2FpdCB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVy
KGNvbnRleHQpOwogCi0gICAgICAgICAgICAgICAgZXhwZWN0KHNlbGVjdGlvbkNoYW5nZUNvdW50
KS50by5iZSgwKTsKLSAgICAgICAgICAgIH0pCi0gICAgICAgIH0pOworICAgICAgICBleHBlY3Qo
Y2hhcnQuY3VycmVudFNlbGVjdGlvbigpKS50by5iZShudWxsKTsKKyAgICAgICAgZXhwZWN0KGNo
YXJ0LmN1cnJlbnRJbmRpY2F0b3IoKSkudG8uYmUobnVsbCk7CisgICAgICAgIGV4cGVjdChpbmRp
Y2F0b3JDaGFuZ2VDYWxscykudG8uYmUuZXFsKFtdKTsKKworICAgICAgICBjb25zdCBjYW52YXMg
PSBjaGFydC5jb250ZW50KCkucXVlcnlTZWxlY3RvcignY2FudmFzJyk7CisgICAgICAgIGNvbnN0
IHJlY3QgPSBjYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICAgIGNhbnZhcy5k
aXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdjbGljaycsIHt0YXJnZXQ6IGNhbnZhcywgY2xp
ZW50WDogcmVjdC5yaWdodCAtIDEsIGNsaWVudFk6IHJlY3QudG9wICsgcmVjdC5oZWlnaHQgLyAy
LCBjb21wb3NlZDogdHJ1ZSwgYnViYmxlczogdHJ1ZX0pKTsKKworICAgICAgICBDYW52YXNUZXN0
LmZpbGxDYW52YXNCZWZvcmVSZWRyYXdDaGVjayhjYW52YXMpOworICAgICAgICBhd2FpdCB3YWl0
Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNvbnRleHQpOworCisgICAgICAgIGV4cGVjdChDYW52YXNU
ZXN0Lmhhc0NhbnZhc0JlZW5SZWRyYXduKGNhbnZhcykpLnRvLmJlKHRydWUpOworCisgICAgICAg
IGNvbnN0IGN1cnJlbnRWaWV3ID0gY2hhcnQuc2FtcGxlZFRpbWVTZXJpZXNEYXRhKCdjdXJyZW50
Jyk7CisgICAgICAgIGNvbnN0IGxhc3RQb2ludCA9IGN1cnJlbnRWaWV3Lmxhc3RQb2ludCgpOwor
ICAgICAgICBleHBlY3QoY2hhcnQuY3VycmVudFNlbGVjdGlvbigpKS50by5iZShudWxsKTsKKyAg
ICAgICAgbGV0IGluZGljYXRvciA9IGNoYXJ0LmN1cnJlbnRJbmRpY2F0b3IoKTsKKyAgICAgICAg
ZXhwZWN0KGluZGljYXRvci52aWV3KS50by5iZShjdXJyZW50Vmlldyk7CisgICAgICAgIGV4cGVj
dChpbmRpY2F0b3IucG9pbnQpLnRvLmJlKGxhc3RQb2ludCk7CisgICAgICAgIGV4cGVjdChpbmRp
Y2F0b3IuaXNMb2NrZWQpLnRvLmJlKHRydWUpOworICAgICAgICBleHBlY3QoaW5kaWNhdG9yQ2hh
bmdlQ2FsbHMpLnRvLmJlLmVxbChbW2xhc3RQb2ludC5pZCwgdHJ1ZV1dKTsKKworICAgICAgICBj
YW52YXMucGFyZW50Tm9kZS5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdtb3VzZW1vdmUn
LCB7dGFyZ2V0OiBjYW52YXMsIGNsaWVudFg6IHJlY3QucmlnaHQgKyA1MCwgY2xpZW50WTogcmVj
dC5ib3R0b20gKyA1MCwgY29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWV9KSk7CisgICAgICAg
IGNhbnZhcy5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdtb3VzZWxlYXZlJywge3Rhcmdl
dDogY2FudmFzLCBjbGllbnRYOiByZWN0LnJpZ2h0ICsgNTAsIGNsaWVudFk6IHJlY3QuYm90dG9t
ICsgNTAsIGNvbXBvc2VkOiB0cnVlLCBidWJibGVzOiB0cnVlfSkpOworCisgICAgICAgIENhbnZh
c1Rlc3QuZmlsbENhbnZhc0JlZm9yZVJlZHJhd0NoZWNrKGNhbnZhcyk7CisgICAgICAgIGF3YWl0
IHdhaXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29udGV4dCk7CisKKyAgICAgICAgZXhwZWN0KENh
bnZhc1Rlc3QuaGFzQ2FudmFzQmVlblJlZHJhd24oY2FudmFzKSkudG8uYmUoZmFsc2UpOworCisg
ICAgICAgIGV4cGVjdChjaGFydC5jdXJyZW50U2VsZWN0aW9uKCkpLnRvLmJlKG51bGwpOworICAg
ICAgICBpbmRpY2F0b3IgPSBjaGFydC5jdXJyZW50SW5kaWNhdG9yKCk7CisgICAgICAgIGV4cGVj
dChpbmRpY2F0b3IudmlldykudG8uYmUoY3VycmVudFZpZXcpOworICAgICAgICBleHBlY3QoaW5k
aWNhdG9yLnBvaW50KS50by5iZShsYXN0UG9pbnQpOworICAgICAgICBleHBlY3QoaW5kaWNhdG9y
LmlzTG9ja2VkKS50by5iZSh0cnVlKTsKKyAgICAgICAgZXhwZWN0KGluZGljYXRvckNoYW5nZUNh
bGxzKS50by5iZS5lcWwoW1tsYXN0UG9pbnQuaWQsIHRydWVdXSk7CisKKyAgICAgICAgZXhwZWN0
KHNlbGVjdGlvbkNoYW5nZUNvdW50KS50by5iZSgwKTsKICAgICB9KTsKIAotICAgIGl0KCdzaG91
bGQgY2xlYXIgdGhlIGxvY2tlZCBpbmRpY2F0b3Igd2hlbiBjbGlja2VkJywgKCkgPT4geworICAg
IGl0KCdzaG91bGQgY2xlYXIgdGhlIGxvY2tlZCBpbmRpY2F0b3Igd2hlbiBjbGlja2VkJywgYXN5
bmMgKCkgPT4gewogICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IEJyb3dzaW5nQ29udGV4dCgp
OwotICAgICAgICByZXR1cm4gQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhjb250ZXh0KS50
aGVuKCgpID0+IHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXJ0ID0gQ2hhcnRUZXN0LmNyZWF0ZUlu
dGVyYWN0aXZlQ2hhcnRXaXRoU2FtcGxlQ2x1c3Rlcihjb250ZXh0KTsKKyAgICAgICAgYXdhaXQg
Q2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhjb250ZXh0KTsKKyAgICAgICAgY29uc3QgY2hh
cnQgPSBDaGFydFRlc3QuY3JlYXRlSW50ZXJhY3RpdmVDaGFydFdpdGhTYW1wbGVDbHVzdGVyKGNv
bnRleHQpOwogCi0gICAgICAgICAgICBjaGFydC5zZXREb21haW4oQ2hhcnRUZXN0LnNhbXBsZUNs
dXN0ZXIuc3RhcnRUaW1lLCBDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5lbmRUaW1lKTsKLSAgICAg
ICAgICAgIGNoYXJ0LmZldGNoTWVhc3VyZW1lbnRTZXRzKCk7Ci0gICAgICAgICAgICBDaGFydFRl
c3QucmVzcG9uZFdpdGhTYW1wbGVDbHVzdGVyKGNvbnRleHQuc3ltYm9scy5Nb2NrUmVtb3RlQVBJ
LnJlcXVlc3RzWzBdKTsKKyAgICAgICAgY2hhcnQuc2V0RG9tYWluKENoYXJ0VGVzdC5zYW1wbGVD
bHVzdGVyLnN0YXJ0VGltZSwgQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuZW5kVGltZSk7CisgICAg
ICAgIGNoYXJ0LmZldGNoTWVhc3VyZW1lbnRTZXRzKCk7CisgICAgICAgIENoYXJ0VGVzdC5yZXNw
b25kV2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4dC5zeW1ib2xzLk1vY2tSZW1vdGVBUEkucmVxdWVz
dHNbMF0pOwogCi0gICAgICAgICAgICBjb25zdCBpbmRpY2F0b3JDaGFuZ2VDYWxscyA9IFtdOwot
ICAgICAgICAgICAgY2hhcnQubGlzdGVuVG9BY3Rpb24oJ2luZGljYXRvckNoYW5nZScsICguLi5h
cmdzKSA9PiBpbmRpY2F0b3JDaGFuZ2VDYWxscy5wdXNoKGFyZ3MpKTsKKyAgICAgICAgY29uc3Qg
aW5kaWNhdG9yQ2hhbmdlQ2FsbHMgPSBbXTsKKyAgICAgICAgY2hhcnQubGlzdGVuVG9BY3Rpb24o
J2luZGljYXRvckNoYW5nZScsICguLi5hcmdzKSA9PiBpbmRpY2F0b3JDaGFuZ2VDYWxscy5wdXNo
KGFyZ3MpKTsKIAotICAgICAgICAgICAgbGV0IHNlbGVjdGlvbkNoYW5nZUNvdW50ID0gMDsKLSAg
ICAgICAgICAgIGNoYXJ0Lmxpc3RlblRvQWN0aW9uKCdzZWxlY3Rpb25DaGFuZ2UnLCAoKSA9PiBz
ZWxlY3Rpb25DaGFuZ2VDb3VudCsrKTsKKyAgICAgICAgbGV0IHNlbGVjdGlvbkNoYW5nZUNvdW50
ID0gMDsKKyAgICAgICAgY2hhcnQubGlzdGVuVG9BY3Rpb24oJ3NlbGVjdGlvbkNoYW5nZScsICgp
ID0+IHNlbGVjdGlvbkNoYW5nZUNvdW50KyspOwogCi0gICAgICAgICAgICBsZXQgY2FudmFzOwot
ICAgICAgICAgICAgbGV0IHJlY3Q7Ci0gICAgICAgICAgICBsZXQgeTsKLSAgICAgICAgICAgIGxl
dCBjdXJyZW50VmlldzsKLSAgICAgICAgICAgIGxldCBsYXN0UG9pbnQ7Ci0gICAgICAgICAgICBy
ZXR1cm4gd2FpdEZvckNvbXBvbmVudHNUb1JlbmRlcihjb250ZXh0KS50aGVuKCgpID0+IHsKLSAg
ICAgICAgICAgICAgICBleHBlY3QoY2hhcnQuY3VycmVudFNlbGVjdGlvbigpKS50by5iZShudWxs
KTsKLSAgICAgICAgICAgICAgICBleHBlY3QoY2hhcnQuY3VycmVudEluZGljYXRvcigpKS50by5i
ZShudWxsKTsKLSAgICAgICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9yQ2hhbmdlQ2FsbHMpLnRv
LmJlLmVxbChbXSk7Ci0KLSAgICAgICAgICAgICAgICBjYW52YXMgPSBjaGFydC5jb250ZW50KCku
cXVlcnlTZWxlY3RvcignY2FudmFzJyk7Ci0gICAgICAgICAgICAgICAgcmVjdCA9IGNhbnZhcy5n
ZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICAgICAgICAgICAgICB5ID0gcmVjdC50b3AgKyBy
ZWN0LmhlaWdodCAvIDI7Ci0gICAgICAgICAgICAgICAgY2FudmFzLmRpc3BhdGNoRXZlbnQobmV3
IE1vdXNlRXZlbnQoJ2NsaWNrJywge3RhcmdldDogY2FudmFzLCBjbGllbnRYOiByZWN0LnJpZ2h0
IC0gMSwgY2xpZW50WTogeSwgY29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWV9KSk7Ci0KLSAg
ICAgICAgICAgICAgICBDYW52YXNUZXN0LmZpbGxDYW52YXNCZWZvcmVSZWRyYXdDaGVjayhjYW52
YXMpOwotICAgICAgICAgICAgICAgIHJldHVybiB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNv
bnRleHQpOwotICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7Ci0gICAgICAgICAgICAgICAgZXhw
ZWN0KENhbnZhc1Rlc3QuaGFzQ2FudmFzQmVlblJlZHJhd24oY2FudmFzKSkudG8uYmUodHJ1ZSk7
Ci0KLSAgICAgICAgICAgICAgICBjdXJyZW50VmlldyA9IGNoYXJ0LnNhbXBsZWRUaW1lU2VyaWVz
RGF0YSgnY3VycmVudCcpOwotICAgICAgICAgICAgICAgIGxhc3RQb2ludCA9IGN1cnJlbnRWaWV3
Lmxhc3RQb2ludCgpOwotICAgICAgICAgICAgICAgIGV4cGVjdChjaGFydC5jdXJyZW50U2VsZWN0
aW9uKCkpLnRvLmJlKG51bGwpOwotICAgICAgICAgICAgICAgIGNvbnN0IGluZGljYXRvciA9IGNo
YXJ0LmN1cnJlbnRJbmRpY2F0b3IoKTsKLSAgICAgICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9y
LnZpZXcpLnRvLmJlKGN1cnJlbnRWaWV3KTsKLSAgICAgICAgICAgICAgICBleHBlY3QoaW5kaWNh
dG9yLnBvaW50KS50by5iZShsYXN0UG9pbnQpOwotICAgICAgICAgICAgICAgIGV4cGVjdChpbmRp
Y2F0b3IuaXNMb2NrZWQpLnRvLmJlKHRydWUpOwotICAgICAgICAgICAgICAgIGV4cGVjdChpbmRp
Y2F0b3JDaGFuZ2VDYWxscykudG8uYmUuZXFsKFtbbGFzdFBvaW50LmlkLCB0cnVlXV0pOwotCi0g
ICAgICAgICAgICAgICAgY2FudmFzLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ2NsaWNr
Jywge3RhcmdldDogY2FudmFzLCBjbGllbnRYOiByZWN0LmxlZnQgKyAxLCBjbGllbnRZOiB5LCBj
b21wb3NlZDogdHJ1ZSwgYnViYmxlczogdHJ1ZX0pKTsKLQotICAgICAgICAgICAgICAgIENhbnZh
c1Rlc3QuZmlsbENhbnZhc0JlZm9yZVJlZHJhd0NoZWNrKGNhbnZhcyk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHdhaXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29udGV4dCk7Ci0gICAgICAgICAg
ICB9KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICBleHBlY3QoQ2FudmFzVGVzdC5oYXND
YW52YXNCZWVuUmVkcmF3bihjYW52YXMpKS50by5iZSh0cnVlKTsKLQotICAgICAgICAgICAgICAg
IGV4cGVjdChjaGFydC5jdXJyZW50U2VsZWN0aW9uKCkpLnRvLmJlKG51bGwpOwotICAgICAgICAg
ICAgICAgIGNvbnN0IGZpcnN0UG9pbnQgPSBjdXJyZW50Vmlldy5maXJzdFBvaW50KCk7Ci0gICAg
ICAgICAgICAgICAgY29uc3QgaW5kaWNhdG9yID0gY2hhcnQuY3VycmVudEluZGljYXRvcigpOwot
ICAgICAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3IudmlldykudG8uYmUoY3VycmVudFZpZXcp
OwotICAgICAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3IucG9pbnQpLnRvLmJlKGZpcnN0UG9p
bnQpOwotICAgICAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3IuaXNMb2NrZWQpLnRvLmJlKGZh
bHNlKTsKLSAgICAgICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9yQ2hhbmdlQ2FsbHMpLnRvLmJl
LmVxbChbW2xhc3RQb2ludC5pZCwgdHJ1ZV0sIFtmaXJzdFBvaW50LmlkLCBmYWxzZV1dKTsKKyAg
ICAgICAgYXdhaXQgd2FpdEZvckNvbXBvbmVudHNUb1JlbmRlcihjb250ZXh0KTsKIAotICAgICAg
ICAgICAgICAgIGV4cGVjdChzZWxlY3Rpb25DaGFuZ2VDb3VudCkudG8uYmUoMCk7Ci0gICAgICAg
ICAgICB9KQotICAgICAgICB9KTsKKyAgICAgICAgZXhwZWN0KGNoYXJ0LmN1cnJlbnRTZWxlY3Rp
b24oKSkudG8uYmUobnVsbCk7CisgICAgICAgIGV4cGVjdChjaGFydC5jdXJyZW50SW5kaWNhdG9y
KCkpLnRvLmJlKG51bGwpOworICAgICAgICBleHBlY3QoaW5kaWNhdG9yQ2hhbmdlQ2FsbHMpLnRv
LmJlLmVxbChbXSk7CisKKyAgICAgICAgY29uc3QgY2FudmFzID0gY2hhcnQuY29udGVudCgpLnF1
ZXJ5U2VsZWN0b3IoJ2NhbnZhcycpOworICAgICAgICBjb25zdCByZWN0ID0gY2FudmFzLmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpOworICAgICAgICBjb25zdCB5ID0gcmVjdC50b3AgKyByZWN0Lmhl
aWdodCAvIDI7CisgICAgICAgIGNhbnZhcy5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdj
bGljaycsIHt0YXJnZXQ6IGNhbnZhcywgY2xpZW50WDogcmVjdC5yaWdodCAtIDEsIGNsaWVudFk6
IHksIGNvbXBvc2VkOiB0cnVlLCBidWJibGVzOiB0cnVlfSkpOworCisgICAgICAgIENhbnZhc1Rl
c3QuZmlsbENhbnZhc0JlZm9yZVJlZHJhd0NoZWNrKGNhbnZhcyk7CisgICAgICAgIGF3YWl0IHdh
aXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29udGV4dCk7CisKKyAgICAgICAgZXhwZWN0KENhbnZh
c1Rlc3QuaGFzQ2FudmFzQmVlblJlZHJhd24oY2FudmFzKSkudG8uYmUodHJ1ZSk7CisKKyAgICAg
ICAgY29uc3QgY3VycmVudFZpZXcgPSBjaGFydC5zYW1wbGVkVGltZVNlcmllc0RhdGEoJ2N1cnJl
bnQnKTsKKyAgICAgICAgY29uc3QgbGFzdFBvaW50ID0gY3VycmVudFZpZXcubGFzdFBvaW50KCk7
CisgICAgICAgIGV4cGVjdChjaGFydC5jdXJyZW50U2VsZWN0aW9uKCkpLnRvLmJlKG51bGwpOwor
ICAgICAgICBsZXQgaW5kaWNhdG9yID0gY2hhcnQuY3VycmVudEluZGljYXRvcigpOworICAgICAg
ICBleHBlY3QoaW5kaWNhdG9yLnZpZXcpLnRvLmJlKGN1cnJlbnRWaWV3KTsKKyAgICAgICAgZXhw
ZWN0KGluZGljYXRvci5wb2ludCkudG8uYmUobGFzdFBvaW50KTsKKyAgICAgICAgZXhwZWN0KGlu
ZGljYXRvci5pc0xvY2tlZCkudG8uYmUodHJ1ZSk7CisgICAgICAgIGV4cGVjdChpbmRpY2F0b3JD
aGFuZ2VDYWxscykudG8uYmUuZXFsKFtbbGFzdFBvaW50LmlkLCB0cnVlXV0pOworCisgICAgICAg
IGNhbnZhcy5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdjbGljaycsIHt0YXJnZXQ6IGNh
bnZhcywgY2xpZW50WDogcmVjdC5sZWZ0ICsgMSwgY2xpZW50WTogeSwgY29tcG9zZWQ6IHRydWUs
IGJ1YmJsZXM6IHRydWV9KSk7CisKKyAgICAgICAgQ2FudmFzVGVzdC5maWxsQ2FudmFzQmVmb3Jl
UmVkcmF3Q2hlY2soY2FudmFzKTsKKyAgICAgICAgYXdhaXQgd2FpdEZvckNvbXBvbmVudHNUb1Jl
bmRlcihjb250ZXh0KTsKKworICAgICAgICBleHBlY3QoQ2FudmFzVGVzdC5oYXNDYW52YXNCZWVu
UmVkcmF3bihjYW52YXMpKS50by5iZSh0cnVlKTsKKworICAgICAgICBleHBlY3QoY2hhcnQuY3Vy
cmVudFNlbGVjdGlvbigpKS50by5iZShudWxsKTsKKyAgICAgICAgY29uc3QgZmlyc3RQb2ludCA9
IGN1cnJlbnRWaWV3LmZpcnN0UG9pbnQoKTsKKyAgICAgICAgaW5kaWNhdG9yID0gY2hhcnQuY3Vy
cmVudEluZGljYXRvcigpOworICAgICAgICBleHBlY3QoaW5kaWNhdG9yLnZpZXcpLnRvLmJlKGN1
cnJlbnRWaWV3KTsKKyAgICAgICAgZXhwZWN0KGluZGljYXRvci5wb2ludCkudG8uYmUoZmlyc3RQ
b2ludCk7CisgICAgICAgIGV4cGVjdChpbmRpY2F0b3IuaXNMb2NrZWQpLnRvLmJlKGZhbHNlKTsK
KyAgICAgICAgZXhwZWN0KGluZGljYXRvckNoYW5nZUNhbGxzKS50by5iZS5lcWwoW1tsYXN0UG9p
bnQuaWQsIHRydWVdLCBbZmlyc3RQb2ludC5pZCwgZmFsc2VdXSk7CisKKyAgICAgICAgZXhwZWN0
KHNlbGVjdGlvbkNoYW5nZUNvdW50KS50by5iZSgwKTsKICAgICB9KTsKIAotICAgIGl0KCdzaG91
bGQgY2hhbmdlIHRoZSBzZWxlY3Rpb24gd2hlbiB0aGUgbW91c2UgY3Vyc29yIGlzIGRyYWdnZWQn
LCAoKSA9PiB7CisgICAgaXQoJ3Nob3VsZCBjaGFuZ2UgdGhlIHNlbGVjdGlvbiB3aGVuIHRoZSBt
b3VzZSBjdXJzb3IgaXMgZHJhZ2dlZCcsIGFzeW5jICgpID0+IHsKICAgICAgICAgY29uc3QgY29u
dGV4dCA9IG5ldyBCcm93c2luZ0NvbnRleHQoKTsKLSAgICAgICAgcmV0dXJuIENoYXJ0VGVzdC5p
bXBvcnRDaGFydFNjcmlwdHMoY29udGV4dCkudGhlbigoKSA9PiB7Ci0gICAgICAgICAgICBjb25z
dCBjaGFydCA9IENoYXJ0VGVzdC5jcmVhdGVJbnRlcmFjdGl2ZUNoYXJ0V2l0aFNhbXBsZUNsdXN0
ZXIoY29udGV4dCwgbnVsbCwge3NlbGVjdGlvbjoge2xpbmVTdHlsZTogJyNmOTMnLCBsaW5lV2lk
dGg6IDIsIGZpbGxTdHlsZTogJyNjY2MnfX0pOworICAgICAgICBhd2FpdCBDaGFydFRlc3QuaW1w
b3J0Q2hhcnRTY3JpcHRzKGNvbnRleHQpOworICAgICAgICBjb25zdCBjaGFydCA9IENoYXJ0VGVz
dC5jcmVhdGVJbnRlcmFjdGl2ZUNoYXJ0V2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4dCwgbnVsbCwg
e3NlbGVjdGlvbjoge2xpbmVTdHlsZTogJyNmOTMnLCBsaW5lV2lkdGg6IDIsIGZpbGxTdHlsZTog
JyNjY2MnfX0pOwogCi0gICAgICAgICAgICBjaGFydC5zZXREb21haW4oQ2hhcnRUZXN0LnNhbXBs
ZUNsdXN0ZXIuc3RhcnRUaW1lLCBDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5lbmRUaW1lKTsKLSAg
ICAgICAgICAgIGNoYXJ0LmZldGNoTWVhc3VyZW1lbnRTZXRzKCk7Ci0gICAgICAgICAgICBDaGFy
dFRlc3QucmVzcG9uZFdpdGhTYW1wbGVDbHVzdGVyKGNvbnRleHQuc3ltYm9scy5Nb2NrUmVtb3Rl
QVBJLnJlcXVlc3RzWzBdKTsKKyAgICAgICAgY2hhcnQuc2V0RG9tYWluKENoYXJ0VGVzdC5zYW1w
bGVDbHVzdGVyLnN0YXJ0VGltZSwgQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuZW5kVGltZSk7Cisg
ICAgICAgIGNoYXJ0LmZldGNoTWVhc3VyZW1lbnRTZXRzKCk7CisgICAgICAgIENoYXJ0VGVzdC5y
ZXNwb25kV2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4dC5zeW1ib2xzLk1vY2tSZW1vdGVBUEkucmVx
dWVzdHNbMF0pOwogCi0gICAgICAgICAgICBjb25zdCBpbmRpY2F0b3JDaGFuZ2VDYWxscyA9IFtd
OwotICAgICAgICAgICAgY2hhcnQubGlzdGVuVG9BY3Rpb24oJ2luZGljYXRvckNoYW5nZScsICgu
Li5hcmdzKSA9PiBpbmRpY2F0b3JDaGFuZ2VDYWxscy5wdXNoKGFyZ3MpKTsKKyAgICAgICAgY29u
c3QgaW5kaWNhdG9yQ2hhbmdlQ2FsbHMgPSBbXTsKKyAgICAgICAgY2hhcnQubGlzdGVuVG9BY3Rp
b24oJ2luZGljYXRvckNoYW5nZScsICguLi5hcmdzKSA9PiBpbmRpY2F0b3JDaGFuZ2VDYWxscy5w
dXNoKGFyZ3MpKTsKIAotICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uQ2hhbmdlQ2FsbHMgPSBb
XTsKLSAgICAgICAgICAgIGNoYXJ0Lmxpc3RlblRvQWN0aW9uKCdzZWxlY3Rpb25DaGFuZ2UnLCAo
Li4uYXJncykgPT4gc2VsZWN0aW9uQ2hhbmdlQ2FsbHMucHVzaChhcmdzKSk7CisgICAgICAgIGNv
bnN0IHNlbGVjdGlvbkNoYW5nZUNhbGxzID0gW107CisgICAgICAgIGNoYXJ0Lmxpc3RlblRvQWN0
aW9uKCdzZWxlY3Rpb25DaGFuZ2UnLCAoLi4uYXJncykgPT4gc2VsZWN0aW9uQ2hhbmdlQ2FsbHMu
cHVzaChhcmdzKSk7CiAKLSAgICAgICAgICAgIGNvbnN0IHpvb21CdXR0b24gPSBjaGFydC5jb250
ZW50KCd6b29tLWJ1dHRvbicpOworICAgICAgICBjb25zdCB6b29tQnV0dG9uID0gY2hhcnQuY29u
dGVudCgnem9vbS1idXR0b24nKTsKIAotICAgICAgICAgICAgbGV0IGNhbnZhczsKLSAgICAgICAg
ICAgIGxldCByZWN0OwotICAgICAgICAgICAgbGV0IHk7Ci0gICAgICAgICAgICBsZXQgY3VycmVu
dFZpZXc7Ci0gICAgICAgICAgICBsZXQgZmlyc3RQb2ludDsKLSAgICAgICAgICAgIGxldCBvbGRS
YW5nZTsKLSAgICAgICAgICAgIGxldCBuZXdSYW5nZTsKLSAgICAgICAgICAgIHJldHVybiB3YWl0
Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNvbnRleHQpLnRoZW4oKCkgPT4gewotICAgICAgICAgICAg
ICAgIGV4cGVjdChjaGFydC5jdXJyZW50U2VsZWN0aW9uKCkpLnRvLmJlKG51bGwpOwotICAgICAg
ICAgICAgICAgIGV4cGVjdChjaGFydC5jdXJyZW50SW5kaWNhdG9yKCkpLnRvLmJlKG51bGwpOwot
ICAgICAgICAgICAgICAgIGV4cGVjdChzZWxlY3Rpb25DaGFuZ2VDYWxscykudG8uYmUuZXFsKFtd
KTsKLQotICAgICAgICAgICAgICAgIGNhbnZhcyA9IGNoYXJ0LmNvbnRlbnQoKS5xdWVyeVNlbGVj
dG9yKCdjYW52YXMnKTsKLSAgICAgICAgICAgICAgICByZWN0ID0gY2FudmFzLmdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpOwotICAgICAgICAgICAgICAgIHkgPSByZWN0LnRvcCArIHJlY3QuaGVpZ2h0
IC8gMjsKLSAgICAgICAgICAgICAgICBjYW52YXMuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVu
dCgnbW91c2Vtb3ZlJywge3RhcmdldDogY2FudmFzLCBjbGllbnRYOiByZWN0LmxlZnQgKyA1LCBj
bGllbnRZOiB5LCBjb21wb3NlZDogdHJ1ZSwgYnViYmxlczogdHJ1ZX0pKTsKLQotICAgICAgICAg
ICAgICAgIENhbnZhc1Rlc3QuZmlsbENhbnZhc0JlZm9yZVJlZHJhd0NoZWNrKGNhbnZhcyk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29udGV4dCk7
Ci0gICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICBleHBlY3QoQ2Fu
dmFzVGVzdC5oYXNDYW52YXNCZWVuUmVkcmF3bihjYW52YXMpKS50by5iZSh0cnVlKTsKLQotICAg
ICAgICAgICAgICAgIGN1cnJlbnRWaWV3ID0gY2hhcnQuc2FtcGxlZFRpbWVTZXJpZXNEYXRhKCdj
dXJyZW50Jyk7Ci0gICAgICAgICAgICAgICAgZmlyc3RQb2ludCA9IGN1cnJlbnRWaWV3LmZpcnN0
UG9pbnQoKTsKLSAgICAgICAgICAgICAgICBleHBlY3QoY2hhcnQuY3VycmVudFNlbGVjdGlvbigp
KS50by5iZShudWxsKTsKLSAgICAgICAgICAgICAgICBsZXQgaW5kaWNhdG9yID0gY2hhcnQuY3Vy
cmVudEluZGljYXRvcigpOwotICAgICAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3Iudmlldyku
dG8uYmUoY3VycmVudFZpZXcpOwotICAgICAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3IucG9p
bnQpLnRvLmJlKGZpcnN0UG9pbnQpOwotICAgICAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3Iu
aXNMb2NrZWQpLnRvLmJlKGZhbHNlKTsKLSAgICAgICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9y
Q2hhbmdlQ2FsbHMpLnRvLmJlLmVxbChbW2ZpcnN0UG9pbnQuaWQsIGZhbHNlXV0pOwotICAgICAg
ICAgICAgICAgIGV4cGVjdCh6b29tQnV0dG9uLm9mZnNldEhlaWdodCkudG8uYmUoMCk7Ci0KLSAg
ICAgICAgICAgICAgICBjYW52YXMuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnbW91c2Vk
b3duJywge3RhcmdldDogY2FudmFzLCBjbGllbnRYOiByZWN0LmxlZnQgKyA1LCBjbGllbnRZOiB5
LCBjb21wb3NlZDogdHJ1ZSwgYnViYmxlczogdHJ1ZX0pKTsKLQotICAgICAgICAgICAgICAgIENh
bnZhc1Rlc3QuZmlsbENhbnZhc0JlZm9yZVJlZHJhd0NoZWNrKGNhbnZhcyk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHdhaXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29udGV4dCk7Ci0gICAgICAg
ICAgICB9KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICBleHBlY3QoQ2FudmFzVGVzdC5o
YXNDYW52YXNCZWVuUmVkcmF3bihjYW52YXMpKS50by5iZShmYWxzZSk7Ci0KLSAgICAgICAgICAg
ICAgICBleHBlY3QoY2hhcnQuY3VycmVudFNlbGVjdGlvbigpKS50by5iZShudWxsKTsKLSAgICAg
ICAgICAgICAgICBsZXQgaW5kaWNhdG9yID0gY2hhcnQuY3VycmVudEluZGljYXRvcigpOwotICAg
ICAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3IudmlldykudG8uYmUoY3VycmVudFZpZXcpOwot
ICAgICAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3IucG9pbnQpLnRvLmJlKGZpcnN0UG9pbnQp
OwotICAgICAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3IuaXNMb2NrZWQpLnRvLmJlKGZhbHNl
KTsKLSAgICAgICAgICAgICAgICBleHBlY3Qoc2VsZWN0aW9uQ2hhbmdlQ2FsbHMpLnRvLmJlLmVx
bChbXSk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGluZGljYXRvckNoYW5nZUNhbGxzKS50by5i
ZS5lcWwoW1tmaXJzdFBvaW50LmlkLCBmYWxzZV1dKTsKLSAgICAgICAgICAgICAgICBleHBlY3Qo
em9vbUJ1dHRvbi5vZmZzZXRIZWlnaHQpLnRvLmJlKDApOwotCi0gICAgICAgICAgICAgICAgY2Fu
dmFzLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ21vdXNlbW92ZScsIHt0YXJnZXQ6IGNh
bnZhcywgY2xpZW50WDogcmVjdC5sZWZ0ICsgMTUsIGNsaWVudFk6IHkgKyA1LCBjb21wb3NlZDog
dHJ1ZSwgYnViYmxlczogdHJ1ZX0pKTsKLQotICAgICAgICAgICAgICAgIENhbnZhc1Rlc3QuZmls
bENhbnZhc0JlZm9yZVJlZHJhd0NoZWNrKGNhbnZhcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHdhaXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29udGV4dCk7Ci0gICAgICAgICAgICB9KS50aGVu
KCgpID0+IHsKLSAgICAgICAgICAgICAgICBleHBlY3QoQ2FudmFzVGVzdC5oYXNDYW52YXNCZWVu
UmVkcmF3bihjYW52YXMpKS50by5iZSh0cnVlKTsKLQotICAgICAgICAgICAgICAgIGV4cGVjdChj
aGFydC5jdXJyZW50U2VsZWN0aW9uKCkpLnRvLm5vdC5iZShudWxsKTsKLSAgICAgICAgICAgICAg
ICBleHBlY3QoY2hhcnQuY3VycmVudEluZGljYXRvcigpKS50by5iZShudWxsKTsKLSAgICAgICAg
ICAgICAgICBleHBlY3Qoc2VsZWN0aW9uQ2hhbmdlQ2FsbHMubGVuZ3RoKS50by5iZSgxKTsKLSAg
ICAgICAgICAgICAgICBvbGRSYW5nZSA9IHNlbGVjdGlvbkNoYW5nZUNhbGxzWzBdWzBdOwotICAg
ICAgICAgICAgICAgIGV4cGVjdChvbGRSYW5nZSkudG8uYmUuZXFsKGNoYXJ0LmN1cnJlbnRTZWxl
Y3Rpb24oKSk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KHNlbGVjdGlvbkNoYW5nZUNhbGxzWzBd
WzFdKS50by5iZShmYWxzZSk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGluZGljYXRvckNoYW5n
ZUNhbGxzKS50by5iZS5lcWwoW1tmaXJzdFBvaW50LmlkLCBmYWxzZV0sIFtudWxsLCBmYWxzZV1d
KTsKLSAgICAgICAgICAgICAgICBleHBlY3Qoem9vbUJ1dHRvbi5vZmZzZXRIZWlnaHQpLnRvLmJl
KDApOwotCi0gICAgICAgICAgICAgICAgY2FudmFzLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZl
bnQoJ21vdXNlbW92ZScsIHt0YXJnZXQ6IGNhbnZhcywgY2xpZW50WDogcmVjdC5yaWdodCAtIDUs
IGNsaWVudFk6IHkgKyA1LCBjb21wb3NlZDogdHJ1ZSwgYnViYmxlczogdHJ1ZX0pKTsKLQotICAg
ICAgICAgICAgICAgIENhbnZhc1Rlc3QuZmlsbENhbnZhc0JlZm9yZVJlZHJhd0NoZWNrKGNhbnZh
cyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29u
dGV4dCk7Ci0gICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICBleHBl
Y3QoQ2FudmFzVGVzdC5oYXNDYW52YXNCZWVuUmVkcmF3bihjYW52YXMpKS50by5iZSh0cnVlKTsK
LQotICAgICAgICAgICAgICAgIGV4cGVjdChjaGFydC5jdXJyZW50U2VsZWN0aW9uKCkpLnRvLm5v
dC5iZShudWxsKTsKLSAgICAgICAgICAgICAgICBleHBlY3QoY2hhcnQuY3VycmVudEluZGljYXRv
cigpKS50by5iZShudWxsKTsKLSAgICAgICAgICAgICAgICBleHBlY3Qoc2VsZWN0aW9uQ2hhbmdl
Q2FsbHMubGVuZ3RoKS50by5iZSgyKTsKLSAgICAgICAgICAgICAgICBuZXdSYW5nZSA9IHNlbGVj
dGlvbkNoYW5nZUNhbGxzWzFdWzBdOwotICAgICAgICAgICAgICAgIGV4cGVjdChuZXdSYW5nZSku
dG8uYmUuZXFsKGNoYXJ0LmN1cnJlbnRTZWxlY3Rpb24oKSk7Ci0gICAgICAgICAgICAgICAgZXhw
ZWN0KG5ld1JhbmdlWzBdKS50by5iZShvbGRSYW5nZVswXSk7Ci0gICAgICAgICAgICAgICAgZXhw
ZWN0KG5ld1JhbmdlWzFdKS50by5iZS5ncmVhdGVyVGhhbihvbGRSYW5nZVsxXSk7Ci0gICAgICAg
ICAgICAgICAgZXhwZWN0KHNlbGVjdGlvbkNoYW5nZUNhbGxzWzFdWzFdKS50by5iZShmYWxzZSk7
Ci0gICAgICAgICAgICAgICAgZXhwZWN0KHpvb21CdXR0b24ub2Zmc2V0SGVpZ2h0KS50by5iZSgw
KTsKLQotICAgICAgICAgICAgICAgIGNhbnZhcy5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50
KCdtb3VzZXVwJywge3RhcmdldDogY2FudmFzLCBjbGllbnRYOiByZWN0LnJpZ2h0IC0gNSwgY2xp
ZW50WTogeSArIDUsIGNvbXBvc2VkOiB0cnVlLCBidWJibGVzOiB0cnVlfSkpOwotICAgICAgICAg
ICAgICAgIGNhbnZhcy5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdjbGljaycsIHt0YXJn
ZXQ6IGNhbnZhcywgY2xpZW50WDogcmVjdC5yaWdodCAtIDUsIGNsaWVudFk6IHkgKyA1LCBjb21w
b3NlZDogdHJ1ZSwgYnViYmxlczogdHJ1ZX0pKTsKLQotICAgICAgICAgICAgICAgIENhbnZhc1Rl
c3QuZmlsbENhbnZhc0JlZm9yZVJlZHJhd0NoZWNrKGNhbnZhcyk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHdhaXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29udGV4dCk7Ci0gICAgICAgICAgICB9
KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICBleHBlY3QoQ2FudmFzVGVzdC5oYXNDYW52
YXNCZWVuUmVkcmF3bihjYW52YXMpKS50by5iZSh0cnVlKTsKLQotICAgICAgICAgICAgICAgIGV4
cGVjdChjaGFydC5jdXJyZW50U2VsZWN0aW9uKCkpLnRvLmJlLmVxbChuZXdSYW5nZSk7Ci0gICAg
ICAgICAgICAgICAgZXhwZWN0KGNoYXJ0LmN1cnJlbnRJbmRpY2F0b3IoKSkudG8uYmUobnVsbCk7
Ci0gICAgICAgICAgICAgICAgZXhwZWN0KHNlbGVjdGlvbkNoYW5nZUNhbGxzLmxlbmd0aCkudG8u
YmUoMyk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KHNlbGVjdGlvbkNoYW5nZUNhbGxzWzJdWzBd
KS50by5iZS5lcWwobmV3UmFuZ2UpOwotICAgICAgICAgICAgICAgIGV4cGVjdChzZWxlY3Rpb25D
aGFuZ2VDYWxsc1syXVsxXSkudG8uYmUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KHpv
b21CdXR0b24ub2Zmc2V0SGVpZ2h0KS50by5iZSgwKTsKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICB9KTsKKyAgICAgICAgYXdhaXQgd2FpdEZvckNvbXBvbmVudHNUb1JlbmRlcihjb250ZXh0KTsK
KworICAgICAgICBleHBlY3QoY2hhcnQuY3VycmVudFNlbGVjdGlvbigpKS50by5iZShudWxsKTsK
KyAgICAgICAgZXhwZWN0KGNoYXJ0LmN1cnJlbnRJbmRpY2F0b3IoKSkudG8uYmUobnVsbCk7Cisg
ICAgICAgIGV4cGVjdChzZWxlY3Rpb25DaGFuZ2VDYWxscykudG8uYmUuZXFsKFtdKTsKKworICAg
ICAgICBjb25zdCBjYW52YXMgPSBjaGFydC5jb250ZW50KCkucXVlcnlTZWxlY3RvcignY2FudmFz
Jyk7CisgICAgICAgIGNvbnN0IHJlY3QgPSBjYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7
CisgICAgICAgIGNvbnN0IHkgPSByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMjsKKyAgICAgICAg
Y2FudmFzLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ21vdXNlbW92ZScsIHt0YXJnZXQ6
IGNhbnZhcywgY2xpZW50WDogcmVjdC5sZWZ0ICsgNSwgY2xpZW50WTogeSwgY29tcG9zZWQ6IHRy
dWUsIGJ1YmJsZXM6IHRydWV9KSk7CisKKyAgICAgICAgQ2FudmFzVGVzdC5maWxsQ2FudmFzQmVm
b3JlUmVkcmF3Q2hlY2soY2FudmFzKTsKKyAgICAgICAgYXdhaXQgd2FpdEZvckNvbXBvbmVudHNU
b1JlbmRlcihjb250ZXh0KTsKKworICAgICAgICBleHBlY3QoQ2FudmFzVGVzdC5oYXNDYW52YXNC
ZWVuUmVkcmF3bihjYW52YXMpKS50by5iZSh0cnVlKTsKKworICAgICAgICBjb25zdCBjdXJyZW50
VmlldyA9IGNoYXJ0LnNhbXBsZWRUaW1lU2VyaWVzRGF0YSgnY3VycmVudCcpOworICAgICAgICBj
b25zdCBmaXJzdFBvaW50ID0gY3VycmVudFZpZXcuZmlyc3RQb2ludCgpOworICAgICAgICBleHBl
Y3QoY2hhcnQuY3VycmVudFNlbGVjdGlvbigpKS50by5iZShudWxsKTsKKyAgICAgICAgbGV0IGlu
ZGljYXRvciA9IGNoYXJ0LmN1cnJlbnRJbmRpY2F0b3IoKTsKKyAgICAgICAgZXhwZWN0KGluZGlj
YXRvci52aWV3KS50by5iZShjdXJyZW50Vmlldyk7CisgICAgICAgIGV4cGVjdChpbmRpY2F0b3Iu
cG9pbnQpLnRvLmJlKGZpcnN0UG9pbnQpOworICAgICAgICBleHBlY3QoaW5kaWNhdG9yLmlzTG9j
a2VkKS50by5iZShmYWxzZSk7CisgICAgICAgIGV4cGVjdChpbmRpY2F0b3JDaGFuZ2VDYWxscyku
dG8uYmUuZXFsKFtbZmlyc3RQb2ludC5pZCwgZmFsc2VdXSk7CisgICAgICAgIGV4cGVjdCh6b29t
QnV0dG9uLm9mZnNldEhlaWdodCkudG8uYmUoMCk7CisKKyAgICAgICAgY2FudmFzLmRpc3BhdGNo
RXZlbnQobmV3IE1vdXNlRXZlbnQoJ21vdXNlZG93bicsIHt0YXJnZXQ6IGNhbnZhcywgY2xpZW50
WDogcmVjdC5sZWZ0ICsgNSwgY2xpZW50WTogeSwgY29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRy
dWV9KSk7CisKKyAgICAgICAgQ2FudmFzVGVzdC5maWxsQ2FudmFzQmVmb3JlUmVkcmF3Q2hlY2so
Y2FudmFzKTsKKyAgICAgICAgYXdhaXQgd2FpdEZvckNvbXBvbmVudHNUb1JlbmRlcihjb250ZXh0
KTsKKworICAgICAgICBleHBlY3QoQ2FudmFzVGVzdC5oYXNDYW52YXNCZWVuUmVkcmF3bihjYW52
YXMpKS50by5iZShmYWxzZSk7CisKKyAgICAgICAgZXhwZWN0KGNoYXJ0LmN1cnJlbnRTZWxlY3Rp
b24oKSkudG8uYmUobnVsbCk7CisgICAgICAgIGluZGljYXRvciA9IGNoYXJ0LmN1cnJlbnRJbmRp
Y2F0b3IoKTsKKyAgICAgICAgZXhwZWN0KGluZGljYXRvci52aWV3KS50by5iZShjdXJyZW50Vmll
dyk7CisgICAgICAgIGV4cGVjdChpbmRpY2F0b3IucG9pbnQpLnRvLmJlKGZpcnN0UG9pbnQpOwor
ICAgICAgICBleHBlY3QoaW5kaWNhdG9yLmlzTG9ja2VkKS50by5iZShmYWxzZSk7CisgICAgICAg
IGV4cGVjdChzZWxlY3Rpb25DaGFuZ2VDYWxscykudG8uYmUuZXFsKFtdKTsKKyAgICAgICAgZXhw
ZWN0KGluZGljYXRvckNoYW5nZUNhbGxzKS50by5iZS5lcWwoW1tmaXJzdFBvaW50LmlkLCBmYWxz
ZV1dKTsKKyAgICAgICAgZXhwZWN0KHpvb21CdXR0b24ub2Zmc2V0SGVpZ2h0KS50by5iZSgwKTsK
KworICAgICAgICBjYW52YXMuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnbW91c2Vtb3Zl
Jywge3RhcmdldDogY2FudmFzLCBjbGllbnRYOiByZWN0LmxlZnQgKyAxNSwgY2xpZW50WTogeSAr
IDUsIGNvbXBvc2VkOiB0cnVlLCBidWJibGVzOiB0cnVlfSkpOworCisgICAgICAgIENhbnZhc1Rl
c3QuZmlsbENhbnZhc0JlZm9yZVJlZHJhd0NoZWNrKGNhbnZhcyk7CisgICAgICAgIGF3YWl0IHdh
aXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29udGV4dCk7CisKKyAgICAgICAgZXhwZWN0KENhbnZh
c1Rlc3QuaGFzQ2FudmFzQmVlblJlZHJhd24oY2FudmFzKSkudG8uYmUodHJ1ZSk7CisKKyAgICAg
ICAgZXhwZWN0KGNoYXJ0LmN1cnJlbnRTZWxlY3Rpb24oKSkudG8ubm90LmJlKG51bGwpOworICAg
ICAgICBleHBlY3QoY2hhcnQuY3VycmVudEluZGljYXRvcigpKS50by5iZShudWxsKTsKKyAgICAg
ICAgZXhwZWN0KHNlbGVjdGlvbkNoYW5nZUNhbGxzLmxlbmd0aCkudG8uYmUoMSk7CisgICAgICAg
IGNvbnN0IG9sZFJhbmdlID0gc2VsZWN0aW9uQ2hhbmdlQ2FsbHNbMF1bMF07CisgICAgICAgIGV4
cGVjdChvbGRSYW5nZSkudG8uYmUuZXFsKGNoYXJ0LmN1cnJlbnRTZWxlY3Rpb24oKSk7CisgICAg
ICAgIGV4cGVjdChzZWxlY3Rpb25DaGFuZ2VDYWxsc1swXVsxXSkudG8uYmUoZmFsc2UpOworICAg
ICAgICBleHBlY3QoaW5kaWNhdG9yQ2hhbmdlQ2FsbHMpLnRvLmJlLmVxbChbW2ZpcnN0UG9pbnQu
aWQsIGZhbHNlXSwgW251bGwsIGZhbHNlXV0pOworICAgICAgICBleHBlY3Qoem9vbUJ1dHRvbi5v
ZmZzZXRIZWlnaHQpLnRvLmJlKDApOworCisgICAgICAgIGNhbnZhcy5kaXNwYXRjaEV2ZW50KG5l
dyBNb3VzZUV2ZW50KCdtb3VzZW1vdmUnLCB7dGFyZ2V0OiBjYW52YXMsIGNsaWVudFg6IHJlY3Qu
cmlnaHQgLSA1LCBjbGllbnRZOiB5ICsgNSwgY29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWV9
KSk7CisKKyAgICAgICAgQ2FudmFzVGVzdC5maWxsQ2FudmFzQmVmb3JlUmVkcmF3Q2hlY2soY2Fu
dmFzKTsKKworICAgICAgICBhd2FpdCB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNvbnRleHQp
OworCisgICAgICAgIGV4cGVjdChDYW52YXNUZXN0Lmhhc0NhbnZhc0JlZW5SZWRyYXduKGNhbnZh
cykpLnRvLmJlKHRydWUpOworCisgICAgICAgIGV4cGVjdChjaGFydC5jdXJyZW50U2VsZWN0aW9u
KCkpLnRvLm5vdC5iZShudWxsKTsKKyAgICAgICAgZXhwZWN0KGNoYXJ0LmN1cnJlbnRJbmRpY2F0
b3IoKSkudG8uYmUobnVsbCk7CisgICAgICAgIGV4cGVjdChzZWxlY3Rpb25DaGFuZ2VDYWxscy5s
ZW5ndGgpLnRvLmJlKDIpOworICAgICAgICBjb25zdCBuZXdSYW5nZSA9IHNlbGVjdGlvbkNoYW5n
ZUNhbGxzWzFdWzBdOworICAgICAgICBleHBlY3QobmV3UmFuZ2UpLnRvLmJlLmVxbChjaGFydC5j
dXJyZW50U2VsZWN0aW9uKCkpOworICAgICAgICBleHBlY3QobmV3UmFuZ2VbMF0pLnRvLmJlKG9s
ZFJhbmdlWzBdKTsKKyAgICAgICAgZXhwZWN0KG5ld1JhbmdlWzFdKS50by5iZS5ncmVhdGVyVGhh
bihvbGRSYW5nZVsxXSk7CisgICAgICAgIGV4cGVjdChzZWxlY3Rpb25DaGFuZ2VDYWxsc1sxXVsx
XSkudG8uYmUoZmFsc2UpOworICAgICAgICBleHBlY3Qoem9vbUJ1dHRvbi5vZmZzZXRIZWlnaHQp
LnRvLmJlKDApOworCisgICAgICAgIGNhbnZhcy5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50
KCdtb3VzZXVwJywge3RhcmdldDogY2FudmFzLCBjbGllbnRYOiByZWN0LnJpZ2h0IC0gNSwgY2xp
ZW50WTogeSArIDUsIGNvbXBvc2VkOiB0cnVlLCBidWJibGVzOiB0cnVlfSkpOworICAgICAgICBj
YW52YXMuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnY2xpY2snLCB7dGFyZ2V0OiBjYW52
YXMsIGNsaWVudFg6IHJlY3QucmlnaHQgLSA1LCBjbGllbnRZOiB5ICsgNSwgY29tcG9zZWQ6IHRy
dWUsIGJ1YmJsZXM6IHRydWV9KSk7CisKKyAgICAgICAgQ2FudmFzVGVzdC5maWxsQ2FudmFzQmVm
b3JlUmVkcmF3Q2hlY2soY2FudmFzKTsKKyAgICAgICAgYXdhaXQgd2FpdEZvckNvbXBvbmVudHNU
b1JlbmRlcihjb250ZXh0KTsKKworICAgICAgICBleHBlY3QoQ2FudmFzVGVzdC5oYXNDYW52YXNC
ZWVuUmVkcmF3bihjYW52YXMpKS50by5iZSh0cnVlKTsKKworICAgICAgICBleHBlY3QoY2hhcnQu
Y3VycmVudFNlbGVjdGlvbigpKS50by5iZS5lcWwobmV3UmFuZ2UpOworICAgICAgICBleHBlY3Qo
Y2hhcnQuY3VycmVudEluZGljYXRvcigpKS50by5iZShudWxsKTsKKyAgICAgICAgZXhwZWN0KHNl
bGVjdGlvbkNoYW5nZUNhbGxzLmxlbmd0aCkudG8uYmUoMyk7CisgICAgICAgIGV4cGVjdChzZWxl
Y3Rpb25DaGFuZ2VDYWxsc1syXVswXSkudG8uYmUuZXFsKG5ld1JhbmdlKTsKKyAgICAgICAgZXhw
ZWN0KHNlbGVjdGlvbkNoYW5nZUNhbGxzWzJdWzFdKS50by5iZSh0cnVlKTsKKyAgICAgICAgZXhw
ZWN0KHpvb21CdXR0b24ub2Zmc2V0SGVpZ2h0KS50by5iZSgwKTsKICAgICB9KTsKIAotICAgIGl0
KCdzaG91bGQgZGlzcGF0Y2ggdGhlICJ6b29tIiBhY3Rpb24gd2hlbiB0aGUgem9vbSBidXR0b24g
aXMgY2xpY2tlZCcsICgpID0+IHsKKyAgICBpdCgnc2hvdWxkIGRpc3BhdGNoIHRoZSAiem9vbSIg
YWN0aW9uIHdoZW4gdGhlIHpvb20gYnV0dG9uIGlzIGNsaWNrZWQnLCBhc3luYyAoKSA9PiB7CiAg
ICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQnJvd3NpbmdDb250ZXh0KCk7Ci0gICAgICAgIHJl
dHVybiBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKGNvbnRleHQpLnRoZW4oKCkgPT4gewot
ICAgICAgICAgICAgY29uc3QgY2hhcnQgPSBDaGFydFRlc3QuY3JlYXRlSW50ZXJhY3RpdmVDaGFy
dFdpdGhTYW1wbGVDbHVzdGVyKGNvbnRleHQsIG51bGwsIHtzZWxlY3Rpb246IHtsaW5lU3R5bGU6
ICcjZjkzJywgbGluZVdpZHRoOiAyLCBmaWxsU3R5bGU6ICcjY2NjJ30sIHpvb21CdXR0b246IHRy
dWV9KTsKKyAgICAgICAgYXdhaXQgQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhjb250ZXh0
KTsKIAotICAgICAgICAgICAgY2hhcnQuc2V0RG9tYWluKENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVy
LnN0YXJ0VGltZSwgQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuZW5kVGltZSk7Ci0gICAgICAgICAg
ICBjaGFydC5mZXRjaE1lYXN1cmVtZW50U2V0cygpOwotICAgICAgICAgICAgQ2hhcnRUZXN0LnJl
c3BvbmRXaXRoU2FtcGxlQ2x1c3Rlcihjb250ZXh0LnN5bWJvbHMuTW9ja1JlbW90ZUFQSS5yZXF1
ZXN0c1swXSk7CisgICAgICAgIGNvbnN0IGNoYXJ0ID0gQ2hhcnRUZXN0LmNyZWF0ZUludGVyYWN0
aXZlQ2hhcnRXaXRoU2FtcGxlQ2x1c3Rlcihjb250ZXh0LCBudWxsLCB7c2VsZWN0aW9uOiB7bGlu
ZVN0eWxlOiAnI2Y5MycsIGxpbmVXaWR0aDogMiwgZmlsbFN0eWxlOiAnI2NjYyd9LCB6b29tQnV0
dG9uOiB0cnVlfSk7CiAKLSAgICAgICAgICAgIGNvbnN0IHpvb21DYWxscyA9IFtdOwotICAgICAg
ICAgICAgY2hhcnQubGlzdGVuVG9BY3Rpb24oJ3pvb20nLCAoLi4uYXJncykgPT4gem9vbUNhbGxz
LnB1c2goYXJncykpOwotICAgICAgICAgICAgY29uc3Qgem9vbUJ1dHRvbiA9IGNoYXJ0LmNvbnRl
bnQoJ3pvb20tYnV0dG9uJyk7Ci0KLSAgICAgICAgICAgIGxldCBzZWxlY3Rpb247Ci0gICAgICAg
ICAgICBsZXQgY2FudmFzOwotICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JDb21wb25lbnRzVG9S
ZW5kZXIoY29udGV4dCkudGhlbigoKSA9PiB7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KHpvb21C
dXR0b24ub2Zmc2V0SGVpZ2h0KS50by5iZSgwKTsKLSAgICAgICAgICAgICAgICBjYW52YXMgPSBj
aGFydC5jb250ZW50KCkucXVlcnlTZWxlY3RvcignY2FudmFzJyk7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgcmVjdCA9IGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICAgICAgICAg
ICAgICBjb25zdCB5ID0gcmVjdC50b3AgKyByZWN0LmhlaWdodCAvIDI7Ci0gICAgICAgICAgICAg
ICAgY2FudmFzLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ21vdXNlbW92ZScsIHt0YXJn
ZXQ6IGNhbnZhcywgY2xpZW50WDogcmVjdC5sZWZ0ICsgNSwgY2xpZW50WTogeSwgY29tcG9zZWQ6
IHRydWUsIGJ1YmJsZXM6IHRydWV9KSk7Ci0gICAgICAgICAgICAgICAgY2FudmFzLmRpc3BhdGNo
RXZlbnQobmV3IE1vdXNlRXZlbnQoJ21vdXNlZG93bicsIHt0YXJnZXQ6IGNhbnZhcywgY2xpZW50
WDogcmVjdC5sZWZ0ICsgNSwgY2xpZW50WTogeSwgY29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRy
dWV9KSk7Ci0gICAgICAgICAgICAgICAgY2FudmFzLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZl
bnQoJ21vdXNlbW92ZScsIHt0YXJnZXQ6IGNhbnZhcywgY2xpZW50WDogcmVjdC5yaWdodCAtIDEw
LCBjbGllbnRZOiB5ICsgNSwgY29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWV9KSk7Ci0gICAg
ICAgICAgICAgICAgY2FudmFzLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ21vdXNldXAn
LCB7dGFyZ2V0OiBjYW52YXMsIGNsaWVudFg6IHJlY3QucmlnaHQgLSAxMCwgY2xpZW50WTogeSAr
IDUsIGNvbXBvc2VkOiB0cnVlLCBidWJibGVzOiB0cnVlfSkpOwotCi0gICAgICAgICAgICAgICAg
Q2FudmFzVGVzdC5maWxsQ2FudmFzQmVmb3JlUmVkcmF3Q2hlY2soY2FudmFzKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gd2FpdEZvckNvbXBvbmVudHNUb1JlbmRlcihjb250ZXh0KTsKLSAgICAg
ICAgICAgIH0pLnRoZW4oKCkgPT4gewotICAgICAgICAgICAgICAgIGV4cGVjdChDYW52YXNUZXN0
Lmhhc0NhbnZhc0JlZW5SZWRyYXduKGNhbnZhcykpLnRvLmJlKHRydWUpOwotCi0gICAgICAgICAg
ICAgICAgc2VsZWN0aW9uID0gY2hhcnQuY3VycmVudFNlbGVjdGlvbigpOwotICAgICAgICAgICAg
ICAgIGV4cGVjdChzZWxlY3Rpb24pLnRvLm5vdC5iZShudWxsKTsKLSAgICAgICAgICAgICAgICBl
eHBlY3QoY2hhcnQuY3VycmVudEluZGljYXRvcigpKS50by5iZShudWxsKTsKLSAgICAgICAgICAg
ICAgICBleHBlY3Qoem9vbUJ1dHRvbi5vZmZzZXRIZWlnaHQpLnRvLm5vdC5iZSgwKTsKLSAgICAg
ICAgICAgICAgICBleHBlY3Qoem9vbUNhbGxzKS50by5iZS5lcWwoW10pOwotICAgICAgICAgICAg
ICAgIHpvb21CdXR0b24uY2xpY2soKTsKLSAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewotICAg
ICAgICAgICAgICAgIGV4cGVjdCh6b29tQ2FsbHMpLnRvLmJlLmVxbChbW3NlbGVjdGlvbl1dKTsK
LQotICAgICAgICAgICAgICAgIENhbnZhc1Rlc3QuZmlsbENhbnZhc0JlZm9yZVJlZHJhd0NoZWNr
KGNhbnZhcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JDb21wb25lbnRzVG9SZW5k
ZXIoY29udGV4dCk7Ci0gICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAg
ICBleHBlY3QoQ2FudmFzVGVzdC5oYXNDYW52YXNCZWVuUmVkcmF3bihjYW52YXMpKS50by5iZShm
YWxzZSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7CisgICAgICAgIGNoYXJ0LnNldERv
bWFpbihDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5zdGFydFRpbWUsIENoYXJ0VGVzdC5zYW1wbGVD
bHVzdGVyLmVuZFRpbWUpOworICAgICAgICBjaGFydC5mZXRjaE1lYXN1cmVtZW50U2V0cygpOwor
ICAgICAgICBDaGFydFRlc3QucmVzcG9uZFdpdGhTYW1wbGVDbHVzdGVyKGNvbnRleHQuc3ltYm9s
cy5Nb2NrUmVtb3RlQVBJLnJlcXVlc3RzWzBdKTsKKworICAgICAgICBjb25zdCB6b29tQ2FsbHMg
PSBbXTsKKyAgICAgICAgY2hhcnQubGlzdGVuVG9BY3Rpb24oJ3pvb20nLCAoLi4uYXJncykgPT4g
em9vbUNhbGxzLnB1c2goYXJncykpOworICAgICAgICBjb25zdCB6b29tQnV0dG9uID0gY2hhcnQu
Y29udGVudCgnem9vbS1idXR0b24nKTsKKworICAgICAgICBhd2FpdCB3YWl0Rm9yQ29tcG9uZW50
c1RvUmVuZGVyKGNvbnRleHQpOworCisgICAgICAgIGV4cGVjdCh6b29tQnV0dG9uLm9mZnNldEhl
aWdodCkudG8uYmUoMCk7CisgICAgICAgIGNvbnN0IGNhbnZhcyA9IGNoYXJ0LmNvbnRlbnQoKS5x
dWVyeVNlbGVjdG9yKCdjYW52YXMnKTsKKyAgICAgICAgY29uc3QgcmVjdCA9IGNhbnZhcy5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgICAgY29uc3QgeSA9IHJlY3QudG9wICsgcmVjdC5o
ZWlnaHQgLyAyOworICAgICAgICBjYW52YXMuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgn
bW91c2Vtb3ZlJywge3RhcmdldDogY2FudmFzLCBjbGllbnRYOiByZWN0LmxlZnQgKyA1LCBjbGll
bnRZOiB5LCBjb21wb3NlZDogdHJ1ZSwgYnViYmxlczogdHJ1ZX0pKTsKKyAgICAgICAgY2FudmFz
LmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ21vdXNlZG93bicsIHt0YXJnZXQ6IGNhbnZh
cywgY2xpZW50WDogcmVjdC5sZWZ0ICsgNSwgY2xpZW50WTogeSwgY29tcG9zZWQ6IHRydWUsIGJ1
YmJsZXM6IHRydWV9KSk7CisgICAgICAgIGNhbnZhcy5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2
ZW50KCdtb3VzZW1vdmUnLCB7dGFyZ2V0OiBjYW52YXMsIGNsaWVudFg6IHJlY3QucmlnaHQgLSAx
MCwgY2xpZW50WTogeSArIDUsIGNvbXBvc2VkOiB0cnVlLCBidWJibGVzOiB0cnVlfSkpOworICAg
ICAgICBjYW52YXMuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnbW91c2V1cCcsIHt0YXJn
ZXQ6IGNhbnZhcywgY2xpZW50WDogcmVjdC5yaWdodCAtIDEwLCBjbGllbnRZOiB5ICsgNSwgY29t
cG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWV9KSk7CisKKyAgICAgICAgQ2FudmFzVGVzdC5maWxs
Q2FudmFzQmVmb3JlUmVkcmF3Q2hlY2soY2FudmFzKTsKKyAgICAgICAgYXdhaXQgd2FpdEZvckNv
bXBvbmVudHNUb1JlbmRlcihjb250ZXh0KTsKKworICAgICAgICBleHBlY3QoQ2FudmFzVGVzdC5o
YXNDYW52YXNCZWVuUmVkcmF3bihjYW52YXMpKS50by5iZSh0cnVlKTsKKworICAgICAgICBjb25z
dCBzZWxlY3Rpb24gPSBjaGFydC5jdXJyZW50U2VsZWN0aW9uKCk7CisgICAgICAgIGV4cGVjdChz
ZWxlY3Rpb24pLnRvLm5vdC5iZShudWxsKTsKKyAgICAgICAgZXhwZWN0KGNoYXJ0LmN1cnJlbnRJ
bmRpY2F0b3IoKSkudG8uYmUobnVsbCk7CisgICAgICAgIGV4cGVjdCh6b29tQnV0dG9uLm9mZnNl
dEhlaWdodCkudG8ubm90LmJlKDApOworICAgICAgICBleHBlY3Qoem9vbUNhbGxzKS50by5iZS5l
cWwoW10pOworICAgICAgICB6b29tQnV0dG9uLmNsaWNrKCk7CisgICAgICAgIGV4cGVjdCh6b29t
Q2FsbHMpLnRvLmJlLmVxbChbW3NlbGVjdGlvbl1dKTsKKworICAgICAgICBDYW52YXNUZXN0LmZp
bGxDYW52YXNCZWZvcmVSZWRyYXdDaGVjayhjYW52YXMpOworICAgICAgICBhd2FpdCB3YWl0Rm9y
Q29tcG9uZW50c1RvUmVuZGVyKGNvbnRleHQpOworCisgICAgICAgIGV4cGVjdChDYW52YXNUZXN0
Lmhhc0NhbnZhc0JlZW5SZWRyYXduKGNhbnZhcykpLnRvLmJlKGZhbHNlKTsKICAgICB9KTsKIAot
ICAgIGl0KCdzaG91bGQgY2xlYXIgdGhlIHNlbGVjdGlvbiB3aGVuIGNsaWNrZWQnLCAoKSA9PiB7
CisgICAgaXQoJ3Nob3VsZCBjbGVhciB0aGUgc2VsZWN0aW9uIHdoZW4gY2xpY2tlZCcsIGFzeW5j
ICgpID0+IHsKICAgICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBCcm93c2luZ0NvbnRleHQoKTsK
LSAgICAgICAgcmV0dXJuIENoYXJ0VGVzdC5pbXBvcnRDaGFydFNjcmlwdHMoY29udGV4dCkudGhl
bigoKSA9PiB7Ci0gICAgICAgICAgICBjb25zdCBjaGFydCA9IENoYXJ0VGVzdC5jcmVhdGVJbnRl
cmFjdGl2ZUNoYXJ0V2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4dCwgbnVsbCwge3NlbGVjdGlvbjog
e2xpbmVTdHlsZTogJyNmOTMnLCBsaW5lV2lkdGg6IDIsIGZpbGxTdHlsZTogJyNjY2MnfX0pOwor
ICAgICAgICBhd2FpdCBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKGNvbnRleHQpOwogCi0g
ICAgICAgICAgICBjaGFydC5zZXREb21haW4oQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuc3RhcnRU
aW1lLCBDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5lbmRUaW1lKTsKLSAgICAgICAgICAgIGNoYXJ0
LmZldGNoTWVhc3VyZW1lbnRTZXRzKCk7Ci0gICAgICAgICAgICBDaGFydFRlc3QucmVzcG9uZFdp
dGhTYW1wbGVDbHVzdGVyKGNvbnRleHQuc3ltYm9scy5Nb2NrUmVtb3RlQVBJLnJlcXVlc3RzWzBd
KTsKKyAgICAgICAgY29uc3QgY2hhcnQgPSBDaGFydFRlc3QuY3JlYXRlSW50ZXJhY3RpdmVDaGFy
dFdpdGhTYW1wbGVDbHVzdGVyKGNvbnRleHQsIG51bGwsIHtzZWxlY3Rpb246IHtsaW5lU3R5bGU6
ICcjZjkzJywgbGluZVdpZHRoOiAyLCBmaWxsU3R5bGU6ICcjY2NjJ319KTsKIAotICAgICAgICAg
ICAgbGV0IGNhbnZhczsKLSAgICAgICAgICAgIGxldCByZWN0OwotICAgICAgICAgICAgbGV0IHk7
Ci0gICAgICAgICAgICByZXR1cm4gd2FpdEZvckNvbXBvbmVudHNUb1JlbmRlcihjb250ZXh0KS50
aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICBjYW52YXMgPSBjaGFydC5jb250ZW50KCkucXVl
cnlTZWxlY3RvcignY2FudmFzJyk7Ci0gICAgICAgICAgICAgICAgcmVjdCA9IGNhbnZhcy5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICAgICAgICAgICAgICB5ID0gcmVjdC50b3AgKyByZWN0
LmhlaWdodCAvIDI7Ci0gICAgICAgICAgICAgICAgY2FudmFzLmRpc3BhdGNoRXZlbnQobmV3IE1v
dXNlRXZlbnQoJ21vdXNlbW92ZScsIHt0YXJnZXQ6IGNhbnZhcywgY2xpZW50WDogcmVjdC5sZWZ0
ICsgNSwgY2xpZW50WTogeSwgY29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWV9KSk7Ci0gICAg
ICAgICAgICAgICAgY2FudmFzLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ21vdXNlZG93
bicsIHt0YXJnZXQ6IGNhbnZhcywgY2xpZW50WDogcmVjdC5sZWZ0ICsgNSwgY2xpZW50WTogeSwg
Y29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWV9KSk7Ci0gICAgICAgICAgICAgICAgY2FudmFz
LmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ21vdXNlbW92ZScsIHt0YXJnZXQ6IGNhbnZh
cywgY2xpZW50WDogcmVjdC5yaWdodCAtIDEwLCBjbGllbnRZOiB5ICsgNSwgY29tcG9zZWQ6IHRy
dWUsIGJ1YmJsZXM6IHRydWV9KSk7Ci0gICAgICAgICAgICAgICAgY2FudmFzLmRpc3BhdGNoRXZl
bnQobmV3IE1vdXNlRXZlbnQoJ21vdXNldXAnLCB7dGFyZ2V0OiBjYW52YXMsIGNsaWVudFg6IHJl
Y3QucmlnaHQgLSAxMCwgY2xpZW50WTogeSArIDUsIGNvbXBvc2VkOiB0cnVlLCBidWJibGVzOiB0
cnVlfSkpOwotICAgICAgICAgICAgICAgIGNhbnZhcy5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2
ZW50KCdjbGljaycsIHt0YXJnZXQ6IGNhbnZhcywgY2xpZW50WDogcmVjdC5yaWdodCAtIDEwLCBj
bGllbnRZOiB5ICsgNSwgY29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWV9KSk7Ci0KLSAgICAg
ICAgICAgICAgICBDYW52YXNUZXN0LmZpbGxDYW52YXNCZWZvcmVSZWRyYXdDaGVjayhjYW52YXMp
OwotICAgICAgICAgICAgICAgIHJldHVybiB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNvbnRl
eHQpOwotICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7Ci0gICAgICAgICAgICAgICAgZXhwZWN0
KENhbnZhc1Rlc3QuaGFzQ2FudmFzQmVlblJlZHJhd24oY2FudmFzKSkudG8uYmUodHJ1ZSk7Ci0K
LSAgICAgICAgICAgICAgICBleHBlY3QoY2hhcnQuY3VycmVudFNlbGVjdGlvbigpKS50by5ub3Qu
YmUobnVsbCk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGNoYXJ0LmN1cnJlbnRJbmRpY2F0b3Io
KSkudG8uYmUobnVsbCk7Ci0KLSAgICAgICAgICAgICAgICBjYW52YXMuZGlzcGF0Y2hFdmVudChu
ZXcgTW91c2VFdmVudCgnY2xpY2snLCB7dGFyZ2V0OiBjYW52YXMsIGNsaWVudFg6IHJlY3QubGVm
dCArIDEsIGNsaWVudFk6IHkgKyA1LCBjb21wb3NlZDogdHJ1ZSwgYnViYmxlczogdHJ1ZX0pKTsK
LQotICAgICAgICAgICAgICAgIENhbnZhc1Rlc3QuZmlsbENhbnZhc0JlZm9yZVJlZHJhd0NoZWNr
KGNhbnZhcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JDb21wb25lbnRzVG9SZW5k
ZXIoY29udGV4dCk7Ci0gICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAg
ICBleHBlY3QoQ2FudmFzVGVzdC5oYXNDYW52YXNCZWVuUmVkcmF3bihjYW52YXMpKS50by5iZSh0
cnVlKTsKLQotICAgICAgICAgICAgICAgIGV4cGVjdChjaGFydC5jdXJyZW50U2VsZWN0aW9uKCkp
LnRvLmJlKG51bGwpOwotICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWaWV3ID0gY2hhcnQu
c2FtcGxlZFRpbWVTZXJpZXNEYXRhKCdjdXJyZW50Jyk7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
aW5kaWNhdG9yID0gY2hhcnQuY3VycmVudEluZGljYXRvcigpOwotICAgICAgICAgICAgICAgIGV4
cGVjdChpbmRpY2F0b3IudmlldykudG8uYmUoY3VycmVudFZpZXcpOwotICAgICAgICAgICAgICAg
IGV4cGVjdChpbmRpY2F0b3IucG9pbnQpLnRvLmJlKGN1cnJlbnRWaWV3LmZpcnN0UG9pbnQoKSk7
Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGluZGljYXRvci5pc0xvY2tlZCkudG8uYmUoZmFsc2Up
OwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOworICAgICAgICBjaGFydC5zZXREb21haW4o
Q2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuc3RhcnRUaW1lLCBDaGFydFRlc3Quc2FtcGxlQ2x1c3Rl
ci5lbmRUaW1lKTsKKyAgICAgICAgY2hhcnQuZmV0Y2hNZWFzdXJlbWVudFNldHMoKTsKKyAgICAg
ICAgQ2hhcnRUZXN0LnJlc3BvbmRXaXRoU2FtcGxlQ2x1c3Rlcihjb250ZXh0LnN5bWJvbHMuTW9j
a1JlbW90ZUFQSS5yZXF1ZXN0c1swXSk7CisKKyAgICAgICAgYXdhaXQgd2FpdEZvckNvbXBvbmVu
dHNUb1JlbmRlcihjb250ZXh0KTsKKworICAgICAgICBjb25zdCBjYW52YXMgPSBjaGFydC5jb250
ZW50KCkucXVlcnlTZWxlY3RvcignY2FudmFzJyk7CisgICAgICAgIGNvbnN0IHJlY3QgPSBjYW52
YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICAgIGNvbnN0IHkgPSByZWN0LnRvcCAr
IHJlY3QuaGVpZ2h0IC8gMjsKKyAgICAgICAgY2FudmFzLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNl
RXZlbnQoJ21vdXNlbW92ZScsIHt0YXJnZXQ6IGNhbnZhcywgY2xpZW50WDogcmVjdC5sZWZ0ICsg
NSwgY2xpZW50WTogeSwgY29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWV9KSk7CisgICAgICAg
IGNhbnZhcy5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdtb3VzZWRvd24nLCB7dGFyZ2V0
OiBjYW52YXMsIGNsaWVudFg6IHJlY3QubGVmdCArIDUsIGNsaWVudFk6IHksIGNvbXBvc2VkOiB0
cnVlLCBidWJibGVzOiB0cnVlfSkpOworICAgICAgICBjYW52YXMuZGlzcGF0Y2hFdmVudChuZXcg
TW91c2VFdmVudCgnbW91c2Vtb3ZlJywge3RhcmdldDogY2FudmFzLCBjbGllbnRYOiByZWN0LnJp
Z2h0IC0gMTAsIGNsaWVudFk6IHkgKyA1LCBjb21wb3NlZDogdHJ1ZSwgYnViYmxlczogdHJ1ZX0p
KTsKKyAgICAgICAgY2FudmFzLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ21vdXNldXAn
LCB7dGFyZ2V0OiBjYW52YXMsIGNsaWVudFg6IHJlY3QucmlnaHQgLSAxMCwgY2xpZW50WTogeSAr
IDUsIGNvbXBvc2VkOiB0cnVlLCBidWJibGVzOiB0cnVlfSkpOworICAgICAgICBjYW52YXMuZGlz
cGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnY2xpY2snLCB7dGFyZ2V0OiBjYW52YXMsIGNsaWVu
dFg6IHJlY3QucmlnaHQgLSAxMCwgY2xpZW50WTogeSArIDUsIGNvbXBvc2VkOiB0cnVlLCBidWJi
bGVzOiB0cnVlfSkpOworCisgICAgICAgIENhbnZhc1Rlc3QuZmlsbENhbnZhc0JlZm9yZVJlZHJh
d0NoZWNrKGNhbnZhcyk7CisgICAgICAgIGF3YWl0IHdhaXRGb3JDb21wb25lbnRzVG9SZW5kZXIo
Y29udGV4dCk7CisKKyAgICAgICAgZXhwZWN0KENhbnZhc1Rlc3QuaGFzQ2FudmFzQmVlblJlZHJh
d24oY2FudmFzKSkudG8uYmUodHJ1ZSk7CisKKyAgICAgICAgZXhwZWN0KGNoYXJ0LmN1cnJlbnRT
ZWxlY3Rpb24oKSkudG8ubm90LmJlKG51bGwpOworICAgICAgICBleHBlY3QoY2hhcnQuY3VycmVu
dEluZGljYXRvcigpKS50by5iZShudWxsKTsKKworICAgICAgICBjYW52YXMuZGlzcGF0Y2hFdmVu
dChuZXcgTW91c2VFdmVudCgnY2xpY2snLCB7dGFyZ2V0OiBjYW52YXMsIGNsaWVudFg6IHJlY3Qu
bGVmdCArIDEsIGNsaWVudFk6IHkgKyA1LCBjb21wb3NlZDogdHJ1ZSwgYnViYmxlczogdHJ1ZX0p
KTsKKworICAgICAgICBDYW52YXNUZXN0LmZpbGxDYW52YXNCZWZvcmVSZWRyYXdDaGVjayhjYW52
YXMpOworCisgICAgICAgIGF3YWl0IHdhaXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29udGV4dCk7
CisgICAgICAgIGV4cGVjdChDYW52YXNUZXN0Lmhhc0NhbnZhc0JlZW5SZWRyYXduKGNhbnZhcykp
LnRvLmJlKHRydWUpOworCisgICAgICAgIGV4cGVjdChjaGFydC5jdXJyZW50U2VsZWN0aW9uKCkp
LnRvLmJlKG51bGwpOworICAgICAgICBjb25zdCBjdXJyZW50VmlldyA9IGNoYXJ0LnNhbXBsZWRU
aW1lU2VyaWVzRGF0YSgnY3VycmVudCcpOworICAgICAgICBjb25zdCBpbmRpY2F0b3IgPSBjaGFy
dC5jdXJyZW50SW5kaWNhdG9yKCk7CisgICAgICAgIGV4cGVjdChpbmRpY2F0b3IudmlldykudG8u
YmUoY3VycmVudFZpZXcpOworICAgICAgICBleHBlY3QoaW5kaWNhdG9yLnBvaW50KS50by5iZShj
dXJyZW50Vmlldy5maXJzdFBvaW50KCkpOworICAgICAgICBleHBlY3QoaW5kaWNhdG9yLmlzTG9j
a2VkKS50by5iZShmYWxzZSk7CiAgICAgfSk7CiAKLSAgICBpdCgnc2hvdWxkIGRpc3BhdGNoICJh
bm5vdGF0aW9uQ2xpY2siIGFjdGlvbiB3aGVuIGFuIGFubm90YXRpb24gaXMgY2xpY2tlZCcsICgp
ID0+IHsKKyAgICBpdCgnc2hvdWxkIGRpc3BhdGNoICJhbm5vdGF0aW9uQ2xpY2siIGFjdGlvbiB3
aGVuIGFuIGFubm90YXRpb24gaXMgY2xpY2tlZCcsIGFzeW5jICgpID0+IHsKICAgICAgICAgY29u
c3QgY29udGV4dCA9IG5ldyBCcm93c2luZ0NvbnRleHQoKTsKLSAgICAgICAgcmV0dXJuIENoYXJ0
VGVzdC5pbXBvcnRDaGFydFNjcmlwdHMoY29udGV4dCkudGhlbigoKSA9PiB7Ci0gICAgICAgICAg
ICBjb25zdCBjaGFydCA9IENoYXJ0VGVzdC5jcmVhdGVJbnRlcmFjdGl2ZUNoYXJ0V2l0aFNhbXBs
ZUNsdXN0ZXIoY29udGV4dCwgbnVsbCwKLSAgICAgICAgICAgICAgICB7YW5ub3RhdGlvbnM6IHsg
dGV4dFN0eWxlOiAnIzAwMCcsIHRleHRCYWNrZ3JvdW5kOiAnI2ZmZicsIG1pbldpZHRoOiAzLCBi
YXJIZWlnaHQ6IDEwLCBiYXJTcGFjaW5nOiAxLCBmaWxsU3R5bGU6ICcjY2NjJ319KTsKKyAgICAg
ICAgYXdhaXQgQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhjb250ZXh0KTsKIAotICAgICAg
ICAgICAgY2hhcnQuc2V0RG9tYWluKENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLnN0YXJ0VGltZSwg
Q2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuZW5kVGltZSk7Ci0gICAgICAgICAgICBjaGFydC5mZXRj
aE1lYXN1cmVtZW50U2V0cygpOwotICAgICAgICAgICAgQ2hhcnRUZXN0LnJlc3BvbmRXaXRoU2Ft
cGxlQ2x1c3Rlcihjb250ZXh0LnN5bWJvbHMuTW9ja1JlbW90ZUFQSS5yZXF1ZXN0c1swXSk7Cisg
ICAgICAgIGNvbnN0IGNoYXJ0ID0gQ2hhcnRUZXN0LmNyZWF0ZUludGVyYWN0aXZlQ2hhcnRXaXRo
U2FtcGxlQ2x1c3Rlcihjb250ZXh0LCBudWxsLAorICAgICAgICAgICAge2Fubm90YXRpb25zOiB7
IHRleHRTdHlsZTogJyMwMDAnLCB0ZXh0QmFja2dyb3VuZDogJyNmZmYnLCBtaW5XaWR0aDogMywg
YmFySGVpZ2h0OiAxMCwgYmFyU3BhY2luZzogMSwgZmlsbFN0eWxlOiAnI2NjYyd9fSk7CiAKLSAg
ICAgICAgICAgIGNvbnN0IGRpZmYgPSBDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5lbmRUaW1lIC0g
Q2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuc3RhcnRUaW1lOwotICAgICAgICAgICAgY29uc3QgYW5u
b3RhdGlvbnMgPSBbewotICAgICAgICAgICAgICAgIHN0YXJ0VGltZTogQ2hhcnRUZXN0LnNhbXBs
ZUNsdXN0ZXIuc3RhcnRUaW1lICsgZGlmZiAvIDIsCi0gICAgICAgICAgICAgICAgZW5kVGltZTog
Q2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuZW5kVGltZSAtIGRpZmYgLyA0LAotICAgICAgICAgICAg
ICAgIGxhYmVsOiAnaGVsbG8sIHdvcmxkJywKLSAgICAgICAgICAgIH1dOwotICAgICAgICAgICAg
Y2hhcnQuc2V0QW5ub3RhdGlvbnMoYW5ub3RhdGlvbnMpOwotCi0gICAgICAgICAgICBjb25zdCBh
bm5vdGF0aW9uQ2xpY2tDYWxscyA9IFtdOwotICAgICAgICAgICAgY2hhcnQubGlzdGVuVG9BY3Rp
b24oJ2Fubm90YXRpb25DbGljaycsICguLi5hcmdzKSA9PiBhbm5vdGF0aW9uQ2xpY2tDYWxscy5w
dXNoKGFyZ3MpKTsKLQotICAgICAgICAgICAgbGV0IGNhbnZhczsKLSAgICAgICAgICAgIGxldCBp
bml0OwotICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29udGV4
dCkudGhlbigoKSA9PiB7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGFubm90YXRpb25DbGlja0Nh
bGxzKS50by5iZS5lcWwoW10pOwotICAgICAgICAgICAgICAgIGV4cGVjdChjaGFydC5jb250ZW50
KCdhbm5vdGF0aW9uLWxhYmVsJykudGV4dENvbnRlbnQpLnRvLm5vdC5jb250YWluKCdoZWxsbywg
d29ybGQnKTsKLQotICAgICAgICAgICAgICAgIGNhbnZhcyA9IGNoYXJ0LmNvbnRlbnQoKS5xdWVy
eVNlbGVjdG9yKCdjYW52YXMnKTsKLSAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0gY2FudmFz
LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwotICAgICAgICAgICAgICAgIGluaXQgPSB7dGFyZ2V0
OiBjYW52YXMsIGNsaWVudFg6IHJlY3QucmlnaHQgLSByZWN0LndpZHRoIC8gNCwgY2xpZW50WTog
cmVjdC5ib3R0b20gLSA1LCBjb21wb3NlZDogdHJ1ZSwgYnViYmxlczogdHJ1ZX07Ci0gICAgICAg
ICAgICAgICAgY2FudmFzLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ21vdXNlbW92ZScs
IGluaXQpKTsKLQotICAgICAgICAgICAgICAgIENhbnZhc1Rlc3QuZmlsbENhbnZhc0JlZm9yZVJl
ZHJhd0NoZWNrKGNhbnZhcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JDb21wb25l
bnRzVG9SZW5kZXIoY29udGV4dCk7Ci0gICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKLSAgICAg
ICAgICAgICAgICBleHBlY3QoQ2FudmFzVGVzdC5oYXNDYW52YXNCZWVuUmVkcmF3bihjYW52YXMp
KS50by5iZSh0cnVlKTsKLQotICAgICAgICAgICAgICAgIGV4cGVjdChjaGFydC5jb250ZW50KCdh
bm5vdGF0aW9uLWxhYmVsJykudGV4dENvbnRlbnQpLnRvLmNvbnRhaW4oJ2hlbGxvLCB3b3JsZCcp
OwotICAgICAgICAgICAgICAgIGV4cGVjdChhbm5vdGF0aW9uQ2xpY2tDYWxscykudG8uYmUuZXFs
KFtdKTsKLSAgICAgICAgICAgICAgICBjYW52YXMuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVu
dCgnbW91c2Vkb3duJywgaW5pdCkpOwotICAgICAgICAgICAgICAgIGNhbnZhcy5kaXNwYXRjaEV2
ZW50KG5ldyBNb3VzZUV2ZW50KCdtb3VzZXVwJywgaW5pdCkpOwotICAgICAgICAgICAgICAgIGNh
bnZhcy5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdjbGljaycsIGluaXQpKTsKLQotICAg
ICAgICAgICAgICAgIGV4cGVjdChhbm5vdGF0aW9uQ2xpY2tDYWxscykudG8uYmUuZXFsKFtbYW5u
b3RhdGlvbnNbMF1dXSk7Ci0KLSAgICAgICAgICAgICAgICBDYW52YXNUZXN0LmZpbGxDYW52YXNC
ZWZvcmVSZWRyYXdDaGVjayhjYW52YXMpOwotICAgICAgICAgICAgICAgIHJldHVybiB3YWl0Rm9y
Q29tcG9uZW50c1RvUmVuZGVyKGNvbnRleHQpOwotICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7
Ci0gICAgICAgICAgICAgICAgZXhwZWN0KENhbnZhc1Rlc3QuaGFzQ2FudmFzQmVlblJlZHJhd24o
Y2FudmFzKSkudG8uYmUoZmFsc2UpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOworICAg
ICAgICBjaGFydC5zZXREb21haW4oQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuc3RhcnRUaW1lLCBD
aGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5lbmRUaW1lKTsKKyAgICAgICAgY2hhcnQuZmV0Y2hNZWFz
dXJlbWVudFNldHMoKTsKKyAgICAgICAgQ2hhcnRUZXN0LnJlc3BvbmRXaXRoU2FtcGxlQ2x1c3Rl
cihjb250ZXh0LnN5bWJvbHMuTW9ja1JlbW90ZUFQSS5yZXF1ZXN0c1swXSk7CisKKyAgICAgICAg
Y29uc3QgZGlmZiA9IENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLmVuZFRpbWUgLSBDaGFydFRlc3Qu
c2FtcGxlQ2x1c3Rlci5zdGFydFRpbWU7CisgICAgICAgIGNvbnN0IGFubm90YXRpb25zID0gW3sK
KyAgICAgICAgICAgIHN0YXJ0VGltZTogQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuc3RhcnRUaW1l
ICsgZGlmZiAvIDIsCisgICAgICAgICAgICBlbmRUaW1lOiBDaGFydFRlc3Quc2FtcGxlQ2x1c3Rl
ci5lbmRUaW1lIC0gZGlmZiAvIDQsCisgICAgICAgICAgICBsYWJlbDogJ2hlbGxvLCB3b3JsZCcs
CisgICAgICAgIH1dOworICAgICAgICBjaGFydC5zZXRBbm5vdGF0aW9ucyhhbm5vdGF0aW9ucyk7
CisKKyAgICAgICAgY29uc3QgYW5ub3RhdGlvbkNsaWNrQ2FsbHMgPSBbXTsKKyAgICAgICAgY2hh
cnQubGlzdGVuVG9BY3Rpb24oJ2Fubm90YXRpb25DbGljaycsICguLi5hcmdzKSA9PiBhbm5vdGF0
aW9uQ2xpY2tDYWxscy5wdXNoKGFyZ3MpKTsKKworICAgICAgICBhd2FpdCB3YWl0Rm9yQ29tcG9u
ZW50c1RvUmVuZGVyKGNvbnRleHQpOworCisgICAgICAgIGV4cGVjdChhbm5vdGF0aW9uQ2xpY2tD
YWxscykudG8uYmUuZXFsKFtdKTsKKyAgICAgICAgZXhwZWN0KGNoYXJ0LmNvbnRlbnQoJ2Fubm90
YXRpb24tbGFiZWwnKS50ZXh0Q29udGVudCkudG8ubm90LmNvbnRhaW4oJ2hlbGxvLCB3b3JsZCcp
OworCisgICAgICAgIGNvbnN0IGNhbnZhcyA9IGNoYXJ0LmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9y
KCdjYW52YXMnKTsKKyAgICAgICAgY29uc3QgcmVjdCA9IGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKTsKKyAgICAgICAgY29uc3QgaW5pdCA9IHt0YXJnZXQ6IGNhbnZhcywgY2xpZW50WDog
cmVjdC5yaWdodCAtIHJlY3Qud2lkdGggLyA0LCBjbGllbnRZOiByZWN0LmJvdHRvbSAtIDUsIGNv
bXBvc2VkOiB0cnVlLCBidWJibGVzOiB0cnVlfTsKKyAgICAgICAgY2FudmFzLmRpc3BhdGNoRXZl
bnQobmV3IE1vdXNlRXZlbnQoJ21vdXNlbW92ZScsIGluaXQpKTsKKworICAgICAgICBDYW52YXNU
ZXN0LmZpbGxDYW52YXNCZWZvcmVSZWRyYXdDaGVjayhjYW52YXMpOworICAgICAgICBhd2FpdCB3
YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNvbnRleHQpOworCisgICAgICAgIGV4cGVjdChDYW52
YXNUZXN0Lmhhc0NhbnZhc0JlZW5SZWRyYXduKGNhbnZhcykpLnRvLmJlKHRydWUpOworCisgICAg
ICAgIGV4cGVjdChjaGFydC5jb250ZW50KCdhbm5vdGF0aW9uLWxhYmVsJykudGV4dENvbnRlbnQp
LnRvLmNvbnRhaW4oJ2hlbGxvLCB3b3JsZCcpOworICAgICAgICBleHBlY3QoYW5ub3RhdGlvbkNs
aWNrQ2FsbHMpLnRvLmJlLmVxbChbXSk7CisgICAgICAgIGNhbnZhcy5kaXNwYXRjaEV2ZW50KG5l
dyBNb3VzZUV2ZW50KCdtb3VzZWRvd24nLCBpbml0KSk7CisgICAgICAgIGNhbnZhcy5kaXNwYXRj
aEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdtb3VzZXVwJywgaW5pdCkpOworICAgICAgICBjYW52YXMu
ZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgnY2xpY2snLCBpbml0KSk7CisKKyAgICAgICAg
ZXhwZWN0KGFubm90YXRpb25DbGlja0NhbGxzKS50by5iZS5lcWwoW1thbm5vdGF0aW9uc1swXV1d
KTsKKworICAgICAgICBDYW52YXNUZXN0LmZpbGxDYW52YXNCZWZvcmVSZWRyYXdDaGVjayhjYW52
YXMpOworICAgICAgICBhd2FpdCB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNvbnRleHQpOwor
CisgICAgICAgIGV4cGVjdChDYW52YXNUZXN0Lmhhc0NhbnZhc0JlZW5SZWRyYXduKGNhbnZhcykp
LnRvLmJlKGZhbHNlKTsKICAgICB9KTsKIAogICAgIGRlc2NyaWJlKCdyZW5kZXInLCAoKSA9PiB7
Ci0gICAgICAgIGl0KCdzaG91bGQgcmVuZGVyIHRoZSB1bmxvY2tlZCBpbmRpY2F0b3Igd2hlbiBv
cHRpb25zLmluZGljYXRvciBpcyBzcGVjaWZpZWQnLCAoKSA9PiB7CisgICAgICAgIGl0KCdzaG91
bGQgcmVuZGVyIHRoZSB1bmxvY2tlZCBpbmRpY2F0b3Igd2hlbiBvcHRpb25zLmluZGljYXRvciBp
cyBzcGVjaWZpZWQnLCBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBjb250ZXh0ID0g
bmV3IEJyb3dzaW5nQ29udGV4dCgpOwotICAgICAgICAgICAgcmV0dXJuIENoYXJ0VGVzdC5pbXBv
cnRDaGFydFNjcmlwdHMoY29udGV4dCkudGhlbigoKSA9PiB7Ci0gICAgICAgICAgICAgICAgY29u
c3QgY2hhcnRXaXRob3V0SW5kaWNhdG9yID0gQ2hhcnRUZXN0LmNyZWF0ZUludGVyYWN0aXZlQ2hh
cnRXaXRoU2FtcGxlQ2x1c3Rlcihjb250ZXh0KTsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFy
dFdpdGhJbmRpY2F0b3IgPSBDaGFydFRlc3QuY3JlYXRlSW50ZXJhY3RpdmVDaGFydFdpdGhTYW1w
bGVDbHVzdGVyKGNvbnRleHQsIG51bGwsCi0gICAgICAgICAgICAgICAgICAgIHtpbmRpY2F0b3I6
IHtsaW5lU3R5bGU6ICdyZ2IoNTEsIDIwNCwgMjU1KScsIGxpbmVXaWR0aDogMiwgcG9pbnRSYWRp
dXM6IDJ9LCBpbnRlcmFjdGl2ZUNoYXJ0OiB0cnVlfSk7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
aW5kaWNhdG9yQ29sb3IgPSB7cjogNTEsIGc6IDIwNCwgYjogMjU1fTsKLQotICAgICAgICAgICAg
ICAgIGNoYXJ0V2l0aG91dEluZGljYXRvci5zZXREb21haW4oQ2hhcnRUZXN0LnNhbXBsZUNsdXN0
ZXIuc3RhcnRUaW1lLCBDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5lbmRUaW1lKTsKLSAgICAgICAg
ICAgICAgICBjaGFydFdpdGhvdXRJbmRpY2F0b3IuZmV0Y2hNZWFzdXJlbWVudFNldHMoKTsKLSAg
ICAgICAgICAgICAgICBDaGFydFRlc3QucmVzcG9uZFdpdGhTYW1wbGVDbHVzdGVyKGNvbnRleHQu
c3ltYm9scy5Nb2NrUmVtb3RlQVBJLnJlcXVlc3RzWzBdKTsKLQotICAgICAgICAgICAgICAgIGNo
YXJ0V2l0aEluZGljYXRvci5zZXREb21haW4oQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuc3RhcnRU
aW1lLCBDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5lbmRUaW1lKTsKLSAgICAgICAgICAgICAgICBj
aGFydFdpdGhJbmRpY2F0b3IuZmV0Y2hNZWFzdXJlbWVudFNldHMoKTsKLQotICAgICAgICAgICAg
ICAgIGxldCBjYW52YXNXaXRob3V0SW5kaWNhdG9yOwotICAgICAgICAgICAgICAgIGxldCBjYW52
YXNXaXRoSW5kaWNhdG9yOwotICAgICAgICAgICAgICAgIHJldHVybiB3YWl0Rm9yQ29tcG9uZW50
c1RvUmVuZGVyKGNvbnRleHQpLnRoZW4oKCkgPT4gewotICAgICAgICAgICAgICAgICAgICBjYW52
YXNXaXRob3V0SW5kaWNhdG9yID0gY2hhcnRXaXRob3V0SW5kaWNhdG9yLmNvbnRlbnQoKS5xdWVy
eVNlbGVjdG9yKCdjYW52YXMnKTsKLSAgICAgICAgICAgICAgICAgICAgY2FudmFzV2l0aEluZGlj
YXRvciA9IGNoYXJ0V2l0aEluZGljYXRvci5jb250ZW50KCkucXVlcnlTZWxlY3RvcignY2FudmFz
Jyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IGNhbnZhc1dpdGhJbmRpY2F0
b3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHgg
PSByZWN0LnJpZ2h0IC0gMTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgeSA9IHJlY3QudG9w
ICsgcmVjdC5oZWlnaHQgLyAyOwotICAgICAgICAgICAgICAgICAgICBjYW52YXNXaXRoSW5kaWNh
dG9yLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ21vdXNlbW92ZScsIHt0YXJnZXQ6IGNh
bnZhc1dpdGhJbmRpY2F0b3IsIGNsaWVudFg6IHgsIGNsaWVudFk6IHksIGNvbXBvc2VkOiB0cnVl
LCBidWJibGVzOiB0cnVlfSkpOwotCi0gICAgICAgICAgICAgICAgICAgIENhbnZhc1Rlc3QuZmls
bENhbnZhc0JlZm9yZVJlZHJhd0NoZWNrKGNhbnZhc1dpdGhJbmRpY2F0b3IpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gd2FpdEZvckNvbXBvbmVudHNUb1JlbmRlcihjb250ZXh0KTsKLSAg
ICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0
KENhbnZhc1Rlc3QuaGFzQ2FudmFzQmVlblJlZHJhd24oY2FudmFzV2l0aEluZGljYXRvcikpLnRv
LmJlKHRydWUpOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGljYXRvciA9IGNoYXJ0
V2l0aEluZGljYXRvci5jdXJyZW50SW5kaWNhdG9yKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnN0IGN1cnJlbnRWaWV3ID0gY2hhcnRXaXRoSW5kaWNhdG9yLnNhbXBsZWRUaW1lU2VyaWVzRGF0
YSgnY3VycmVudCcpOwotICAgICAgICAgICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9yLnZpZXcp
LnRvLmJlKGN1cnJlbnRWaWV3KTsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGluZGljYXRv
ci5wb2ludCkudG8uYmUoY3VycmVudFZpZXcubGFzdFBvaW50KCkpOwotICAgICAgICAgICAgICAg
ICAgICBleHBlY3QoaW5kaWNhdG9yLmlzTG9ja2VkKS50by5iZShmYWxzZSk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgQ2FudmFzVGVzdC5leHBlY3RDYW52YXNlc01pc21hdGNoKGNhbnZhc1dpdGhv
dXRJbmRpY2F0b3IsIGNhbnZhc1dpdGhJbmRpY2F0b3IpOwotICAgICAgICAgICAgICAgICAgICBl
eHBlY3QoQ2FudmFzVGVzdC5jYW52YXNDb250YWluc0NvbG9yKGNhbnZhc1dpdGhvdXRJbmRpY2F0
b3IsIGluZGljYXRvckNvbG9yKSkudG8uYmUoZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICBl
eHBlY3QoQ2FudmFzVGVzdC5jYW52YXNDb250YWluc0NvbG9yKGNhbnZhc1dpdGhJbmRpY2F0b3Is
IGluZGljYXRvckNvbG9yKSkudG8uYmUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIGF3YWl0IENoYXJ0VGVzdC5pbXBvcnRDaGFydFNjcmlw
dHMoY29udGV4dCk7CisKKyAgICAgICAgICAgIGNvbnN0IGNoYXJ0V2l0aG91dEluZGljYXRvciA9
IENoYXJ0VGVzdC5jcmVhdGVJbnRlcmFjdGl2ZUNoYXJ0V2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4
dCk7CisgICAgICAgICAgICBjb25zdCBjaGFydFdpdGhJbmRpY2F0b3IgPSBDaGFydFRlc3QuY3Jl
YXRlSW50ZXJhY3RpdmVDaGFydFdpdGhTYW1wbGVDbHVzdGVyKGNvbnRleHQsIG51bGwsCisgICAg
ICAgICAgICAgICAge2luZGljYXRvcjoge2xpbmVTdHlsZTogJ3JnYig1MSwgMjA0LCAyNTUpJywg
bGluZVdpZHRoOiAyLCBwb2ludFJhZGl1czogMn0sIGludGVyYWN0aXZlQ2hhcnQ6IHRydWV9KTsK
KyAgICAgICAgICAgIGNvbnN0IGluZGljYXRvckNvbG9yID0ge3I6IDUxLCBnOiAyMDQsIGI6IDI1
NX07CisKKyAgICAgICAgICAgIGNoYXJ0V2l0aG91dEluZGljYXRvci5zZXREb21haW4oQ2hhcnRU
ZXN0LnNhbXBsZUNsdXN0ZXIuc3RhcnRUaW1lLCBDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5lbmRU
aW1lKTsKKyAgICAgICAgICAgIGNoYXJ0V2l0aG91dEluZGljYXRvci5mZXRjaE1lYXN1cmVtZW50
U2V0cygpOworICAgICAgICAgICAgQ2hhcnRUZXN0LnJlc3BvbmRXaXRoU2FtcGxlQ2x1c3Rlcihj
b250ZXh0LnN5bWJvbHMuTW9ja1JlbW90ZUFQSS5yZXF1ZXN0c1swXSk7CisKKyAgICAgICAgICAg
IGNoYXJ0V2l0aEluZGljYXRvci5zZXREb21haW4oQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuc3Rh
cnRUaW1lLCBDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5lbmRUaW1lKTsKKyAgICAgICAgICAgIGNo
YXJ0V2l0aEluZGljYXRvci5mZXRjaE1lYXN1cmVtZW50U2V0cygpOworCisgICAgICAgICAgICBh
d2FpdCB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNvbnRleHQpOworCisgICAgICAgICAgICBj
b25zdCBjYW52YXNXaXRob3V0SW5kaWNhdG9yID0gY2hhcnRXaXRob3V0SW5kaWNhdG9yLmNvbnRl
bnQoKS5xdWVyeVNlbGVjdG9yKCdjYW52YXMnKTsKKyAgICAgICAgICAgIGNvbnN0IGNhbnZhc1dp
dGhJbmRpY2F0b3IgPSBjaGFydFdpdGhJbmRpY2F0b3IuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3Io
J2NhbnZhcycpOworCisgICAgICAgICAgICBjb25zdCByZWN0ID0gY2FudmFzV2l0aEluZGljYXRv
ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKyAgICAgICAgICAgIGNvbnN0IHggPSByZWN0LnJp
Z2h0IC0gMTsKKyAgICAgICAgICAgIGNvbnN0IHkgPSByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8g
MjsKKyAgICAgICAgICAgIGNhbnZhc1dpdGhJbmRpY2F0b3IuZGlzcGF0Y2hFdmVudChuZXcgTW91
c2VFdmVudCgnbW91c2Vtb3ZlJywge3RhcmdldDogY2FudmFzV2l0aEluZGljYXRvciwgY2xpZW50
WDogeCwgY2xpZW50WTogeSwgY29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWV9KSk7CisKKyAg
ICAgICAgICAgIENhbnZhc1Rlc3QuZmlsbENhbnZhc0JlZm9yZVJlZHJhd0NoZWNrKGNhbnZhc1dp
dGhJbmRpY2F0b3IpOworICAgICAgICAgICAgYXdhaXQgd2FpdEZvckNvbXBvbmVudHNUb1JlbmRl
cihjb250ZXh0KTsKKworICAgICAgICAgICAgZXhwZWN0KENhbnZhc1Rlc3QuaGFzQ2FudmFzQmVl
blJlZHJhd24oY2FudmFzV2l0aEluZGljYXRvcikpLnRvLmJlKHRydWUpOworCisgICAgICAgICAg
ICBjb25zdCBpbmRpY2F0b3IgPSBjaGFydFdpdGhJbmRpY2F0b3IuY3VycmVudEluZGljYXRvcigp
OworICAgICAgICAgICAgY29uc3QgY3VycmVudFZpZXcgPSBjaGFydFdpdGhJbmRpY2F0b3Iuc2Ft
cGxlZFRpbWVTZXJpZXNEYXRhKCdjdXJyZW50Jyk7CisgICAgICAgICAgICBleHBlY3QoaW5kaWNh
dG9yLnZpZXcpLnRvLmJlKGN1cnJlbnRWaWV3KTsKKyAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0
b3IucG9pbnQpLnRvLmJlKGN1cnJlbnRWaWV3Lmxhc3RQb2ludCgpKTsKKyAgICAgICAgICAgIGV4
cGVjdChpbmRpY2F0b3IuaXNMb2NrZWQpLnRvLmJlKGZhbHNlKTsKKworICAgICAgICAgICAgQ2Fu
dmFzVGVzdC5leHBlY3RDYW52YXNlc01pc21hdGNoKGNhbnZhc1dpdGhvdXRJbmRpY2F0b3IsIGNh
bnZhc1dpdGhJbmRpY2F0b3IpOworICAgICAgICAgICAgZXhwZWN0KENhbnZhc1Rlc3QuY2FudmFz
Q29udGFpbnNDb2xvcihjYW52YXNXaXRob3V0SW5kaWNhdG9yLCBpbmRpY2F0b3JDb2xvcikpLnRv
LmJlKGZhbHNlKTsKKyAgICAgICAgICAgIGV4cGVjdChDYW52YXNUZXN0LmNhbnZhc0NvbnRhaW5z
Q29sb3IoY2FudmFzV2l0aEluZGljYXRvciwgaW5kaWNhdG9yQ29sb3IpKS50by5iZSh0cnVlKTsK
ICAgICAgICAgfSk7CiAKLSAgICAgICAgaXQoJ3Nob3VsZCByZW5kZXIgdGhlIGxvY2tlZCBpbmRp
Y2F0b3IgZGlmZmVyZW50bHkgZnJvbSB0aGUgdW5sb2NrZWQgaW5kaWNhdG9yIHdoZW4gb3B0aW9u
cy5sb2NrZWRJbmRpY2F0b3IgaXMgc3BlY2lmaWVkJywgKCkgPT4geworICAgICAgICBpdCgnc2hv
dWxkIHJlbmRlciB0aGUgbG9ja2VkIGluZGljYXRvciBkaWZmZXJlbnRseSBmcm9tIHRoZSB1bmxv
Y2tlZCBpbmRpY2F0b3Igd2hlbiBvcHRpb25zLmxvY2tlZEluZGljYXRvciBpcyBzcGVjaWZpZWQn
LCBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IEJyb3dzaW5n
Q29udGV4dCgpOwotICAgICAgICAgICAgcmV0dXJuIENoYXJ0VGVzdC5pbXBvcnRDaGFydFNjcmlw
dHMoY29udGV4dCkudGhlbigoKSA9PiB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhcnRPcHRp
b25zID0gewotICAgICAgICAgICAgICAgICAgICBpbmRpY2F0b3I6IHtsaW5lU3R5bGU6ICdyZ2Io
NTEsIDIwNCwgMjU1KScsIGxpbmVXaWR0aDogMiwgcG9pbnRSYWRpdXM6IDN9LAotICAgICAgICAg
ICAgICAgICAgICBsb2NrZWRJbmRpY2F0b3I6IHtsaW5lU3R5bGU6ICdyZ2IoNTEsIDEwMiwgMjA0
KScsIGZpbGxTdHlsZTogJ3JnYigyNTAsIDI1MCwgMjUwKScsIGxpbmVXaWR0aDogMiwgcG9pbnRS
YWRpdXM6IDN9Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICBjb25zdCB1bmxv
Y2tlZENvbG9yID0ge3I6IDUxLCBnOiAyMDQsIGI6IDI1NX07Ci0gICAgICAgICAgICAgICAgY29u
c3QgbG9ja2VkQ29sb3IgPSB7cjogNTEsIGc6IDEwMiwgYjogMjA0fTsKLSAgICAgICAgICAgICAg
ICBjb25zdCBsb2NrZWRGaWxsQ29sb3IgPSB7cjogMjUwLCBnOiAyNTAsIGI6IDI1MH07Ci0gICAg
ICAgICAgICAgICAgY29uc3QgY2hhcnRXaXRoVW5sb2NrZWRJbmRpY2F0b3IgPSBDaGFydFRlc3Qu
Y3JlYXRlSW50ZXJhY3RpdmVDaGFydFdpdGhTYW1wbGVDbHVzdGVyKGNvbnRleHQsIG51bGwsIGNo
YXJ0T3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhcnRXaXRoTG9ja2VkSW5kaWNh
dG9yID0gQ2hhcnRUZXN0LmNyZWF0ZUludGVyYWN0aXZlQ2hhcnRXaXRoU2FtcGxlQ2x1c3Rlcihj
b250ZXh0LCBudWxsLCBjaGFydE9wdGlvbnMpOwotCi0gICAgICAgICAgICAgICAgY2hhcnRXaXRo
VW5sb2NrZWRJbmRpY2F0b3Iuc2V0RG9tYWluKENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLnN0YXJ0
VGltZSwgQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuZW5kVGltZSk7Ci0gICAgICAgICAgICAgICAg
Y2hhcnRXaXRoVW5sb2NrZWRJbmRpY2F0b3IuZmV0Y2hNZWFzdXJlbWVudFNldHMoKTsKLSAgICAg
ICAgICAgICAgICBDaGFydFRlc3QucmVzcG9uZFdpdGhTYW1wbGVDbHVzdGVyKGNvbnRleHQuc3lt
Ym9scy5Nb2NrUmVtb3RlQVBJLnJlcXVlc3RzWzBdKTsKLQotICAgICAgICAgICAgICAgIGNoYXJ0
V2l0aExvY2tlZEluZGljYXRvci5zZXREb21haW4oQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuc3Rh
cnRUaW1lLCBDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5lbmRUaW1lKTsKLSAgICAgICAgICAgICAg
ICBjaGFydFdpdGhMb2NrZWRJbmRpY2F0b3IuZmV0Y2hNZWFzdXJlbWVudFNldHMoKTsKLQotICAg
ICAgICAgICAgICAgIGxldCBjYW52YXNXaXRoVW5sb2NrZWRJbmRpY2F0b3I7Ci0gICAgICAgICAg
ICAgICAgbGV0IGNhbnZhc1dpdGhMb2NrZWRJbmRpY2F0b3I7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHdhaXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29udGV4dCkudGhlbigoKSA9PiB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNhbnZhc1dpdGhVbmxvY2tlZEluZGljYXRvciA9IGNoYXJ0V2l0aFVu
bG9ja2VkSW5kaWNhdG9yLmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCdjYW52YXMnKTsKLSAgICAg
ICAgICAgICAgICAgICAgY2FudmFzV2l0aExvY2tlZEluZGljYXRvciA9IGNoYXJ0V2l0aExvY2tl
ZEluZGljYXRvci5jb250ZW50KCkucXVlcnlTZWxlY3RvcignY2FudmFzJyk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgY29uc3QgcmVjdCA9IGNhbnZhc1dpdGhVbmxvY2tlZEluZGljYXRvci5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgeCA9IHJlY3Qu
cmlnaHQgLSAxOwotICAgICAgICAgICAgICAgICAgICBjb25zdCB5ID0gcmVjdC50b3AgKyByZWN0
LmhlaWdodCAvIDI7Ci0gICAgICAgICAgICAgICAgICAgIGNhbnZhc1dpdGhVbmxvY2tlZEluZGlj
YXRvci5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdtb3VzZW1vdmUnLCB7dGFyZ2V0OiBj
YW52YXNXaXRoVW5sb2NrZWRJbmRpY2F0b3IsIGNsaWVudFg6IHgsIGNsaWVudFk6IHksIGNvbXBv
c2VkOiB0cnVlLCBidWJibGVzOiB0cnVlfSkpOwotICAgICAgICAgICAgICAgICAgICBjYW52YXNX
aXRoTG9ja2VkSW5kaWNhdG9yLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ2NsaWNrJywg
e3RhcmdldDogY2FudmFzV2l0aExvY2tlZEluZGljYXRvciwgY2xpZW50WDogeCwgY2xpZW50WTog
eSwgY29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWV9KSk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgQ2FudmFzVGVzdC5maWxsQ2FudmFzQmVmb3JlUmVkcmF3Q2hlY2soY2FudmFzV2l0aFVubG9j
a2VkSW5kaWNhdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgQ2FudmFzVGVzdC5maWxsQ2FudmFz
QmVmb3JlUmVkcmF3Q2hlY2soY2FudmFzV2l0aExvY2tlZEluZGljYXRvcik7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNvbnRleHQpOwotICAg
ICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewotICAgICAgICAgICAgICAgICAgICBleHBlY3Qo
Q2FudmFzVGVzdC5oYXNDYW52YXNCZWVuUmVkcmF3bihjYW52YXNXaXRoVW5sb2NrZWRJbmRpY2F0
b3IpKS50by5iZSh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KENhbnZhc1Rlc3Qu
aGFzQ2FudmFzQmVlblJlZHJhd24oY2FudmFzV2l0aExvY2tlZEluZGljYXRvcikpLnRvLmJlKHRy
dWUpOwotCi0gICAgICAgICAgICAgICAgICAgIGxldCBpbmRpY2F0b3IgPSBjaGFydFdpdGhVbmxv
Y2tlZEluZGljYXRvci5jdXJyZW50SW5kaWNhdG9yKCk7Ci0gICAgICAgICAgICAgICAgICAgIGxl
dCBjdXJyZW50VmlldyA9IGNoYXJ0V2l0aFVubG9ja2VkSW5kaWNhdG9yLnNhbXBsZWRUaW1lU2Vy
aWVzRGF0YSgnY3VycmVudCcpOwotICAgICAgICAgICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9y
LnZpZXcpLnRvLmJlKGN1cnJlbnRWaWV3KTsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGlu
ZGljYXRvci5wb2ludCkudG8uYmUoY3VycmVudFZpZXcubGFzdFBvaW50KCkpOwotICAgICAgICAg
ICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9yLmlzTG9ja2VkKS50by5iZShmYWxzZSk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgaW5kaWNhdG9yID0gY2hhcnRXaXRoTG9ja2VkSW5kaWNhdG9yLmN1
cnJlbnRJbmRpY2F0b3IoKTsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFZpZXcgPSBjaGFy
dFdpdGhMb2NrZWRJbmRpY2F0b3Iuc2FtcGxlZFRpbWVTZXJpZXNEYXRhKCdjdXJyZW50Jyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3IudmlldykudG8uYmUoY3VycmVudFZp
ZXcpOwotICAgICAgICAgICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9yLnBvaW50KS50by5iZShj
dXJyZW50Vmlldy5sYXN0UG9pbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdChpbmRp
Y2F0b3IuaXNMb2NrZWQpLnRvLmJlKHRydWUpOwotCi0gICAgICAgICAgICAgICAgICAgIENhbnZh
c1Rlc3QuZXhwZWN0Q2FudmFzZXNNaXNtYXRjaChjYW52YXNXaXRoVW5sb2NrZWRJbmRpY2F0b3Is
IGNhbnZhc1dpdGhMb2NrZWRJbmRpY2F0b3IpOwotICAgICAgICAgICAgICAgICAgICBleHBlY3Qo
Q2FudmFzVGVzdC5jYW52YXNDb250YWluc0NvbG9yKGNhbnZhc1dpdGhVbmxvY2tlZEluZGljYXRv
ciwgdW5sb2NrZWRDb2xvcikpLnRvLmJlKHRydWUpOwotICAgICAgICAgICAgICAgICAgICBleHBl
Y3QoQ2FudmFzVGVzdC5jYW52YXNDb250YWluc0NvbG9yKGNhbnZhc1dpdGhVbmxvY2tlZEluZGlj
YXRvciwgbG9ja2VkRmlsbENvbG9yKSkudG8uYmUoZmFsc2UpOwotICAgICAgICAgICAgICAgICAg
ICBleHBlY3QoQ2FudmFzVGVzdC5jYW52YXNDb250YWluc0NvbG9yKGNhbnZhc1dpdGhMb2NrZWRJ
bmRpY2F0b3IsIGxvY2tlZENvbG9yKSkudG8uYmUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAg
IGV4cGVjdChDYW52YXNUZXN0LmNhbnZhc0NvbnRhaW5zQ29sb3IoY2FudmFzV2l0aExvY2tlZElu
ZGljYXRvciwgbG9ja2VkRmlsbENvbG9yKSkudG8uYmUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGF3YWl0IENoYXJ0VGVzdC5pbXBvcnRD
aGFydFNjcmlwdHMoY29udGV4dCk7CisgICAgICAgICAgICBjb25zdCBjaGFydE9wdGlvbnMgPSB7
CisgICAgICAgICAgICAgICAgaW5kaWNhdG9yOiB7bGluZVN0eWxlOiAncmdiKDUxLCAyMDQsIDI1
NSknLCBsaW5lV2lkdGg6IDIsIHBvaW50UmFkaXVzOiAzfSwKKyAgICAgICAgICAgICAgICBsb2Nr
ZWRJbmRpY2F0b3I6IHtsaW5lU3R5bGU6ICdyZ2IoNTEsIDEwMiwgMjA0KScsIGZpbGxTdHlsZTog
J3JnYigyNTAsIDI1MCwgMjUwKScsIGxpbmVXaWR0aDogMiwgcG9pbnRSYWRpdXM6IDN9CisgICAg
ICAgICAgICB9OworICAgICAgICAgICAgY29uc3QgdW5sb2NrZWRDb2xvciA9IHtyOiA1MSwgZzog
MjA0LCBiOiAyNTV9OworICAgICAgICAgICAgY29uc3QgbG9ja2VkQ29sb3IgPSB7cjogNTEsIGc6
IDEwMiwgYjogMjA0fTsKKyAgICAgICAgICAgIGNvbnN0IGxvY2tlZEZpbGxDb2xvciA9IHtyOiAy
NTAsIGc6IDI1MCwgYjogMjUwfTsKKyAgICAgICAgICAgIGxldCBjaGFydFdpdGhVbmxvY2tlZElu
ZGljYXRvciA9IENoYXJ0VGVzdC5jcmVhdGVJbnRlcmFjdGl2ZUNoYXJ0V2l0aFNhbXBsZUNsdXN0
ZXIoY29udGV4dCwgbnVsbCwgY2hhcnRPcHRpb25zKTsKKyAgICAgICAgICAgIGxldCBjaGFydFdp
dGhMb2NrZWRJbmRpY2F0b3IgPSBDaGFydFRlc3QuY3JlYXRlSW50ZXJhY3RpdmVDaGFydFdpdGhT
YW1wbGVDbHVzdGVyKGNvbnRleHQsIG51bGwsIGNoYXJ0T3B0aW9ucyk7CisKKyAgICAgICAgICAg
IGNoYXJ0V2l0aFVubG9ja2VkSW5kaWNhdG9yLnNldERvbWFpbihDaGFydFRlc3Quc2FtcGxlQ2x1
c3Rlci5zdGFydFRpbWUsIENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLmVuZFRpbWUpOworICAgICAg
ICAgICAgY2hhcnRXaXRoVW5sb2NrZWRJbmRpY2F0b3IuZmV0Y2hNZWFzdXJlbWVudFNldHMoKTsK
KyAgICAgICAgICAgIENoYXJ0VGVzdC5yZXNwb25kV2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4dC5z
eW1ib2xzLk1vY2tSZW1vdGVBUEkucmVxdWVzdHNbMF0pOworCisgICAgICAgICAgICBjaGFydFdp
dGhMb2NrZWRJbmRpY2F0b3Iuc2V0RG9tYWluKENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLnN0YXJ0
VGltZSwgQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuZW5kVGltZSk7CisgICAgICAgICAgICBjaGFy
dFdpdGhMb2NrZWRJbmRpY2F0b3IuZmV0Y2hNZWFzdXJlbWVudFNldHMoKTsKKworICAgICAgICAg
ICAgbGV0IGNhbnZhc1dpdGhVbmxvY2tlZEluZGljYXRvcjsKKyAgICAgICAgICAgIGxldCBjYW52
YXNXaXRoTG9ja2VkSW5kaWNhdG9yOworCisgICAgICAgICAgICBhd2FpdCB3YWl0Rm9yQ29tcG9u
ZW50c1RvUmVuZGVyKGNvbnRleHQpOworICAgICAgICAgICAgY2FudmFzV2l0aFVubG9ja2VkSW5k
aWNhdG9yID0gY2hhcnRXaXRoVW5sb2NrZWRJbmRpY2F0b3IuY29udGVudCgpLnF1ZXJ5U2VsZWN0
b3IoJ2NhbnZhcycpOworICAgICAgICAgICAgY2FudmFzV2l0aExvY2tlZEluZGljYXRvciA9IGNo
YXJ0V2l0aExvY2tlZEluZGljYXRvci5jb250ZW50KCkucXVlcnlTZWxlY3RvcignY2FudmFzJyk7
CisKKyAgICAgICAgICAgIGNvbnN0IHJlY3QgPSBjYW52YXNXaXRoVW5sb2NrZWRJbmRpY2F0b3Iu
Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CisgICAgICAgICAgICBjb25zdCB4ID0gcmVjdC5yaWdo
dCAtIDE7CisgICAgICAgICAgICBjb25zdCB5ID0gcmVjdC50b3AgKyByZWN0LmhlaWdodCAvIDI7
CisgICAgICAgICAgICBjYW52YXNXaXRoVW5sb2NrZWRJbmRpY2F0b3IuZGlzcGF0Y2hFdmVudChu
ZXcgTW91c2VFdmVudCgnbW91c2Vtb3ZlJywge3RhcmdldDogY2FudmFzV2l0aFVubG9ja2VkSW5k
aWNhdG9yLCBjbGllbnRYOiB4LCBjbGllbnRZOiB5LCBjb21wb3NlZDogdHJ1ZSwgYnViYmxlczog
dHJ1ZX0pKTsKKyAgICAgICAgICAgIGNhbnZhc1dpdGhMb2NrZWRJbmRpY2F0b3IuZGlzcGF0Y2hF
dmVudChuZXcgTW91c2VFdmVudCgnY2xpY2snLCB7dGFyZ2V0OiBjYW52YXNXaXRoTG9ja2VkSW5k
aWNhdG9yLCBjbGllbnRYOiB4LCBjbGllbnRZOiB5LCBjb21wb3NlZDogdHJ1ZSwgYnViYmxlczog
dHJ1ZX0pKTsKKworICAgICAgICAgICAgQ2FudmFzVGVzdC5maWxsQ2FudmFzQmVmb3JlUmVkcmF3
Q2hlY2soY2FudmFzV2l0aFVubG9ja2VkSW5kaWNhdG9yKTsKKyAgICAgICAgICAgIENhbnZhc1Rl
c3QuZmlsbENhbnZhc0JlZm9yZVJlZHJhd0NoZWNrKGNhbnZhc1dpdGhMb2NrZWRJbmRpY2F0b3Ip
OworICAgICAgICAgICAgYXdhaXQgd2FpdEZvckNvbXBvbmVudHNUb1JlbmRlcihjb250ZXh0KTsK
KworICAgICAgICAgICAgZXhwZWN0KENhbnZhc1Rlc3QuaGFzQ2FudmFzQmVlblJlZHJhd24oY2Fu
dmFzV2l0aFVubG9ja2VkSW5kaWNhdG9yKSkudG8uYmUodHJ1ZSk7CisgICAgICAgICAgICBleHBl
Y3QoQ2FudmFzVGVzdC5oYXNDYW52YXNCZWVuUmVkcmF3bihjYW52YXNXaXRoTG9ja2VkSW5kaWNh
dG9yKSkudG8uYmUodHJ1ZSk7CisKKyAgICAgICAgICAgIGxldCBpbmRpY2F0b3IgPSBjaGFydFdp
dGhVbmxvY2tlZEluZGljYXRvci5jdXJyZW50SW5kaWNhdG9yKCk7CisgICAgICAgICAgICBsZXQg
Y3VycmVudFZpZXcgPSBjaGFydFdpdGhVbmxvY2tlZEluZGljYXRvci5zYW1wbGVkVGltZVNlcmll
c0RhdGEoJ2N1cnJlbnQnKTsKKyAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3IudmlldykudG8u
YmUoY3VycmVudFZpZXcpOworICAgICAgICAgICAgZXhwZWN0KGluZGljYXRvci5wb2ludCkudG8u
YmUoY3VycmVudFZpZXcubGFzdFBvaW50KCkpOworICAgICAgICAgICAgZXhwZWN0KGluZGljYXRv
ci5pc0xvY2tlZCkudG8uYmUoZmFsc2UpOworCisgICAgICAgICAgICBpbmRpY2F0b3IgPSBjaGFy
dFdpdGhMb2NrZWRJbmRpY2F0b3IuY3VycmVudEluZGljYXRvcigpOworICAgICAgICAgICAgY3Vy
cmVudFZpZXcgPSBjaGFydFdpdGhMb2NrZWRJbmRpY2F0b3Iuc2FtcGxlZFRpbWVTZXJpZXNEYXRh
KCdjdXJyZW50Jyk7CisgICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9yLnZpZXcpLnRvLmJlKGN1
cnJlbnRWaWV3KTsKKyAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3IucG9pbnQpLnRvLmJlKGN1
cnJlbnRWaWV3Lmxhc3RQb2ludCgpKTsKKyAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3IuaXNM
b2NrZWQpLnRvLmJlKHRydWUpOworCisgICAgICAgICAgICBDYW52YXNUZXN0LmV4cGVjdENhbnZh
c2VzTWlzbWF0Y2goY2FudmFzV2l0aFVubG9ja2VkSW5kaWNhdG9yLCBjYW52YXNXaXRoTG9ja2Vk
SW5kaWNhdG9yKTsKKyAgICAgICAgICAgIGV4cGVjdChDYW52YXNUZXN0LmNhbnZhc0NvbnRhaW5z
Q29sb3IoY2FudmFzV2l0aFVubG9ja2VkSW5kaWNhdG9yLCB1bmxvY2tlZENvbG9yKSkudG8uYmUo
dHJ1ZSk7CisgICAgICAgICAgICBleHBlY3QoQ2FudmFzVGVzdC5jYW52YXNDb250YWluc0NvbG9y
KGNhbnZhc1dpdGhVbmxvY2tlZEluZGljYXRvciwgbG9ja2VkRmlsbENvbG9yKSkudG8uYmUoZmFs
c2UpOworICAgICAgICAgICAgZXhwZWN0KENhbnZhc1Rlc3QuY2FudmFzQ29udGFpbnNDb2xvcihj
YW52YXNXaXRoTG9ja2VkSW5kaWNhdG9yLCBsb2NrZWRDb2xvcikpLnRvLmJlKHRydWUpOworICAg
ICAgICAgICAgZXhwZWN0KENhbnZhc1Rlc3QuY2FudmFzQ29udGFpbnNDb2xvcihjYW52YXNXaXRo
TG9ja2VkSW5kaWNhdG9yLCBsb2NrZWRGaWxsQ29sb3IpKS50by5iZSh0cnVlKTsKICAgICAgICAg
fSk7CiAgICAgfSk7CiAKICAgICBkZXNjcmliZSgnbW92ZUxvY2tlZEluZGljYXRvcldpdGhOb3Rp
ZmljYXRpb24nLCAoKSA9PiB7Ci0gICAgICAgIGl0KCdzaG91bGQgbW92ZSB0aGUgbG9ja2VkIGlu
ZGljYXRvciB0byB0aGUgcmlnaHQgd2hlbiBmb3J3YXJkIGJvb2xlYW4gaXMgdHJ1ZScsICgpID0+
IHsKKyAgICAgICAgaXQoJ3Nob3VsZCBtb3ZlIHRoZSBsb2NrZWQgaW5kaWNhdG9yIHRvIHRoZSBy
aWdodCB3aGVuIGZvcndhcmQgYm9vbGVhbiBpcyB0cnVlJywgYXN5bmMgKCkgPT4gewogICAgICAg
ICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBCcm93c2luZ0NvbnRleHQoKTsKLSAgICAgICAgICAg
IHJldHVybiBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKGNvbnRleHQpLnRoZW4oKCkgPT4g
ewotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJ0ID0gQ2hhcnRUZXN0LmNyZWF0ZUludGVyYWN0
aXZlQ2hhcnRXaXRoU2FtcGxlQ2x1c3Rlcihjb250ZXh0KTsKKyAgICAgICAgICAgIGF3YWl0IENo
YXJ0VGVzdC5pbXBvcnRDaGFydFNjcmlwdHMoY29udGV4dCk7CisgICAgICAgICAgICBjb25zdCBj
aGFydCA9IENoYXJ0VGVzdC5jcmVhdGVJbnRlcmFjdGl2ZUNoYXJ0V2l0aFNhbXBsZUNsdXN0ZXIo
Y29udGV4dCk7CisKKyAgICAgICAgICAgIGNoYXJ0LnNldERvbWFpbihDaGFydFRlc3Quc2FtcGxl
Q2x1c3Rlci5zdGFydFRpbWUsIENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLmVuZFRpbWUpOworICAg
ICAgICAgICAgY2hhcnQuZmV0Y2hNZWFzdXJlbWVudFNldHMoKTsKKyAgICAgICAgICAgIGxldCBp
bmRpY2F0b3JDaGFuZ2VDb3VudCA9IDA7CisgICAgICAgICAgICBjaGFydC5saXN0ZW5Ub0FjdGlv
bignaW5kaWNhdG9yQ2hhbmdlJywgKCkgPT4gaW5kaWNhdG9yQ2hhbmdlQ291bnQrKyk7CisgICAg
ICAgICAgICBDaGFydFRlc3QucmVzcG9uZFdpdGhTYW1wbGVDbHVzdGVyKGNvbnRleHQuc3ltYm9s
cy5Nb2NrUmVtb3RlQVBJLnJlcXVlc3RzWzBdKTsKKworICAgICAgICAgICAgYXdhaXQgd2FpdEZv
ckNvbXBvbmVudHNUb1JlbmRlcihjb250ZXh0KTsKKworICAgICAgICAgICAgZXhwZWN0KGluZGlj
YXRvckNoYW5nZUNvdW50KS50by5iZSgwKTsKKworICAgICAgICAgICAgY29uc3QgY2FudmFzID0g
Y2hhcnQuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJ2NhbnZhcycpOworCisgICAgICAgICAgICBj
b25zdCByZWN0ID0gY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAgICAgICAgICAg
Y29uc3QgeCA9IHJlY3QubGVmdCArIDE7CisgICAgICAgICAgICBjb25zdCB5ID0gcmVjdC50b3Ag
KyByZWN0LmhlaWdodCAvIDI7CisgICAgICAgICAgICBjYW52YXMuZGlzcGF0Y2hFdmVudChuZXcg
TW91c2VFdmVudCgnY2xpY2snLCB7dGFyZ2V0OiBjYW52YXMsIGNsaWVudFg6IHgsIGNsaWVudFk6
IHksIGNvbXBvc2VkOiB0cnVlLCBidWJibGVzOiB0cnVlfSkpOworCisgICAgICAgICAgICBDYW52
YXNUZXN0LmZpbGxDYW52YXNCZWZvcmVSZWRyYXdDaGVjayhjYW52YXMpOworICAgICAgICAgICAg
YXdhaXQgd2FpdEZvckNvbXBvbmVudHNUb1JlbmRlcihjb250ZXh0KTsKKworICAgICAgICAgICAg
ZXhwZWN0KENhbnZhc1Rlc3QuaGFzQ2FudmFzQmVlblJlZHJhd24oY2FudmFzKSkudG8uYmUodHJ1
ZSk7CisgICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9yQ2hhbmdlQ291bnQpLnRvLmJlKDEpOwog
Ci0gICAgICAgICAgICAgICAgY2hhcnQuc2V0RG9tYWluKENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVy
LnN0YXJ0VGltZSwgQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuZW5kVGltZSk7Ci0gICAgICAgICAg
ICAgICAgY2hhcnQuZmV0Y2hNZWFzdXJlbWVudFNldHMoKTsKLSAgICAgICAgICAgICAgICBsZXQg
aW5kaWNhdG9yQ2hhbmdlQ291bnQgPSAwOwotICAgICAgICAgICAgICAgIGNoYXJ0Lmxpc3RlblRv
QWN0aW9uKCdpbmRpY2F0b3JDaGFuZ2UnLCAoKSA9PiBpbmRpY2F0b3JDaGFuZ2VDb3VudCsrKTsK
LSAgICAgICAgICAgICAgICBDaGFydFRlc3QucmVzcG9uZFdpdGhTYW1wbGVDbHVzdGVyKGNvbnRl
eHQuc3ltYm9scy5Nb2NrUmVtb3RlQVBJLnJlcXVlc3RzWzBdKTsKLQotICAgICAgICAgICAgICAg
IGxldCBjYW52YXM7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JDb21wb25lbnRzVG9S
ZW5kZXIoY29udGV4dCkudGhlbigoKSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdChp
bmRpY2F0b3JDaGFuZ2VDb3VudCkudG8uYmUoMCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2Fu
dmFzID0gY2hhcnQuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJ2NhbnZhcycpOwotCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSBjYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHggPSByZWN0LmxlZnQgKyAxOwotICAgICAgICAg
ICAgICAgICAgICBjb25zdCB5ID0gcmVjdC50b3AgKyByZWN0LmhlaWdodCAvIDI7Ci0gICAgICAg
ICAgICAgICAgICAgIGNhbnZhcy5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdjbGljaycs
IHt0YXJnZXQ6IGNhbnZhcywgY2xpZW50WDogeCwgY2xpZW50WTogeSwgY29tcG9zZWQ6IHRydWUs
IGJ1YmJsZXM6IHRydWV9KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgQ2FudmFzVGVzdC5maWxs
Q2FudmFzQmVmb3JlUmVkcmF3Q2hlY2soY2FudmFzKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHdhaXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAg
fSkudGhlbigoKSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdChDYW52YXNUZXN0Lmhh
c0NhbnZhc0JlZW5SZWRyYXduKGNhbnZhcykpLnRvLmJlKHRydWUpOwotICAgICAgICAgICAgICAg
ICAgICBleHBlY3QoaW5kaWNhdG9yQ2hhbmdlQ291bnQpLnRvLmJlKDEpOwotCi0gICAgICAgICAg
ICAgICAgICAgIGxldCBpbmRpY2F0b3IgPSBjaGFydC5jdXJyZW50SW5kaWNhdG9yKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGxldCBjdXJyZW50VmlldyA9IGNoYXJ0LnNhbXBsZWRUaW1lU2VyaWVz
RGF0YSgnY3VycmVudCcpOwotICAgICAgICAgICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9yLnZp
ZXcpLnRvLmJlKGN1cnJlbnRWaWV3KTsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGluZGlj
YXRvci5wb2ludCkudG8uYmUoY3VycmVudFZpZXcuZmlyc3RQb2ludCgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgZXhwZWN0KGluZGljYXRvci5pc0xvY2tlZCkudG8uYmUodHJ1ZSk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgY2hhcnQubW92ZUxvY2tlZEluZGljYXRvcldpdGhOb3RpZmljYXRpb24o
dHJ1ZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgQ2FudmFzVGVzdC5maWxsQ2FudmFzQmVmb3Jl
UmVkcmF3Q2hlY2soY2FudmFzKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JD
b21wb25lbnRzVG9SZW5kZXIoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgfSkudGhlbigoKSA9
PiB7Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdChDYW52YXNUZXN0Lmhhc0NhbnZhc0JlZW5S
ZWRyYXduKGNhbnZhcykpLnRvLmJlKHRydWUpOwotICAgICAgICAgICAgICAgICAgICBleHBlY3Qo
aW5kaWNhdG9yQ2hhbmdlQ291bnQpLnRvLmJlKDIpOwotCi0gICAgICAgICAgICAgICAgICAgIGxl
dCBpbmRpY2F0b3IgPSBjaGFydC5jdXJyZW50SW5kaWNhdG9yKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGxldCBjdXJyZW50VmlldyA9IGNoYXJ0LnNhbXBsZWRUaW1lU2VyaWVzRGF0YSgnY3VycmVu
dCcpOwotICAgICAgICAgICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9yLnZpZXcpLnRvLmJlKGN1
cnJlbnRWaWV3KTsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGluZGljYXRvci5wb2ludCku
dG8ubm90LmJlKGN1cnJlbnRWaWV3LmZpcnN0UG9pbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGV4cGVjdChpbmRpY2F0b3IucG9pbnQpLnRvLmJlKGN1cnJlbnRWaWV3Lm5leHRQb2ludChjdXJy
ZW50Vmlldy5maXJzdFBvaW50KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGN1cnJl
bnRWaWV3LnByZXZpb3VzUG9pbnQoaW5kaWNhdG9yLnBvaW50KSkudG8uYmUoY3VycmVudFZpZXcu
Zmlyc3RQb2ludCgpKTsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGluZGljYXRvci5pc0xv
Y2tlZCkudG8uYmUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3JD
aGFuZ2VDb3VudCkudG8uYmUoMik7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIGxldCBpbmRpY2F0b3IgPSBjaGFydC5jdXJyZW50SW5kaWNhdG9yKCk7
CisgICAgICAgICAgICBsZXQgY3VycmVudFZpZXcgPSBjaGFydC5zYW1wbGVkVGltZVNlcmllc0Rh
dGEoJ2N1cnJlbnQnKTsKKyAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3IudmlldykudG8uYmUo
Y3VycmVudFZpZXcpOworICAgICAgICAgICAgZXhwZWN0KGluZGljYXRvci5wb2ludCkudG8uYmUo
Y3VycmVudFZpZXcuZmlyc3RQb2ludCgpKTsKKyAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3Iu
aXNMb2NrZWQpLnRvLmJlKHRydWUpOworCisgICAgICAgICAgICBjaGFydC5tb3ZlTG9ja2VkSW5k
aWNhdG9yV2l0aE5vdGlmaWNhdGlvbih0cnVlKTsKKworICAgICAgICAgICAgQ2FudmFzVGVzdC5m
aWxsQ2FudmFzQmVmb3JlUmVkcmF3Q2hlY2soY2FudmFzKTsKKyAgICAgICAgICAgIGF3YWl0IHdh
aXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29udGV4dCk7CisKKyAgICAgICAgICAgIGV4cGVjdChD
YW52YXNUZXN0Lmhhc0NhbnZhc0JlZW5SZWRyYXduKGNhbnZhcykpLnRvLmJlKHRydWUpOworICAg
ICAgICAgICAgZXhwZWN0KGluZGljYXRvckNoYW5nZUNvdW50KS50by5iZSgyKTsKKworICAgICAg
ICAgICAgaW5kaWNhdG9yID0gY2hhcnQuY3VycmVudEluZGljYXRvcigpOworICAgICAgICAgICAg
Y3VycmVudFZpZXcgPSBjaGFydC5zYW1wbGVkVGltZVNlcmllc0RhdGEoJ2N1cnJlbnQnKTsKKyAg
ICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3IudmlldykudG8uYmUoY3VycmVudFZpZXcpOworICAg
ICAgICAgICAgZXhwZWN0KGluZGljYXRvci5wb2ludCkudG8ubm90LmJlKGN1cnJlbnRWaWV3LmZp
cnN0UG9pbnQoKSk7CisgICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9yLnBvaW50KS50by5iZShj
dXJyZW50Vmlldy5uZXh0UG9pbnQoY3VycmVudFZpZXcuZmlyc3RQb2ludCgpKSk7CisgICAgICAg
ICAgICBleHBlY3QoY3VycmVudFZpZXcucHJldmlvdXNQb2ludChpbmRpY2F0b3IucG9pbnQpKS50
by5iZShjdXJyZW50Vmlldy5maXJzdFBvaW50KCkpOworICAgICAgICAgICAgZXhwZWN0KGluZGlj
YXRvci5pc0xvY2tlZCkudG8uYmUodHJ1ZSk7CisgICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9y
Q2hhbmdlQ291bnQpLnRvLmJlKDIpOwogICAgICAgICB9KTsKIAotICAgICAgICBpdCgnc2hvdWxk
IG1vdmUgdGhlIGxvY2tlZCBpbmRpY2F0b3IgdG8gdGhlIGxlZnQgd2hlbiBmb3J3YXJkIGJvb2xl
YW4gaXMgZmFsc2UnLCAoKSA9PiB7CisgICAgICAgIGl0KCdzaG91bGQgbW92ZSB0aGUgbG9ja2Vk
IGluZGljYXRvciB0byB0aGUgbGVmdCB3aGVuIGZvcndhcmQgYm9vbGVhbiBpcyBmYWxzZScsIGFz
eW5jICgpID0+IHsKICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQnJvd3NpbmdDb250
ZXh0KCk7Ci0gICAgICAgICAgICByZXR1cm4gQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhj
b250ZXh0KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFydCA9IENoYXJ0
VGVzdC5jcmVhdGVJbnRlcmFjdGl2ZUNoYXJ0V2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4dCk7Cisg
ICAgICAgICAgICBhd2FpdCBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKGNvbnRleHQpOwor
ICAgICAgICAgICAgY29uc3QgY2hhcnQgPSBDaGFydFRlc3QuY3JlYXRlSW50ZXJhY3RpdmVDaGFy
dFdpdGhTYW1wbGVDbHVzdGVyKGNvbnRleHQpOworCisgICAgICAgICAgICBjaGFydC5zZXREb21h
aW4oQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuc3RhcnRUaW1lLCBDaGFydFRlc3Quc2FtcGxlQ2x1
c3Rlci5lbmRUaW1lKTsKKyAgICAgICAgICAgIGNoYXJ0LmZldGNoTWVhc3VyZW1lbnRTZXRzKCk7
CisgICAgICAgICAgICBsZXQgaW5kaWNhdG9yQ2hhbmdlQ291bnQgPSAwOworICAgICAgICAgICAg
Y2hhcnQubGlzdGVuVG9BY3Rpb24oJ2luZGljYXRvckNoYW5nZScsICgpID0+IGluZGljYXRvckNo
YW5nZUNvdW50KyspOworICAgICAgICAgICAgQ2hhcnRUZXN0LnJlc3BvbmRXaXRoU2FtcGxlQ2x1
c3Rlcihjb250ZXh0LnN5bWJvbHMuTW9ja1JlbW90ZUFQSS5yZXF1ZXN0c1swXSk7CisKKyAgICAg
ICAgICAgIGF3YWl0IHdhaXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29udGV4dCk7CisKKyAgICAg
ICAgICAgIGV4cGVjdChpbmRpY2F0b3JDaGFuZ2VDb3VudCkudG8uYmUoMCk7CisKKyAgICAgICAg
ICAgIGNvbnN0IGNhbnZhcyA9IGNoYXJ0LmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCdjYW52YXMn
KTsKKworICAgICAgICAgICAgY29uc3QgcmVjdCA9IGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKTsKKyAgICAgICAgICAgIGNvbnN0IHggPSByZWN0LnJpZ2h0IC0gMTsKKyAgICAgICAgICAg
IGNvbnN0IHkgPSByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMjsKKyAgICAgICAgICAgIGNhbnZh
cy5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdjbGljaycsIHt0YXJnZXQ6IGNhbnZhcywg
Y2xpZW50WDogeCwgY2xpZW50WTogeSwgY29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWV9KSk7
CisKKyAgICAgICAgICAgIENhbnZhc1Rlc3QuZmlsbENhbnZhc0JlZm9yZVJlZHJhd0NoZWNrKGNh
bnZhcyk7CisgICAgICAgICAgICBhd2FpdCB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNvbnRl
eHQpOworCisgICAgICAgICAgICBleHBlY3QoQ2FudmFzVGVzdC5oYXNDYW52YXNCZWVuUmVkcmF3
bihjYW52YXMpKS50by5iZSh0cnVlKTsKKyAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3JDaGFu
Z2VDb3VudCkudG8uYmUoMSk7CisKKyAgICAgICAgICAgIGxldCBpbmRpY2F0b3IgPSBjaGFydC5j
dXJyZW50SW5kaWNhdG9yKCk7CisgICAgICAgICAgICBsZXQgY3VycmVudFZpZXcgPSBjaGFydC5z
YW1wbGVkVGltZVNlcmllc0RhdGEoJ2N1cnJlbnQnKTsKKyAgICAgICAgICAgIGV4cGVjdChpbmRp
Y2F0b3IudmlldykudG8uYmUoY3VycmVudFZpZXcpOworICAgICAgICAgICAgZXhwZWN0KGluZGlj
YXRvci5wb2ludCkudG8uYmUoY3VycmVudFZpZXcubGFzdFBvaW50KCkpOworICAgICAgICAgICAg
ZXhwZWN0KGluZGljYXRvci5pc0xvY2tlZCkudG8uYmUodHJ1ZSk7CisKKyAgICAgICAgICAgIGNo
YXJ0Lm1vdmVMb2NrZWRJbmRpY2F0b3JXaXRoTm90aWZpY2F0aW9uKGZhbHNlKTsKKworICAgICAg
ICAgICAgQ2FudmFzVGVzdC5maWxsQ2FudmFzQmVmb3JlUmVkcmF3Q2hlY2soY2FudmFzKTsKKyAg
ICAgICAgICAgIGF3YWl0IHdhaXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29udGV4dCk7CiAKLSAg
ICAgICAgICAgICAgICBjaGFydC5zZXREb21haW4oQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuc3Rh
cnRUaW1lLCBDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5lbmRUaW1lKTsKLSAgICAgICAgICAgICAg
ICBjaGFydC5mZXRjaE1lYXN1cmVtZW50U2V0cygpOwotICAgICAgICAgICAgICAgIGxldCBpbmRp
Y2F0b3JDaGFuZ2VDb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgY2hhcnQubGlzdGVuVG9BY3Rp
b24oJ2luZGljYXRvckNoYW5nZScsICgpID0+IGluZGljYXRvckNoYW5nZUNvdW50KyspOwotICAg
ICAgICAgICAgICAgIENoYXJ0VGVzdC5yZXNwb25kV2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4dC5z
eW1ib2xzLk1vY2tSZW1vdGVBUEkucmVxdWVzdHNbMF0pOwotCi0gICAgICAgICAgICAgICAgbGV0
IGNhbnZhczsKLSAgICAgICAgICAgICAgICByZXR1cm4gd2FpdEZvckNvbXBvbmVudHNUb1JlbmRl
cihjb250ZXh0KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGluZGlj
YXRvckNoYW5nZUNvdW50KS50by5iZSgwKTsKLQotICAgICAgICAgICAgICAgICAgICBjYW52YXMg
PSBjaGFydC5jb250ZW50KCkucXVlcnlTZWxlY3RvcignY2FudmFzJyk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgY29uc3QgcmVjdCA9IGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKLSAg
ICAgICAgICAgICAgICAgICAgY29uc3QgeCA9IHJlY3QucmlnaHQgLSAxOwotICAgICAgICAgICAg
ICAgICAgICBjb25zdCB5ID0gcmVjdC50b3AgKyByZWN0LmhlaWdodCAvIDI7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhbnZhcy5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdjbGljaycsIHt0
YXJnZXQ6IGNhbnZhcywgY2xpZW50WDogeCwgY2xpZW50WTogeSwgY29tcG9zZWQ6IHRydWUsIGJ1
YmJsZXM6IHRydWV9KSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgQ2FudmFzVGVzdC5maWxsQ2Fu
dmFzQmVmb3JlUmVkcmF3Q2hlY2soY2FudmFzKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHdhaXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgfSku
dGhlbigoKSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdChDYW52YXNUZXN0Lmhhc0Nh
bnZhc0JlZW5SZWRyYXduKGNhbnZhcykpLnRvLmJlKHRydWUpOwotICAgICAgICAgICAgICAgICAg
ICBleHBlY3QoaW5kaWNhdG9yQ2hhbmdlQ291bnQpLnRvLmJlKDEpOwotCi0gICAgICAgICAgICAg
ICAgICAgIGxldCBpbmRpY2F0b3IgPSBjaGFydC5jdXJyZW50SW5kaWNhdG9yKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGxldCBjdXJyZW50VmlldyA9IGNoYXJ0LnNhbXBsZWRUaW1lU2VyaWVzRGF0
YSgnY3VycmVudCcpOwotICAgICAgICAgICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9yLnZpZXcp
LnRvLmJlKGN1cnJlbnRWaWV3KTsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGluZGljYXRv
ci5wb2ludCkudG8uYmUoY3VycmVudFZpZXcubGFzdFBvaW50KCkpOwotICAgICAgICAgICAgICAg
ICAgICBleHBlY3QoaW5kaWNhdG9yLmlzTG9ja2VkKS50by5iZSh0cnVlKTsKLQotICAgICAgICAg
ICAgICAgICAgICBjaGFydC5tb3ZlTG9ja2VkSW5kaWNhdG9yV2l0aE5vdGlmaWNhdGlvbihmYWxz
ZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgQ2FudmFzVGVzdC5maWxsQ2FudmFzQmVmb3JlUmVk
cmF3Q2hlY2soY2FudmFzKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JDb21w
b25lbnRzVG9SZW5kZXIoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7
Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdChDYW52YXNUZXN0Lmhhc0NhbnZhc0JlZW5SZWRy
YXduKGNhbnZhcykpLnRvLmJlKHRydWUpOwotICAgICAgICAgICAgICAgICAgICBleHBlY3QoaW5k
aWNhdG9yQ2hhbmdlQ291bnQpLnRvLmJlKDIpOwotCi0gICAgICAgICAgICAgICAgICAgIGxldCBp
bmRpY2F0b3IgPSBjaGFydC5jdXJyZW50SW5kaWNhdG9yKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGxldCBjdXJyZW50VmlldyA9IGNoYXJ0LnNhbXBsZWRUaW1lU2VyaWVzRGF0YSgnY3VycmVudCcp
OwotICAgICAgICAgICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9yLnZpZXcpLnRvLmJlKGN1cnJl
bnRWaWV3KTsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGluZGljYXRvci5wb2ludCkudG8u
bm90LmJlKGN1cnJlbnRWaWV3LmZpcnN0UG9pbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGV4
cGVjdChpbmRpY2F0b3IucG9pbnQpLnRvLmJlKGN1cnJlbnRWaWV3LnByZXZpb3VzUG9pbnQoY3Vy
cmVudFZpZXcubGFzdFBvaW50KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGN1cnJl
bnRWaWV3Lm5leHRQb2ludChpbmRpY2F0b3IucG9pbnQpKS50by5iZShjdXJyZW50Vmlldy5sYXN0
UG9pbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3IuaXNMb2NrZWQp
LnRvLmJlKHRydWUpOwotICAgICAgICAgICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9yQ2hhbmdl
Q291bnQpLnRvLmJlKDIpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICBleHBlY3QoQ2FudmFzVGVzdC5oYXNDYW52YXNCZWVuUmVkcmF3bihjYW52YXMp
KS50by5iZSh0cnVlKTsKKyAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3JDaGFuZ2VDb3VudCku
dG8uYmUoMik7CisKKyAgICAgICAgICAgIGluZGljYXRvciA9IGNoYXJ0LmN1cnJlbnRJbmRpY2F0
b3IoKTsKKyAgICAgICAgICAgIGN1cnJlbnRWaWV3ID0gY2hhcnQuc2FtcGxlZFRpbWVTZXJpZXNE
YXRhKCdjdXJyZW50Jyk7CisgICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9yLnZpZXcpLnRvLmJl
KGN1cnJlbnRWaWV3KTsKKyAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3IucG9pbnQpLnRvLm5v
dC5iZShjdXJyZW50Vmlldy5maXJzdFBvaW50KCkpOworICAgICAgICAgICAgZXhwZWN0KGluZGlj
YXRvci5wb2ludCkudG8uYmUoY3VycmVudFZpZXcucHJldmlvdXNQb2ludChjdXJyZW50Vmlldy5s
YXN0UG9pbnQoKSkpOworICAgICAgICAgICAgZXhwZWN0KGN1cnJlbnRWaWV3Lm5leHRQb2ludChp
bmRpY2F0b3IucG9pbnQpKS50by5iZShjdXJyZW50Vmlldy5sYXN0UG9pbnQoKSk7CisgICAgICAg
ICAgICBleHBlY3QoaW5kaWNhdG9yLmlzTG9ja2VkKS50by5iZSh0cnVlKTsKKyAgICAgICAgICAg
IGV4cGVjdChpbmRpY2F0b3JDaGFuZ2VDb3VudCkudG8uYmUoMik7CiAgICAgICAgIH0pOwogCi0g
ICAgICAgIGl0KCdzaG91bGQgbm90IG1vdmUgdGhlIGxvY2tlZCBpbmRpY2F0b3Igd2hlbiB0aGVy
ZSBhcmUgbm8gcG9pbnRzIHdpdGhpbiB0aGUgZG9tYWluJywgKCkgPT4geworICAgICAgICBpdCgn
c2hvdWxkIG5vdCBtb3ZlIHRoZSBsb2NrZWQgaW5kaWNhdG9yIHdoZW4gdGhlcmUgYXJlIG5vIHBv
aW50cyB3aXRoaW4gdGhlIGRvbWFpbicsIGFzeW5jICgpID0+IHsKICAgICAgICAgICAgIGNvbnN0
IGNvbnRleHQgPSBuZXcgQnJvd3NpbmdDb250ZXh0KCk7Ci0gICAgICAgICAgICByZXR1cm4gQ2hh
cnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhjb250ZXh0KS50aGVuKCgpID0+IHsKLSAgICAgICAg
ICAgICAgICBjb25zdCBjaGFydCA9IENoYXJ0VGVzdC5jcmVhdGVJbnRlcmFjdGl2ZUNoYXJ0V2l0
aFNhbXBsZUNsdXN0ZXIoY29udGV4dCk7CisgICAgICAgICAgICBhd2FpdCBDaGFydFRlc3QuaW1w
b3J0Q2hhcnRTY3JpcHRzKGNvbnRleHQpOworICAgICAgICAgICAgY29uc3QgY2hhcnQgPSBDaGFy
dFRlc3QuY3JlYXRlSW50ZXJhY3RpdmVDaGFydFdpdGhTYW1wbGVDbHVzdGVyKGNvbnRleHQpOwog
Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGRvbWFpbiBpbmNsdWVzIHBvaW50cyAyLCAzCi0gICAg
ICAgICAgICAgICAgY2hhcnQuc2V0RG9tYWluKHBvc2l4VGltZSgnMjAxNi0wMS0wNVQyMDowMDow
MFonKSwgcG9zaXhUaW1lKCcyMDE2LTAxLTA2VDAwOjAwOjAwWicpKTsKLSAgICAgICAgICAgICAg
ICBjaGFydC5mZXRjaE1lYXN1cmVtZW50U2V0cygpOwotICAgICAgICAgICAgICAgIGxldCBpbmRp
Y2F0b3JDaGFuZ2VDb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgY2hhcnQubGlzdGVuVG9BY3Rp
b24oJ2luZGljYXRvckNoYW5nZScsICgpID0+IGluZGljYXRvckNoYW5nZUNvdW50KyspOwotICAg
ICAgICAgICAgICAgIENoYXJ0VGVzdC5yZXNwb25kV2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4dC5z
eW1ib2xzLk1vY2tSZW1vdGVBUEkucmVxdWVzdHNbMF0pOwotCi0gICAgICAgICAgICAgICAgbGV0
IGNhbnZhczsKLSAgICAgICAgICAgICAgICBsZXQgY3VycmVudFZpZXc7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHdhaXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29udGV4dCkudGhlbigoKSA9PiB7
Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3JDaGFuZ2VDb3VudCkudG8uYmUo
MCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FudmFzID0gY2hhcnQuY29udGVudCgpLnF1ZXJ5
U2VsZWN0b3IoJ2NhbnZhcycpOwotCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSBj
YW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0
IHggPSByZWN0LnJpZ2h0IC0gMTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgeSA9IHJlY3Qu
dG9wICsgcmVjdC5oZWlnaHQgLyAyOwotICAgICAgICAgICAgICAgICAgICBjYW52YXMuZGlzcGF0
Y2hFdmVudChuZXcgTW91c2VFdmVudCgnY2xpY2snLCB7dGFyZ2V0OiBjYW52YXMsIGNsaWVudFg6
IHgsIGNsaWVudFk6IHksIGNvbXBvc2VkOiB0cnVlLCBidWJibGVzOiB0cnVlfSkpOwotCi0gICAg
ICAgICAgICAgICAgICAgIENhbnZhc1Rlc3QuZmlsbENhbnZhc0JlZm9yZVJlZHJhd0NoZWNrKGNh
bnZhcyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB3YWl0Rm9yQ29tcG9uZW50c1RvUmVu
ZGVyKGNvbnRleHQpOwotICAgICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewotICAgICAgICAg
ICAgICAgICAgICBleHBlY3QoQ2FudmFzVGVzdC5oYXNDYW52YXNCZWVuUmVkcmF3bihjYW52YXMp
KS50by5iZSh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGluZGljYXRvckNoYW5n
ZUNvdW50KS50by5iZSgxKTsKLQotICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmlldyA9IGNo
YXJ0LnNhbXBsZWRUaW1lU2VyaWVzRGF0YSgnY3VycmVudCcpOwotICAgICAgICAgICAgICAgICAg
ICBleHBlY3QoY3VycmVudFZpZXcubGVuZ3RoKCkpLnRvLmJlKDQpOyAvLyBwb2ludHMgMCBhbmQg
NCBhcmUgYWRkZWQgdG8gZHJhdyBsaW5lcyBleHRlbmRpbmcgYmV5b25kIHRoZSBkb21haW4uCi0g
ICAgICAgICAgICAgICAgICAgIGV4cGVjdChbLi4uY3VycmVudFZpZXddLm1hcCgocG9pbnQpID0+
IHBvaW50LmlkKSkudG8uYmUuZXFsKFsxMDAwLCAxMDAyLCAxMDAzLCAxMDA0XSk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgY29uc3QgaW5kaWNhdG9yID0gY2hhcnQuY3VycmVudEluZGljYXRvcigp
OwotICAgICAgICAgICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9yLnZpZXcpLnRvLmJlKGN1cnJl
bnRWaWV3KTsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGluZGljYXRvci5wb2ludC5pZCku
dG8uYmUoMTAwMyk7Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3IuaXNMb2Nr
ZWQpLnRvLmJlKHRydWUpOwotCi0gICAgICAgICAgICAgICAgICAgIGNoYXJ0Lm1vdmVMb2NrZWRJ
bmRpY2F0b3JXaXRoTm90aWZpY2F0aW9uKHRydWUpOwotCi0gICAgICAgICAgICAgICAgICAgIENh
bnZhc1Rlc3QuZmlsbENhbnZhc0JlZm9yZVJlZHJhd0NoZWNrKGNhbnZhcyk7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNvbnRleHQpOwotICAg
ICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewotICAgICAgICAgICAgICAgICAgICBleHBlY3Qo
Q2FudmFzVGVzdC5oYXNDYW52YXNCZWVuUmVkcmF3bihjYW52YXMpKS50by5iZShmYWxzZSk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGluZGljYXRvckNoYW5nZUNvdW50KS50by5iZSgx
KTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kaWNhdG9yID0gY2hhcnQuY3VycmVudElu
ZGljYXRvcigpOwotICAgICAgICAgICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9yLnZpZXcpLnRv
LmJlKGN1cnJlbnRWaWV3KTsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGluZGljYXRvci5w
b2ludC5pZCkudG8uYmUoMTAwMyk7Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0
b3IuaXNMb2NrZWQpLnRvLmJlKHRydWUpOwotCi0gICAgICAgICAgICAgICAgICAgIGNoYXJ0Lm1v
dmVMb2NrZWRJbmRpY2F0b3JXaXRoTm90aWZpY2F0aW9uKGZhbHNlKTsKLQotICAgICAgICAgICAg
ICAgICAgICBDYW52YXNUZXN0LmZpbGxDYW52YXNCZWZvcmVSZWRyYXdDaGVjayhjYW52YXMpOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2FpdEZvckNvbXBvbmVudHNUb1JlbmRlcihjb250
ZXh0KTsKLSAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICAg
ICAgZXhwZWN0KENhbnZhc1Rlc3QuaGFzQ2FudmFzQmVlblJlZHJhd24oY2FudmFzKSkudG8uYmUo
dHJ1ZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGluZGljYXRvckNoYW5nZUNvdW50
KS50by5iZSgyKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kaWNhdG9yID0gY2hhcnQu
Y3VycmVudEluZGljYXRvcigpOwotICAgICAgICAgICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9y
LnZpZXcpLnRvLmJlKGN1cnJlbnRWaWV3KTsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGlu
ZGljYXRvci5wb2ludC5pZCkudG8uYmUoMTAwMik7Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVj
dChpbmRpY2F0b3IuaXNMb2NrZWQpLnRvLmJlKHRydWUpOwotCi0gICAgICAgICAgICAgICAgICAg
IGNoYXJ0Lm1vdmVMb2NrZWRJbmRpY2F0b3JXaXRoTm90aWZpY2F0aW9uKGZhbHNlKTsKLQotICAg
ICAgICAgICAgICAgICAgICBDYW52YXNUZXN0LmZpbGxDYW52YXNCZWZvcmVSZWRyYXdDaGVjayhj
YW52YXMpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2FpdEZvckNvbXBvbmVudHNUb1Jl
bmRlcihjb250ZXh0KTsKLSAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKLSAgICAgICAg
ICAgICAgICAgICAgZXhwZWN0KENhbnZhc1Rlc3QuaGFzQ2FudmFzQmVlblJlZHJhd24oY2FudmFz
KSkudG8uYmUoZmFsc2UpOwotCi0gICAgICAgICAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3JD
aGFuZ2VDb3VudCkudG8uYmUoMik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGljYXRv
ciA9IGNoYXJ0LmN1cnJlbnRJbmRpY2F0b3IoKTsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0
KGluZGljYXRvci52aWV3KS50by5iZShjdXJyZW50Vmlldyk7Ci0gICAgICAgICAgICAgICAgICAg
IGV4cGVjdChpbmRpY2F0b3IucG9pbnQuaWQpLnRvLmJlKDEwMDIpOwotICAgICAgICAgICAgICAg
ICAgICBleHBlY3QoaW5kaWNhdG9yLmlzTG9ja2VkKS50by5iZSh0cnVlKTsKLSAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKKyAgICAgICAgICAgIC8vIFRo
ZSBkb21haW4gaW5jbHVlcyBwb2ludHMgMiwgMworICAgICAgICAgICAgY2hhcnQuc2V0RG9tYWlu
KHBvc2l4VGltZSgnMjAxNi0wMS0wNVQyMDowMDowMFonKSwgcG9zaXhUaW1lKCcyMDE2LTAxLTA2
VDAwOjAwOjAwWicpKTsKKyAgICAgICAgICAgIGNoYXJ0LmZldGNoTWVhc3VyZW1lbnRTZXRzKCk7
CisgICAgICAgICAgICBsZXQgaW5kaWNhdG9yQ2hhbmdlQ291bnQgPSAwOworICAgICAgICAgICAg
Y2hhcnQubGlzdGVuVG9BY3Rpb24oJ2luZGljYXRvckNoYW5nZScsICgpID0+IGluZGljYXRvckNo
YW5nZUNvdW50KyspOworICAgICAgICAgICAgQ2hhcnRUZXN0LnJlc3BvbmRXaXRoU2FtcGxlQ2x1
c3Rlcihjb250ZXh0LnN5bWJvbHMuTW9ja1JlbW90ZUFQSS5yZXF1ZXN0c1swXSk7CisKKyAgICAg
ICAgICAgIGF3YWl0IHdhaXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29udGV4dCk7CisKKyAgICAg
ICAgICAgIGV4cGVjdChpbmRpY2F0b3JDaGFuZ2VDb3VudCkudG8uYmUoMCk7CisKKyAgICAgICAg
ICAgIGNvbnN0IGNhbnZhcyA9IGNoYXJ0LmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCdjYW52YXMn
KTsKKworICAgICAgICAgICAgY29uc3QgcmVjdCA9IGNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKTsKKyAgICAgICAgICAgIGNvbnN0IHggPSByZWN0LnJpZ2h0IC0gMTsKKyAgICAgICAgICAg
IGNvbnN0IHkgPSByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMjsKKyAgICAgICAgICAgIGNhbnZh
cy5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCdjbGljaycsIHt0YXJnZXQ6IGNhbnZhcywg
Y2xpZW50WDogeCwgY2xpZW50WTogeSwgY29tcG9zZWQ6IHRydWUsIGJ1YmJsZXM6IHRydWV9KSk7
CisKKyAgICAgICAgICAgIENhbnZhc1Rlc3QuZmlsbENhbnZhc0JlZm9yZVJlZHJhd0NoZWNrKGNh
bnZhcyk7CisgICAgICAgICAgICBhd2FpdCB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNvbnRl
eHQpOworCisgICAgICAgICAgICBleHBlY3QoQ2FudmFzVGVzdC5oYXNDYW52YXNCZWVuUmVkcmF3
bihjYW52YXMpKS50by5iZSh0cnVlKTsKKyAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3JDaGFu
Z2VDb3VudCkudG8uYmUoMSk7CisKKyAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWaWV3ID0gY2hh
cnQuc2FtcGxlZFRpbWVTZXJpZXNEYXRhKCdjdXJyZW50Jyk7CisgICAgICAgICAgICBleHBlY3Qo
Y3VycmVudFZpZXcubGVuZ3RoKCkpLnRvLmJlKDQpOyAvLyBwb2ludHMgMCBhbmQgNCBhcmUgYWRk
ZWQgdG8gZHJhdyBsaW5lcyBleHRlbmRpbmcgYmV5b25kIHRoZSBkb21haW4uCisgICAgICAgICAg
ICBleHBlY3QoWy4uLmN1cnJlbnRWaWV3XS5tYXAoKHBvaW50KSA9PiBwb2ludC5pZCkpLnRvLmJl
LmVxbChbMTAwMCwgMTAwMiwgMTAwMywgMTAwNF0pOworCisgICAgICAgICAgICBsZXQgaW5kaWNh
dG9yID0gY2hhcnQuY3VycmVudEluZGljYXRvcigpOworICAgICAgICAgICAgZXhwZWN0KGluZGlj
YXRvci52aWV3KS50by5iZShjdXJyZW50Vmlldyk7CisgICAgICAgICAgICBleHBlY3QoaW5kaWNh
dG9yLnBvaW50LmlkKS50by5iZSgxMDAzKTsKKyAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3Iu
aXNMb2NrZWQpLnRvLmJlKHRydWUpOwogCisgICAgICAgICAgICBjaGFydC5tb3ZlTG9ja2VkSW5k
aWNhdG9yV2l0aE5vdGlmaWNhdGlvbih0cnVlKTsKKworICAgICAgICAgICAgQ2FudmFzVGVzdC5m
aWxsQ2FudmFzQmVmb3JlUmVkcmF3Q2hlY2soY2FudmFzKTsKKyAgICAgICAgICAgIGF3YWl0IHdh
aXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29udGV4dCk7CisKKyAgICAgICAgICAgIGV4cGVjdChD
YW52YXNUZXN0Lmhhc0NhbnZhc0JlZW5SZWRyYXduKGNhbnZhcykpLnRvLmJlKGZhbHNlKTsKKwor
ICAgICAgICAgICAgZXhwZWN0KGluZGljYXRvckNoYW5nZUNvdW50KS50by5iZSgxKTsKKyAgICAg
ICAgICAgIGluZGljYXRvciA9IGNoYXJ0LmN1cnJlbnRJbmRpY2F0b3IoKTsKKyAgICAgICAgICAg
IGV4cGVjdChpbmRpY2F0b3IudmlldykudG8uYmUoY3VycmVudFZpZXcpOworICAgICAgICAgICAg
ZXhwZWN0KGluZGljYXRvci5wb2ludC5pZCkudG8uYmUoMTAwMyk7CisgICAgICAgICAgICBleHBl
Y3QoaW5kaWNhdG9yLmlzTG9ja2VkKS50by5iZSh0cnVlKTsKKworICAgICAgICAgICAgY2hhcnQu
bW92ZUxvY2tlZEluZGljYXRvcldpdGhOb3RpZmljYXRpb24oZmFsc2UpOworCisgICAgICAgICAg
ICBDYW52YXNUZXN0LmZpbGxDYW52YXNCZWZvcmVSZWRyYXdDaGVjayhjYW52YXMpOworICAgICAg
ICAgICAgYXdhaXQgd2FpdEZvckNvbXBvbmVudHNUb1JlbmRlcihjb250ZXh0KTsKKworICAgICAg
ICAgICAgZXhwZWN0KENhbnZhc1Rlc3QuaGFzQ2FudmFzQmVlblJlZHJhd24oY2FudmFzKSkudG8u
YmUodHJ1ZSk7CisKKyAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3JDaGFuZ2VDb3VudCkudG8u
YmUoMik7CisgICAgICAgICAgICBpbmRpY2F0b3IgPSBjaGFydC5jdXJyZW50SW5kaWNhdG9yKCk7
CisgICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9yLnZpZXcpLnRvLmJlKGN1cnJlbnRWaWV3KTsK
KyAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3IucG9pbnQuaWQpLnRvLmJlKDEwMDIpOworICAg
ICAgICAgICAgZXhwZWN0KGluZGljYXRvci5pc0xvY2tlZCkudG8uYmUodHJ1ZSk7CisKKyAgICAg
ICAgICAgIGNoYXJ0Lm1vdmVMb2NrZWRJbmRpY2F0b3JXaXRoTm90aWZpY2F0aW9uKGZhbHNlKTsK
KworICAgICAgICAgICAgQ2FudmFzVGVzdC5maWxsQ2FudmFzQmVmb3JlUmVkcmF3Q2hlY2soY2Fu
dmFzKTsKKyAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29udGV4
dCk7CisKKyAgICAgICAgICAgIGV4cGVjdChDYW52YXNUZXN0Lmhhc0NhbnZhc0JlZW5SZWRyYXdu
KGNhbnZhcykpLnRvLmJlKGZhbHNlKTsKKworICAgICAgICAgICAgZXhwZWN0KGluZGljYXRvckNo
YW5nZUNvdW50KS50by5iZSgyKTsKKyAgICAgICAgICAgIGluZGljYXRvciA9IGNoYXJ0LmN1cnJl
bnRJbmRpY2F0b3IoKTsKKyAgICAgICAgICAgIGV4cGVjdChpbmRpY2F0b3IudmlldykudG8uYmUo
Y3VycmVudFZpZXcpOworICAgICAgICAgICAgZXhwZWN0KGluZGljYXRvci5wb2ludC5pZCkudG8u
YmUoMTAwMik7CisgICAgICAgICAgICBleHBlY3QoaW5kaWNhdG9yLmlzTG9ja2VkKS50by5iZSh0
cnVlKTsKKyAgICAgICAgfSk7CiAgICAgfSk7CiB9KTsKSW5kZXg6IFdlYnNpdGVzL3BlcmYud2Vi
a2l0Lm9yZy9icm93c2VyLXRlc3RzL3RpbWUtc2VyaWVzLWNoYXJ0LXRlc3RzLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYnNpdGVzL3BlcmYud2Via2l0Lm9yZy9icm93c2VyLXRlc3RzL3RpbWUtc2VyaWVz
LWNoYXJ0LXRlc3RzLmpzCShyZXZpc2lvbiAyNzQwNDYpCisrKyBXZWJzaXRlcy9wZXJmLndlYmtp
dC5vcmcvYnJvd3Nlci10ZXN0cy90aW1lLXNlcmllcy1jaGFydC10ZXN0cy5qcwkod29ya2luZyBj
b3B5KQpAQCAtMSw0MSArMSwzOCBAQAogCiBkZXNjcmliZSgnVGltZVNlcmllc0NoYXJ0JywgKCkg
PT4gewogCi0gICAgaXQoJ3Nob3VsZCBiZSBjb25zdHJ1Y3RpYmxlIHdpdGggYW4gZW1wdHkgc291
cmVjIGxpc3QgYW5kIGFuIGVtcHR5IG9wdGlvbnMnLCAoKSA9PiB7Ci0gICAgICAgIHJldHVybiBD
aGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKG5ldyBCcm93c2luZ0NvbnRleHQpLnRoZW4oKFRp
bWVTZXJpZXNDaGFydCkgPT4gewotICAgICAgICAgICAgbmV3IFRpbWVTZXJpZXNDaGFydChbXSwg
e30pOwotICAgICAgICB9KTsKKyAgICBpdCgnc2hvdWxkIGJlIGNvbnN0cnVjdGlibGUgd2l0aCBh
biBlbXB0eSBzb3VyZWMgbGlzdCBhbmQgYW4gZW1wdHkgb3B0aW9ucycsIGFzeW5jICgpID0+IHsK
KyAgICAgICAgY29uc3QgVGltZVNlcmllc0NoYXJ0ID0gYXdhaXQgQ2hhcnRUZXN0LmltcG9ydENo
YXJ0U2NyaXB0cyhuZXcgQnJvd3NpbmdDb250ZXh0KTsKKyAgICAgICAgbmV3IFRpbWVTZXJpZXND
aGFydChbXSwge30pOwogICAgIH0pOwogCiAgICAgZGVzY3JpYmUoJ2NvbXB1dGVUaW1lR3JpZCcs
ICgpID0+IHsKLSAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgYXJyYXkgd2hlbiB0
aGUgc3RhcnQgYW5kIHRoZSBlbmQgdGltZXMgYXJlIGlkZW50aWNhbCcsICgpID0+IHsKLSAgICAg
ICAgICAgIHJldHVybiBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKG5ldyBCcm93c2luZ0Nv
bnRleHQpLnRoZW4oKFRpbWVTZXJpZXNDaGFydCkgPT4gewotICAgICAgICAgICAgICAgIGNvbnN0
IHNvbWVUaW1lID0gRGF0ZS5ub3coKTsKLSAgICAgICAgICAgICAgICBjb25zdCBsYWJlbHMgPSBU
aW1lU2VyaWVzQ2hhcnQuY29tcHV0ZVRpbWVHcmlkKHNvbWVUaW1lLCBzb21lVGltZSwgMCk7Ci0g
ICAgICAgICAgICAgICAgZXhwZWN0KGxhYmVscykudG8uYmUuYSgnYXJyYXknKTsKLSAgICAgICAg
ICAgICAgICBleHBlY3QobGFiZWxzLmxlbmd0aCkudG8uYmUoMCk7Ci0gICAgICAgICAgICB9KTsK
KyAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGUgc3RhcnQg
YW5kIHRoZSBlbmQgdGltZXMgYXJlIGlkZW50aWNhbCcsIGFzeW5jICgpID0+IHsKKyAgICAgICAg
ICAgIGNvbnN0IFRpbWVTZXJpZXNDaGFydCA9IGF3YWl0IENoYXJ0VGVzdC5pbXBvcnRDaGFydFNj
cmlwdHMobmV3IEJyb3dzaW5nQ29udGV4dCk7CisKKyAgICAgICAgICAgIGNvbnN0IHNvbWVUaW1l
ID0gRGF0ZS5ub3coKTsKKyAgICAgICAgICAgIGNvbnN0IGxhYmVscyA9IFRpbWVTZXJpZXNDaGFy
dC5jb21wdXRlVGltZUdyaWQoc29tZVRpbWUsIHNvbWVUaW1lLCAwKTsKKyAgICAgICAgICAgIGV4
cGVjdChsYWJlbHMpLnRvLmJlLmEoJ2FycmF5Jyk7CisgICAgICAgICAgICBleHBlY3QobGFiZWxz
Lmxlbmd0aCkudG8uYmUoMCk7CiAgICAgICAgIH0pOwogCiAgICAgICAgIGNvbnN0IG1pbGxpc2Vj
b25kc1BlckhvdXIgPSAzNjAwICogMTAwMDsKICAgICAgICAgY29uc3QgbWlsbGlzZWNvbmRzUGVy
RGF5ID0gMjQgKiBtaWxsaXNlY29uZHNQZXJIb3VyOwogCi0gICAgICAgIGl0KCdzaG91bGQgcmV0
dXJuIGFuIGVtcHR5IGFycmF5IHdoZW4gbWF4TGFiZWxzIGlzIDAnLCAoKSA9PiB7Ci0gICAgICAg
ICAgICByZXR1cm4gQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhuZXcgQnJvd3NpbmdDb250
ZXh0KS50aGVuKChUaW1lU2VyaWVzQ2hhcnQpID0+IHsKLSAgICAgICAgICAgICAgICBjb25zdCBl
bmRUaW1lID0gRGF0ZS5ub3coKTsKLSAgICAgICAgICAgICAgICBjb25zdCBsYWJlbHMgPSBUaW1l
U2VyaWVzQ2hhcnQuY29tcHV0ZVRpbWVHcmlkKGVuZFRpbWUgLSBtaWxsaXNlY29uZHNQZXJEYXks
IGVuZFRpbWUsIDApOwotICAgICAgICAgICAgICAgIGV4cGVjdChsYWJlbHMpLnRvLmJlLmEoJ2Fy
cmF5Jyk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGxhYmVscy5sZW5ndGgpLnRvLmJlKDApOwot
ICAgICAgICAgICAgfSk7CisgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IGFycmF5
IHdoZW4gbWF4TGFiZWxzIGlzIDAnLCBhc3luYyAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBU
aW1lU2VyaWVzQ2hhcnQgPSBhd2FpdCBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKG5ldyBC
cm93c2luZ0NvbnRleHQpOworICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IERhdGUubm93KCk7
CisgICAgICAgICAgICBjb25zdCBsYWJlbHMgPSBUaW1lU2VyaWVzQ2hhcnQuY29tcHV0ZVRpbWVH
cmlkKGVuZFRpbWUgLSBtaWxsaXNlY29uZHNQZXJEYXksIGVuZFRpbWUsIDApOworICAgICAgICAg
ICAgZXhwZWN0KGxhYmVscykudG8uYmUuYSgnYXJyYXknKTsKKyAgICAgICAgICAgIGV4cGVjdChs
YWJlbHMubGVuZ3RoKS50by5iZSgwKTsKICAgICAgICAgfSk7CiAKLSAgICAgICAgaXQoJ3Nob3Vs
ZCByZXR1cm4gYW4gZW1wdHkgYXJyYXkgd2hlbiBtYXhMYWJlbHMgaXMgMCBldmVuIHdoZW4gdGhl
IGludGVydmFsIHNwYW5zIG11bHRpcGxlIG1vbnRocycsICgpID0+IHsKLSAgICAgICAgICAgIHJl
dHVybiBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKG5ldyBCcm93c2luZ0NvbnRleHQpLnRo
ZW4oKFRpbWVTZXJpZXNDaGFydCkgPT4gewotICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUg
PSBEYXRlLm5vdygpOwotICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVscyA9IFRpbWVTZXJpZXND
aGFydC5jb21wdXRlVGltZUdyaWQoZW5kVGltZSAtIDEyMCAqIG1pbGxpc2Vjb25kc1BlckRheSwg
ZW5kVGltZSwgMCk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGxhYmVscykudG8uYmUuYSgnYXJy
YXknKTsKLSAgICAgICAgICAgICAgICBleHBlY3QobGFiZWxzLmxlbmd0aCkudG8uYmUoMCk7Ci0g
ICAgICAgICAgICB9KTsKKyAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgYXJyYXkg
d2hlbiBtYXhMYWJlbHMgaXMgMCBldmVuIHdoZW4gdGhlIGludGVydmFsIHNwYW5zIG11bHRpcGxl
IG1vbnRocycsIGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IFRpbWVTZXJpZXNDaGFy
dCA9IGF3YWl0IENoYXJ0VGVzdC5pbXBvcnRDaGFydFNjcmlwdHMobmV3IEJyb3dzaW5nQ29udGV4
dCk7CisgICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gRGF0ZS5ub3coKTsKKyAgICAgICAgICAg
IGNvbnN0IGxhYmVscyA9IFRpbWVTZXJpZXNDaGFydC5jb21wdXRlVGltZUdyaWQoZW5kVGltZSAt
IDEyMCAqIG1pbGxpc2Vjb25kc1BlckRheSwgZW5kVGltZSwgMCk7CisgICAgICAgICAgICBleHBl
Y3QobGFiZWxzKS50by5iZS5hKCdhcnJheScpOworICAgICAgICAgICAgZXhwZWN0KGxhYmVscy5s
ZW5ndGgpLnRvLmJlKDApOwogICAgICAgICB9KTsKIAogICAgICAgICBmdW5jdGlvbiBjaGVja0dy
aWRJdGVtKGl0ZW0sIGxhYmVsLCBleHBlY3RlZERhdGUpCkBAIC00NSwyMzMgKzQyLDIxNyBAQCBk
ZXNjcmliZSgnVGltZVNlcmllc0NoYXJ0JywgKCkgPT4gewogICAgICAgICAgICAgZXhwZWN0KCtp
dGVtLnRpbWUpLnRvLmJlKCtuZXcgRGF0ZShleHBlY3RlZERhdGUpKTsKICAgICAgICAgfQogCi0g
ICAgICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgb25lIGhvdXIgbGFiZWwgd2l0aCBqdXN0IGRheSBm
b3IgdHdvIGhvdXIgaW50ZXJ2YWwgd2hlbiBtYXhMYWJlbHMgaXMgMScsICgpID0+IHsKLSAgICAg
ICAgICAgIHJldHVybiBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKG5ldyBCcm93c2luZ0Nv
bnRleHQpLnRoZW4oKFRpbWVTZXJpZXNDaGFydCkgPT4gewotICAgICAgICAgICAgICAgIGNvbnN0
IGVuZFRpbWUgPSBuZXcgRGF0ZSgnMjAxNy0wMS0xNVQwNzo1MzowMFonKTsKLSAgICAgICAgICAg
ICAgICBjb25zdCBsYWJlbHMgPSBUaW1lU2VyaWVzQ2hhcnQuY29tcHV0ZVRpbWVHcmlkKGVuZFRp
bWUgLSAyICogbWlsbGlzZWNvbmRzUGVySG91ciwgK2VuZFRpbWUsIDEpOwotICAgICAgICAgICAg
ICAgIGV4cGVjdChsYWJlbHMpLnRvLmJlLmEoJ2FycmF5Jyk7Ci0gICAgICAgICAgICAgICAgZXhw
ZWN0KGxhYmVscy5sZW5ndGgpLnRvLmJlKDEpOwotICAgICAgICAgICAgICAgIGNoZWNrR3JpZEl0
ZW0obGFiZWxzWzBdLCAnNkFNJywgJzIwMTctMDEtMTVUMDY6MDA6MDBaJyk7Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSB0d28gdHdv
LWhvdXIgbGFiZWxzIGZvciBmb3VyIGhvdXIgaW50ZXJ2YWwgd2hlbiBtYXhMYWJlbHMgaXMgMics
ICgpID0+IHsKLSAgICAgICAgICAgIHJldHVybiBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRz
KG5ldyBCcm93c2luZ0NvbnRleHQpLnRoZW4oKFRpbWVTZXJpZXNDaGFydCkgPT4gewotICAgICAg
ICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgnMjAxNy0wMS0xNVQwNzo1MzowMFon
KTsKLSAgICAgICAgICAgICAgICBjb25zdCBsYWJlbHMgPSBUaW1lU2VyaWVzQ2hhcnQuY29tcHV0
ZVRpbWVHcmlkKGVuZFRpbWUgLSA0ICogbWlsbGlzZWNvbmRzUGVySG91ciwgK2VuZFRpbWUsIDIp
OwotICAgICAgICAgICAgICAgIGV4cGVjdChsYWJlbHMpLnRvLmJlLmEoJ2FycmF5Jyk7Ci0gICAg
ICAgICAgICAgICAgZXhwZWN0KGxhYmVscy5sZW5ndGgpLnRvLmJlKDIpOwotICAgICAgICAgICAg
ICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzBdLCAnNEFNJywgJzIwMTctMDEtMTVUMDQ6MDA6MDBa
Jyk7Ci0gICAgICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbMV0sICc2QU0nLCAnMjAx
Ny0wMS0xNVQwNjowMDowMFonKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLQotICAg
ICAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIHNpeCB0d28taG91ciBsYWJlbHMgZm9yIHR3ZWx2ZSBo
b3VyIGludGVydmFsIHdoZW4gbWF4TGFiZWxzIGlzIDYnLCAoKSA9PiB7Ci0gICAgICAgICAgICBy
ZXR1cm4gQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhuZXcgQnJvd3NpbmdDb250ZXh0KS50
aGVuKChUaW1lU2VyaWVzQ2hhcnQpID0+IHsKLSAgICAgICAgICAgICAgICBjb25zdCBlbmRUaW1l
ID0gbmV3IERhdGUoJzIwMTctMDEtMTVUMDc6NTM6MDBaJyk7Ci0gICAgICAgICAgICAgICAgY29u
c3QgbGFiZWxzID0gVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVUaW1lR3JpZCgrZW5kVGltZSwgK2Vu
ZFRpbWUgKyAxMiAqIG1pbGxpc2Vjb25kc1BlckhvdXIsIDYpOwotICAgICAgICAgICAgICAgIGV4
cGVjdChsYWJlbHMpLnRvLmJlLmEoJ2FycmF5Jyk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGxh
YmVscy5sZW5ndGgpLnRvLmJlKDYpOwotICAgICAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFi
ZWxzWzBdLCAnOEFNJywgJzIwMTctMDEtMTVUMDg6MDA6MDBaJyk7Ci0gICAgICAgICAgICAgICAg
Y2hlY2tHcmlkSXRlbShsYWJlbHNbMV0sICcxMEFNJywgJzIwMTctMDEtMTVUMTA6MDA6MDBaJyk7
Ci0gICAgICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbMl0sICcxMlBNJywgJzIwMTct
MDEtMTVUMTI6MDA6MDBaJyk7Ci0gICAgICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNb
M10sICcyUE0nLCAnMjAxNy0wMS0xNVQxNDowMDowMFonKTsKLSAgICAgICAgICAgICAgICBjaGVj
a0dyaWRJdGVtKGxhYmVsc1s0XSwgJzRQTScsICcyMDE3LTAxLTE1VDE2OjAwOjAwWicpOwotICAg
ICAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzVdLCAnNlBNJywgJzIwMTctMDEtMTVU
MTg6MDA6MDBaJyk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgaXQo
J3Nob3VsZCBnZW5lcmF0ZSBzaXggdHdvLWhvdXIgbGFiZWxzIHdpdGggb25lIGRhdGUgbGFiZWwg
Zm9yIHR3ZWx2ZSBob3VyIGludGVydmFsIHRoYXQgY3Jvc3MgYSBkYXkgd2hlbiBtYXhMYWJlbHMg
aXMgNicsICgpID0+IHsKLSAgICAgICAgICAgIHJldHVybiBDaGFydFRlc3QuaW1wb3J0Q2hhcnRT
Y3JpcHRzKG5ldyBCcm93c2luZ0NvbnRleHQpLnRoZW4oKFRpbWVTZXJpZXNDaGFydCkgPT4gewot
ICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgnMjAxNy0wMS0xNVQxNjox
MjowMFonKTsKLSAgICAgICAgICAgICAgICBjb25zdCBsYWJlbHMgPSBUaW1lU2VyaWVzQ2hhcnQu
Y29tcHV0ZVRpbWVHcmlkKCtlbmRUaW1lLCArZW5kVGltZSArIDEyICogbWlsbGlzZWNvbmRzUGVy
SG91ciwgNik7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGxhYmVscykudG8uYmUuYSgnYXJyYXkn
KTsKLSAgICAgICAgICAgICAgICBleHBlY3QobGFiZWxzLmxlbmd0aCkudG8uYmUoNik7Ci0gICAg
ICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbMF0sICc2UE0nLCAnMjAxNy0wMS0xNVQx
ODowMDowMFonKTsKLSAgICAgICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1sxXSwgJzhQ
TScsICcyMDE3LTAxLTE1VDIwOjAwOjAwWicpOwotICAgICAgICAgICAgICAgIGNoZWNrR3JpZEl0
ZW0obGFiZWxzWzJdLCAnMTBQTScsICcyMDE3LTAxLTE1VDIyOjAwOjAwWicpOwotICAgICAgICAg
ICAgICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzNdLCAnMS8xNicsICcyMDE3LTAxLTE2VDAwOjAw
OjAwWicpOwotICAgICAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzRdLCAnMkFNJywg
JzIwMTctMDEtMTZUMDI6MDA6MDBaJyk7Ci0gICAgICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShs
YWJlbHNbNV0sICc0QU0nLCAnMjAxNy0wMS0xNlQwNDowMDowMFonKTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICB9KTsKLQotICAgICAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIHRocmVlIHR3by1o
b3VyIGxhYmVscyBmb3Igc2l4IGhvdXIgaW50ZXJ2YWwgdGhhdCBjcm9zcyBhIHllYXIgd2hlbiBt
YXhMYWJlbHMgaXMgNScsICgpID0+IHsKLSAgICAgICAgICAgIHJldHVybiBDaGFydFRlc3QuaW1w
b3J0Q2hhcnRTY3JpcHRzKG5ldyBCcm93c2luZ0NvbnRleHQpLnRoZW4oKFRpbWVTZXJpZXNDaGFy
dCkgPT4gewotICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgnMjAxNi0x
Mi0zMVQyMTozNzowMFonKTsKLSAgICAgICAgICAgICAgICBjb25zdCBsYWJlbHMgPSBUaW1lU2Vy
aWVzQ2hhcnQuY29tcHV0ZVRpbWVHcmlkKCtlbmRUaW1lLCArZW5kVGltZSArIDYgKiBtaWxsaXNl
Y29uZHNQZXJIb3VyLCA1KTsKLSAgICAgICAgICAgICAgICBleHBlY3QobGFiZWxzKS50by5iZS5h
KCdhcnJheScpOwotICAgICAgICAgICAgICAgIGV4cGVjdChsYWJlbHMubGVuZ3RoKS50by5iZSgz
KTsKLSAgICAgICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1swXSwgJzEwUE0nLCAnMjAx
Ni0xMi0zMVQyMjowMDowMFonKTsKLSAgICAgICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVs
c1sxXSwgJzEvMScsICcyMDE3LTAxLTAxVDAwOjAwOjAwWicpOwotICAgICAgICAgICAgICAgIGNo
ZWNrR3JpZEl0ZW0obGFiZWxzWzJdLCAnMkFNJywgJzIwMTctMDEtMDFUMDI6MDA6MDBaJyk7Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgaXQoJ3Nob3VsZCBnZW5lcmF0
ZSBvbmUgb25lLWRheSBsYWJlbCBmb3Igb25lIGRheSBpbnRlcnZhbCB3aGVuIG1heExhYmVscyBp
cyAxJywgKCkgPT4gewotICAgICAgICAgICAgcmV0dXJuIENoYXJ0VGVzdC5pbXBvcnRDaGFydFNj
cmlwdHMobmV3IEJyb3dzaW5nQ29udGV4dCkudGhlbigoVGltZVNlcmllc0NoYXJ0KSA9PiB7Ci0g
ICAgICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IG5ldyBEYXRlKCcyMDE3LTAxLTE1VDA3OjUz
OjAwWicpOwotICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVscyA9IFRpbWVTZXJpZXNDaGFydC5j
b21wdXRlVGltZUdyaWQoZW5kVGltZSAtIG1pbGxpc2Vjb25kc1BlckRheSwgK2VuZFRpbWUsIDEp
OwotICAgICAgICAgICAgICAgIGV4cGVjdChsYWJlbHMpLnRvLmJlLmEoJ2FycmF5Jyk7Ci0gICAg
ICAgICAgICAgICAgZXhwZWN0KGxhYmVscy5sZW5ndGgpLnRvLmJlKDEpOwotICAgICAgICAgICAg
ICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzBdLCAnMS8xNScsICcyMDE3LTAxLTE1VDAwOjAwOjAw
WicpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIGl0KCdzaG91bGQg
Z2VuZXJhdGUgdHdvIG9uZS1kYXkgbGFiZWxzIGZvciBvbmUgZGF5IGludGVydmFsIHdoZW4gbWF4
TGFiZWxzIGlzIDInLCAoKSA9PiB7Ci0gICAgICAgICAgICByZXR1cm4gQ2hhcnRUZXN0LmltcG9y
dENoYXJ0U2NyaXB0cyhuZXcgQnJvd3NpbmdDb250ZXh0KS50aGVuKChUaW1lU2VyaWVzQ2hhcnQp
ID0+IHsKLSAgICAgICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gbmV3IERhdGUoJzIwMTctMDEt
MTVUMDc6NTM6MDBaJyk7Ci0gICAgICAgICAgICAgICAgY29uc3QgbGFiZWxzID0gVGltZVNlcmll
c0NoYXJ0LmNvbXB1dGVUaW1lR3JpZChlbmRUaW1lIC0gbWlsbGlzZWNvbmRzUGVyRGF5LCArZW5k
VGltZSwgMik7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGxhYmVscykudG8uYmUuYSgnYXJyYXkn
KTsKLSAgICAgICAgICAgICAgICBleHBlY3QobGFiZWxzLmxlbmd0aCkudG8uYmUoMik7Ci0gICAg
ICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbMF0sICcxLzE0IDEyUE0nLCAnMjAxNy0w
MS0xNFQxMjowMDowMFonKTsKLSAgICAgICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1sx
XSwgJzEvMTUnLCAnMjAxNy0wMS0xNVQwMDowMDowMFonKTsKLSAgICAgICAgICAgIH0pOwotICAg
ICAgICB9KTsKLQotICAgICAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGZvdXIgaGFsZi1kYXkgbGFi
ZWxzIGZvciB0d28gZGF5IGludGVydmFsIHdoZW4gbWF4TGFiZWxzIGlzIDUnLCAoKSA9PiB7Ci0g
ICAgICAgICAgICByZXR1cm4gQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhuZXcgQnJvd3Np
bmdDb250ZXh0KS50aGVuKChUaW1lU2VyaWVzQ2hhcnQpID0+IHsKLSAgICAgICAgICAgICAgICBj
b25zdCBlbmRUaW1lID0gbmV3IERhdGUoJzIwMTctMDEtMTVUMTY6MTI6MDBaJyk7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgbGFiZWxzID0gVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVUaW1lR3JpZCgr
ZW5kVGltZSwgK2VuZFRpbWUgKyAyICogbWlsbGlzZWNvbmRzUGVyRGF5LCA1KTsKLSAgICAgICAg
ICAgICAgICBleHBlY3QobGFiZWxzKS50by5iZS5hKCdhcnJheScpOwotICAgICAgICAgICAgICAg
IGV4cGVjdChsYWJlbHMubGVuZ3RoKS50by5iZSg0KTsKLSAgICAgICAgICAgICAgICBjaGVja0dy
aWRJdGVtKGxhYmVsc1swXSwgJzEvMTYnLCAnMjAxNy0wMS0xNlQwMDowMDowMFonKTsKLSAgICAg
ICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1sxXSwgJzEyUE0nLCAnMjAxNy0wMS0xNlQx
MjowMDowMFonKTsKLSAgICAgICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1syXSwgJzEv
MTcnLCAnMjAxNy0wMS0xN1QwMDowMDowMFonKTsKLSAgICAgICAgICAgICAgICBjaGVja0dyaWRJ
dGVtKGxhYmVsc1szXSwgJzEyUE0nLCAnMjAxNy0wMS0xN1QxMjowMDowMFonKTsKLSAgICAgICAg
ICAgIH0pOwotICAgICAgICB9KTsKLQotICAgICAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGZvdXIg
aGFsZi1kYXkgbGFiZWxzIGZvciB0d28gZGF5IGludGVydmFsIHRoYXQgY3Jvc3MgYSB5ZWFyIHdo
ZW4gbWF4TGFiZWxzIGlzIDUnLCAoKSA9PiB7Ci0gICAgICAgICAgICByZXR1cm4gQ2hhcnRUZXN0
LmltcG9ydENoYXJ0U2NyaXB0cyhuZXcgQnJvd3NpbmdDb250ZXh0KS50aGVuKChUaW1lU2VyaWVz
Q2hhcnQpID0+IHsKLSAgICAgICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gbmV3IERhdGUoJzIw
MTYtMTItMzFUMDk6MTI6MDBaJyk7Ci0gICAgICAgICAgICAgICAgY29uc3QgbGFiZWxzID0gVGlt
ZVNlcmllc0NoYXJ0LmNvbXB1dGVUaW1lR3JpZCgrZW5kVGltZSwgK2VuZFRpbWUgKyAyICogbWls
bGlzZWNvbmRzUGVyRGF5LCA1KTsKLSAgICAgICAgICAgICAgICBleHBlY3QobGFiZWxzKS50by5i
ZS5hKCdhcnJheScpOwotICAgICAgICAgICAgICAgIGV4cGVjdChsYWJlbHMubGVuZ3RoKS50by5i
ZSg0KTsKLSAgICAgICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1swXSwgJzEyLzMxIDEy
UE0nLCAnMjAxNi0xMi0zMVQxMjowMDowMFonKTsKLSAgICAgICAgICAgICAgICBjaGVja0dyaWRJ
dGVtKGxhYmVsc1sxXSwgJzEvMScsICcyMDE3LTAxLTAxVDAwOjAwOjAwWicpOwotICAgICAgICAg
ICAgICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzJdLCAnMTJQTScsICcyMDE3LTAxLTAxVDEyOjAw
OjAwWicpOwotICAgICAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzNdLCAnMS8yJywg
JzIwMTctMDEtMDJUMDA6MDA6MDBaJyk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0K
LSAgICAgICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBzZXZlbiBwZXItZGF5IGxhYmVscyBmb3Igb25l
IHdlZWsgaW50ZXJ2YWwgd2hlbiBtYXhMYWJlbHMgaXMgMTAnLCAoKSA9PiB7Ci0gICAgICAgICAg
ICByZXR1cm4gQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhuZXcgQnJvd3NpbmdDb250ZXh0
KS50aGVuKChUaW1lU2VyaWVzQ2hhcnQpID0+IHsKLSAgICAgICAgICAgICAgICBjb25zdCBlbmRU
aW1lID0gbmV3IERhdGUoJzIwMTctMDEtMTVUMDc6NTM6MDBaJyk7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgbGFiZWxzID0gVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVUaW1lR3JpZChlbmRUaW1lIC0g
NyAqIG1pbGxpc2Vjb25kc1BlckRheSwgZW5kVGltZSwgMTApOwotICAgICAgICAgICAgICAgIGV4
cGVjdChsYWJlbHMpLnRvLmJlLmEoJ2FycmF5Jyk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGxh
YmVscy5sZW5ndGgpLnRvLmJlKDcpOwotICAgICAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFi
ZWxzWzBdLCAnMS85JywgJzIwMTctMDEtMDlUMDA6MDA6MDBaJyk7Ci0gICAgICAgICAgICAgICAg
Y2hlY2tHcmlkSXRlbShsYWJlbHNbMV0sICcxLzEwJywgJzIwMTctMDEtMTBUMDA6MDA6MDBaJyk7
Ci0gICAgICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbMl0sICcxLzExJywgJzIwMTct
MDEtMTFUMDA6MDA6MDBaJyk7Ci0gICAgICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNb
M10sICcxLzEyJywgJzIwMTctMDEtMTJUMDA6MDA6MDBaJyk7Ci0gICAgICAgICAgICAgICAgY2hl
Y2tHcmlkSXRlbShsYWJlbHNbNF0sICcxLzEzJywgJzIwMTctMDEtMTNUMDA6MDA6MDBaJyk7Ci0g
ICAgICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbNV0sICcxLzE0JywgJzIwMTctMDEt
MTRUMDA6MDA6MDBaJyk7Ci0gICAgICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbNl0s
ICcxLzE1JywgJzIwMTctMDEtMTVUMDA6MDA6MDBaJyk7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgfSk7Ci0KLSAgICAgICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSB0aHJlZSB0d28tZGF5IGxhYmVs
cyBmb3Igb25lIHdlZWsgaW50ZXJ2YWwgd2hlbiBtYXhMYWJlbHMgaXMgNCcsICgpID0+IHsKLSAg
ICAgICAgICAgIHJldHVybiBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKG5ldyBCcm93c2lu
Z0NvbnRleHQpLnRoZW4oKFRpbWVTZXJpZXNDaGFydCkgPT4gewotICAgICAgICAgICAgICAgIGNv
bnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgnMjAxNy0wMS0xNVQwNzo1MzowMFonKTsKLSAgICAgICAg
ICAgICAgICBjb25zdCBsYWJlbHMgPSBUaW1lU2VyaWVzQ2hhcnQuY29tcHV0ZVRpbWVHcmlkKGVu
ZFRpbWUgLSA3ICogbWlsbGlzZWNvbmRzUGVyRGF5LCBlbmRUaW1lLCA0KTsKLSAgICAgICAgICAg
ICAgICBleHBlY3QobGFiZWxzKS50by5iZS5hKCdhcnJheScpOwotICAgICAgICAgICAgICAgIGV4
cGVjdChsYWJlbHMubGVuZ3RoKS50by5iZSgzKTsKLSAgICAgICAgICAgICAgICBjaGVja0dyaWRJ
dGVtKGxhYmVsc1swXSwgJzEvMTAnLCAnMjAxNy0wMS0xMFQwMDowMDowMFonKTsKLSAgICAgICAg
ICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1sxXSwgJzEvMTInLCAnMjAxNy0wMS0xMlQwMDow
MDowMFonKTsKLSAgICAgICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1syXSwgJzEvMTQn
LCAnMjAxNy0wMS0xNFQwMDowMDowMFonKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsK
LQotICAgICAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIHNldmVuIG9uZS1kYXkgbGFiZWxzIGZvciB0
d28gd2VlayBpbnRlcnZhbCB3aGVuIG1heExhYmVscyBpcyA4JywgKCkgPT4gewotICAgICAgICAg
ICAgcmV0dXJuIENoYXJ0VGVzdC5pbXBvcnRDaGFydFNjcmlwdHMobmV3IEJyb3dzaW5nQ29udGV4
dCkudGhlbigoVGltZVNlcmllc0NoYXJ0KSA9PiB7Ci0gICAgICAgICAgICAgICAgY29uc3QgZW5k
VGltZSA9IG5ldyBEYXRlKCcyMDE3LTAxLTE1VDE4OjUzOjAwWicpOwotICAgICAgICAgICAgICAg
IGNvbnN0IGxhYmVscyA9IFRpbWVTZXJpZXNDaGFydC5jb21wdXRlVGltZUdyaWQoK2VuZFRpbWUs
ICtlbmRUaW1lICsgMTQgKiBtaWxsaXNlY29uZHNQZXJEYXksIDgpOwotICAgICAgICAgICAgICAg
IGV4cGVjdChsYWJlbHMpLnRvLmJlLmEoJ2FycmF5Jyk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0
KGxhYmVscy5sZW5ndGgpLnRvLmJlKDcpOwotICAgICAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0o
bGFiZWxzWzBdLCAnMS8xNycsICcyMDE3LTAxLTE3VDAwOjAwOjAwWicpOwotICAgICAgICAgICAg
ICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzFdLCAnMS8xOScsICcyMDE3LTAxLTE5VDAwOjAwOjAw
WicpOwotICAgICAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzJdLCAnMS8yMScsICcy
MDE3LTAxLTIxVDAwOjAwOjAwWicpOwotICAgICAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFi
ZWxzWzNdLCAnMS8yMycsICcyMDE3LTAxLTIzVDAwOjAwOjAwWicpOwotICAgICAgICAgICAgICAg
IGNoZWNrR3JpZEl0ZW0obGFiZWxzWzRdLCAnMS8yNScsICcyMDE3LTAxLTI1VDAwOjAwOjAwWicp
OwotICAgICAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzVdLCAnMS8yNycsICcyMDE3
LTAxLTI3VDAwOjAwOjAwWicpOwotICAgICAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxz
WzZdLCAnMS8yOScsICcyMDE3LTAxLTI5VDAwOjAwOjAwWicpOwotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIH0pOwotCi0gICAgICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgdHdvIG9uZS13ZWVrIGxh
YmVscyBmb3IgdHdvIHdlZWsgaW50ZXJ2YWwgd2hlbiBtYXhMYWJlbHMgaXMgMycsICgpID0+IHsK
LSAgICAgICAgICAgIHJldHVybiBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKG5ldyBCcm93
c2luZ0NvbnRleHQpLnRoZW4oKFRpbWVTZXJpZXNDaGFydCkgPT4gewotICAgICAgICAgICAgICAg
IGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgnMjAxNy0wMS0xNVQxODo1MzowMFonKTsKLSAgICAg
ICAgICAgICAgICBjb25zdCBsYWJlbHMgPSBUaW1lU2VyaWVzQ2hhcnQuY29tcHV0ZVRpbWVHcmlk
KCtlbmRUaW1lLCArZW5kVGltZSArIDE0ICogbWlsbGlzZWNvbmRzUGVyRGF5LCAzKTsKLSAgICAg
ICAgICAgICAgICBleHBlY3QobGFiZWxzKS50by5iZS5hKCdhcnJheScpOwotICAgICAgICAgICAg
ICAgIGV4cGVjdChsYWJlbHMubGVuZ3RoKS50by5iZSgyKTsKLSAgICAgICAgICAgICAgICBjaGVj
a0dyaWRJdGVtKGxhYmVsc1swXSwgJzEvMjInLCAnMjAxNy0wMS0yMlQwMDowMDowMFonKTsKLSAg
ICAgICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1sxXSwgJzEvMjknLCAnMjAxNy0wMS0y
OVQwMDowMDowMFonKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLQotICAgICAgICBp
dCgnc2hvdWxkIGdlbmVyYXRlIHNldmVuIG9uZS1tb250aCBsYWJlbHMgZm9yIHNpeCBhbmQgaGFs
ZiBtb250aHMgaW50ZXJ2YWwgc3RhcnRpbmcgYmVmb3JlIDE1dGggd2hlbiBtYXhMYWJlbHMgaXMg
NycsICgpID0+IHsKLSAgICAgICAgICAgIHJldHVybiBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3Jp
cHRzKG5ldyBCcm93c2luZ0NvbnRleHQpLnRoZW4oKFRpbWVTZXJpZXNDaGFydCkgPT4gewotICAg
ICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgnMjAxNy0wMS0xNVQxODo1Mzow
MFonKTsKLSAgICAgICAgICAgICAgICBjb25zdCBsYWJlbHMgPSBUaW1lU2VyaWVzQ2hhcnQuY29t
cHV0ZVRpbWVHcmlkKG5ldyBEYXRlKCcyMDE2LTA3LTEyVDE4OjUzOjAwWicpLCBuZXcgRGF0ZSgn
MjAxNy0wMS0xOFQwODoxNzo1M1onKSwgNyk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGxhYmVs
cykudG8uYmUuYSgnYXJyYXknKTsKLSAgICAgICAgICAgICAgICBleHBlY3QobGFiZWxzLmxlbmd0
aCkudG8uYmUoNyk7Ci0gICAgICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbMF0sICc3
LzE1JywgJzIwMTYtMDctMTVUMDA6MDA6MDBaJyk7Ci0gICAgICAgICAgICAgICAgY2hlY2tHcmlk
SXRlbShsYWJlbHNbMV0sICc4LzE1JywgJzIwMTYtMDgtMTVUMDA6MDA6MDBaJyk7Ci0gICAgICAg
ICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbMl0sICc5LzE1JywgJzIwMTYtMDktMTVUMDA6
MDA6MDBaJyk7Ci0gICAgICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbM10sICcxMC8x
NScsICcyMDE2LTEwLTE1VDAwOjAwOjAwWicpOwotICAgICAgICAgICAgICAgIGNoZWNrR3JpZEl0
ZW0obGFiZWxzWzRdLCAnMTEvMTUnLCAnMjAxNi0xMS0xNVQwMDowMDowMFonKTsKLSAgICAgICAg
ICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1s1XSwgJzEyLzE1JywgJzIwMTYtMTItMTVUMDA6
MDA6MDBaJyk7Ci0gICAgICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbNl0sICcxLzE1
JywgJzIwMTctMDEtMTVUMDA6MDA6MDBaJyk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7
Ci0KLSAgICAgICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBzZXZlbiBvbmUtbW9udGggbGFiZWxzIGZv
ciBzaXggbW9udGhzIGludGVydmFsIHN0YXJpbmcgYWZ0ZXIgMTV0aCB3aGVuIG1heExhYmVscyBp
cyA3JywgKCkgPT4gewotICAgICAgICAgICAgcmV0dXJuIENoYXJ0VGVzdC5pbXBvcnRDaGFydFNj
cmlwdHMobmV3IEJyb3dzaW5nQ29udGV4dCkudGhlbigoVGltZVNlcmllc0NoYXJ0KSA9PiB7Ci0g
ICAgICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IG5ldyBEYXRlKCcyMDE3LTAxLTE1VDE4OjUz
OjAwWicpOwotICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVscyA9IFRpbWVTZXJpZXNDaGFydC5j
b21wdXRlVGltZUdyaWQobmV3IERhdGUoJzIwMTYtMDctMThUMTg6NTM6MDBaJyksIG5ldyBEYXRl
KCcyMDE3LTAxLTE4VDA4OjE3OjUzWicpLCA3KTsKLSAgICAgICAgICAgICAgICBleHBlY3QobGFi
ZWxzKS50by5iZS5hKCdhcnJheScpOwotICAgICAgICAgICAgICAgIGV4cGVjdChsYWJlbHMubGVu
Z3RoKS50by5iZSg2KTsKLSAgICAgICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1swXSwg
JzgvMScsICcyMDE2LTA4LTAxVDAwOjAwOjAwWicpOwotICAgICAgICAgICAgICAgIGNoZWNrR3Jp
ZEl0ZW0obGFiZWxzWzFdLCAnOS8xJywgJzIwMTYtMDktMDFUMDA6MDA6MDBaJyk7Ci0gICAgICAg
ICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbMl0sICcxMC8xJywgJzIwMTYtMTAtMDFUMDA6
MDA6MDBaJyk7Ci0gICAgICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbM10sICcxMS8x
JywgJzIwMTYtMTEtMDFUMDA6MDA6MDBaJyk7Ci0gICAgICAgICAgICAgICAgY2hlY2tHcmlkSXRl
bShsYWJlbHNbNF0sICcxMi8xJywgJzIwMTYtMTItMDFUMDA6MDA6MDBaJyk7Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBzaXggdHdv
LW1vbnRocyBsYWJlbHMgZm9yIG9uZSB5ZWFyIGludGVydmFsIHdoZW4gbWF4TGFiZWxzIGlzIDcn
LCAoKSA9PiB7Ci0gICAgICAgICAgICByZXR1cm4gQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0
cyhuZXcgQnJvd3NpbmdDb250ZXh0KS50aGVuKChUaW1lU2VyaWVzQ2hhcnQpID0+IHsKLSAgICAg
ICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gbmV3IERhdGUoJzIwMTctMDEtMTVUMTg6NTM6MDBa
Jyk7Ci0gICAgICAgICAgICAgICAgY29uc3QgbGFiZWxzID0gVGltZVNlcmllc0NoYXJ0LmNvbXB1
dGVUaW1lR3JpZChuZXcgRGF0ZSgnMjAxNi0wNy0xMVQxODo1MzowMFonKSwgbmV3IERhdGUoJzIw
MTctMDctMjdUMDg6MTc6NTNaJyksIDcpOwotICAgICAgICAgICAgICAgIGV4cGVjdChsYWJlbHMp
LnRvLmJlLmEoJ2FycmF5Jyk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGxhYmVscy5sZW5ndGgp
LnRvLmJlKDYpOwotICAgICAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzBdLCAnOS8x
JywgJzIwMTYtMDktMDFUMDA6MDA6MDBaJyk7Ci0gICAgICAgICAgICAgICAgY2hlY2tHcmlkSXRl
bShsYWJlbHNbMV0sICcxMS8xJywgJzIwMTYtMTEtMDFUMDA6MDA6MDBaJyk7Ci0gICAgICAgICAg
ICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbMl0sICcxLzEnLCAnMjAxNy0wMS0wMVQwMDowMDow
MFonKTsKLSAgICAgICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1szXSwgJzMvMScsICcy
MDE3LTAzLTAxVDAwOjAwOjAwWicpOwotICAgICAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFi
ZWxzWzRdLCAnNS8xJywgJzIwMTctMDUtMDFUMDA6MDA6MDBaJyk7Ci0gICAgICAgICAgICAgICAg
Y2hlY2tHcmlkSXRlbShsYWJlbHNbNV0sICc3LzEnLCAnMjAxNy0wNy0wMVQwMDowMDowMFonKTsK
LSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLQotICAgICAgICBpdCgnc2hvdWxkIGdlbmVy
YXRlIGZvdXIgdGhyZWUtbW9udGhzIGxhYmVscyBmb3Igb25lIHllYXIgaW50ZXJ2YWwgd2hlbiBt
YXhMYWJlbHMgaXMgNScsICgpID0+IHsKLSAgICAgICAgICAgIHJldHVybiBDaGFydFRlc3QuaW1w
b3J0Q2hhcnRTY3JpcHRzKG5ldyBCcm93c2luZ0NvbnRleHQpLnRoZW4oKFRpbWVTZXJpZXNDaGFy
dCkgPT4gewotICAgICAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgnMjAxNy0w
MS0xNVQxODo1MzowMFonKTsKLSAgICAgICAgICAgICAgICBjb25zdCBsYWJlbHMgPSBUaW1lU2Vy
aWVzQ2hhcnQuY29tcHV0ZVRpbWVHcmlkKG5ldyBEYXRlKCcyMDE2LTA3LTExVDE4OjUzOjAwWicp
LCBuZXcgRGF0ZSgnMjAxNy0wNy0yN1QwODoxNzo1M1onKSwgNSk7Ci0gICAgICAgICAgICAgICAg
ZXhwZWN0KGxhYmVscykudG8uYmUuYSgnYXJyYXknKTsKLSAgICAgICAgICAgICAgICBleHBlY3Qo
bGFiZWxzLmxlbmd0aCkudG8uYmUoNCk7Ci0gICAgICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShs
YWJlbHNbMF0sICcxMC8xJywgJzIwMTYtMTAtMDFUMDA6MDA6MDBaJyk7Ci0gICAgICAgICAgICAg
ICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbMV0sICcxLzEnLCAnMjAxNy0wMS0wMVQwMDowMDowMFon
KTsKLSAgICAgICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1syXSwgJzQvMScsICcyMDE3
LTA0LTAxVDAwOjAwOjAwWicpOwotICAgICAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxz
WzNdLCAnNy8xJywgJzIwMTctMDctMDFUMDA6MDA6MDBaJyk7Ci0gICAgICAgICAgICB9KTsKKyAg
ICAgICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBvbmUgaG91ciBsYWJlbCB3aXRoIGp1c3QgZGF5IGZv
ciB0d28gaG91ciBpbnRlcnZhbCB3aGVuIG1heExhYmVscyBpcyAxJywgYXN5bmMgKCkgPT4gewor
ICAgICAgICAgICAgY29uc3QgVGltZVNlcmllc0NoYXJ0ID0gYXdhaXQgQ2hhcnRUZXN0LmltcG9y
dENoYXJ0U2NyaXB0cyhuZXcgQnJvd3NpbmdDb250ZXh0KTsKKyAgICAgICAgICAgIGNvbnN0IGVu
ZFRpbWUgPSBuZXcgRGF0ZSgnMjAxNy0wMS0xNVQwNzo1MzowMFonKTsKKyAgICAgICAgICAgIGNv
bnN0IGxhYmVscyA9IFRpbWVTZXJpZXNDaGFydC5jb21wdXRlVGltZUdyaWQoZW5kVGltZSAtIDIg
KiBtaWxsaXNlY29uZHNQZXJIb3VyLCArZW5kVGltZSwgMSk7CisgICAgICAgICAgICBleHBlY3Qo
bGFiZWxzKS50by5iZS5hKCdhcnJheScpOworICAgICAgICAgICAgZXhwZWN0KGxhYmVscy5sZW5n
dGgpLnRvLmJlKDEpOworICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbMF0sICc2QU0n
LCAnMjAxNy0wMS0xNVQwNjowMDowMFonKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3No
b3VsZCBnZW5lcmF0ZSB0d28gdHdvLWhvdXIgbGFiZWxzIGZvciBmb3VyIGhvdXIgaW50ZXJ2YWwg
d2hlbiBtYXhMYWJlbHMgaXMgMicsIGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IFRp
bWVTZXJpZXNDaGFydCA9IGF3YWl0IENoYXJ0VGVzdC5pbXBvcnRDaGFydFNjcmlwdHMobmV3IEJy
b3dzaW5nQ29udGV4dCk7CisgICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gbmV3IERhdGUoJzIw
MTctMDEtMTVUMDc6NTM6MDBaJyk7CisgICAgICAgICAgICBjb25zdCBsYWJlbHMgPSBUaW1lU2Vy
aWVzQ2hhcnQuY29tcHV0ZVRpbWVHcmlkKGVuZFRpbWUgLSA0ICogbWlsbGlzZWNvbmRzUGVySG91
ciwgK2VuZFRpbWUsIDIpOworICAgICAgICAgICAgZXhwZWN0KGxhYmVscykudG8uYmUuYSgnYXJy
YXknKTsKKyAgICAgICAgICAgIGV4cGVjdChsYWJlbHMubGVuZ3RoKS50by5iZSgyKTsKKyAgICAg
ICAgICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzBdLCAnNEFNJywgJzIwMTctMDEtMTVUMDQ6MDA6
MDBaJyk7CisgICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1sxXSwgJzZBTScsICcyMDE3
LTAxLTE1VDA2OjAwOjAwWicpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIGdl
bmVyYXRlIHNpeCB0d28taG91ciBsYWJlbHMgZm9yIHR3ZWx2ZSBob3VyIGludGVydmFsIHdoZW4g
bWF4TGFiZWxzIGlzIDYnLCBhc3luYyAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBUaW1lU2Vy
aWVzQ2hhcnQgPSBhd2FpdCBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKG5ldyBCcm93c2lu
Z0NvbnRleHQpOworICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IG5ldyBEYXRlKCcyMDE3LTAx
LTE1VDA3OjUzOjAwWicpOworICAgICAgICAgICAgY29uc3QgbGFiZWxzID0gVGltZVNlcmllc0No
YXJ0LmNvbXB1dGVUaW1lR3JpZCgrZW5kVGltZSwgK2VuZFRpbWUgKyAxMiAqIG1pbGxpc2Vjb25k
c1BlckhvdXIsIDYpOworICAgICAgICAgICAgZXhwZWN0KGxhYmVscykudG8uYmUuYSgnYXJyYXkn
KTsKKyAgICAgICAgICAgIGV4cGVjdChsYWJlbHMubGVuZ3RoKS50by5iZSg2KTsKKyAgICAgICAg
ICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzBdLCAnOEFNJywgJzIwMTctMDEtMTVUMDg6MDA6MDBa
Jyk7CisgICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1sxXSwgJzEwQU0nLCAnMjAxNy0w
MS0xNVQxMDowMDowMFonKTsKKyAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzJdLCAn
MTJQTScsICcyMDE3LTAxLTE1VDEyOjAwOjAwWicpOworICAgICAgICAgICAgY2hlY2tHcmlkSXRl
bShsYWJlbHNbM10sICcyUE0nLCAnMjAxNy0wMS0xNVQxNDowMDowMFonKTsKKyAgICAgICAgICAg
IGNoZWNrR3JpZEl0ZW0obGFiZWxzWzRdLCAnNFBNJywgJzIwMTctMDEtMTVUMTY6MDA6MDBaJyk7
CisgICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1s1XSwgJzZQTScsICcyMDE3LTAxLTE1
VDE4OjAwOjAwWicpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIGdlbmVyYXRl
IHNpeCB0d28taG91ciBsYWJlbHMgd2l0aCBvbmUgZGF0ZSBsYWJlbCBmb3IgdHdlbHZlIGhvdXIg
aW50ZXJ2YWwgdGhhdCBjcm9zcyBhIGRheSB3aGVuIG1heExhYmVscyBpcyA2JywgYXN5bmMgKCkg
PT4geworICAgICAgICAgICAgY29uc3QgVGltZVNlcmllc0NoYXJ0ID0gYXdhaXQgQ2hhcnRUZXN0
LmltcG9ydENoYXJ0U2NyaXB0cyhuZXcgQnJvd3NpbmdDb250ZXh0KTsKKyAgICAgICAgICAgIGNv
bnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgnMjAxNy0wMS0xNVQxNjoxMjowMFonKTsKKyAgICAgICAg
ICAgIGNvbnN0IGxhYmVscyA9IFRpbWVTZXJpZXNDaGFydC5jb21wdXRlVGltZUdyaWQoK2VuZFRp
bWUsICtlbmRUaW1lICsgMTIgKiBtaWxsaXNlY29uZHNQZXJIb3VyLCA2KTsKKyAgICAgICAgICAg
IGV4cGVjdChsYWJlbHMpLnRvLmJlLmEoJ2FycmF5Jyk7CisgICAgICAgICAgICBleHBlY3QobGFi
ZWxzLmxlbmd0aCkudG8uYmUoNik7CisgICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1sw
XSwgJzZQTScsICcyMDE3LTAxLTE1VDE4OjAwOjAwWicpOworICAgICAgICAgICAgY2hlY2tHcmlk
SXRlbShsYWJlbHNbMV0sICc4UE0nLCAnMjAxNy0wMS0xNVQyMDowMDowMFonKTsKKyAgICAgICAg
ICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzJdLCAnMTBQTScsICcyMDE3LTAxLTE1VDIyOjAwOjAw
WicpOworICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbM10sICcxLzE2JywgJzIwMTct
MDEtMTZUMDA6MDA6MDBaJyk7CisgICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1s0XSwg
JzJBTScsICcyMDE3LTAxLTE2VDAyOjAwOjAwWicpOworICAgICAgICAgICAgY2hlY2tHcmlkSXRl
bShsYWJlbHNbNV0sICc0QU0nLCAnMjAxNy0wMS0xNlQwNDowMDowMFonKTsKKyAgICAgICAgfSk7
CisKKyAgICAgICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSB0aHJlZSB0d28taG91ciBsYWJlbHMgZm9y
IHNpeCBob3VyIGludGVydmFsIHRoYXQgY3Jvc3MgYSB5ZWFyIHdoZW4gbWF4TGFiZWxzIGlzIDUn
LCBhc3luYyAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBUaW1lU2VyaWVzQ2hhcnQgPSBhd2Fp
dCBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKG5ldyBCcm93c2luZ0NvbnRleHQpOworICAg
ICAgICAgICAgY29uc3QgZW5kVGltZSA9IG5ldyBEYXRlKCcyMDE2LTEyLTMxVDIxOjM3OjAwWicp
OworICAgICAgICAgICAgY29uc3QgbGFiZWxzID0gVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVUaW1l
R3JpZCgrZW5kVGltZSwgK2VuZFRpbWUgKyA2ICogbWlsbGlzZWNvbmRzUGVySG91ciwgNSk7Cisg
ICAgICAgICAgICBleHBlY3QobGFiZWxzKS50by5iZS5hKCdhcnJheScpOworICAgICAgICAgICAg
ZXhwZWN0KGxhYmVscy5sZW5ndGgpLnRvLmJlKDMpOworICAgICAgICAgICAgY2hlY2tHcmlkSXRl
bShsYWJlbHNbMF0sICcxMFBNJywgJzIwMTYtMTItMzFUMjI6MDA6MDBaJyk7CisgICAgICAgICAg
ICBjaGVja0dyaWRJdGVtKGxhYmVsc1sxXSwgJzEvMScsICcyMDE3LTAxLTAxVDAwOjAwOjAwWicp
OworICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbMl0sICcyQU0nLCAnMjAxNy0wMS0w
MVQwMjowMDowMFonKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCBnZW5lcmF0
ZSBvbmUgb25lLWRheSBsYWJlbCBmb3Igb25lIGRheSBpbnRlcnZhbCB3aGVuIG1heExhYmVscyBp
cyAxJywgYXN5bmMgKCkgPT4geworICAgICAgICAgICAgY29uc3QgVGltZVNlcmllc0NoYXJ0ID0g
YXdhaXQgQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhuZXcgQnJvd3NpbmdDb250ZXh0KTsK
KyAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgnMjAxNy0wMS0xNVQwNzo1Mzow
MFonKTsKKyAgICAgICAgICAgIGNvbnN0IGxhYmVscyA9IFRpbWVTZXJpZXNDaGFydC5jb21wdXRl
VGltZUdyaWQoZW5kVGltZSAtIG1pbGxpc2Vjb25kc1BlckRheSwgK2VuZFRpbWUsIDEpOworICAg
ICAgICAgICAgZXhwZWN0KGxhYmVscykudG8uYmUuYSgnYXJyYXknKTsKKyAgICAgICAgICAgIGV4
cGVjdChsYWJlbHMubGVuZ3RoKS50by5iZSgxKTsKKyAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0o
bGFiZWxzWzBdLCAnMS8xNScsICcyMDE3LTAxLTE1VDAwOjAwOjAwWicpOworICAgICAgICB9KTsK
KworICAgICAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIHR3byBvbmUtZGF5IGxhYmVscyBmb3Igb25l
IGRheSBpbnRlcnZhbCB3aGVuIG1heExhYmVscyBpcyAyJywgYXN5bmMgKCkgPT4geworICAgICAg
ICAgICAgY29uc3QgVGltZVNlcmllc0NoYXJ0ID0gYXdhaXQgQ2hhcnRUZXN0LmltcG9ydENoYXJ0
U2NyaXB0cyhuZXcgQnJvd3NpbmdDb250ZXh0KTsKKyAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUg
PSBuZXcgRGF0ZSgnMjAxNy0wMS0xNVQwNzo1MzowMFonKTsKKyAgICAgICAgICAgIGNvbnN0IGxh
YmVscyA9IFRpbWVTZXJpZXNDaGFydC5jb21wdXRlVGltZUdyaWQoZW5kVGltZSAtIG1pbGxpc2Vj
b25kc1BlckRheSwgK2VuZFRpbWUsIDIpOworICAgICAgICAgICAgZXhwZWN0KGxhYmVscykudG8u
YmUuYSgnYXJyYXknKTsKKyAgICAgICAgICAgIGV4cGVjdChsYWJlbHMubGVuZ3RoKS50by5iZSgy
KTsKKyAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzBdLCAnMS8xNCAxMlBNJywgJzIw
MTctMDEtMTRUMTI6MDA6MDBaJyk7CisgICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1sx
XSwgJzEvMTUnLCAnMjAxNy0wMS0xNVQwMDowMDowMFonKTsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBmb3VyIGhhbGYtZGF5IGxhYmVscyBmb3IgdHdvIGRheSBp
bnRlcnZhbCB3aGVuIG1heExhYmVscyBpcyA1JywgYXN5bmMgKCkgPT4geworICAgICAgICAgICAg
Y29uc3QgVGltZVNlcmllc0NoYXJ0ID0gYXdhaXQgQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0
cyhuZXcgQnJvd3NpbmdDb250ZXh0KTsKKyAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcg
RGF0ZSgnMjAxNy0wMS0xNVQxNjoxMjowMFonKTsKKyAgICAgICAgICAgIGNvbnN0IGxhYmVscyA9
IFRpbWVTZXJpZXNDaGFydC5jb21wdXRlVGltZUdyaWQoK2VuZFRpbWUsICtlbmRUaW1lICsgMiAq
IG1pbGxpc2Vjb25kc1BlckRheSwgNSk7CisgICAgICAgICAgICBleHBlY3QobGFiZWxzKS50by5i
ZS5hKCdhcnJheScpOworICAgICAgICAgICAgZXhwZWN0KGxhYmVscy5sZW5ndGgpLnRvLmJlKDQp
OworICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbMF0sICcxLzE2JywgJzIwMTctMDEt
MTZUMDA6MDA6MDBaJyk7CisgICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1sxXSwgJzEy
UE0nLCAnMjAxNy0wMS0xNlQxMjowMDowMFonKTsKKyAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0o
bGFiZWxzWzJdLCAnMS8xNycsICcyMDE3LTAxLTE3VDAwOjAwOjAwWicpOworICAgICAgICAgICAg
Y2hlY2tHcmlkSXRlbShsYWJlbHNbM10sICcxMlBNJywgJzIwMTctMDEtMTdUMTI6MDA6MDBaJyk7
CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgZm91ciBoYWxmLWRh
eSBsYWJlbHMgZm9yIHR3byBkYXkgaW50ZXJ2YWwgdGhhdCBjcm9zcyBhIHllYXIgd2hlbiBtYXhM
YWJlbHMgaXMgNScsIGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IFRpbWVTZXJpZXND
aGFydCA9IGF3YWl0IENoYXJ0VGVzdC5pbXBvcnRDaGFydFNjcmlwdHMobmV3IEJyb3dzaW5nQ29u
dGV4dCk7CisgICAgICAgICAgICBjb25zdCBlbmRUaW1lID0gbmV3IERhdGUoJzIwMTYtMTItMzFU
MDk6MTI6MDBaJyk7CisgICAgICAgICAgICBjb25zdCBsYWJlbHMgPSBUaW1lU2VyaWVzQ2hhcnQu
Y29tcHV0ZVRpbWVHcmlkKCtlbmRUaW1lLCArZW5kVGltZSArIDIgKiBtaWxsaXNlY29uZHNQZXJE
YXksIDUpOworICAgICAgICAgICAgZXhwZWN0KGxhYmVscykudG8uYmUuYSgnYXJyYXknKTsKKyAg
ICAgICAgICAgIGV4cGVjdChsYWJlbHMubGVuZ3RoKS50by5iZSg0KTsKKyAgICAgICAgICAgIGNo
ZWNrR3JpZEl0ZW0obGFiZWxzWzBdLCAnMTIvMzEgMTJQTScsICcyMDE2LTEyLTMxVDEyOjAwOjAw
WicpOworICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbMV0sICcxLzEnLCAnMjAxNy0w
MS0wMVQwMDowMDowMFonKTsKKyAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzJdLCAn
MTJQTScsICcyMDE3LTAxLTAxVDEyOjAwOjAwWicpOworICAgICAgICAgICAgY2hlY2tHcmlkSXRl
bShsYWJlbHNbM10sICcxLzInLCAnMjAxNy0wMS0wMlQwMDowMDowMFonKTsKKyAgICAgICAgfSk7
CisKKyAgICAgICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBzZXZlbiBwZXItZGF5IGxhYmVscyBmb3Ig
b25lIHdlZWsgaW50ZXJ2YWwgd2hlbiBtYXhMYWJlbHMgaXMgMTAnLCBhc3luYyAoKSA9PiB7Cisg
ICAgICAgICAgICBjb25zdCBUaW1lU2VyaWVzQ2hhcnQgPSBhd2FpdCBDaGFydFRlc3QuaW1wb3J0
Q2hhcnRTY3JpcHRzKG5ldyBCcm93c2luZ0NvbnRleHQpOworICAgICAgICAgICAgY29uc3QgZW5k
VGltZSA9IG5ldyBEYXRlKCcyMDE3LTAxLTE1VDA3OjUzOjAwWicpOworICAgICAgICAgICAgY29u
c3QgbGFiZWxzID0gVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVUaW1lR3JpZChlbmRUaW1lIC0gNyAq
IG1pbGxpc2Vjb25kc1BlckRheSwgZW5kVGltZSwgMTApOworICAgICAgICAgICAgZXhwZWN0KGxh
YmVscykudG8uYmUuYSgnYXJyYXknKTsKKyAgICAgICAgICAgIGV4cGVjdChsYWJlbHMubGVuZ3Ro
KS50by5iZSg3KTsKKyAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzBdLCAnMS85Jywg
JzIwMTctMDEtMDlUMDA6MDA6MDBaJyk7CisgICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVs
c1sxXSwgJzEvMTAnLCAnMjAxNy0wMS0xMFQwMDowMDowMFonKTsKKyAgICAgICAgICAgIGNoZWNr
R3JpZEl0ZW0obGFiZWxzWzJdLCAnMS8xMScsICcyMDE3LTAxLTExVDAwOjAwOjAwWicpOworICAg
ICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbM10sICcxLzEyJywgJzIwMTctMDEtMTJUMDA6
MDA6MDBaJyk7CisgICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1s0XSwgJzEvMTMnLCAn
MjAxNy0wMS0xM1QwMDowMDowMFonKTsKKyAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxz
WzVdLCAnMS8xNCcsICcyMDE3LTAxLTE0VDAwOjAwOjAwWicpOworICAgICAgICAgICAgY2hlY2tH
cmlkSXRlbShsYWJlbHNbNl0sICcxLzE1JywgJzIwMTctMDEtMTVUMDA6MDA6MDBaJyk7CisgICAg
ICAgIH0pOworCisgICAgICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgdGhyZWUgdHdvLWRheSBsYWJl
bHMgZm9yIG9uZSB3ZWVrIGludGVydmFsIHdoZW4gbWF4TGFiZWxzIGlzIDQnLCBhc3luYyAoKSA9
PiB7CisgICAgICAgICAgICBjb25zdCBUaW1lU2VyaWVzQ2hhcnQgPSBhd2FpdCBDaGFydFRlc3Qu
aW1wb3J0Q2hhcnRTY3JpcHRzKG5ldyBCcm93c2luZ0NvbnRleHQpOworICAgICAgICAgICAgY29u
c3QgZW5kVGltZSA9IG5ldyBEYXRlKCcyMDE3LTAxLTE1VDA3OjUzOjAwWicpOworICAgICAgICAg
ICAgY29uc3QgbGFiZWxzID0gVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVUaW1lR3JpZChlbmRUaW1l
IC0gNyAqIG1pbGxpc2Vjb25kc1BlckRheSwgZW5kVGltZSwgNCk7CisgICAgICAgICAgICBleHBl
Y3QobGFiZWxzKS50by5iZS5hKCdhcnJheScpOworICAgICAgICAgICAgZXhwZWN0KGxhYmVscy5s
ZW5ndGgpLnRvLmJlKDMpOworICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbMF0sICcx
LzEwJywgJzIwMTctMDEtMTBUMDA6MDA6MDBaJyk7CisgICAgICAgICAgICBjaGVja0dyaWRJdGVt
KGxhYmVsc1sxXSwgJzEvMTInLCAnMjAxNy0wMS0xMlQwMDowMDowMFonKTsKKyAgICAgICAgICAg
IGNoZWNrR3JpZEl0ZW0obGFiZWxzWzJdLCAnMS8xNCcsICcyMDE3LTAxLTE0VDAwOjAwOjAwWicp
OworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIHNldmVuIG9uZS1k
YXkgbGFiZWxzIGZvciB0d28gd2VlayBpbnRlcnZhbCB3aGVuIG1heExhYmVscyBpcyA4JywgYXN5
bmMgKCkgPT4geworICAgICAgICAgICAgY29uc3QgVGltZVNlcmllc0NoYXJ0ID0gYXdhaXQgQ2hh
cnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhuZXcgQnJvd3NpbmdDb250ZXh0KTsKKyAgICAgICAg
ICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZSgnMjAxNy0wMS0xNVQxODo1MzowMFonKTsKKyAg
ICAgICAgICAgIGNvbnN0IGxhYmVscyA9IFRpbWVTZXJpZXNDaGFydC5jb21wdXRlVGltZUdyaWQo
K2VuZFRpbWUsICtlbmRUaW1lICsgMTQgKiBtaWxsaXNlY29uZHNQZXJEYXksIDgpOworICAgICAg
ICAgICAgZXhwZWN0KGxhYmVscykudG8uYmUuYSgnYXJyYXknKTsKKyAgICAgICAgICAgIGV4cGVj
dChsYWJlbHMubGVuZ3RoKS50by5iZSg3KTsKKyAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFi
ZWxzWzBdLCAnMS8xNycsICcyMDE3LTAxLTE3VDAwOjAwOjAwWicpOworICAgICAgICAgICAgY2hl
Y2tHcmlkSXRlbShsYWJlbHNbMV0sICcxLzE5JywgJzIwMTctMDEtMTlUMDA6MDA6MDBaJyk7Cisg
ICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1syXSwgJzEvMjEnLCAnMjAxNy0wMS0yMVQw
MDowMDowMFonKTsKKyAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzNdLCAnMS8yMycs
ICcyMDE3LTAxLTIzVDAwOjAwOjAwWicpOworICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJl
bHNbNF0sICcxLzI1JywgJzIwMTctMDEtMjVUMDA6MDA6MDBaJyk7CisgICAgICAgICAgICBjaGVj
a0dyaWRJdGVtKGxhYmVsc1s1XSwgJzEvMjcnLCAnMjAxNy0wMS0yN1QwMDowMDowMFonKTsKKyAg
ICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzZdLCAnMS8yOScsICcyMDE3LTAxLTI5VDAw
OjAwOjAwWicpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIHR3
byBvbmUtd2VlayBsYWJlbHMgZm9yIHR3byB3ZWVrIGludGVydmFsIHdoZW4gbWF4TGFiZWxzIGlz
IDMnLCBhc3luYyAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBUaW1lU2VyaWVzQ2hhcnQgPSBh
d2FpdCBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKG5ldyBCcm93c2luZ0NvbnRleHQpOwor
ICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IG5ldyBEYXRlKCcyMDE3LTAxLTE1VDE4OjUzOjAw
WicpOworICAgICAgICAgICAgY29uc3QgbGFiZWxzID0gVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVU
aW1lR3JpZCgrZW5kVGltZSwgK2VuZFRpbWUgKyAxNCAqIG1pbGxpc2Vjb25kc1BlckRheSwgMyk7
CisgICAgICAgICAgICBleHBlY3QobGFiZWxzKS50by5iZS5hKCdhcnJheScpOworICAgICAgICAg
ICAgZXhwZWN0KGxhYmVscy5sZW5ndGgpLnRvLmJlKDIpOworICAgICAgICAgICAgY2hlY2tHcmlk
SXRlbShsYWJlbHNbMF0sICcxLzIyJywgJzIwMTctMDEtMjJUMDA6MDA6MDBaJyk7CisgICAgICAg
ICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1sxXSwgJzEvMjknLCAnMjAxNy0wMS0yOVQwMDowMDow
MFonKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBzZXZlbiBv
bmUtbW9udGggbGFiZWxzIGZvciBzaXggYW5kIGhhbGYgbW9udGhzIGludGVydmFsIHN0YXJ0aW5n
IGJlZm9yZSAxNXRoIHdoZW4gbWF4TGFiZWxzIGlzIDcnLCBhc3luYyAoKSA9PiB7CisgICAgICAg
ICAgICBjb25zdCBUaW1lU2VyaWVzQ2hhcnQgPSBhd2FpdCBDaGFydFRlc3QuaW1wb3J0Q2hhcnRT
Y3JpcHRzKG5ldyBCcm93c2luZ0NvbnRleHQpOworICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9
IG5ldyBEYXRlKCcyMDE3LTAxLTE1VDE4OjUzOjAwWicpOworICAgICAgICAgICAgY29uc3QgbGFi
ZWxzID0gVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVUaW1lR3JpZChuZXcgRGF0ZSgnMjAxNi0wNy0x
MlQxODo1MzowMFonKSwgbmV3IERhdGUoJzIwMTctMDEtMThUMDg6MTc6NTNaJyksIDcpOworICAg
ICAgICAgICAgZXhwZWN0KGxhYmVscykudG8uYmUuYSgnYXJyYXknKTsKKyAgICAgICAgICAgIGV4
cGVjdChsYWJlbHMubGVuZ3RoKS50by5iZSg3KTsKKyAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0o
bGFiZWxzWzBdLCAnNy8xNScsICcyMDE2LTA3LTE1VDAwOjAwOjAwWicpOworICAgICAgICAgICAg
Y2hlY2tHcmlkSXRlbShsYWJlbHNbMV0sICc4LzE1JywgJzIwMTYtMDgtMTVUMDA6MDA6MDBaJyk7
CisgICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1syXSwgJzkvMTUnLCAnMjAxNi0wOS0x
NVQwMDowMDowMFonKTsKKyAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzNdLCAnMTAv
MTUnLCAnMjAxNi0xMC0xNVQwMDowMDowMFonKTsKKyAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0o
bGFiZWxzWzRdLCAnMTEvMTUnLCAnMjAxNi0xMS0xNVQwMDowMDowMFonKTsKKyAgICAgICAgICAg
IGNoZWNrR3JpZEl0ZW0obGFiZWxzWzVdLCAnMTIvMTUnLCAnMjAxNi0xMi0xNVQwMDowMDowMFon
KTsKKyAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzZdLCAnMS8xNScsICcyMDE3LTAx
LTE1VDAwOjAwOjAwWicpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIGdlbmVy
YXRlIHNldmVuIG9uZS1tb250aCBsYWJlbHMgZm9yIHNpeCBtb250aHMgaW50ZXJ2YWwgc3Rhcmlu
ZyBhZnRlciAxNXRoIHdoZW4gbWF4TGFiZWxzIGlzIDcnLCBhc3luYyAoKSA9PiB7CisgICAgICAg
ICAgICBjb25zdCBUaW1lU2VyaWVzQ2hhcnQgPSBhd2FpdCBDaGFydFRlc3QuaW1wb3J0Q2hhcnRT
Y3JpcHRzKG5ldyBCcm93c2luZ0NvbnRleHQpOworICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9
IG5ldyBEYXRlKCcyMDE3LTAxLTE1VDE4OjUzOjAwWicpOworICAgICAgICAgICAgY29uc3QgbGFi
ZWxzID0gVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVUaW1lR3JpZChuZXcgRGF0ZSgnMjAxNi0wNy0x
OFQxODo1MzowMFonKSwgbmV3IERhdGUoJzIwMTctMDEtMThUMDg6MTc6NTNaJyksIDcpOworICAg
ICAgICAgICAgZXhwZWN0KGxhYmVscykudG8uYmUuYSgnYXJyYXknKTsKKyAgICAgICAgICAgIGV4
cGVjdChsYWJlbHMubGVuZ3RoKS50by5iZSg2KTsKKyAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0o
bGFiZWxzWzBdLCAnOC8xJywgJzIwMTYtMDgtMDFUMDA6MDA6MDBaJyk7CisgICAgICAgICAgICBj
aGVja0dyaWRJdGVtKGxhYmVsc1sxXSwgJzkvMScsICcyMDE2LTA5LTAxVDAwOjAwOjAwWicpOwor
ICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbMl0sICcxMC8xJywgJzIwMTYtMTAtMDFU
MDA6MDA6MDBaJyk7CisgICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxhYmVsc1szXSwgJzExLzEn
LCAnMjAxNi0xMS0wMVQwMDowMDowMFonKTsKKyAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFi
ZWxzWzRdLCAnMTIvMScsICcyMDE2LTEyLTAxVDAwOjAwOjAwWicpOworICAgICAgICB9KTsKKwor
ICAgICAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIHNpeCB0d28tbW9udGhzIGxhYmVscyBmb3Igb25l
IHllYXIgaW50ZXJ2YWwgd2hlbiBtYXhMYWJlbHMgaXMgNycsIGFzeW5jICgpID0+IHsKKyAgICAg
ICAgICAgIGNvbnN0IFRpbWVTZXJpZXNDaGFydCA9IGF3YWl0IENoYXJ0VGVzdC5pbXBvcnRDaGFy
dFNjcmlwdHMobmV3IEJyb3dzaW5nQ29udGV4dCk7CisgICAgICAgICAgICBjb25zdCBlbmRUaW1l
ID0gbmV3IERhdGUoJzIwMTctMDEtMTVUMTg6NTM6MDBaJyk7CisgICAgICAgICAgICBjb25zdCBs
YWJlbHMgPSBUaW1lU2VyaWVzQ2hhcnQuY29tcHV0ZVRpbWVHcmlkKG5ldyBEYXRlKCcyMDE2LTA3
LTExVDE4OjUzOjAwWicpLCBuZXcgRGF0ZSgnMjAxNy0wNy0yN1QwODoxNzo1M1onKSwgNyk7Cisg
ICAgICAgICAgICBleHBlY3QobGFiZWxzKS50by5iZS5hKCdhcnJheScpOworICAgICAgICAgICAg
ZXhwZWN0KGxhYmVscy5sZW5ndGgpLnRvLmJlKDYpOworICAgICAgICAgICAgY2hlY2tHcmlkSXRl
bShsYWJlbHNbMF0sICc5LzEnLCAnMjAxNi0wOS0wMVQwMDowMDowMFonKTsKKyAgICAgICAgICAg
IGNoZWNrR3JpZEl0ZW0obGFiZWxzWzFdLCAnMTEvMScsICcyMDE2LTExLTAxVDAwOjAwOjAwWicp
OworICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbMl0sICcxLzEnLCAnMjAxNy0wMS0w
MVQwMDowMDowMFonKTsKKyAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzNdLCAnMy8x
JywgJzIwMTctMDMtMDFUMDA6MDA6MDBaJyk7CisgICAgICAgICAgICBjaGVja0dyaWRJdGVtKGxh
YmVsc1s0XSwgJzUvMScsICcyMDE3LTA1LTAxVDAwOjAwOjAwWicpOworICAgICAgICAgICAgY2hl
Y2tHcmlkSXRlbShsYWJlbHNbNV0sICc3LzEnLCAnMjAxNy0wNy0wMVQwMDowMDowMFonKTsKKyAg
ICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBmb3VyIHRocmVlLW1vbnRo
cyBsYWJlbHMgZm9yIG9uZSB5ZWFyIGludGVydmFsIHdoZW4gbWF4TGFiZWxzIGlzIDUnLCBhc3lu
YyAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBUaW1lU2VyaWVzQ2hhcnQgPSBhd2FpdCBDaGFy
dFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKG5ldyBCcm93c2luZ0NvbnRleHQpOworICAgICAgICAg
ICAgY29uc3QgZW5kVGltZSA9IG5ldyBEYXRlKCcyMDE3LTAxLTE1VDE4OjUzOjAwWicpOworICAg
ICAgICAgICAgY29uc3QgbGFiZWxzID0gVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVUaW1lR3JpZChu
ZXcgRGF0ZSgnMjAxNi0wNy0xMVQxODo1MzowMFonKSwgbmV3IERhdGUoJzIwMTctMDctMjdUMDg6
MTc6NTNaJyksIDUpOworICAgICAgICAgICAgZXhwZWN0KGxhYmVscykudG8uYmUuYSgnYXJyYXkn
KTsKKyAgICAgICAgICAgIGV4cGVjdChsYWJlbHMubGVuZ3RoKS50by5iZSg0KTsKKyAgICAgICAg
ICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzBdLCAnMTAvMScsICcyMDE2LTEwLTAxVDAwOjAwOjAw
WicpOworICAgICAgICAgICAgY2hlY2tHcmlkSXRlbShsYWJlbHNbMV0sICcxLzEnLCAnMjAxNy0w
MS0wMVQwMDowMDowMFonKTsKKyAgICAgICAgICAgIGNoZWNrR3JpZEl0ZW0obGFiZWxzWzJdLCAn
NC8xJywgJzIwMTctMDQtMDFUMDA6MDA6MDBaJyk7CisgICAgICAgICAgICBjaGVja0dyaWRJdGVt
KGxhYmVsc1szXSwgJzcvMScsICcyMDE3LTA3LTAxVDAwOjAwOjAwWicpOwogICAgICAgICB9KTsK
ICAgICB9KTsKIAogICAgIGRlc2NyaWJlKCdjb21wdXRlVmFsdWVHcmlkJywgKCkgPT4gewogCi0g
ICAgICAgIGZ1bmN0aW9uIGNoZWNrVmFsdWVHcmlkKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICAg
ICAgZnVuY3Rpb24gY2hlY2tWYWx1ZUdyaWQoYWN0dWFsLCBleHBlY3RlZCkKKyAgICAgICAgewog
ICAgICAgICAgICAgZXhwZWN0KGFjdHVhbCkudG8uYmUuYSgnYXJyYXknKTsKICAgICAgICAgICAg
IGV4cGVjdChKU09OLnN0cmluZ2lmeShhY3R1YWwpKS50by5iZShKU09OLnN0cmluZ2lmeShleHBl
Y3RlZCkpOwogICAgICAgICB9CkBAIC0yODEsNTQgKzI2Miw0OSBAQCBkZXNjcmliZSgnVGltZVNl
cmllc0NoYXJ0JywgKCkgPT4gewogICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVy
ICogMTAwMDAwMDAwKSAvIDEwMDAwMDAwMDsKICAgICAgICAgfQogCi0gICAgICAgIGl0KCdzaG91
bGQgZ2VuZXJhdGUgWzAuNSwgMS4wLCAxLjUsIDIuMF0gZm9yIFswLjMsIDIuM10gd2hlbiBtYXhM
YWJlbHMgaXMgNScsICgpID0+IHsKKyAgICAgICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBbMC41LCAx
LjAsIDEuNSwgMi4wXSBmb3IgWzAuMywgMi4zXSB3aGVuIG1heExhYmVscyBpcyA1JywgYXN5bmMg
KCkgPT4gewogICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBCcm93c2luZ0NvbnRleHQ7
Ci0gICAgICAgICAgICByZXR1cm4gQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhjb250ZXh0
KS50aGVuKChUaW1lU2VyaWVzQ2hhcnQpID0+IHsKLSAgICAgICAgICAgICAgICBjb25zdCBNZXRy
aWMgPSBjb250ZXh0LnN5bWJvbHMuTWV0cmljOwotICAgICAgICAgICAgICAgIGNvbnN0IGdyaWQg
PSBUaW1lU2VyaWVzQ2hhcnQuY29tcHV0ZVZhbHVlR3JpZCgwLjMsIDIuMywgNSwgTWV0cmljLm1h
a2VGb3JtYXR0ZXIoJ3B0JywgMikpOwotICAgICAgICAgICAgICAgIGV4cGVjdChncmlkLm1hcCgo
aXRlbSkgPT4gYXBwcm94aW1hdGUoaXRlbS52YWx1ZSkpKS50by5lcWwoWzAuNSwgMS4wLCAxLjUs
IDIuMF0pOwotICAgICAgICAgICAgICAgIGV4cGVjdChncmlkLm1hcCgoaXRlbSkgPT4gaXRlbS5s
YWJlbCkpLnRvLmVxbChbJzAuNSBwdCcsICcxLjAgcHQnLCAnMS41IHB0JywgJzIuMCBwdCddKTsK
LSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgY29uc3QgVGltZVNlcmllc0NoYXJ0ID0gYXdh
aXQgQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhjb250ZXh0KTsKKyAgICAgICAgICAgIGNv
bnN0IE1ldHJpYyA9IGNvbnRleHQuc3ltYm9scy5NZXRyaWM7CisgICAgICAgICAgICBjb25zdCBn
cmlkID0gVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVWYWx1ZUdyaWQoMC4zLCAyLjMsIDUsIE1ldHJp
Yy5tYWtlRm9ybWF0dGVyKCdwdCcsIDIpKTsKKyAgICAgICAgICAgIGV4cGVjdChncmlkLm1hcCgo
aXRlbSkgPT4gYXBwcm94aW1hdGUoaXRlbS52YWx1ZSkpKS50by5lcWwoWzAuNSwgMS4wLCAxLjUs
IDIuMF0pOworICAgICAgICAgICAgZXhwZWN0KGdyaWQubWFwKChpdGVtKSA9PiBpdGVtLmxhYmVs
KSkudG8uZXFsKFsnMC41IHB0JywgJzEuMCBwdCcsICcxLjUgcHQnLCAnMi4wIHB0J10pOwogICAg
ICAgICB9KTsKIAotICAgICAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIFswLjQsIDAuNiwgMC44LCAx
LCAxLjIsIDEuNCwgMS42LCAxLjgsIDIsIDIuMl0gZm9yIFswLjMsIDIuM10gd2hlbiBtYXhMYWJl
bHMgaXMgMTAnLCAoKSA9PiB7CisgICAgICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgWzAuNCwgMC42
LCAwLjgsIDEsIDEuMiwgMS40LCAxLjYsIDEuOCwgMiwgMi4yXSBmb3IgWzAuMywgMi4zXSB3aGVu
IG1heExhYmVscyBpcyAxMCcsIGFzeW5jICgpID0+IHsKICAgICAgICAgICAgIGNvbnN0IGNvbnRl
eHQgPSBuZXcgQnJvd3NpbmdDb250ZXh0OwotICAgICAgICAgICAgcmV0dXJuIENoYXJ0VGVzdC5p
bXBvcnRDaGFydFNjcmlwdHMoY29udGV4dCkudGhlbigoVGltZVNlcmllc0NoYXJ0KSA9PiB7Ci0g
ICAgICAgICAgICAgICAgY29uc3QgTWV0cmljID0gY29udGV4dC5zeW1ib2xzLk1ldHJpYzsKLSAg
ICAgICAgICAgICAgICBjb25zdCBncmlkID0gVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVWYWx1ZUdy
aWQoMC4zLCAyLjMsIDEwLCBNZXRyaWMubWFrZUZvcm1hdHRlcigncHQnLCAyKSk7Ci0gICAgICAg
ICAgICAgICAgZXhwZWN0KGdyaWQubWFwKChpdGVtKSA9PiBhcHByb3hpbWF0ZShpdGVtLnZhbHVl
KSkpLnRvLmVxbChbMC40LCAwLjYsIDAuOCwgMSwgMS4yLCAxLjQsIDEuNiwgMS44LCAyLCAyLjJd
KTsKLSAgICAgICAgICAgICAgICBleHBlY3QoZ3JpZC5tYXAoKGl0ZW0pID0+IGl0ZW0ubGFiZWwp
KS50by5lcWwoWycwLjQgcHQnLCAnMC42IHB0JywgJzAuOCBwdCcsICcxLjAgcHQnLCAnMS4yIHB0
JywgJzEuNCBwdCcsICcxLjYgcHQnLCAnMS44IHB0JywgJzIuMCBwdCcsICcyLjIgcHQnXSk7Ci0g
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGNvbnN0IFRpbWVTZXJpZXNDaGFydCA9IGF3YWl0
IENoYXJ0VGVzdC5pbXBvcnRDaGFydFNjcmlwdHMoY29udGV4dCk7CisgICAgICAgICAgICBjb25z
dCBNZXRyaWMgPSBjb250ZXh0LnN5bWJvbHMuTWV0cmljOworICAgICAgICAgICAgY29uc3QgZ3Jp
ZCA9IFRpbWVTZXJpZXNDaGFydC5jb21wdXRlVmFsdWVHcmlkKDAuMywgMi4zLCAxMCwgTWV0cmlj
Lm1ha2VGb3JtYXR0ZXIoJ3B0JywgMikpOworICAgICAgICAgICAgZXhwZWN0KGdyaWQubWFwKChp
dGVtKSA9PiBhcHByb3hpbWF0ZShpdGVtLnZhbHVlKSkpLnRvLmVxbChbMC40LCAwLjYsIDAuOCwg
MSwgMS4yLCAxLjQsIDEuNiwgMS44LCAyLCAyLjJdKTsKKyAgICAgICAgICAgIGV4cGVjdChncmlk
Lm1hcCgoaXRlbSkgPT4gaXRlbS5sYWJlbCkpLnRvLmVxbChbJzAuNCBwdCcsICcwLjYgcHQnLCAn
MC44IHB0JywgJzEuMCBwdCcsICcxLjIgcHQnLCAnMS40IHB0JywgJzEuNiBwdCcsICcxLjggcHQn
LCAnMi4wIHB0JywgJzIuMiBwdCddKTsKICAgICAgICAgfSk7CiAKLSAgICAgICAgaXQoJ3Nob3Vs
ZCBnZW5lcmF0ZSBbMSwgMl0gZm9yIFswLjMsIDIuM10gd2hlbiBtYXhMYWJlbHMgaXMgMicsICgp
ID0+IHsKKyAgICAgICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBbMSwgMl0gZm9yIFswLjMsIDIuM10g
d2hlbiBtYXhMYWJlbHMgaXMgMicsIGFzeW5jICgpID0+IHsKICAgICAgICAgICAgIGNvbnN0IGNv
bnRleHQgPSBuZXcgQnJvd3NpbmdDb250ZXh0OwotICAgICAgICAgICAgcmV0dXJuIENoYXJ0VGVz
dC5pbXBvcnRDaGFydFNjcmlwdHMoY29udGV4dCkudGhlbigoVGltZVNlcmllc0NoYXJ0KSA9PiB7
Ci0gICAgICAgICAgICAgICAgY29uc3QgTWV0cmljID0gY29udGV4dC5zeW1ib2xzLk1ldHJpYzsK
LSAgICAgICAgICAgICAgICBjb25zdCBncmlkID0gVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVWYWx1
ZUdyaWQoMC4zLCAyLjMsIDIsIE1ldHJpYy5tYWtlRm9ybWF0dGVyKCdwdCcsIDIpKTsKLSAgICAg
ICAgICAgICAgICBleHBlY3QoZ3JpZC5tYXAoKGl0ZW0pID0+IGl0ZW0udmFsdWUpKS50by5lcWwo
WzEsIDJdKTsKLSAgICAgICAgICAgICAgICBleHBlY3QoZ3JpZC5tYXAoKGl0ZW0pID0+IGl0ZW0u
bGFiZWwpKS50by5lcWwoWycxLjAgcHQnLCAnMi4wIHB0J10pOwotICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICBjb25zdCBUaW1lU2VyaWVzQ2hhcnQgPSBhd2FpdCBDaGFydFRlc3QuaW1wb3J0
Q2hhcnRTY3JpcHRzKGNvbnRleHQpOworICAgICAgICAgICAgY29uc3QgTWV0cmljID0gY29udGV4
dC5zeW1ib2xzLk1ldHJpYzsKKyAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBUaW1lU2VyaWVzQ2hh
cnQuY29tcHV0ZVZhbHVlR3JpZCgwLjMsIDIuMywgMiwgTWV0cmljLm1ha2VGb3JtYXR0ZXIoJ3B0
JywgMikpOworICAgICAgICAgICAgZXhwZWN0KGdyaWQubWFwKChpdGVtKSA9PiBpdGVtLnZhbHVl
KSkudG8uZXFsKFsxLCAyXSk7CisgICAgICAgICAgICBleHBlY3QoZ3JpZC5tYXAoKGl0ZW0pID0+
IGl0ZW0ubGFiZWwpKS50by5lcWwoWycxLjAgcHQnLCAnMi4wIHB0J10pOwogICAgICAgICB9KTsK
IAotICAgICAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIFswLjQsIDAuNiwgMC44LCAxLjAsIDEuMl0g
Zm9yIFswLjMsIDEuM10gd2hlbiBtYXhMYWJlbHMgaXMgNScsICgpID0+IHsKKyAgICAgICAgaXQo
J3Nob3VsZCBnZW5lcmF0ZSBbMC40LCAwLjYsIDAuOCwgMS4wLCAxLjJdIGZvciBbMC4zLCAxLjNd
IHdoZW4gbWF4TGFiZWxzIGlzIDUnLCBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBj
b250ZXh0ID0gbmV3IEJyb3dzaW5nQ29udGV4dDsKLSAgICAgICAgICAgIHJldHVybiBDaGFydFRl
c3QuaW1wb3J0Q2hhcnRTY3JpcHRzKGNvbnRleHQpLnRoZW4oKFRpbWVTZXJpZXNDaGFydCkgPT4g
ewotICAgICAgICAgICAgICAgIGNvbnN0IE1ldHJpYyA9IGNvbnRleHQuc3ltYm9scy5NZXRyaWM7
Ci0gICAgICAgICAgICAgICAgY29uc3QgZ3JpZCA9IFRpbWVTZXJpZXNDaGFydC5jb21wdXRlVmFs
dWVHcmlkKDAuMywgMS4zLCA1LCBNZXRyaWMubWFrZUZvcm1hdHRlcigncHQnLCAyKSk7Ci0gICAg
ICAgICAgICAgICAgZXhwZWN0KGdyaWQubWFwKChpdGVtKSA9PiBhcHByb3hpbWF0ZShpdGVtLnZh
bHVlKSkpLnRvLmVxbChbMC40LCAwLjYsIDAuOCwgMS4wLCAxLjJdKTsKLSAgICAgICAgICAgICAg
ICBleHBlY3QoZ3JpZC5tYXAoKGl0ZW0pID0+IGl0ZW0ubGFiZWwpKS50by5lcWwoWycwLjQgcHQn
LCAnMC42IHB0JywgJzAuOCBwdCcsICcxLjAgcHQnLCAnMS4yIHB0J10pOwotICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICBjb25zdCBUaW1lU2VyaWVzQ2hhcnQgPSBhd2FpdCBDaGFydFRlc3Qu
aW1wb3J0Q2hhcnRTY3JpcHRzKGNvbnRleHQpOworICAgICAgICAgICAgY29uc3QgTWV0cmljID0g
Y29udGV4dC5zeW1ib2xzLk1ldHJpYzsKKyAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBUaW1lU2Vy
aWVzQ2hhcnQuY29tcHV0ZVZhbHVlR3JpZCgwLjMsIDEuMywgNSwgTWV0cmljLm1ha2VGb3JtYXR0
ZXIoJ3B0JywgMikpOworICAgICAgICAgICAgZXhwZWN0KGdyaWQubWFwKChpdGVtKSA9PiBhcHBy
b3hpbWF0ZShpdGVtLnZhbHVlKSkpLnRvLmVxbChbMC40LCAwLjYsIDAuOCwgMS4wLCAxLjJdKTsK
KyAgICAgICAgICAgIGV4cGVjdChncmlkLm1hcCgoaXRlbSkgPT4gaXRlbS5sYWJlbCkpLnRvLmVx
bChbJzAuNCBwdCcsICcwLjYgcHQnLCAnMC44IHB0JywgJzEuMCBwdCcsICcxLjIgcHQnXSk7CiAg
ICAgICAgIH0pOwogCi0gICAgICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgWzAuMiwgMC40LCAwLjYs
IDAuOCwgMSwgMS4yXSBmb3IgWzAuMiwgMS4zXSB3aGVuIG1heExhYmVscyBpcyAxMCcsICgpID0+
IHsKKyAgICAgICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBbMC4yLCAwLjQsIDAuNiwgMC44LCAxLCAx
LjJdIGZvciBbMC4yLCAxLjNdIHdoZW4gbWF4TGFiZWxzIGlzIDEwJywgYXN5bmMgKCkgPT4gewog
ICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBCcm93c2luZ0NvbnRleHQ7Ci0gICAgICAg
ICAgICByZXR1cm4gQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhjb250ZXh0KS50aGVuKChU
aW1lU2VyaWVzQ2hhcnQpID0+IHsKLSAgICAgICAgICAgICAgICBjb25zdCBNZXRyaWMgPSBjb250
ZXh0LnN5bWJvbHMuTWV0cmljOwotICAgICAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBUaW1lU2Vy
aWVzQ2hhcnQuY29tcHV0ZVZhbHVlR3JpZCgwLjIsIDEuMywgMTAsIE1ldHJpYy5tYWtlRm9ybWF0
dGVyKCdwdCcsIDIpKTsKLSAgICAgICAgICAgICAgICBleHBlY3QoZ3JpZC5tYXAoKGl0ZW0pID0+
IGFwcHJveGltYXRlKGl0ZW0udmFsdWUpKSkudG8uZXFsKFswLjIsIDAuNCwgMC42LCAwLjgsIDEs
IDEuMl0pOwotICAgICAgICAgICAgICAgIGV4cGVjdChncmlkLm1hcCgoaXRlbSkgPT4gaXRlbS5s
YWJlbCkpLnRvLmVxbChbJzAuMiBwdCcsICcwLjQgcHQnLCAnMC42IHB0JywgJzAuOCBwdCcsICcx
LjAgcHQnLCAnMS4yIHB0J10pOwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBjb25zdCBU
aW1lU2VyaWVzQ2hhcnQgPSBhd2FpdCBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKGNvbnRl
eHQpOworICAgICAgICAgICAgY29uc3QgTWV0cmljID0gY29udGV4dC5zeW1ib2xzLk1ldHJpYzsK
KyAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBUaW1lU2VyaWVzQ2hhcnQuY29tcHV0ZVZhbHVlR3Jp
ZCgwLjIsIDEuMywgMTAsIE1ldHJpYy5tYWtlRm9ybWF0dGVyKCdwdCcsIDIpKTsKKyAgICAgICAg
ICAgIGV4cGVjdChncmlkLm1hcCgoaXRlbSkgPT4gYXBwcm94aW1hdGUoaXRlbS52YWx1ZSkpKS50
by5lcWwoWzAuMiwgMC40LCAwLjYsIDAuOCwgMSwgMS4yXSk7CisgICAgICAgICAgICBleHBlY3Qo
Z3JpZC5tYXAoKGl0ZW0pID0+IGl0ZW0ubGFiZWwpKS50by5lcWwoWycwLjIgcHQnLCAnMC40IHB0
JywgJzAuNiBwdCcsICcwLjggcHQnLCAnMS4wIHB0JywgJzEuMiBwdCddKTsKICAgICAgICAgfSk7
CiAKICAgICAgICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBbMC41LCAxLjBdIGZvciBbMC4zLCAxLjNd
IHdoZW4gbWF4TGFiZWxzIGlzIDQnLCAoKSA9PiB7CkBAIC0zNDEsMjMyICszMTcsMjIwIEBAIGRl
c2NyaWJlKCdUaW1lU2VyaWVzQ2hhcnQnLCAoKSA9PiB7CiAgICAgICAgICAgICB9KTsKICAgICAg
ICAgfSk7CiAKLSAgICAgICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBbMTAsIDIwLCAzMF0gZm9yIFs0
LCAzNV0gd2hlbiBtYXhMYWJlbHMgaXMgNCcsICgpID0+IHsKKyAgICAgICAgaXQoJ3Nob3VsZCBn
ZW5lcmF0ZSBbMTAsIDIwLCAzMF0gZm9yIFs0LCAzNV0gd2hlbiBtYXhMYWJlbHMgaXMgNCcsIGFz
eW5jICgpID0+IHsKICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQnJvd3NpbmdDb250
ZXh0OwotICAgICAgICAgICAgcmV0dXJuIENoYXJ0VGVzdC5pbXBvcnRDaGFydFNjcmlwdHMoY29u
dGV4dCkudGhlbigoVGltZVNlcmllc0NoYXJ0KSA9PiB7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
TWV0cmljID0gY29udGV4dC5zeW1ib2xzLk1ldHJpYzsKLSAgICAgICAgICAgICAgICBjb25zdCBn
cmlkID0gVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVWYWx1ZUdyaWQoNCwgMzUsIDQsIE1ldHJpYy5t
YWtlRm9ybWF0dGVyKCdwdCcsIDIpKTsKLSAgICAgICAgICAgICAgICBleHBlY3QoZ3JpZC5tYXAo
KGl0ZW0pID0+IGl0ZW0udmFsdWUpKS50by5lcWwoWzEwLCAyMCwgMzBdKTsKLSAgICAgICAgICAg
ICAgICBleHBlY3QoZ3JpZC5tYXAoKGl0ZW0pID0+IGl0ZW0ubGFiZWwpKS50by5lcWwoWycxMCBw
dCcsICcyMCBwdCcsICczMCBwdCddKTsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgY29u
c3QgVGltZVNlcmllc0NoYXJ0ID0gYXdhaXQgQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhj
b250ZXh0KTsKKyAgICAgICAgICAgIGNvbnN0IE1ldHJpYyA9IGNvbnRleHQuc3ltYm9scy5NZXRy
aWM7CisgICAgICAgICAgICBjb25zdCBncmlkID0gVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVWYWx1
ZUdyaWQoNCwgMzUsIDQsIE1ldHJpYy5tYWtlRm9ybWF0dGVyKCdwdCcsIDIpKTsKKyAgICAgICAg
ICAgIGV4cGVjdChncmlkLm1hcCgoaXRlbSkgPT4gaXRlbS52YWx1ZSkpLnRvLmVxbChbMTAsIDIw
LCAzMF0pOworICAgICAgICAgICAgZXhwZWN0KGdyaWQubWFwKChpdGVtKSA9PiBpdGVtLmxhYmVs
KSkudG8uZXFsKFsnMTAgcHQnLCAnMjAgcHQnLCAnMzAgcHQnXSk7CiAgICAgICAgIH0pOwogCi0g
ICAgICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgWzEwLCAyMCwgMzBdIGZvciBbNCwgMzVdIHdoZW4g
bWF4TGFiZWxzIGlzIDYnLCAoKSA9PiB7CisgICAgICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgWzEw
LCAyMCwgMzBdIGZvciBbNCwgMzVdIHdoZW4gbWF4TGFiZWxzIGlzIDYnLCBhc3luYyAoKSA9PiB7
CiAgICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IEJyb3dzaW5nQ29udGV4dDsKLSAgICAg
ICAgICAgIHJldHVybiBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKGNvbnRleHQpLnRoZW4o
KFRpbWVTZXJpZXNDaGFydCkgPT4gewotICAgICAgICAgICAgICAgIGNvbnN0IE1ldHJpYyA9IGNv
bnRleHQuc3ltYm9scy5NZXRyaWM7Ci0gICAgICAgICAgICAgICAgY29uc3QgZ3JpZCA9IFRpbWVT
ZXJpZXNDaGFydC5jb21wdXRlVmFsdWVHcmlkKDQsIDM1LCA2LCBNZXRyaWMubWFrZUZvcm1hdHRl
cigncHQnLCAyKSk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGdyaWQubWFwKChpdGVtKSA9PiBp
dGVtLnZhbHVlKSkudG8uZXFsKFsxMCwgMjAsIDMwXSk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0
KGdyaWQubWFwKChpdGVtKSA9PiBpdGVtLmxhYmVsKSkudG8uZXFsKFsnMTAgcHQnLCAnMjAgcHQn
LCAnMzAgcHQnXSk7Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGNvbnN0IFRpbWVTZXJp
ZXNDaGFydCA9IGF3YWl0IENoYXJ0VGVzdC5pbXBvcnRDaGFydFNjcmlwdHMoY29udGV4dCk7Cisg
ICAgICAgICAgICBjb25zdCBNZXRyaWMgPSBjb250ZXh0LnN5bWJvbHMuTWV0cmljOworICAgICAg
ICAgICAgY29uc3QgZ3JpZCA9IFRpbWVTZXJpZXNDaGFydC5jb21wdXRlVmFsdWVHcmlkKDQsIDM1
LCA2LCBNZXRyaWMubWFrZUZvcm1hdHRlcigncHQnLCAyKSk7CisgICAgICAgICAgICBleHBlY3Qo
Z3JpZC5tYXAoKGl0ZW0pID0+IGl0ZW0udmFsdWUpKS50by5lcWwoWzEwLCAyMCwgMzBdKTsKKyAg
ICAgICAgICAgIGV4cGVjdChncmlkLm1hcCgoaXRlbSkgPT4gaXRlbS5sYWJlbCkpLnRvLmVxbChb
JzEwIHB0JywgJzIwIHB0JywgJzMwIHB0J10pOwogICAgICAgICB9KTsKIAotICAgICAgICBpdCgn
c2hvdWxkIGdlbmVyYXRlIFsxMCwgMTUsIDIwLCAyNSwgMzAsIDM1XSBmb3IgWzYsIDM1XSB3aGVu
IG1heExhYmVscyBpcyA2JywgKCkgPT4geworICAgICAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIFsx
MCwgMTUsIDIwLCAyNSwgMzAsIDM1XSBmb3IgWzYsIDM1XSB3aGVuIG1heExhYmVscyBpcyA2Jywg
YXN5bmMgKCkgPT4gewogICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBCcm93c2luZ0Nv
bnRleHQ7Ci0gICAgICAgICAgICByZXR1cm4gQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhj
b250ZXh0KS50aGVuKChUaW1lU2VyaWVzQ2hhcnQpID0+IHsKLSAgICAgICAgICAgICAgICBjb25z
dCBNZXRyaWMgPSBjb250ZXh0LnN5bWJvbHMuTWV0cmljOwotICAgICAgICAgICAgICAgIGNvbnN0
IGdyaWQgPSBUaW1lU2VyaWVzQ2hhcnQuY29tcHV0ZVZhbHVlR3JpZCg2LCAzNSwgNiwgTWV0cmlj
Lm1ha2VGb3JtYXR0ZXIoJ3B0JywgMikpOwotICAgICAgICAgICAgICAgIGV4cGVjdChncmlkLm1h
cCgoaXRlbSkgPT4gaXRlbS52YWx1ZSkpLnRvLmVxbChbMTAsIDE1LCAyMCwgMjUsIDMwLCAzNV0p
OwotICAgICAgICAgICAgICAgIGV4cGVjdChncmlkLm1hcCgoaXRlbSkgPT4gaXRlbS5sYWJlbCkp
LnRvLmVxbChbJzEwIHB0JywgJzE1IHB0JywgJzIwIHB0JywgJzI1IHB0JywgJzMwIHB0JywgJzM1
IHB0J10pOwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBjb25zdCBUaW1lU2VyaWVzQ2hh
cnQgPSBhd2FpdCBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKGNvbnRleHQpOworICAgICAg
ICAgICAgY29uc3QgTWV0cmljID0gY29udGV4dC5zeW1ib2xzLk1ldHJpYzsKKyAgICAgICAgICAg
IGNvbnN0IGdyaWQgPSBUaW1lU2VyaWVzQ2hhcnQuY29tcHV0ZVZhbHVlR3JpZCg2LCAzNSwgNiwg
TWV0cmljLm1ha2VGb3JtYXR0ZXIoJ3B0JywgMikpOworICAgICAgICAgICAgZXhwZWN0KGdyaWQu
bWFwKChpdGVtKSA9PiBpdGVtLnZhbHVlKSkudG8uZXFsKFsxMCwgMTUsIDIwLCAyNSwgMzAsIDM1
XSk7CisgICAgICAgICAgICBleHBlY3QoZ3JpZC5tYXAoKGl0ZW0pID0+IGl0ZW0ubGFiZWwpKS50
by5lcWwoWycxMCBwdCcsICcxNSBwdCcsICcyMCBwdCcsICcyNSBwdCcsICczMCBwdCcsICczNSBw
dCddKTsKICAgICAgICAgfSk7CiAKLSAgICAgICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBbMTEwLCAx
MTUsIDEyMCwgMTI1LCAxMzBdIGZvciBbMTA3LCAxMzRdIHdoZW4gbWF4TGFiZWxzIGlzIDYnLCAo
KSA9PiB7CisgICAgICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgWzExMCwgMTE1LCAxMjAsIDEyNSwg
MTMwXSBmb3IgWzEwNywgMTM0XSB3aGVuIG1heExhYmVscyBpcyA2JywgYXN5bmMgKCkgPT4gewog
ICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBCcm93c2luZ0NvbnRleHQ7Ci0gICAgICAg
ICAgICByZXR1cm4gQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhjb250ZXh0KS50aGVuKChU
aW1lU2VyaWVzQ2hhcnQpID0+IHsKLSAgICAgICAgICAgICAgICBjb25zdCBNZXRyaWMgPSBjb250
ZXh0LnN5bWJvbHMuTWV0cmljOwotICAgICAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBUaW1lU2Vy
aWVzQ2hhcnQuY29tcHV0ZVZhbHVlR3JpZCgxMDcsIDEzNCwgNiwgTWV0cmljLm1ha2VGb3JtYXR0
ZXIoJ3B0JywgMykpOwotICAgICAgICAgICAgICAgIGV4cGVjdChncmlkLm1hcCgoaXRlbSkgPT4g
aXRlbS52YWx1ZSkpLnRvLmVxbChbMTEwLCAxMTUsIDEyMCwgMTI1LCAxMzBdKTsKLSAgICAgICAg
ICAgICAgICBleHBlY3QoZ3JpZC5tYXAoKGl0ZW0pID0+IGl0ZW0ubGFiZWwpKS50by5lcWwoWycx
MTAgcHQnLCAnMTE1IHB0JywgJzEyMCBwdCcsICcxMjUgcHQnLCAnMTMwIHB0J10pOwotICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICBjb25zdCBUaW1lU2VyaWVzQ2hhcnQgPSBhd2FpdCBDaGFy
dFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKGNvbnRleHQpOworICAgICAgICAgICAgY29uc3QgTWV0
cmljID0gY29udGV4dC5zeW1ib2xzLk1ldHJpYzsKKyAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBU
aW1lU2VyaWVzQ2hhcnQuY29tcHV0ZVZhbHVlR3JpZCgxMDcsIDEzNCwgNiwgTWV0cmljLm1ha2VG
b3JtYXR0ZXIoJ3B0JywgMykpOworICAgICAgICAgICAgZXhwZWN0KGdyaWQubWFwKChpdGVtKSA9
PiBpdGVtLnZhbHVlKSkudG8uZXFsKFsxMTAsIDExNSwgMTIwLCAxMjUsIDEzMF0pOworICAgICAg
ICAgICAgZXhwZWN0KGdyaWQubWFwKChpdGVtKSA9PiBpdGVtLmxhYmVsKSkudG8uZXFsKFsnMTEw
IHB0JywgJzExNSBwdCcsICcxMjAgcHQnLCAnMTI1IHB0JywgJzEzMCBwdCddKTsKICAgICAgICAg
fSk7CiAKLSAgICAgICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBbNWU3LCAxMGU3XSBmb3IgWzFlNywg
MWU4XSB3aGVuIG1heExhYmVscyBpcyA0JywgKCkgPT4geworICAgICAgICBpdCgnc2hvdWxkIGdl
bmVyYXRlIFs1ZTcsIDEwZTddIGZvciBbMWU3LCAxZThdIHdoZW4gbWF4TGFiZWxzIGlzIDQnLCBh
c3luYyAoKSA9PiB7CiAgICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IEJyb3dzaW5nQ29u
dGV4dDsKLSAgICAgICAgICAgIHJldHVybiBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKGNv
bnRleHQpLnRoZW4oKFRpbWVTZXJpZXNDaGFydCkgPT4gewotICAgICAgICAgICAgICAgIGNvbnN0
IE1ldHJpYyA9IGNvbnRleHQuc3ltYm9scy5NZXRyaWM7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
Z3JpZCA9IFRpbWVTZXJpZXNDaGFydC5jb21wdXRlVmFsdWVHcmlkKDFlNywgMWU4LCA0LCBNZXRy
aWMubWFrZUZvcm1hdHRlcigncHQnLCAzKSk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGdyaWQu
bWFwKChpdGVtKSA9PiBpdGVtLnZhbHVlKSkudG8uZXFsKFs1ZTcsIDEwZTddKTsKLSAgICAgICAg
ICAgICAgICBleHBlY3QoZ3JpZC5tYXAoKGl0ZW0pID0+IGl0ZW0ubGFiZWwpKS50by5lcWwoWyc1
MC4wIE1wdCcsICcxMDAgTXB0J10pOwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBjb25z
dCBUaW1lU2VyaWVzQ2hhcnQgPSBhd2FpdCBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKGNv
bnRleHQpOworICAgICAgICAgICAgY29uc3QgTWV0cmljID0gY29udGV4dC5zeW1ib2xzLk1ldHJp
YzsKKyAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBUaW1lU2VyaWVzQ2hhcnQuY29tcHV0ZVZhbHVl
R3JpZCgxZTcsIDFlOCwgNCwgTWV0cmljLm1ha2VGb3JtYXR0ZXIoJ3B0JywgMykpOworICAgICAg
ICAgICAgZXhwZWN0KGdyaWQubWFwKChpdGVtKSA9PiBpdGVtLnZhbHVlKSkudG8uZXFsKFs1ZTcs
IDEwZTddKTsKKyAgICAgICAgICAgIGV4cGVjdChncmlkLm1hcCgoaXRlbSkgPT4gaXRlbS5sYWJl
bCkpLnRvLmVxbChbJzUwLjAgTXB0JywgJzEwMCBNcHQnXSk7CiAgICAgICAgIH0pOwogCi0gICAg
ICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgWzJlNywgNGU3LCA2ZTcsIDhlNywgMTBlN10gZm9yIFsx
ZTcsIDFlOF0gd2hlbiBtYXhMYWJlbHMgaXMgNScsICgpID0+IHsKKyAgICAgICAgaXQoJ3Nob3Vs
ZCBnZW5lcmF0ZSBbMmU3LCA0ZTcsIDZlNywgOGU3LCAxMGU3XSBmb3IgWzFlNywgMWU4XSB3aGVu
IG1heExhYmVscyBpcyA1JywgYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgY29uc3QgY29udGV4
dCA9IG5ldyBCcm93c2luZ0NvbnRleHQ7Ci0gICAgICAgICAgICByZXR1cm4gQ2hhcnRUZXN0Lmlt
cG9ydENoYXJ0U2NyaXB0cyhjb250ZXh0KS50aGVuKChUaW1lU2VyaWVzQ2hhcnQpID0+IHsKLSAg
ICAgICAgICAgICAgICBjb25zdCBNZXRyaWMgPSBjb250ZXh0LnN5bWJvbHMuTWV0cmljOwotICAg
ICAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBUaW1lU2VyaWVzQ2hhcnQuY29tcHV0ZVZhbHVlR3Jp
ZCgxZTcsIDFlOCwgNSwgTWV0cmljLm1ha2VGb3JtYXR0ZXIoJ3B0JywgMykpOwotICAgICAgICAg
ICAgICAgIGV4cGVjdChncmlkLm1hcCgoaXRlbSkgPT4gaXRlbS52YWx1ZSkpLnRvLmVxbChbMmU3
LCA0ZTcsIDZlNywgOGU3LCAxMGU3XSk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGdyaWQubWFw
KChpdGVtKSA9PiBpdGVtLmxhYmVsKSkudG8uZXFsKFsnMjAuMCBNcHQnLCAnNDAuMCBNcHQnLCAn
NjAuMCBNcHQnLCAnODAuMCBNcHQnLCAnMTAwIE1wdCddKTsKLSAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgY29uc3QgVGltZVNlcmllc0NoYXJ0ID0gYXdhaXQgQ2hhcnRUZXN0LmltcG9ydENo
YXJ0U2NyaXB0cyhjb250ZXh0KTsKKyAgICAgICAgICAgIGNvbnN0IE1ldHJpYyA9IGNvbnRleHQu
c3ltYm9scy5NZXRyaWM7CisgICAgICAgICAgICBjb25zdCBncmlkID0gVGltZVNlcmllc0NoYXJ0
LmNvbXB1dGVWYWx1ZUdyaWQoMWU3LCAxZTgsIDUsIE1ldHJpYy5tYWtlRm9ybWF0dGVyKCdwdCcs
IDMpKTsKKyAgICAgICAgICAgIGV4cGVjdChncmlkLm1hcCgoaXRlbSkgPT4gaXRlbS52YWx1ZSkp
LnRvLmVxbChbMmU3LCA0ZTcsIDZlNywgOGU3LCAxMGU3XSk7CisgICAgICAgICAgICBleHBlY3Qo
Z3JpZC5tYXAoKGl0ZW0pID0+IGl0ZW0ubGFiZWwpKS50by5lcWwoWycyMC4wIE1wdCcsICc0MC4w
IE1wdCcsICc2MC4wIE1wdCcsICc4MC4wIE1wdCcsICcxMDAgTXB0J10pOwogICAgICAgICB9KTsK
IAotICAgICAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIFstMS41LCAtMS4wLCAtMC41LCAwLjAsIDAu
NV0gZm9yIFstMS44LCAwLjddIHdoZW4gbWF4TGFiZWxzIGlzIDUnLCAoKSA9PiB7CisgICAgICAg
IGl0KCdzaG91bGQgZ2VuZXJhdGUgWy0xLjUsIC0xLjAsIC0wLjUsIDAuMCwgMC41XSBmb3IgWy0x
LjgsIDAuN10gd2hlbiBtYXhMYWJlbHMgaXMgNScsIGFzeW5jICgpID0+IHsKICAgICAgICAgICAg
IGNvbnN0IGNvbnRleHQgPSBuZXcgQnJvd3NpbmdDb250ZXh0OwotICAgICAgICAgICAgcmV0dXJu
IENoYXJ0VGVzdC5pbXBvcnRDaGFydFNjcmlwdHMoY29udGV4dCkudGhlbigoVGltZVNlcmllc0No
YXJ0KSA9PiB7Ci0gICAgICAgICAgICAgICAgY29uc3QgTWV0cmljID0gY29udGV4dC5zeW1ib2xz
Lk1ldHJpYzsKLSAgICAgICAgICAgICAgICBjb25zdCBncmlkID0gVGltZVNlcmllc0NoYXJ0LmNv
bXB1dGVWYWx1ZUdyaWQoLTEuOCwgMC43LCA1LCBNZXRyaWMubWFrZUZvcm1hdHRlcigncHQnLCAy
KSk7Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGdyaWQubWFwKChpdGVtKSA9PiBhcHByb3hpbWF0
ZShpdGVtLnZhbHVlKSkpLnRvLmVxbChbLTEuNSwgLTEuMCwgLTAuNSwgMC4wLCAwLjVdKTsKLSAg
ICAgICAgICAgICAgICBleHBlY3QoZ3JpZC5tYXAoKGl0ZW0pID0+IGl0ZW0ubGFiZWwpKS50by5l
cWwoWyctMS41IHB0JywgJy0xLjAgcHQnLCAnLTAuNSBwdCcsICcwLjAgcHQnLCAnMC41IHB0J10p
OwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBjb25zdCBUaW1lU2VyaWVzQ2hhcnQgPSBh
d2FpdCBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKGNvbnRleHQpOworICAgICAgICAgICAg
Y29uc3QgTWV0cmljID0gY29udGV4dC5zeW1ib2xzLk1ldHJpYzsKKyAgICAgICAgICAgIGNvbnN0
IGdyaWQgPSBUaW1lU2VyaWVzQ2hhcnQuY29tcHV0ZVZhbHVlR3JpZCgtMS44LCAwLjcsIDUsIE1l
dHJpYy5tYWtlRm9ybWF0dGVyKCdwdCcsIDIpKTsKKyAgICAgICAgICAgIGV4cGVjdChncmlkLm1h
cCgoaXRlbSkgPT4gYXBwcm94aW1hdGUoaXRlbS52YWx1ZSkpKS50by5lcWwoWy0xLjUsIC0xLjAs
IC0wLjUsIDAuMCwgMC41XSk7CisgICAgICAgICAgICBleHBlY3QoZ3JpZC5tYXAoKGl0ZW0pID0+
IGl0ZW0ubGFiZWwpKS50by5lcWwoWyctMS41IHB0JywgJy0xLjAgcHQnLCAnLTAuNSBwdCcsICcw
LjAgcHQnLCAnMC41IHB0J10pOwogICAgICAgICB9KTsKIAotICAgICAgICBpdCgnc2hvdWxkIGdl
bmVyYXRlIFsyMDBtcywgNDAwbXMsIDYwMG1zLCA4MDBtcywgMS4wMHMsIDEuMjBzXSBmb3IgWzAu
MiwgMS4zXSB3aGVuIG1heExhYmVscyBpcyAxMCBhbmQgdW5pdCBpcyBzZWNvbmRzJywgKCkgPT4g
eworICAgICAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIFsyMDBtcywgNDAwbXMsIDYwMG1zLCA4MDBt
cywgMS4wMHMsIDEuMjBzXSBmb3IgWzAuMiwgMS4zXSB3aGVuIG1heExhYmVscyBpcyAxMCBhbmQg
dW5pdCBpcyBzZWNvbmRzJywgYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgY29uc3QgY29udGV4
dCA9IG5ldyBCcm93c2luZ0NvbnRleHQ7Ci0gICAgICAgICAgICByZXR1cm4gQ2hhcnRUZXN0Lmlt
cG9ydENoYXJ0U2NyaXB0cyhjb250ZXh0KS50aGVuKChUaW1lU2VyaWVzQ2hhcnQpID0+IHsKLSAg
ICAgICAgICAgICAgICBjb25zdCBNZXRyaWMgPSBjb250ZXh0LnN5bWJvbHMuTWV0cmljOwotICAg
ICAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBUaW1lU2VyaWVzQ2hhcnQuY29tcHV0ZVZhbHVlR3Jp
ZCgwLjIsIDEuMywgMTAsIE1ldHJpYy5tYWtlRm9ybWF0dGVyKCdzJywgMykpOwotICAgICAgICAg
ICAgICAgIGV4cGVjdChncmlkLm1hcCgoaXRlbSkgPT4gYXBwcm94aW1hdGUoaXRlbS52YWx1ZSkp
KS50by5lcWwoWzAuMiwgMC40LCAwLjYsIDAuOCwgMSwgMS4yXSk7Ci0gICAgICAgICAgICAgICAg
ZXhwZWN0KGdyaWQubWFwKChpdGVtKSA9PiBpdGVtLmxhYmVsKSkudG8uZXFsKFsnMjAwIG1zJywg
JzQwMCBtcycsICc2MDAgbXMnLCAnODAwIG1zJywgJzEuMDAgcycsICcxLjIwIHMnXSk7Ci0gICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIGNvbnN0IFRpbWVTZXJpZXNDaGFydCA9IGF3YWl0IENo
YXJ0VGVzdC5pbXBvcnRDaGFydFNjcmlwdHMoY29udGV4dCk7CisgICAgICAgICAgICBjb25zdCBN
ZXRyaWMgPSBjb250ZXh0LnN5bWJvbHMuTWV0cmljOworICAgICAgICAgICAgY29uc3QgZ3JpZCA9
IFRpbWVTZXJpZXNDaGFydC5jb21wdXRlVmFsdWVHcmlkKDAuMiwgMS4zLCAxMCwgTWV0cmljLm1h
a2VGb3JtYXR0ZXIoJ3MnLCAzKSk7CisgICAgICAgICAgICBleHBlY3QoZ3JpZC5tYXAoKGl0ZW0p
ID0+IGFwcHJveGltYXRlKGl0ZW0udmFsdWUpKSkudG8uZXFsKFswLjIsIDAuNCwgMC42LCAwLjgs
IDEsIDEuMl0pOworICAgICAgICAgICAgZXhwZWN0KGdyaWQubWFwKChpdGVtKSA9PiBpdGVtLmxh
YmVsKSkudG8uZXFsKFsnMjAwIG1zJywgJzQwMCBtcycsICc2MDAgbXMnLCAnODAwIG1zJywgJzEu
MDAgcycsICcxLjIwIHMnXSk7CiAgICAgICAgIH0pOwogCi0gICAgICAgIGl0KCdzaG91bGQgZ2Vu
ZXJhdGUgWzIuMEdCLCA0LjBHQiwgNi4wR0JdIGZvciBbMS4yR0IsIDcuMkdCXSB3aGVuIG1heExh
YmVscyBpcyA0IGFuZCB1bml0IGlzIGJ5dGVzJywgKCkgPT4geworICAgICAgICBpdCgnc2hvdWxk
IGdlbmVyYXRlIFsyLjBHQiwgNC4wR0IsIDYuMEdCXSBmb3IgWzEuMkdCLCA3LjJHQl0gd2hlbiBt
YXhMYWJlbHMgaXMgNCBhbmQgdW5pdCBpcyBieXRlcycsIGFzeW5jICgpID0+IHsKICAgICAgICAg
ICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQnJvd3NpbmdDb250ZXh0OwotICAgICAgICAgICAgcmV0
dXJuIENoYXJ0VGVzdC5pbXBvcnRDaGFydFNjcmlwdHMoY29udGV4dCkudGhlbigoVGltZVNlcmll
c0NoYXJ0KSA9PiB7Ci0gICAgICAgICAgICAgICAgY29uc3QgTWV0cmljID0gY29udGV4dC5zeW1i
b2xzLk1ldHJpYzsKLSAgICAgICAgICAgICAgICBjb25zdCBnaWdhYnl0ZXMgPSBNYXRoLnBvdygx
MDI0LCAzKTsKLSAgICAgICAgICAgICAgICBjb25zdCBncmlkID0gVGltZVNlcmllc0NoYXJ0LmNv
bXB1dGVWYWx1ZUdyaWQoMS4yICogZ2lnYWJ5dGVzLCA3LjIgKiBnaWdhYnl0ZXMsIDQsIE1ldHJp
Yy5tYWtlRm9ybWF0dGVyKCdCJywgMikpOwotICAgICAgICAgICAgICAgIGV4cGVjdChncmlkLm1h
cCgoaXRlbSkgPT4gYXBwcm94aW1hdGUoaXRlbS52YWx1ZSkpKS50by5lcWwoWzIgKiBnaWdhYnl0
ZXMsIDQgKiBnaWdhYnl0ZXMsIDYgKiBnaWdhYnl0ZXNdKTsKLSAgICAgICAgICAgICAgICBleHBl
Y3QoZ3JpZC5tYXAoKGl0ZW0pID0+IGl0ZW0ubGFiZWwpKS50by5lcWwoWycyLjAgR0InLCAnNC4w
IEdCJywgJzYuMCBHQiddKTsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgY29uc3QgVGlt
ZVNlcmllc0NoYXJ0ID0gYXdhaXQgQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhjb250ZXh0
KTsKKyAgICAgICAgICAgIGNvbnN0IE1ldHJpYyA9IGNvbnRleHQuc3ltYm9scy5NZXRyaWM7Cisg
ICAgICAgICAgICBjb25zdCBnaWdhYnl0ZXMgPSBNYXRoLnBvdygxMDI0LCAzKTsKKyAgICAgICAg
ICAgIGNvbnN0IGdyaWQgPSBUaW1lU2VyaWVzQ2hhcnQuY29tcHV0ZVZhbHVlR3JpZCgxLjIgKiBn
aWdhYnl0ZXMsIDcuMiAqIGdpZ2FieXRlcywgNCwgTWV0cmljLm1ha2VGb3JtYXR0ZXIoJ0InLCAy
KSk7CisgICAgICAgICAgICBleHBlY3QoZ3JpZC5tYXAoKGl0ZW0pID0+IGFwcHJveGltYXRlKGl0
ZW0udmFsdWUpKSkudG8uZXFsKFsyICogZ2lnYWJ5dGVzLCA0ICogZ2lnYWJ5dGVzLCA2ICogZ2ln
YWJ5dGVzXSk7CisgICAgICAgICAgICBleHBlY3QoZ3JpZC5tYXAoKGl0ZW0pID0+IGl0ZW0ubGFi
ZWwpKS50by5lcWwoWycyLjAgR0InLCAnNC4wIEdCJywgJzYuMCBHQiddKTsKICAgICAgICAgfSk7
CiAKLSAgICAgICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBbMC42R0IsIDAuOEdCLCAxLjBHQiwgMS4y
R0JdIGZvciBbMC41M0dCLCAxLjIzR0JdIHdoZW4gbWF4TGFiZWxzIGlzIDQgYW5kIHVuaXQgaXMg
Ynl0ZXMnLCAoKSA9PiB7CisgICAgICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgWzAuNkdCLCAwLjhH
QiwgMS4wR0IsIDEuMkdCXSBmb3IgWzAuNTNHQiwgMS4yM0dCXSB3aGVuIG1heExhYmVscyBpcyA0
IGFuZCB1bml0IGlzIGJ5dGVzJywgYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgY29uc3QgY29u
dGV4dCA9IG5ldyBCcm93c2luZ0NvbnRleHQ7Ci0gICAgICAgICAgICByZXR1cm4gQ2hhcnRUZXN0
LmltcG9ydENoYXJ0U2NyaXB0cyhjb250ZXh0KS50aGVuKChUaW1lU2VyaWVzQ2hhcnQpID0+IHsK
LSAgICAgICAgICAgICAgICBjb25zdCBNZXRyaWMgPSBjb250ZXh0LnN5bWJvbHMuTWV0cmljOwot
ICAgICAgICAgICAgICAgIGNvbnN0IGdpZ2FieXRlcyA9IE1hdGgucG93KDEwMjQsIDMpOwotICAg
ICAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBUaW1lU2VyaWVzQ2hhcnQuY29tcHV0ZVZhbHVlR3Jp
ZCgwLjUzICogZ2lnYWJ5dGVzLCAxLjIzICogZ2lnYWJ5dGVzLCA0LCBNZXRyaWMubWFrZUZvcm1h
dHRlcignQicsIDIpKTsKLSAgICAgICAgICAgICAgICBleHBlY3QoZ3JpZC5tYXAoKGl0ZW0pID0+
IGl0ZW0ubGFiZWwpKS50by5lcWwoWycwLjYgR0InLCAnMC44IEdCJywgJzEuMCBHQicsICcxLjIg
R0InXSk7Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGNvbnN0IFRpbWVTZXJpZXNDaGFy
dCA9IGF3YWl0IENoYXJ0VGVzdC5pbXBvcnRDaGFydFNjcmlwdHMoY29udGV4dCk7CisgICAgICAg
ICAgICBjb25zdCBNZXRyaWMgPSBjb250ZXh0LnN5bWJvbHMuTWV0cmljOworICAgICAgICAgICAg
Y29uc3QgZ2lnYWJ5dGVzID0gTWF0aC5wb3coMTAyNCwgMyk7CisgICAgICAgICAgICBjb25zdCBn
cmlkID0gVGltZVNlcmllc0NoYXJ0LmNvbXB1dGVWYWx1ZUdyaWQoMC41MyAqIGdpZ2FieXRlcywg
MS4yMyAqIGdpZ2FieXRlcywgNCwgTWV0cmljLm1ha2VGb3JtYXR0ZXIoJ0InLCAyKSk7CisgICAg
ICAgICAgICBleHBlY3QoZ3JpZC5tYXAoKGl0ZW0pID0+IGl0ZW0ubGFiZWwpKS50by5lcWwoWycw
LjYgR0InLCAnMC44IEdCJywgJzEuMCBHQicsICcxLjIgR0InXSk7CiAgICAgICAgIH0pOwogCiAg
ICAgfSk7CiAKICAgICBkZXNjcmliZSgnZmV0Y2hNZWFzdXJlbWVudFNldHMnLCAoKSA9PiB7CiAK
LSAgICAgICAgaXQoJ3Nob3VsZCBmZXRjaCB0aGUgbWVhc3VyZW1lbnQgc2V0IGFuZCBjcmVhdGUg
YSBjYW52YXMgZWxlbWVudCB1cG9uIHJlY2VpdmluZyB0aGUgZGF0YScsICgpID0+IHsKLSAgICAg
ICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQnJvd3NpbmdDb250ZXh0KCk7Ci0gICAgICAgICAg
ICByZXR1cm4gQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhjb250ZXh0KS50aGVuKCgpID0+
IHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFydCA9IENoYXJ0VGVzdC5jcmVhdGVDaGFydFdp
dGhTYW1wbGVDbHVzdGVyKGNvbnRleHQpOworICAgICAgICBpdCgnc2hvdWxkIGZldGNoIHRoZSBt
ZWFzdXJlbWVudCBzZXQgYW5kIGNyZWF0ZSBhIGNhbnZhcyBlbGVtZW50IHVwb24gcmVjZWl2aW5n
IHRoZSBkYXRhJywgYXN5bmMgKCkgPT4geworICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IG5l
dyBCcm93c2luZ0NvbnRleHQ7CisgICAgICAgICAgICBjb25zdCBUaW1lU2VyaWVzQ2hhcnQgPSBh
d2FpdCBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKGNvbnRleHQpOworICAgICAgICAgICAg
Y29uc3QgY2hhcnQgPSBDaGFydFRlc3QuY3JlYXRlQ2hhcnRXaXRoU2FtcGxlQ2x1c3Rlcihjb250
ZXh0KTsKIAotICAgICAgICAgICAgICAgIGNoYXJ0LnNldERvbWFpbihDaGFydFRlc3Quc2FtcGxl
Q2x1c3Rlci5zdGFydFRpbWUsIENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLmVuZFRpbWUpOwotICAg
ICAgICAgICAgICAgIGNoYXJ0LmZldGNoTWVhc3VyZW1lbnRTZXRzKCk7CisgICAgICAgICAgICBj
aGFydC5zZXREb21haW4oQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuc3RhcnRUaW1lLCBDaGFydFRl
c3Quc2FtcGxlQ2x1c3Rlci5lbmRUaW1lKTsKKyAgICAgICAgICAgIGNoYXJ0LmZldGNoTWVhc3Vy
ZW1lbnRTZXRzKCk7CiAKLSAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0cyA9IGNvbnRleHQu
c3ltYm9scy5Nb2NrUmVtb3RlQVBJLnJlcXVlc3RzOwotICAgICAgICAgICAgICAgIGV4cGVjdChy
ZXF1ZXN0cy5sZW5ndGgpLnRvLmJlKDEpOwotICAgICAgICAgICAgICAgIENoYXJ0VGVzdC5yZXNw
b25kV2l0aFNhbXBsZUNsdXN0ZXIocmVxdWVzdHNbMF0pOworICAgICAgICAgICAgY29uc3QgcmVx
dWVzdHMgPSBjb250ZXh0LnN5bWJvbHMuTW9ja1JlbW90ZUFQSS5yZXF1ZXN0czsKKyAgICAgICAg
ICAgIGV4cGVjdChyZXF1ZXN0cy5sZW5ndGgpLnRvLmJlKDEpOworICAgICAgICAgICAgQ2hhcnRU
ZXN0LnJlc3BvbmRXaXRoU2FtcGxlQ2x1c3RlcihyZXF1ZXN0c1swXSk7CiAKLSAgICAgICAgICAg
ICAgICBleHBlY3QoY2hhcnQuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJ2NhbnZhcycpKS50by5i
ZShudWxsKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gd2FpdEZvckNvbXBvbmVudHNUb1JlbmRl
cihjb250ZXh0KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGNoYXJ0
LmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCdjYW52YXMnKSkudG8ubm90LmJlKG51bGwpOwotICAg
ICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBleHBlY3QoY2hh
cnQuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJ2NhbnZhcycpKS50by5iZShudWxsKTsKKworICAg
ICAgICAgICAgYXdhaXQgd2FpdEZvckNvbXBvbmVudHNUb1JlbmRlcihjb250ZXh0KTsKKworICAg
ICAgICAgICAgZXhwZWN0KGNoYXJ0LmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCdjYW52YXMnKSku
dG8ubm90LmJlKG51bGwpOwogICAgICAgICB9KTsKIAotICAgICAgICBpdCgnc2hvdWxkIGltbWVk
aWF0ZWx5IGVucXVldWUgdG8gcmVuZGVyIHdoZW4gdGhlIG1lYXN1cmVtZW50IHNldCBoYWQgYWxy
ZWFkeSBiZWVuIGZldGNoZWQnLCAoKSA9PiB7Ci0gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0g
bmV3IEJyb3dzaW5nQ29udGV4dCgpOwotICAgICAgICAgICAgcmV0dXJuIENoYXJ0VGVzdC5pbXBv
cnRDaGFydFNjcmlwdHMoY29udGV4dCkudGhlbigoKSA9PiB7Ci0gICAgICAgICAgICAgICAgY29u
c3QgY2hhcnQgPSBDaGFydFRlc3QuY3JlYXRlQ2hhcnRXaXRoU2FtcGxlQ2x1c3Rlcihjb250ZXh0
KTsKKyAgICAgICAgaXQoJ3Nob3VsZCBpbW1lZGlhdGVseSBlbnF1ZXVlIHRvIHJlbmRlciB3aGVu
IHRoZSBtZWFzdXJlbWVudCBzZXQgaGFkIGFscmVhZHkgYmVlbiBmZXRjaGVkJywgYXN5bmMgKCkg
PT4geworICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBCcm93c2luZ0NvbnRleHQ7Cisg
ICAgICAgICAgICBjb25zdCBUaW1lU2VyaWVzQ2hhcnQgPSBhd2FpdCBDaGFydFRlc3QuaW1wb3J0
Q2hhcnRTY3JpcHRzKGNvbnRleHQpOworICAgICAgICAgICAgY29uc3QgY2hhcnQgPSBDaGFydFRl
c3QuY3JlYXRlQ2hhcnRXaXRoU2FtcGxlQ2x1c3Rlcihjb250ZXh0KTsKIAotICAgICAgICAgICAg
ICAgIGxldCBzZXQgPSBjb250ZXh0LnN5bWJvbHMuTWVhc3VyZW1lbnRTZXQuZmluZFNldCgxLCAx
LCAwKTsKLSAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZSA9IHNldC5mZXRjaEJldHdlZW4oQ2hh
cnRUZXN0LnNhbXBsZUNsdXN0ZXIuc3RhcnRUaW1lLCBDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5l
bmRUaW1lKTsKKyAgICAgICAgICAgIGxldCBzZXQgPSBjb250ZXh0LnN5bWJvbHMuTWVhc3VyZW1l
bnRTZXQuZmluZFNldCgxLCAxLCAwKTsKKyAgICAgICAgICAgIGxldCBwcm9taXNlID0gc2V0LmZl
dGNoQmV0d2VlbihDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5zdGFydFRpbWUsIENoYXJ0VGVzdC5z
YW1wbGVDbHVzdGVyLmVuZFRpbWUpOwogCi0gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdHMg
PSBjb250ZXh0LnN5bWJvbHMuTW9ja1JlbW90ZUFQSS5yZXF1ZXN0czsKLSAgICAgICAgICAgICAg
ICBleHBlY3QocmVxdWVzdHMubGVuZ3RoKS50by5iZSgxKTsKLSAgICAgICAgICAgICAgICBDaGFy
dFRlc3QucmVzcG9uZFdpdGhTYW1wbGVDbHVzdGVyKHJlcXVlc3RzWzBdKTsKLQotICAgICAgICAg
ICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKCkgPT4gewotICAgICAgICAgICAgICAgICAgICBl
eHBlY3QoY2hhcnQuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJ2NhbnZhcycpKS50by5iZShudWxs
KTsKLSAgICAgICAgICAgICAgICAgICAgY2hhcnQuc2V0RG9tYWluKENoYXJ0VGVzdC5zYW1wbGVD
bHVzdGVyLnN0YXJ0VGltZSwgQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuZW5kVGltZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGNoYXJ0LmZldGNoTWVhc3VyZW1lbnRTZXRzKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNvbnRleHQpOwotICAg
ICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewotICAgICAgICAgICAgICAgICAgICBleHBlY3Qo
cmVxdWVzdHMubGVuZ3RoKS50by5iZSgxKTsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGNo
YXJ0LmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCdjYW52YXMnKSkudG8ubm90LmJlKG51bGwpOwot
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBjb25zdCBy
ZXF1ZXN0cyA9IGNvbnRleHQuc3ltYm9scy5Nb2NrUmVtb3RlQVBJLnJlcXVlc3RzOworICAgICAg
ICAgICAgZXhwZWN0KHJlcXVlc3RzLmxlbmd0aCkudG8uYmUoMSk7CisgICAgICAgICAgICBDaGFy
dFRlc3QucmVzcG9uZFdpdGhTYW1wbGVDbHVzdGVyKHJlcXVlc3RzWzBdKTsKKworICAgICAgICAg
ICAgYXdhaXQgcHJvbWlzZTsKKworICAgICAgICAgICAgZXhwZWN0KGNoYXJ0LmNvbnRlbnQoKS5x
dWVyeVNlbGVjdG9yKCdjYW52YXMnKSkudG8uYmUobnVsbCk7CisgICAgICAgICAgICBjaGFydC5z
ZXREb21haW4oQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuc3RhcnRUaW1lLCBDaGFydFRlc3Quc2Ft
cGxlQ2x1c3Rlci5lbmRUaW1lKTsKKyAgICAgICAgICAgIGNoYXJ0LmZldGNoTWVhc3VyZW1lbnRT
ZXRzKCk7CisKKyAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29u
dGV4dCk7CisKKyAgICAgICAgICAgIGV4cGVjdChyZXF1ZXN0cy5sZW5ndGgpLnRvLmJlKDEpOwor
ICAgICAgICAgICAgZXhwZWN0KGNoYXJ0LmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCdjYW52YXMn
KSkudG8ubm90LmJlKG51bGwpOwogICAgICAgICB9KTsKIAotICAgICAgICBpdCgnc2hvdWxkIGRp
c3BhdGNoICJkYXRhQ2hhbmdlIiBhY3Rpb24gb25jZSB0aGUgZmV0Y2hlZCBkYXRhIGJlY29tZXMg
YXZhaWxhYmxlJywgKCkgPT4gewotICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBCcm93
c2luZ0NvbnRleHQoKTsKLSAgICAgICAgICAgIHJldHVybiBDaGFydFRlc3QuaW1wb3J0Q2hhcnRT
Y3JpcHRzKGNvbnRleHQpLnRoZW4oKCkgPT4gewotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJ0
ID0gQ2hhcnRUZXN0LmNyZWF0ZUNoYXJ0V2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4dCk7CisgICAg
ICAgIGl0KCdzaG91bGQgZGlzcGF0Y2ggImRhdGFDaGFuZ2UiIGFjdGlvbiBvbmNlIHRoZSBmZXRj
aGVkIGRhdGEgYmVjb21lcyBhdmFpbGFibGUnLCBhc3luYyAoKSA9PiB7CisgICAgICAgICAgICBj
b25zdCBjb250ZXh0ID0gbmV3IEJyb3dzaW5nQ29udGV4dDsKKyAgICAgICAgICAgIGNvbnN0IFRp
bWVTZXJpZXNDaGFydCA9IGF3YWl0IENoYXJ0VGVzdC5pbXBvcnRDaGFydFNjcmlwdHMoY29udGV4
dCk7CisgICAgICAgICAgICBjb25zdCBjaGFydCA9IENoYXJ0VGVzdC5jcmVhdGVDaGFydFdpdGhT
YW1wbGVDbHVzdGVyKGNvbnRleHQpOwogCi0gICAgICAgICAgICAgICAgbGV0IGRhdGFDaGFuZ2VD
b3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgY2hhcnQubGlzdGVuVG9BY3Rpb24oJ2RhdGFDaGFu
Z2UnLCAoKSA9PiBkYXRhQ2hhbmdlQ291bnQrKyk7CisgICAgICAgICAgICBsZXQgZGF0YUNoYW5n
ZUNvdW50ID0gMDsKKyAgICAgICAgICAgIGNoYXJ0Lmxpc3RlblRvQWN0aW9uKCdkYXRhQ2hhbmdl
JywgKCkgPT4gZGF0YUNoYW5nZUNvdW50KyspOwogCi0gICAgICAgICAgICAgICAgY2hhcnQuc2V0
RG9tYWluKENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLnN0YXJ0VGltZSwgQ2hhcnRUZXN0LnNhbXBs
ZUNsdXN0ZXIuZW5kVGltZSk7Ci0gICAgICAgICAgICAgICAgY2hhcnQuZmV0Y2hNZWFzdXJlbWVu
dFNldHMoKTsKKyAgICAgICAgICAgIGNoYXJ0LnNldERvbWFpbihDaGFydFRlc3Quc2FtcGxlQ2x1
c3Rlci5zdGFydFRpbWUsIENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLmVuZFRpbWUpOworICAgICAg
ICAgICAgY2hhcnQuZmV0Y2hNZWFzdXJlbWVudFNldHMoKTsKIAotICAgICAgICAgICAgICAgIGNv
bnN0IHJlcXVlc3RzID0gY29udGV4dC5zeW1ib2xzLk1vY2tSZW1vdGVBUEkucmVxdWVzdHM7Ci0g
ICAgICAgICAgICAgICAgZXhwZWN0KHJlcXVlc3RzLmxlbmd0aCkudG8uYmUoMSk7Ci0gICAgICAg
ICAgICAgICAgQ2hhcnRUZXN0LnJlc3BvbmRXaXRoU2FtcGxlQ2x1c3RlcihyZXF1ZXN0c1swXSk7
Ci0KLSAgICAgICAgICAgICAgICBleHBlY3QoZGF0YUNoYW5nZUNvdW50KS50by5iZSgwKTsKLSAg
ICAgICAgICAgICAgICBleHBlY3QoY2hhcnQuc2FtcGxlZFRpbWVTZXJpZXNEYXRhKCdjdXJyZW50
JykpLnRvLmJlKG51bGwpOwotICAgICAgICAgICAgICAgIGV4cGVjdChjaGFydC5jb250ZW50KCku
cXVlcnlTZWxlY3RvcignY2FudmFzJykpLnRvLmJlKG51bGwpOwotICAgICAgICAgICAgICAgIHJl
dHVybiB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNvbnRleHQpLnRoZW4oKCkgPT4gewotICAg
ICAgICAgICAgICAgICAgICBleHBlY3QoZGF0YUNoYW5nZUNvdW50KS50by5iZSgxKTsKLSAgICAg
ICAgICAgICAgICAgICAgZXhwZWN0KGNoYXJ0LnNhbXBsZWRUaW1lU2VyaWVzRGF0YSgnY3VycmVu
dCcpKS50by5ub3QuYmUobnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdChjaGFydC5j
b250ZW50KCkucXVlcnlTZWxlY3RvcignY2FudmFzJykpLnRvLm5vdC5iZShudWxsKTsKLSAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgY29uc3QgcmVxdWVz
dHMgPSBjb250ZXh0LnN5bWJvbHMuTW9ja1JlbW90ZUFQSS5yZXF1ZXN0czsKKyAgICAgICAgICAg
IGV4cGVjdChyZXF1ZXN0cy5sZW5ndGgpLnRvLmJlKDEpOworICAgICAgICAgICAgQ2hhcnRUZXN0
LnJlc3BvbmRXaXRoU2FtcGxlQ2x1c3RlcihyZXF1ZXN0c1swXSk7CisKKyAgICAgICAgICAgIGV4
cGVjdChkYXRhQ2hhbmdlQ291bnQpLnRvLmJlKDApOworICAgICAgICAgICAgZXhwZWN0KGNoYXJ0
LnNhbXBsZWRUaW1lU2VyaWVzRGF0YSgnY3VycmVudCcpKS50by5iZShudWxsKTsKKyAgICAgICAg
ICAgIGV4cGVjdChjaGFydC5jb250ZW50KCkucXVlcnlTZWxlY3RvcignY2FudmFzJykpLnRvLmJl
KG51bGwpOworCisgICAgICAgICAgICBhd2FpdCB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNv
bnRleHQpOworCisgICAgICAgICAgICBleHBlY3QoZGF0YUNoYW5nZUNvdW50KS50by5iZSgxKTsK
KyAgICAgICAgICAgIGV4cGVjdChjaGFydC5zYW1wbGVkVGltZVNlcmllc0RhdGEoJ2N1cnJlbnQn
KSkudG8ubm90LmJlKG51bGwpOworICAgICAgICAgICAgZXhwZWN0KGNoYXJ0LmNvbnRlbnQoKS5x
dWVyeVNlbGVjdG9yKCdjYW52YXMnKSkudG8ubm90LmJlKG51bGwpOwogICAgICAgICB9KTsKICAg
ICB9KTsKIAogICAgIGRlc2NyaWJlKCdzYW1wbGVkVGltZVNlcmllc0RhdGEnLCAoKSA9PiB7Ci0g
ICAgICAgIGl0KCdzaG91bGQgbm90IGNvbnRhaW4gYW4gb3V0bGllciB3aGVuIGluY2x1ZGVPdXRs
aWVycyBpcyBmYWxzZScsICgpID0+IHsKLSAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcg
QnJvd3NpbmdDb250ZXh0KCk7Ci0gICAgICAgICAgICByZXR1cm4gQ2hhcnRUZXN0LmltcG9ydENo
YXJ0U2NyaXB0cyhjb250ZXh0KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICBjb25zdCBj
aGFydCA9IENoYXJ0VGVzdC5jcmVhdGVDaGFydFdpdGhTYW1wbGVDbHVzdGVyKGNvbnRleHQsIFt7
aW5jbHVkZU91dGxpZXJzOiBmYWxzZX1dKQorICAgICAgICBpdCgnc2hvdWxkIG5vdCBjb250YWlu
IGFuIG91dGxpZXIgd2hlbiBpbmNsdWRlT3V0bGllcnMgaXMgZmFsc2UnLCBhc3luYyAoKSA9PiB7
CisgICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IEJyb3dzaW5nQ29udGV4dDsKKyAgICAg
ICAgICAgIGNvbnN0IFRpbWVTZXJpZXNDaGFydCA9IGF3YWl0IENoYXJ0VGVzdC5pbXBvcnRDaGFy
dFNjcmlwdHMoY29udGV4dCk7CiAKLSAgICAgICAgICAgICAgICBjaGFydC5zZXREb21haW4oQ2hh
cnRUZXN0LnNhbXBsZUNsdXN0ZXIuc3RhcnRUaW1lLCBDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5l
bmRUaW1lKTsKLSAgICAgICAgICAgICAgICBjaGFydC5mZXRjaE1lYXN1cmVtZW50U2V0cygpOwot
ICAgICAgICAgICAgICAgIENoYXJ0VGVzdC5yZXNwb25kV2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4
dC5zeW1ib2xzLk1vY2tSZW1vdGVBUEkucmVxdWVzdHNbMF0pOworICAgICAgICAgICAgY29uc3Qg
Y2hhcnQgPSBDaGFydFRlc3QuY3JlYXRlQ2hhcnRXaXRoU2FtcGxlQ2x1c3Rlcihjb250ZXh0LCBb
e2luY2x1ZGVPdXRsaWVyczogZmFsc2V9XSkKIAotICAgICAgICAgICAgICAgIHJldHVybiB3YWl0
Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNvbnRleHQpLnRoZW4oKCkgPT4gewotICAgICAgICAgICAg
ICAgICAgICBjb25zdCB2aWV3ID0gY2hhcnQuc2FtcGxlZFRpbWVTZXJpZXNEYXRhKCdjdXJyZW50
Jyk7Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2aWV3Lmxlbmd0aCgpKS50by5iZSg1KTsK
LSAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgcG9pbnQgb2YgdmlldykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGV4cGVjdChwb2ludC5tYXJrZWRPdXRsaWVyKS50by5iZShmYWxzZSk7Ci0g
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGNoYXJ0LnNl
dERvbWFpbihDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5zdGFydFRpbWUsIENoYXJ0VGVzdC5zYW1w
bGVDbHVzdGVyLmVuZFRpbWUpOworICAgICAgICAgICAgY2hhcnQuZmV0Y2hNZWFzdXJlbWVudFNl
dHMoKTsKKyAgICAgICAgICAgIENoYXJ0VGVzdC5yZXNwb25kV2l0aFNhbXBsZUNsdXN0ZXIoY29u
dGV4dC5zeW1ib2xzLk1vY2tSZW1vdGVBUEkucmVxdWVzdHNbMF0pOworCisgICAgICAgICAgICBh
d2FpdCB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNvbnRleHQpOworCisgICAgICAgICAgICBj
b25zdCB2aWV3ID0gY2hhcnQuc2FtcGxlZFRpbWVTZXJpZXNEYXRhKCdjdXJyZW50Jyk7CisgICAg
ICAgICAgICBleHBlY3Qodmlldy5sZW5ndGgoKSkudG8uYmUoNSk7CisgICAgICAgICAgICBmb3Ig
KGxldCBwb2ludCBvZiB2aWV3KQorICAgICAgICAgICAgICAgIGV4cGVjdChwb2ludC5tYXJrZWRP
dXRsaWVyKS50by5iZShmYWxzZSk7CiAgICAgICAgIH0pOwogCi0gICAgICAgIGl0KCdzaG91bGQg
Y29udGFpbiBldmVyeSBvdXRsaWVyIHdoZW4gaW5jbHVkZU91dGxpZXJzIGlzIHRydWUnLCAoKSA9
PiB7Ci0gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IEJyb3dzaW5nQ29udGV4dCgpOwot
ICAgICAgICAgICAgcmV0dXJuIENoYXJ0VGVzdC5pbXBvcnRDaGFydFNjcmlwdHMoY29udGV4dCku
dGhlbigoKSA9PiB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhcnQgPSBDaGFydFRlc3QuY3Jl
YXRlQ2hhcnRXaXRoU2FtcGxlQ2x1c3Rlcihjb250ZXh0LCBbe2luY2x1ZGVPdXRsaWVyczogdHJ1
ZX1dKQorICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW4gZXZlcnkgb3V0bGllciB3aGVuIGluY2x1
ZGVPdXRsaWVycyBpcyB0cnVlJywgYXN5bmMgKCkgPT4geworICAgICAgICAgICAgY29uc3QgY29u
dGV4dCA9IG5ldyBCcm93c2luZ0NvbnRleHQ7CisgICAgICAgICAgICBjb25zdCBUaW1lU2VyaWVz
Q2hhcnQgPSBhd2FpdCBDaGFydFRlc3QuaW1wb3J0Q2hhcnRTY3JpcHRzKGNvbnRleHQpOworICAg
ICAgICAgICAgY29uc3QgY2hhcnQgPSBDaGFydFRlc3QuY3JlYXRlQ2hhcnRXaXRoU2FtcGxlQ2x1
c3Rlcihjb250ZXh0LCBbe2luY2x1ZGVPdXRsaWVyczogdHJ1ZX1dKQogCi0gICAgICAgICAgICAg
ICAgY2hhcnQuc2V0RG9tYWluKENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLnN0YXJ0VGltZSwgQ2hh
cnRUZXN0LnNhbXBsZUNsdXN0ZXIuZW5kVGltZSk7Ci0gICAgICAgICAgICAgICAgY2hhcnQuZmV0
Y2hNZWFzdXJlbWVudFNldHMoKTsKLSAgICAgICAgICAgICAgICBDaGFydFRlc3QucmVzcG9uZFdp
dGhTYW1wbGVDbHVzdGVyKGNvbnRleHQuc3ltYm9scy5Nb2NrUmVtb3RlQVBJLnJlcXVlc3RzWzBd
KTsKKyAgICAgICAgICAgIGNoYXJ0LnNldERvbWFpbihDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5z
dGFydFRpbWUsIENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLmVuZFRpbWUpOworICAgICAgICAgICAg
Y2hhcnQuZmV0Y2hNZWFzdXJlbWVudFNldHMoKTsKKyAgICAgICAgICAgIENoYXJ0VGVzdC5yZXNw
b25kV2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4dC5zeW1ib2xzLk1vY2tSZW1vdGVBUEkucmVxdWVz
dHNbMF0pOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JDb21wb25lbnRzVG9SZW5k
ZXIoY29udGV4dCkudGhlbigoKSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZpZXcg
PSBjaGFydC5zYW1wbGVkVGltZVNlcmllc0RhdGEoJ2N1cnJlbnQnKTsKLSAgICAgICAgICAgICAg
ICAgICAgZXhwZWN0KHZpZXcubGVuZ3RoKCkpLnRvLmJlKDcpOwotICAgICAgICAgICAgICAgICAg
ICBleHBlY3Qodmlldy5maW5kUG9pbnRCeUluZGV4KDEpLm1hcmtlZE91dGxpZXIpLnRvLmJlKHRy
dWUpOwotICAgICAgICAgICAgICAgICAgICBleHBlY3Qodmlldy5maW5kUG9pbnRCeUluZGV4KDUp
Lm1hcmtlZE91dGxpZXIpLnRvLmJlKHRydWUpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICBhd2FpdCB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNv
bnRleHQpOworCisgICAgICAgICAgICBjb25zdCB2aWV3ID0gY2hhcnQuc2FtcGxlZFRpbWVTZXJp
ZXNEYXRhKCdjdXJyZW50Jyk7CisgICAgICAgICAgICBleHBlY3Qodmlldy5sZW5ndGgoKSkudG8u
YmUoNyk7CisgICAgICAgICAgICBleHBlY3Qodmlldy5maW5kUG9pbnRCeUluZGV4KDEpLm1hcmtl
ZE91dGxpZXIpLnRvLmJlKHRydWUpOworICAgICAgICAgICAgZXhwZWN0KHZpZXcuZmluZFBvaW50
QnlJbmRleCg1KS5tYXJrZWRPdXRsaWVyKS50by5iZSh0cnVlKTsKICAgICAgICAgfSk7CiAKLSAg
ICAgICAgaXQoJ3Nob3VsZCBvbmx5IGNvbnRhaW4gZGF0YSBwb2ludHMgaW4gdGhlIGRvbWFpbiBh
bmQgb25lIHByZWNlZGluZyBwb2ludCB3aGVuIHRoZXJlIGFyZSBubyBzdWNjZWVkaW5nIHBvaW50
cycsICgpID0+IHsKLSAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQnJvd3NpbmdDb250
ZXh0KCk7Ci0gICAgICAgICAgICByZXR1cm4gQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhj
b250ZXh0KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFydCA9IENoYXJ0
VGVzdC5jcmVhdGVDaGFydFdpdGhTYW1wbGVDbHVzdGVyKGNvbnRleHQsIFt7aW5jbHVkZU91dGxp
ZXJzOiB0cnVlfV0pCisgICAgICAgIGl0KCdzaG91bGQgb25seSBjb250YWluIGRhdGEgcG9pbnRz
IGluIHRoZSBkb21haW4gYW5kIG9uZSBwcmVjZWRpbmcgcG9pbnQgd2hlbiB0aGVyZSBhcmUgbm8g
c3VjY2VlZGluZyBwb2ludHMnLCBhc3luYyAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBjb250
ZXh0ID0gbmV3IEJyb3dzaW5nQ29udGV4dDsKKyAgICAgICAgICAgIGNvbnN0IFRpbWVTZXJpZXND
aGFydCA9IGF3YWl0IENoYXJ0VGVzdC5pbXBvcnRDaGFydFNjcmlwdHMoY29udGV4dCk7CisgICAg
ICAgICAgICBjb25zdCBjaGFydCA9IENoYXJ0VGVzdC5jcmVhdGVDaGFydFdpdGhTYW1wbGVDbHVz
dGVyKGNvbnRleHQsIFt7aW5jbHVkZU91dGxpZXJzOiB0cnVlfV0pCiAKLSAgICAgICAgICAgICAg
ICBjaGFydC5zZXREb21haW4ocG9zaXhUaW1lKCcyMDE2LTAxLTA2VDAwOjAwOjAwWicpLCBwb3Np
eFRpbWUoJzIwMTYtMDEtMDdUMDA6MDA6MDBaJykpOwotICAgICAgICAgICAgICAgIGNoYXJ0LmZl
dGNoTWVhc3VyZW1lbnRTZXRzKCk7Ci0gICAgICAgICAgICAgICAgQ2hhcnRUZXN0LnJlc3BvbmRX
aXRoU2FtcGxlQ2x1c3Rlcihjb250ZXh0LnN5bWJvbHMuTW9ja1JlbW90ZUFQSS5yZXF1ZXN0c1sw
XSk7CisgICAgICAgICAgICBjaGFydC5zZXREb21haW4ocG9zaXhUaW1lKCcyMDE2LTAxLTA2VDAw
OjAwOjAwWicpLCBwb3NpeFRpbWUoJzIwMTYtMDEtMDdUMDA6MDA6MDBaJykpOworICAgICAgICAg
ICAgY2hhcnQuZmV0Y2hNZWFzdXJlbWVudFNldHMoKTsKKyAgICAgICAgICAgIENoYXJ0VGVzdC5y
ZXNwb25kV2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4dC5zeW1ib2xzLk1vY2tSZW1vdGVBUEkucmVx
dWVzdHNbMF0pOwogCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JDb21wb25lbnRzVG9S
ZW5kZXIoY29udGV4dCkudGhlbigoKSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZp
ZXcgPSBjaGFydC5zYW1wbGVkVGltZVNlcmllc0RhdGEoJ2N1cnJlbnQnKTsKLSAgICAgICAgICAg
ICAgICAgICAgZXhwZWN0KFsuLi52aWV3XS5tYXAoKHBvaW50KSA9PiBwb2ludC5pZCkpLnRvLmJl
LmVxbChbMTAwMywgMTAwNCwgMTAwNSwgMTAwNl0pOwotICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICBhd2FpdCB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVy
KGNvbnRleHQpOworCisgICAgICAgICAgICBjb25zdCB2aWV3ID0gY2hhcnQuc2FtcGxlZFRpbWVT
ZXJpZXNEYXRhKCdjdXJyZW50Jyk7CisgICAgICAgICAgICBleHBlY3QoWy4uLnZpZXddLm1hcCgo
cG9pbnQpID0+IHBvaW50LmlkKSkudG8uYmUuZXFsKFsxMDAzLCAxMDA0LCAxMDA1LCAxMDA2XSk7
CiAgICAgICAgIH0pOwogCiAgICAgICAgIGl0KCdzaG91bGQgb25seSBjb250YWluIGRhdGEgcG9p
bnRzIGluIHRoZSBkb21haW4gYW5kIG9uZSBzdWNjZWVkaW5nIHBvaW50IHdoZW4gdGhlcmUgYXJl
IG5vIHByZWNlZGluZyBwb2ludHMnLCAoKSA9PiB7CkBAIC01ODYsMjU2ICs1NTAsMjQ5IEBAIGRl
c2NyaWJlKCdUaW1lU2VyaWVzQ2hhcnQnLCAoKSA9PiB7CiAgICAgICAgICAgICB9KTsKICAgICAg
ICAgfSk7CiAKLSAgICAgICAgaXQoJ3Nob3VsZCBvbmx5IGNvbnRhaW4gZGF0YSBwb2ludHMgaW4g
dGhlIGRvbWFpbiBhbmQgb25lIHByZWNlZGluZyBwb2ludCBhbmQgb25lIHN1Y2NlZWRpbmcgcG9p
bnQnLCAoKSA9PiB7Ci0gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IEJyb3dzaW5nQ29u
dGV4dCgpOwotICAgICAgICAgICAgcmV0dXJuIENoYXJ0VGVzdC5pbXBvcnRDaGFydFNjcmlwdHMo
Y29udGV4dCkudGhlbigoKSA9PiB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhcnQgPSBDaGFy
dFRlc3QuY3JlYXRlQ2hhcnRXaXRoU2FtcGxlQ2x1c3Rlcihjb250ZXh0LCBbe2luY2x1ZGVPdXRs
aWVyczogdHJ1ZX1dKQorICAgICAgICBpdCgnc2hvdWxkIG9ubHkgY29udGFpbiBkYXRhIHBvaW50
cyBpbiB0aGUgZG9tYWluIGFuZCBvbmUgcHJlY2VkaW5nIHBvaW50IGFuZCBvbmUgc3VjY2VlZGlu
ZyBwb2ludCcsIGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcg
QnJvd3NpbmdDb250ZXh0OworICAgICAgICAgICAgY29uc3QgVGltZVNlcmllc0NoYXJ0ID0gYXdh
aXQgQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhjb250ZXh0KTsKKyAgICAgICAgICAgIGNv
bnN0IGNoYXJ0ID0gQ2hhcnRUZXN0LmNyZWF0ZUNoYXJ0V2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4
dCwgW3tpbmNsdWRlT3V0bGllcnM6IHRydWV9XSkKIAotICAgICAgICAgICAgICAgIGNoYXJ0LnNl
dERvbWFpbihwb3NpeFRpbWUoJzIwMTYtMDEtMDVUMjE6MDA6MDBaJyksIHBvc2l4VGltZSgnMjAx
Ni0wMS0wNlQwMjowMDowMFonKSk7Ci0gICAgICAgICAgICAgICAgY2hhcnQuZmV0Y2hNZWFzdXJl
bWVudFNldHMoKTsKLSAgICAgICAgICAgICAgICBDaGFydFRlc3QucmVzcG9uZFdpdGhTYW1wbGVD
bHVzdGVyKGNvbnRleHQuc3ltYm9scy5Nb2NrUmVtb3RlQVBJLnJlcXVlc3RzWzBdKTsKKyAgICAg
ICAgICAgIGNoYXJ0LnNldERvbWFpbihwb3NpeFRpbWUoJzIwMTYtMDEtMDVUMjE6MDA6MDBaJyks
IHBvc2l4VGltZSgnMjAxNi0wMS0wNlQwMjowMDowMFonKSk7CisgICAgICAgICAgICBjaGFydC5m
ZXRjaE1lYXN1cmVtZW50U2V0cygpOworICAgICAgICAgICAgQ2hhcnRUZXN0LnJlc3BvbmRXaXRo
U2FtcGxlQ2x1c3Rlcihjb250ZXh0LnN5bWJvbHMuTW9ja1JlbW90ZUFQSS5yZXF1ZXN0c1swXSk7
CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gd2FpdEZvckNvbXBvbmVudHNUb1JlbmRlcihjb250
ZXh0KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgdmlldyA9IGNoYXJ0
LnNhbXBsZWRUaW1lU2VyaWVzRGF0YSgnY3VycmVudCcpOwotICAgICAgICAgICAgICAgICAgICBl
eHBlY3QoWy4uLnZpZXddLm1hcCgocG9pbnQpID0+IHBvaW50LmlkKSkudG8uYmUuZXFsKFsxMDAy
LCAxMDAzLCAxMDA0LCAxMDA1XSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29udGV4dCk7
CisKKyAgICAgICAgICAgIGNvbnN0IHZpZXcgPSBjaGFydC5zYW1wbGVkVGltZVNlcmllc0RhdGEo
J2N1cnJlbnQnKTsKKyAgICAgICAgICAgIGV4cGVjdChbLi4udmlld10ubWFwKChwb2ludCkgPT4g
cG9pbnQuaWQpKS50by5iZS5lcWwoWzEwMDIsIDEwMDMsIDEwMDQsIDEwMDVdKTsKICAgICAgICAg
fSk7CiAgICAgfSk7CiAKICAgICBkZXNjcmliZSgncmVuZGVyJywgKCkgPT4gewotICAgICAgICBp
dCgnc2hvdWxkIHVwZGF0ZSB0aGUgY2FudmFzIHNpemUgYW5kIGl0cyBjb250ZW50IGFmdGVyIHRo
ZSB3aW5kb3cgaGFzIGJlZW4gcmVzaXplZCcsICgpID0+IHsKLSAgICAgICAgICAgIGNvbnN0IGNv
bnRleHQgPSBuZXcgQnJvd3NpbmdDb250ZXh0KCk7Ci0gICAgICAgICAgICByZXR1cm4gQ2hhcnRU
ZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhjb250ZXh0KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAg
ICAgICBjb25zdCBjaGFydCA9IENoYXJ0VGVzdC5jcmVhdGVDaGFydFdpdGhTYW1wbGVDbHVzdGVy
KGNvbnRleHQsIG51bGwsIHt3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICcxMDAlJ30pOworICAgICAg
ICBpdCgnc2hvdWxkIHVwZGF0ZSB0aGUgY2FudmFzIHNpemUgYW5kIGl0cyBjb250ZW50IGFmdGVy
IHRoZSB3aW5kb3cgaGFzIGJlZW4gcmVzaXplZCcsIGFzeW5jICgpID0+IHsKKyAgICAgICAgICAg
IGNvbnN0IGNvbnRleHQgPSBuZXcgQnJvd3NpbmdDb250ZXh0OworICAgICAgICAgICAgY29uc3Qg
VGltZVNlcmllc0NoYXJ0ID0gYXdhaXQgQ2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhjb250
ZXh0KTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXJ0ID0gQ2hhcnRUZXN0LmNyZWF0ZUNoYXJ0V2l0
aFNhbXBsZUNsdXN0ZXIoY29udGV4dCwgbnVsbCwge3dpZHRoOiAnMTAwJScsIGhlaWdodDogJzEw
MCUnfSk7CiAKLSAgICAgICAgICAgICAgICBsZXQgZGF0YUNoYW5nZUNvdW50ID0gMDsKLSAgICAg
ICAgICAgICAgICBjaGFydC5saXN0ZW5Ub0FjdGlvbignZGF0YUNoYW5nZScsICgpID0+IGRhdGFD
aGFuZ2VDb3VudCsrKTsKKyAgICAgICAgICAgIGxldCBkYXRhQ2hhbmdlQ291bnQgPSAwOworICAg
ICAgICAgICAgY2hhcnQubGlzdGVuVG9BY3Rpb24oJ2RhdGFDaGFuZ2UnLCAoKSA9PiBkYXRhQ2hh
bmdlQ291bnQrKyk7CiAKLSAgICAgICAgICAgICAgICBjaGFydC5zZXREb21haW4oQ2hhcnRUZXN0
LnNhbXBsZUNsdXN0ZXIuc3RhcnRUaW1lLCBDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5lbmRUaW1l
KTsKLSAgICAgICAgICAgICAgICBjaGFydC5mZXRjaE1lYXN1cmVtZW50U2V0cygpOworICAgICAg
ICAgICAgY2hhcnQuc2V0RG9tYWluKENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLnN0YXJ0VGltZSwg
Q2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuZW5kVGltZSk7CisgICAgICAgICAgICBjaGFydC5mZXRj
aE1lYXN1cmVtZW50U2V0cygpOwogCi0gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdHMgPSBj
b250ZXh0LnN5bWJvbHMuTW9ja1JlbW90ZUFQSS5yZXF1ZXN0czsKLSAgICAgICAgICAgICAgICBl
eHBlY3QocmVxdWVzdHMubGVuZ3RoKS50by5iZSgxKTsKLSAgICAgICAgICAgICAgICBDaGFydFRl
c3QucmVzcG9uZFdpdGhTYW1wbGVDbHVzdGVyKHJlcXVlc3RzWzBdKTsKLQotICAgICAgICAgICAg
ICAgIGV4cGVjdChkYXRhQ2hhbmdlQ291bnQpLnRvLmJlKDApOwotICAgICAgICAgICAgICAgIGV4
cGVjdChjaGFydC5zYW1wbGVkVGltZVNlcmllc0RhdGEoJ2N1cnJlbnQnKSkudG8uYmUobnVsbCk7
Ci0gICAgICAgICAgICAgICAgZXhwZWN0KGNoYXJ0LmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCdj
YW52YXMnKSkudG8uYmUobnVsbCk7Ci0gICAgICAgICAgICAgICAgbGV0IGNhbnZhczsKLSAgICAg
ICAgICAgICAgICBsZXQgb3JpZ2luYWxXaWR0aDsKLSAgICAgICAgICAgICAgICBsZXQgb3JpZ2lu
YWxIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JDb21wb25lbnRzVG9SZW5k
ZXIoY29udGV4dCkudGhlbihhc3luYyAoKSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVj
dChkYXRhQ2hhbmdlQ291bnQpLnRvLmJlKDEpOwotICAgICAgICAgICAgICAgICAgICBleHBlY3Qo
Y2hhcnQuc2FtcGxlZFRpbWVTZXJpZXNEYXRhKCdjdXJyZW50JykpLnRvLm5vdC5iZShudWxsKTsK
LSAgICAgICAgICAgICAgICAgICAgY2FudmFzID0gY2hhcnQuY29udGVudCgpLnF1ZXJ5U2VsZWN0
b3IoJ2NhbnZhcycpOwotICAgICAgICAgICAgICAgICAgICBleHBlY3QoY2FudmFzKS50by5ub3Qu
YmUobnVsbCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxXaWR0aCA9IGNhbnZhcy5v
ZmZzZXRXaWR0aDsKLSAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxIZWlnaHQgPSBjYW52YXMu
b2Zmc2V0SGVpZ2h0OwotICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3JpZ2luYWxXaWR0aCku
dG8uYmUoY29udGV4dC5kb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoKTsKLSAgICAgICAgICAgICAg
ICAgICAgZXhwZWN0KG9yaWdpbmFsSGVpZ2h0KS50by5iZShjb250ZXh0LmRvY3VtZW50LmJvZHku
b2Zmc2V0SGVpZ2h0KTsKLQotICAgICAgICAgICAgICAgICAgICBDYW52YXNUZXN0LmZpbGxDYW52
YXNCZWZvcmVSZWRyYXdDaGVjayhjYW52YXMpOwotICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LmlmcmFtZS5zdHlsZS53aWR0aCA9IGNvbnRleHQuaWZyYW1lLm9mZnNldFdpZHRoICogMiArICdw
eCc7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZ2xvYmFsLmRpc3BhdGNoRXZlbnQobmV3
IEV2ZW50KCdyZXNpemUnKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGNhbnZhcy5v
ZmZzZXRXaWR0aCkudG8uYmUob3JpZ2luYWxXaWR0aCk7Ci0gICAgICAgICAgICAgICAgICAgIGV4
cGVjdChjYW52YXMub2Zmc2V0SGVpZ2h0KS50by5iZShvcmlnaW5hbEhlaWdodCk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgYXdhaXQgd2FpdEZvckVsZW1lbnRSZXNpemUoY2hhcnQuZWxlbWVudCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgYXdhaXQgd2FpdEZvckNvbXBvbmVudHNUb1JlbmRlcihj
b250ZXh0KTsKLSAgICAgICAgICAgICAgICB9KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAg
ICAgICAgZXhwZWN0KGRhdGFDaGFuZ2VDb3VudCkudG8uYmUoMik7Ci0gICAgICAgICAgICAgICAg
ICAgIGV4cGVjdChjYW52YXMub2Zmc2V0V2lkdGgpLnRvLmJlLmdyZWF0ZXJUaGFuKG9yaWdpbmFs
V2lkdGgpOwotICAgICAgICAgICAgICAgICAgICBleHBlY3QoY2FudmFzLm9mZnNldFdpZHRoKS50
by5iZShjb250ZXh0LmRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGgpOwotICAgICAgICAgICAgICAg
ICAgICBleHBlY3QoY2FudmFzLm9mZnNldEhlaWdodCkudG8uYmUob3JpZ2luYWxIZWlnaHQpOwot
ICAgICAgICAgICAgICAgICAgICBleHBlY3QoQ2FudmFzVGVzdC5oYXNDYW52YXNCZWVuUmVkcmF3
bihjYW52YXMpKS50by5iZSh0cnVlKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
IH0pOwotICAgICAgICB9KTsKKyAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RzID0gY29udGV4dC5z
eW1ib2xzLk1vY2tSZW1vdGVBUEkucmVxdWVzdHM7CisgICAgICAgICAgICBleHBlY3QocmVxdWVz
dHMubGVuZ3RoKS50by5iZSgxKTsKKyAgICAgICAgICAgIENoYXJ0VGVzdC5yZXNwb25kV2l0aFNh
bXBsZUNsdXN0ZXIocmVxdWVzdHNbMF0pOwogCi0gICAgICAgIGl0KCdzaG91bGQgbm90IHVwZGF0
ZSB1cGRhdGUgdGhlIGNhbnZhcyB3aGVuIHRoZSB3aW5kb3cgaGFzIGJlZW4gcmVzaXplZCBidXQg
aXRzIGRpbWVuc2lvbnMgc3RheXMgdGhlIHNhbWUnLCAoKSA9PiB7Ci0gICAgICAgICAgICBjb25z
dCBjb250ZXh0ID0gbmV3IEJyb3dzaW5nQ29udGV4dCgpOwotICAgICAgICAgICAgcmV0dXJuIENo
YXJ0VGVzdC5pbXBvcnRDaGFydFNjcmlwdHMoY29udGV4dCkudGhlbigoKSA9PiB7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgY2hhcnQgPSBDaGFydFRlc3QuY3JlYXRlQ2hhcnRXaXRoU2FtcGxlQ2x1
c3Rlcihjb250ZXh0LCBudWxsLCB7d2lkdGg6ICcxMDBweCcsIGhlaWdodDogJzEwMHB4J30pOwor
ICAgICAgICAgICAgZXhwZWN0KGRhdGFDaGFuZ2VDb3VudCkudG8uYmUoMCk7CisgICAgICAgICAg
ICBleHBlY3QoY2hhcnQuc2FtcGxlZFRpbWVTZXJpZXNEYXRhKCdjdXJyZW50JykpLnRvLmJlKG51
bGwpOworICAgICAgICAgICAgZXhwZWN0KGNoYXJ0LmNvbnRlbnQoKS5xdWVyeVNlbGVjdG9yKCdj
YW52YXMnKSkudG8uYmUobnVsbCk7CiAKLSAgICAgICAgICAgICAgICBsZXQgZGF0YUNoYW5nZUNv
dW50ID0gMDsKLSAgICAgICAgICAgICAgICBjaGFydC5saXN0ZW5Ub0FjdGlvbignZGF0YUNoYW5n
ZScsICgpID0+IGRhdGFDaGFuZ2VDb3VudCsrKTsKKyAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JD
b21wb25lbnRzVG9SZW5kZXIoY29udGV4dCk7CiAKLSAgICAgICAgICAgICAgICBjaGFydC5zZXRE
b21haW4oQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuc3RhcnRUaW1lLCBDaGFydFRlc3Quc2FtcGxl
Q2x1c3Rlci5lbmRUaW1lKTsKLSAgICAgICAgICAgICAgICBjaGFydC5mZXRjaE1lYXN1cmVtZW50
U2V0cygpOworICAgICAgICAgICAgZXhwZWN0KGRhdGFDaGFuZ2VDb3VudCkudG8uYmUoMSk7Cisg
ICAgICAgICAgICBleHBlY3QoY2hhcnQuc2FtcGxlZFRpbWVTZXJpZXNEYXRhKCdjdXJyZW50Jykp
LnRvLm5vdC5iZShudWxsKTsKKyAgICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IGNoYXJ0LmNvbnRl
bnQoKS5xdWVyeVNlbGVjdG9yKCdjYW52YXMnKTsKKyAgICAgICAgICAgIGV4cGVjdChjYW52YXMp
LnRvLm5vdC5iZShudWxsKTsKIAotICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RzID0gY29u
dGV4dC5zeW1ib2xzLk1vY2tSZW1vdGVBUEkucmVxdWVzdHM7Ci0gICAgICAgICAgICAgICAgZXhw
ZWN0KHJlcXVlc3RzLmxlbmd0aCkudG8uYmUoMSk7Ci0gICAgICAgICAgICAgICAgQ2hhcnRUZXN0
LnJlc3BvbmRXaXRoU2FtcGxlQ2x1c3RlcihyZXF1ZXN0c1swXSk7Ci0gICAgICAgICAgICAgICAg
ZXhwZWN0KGRhdGFDaGFuZ2VDb3VudCkudG8uYmUoMCk7CisgICAgICAgICAgICBjb25zdCBvcmln
aW5hbFdpZHRoID0gY2FudmFzLm9mZnNldFdpZHRoOworICAgICAgICAgICAgY29uc3Qgb3JpZ2lu
YWxIZWlnaHQgPSBjYW52YXMub2Zmc2V0SGVpZ2h0OworICAgICAgICAgICAgZXhwZWN0KG9yaWdp
bmFsV2lkdGgpLnRvLmJlKGNvbnRleHQuZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aCk7CisgICAg
ICAgICAgICBleHBlY3Qob3JpZ2luYWxIZWlnaHQpLnRvLmJlKGNvbnRleHQuZG9jdW1lbnQuYm9k
eS5vZmZzZXRIZWlnaHQpOwogCi0gICAgICAgICAgICAgICAgbGV0IGNhbnZhczsKLSAgICAgICAg
ICAgICAgICBsZXQgZGF0YTsKLSAgICAgICAgICAgICAgICByZXR1cm4gd2FpdEZvckNvbXBvbmVu
dHNUb1JlbmRlcihjb250ZXh0KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICAgICAgZXhw
ZWN0KGRhdGFDaGFuZ2VDb3VudCkudG8uYmUoMSk7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEg
PSBjaGFydC5zYW1wbGVkVGltZVNlcmllc0RhdGEoJ2N1cnJlbnQnKTsKLSAgICAgICAgICAgICAg
ICAgICAgZXhwZWN0KGRhdGEpLnRvLm5vdC5iZShudWxsKTsKLSAgICAgICAgICAgICAgICAgICAg
Y2FudmFzID0gY2hhcnQuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJ2NhbnZhcycpOwotICAgICAg
ICAgICAgICAgICAgICBleHBlY3QoY2FudmFzKS50by5ub3QuYmUobnVsbCk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgZXhwZWN0KGNhbnZhcy5vZmZzZXRXaWR0aCkudG8uYmUoMTAwKTsKLSAgICAg
ICAgICAgICAgICAgICAgZXhwZWN0KGNhbnZhcy5vZmZzZXRIZWlnaHQpLnRvLmJlKDEwMCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgQ2FudmFzVGVzdC5maWxsQ2FudmFzQmVmb3JlUmVkcmF3Q2hl
Y2soY2FudmFzKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5pZnJhbWUuc3R5bGUud2lk
dGggPSBjb250ZXh0LmlmcmFtZS5vZmZzZXRXaWR0aCAqIDIgKyAncHgnOwotICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0Lmdsb2JhbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgncmVzaXplJykp
OwotCi0gICAgICAgICAgICAgICAgICAgIGV4cGVjdChjYW52YXMub2Zmc2V0V2lkdGgpLnRvLmJl
KDEwMCk7Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdChjYW52YXMub2Zmc2V0SGVpZ2h0KS50
by5iZSgxMDApOwotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB3YWl0Rm9yQ29tcG9uZW50
c1RvUmVuZGVyKGNvbnRleHQpOwotICAgICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewotICAg
ICAgICAgICAgICAgICAgICBleHBlY3QoZGF0YUNoYW5nZUNvdW50KS50by5iZSgxKTsKLSAgICAg
ICAgICAgICAgICAgICAgZXhwZWN0KGNoYXJ0LnNhbXBsZWRUaW1lU2VyaWVzRGF0YSgnY3VycmVu
dCcpKS50by5iZShkYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGNhbnZhcy5vZmZz
ZXRXaWR0aCkudG8uYmUoMTAwKTsKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGNhbnZhcy5v
ZmZzZXRIZWlnaHQpLnRvLmJlKDEwMCk7Ci0gICAgICAgICAgICAgICAgICAgIGV4cGVjdChDYW52
YXNUZXN0Lmhhc0NhbnZhc0JlZW5SZWRyYXduKGNhbnZhcykpLnRvLmJlKGZhbHNlKTsKLSAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgQ2FudmFzVGVzdC5m
aWxsQ2FudmFzQmVmb3JlUmVkcmF3Q2hlY2soY2FudmFzKTsKKyAgICAgICAgICAgIGNvbnRleHQu
aWZyYW1lLnN0eWxlLndpZHRoID0gY29udGV4dC5pZnJhbWUub2Zmc2V0V2lkdGggKiAyICsgJ3B4
JzsKKworICAgICAgICAgICAgZXhwZWN0KGNhbnZhcy5vZmZzZXRXaWR0aCkudG8uYmUob3JpZ2lu
YWxXaWR0aCk7CisgICAgICAgICAgICBleHBlY3QoY2FudmFzLm9mZnNldEhlaWdodCkudG8uYmUo
b3JpZ2luYWxIZWlnaHQpOworCisgICAgICAgICAgICBhd2FpdCB3YWl0Rm9yRWxlbWVudFJlc2l6
ZShjaGFydC5lbGVtZW50KCkpOworICAgICAgICAgICAgYXdhaXQgd2FpdEZvckNvbXBvbmVudHNU
b1JlbmRlcihjb250ZXh0KTsKKworICAgICAgICAgICAgZXhwZWN0KGRhdGFDaGFuZ2VDb3VudCku
dG8uYmUoMik7CisgICAgICAgICAgICBleHBlY3QoY2FudmFzLm9mZnNldFdpZHRoKS50by5iZS5n
cmVhdGVyVGhhbihvcmlnaW5hbFdpZHRoKTsKKyAgICAgICAgICAgIGV4cGVjdChjYW52YXMub2Zm
c2V0V2lkdGgpLnRvLmJlKGNvbnRleHQuZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aCk7CisgICAg
ICAgICAgICBleHBlY3QoY2FudmFzLm9mZnNldEhlaWdodCkudG8uYmUob3JpZ2luYWxIZWlnaHQp
OworICAgICAgICAgICAgZXhwZWN0KENhbnZhc1Rlc3QuaGFzQ2FudmFzQmVlblJlZHJhd24oY2Fu
dmFzKSkudG8uYmUodHJ1ZSk7CiAgICAgICAgIH0pOwogCi0gICAgICAgIGl0KCdzaG91bGQgcmVu
ZGVyIFktYXhpcycsICgpID0+IHsKLSAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQnJv
d3NpbmdDb250ZXh0KCk7Ci0gICAgICAgICAgICByZXR1cm4gQ2hhcnRUZXN0LmltcG9ydENoYXJ0
U2NyaXB0cyhjb250ZXh0KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFy
dFdpdGhvdXRZQXhpcyA9IENoYXJ0VGVzdC5jcmVhdGVDaGFydFdpdGhTYW1wbGVDbHVzdGVyKGNv
bnRleHQsIG51bGwsIHtheGlzOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBncmlkU3R5bGU6ICcjY2NjJywKLSAgICAgICAgICAgICAgICAgICAgICAgIGZv
bnRTaXplOiAxLAotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JtYXR0ZXI6IGNvbnRl
eHQuc3ltYm9scy5NZXRyaWMubWFrZUZvcm1hdHRlcignbXMnLCAzKSwKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJ0
V2l0aFlBeGlzMSA9IENoYXJ0VGVzdC5jcmVhdGVDaGFydFdpdGhTYW1wbGVDbHVzdGVyKGNvbnRl
eHQsIG51bGwsIHtheGlzOgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB5QXhpc1dpZHRoOiA0LAotICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZFN0eWxl
OiAnI2NjYycsCi0gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogMSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlRm9ybWF0dGVyOiBjb250ZXh0LnN5bWJvbHMuTWV0cmljLm1h
a2VGb3JtYXR0ZXIoJ21zJywgMyksCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFydFdpdGhZQXhpczIgPSBDaGFydFRl
c3QuY3JlYXRlQ2hhcnRXaXRoU2FtcGxlQ2x1c3Rlcihjb250ZXh0LCBudWxsLCB7YXhpczoKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgeUF4aXNXaWR0aDog
NCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGdyaWRTdHlsZTogJyNjY2MnLAotICAgICAgICAg
ICAgICAgICAgICAgICAgZm9udFNpemU6IDEsCi0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZUZvcm1hdHRlcjogY29udGV4dC5zeW1ib2xzLk1ldHJpYy5tYWtlRm9ybWF0dGVyKCdCJywgMyks
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgaXQo
J3Nob3VsZCBub3QgdXBkYXRlIHVwZGF0ZSB0aGUgY2FudmFzIHdoZW4gdGhlIHdpbmRvdyBoYXMg
YmVlbiByZXNpemVkIGJ1dCBpdHMgZGltZW5zaW9ucyBzdGF5cyB0aGUgc2FtZScsIGFzeW5jICgp
ID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgQnJvd3NpbmdDb250ZXh0Owor
ICAgICAgICAgICAgY29uc3QgVGltZVNlcmllc0NoYXJ0ID0gYXdhaXQgQ2hhcnRUZXN0LmltcG9y
dENoYXJ0U2NyaXB0cyhjb250ZXh0KTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXJ0ID0gQ2hhcnRU
ZXN0LmNyZWF0ZUNoYXJ0V2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4dCwgbnVsbCwge3dpZHRoOiAn
MTAwcHgnLCBoZWlnaHQ6ICcxMDBweCd9KTsKIAotICAgICAgICAgICAgICAgIGNoYXJ0V2l0aG91
dFlBeGlzLnNldERvbWFpbihDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5zdGFydFRpbWUsIENoYXJ0
VGVzdC5zYW1wbGVDbHVzdGVyLmVuZFRpbWUpOwotICAgICAgICAgICAgICAgIGNoYXJ0V2l0aG91
dFlBeGlzLmZldGNoTWVhc3VyZW1lbnRTZXRzKCk7Ci0gICAgICAgICAgICAgICAgY2hhcnRXaXRo
WUF4aXMxLnNldERvbWFpbihDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5zdGFydFRpbWUsIENoYXJ0
VGVzdC5zYW1wbGVDbHVzdGVyLmVuZFRpbWUpOwotICAgICAgICAgICAgICAgIGNoYXJ0V2l0aFlB
eGlzMS5mZXRjaE1lYXN1cmVtZW50U2V0cygpOwotICAgICAgICAgICAgICAgIGNoYXJ0V2l0aFlB
eGlzMi5zZXREb21haW4oQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuc3RhcnRUaW1lLCBDaGFydFRl
c3Quc2FtcGxlQ2x1c3Rlci5lbmRUaW1lKTsKLSAgICAgICAgICAgICAgICBjaGFydFdpdGhZQXhp
czIuZmV0Y2hNZWFzdXJlbWVudFNldHMoKTsKLQotICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVl
c3RzID0gY29udGV4dC5zeW1ib2xzLk1vY2tSZW1vdGVBUEkucmVxdWVzdHM7Ci0gICAgICAgICAg
ICAgICAgZXhwZWN0KHJlcXVlc3RzLmxlbmd0aCkudG8uYmUoMSk7Ci0gICAgICAgICAgICAgICAg
Q2hhcnRUZXN0LnJlc3BvbmRXaXRoU2FtcGxlQ2x1c3RlcihyZXF1ZXN0c1swXSk7CisgICAgICAg
ICAgICBsZXQgZGF0YUNoYW5nZUNvdW50ID0gMDsKKyAgICAgICAgICAgIGNoYXJ0Lmxpc3RlblRv
QWN0aW9uKCdkYXRhQ2hhbmdlJywgKCkgPT4gZGF0YUNoYW5nZUNvdW50KyspOwogCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHdhaXRGb3JDb21wb25lbnRzVG9SZW5kZXIoY29udGV4dCkudGhlbigo
KSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgIGxldCBjYW52YXNXaXRob3V0WUF4aXMgPSBjaGFy
dFdpdGhvdXRZQXhpcy5jb250ZW50KCkucXVlcnlTZWxlY3RvcignY2FudmFzJyk7Ci0gICAgICAg
ICAgICAgICAgICAgIGxldCBjYW52YXNXaXRoWUF4aXMxID0gY2hhcnRXaXRoWUF4aXMxLmNvbnRl
bnQoKS5xdWVyeVNlbGVjdG9yKCdjYW52YXMnKTsKLSAgICAgICAgICAgICAgICAgICAgbGV0IGNh
bnZhc1dpdGhZQXhpczIgPSBjaGFydFdpdGhZQXhpczIuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3Io
J2NhbnZhcycpOwotICAgICAgICAgICAgICAgICAgICBDYW52YXNUZXN0LmV4cGVjdENhbnZhc2Vz
TWlzbWF0Y2goY2FudmFzV2l0aG91dFlBeGlzLCBjYW52YXNXaXRoWUF4aXMxKTsKLSAgICAgICAg
ICAgICAgICAgICAgQ2FudmFzVGVzdC5leHBlY3RDYW52YXNlc01pc21hdGNoKGNhbnZhc1dpdGhv
dXRZQXhpcywgY2FudmFzV2l0aFlBeGlzMSk7Ci0gICAgICAgICAgICAgICAgICAgIENhbnZhc1Rl
c3QuZXhwZWN0Q2FudmFzZXNNaXNtYXRjaChjYW52YXNXaXRoWUF4aXMxLCBjYW52YXNXaXRoWUF4
aXMyKTsKKyAgICAgICAgICAgIGNoYXJ0LnNldERvbWFpbihDaGFydFRlc3Quc2FtcGxlQ2x1c3Rl
ci5zdGFydFRpbWUsIENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLmVuZFRpbWUpOworICAgICAgICAg
ICAgY2hhcnQuZmV0Y2hNZWFzdXJlbWVudFNldHMoKTsKIAotICAgICAgICAgICAgICAgICAgICBl
eHBlY3QoQ2FudmFzVGVzdC5jYW52YXNDb250YWluc0NvbG9yKGNhbnZhc1dpdGhZQXhpczEsIHty
OiAyMDQsIGc6IDIwNCwgYjogMjA0fSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHt4OiBjYW52
YXNXaXRoWUF4aXMxLndpZHRoIC0gMSwgd2lkdGg6IDEsIHk6IDAsIGhlaWdodDogY2FudmFzV2l0
aFlBeGlzMS5oZWlnaHR9KSkudG8uYmUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICBjb25zdCByZXF1ZXN0cyA9IGNvbnRleHQuc3ltYm9scy5Nb2NrUmVtb3RlQVBJLnJl
cXVlc3RzOworICAgICAgICAgICAgZXhwZWN0KHJlcXVlc3RzLmxlbmd0aCkudG8uYmUoMSk7Cisg
ICAgICAgICAgICBDaGFydFRlc3QucmVzcG9uZFdpdGhTYW1wbGVDbHVzdGVyKHJlcXVlc3RzWzBd
KTsKKyAgICAgICAgICAgIGV4cGVjdChkYXRhQ2hhbmdlQ291bnQpLnRvLmJlKDApOworCisgICAg
ICAgICAgICBhd2FpdCB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNvbnRleHQpOworCisgICAg
ICAgICAgICBleHBlY3QoZGF0YUNoYW5nZUNvdW50KS50by5iZSgxKTsKKyAgICAgICAgICAgIGNv
bnN0IGRhdGEgPSBjaGFydC5zYW1wbGVkVGltZVNlcmllc0RhdGEoJ2N1cnJlbnQnKTsKKyAgICAg
ICAgICAgIGV4cGVjdChkYXRhKS50by5ub3QuYmUobnVsbCk7CisgICAgICAgICAgICBjb25zdCBj
YW52YXMgPSBjaGFydC5jb250ZW50KCkucXVlcnlTZWxlY3RvcignY2FudmFzJyk7CisgICAgICAg
ICAgICBleHBlY3QoY2FudmFzKS50by5ub3QuYmUobnVsbCk7CisKKyAgICAgICAgICAgIGV4cGVj
dChjYW52YXMub2Zmc2V0V2lkdGgpLnRvLmJlKDEwMCk7CisgICAgICAgICAgICBleHBlY3QoY2Fu
dmFzLm9mZnNldEhlaWdodCkudG8uYmUoMTAwKTsKKworICAgICAgICAgICAgQ2FudmFzVGVzdC5m
aWxsQ2FudmFzQmVmb3JlUmVkcmF3Q2hlY2soY2FudmFzKTsKKyAgICAgICAgICAgIGNvbnRleHQu
aWZyYW1lLnN0eWxlLndpZHRoID0gY29udGV4dC5pZnJhbWUub2Zmc2V0V2lkdGggKiAyICsgJ3B4
JzsKKworICAgICAgICAgICAgZXhwZWN0KGNhbnZhcy5vZmZzZXRXaWR0aCkudG8uYmUoMTAwKTsK
KyAgICAgICAgICAgIGV4cGVjdChjYW52YXMub2Zmc2V0SGVpZ2h0KS50by5iZSgxMDApOworCisg
ICAgICAgICAgICBhd2FpdCB3YWl0Rm9yRWxlbWVudFJlc2l6ZShjaGFydC5lbGVtZW50KCkpOwor
ICAgICAgICAgICAgYXdhaXQgd2FpdEZvckNvbXBvbmVudHNUb1JlbmRlcihjb250ZXh0KTsKKwor
ICAgICAgICAgICAgZXhwZWN0KGRhdGFDaGFuZ2VDb3VudCkudG8uYmUoMSk7CisgICAgICAgICAg
ICBleHBlY3QoY2hhcnQuc2FtcGxlZFRpbWVTZXJpZXNEYXRhKCdjdXJyZW50JykpLnRvLmJlKGRh
dGEpOworICAgICAgICAgICAgZXhwZWN0KGNhbnZhcy5vZmZzZXRXaWR0aCkudG8uYmUoMTAwKTsK
KyAgICAgICAgICAgIGV4cGVjdChjYW52YXMub2Zmc2V0SGVpZ2h0KS50by5iZSgxMDApOworICAg
ICAgICAgICAgZXhwZWN0KENhbnZhc1Rlc3QuaGFzQ2FudmFzQmVlblJlZHJhd24oY2FudmFzKSku
dG8uYmUoZmFsc2UpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2hvdWxkIHJlbmRlciBZ
LWF4aXMnLCBhc3luYyAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IEJy
b3dzaW5nQ29udGV4dDsKKyAgICAgICAgICAgIGF3YWl0IENoYXJ0VGVzdC5pbXBvcnRDaGFydFNj
cmlwdHMoY29udGV4dCk7CisKKyAgICAgICAgICAgIGNvbnN0IGNoYXJ0V2l0aG91dFlBeGlzID0g
Q2hhcnRUZXN0LmNyZWF0ZUNoYXJ0V2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4dCwgbnVsbCwge2F4
aXM6CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBncmlkU3R5bGU6ICcj
Y2NjJywKKyAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IDEsCisgICAgICAgICAgICAgICAg
ICAgIHZhbHVlRm9ybWF0dGVyOiBjb250ZXh0LnN5bWJvbHMuTWV0cmljLm1ha2VGb3JtYXR0ZXIo
J21zJywgMyksCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICBjb25zdCBjaGFydFdpdGhZQXhpczEgPSBDaGFydFRlc3QuY3JlYXRlQ2hhcnRXaXRoU2FtcGxl
Q2x1c3Rlcihjb250ZXh0LCBudWxsLCB7YXhpczoKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHlBeGlzV2lkdGg6IDQsCisgICAgICAgICAgICAgICAgICAgIGdyaWRTdHls
ZTogJyNjY2MnLAorICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogMSwKKyAgICAgICAgICAg
ICAgICAgICAgdmFsdWVGb3JtYXR0ZXI6IGNvbnRleHQuc3ltYm9scy5NZXRyaWMubWFrZUZvcm1h
dHRlcignbXMnLCAzKSwKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIGNvbnN0IGNoYXJ0V2l0aFlBeGlzMiA9IENoYXJ0VGVzdC5jcmVhdGVDaGFydFdpdGhT
YW1wbGVDbHVzdGVyKGNvbnRleHQsIG51bGwsIHtheGlzOgorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgeUF4aXNXaWR0aDogNCwKKyAgICAgICAgICAgICAgICAgICAgZ3Jp
ZFN0eWxlOiAnI2NjYycsCisgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxLAorICAgICAg
ICAgICAgICAgICAgICB2YWx1ZUZvcm1hdHRlcjogY29udGV4dC5zeW1ib2xzLk1ldHJpYy5tYWtl
Rm9ybWF0dGVyKCdCJywgMyksCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisK
KyAgICAgICAgICAgIGNoYXJ0V2l0aG91dFlBeGlzLnNldERvbWFpbihDaGFydFRlc3Quc2FtcGxl
Q2x1c3Rlci5zdGFydFRpbWUsIENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLmVuZFRpbWUpOworICAg
ICAgICAgICAgY2hhcnRXaXRob3V0WUF4aXMuZmV0Y2hNZWFzdXJlbWVudFNldHMoKTsKKyAgICAg
ICAgICAgIGNoYXJ0V2l0aFlBeGlzMS5zZXREb21haW4oQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIu
c3RhcnRUaW1lLCBDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5lbmRUaW1lKTsKKyAgICAgICAgICAg
IGNoYXJ0V2l0aFlBeGlzMS5mZXRjaE1lYXN1cmVtZW50U2V0cygpOworICAgICAgICAgICAgY2hh
cnRXaXRoWUF4aXMyLnNldERvbWFpbihDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5zdGFydFRpbWUs
IENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLmVuZFRpbWUpOworICAgICAgICAgICAgY2hhcnRXaXRo
WUF4aXMyLmZldGNoTWVhc3VyZW1lbnRTZXRzKCk7CisKKyAgICAgICAgICAgIGNvbnN0IHJlcXVl
c3RzID0gY29udGV4dC5zeW1ib2xzLk1vY2tSZW1vdGVBUEkucmVxdWVzdHM7CisgICAgICAgICAg
ICBleHBlY3QocmVxdWVzdHMubGVuZ3RoKS50by5iZSgxKTsKKyAgICAgICAgICAgIENoYXJ0VGVz
dC5yZXNwb25kV2l0aFNhbXBsZUNsdXN0ZXIocmVxdWVzdHNbMF0pOworCisgICAgICAgICAgICBh
d2FpdCB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNvbnRleHQpOworCisgICAgICAgICAgICBs
ZXQgY2FudmFzV2l0aG91dFlBeGlzID0gY2hhcnRXaXRob3V0WUF4aXMuY29udGVudCgpLnF1ZXJ5
U2VsZWN0b3IoJ2NhbnZhcycpOworICAgICAgICAgICAgbGV0IGNhbnZhc1dpdGhZQXhpczEgPSBj
aGFydFdpdGhZQXhpczEuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJ2NhbnZhcycpOworICAgICAg
ICAgICAgbGV0IGNhbnZhc1dpdGhZQXhpczIgPSBjaGFydFdpdGhZQXhpczIuY29udGVudCgpLnF1
ZXJ5U2VsZWN0b3IoJ2NhbnZhcycpOworICAgICAgICAgICAgQ2FudmFzVGVzdC5leHBlY3RDYW52
YXNlc01pc21hdGNoKGNhbnZhc1dpdGhvdXRZQXhpcywgY2FudmFzV2l0aFlBeGlzMSk7CisgICAg
ICAgICAgICBDYW52YXNUZXN0LmV4cGVjdENhbnZhc2VzTWlzbWF0Y2goY2FudmFzV2l0aG91dFlB
eGlzLCBjYW52YXNXaXRoWUF4aXMxKTsKKyAgICAgICAgICAgIENhbnZhc1Rlc3QuZXhwZWN0Q2Fu
dmFzZXNNaXNtYXRjaChjYW52YXNXaXRoWUF4aXMxLCBjYW52YXNXaXRoWUF4aXMyKTsKKworICAg
ICAgICAgICAgZXhwZWN0KENhbnZhc1Rlc3QuY2FudmFzQ29udGFpbnNDb2xvcihjYW52YXNXaXRo
WUF4aXMxLCB7cjogMjA0LCBnOiAyMDQsIGI6IDIwNH0sCisgICAgICAgICAgICAgICAge3g6IGNh
bnZhc1dpdGhZQXhpczEud2lkdGggLSAxLCB3aWR0aDogMSwgeTogMCwgaGVpZ2h0OiBjYW52YXNX
aXRoWUF4aXMxLmhlaWdodH0pKS50by5iZSh0cnVlKTsKICAgICAgICAgfSk7CiAKLSAgICAgICAg
aXQoJ3Nob3VsZCByZW5kZXIgdGhlIHNhbXBsZWQgdGltZSBzZXJpZXMnLCAoKSA9PiB7Ci0gICAg
ICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IEJyb3dzaW5nQ29udGV4dCgpOwotICAgICAgICAg
ICAgcmV0dXJuIENoYXJ0VGVzdC5pbXBvcnRDaGFydFNjcmlwdHMoY29udGV4dCkudGhlbigoKSA9
PiB7Ci0gICAgICAgICAgICAgICAgY29uc3QgbGluZVN0eWxlID0gJ3JnYigwLCAxMjgsIDI1NSkn
OwotICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVDb2xvciA9IHtyOiAwLCBnOiAxMjgsIGI6IDI1
NX07Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhcnRPcHRpb25zID0ge3dpZHRoOiAnMTAwcHgn
LCBoZWlnaHQ6ICcxMDBweCd9OwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJ0V2l0aG91dFNh
bXBsaW5nID0gQ2hhcnRUZXN0LmNyZWF0ZUNoYXJ0V2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4dCwg
W3tsaW5lU3R5bGUsIHNhbXBsZURhdGE6IGZhbHNlfV0sIGNoYXJ0T3B0aW9ucyk7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgY2hhcnRXaXRoU2FtcGxpbmcgPSBDaGFydFRlc3QuY3JlYXRlQ2hhcnRX
aXRoU2FtcGxlQ2x1c3Rlcihjb250ZXh0LCBbe2xpbmVTdHlsZSwgc2FtcGxlRGF0YTogdHJ1ZX1d
LCBjaGFydE9wdGlvbnMpOworICAgICAgICBpdCgnc2hvdWxkIHJlbmRlciB0aGUgc2FtcGxlZCB0
aW1lIHNlcmllcycsIGFzeW5jICgpID0+IHsKKyAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBu
ZXcgQnJvd3NpbmdDb250ZXh0OworICAgICAgICAgICAgYXdhaXQgQ2hhcnRUZXN0LmltcG9ydENo
YXJ0U2NyaXB0cyhjb250ZXh0KTsKIAotICAgICAgICAgICAgICAgIGNoYXJ0V2l0aG91dFNhbXBs
aW5nLnNldERvbWFpbihDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5zdGFydFRpbWUsIENoYXJ0VGVz
dC5zYW1wbGVDbHVzdGVyLmVuZFRpbWUpOwotICAgICAgICAgICAgICAgIGNoYXJ0V2l0aG91dFNh
bXBsaW5nLmZldGNoTWVhc3VyZW1lbnRTZXRzKCk7Ci0gICAgICAgICAgICAgICAgQ2hhcnRUZXN0
LnJlc3BvbmRXaXRoU2FtcGxlQ2x1c3Rlcihjb250ZXh0LnN5bWJvbHMuTW9ja1JlbW90ZUFQSS5y
ZXF1ZXN0c1swXSk7CisgICAgICAgICAgICBjb25zdCBsaW5lU3R5bGUgPSAncmdiKDAsIDEyOCwg
MjU1KSc7CisgICAgICAgICAgICBjb25zdCBsaW5lQ29sb3IgPSB7cjogMCwgZzogMTI4LCBiOiAy
NTV9OworICAgICAgICAgICAgY29uc3QgY2hhcnRPcHRpb25zID0ge3dpZHRoOiAnMTAwcHgnLCBo
ZWlnaHQ6ICcxMDBweCd9OworICAgICAgICAgICAgY29uc3QgY2hhcnRXaXRob3V0U2FtcGxpbmcg
PSBDaGFydFRlc3QuY3JlYXRlQ2hhcnRXaXRoU2FtcGxlQ2x1c3Rlcihjb250ZXh0LCBbe2xpbmVT
dHlsZSwgc2FtcGxlRGF0YTogZmFsc2V9XSwgY2hhcnRPcHRpb25zKTswCisgICAgICAgICAgICBj
b25zdCBjaGFydFdpdGhTYW1wbGluZyA9IENoYXJ0VGVzdC5jcmVhdGVDaGFydFdpdGhTYW1wbGVD
bHVzdGVyKGNvbnRleHQsIFt7bGluZVN0eWxlLCBzYW1wbGVEYXRhOiB0cnVlfV0sIGNoYXJ0T3B0
aW9ucyk7CiAKLSAgICAgICAgICAgICAgICBjaGFydFdpdGhTYW1wbGluZy5zZXREb21haW4oQ2hh
cnRUZXN0LnNhbXBsZUNsdXN0ZXIuc3RhcnRUaW1lLCBDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5l
bmRUaW1lKTsKLSAgICAgICAgICAgICAgICBjaGFydFdpdGhTYW1wbGluZy5mZXRjaE1lYXN1cmVt
ZW50U2V0cygpOworICAgICAgICAgICAgY2hhcnRXaXRob3V0U2FtcGxpbmcuc2V0RG9tYWluKENo
YXJ0VGVzdC5zYW1wbGVDbHVzdGVyLnN0YXJ0VGltZSwgQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIu
ZW5kVGltZSk7CisgICAgICAgICAgICBjaGFydFdpdGhvdXRTYW1wbGluZy5mZXRjaE1lYXN1cmVt
ZW50U2V0cygpOworICAgICAgICAgICAgQ2hhcnRUZXN0LnJlc3BvbmRXaXRoU2FtcGxlQ2x1c3Rl
cihjb250ZXh0LnN5bWJvbHMuTW9ja1JlbW90ZUFQSS5yZXF1ZXN0c1swXSk7CiAKLSAgICAgICAg
ICAgICAgICBsZXQgY2FudmFzV2l0aFNhbXBsaW5nOwotICAgICAgICAgICAgICAgIGxldCBjYW52
YXNXaXRob3V0U2FtcGxpbmc7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JDb21wb25l
bnRzVG9SZW5kZXIoY29udGV4dCkudGhlbihhc3luYyAoKSA9PiB7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhbnZhc1dpdGhvdXRTYW1wbGluZyA9IGNoYXJ0V2l0aG91dFNhbXBsaW5nLmNvbnRlbnQo
KS5xdWVyeVNlbGVjdG9yKCdjYW52YXMnKTsKLSAgICAgICAgICAgICAgICAgICAgY2FudmFzV2l0
aFNhbXBsaW5nID0gY2hhcnRXaXRoU2FtcGxpbmcuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJ2Nh
bnZhcycpOwotCi0gICAgICAgICAgICAgICAgICAgIENhbnZhc1Rlc3QuZXhwZWN0Q2FudmFzZXNN
YXRjaChjYW52YXNXaXRoU2FtcGxpbmcsIGNhbnZhc1dpdGhvdXRTYW1wbGluZyk7Ci0gICAgICAg
ICAgICAgICAgICAgIGV4cGVjdChDYW52YXNUZXN0LmNhbnZhc0NvbnRhaW5zQ29sb3IoY2FudmFz
V2l0aG91dFNhbXBsaW5nLCBsaW5lQ29sb3IpKS50by5iZSh0cnVlKTsKLSAgICAgICAgICAgICAg
ICAgICAgZXhwZWN0KENhbnZhc1Rlc3QuY2FudmFzQ29udGFpbnNDb2xvcihjYW52YXNXaXRoU2Ft
cGxpbmcsIGxpbmVDb2xvcikpLnRvLmJlKHRydWUpOwotCi0gICAgICAgICAgICAgICAgICAgIGNv
bnN0IGRpZmYgPSBDaGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5lbmRUaW1lIC0gQ2hhcnRUZXN0LnNh
bXBsZUNsdXN0ZXIuc3RhcnRUaW1lOwotICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBhbmRl
ZFN0YXJ0VGltZSA9IENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLnN0YXJ0VGltZSAtIDIgKiBkaWZm
OwotICAgICAgICAgICAgICAgICAgICBjaGFydFdpdGhvdXRTYW1wbGluZy5zZXREb21haW4oZXhw
YW5kZWRTdGFydFRpbWUsIENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLmVuZFRpbWUpOwotICAgICAg
ICAgICAgICAgICAgICBjaGFydFdpdGhTYW1wbGluZy5zZXREb21haW4oZXhwYW5kZWRTdGFydFRp
bWUsIENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLmVuZFRpbWUpOwotCi0gICAgICAgICAgICAgICAg
ICAgIENhbnZhc1Rlc3QuZmlsbENhbnZhc0JlZm9yZVJlZHJhd0NoZWNrKGNhbnZhc1dpdGhvdXRT
YW1wbGluZyk7Ci0gICAgICAgICAgICAgICAgICAgIENhbnZhc1Rlc3QuZmlsbENhbnZhc0JlZm9y
ZVJlZHJhd0NoZWNrKGNhbnZhc1dpdGhTYW1wbGluZyk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
Zm9yIChjb25zdCBzb3VyY2Ugb2YgY2hhcnRXaXRob3V0U2FtcGxpbmcuc291cmNlTGlzdCgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgc291cmNlLm1lYXN1cmVtZW50U2V0LmZldGNo
QmV0d2VlbihleHBhbmRlZFN0YXJ0VGltZSwgQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuZW5kVGlt
ZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdhaXRGb3JDb21wb25lbnRzVG9SZW5k
ZXIoY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7Ci0gICAgICAgICAg
ICAgICAgICAgIGV4cGVjdChDYW52YXNUZXN0Lmhhc0NhbnZhc0JlZW5SZWRyYXduKGNhbnZhc1dp
dGhvdXRTYW1wbGluZykpLnRvLmJlKHRydWUpOwotICAgICAgICAgICAgICAgICAgICBleHBlY3Qo
Q2FudmFzVGVzdC5oYXNDYW52YXNCZWVuUmVkcmF3bihjYW52YXNXaXRoU2FtcGxpbmcpKS50by5i
ZSh0cnVlKTsKKyAgICAgICAgICAgIGNoYXJ0V2l0aFNhbXBsaW5nLnNldERvbWFpbihDaGFydFRl
c3Quc2FtcGxlQ2x1c3Rlci5zdGFydFRpbWUsIENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLmVuZFRp
bWUpOworICAgICAgICAgICAgY2hhcnRXaXRoU2FtcGxpbmcuZmV0Y2hNZWFzdXJlbWVudFNldHMo
KTsKIAotICAgICAgICAgICAgICAgICAgICBleHBlY3QoQ2FudmFzVGVzdC5jYW52YXNDb250YWlu
c0NvbG9yKGNhbnZhc1dpdGhvdXRTYW1wbGluZywgbGluZUNvbG9yKSkudG8uYmUodHJ1ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGV4cGVjdChDYW52YXNUZXN0LmNhbnZhc0NvbnRhaW5zQ29sb3Io
Y2FudmFzV2l0aFNhbXBsaW5nLCBsaW5lQ29sb3IpKS50by5iZSh0cnVlKTsKKyAgICAgICAgICAg
IGZvciAoY29uc3Qgc291cmNlIG9mIGNoYXJ0V2l0aG91dFNhbXBsaW5nLnNvdXJjZUxpc3QoKSkK
KyAgICAgICAgICAgICAgICBhd2FpdCBzb3VyY2UubWVhc3VyZW1lbnRTZXQuZmV0Y2hCZXR3ZWVu
KENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLnN0YXJ0VGltZSwgQ2hhcnRUZXN0LnNhbXBsZUNsdXN0
ZXIuZW5kVGltZSk7CiAKLSAgICAgICAgICAgICAgICAgICAgQ2FudmFzVGVzdC5leHBlY3RDYW52
YXNlc01pc21hdGNoKGNhbnZhc1dpdGhTYW1wbGluZywgY2FudmFzV2l0aG91dFNhbXBsaW5nKTsK
LSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYXdhaXQg
d2FpdEZvckNvbXBvbmVudHNUb1JlbmRlcihjb250ZXh0KTsKKworICAgICAgICAgICAgY29uc3Qg
Y2FudmFzV2l0aG91dFNhbXBsaW5nID0gY2hhcnRXaXRob3V0U2FtcGxpbmcuY29udGVudCgpLnF1
ZXJ5U2VsZWN0b3IoJ2NhbnZhcycpOworICAgICAgICAgICAgY29uc3QgY2FudmFzV2l0aFNhbXBs
aW5nID0gY2hhcnRXaXRoU2FtcGxpbmcuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJ2NhbnZhcycp
OworCisgICAgICAgICAgICBDYW52YXNUZXN0LmV4cGVjdENhbnZhc2VzTWF0Y2goY2FudmFzV2l0
aFNhbXBsaW5nLCBjYW52YXNXaXRob3V0U2FtcGxpbmcpOworICAgICAgICAgICAgZXhwZWN0KENh
bnZhc1Rlc3QuY2FudmFzQ29udGFpbnNDb2xvcihjYW52YXNXaXRob3V0U2FtcGxpbmcsIGxpbmVD
b2xvcikpLnRvLmJlKHRydWUpOworICAgICAgICAgICAgZXhwZWN0KENhbnZhc1Rlc3QuY2FudmFz
Q29udGFpbnNDb2xvcihjYW52YXNXaXRoU2FtcGxpbmcsIGxpbmVDb2xvcikpLnRvLmJlKHRydWUp
OworCisgICAgICAgICAgICBjb25zdCBkaWZmID0gQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuZW5k
VGltZSAtIENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLnN0YXJ0VGltZTsKKyAgICAgICAgICAgIGNv
bnN0IGV4cGFuZGVkU3RhcnRUaW1lID0gQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuc3RhcnRUaW1l
IC0gMiAqIGRpZmY7CisgICAgICAgICAgICBjaGFydFdpdGhvdXRTYW1wbGluZy5zZXREb21haW4o
ZXhwYW5kZWRTdGFydFRpbWUsIENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLmVuZFRpbWUpOworICAg
ICAgICAgICAgY2hhcnRXaXRoU2FtcGxpbmcuc2V0RG9tYWluKGV4cGFuZGVkU3RhcnRUaW1lLCBD
aGFydFRlc3Quc2FtcGxlQ2x1c3Rlci5lbmRUaW1lKTsKKworICAgICAgICAgICAgZm9yIChjb25z
dCBzb3VyY2Ugb2YgY2hhcnRXaXRob3V0U2FtcGxpbmcuc291cmNlTGlzdCgpKQorICAgICAgICAg
ICAgICAgIGF3YWl0IHNvdXJjZS5tZWFzdXJlbWVudFNldC5mZXRjaEJldHdlZW4oZXhwYW5kZWRT
dGFydFRpbWUsIENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLmVuZFRpbWUpOworCisgICAgICAgICAg
ICBDYW52YXNUZXN0LmZpbGxDYW52YXNCZWZvcmVSZWRyYXdDaGVjayhjYW52YXNXaXRob3V0U2Ft
cGxpbmcpOworICAgICAgICAgICAgQ2FudmFzVGVzdC5maWxsQ2FudmFzQmVmb3JlUmVkcmF3Q2hl
Y2soY2FudmFzV2l0aFNhbXBsaW5nKTsKKworICAgICAgICAgICAgYXdhaXQgd2FpdEZvckNvbXBv
bmVudHNUb1JlbmRlcihjb250ZXh0KTsKKworICAgICAgICAgICAgZXhwZWN0KENhbnZhc1Rlc3Qu
aGFzQ2FudmFzQmVlblJlZHJhd24oY2FudmFzV2l0aG91dFNhbXBsaW5nKSkudG8uYmUodHJ1ZSk7
CisgICAgICAgICAgICBleHBlY3QoQ2FudmFzVGVzdC5oYXNDYW52YXNCZWVuUmVkcmF3bihjYW52
YXNXaXRoU2FtcGxpbmcpKS50by5iZSh0cnVlKTsKKworICAgICAgICAgICAgZXhwZWN0KENhbnZh
c1Rlc3QuY2FudmFzQ29udGFpbnNDb2xvcihjYW52YXNXaXRob3V0U2FtcGxpbmcsIGxpbmVDb2xv
cikpLnRvLmJlKHRydWUpOworICAgICAgICAgICAgZXhwZWN0KENhbnZhc1Rlc3QuY2FudmFzQ29u
dGFpbnNDb2xvcihjYW52YXNXaXRoU2FtcGxpbmcsIGxpbmVDb2xvcikpLnRvLmJlKHRydWUpOwor
CisgICAgICAgICAgICBDYW52YXNUZXN0LmV4cGVjdENhbnZhc2VzTWlzbWF0Y2goY2FudmFzV2l0
aFNhbXBsaW5nLCBjYW52YXNXaXRob3V0U2FtcGxpbmcpOwogICAgICAgICB9KTsKIAotICAgICAg
ICBpdCgnc2hvdWxkIHJlbmRlciBhbm5vdGF0aW9ucycsICgpID0+IHsKLSAgICAgICAgICAgIGNv
bnN0IGNvbnRleHQgPSBuZXcgQnJvd3NpbmdDb250ZXh0KCk7Ci0gICAgICAgICAgICByZXR1cm4g
Q2hhcnRUZXN0LmltcG9ydENoYXJ0U2NyaXB0cyhjb250ZXh0KS50aGVuKCgpID0+IHsKLSAgICAg
ICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge2Fubm90YXRpb25zOiB7IHRleHRTdHlsZTogJyMw
MDAnLCB0ZXh0QmFja2dyb3VuZDogJyNmZmYnLCBtaW5XaWR0aDogMywgYmFySGVpZ2h0OiA3LCBi
YXJTcGFjaW5nOiAyLCBmaWxsU3R5bGU6ICcjY2NjJ319OwotICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXJ0V2l0aG91dEFubm90YXRpb25zID0gQ2hhcnRUZXN0LmNyZWF0ZUNoYXJ0V2l0aFNhbXBs
ZUNsdXN0ZXIoY29udGV4dCwgbnVsbCwgb3B0aW9ucyk7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
Y2hhcnRXaXRoQW5ub3RhdGlvbnMgPSBDaGFydFRlc3QuY3JlYXRlQ2hhcnRXaXRoU2FtcGxlQ2x1
c3Rlcihjb250ZXh0LCBudWxsLCBvcHRpb25zKTsKKyAgICAgICAgaXQoJ3Nob3VsZCByZW5kZXIg
YW5ub3RhdGlvbnMnLCBhc3luYyAoKSA9PiB7CisgICAgICAgICAgICBjb25zdCBjb250ZXh0ID0g
bmV3IEJyb3dzaW5nQ29udGV4dDsKKyAgICAgICAgICAgIGF3YWl0IENoYXJ0VGVzdC5pbXBvcnRD
aGFydFNjcmlwdHMoY29udGV4dCk7CiAKLSAgICAgICAgICAgICAgICBjaGFydFdpdGhvdXRBbm5v
dGF0aW9ucy5zZXREb21haW4oQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuc3RhcnRUaW1lLCBDaGFy
dFRlc3Quc2FtcGxlQ2x1c3Rlci5lbmRUaW1lKTsKLSAgICAgICAgICAgICAgICBjaGFydFdpdGhv
dXRBbm5vdGF0aW9ucy5mZXRjaE1lYXN1cmVtZW50U2V0cygpOwotICAgICAgICAgICAgICAgIENo
YXJ0VGVzdC5yZXNwb25kV2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4dC5zeW1ib2xzLk1vY2tSZW1v
dGVBUEkucmVxdWVzdHNbMF0pOworICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHthbm5vdGF0
aW9uczogeyB0ZXh0U3R5bGU6ICcjMDAwJywgdGV4dEJhY2tncm91bmQ6ICcjZmZmJywgbWluV2lk
dGg6IDMsIGJhckhlaWdodDogNywgYmFyU3BhY2luZzogMiwgZmlsbFN0eWxlOiAnI2NjYyd9fTsK
KyAgICAgICAgICAgIGNvbnN0IGNoYXJ0V2l0aG91dEFubm90YXRpb25zID0gQ2hhcnRUZXN0LmNy
ZWF0ZUNoYXJ0V2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4dCwgbnVsbCwgb3B0aW9ucyk7CisgICAg
ICAgICAgICBjb25zdCBjaGFydFdpdGhBbm5vdGF0aW9ucyA9IENoYXJ0VGVzdC5jcmVhdGVDaGFy
dFdpdGhTYW1wbGVDbHVzdGVyKGNvbnRleHQsIG51bGwsIG9wdGlvbnMpOwogCi0gICAgICAgICAg
ICAgICAgY2hhcnRXaXRoQW5ub3RhdGlvbnMuc2V0RG9tYWluKENoYXJ0VGVzdC5zYW1wbGVDbHVz
dGVyLnN0YXJ0VGltZSwgQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuZW5kVGltZSk7Ci0gICAgICAg
ICAgICAgICAgY2hhcnRXaXRoQW5ub3RhdGlvbnMuZmV0Y2hNZWFzdXJlbWVudFNldHMoKTsKKyAg
ICAgICAgICAgIGNoYXJ0V2l0aG91dEFubm90YXRpb25zLnNldERvbWFpbihDaGFydFRlc3Quc2Ft
cGxlQ2x1c3Rlci5zdGFydFRpbWUsIENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLmVuZFRpbWUpOwor
ICAgICAgICAgICAgY2hhcnRXaXRob3V0QW5ub3RhdGlvbnMuZmV0Y2hNZWFzdXJlbWVudFNldHMo
KTsKKyAgICAgICAgICAgIENoYXJ0VGVzdC5yZXNwb25kV2l0aFNhbXBsZUNsdXN0ZXIoY29udGV4
dC5zeW1ib2xzLk1vY2tSZW1vdGVBUEkucmVxdWVzdHNbMF0pOwogCi0gICAgICAgICAgICAgICAg
bGV0IGNhbnZhc1dpdGhBbm5vdGF0aW9uczsKLSAgICAgICAgICAgICAgICByZXR1cm4gd2FpdEZv
ckNvbXBvbmVudHNUb1JlbmRlcihjb250ZXh0KS50aGVuKCgpID0+IHsKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3QgZGlmZiA9IENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLmVuZFRpbWUgLSBDaGFy
dFRlc3Quc2FtcGxlQ2x1c3Rlci5zdGFydFRpbWU7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXJ0
V2l0aEFubm90YXRpb25zLnNldEFubm90YXRpb25zKFt7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzdGFydFRpbWU6IENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLnN0YXJ0VGltZSArIGRpZmYgLyA0
LAotICAgICAgICAgICAgICAgICAgICAgICAgZW5kVGltZTogQ2hhcnRUZXN0LnNhbXBsZUNsdXN0
ZXIuc3RhcnRUaW1lICsgZGlmZiAvIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDog
J2hlbGxvLCB3b3JsZCcsCi0gICAgICAgICAgICAgICAgICAgIH1dKTsKLQotICAgICAgICAgICAg
ICAgICAgICBjYW52YXNXaXRoQW5ub3RhdGlvbnMgPSBjaGFydFdpdGhBbm5vdGF0aW9ucy5jb250
ZW50KCkucXVlcnlTZWxlY3RvcignY2FudmFzJyk7Ci0gICAgICAgICAgICAgICAgICAgIENhbnZh
c1Rlc3QuZmlsbENhbnZhc0JlZm9yZVJlZHJhd0NoZWNrKGNhbnZhc1dpdGhBbm5vdGF0aW9ucyk7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB3YWl0Rm9yQ29tcG9uZW50c1RvUmVuZGVyKGNv
bnRleHQpOwotICAgICAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewotICAgICAgICAgICAgICAg
ICAgICBleHBlY3QoQ2FudmFzVGVzdC5oYXNDYW52YXNCZWVuUmVkcmF3bihjYW52YXNXaXRoQW5u
b3RhdGlvbnMpKS50by5iZSh0cnVlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2FudmFzV2l0aG91dEFubm90YXRpb25zID0gY2hhcnRXaXRob3V0QW5ub3Rh
dGlvbnMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJ2NhbnZhcycpOwotICAgICAgICAgICAgICAg
ICAgICBDYW52YXNUZXN0LmV4cGVjdENhbnZhc2VzTWlzbWF0Y2goY2FudmFzV2l0aEFubm90YXRp
b25zLCBjYW52YXNXaXRob3V0QW5ub3RhdGlvbnMpOwotICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICBjaGFydFdpdGhBbm5vdGF0aW9ucy5zZXREb21haW4o
Q2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuc3RhcnRUaW1lLCBDaGFydFRlc3Quc2FtcGxlQ2x1c3Rl
ci5lbmRUaW1lKTsKKyAgICAgICAgICAgIGNoYXJ0V2l0aEFubm90YXRpb25zLmZldGNoTWVhc3Vy
ZW1lbnRTZXRzKCk7CisKKyAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JDb21wb25lbnRzVG9SZW5k
ZXIoY29udGV4dCk7CisKKyAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBDaGFydFRlc3Quc2FtcGxl
Q2x1c3Rlci5lbmRUaW1lIC0gQ2hhcnRUZXN0LnNhbXBsZUNsdXN0ZXIuc3RhcnRUaW1lOworICAg
ICAgICAgICAgY2hhcnRXaXRoQW5ub3RhdGlvbnMuc2V0QW5ub3RhdGlvbnMoW3sKKyAgICAgICAg
ICAgICAgICBzdGFydFRpbWU6IENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVyLnN0YXJ0VGltZSArIGRp
ZmYgLyA0LAorICAgICAgICAgICAgICAgIGVuZFRpbWU6IENoYXJ0VGVzdC5zYW1wbGVDbHVzdGVy
LnN0YXJ0VGltZSArIGRpZmYgLyAyLAorICAgICAgICAgICAgICAgIGxhYmVsOiAnaGVsbG8sIHdv
cmxkJywKKyAgICAgICAgICAgIH1dKTsKKworICAgICAgICAgICAgY29uc3QgY2FudmFzV2l0aEFu
bm90YXRpb25zID0gY2hhcnRXaXRoQW5ub3RhdGlvbnMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3Io
J2NhbnZhcycpOworICAgICAgICAgICAgQ2FudmFzVGVzdC5maWxsQ2FudmFzQmVmb3JlUmVkcmF3
Q2hlY2soY2FudmFzV2l0aEFubm90YXRpb25zKTsKKworICAgICAgICAgICAgYXdhaXQgd2FpdEZv
ckNvbXBvbmVudHNUb1JlbmRlcihjb250ZXh0KTsKKworICAgICAgICAgICAgZXhwZWN0KENhbnZh
c1Rlc3QuaGFzQ2FudmFzQmVlblJlZHJhd24oY2FudmFzV2l0aEFubm90YXRpb25zKSkudG8uYmUo
dHJ1ZSk7CisgICAgICAgIAorICAgICAgICAgICAgY29uc3QgY2FudmFzV2l0aG91dEFubm90YXRp
b25zID0gY2hhcnRXaXRob3V0QW5ub3RhdGlvbnMuY29udGVudCgpLnF1ZXJ5U2VsZWN0b3IoJ2Nh
bnZhcycpOworICAgICAgICAgICAgQ2FudmFzVGVzdC5leHBlY3RDYW52YXNlc01pc21hdGNoKGNh
bnZhc1dpdGhBbm5vdGF0aW9ucywgY2FudmFzV2l0aG91dEFubm90YXRpb25zKTsKICAgICAgICAg
fSk7CiAgICAgfSk7CiAK
</data>
<flag name="review"
          id="441623"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>