<?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>143774</bug_id>
          
          <creation_ts>2015-04-15 06:57:33 -0700</creation_ts>
          <short_desc>Streams API tests should have a common timeout</short_desc>
          <delta_ts>2015-06-16 03:42:19 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>143363</blocked>
    
    <blocked>143778</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Xabier Rodríguez Calvar">calvaris</reporter>
          <assigned_to name="Xabier Rodríguez Calvar">calvaris</assigned_to>
          <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1085470</commentid>
    <comment_count>0</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-04-15 06:57:33 -0700</bug_when>
    <thetext>Streams API tests should have a common timeout</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085471</commentid>
    <comment_count>1</comment_count>
      <attachid>250787</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-04-15 07:04:14 -0700</bug_when>
    <thetext>Created attachment 250787
Patch

Sets a default timeout of 150ms for all testharness tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085474</commentid>
    <comment_count>2</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-04-15 08:09:52 -0700</bug_when>
    <thetext>I know this solution sucks, but there is no other way to get the properties set to the test. setup({timeout: 150}) does not work because those properties are for the test suite, not for the tests themselves.

I suggest we land this because it is needed for our bots and in parallel I&apos;ll try to patch testharness upstream.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085476</commentid>
    <comment_count>3</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-04-15 08:12:01 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; I suggest we land this because it is needed for our bots and in parallel
&gt; I&apos;ll try to patch testharness upstream.


Latest committed streams API patch failed some tests in slower bots because of timeout value being to low. Hence the idea to increase it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085477</commentid>
    <comment_count>4</comment_count>
      <attachid>250787</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-04-15 08:18:30 -0700</bug_when>
    <thetext>Comment on attachment 250787
Patch

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

&gt; LayoutTests/resources/testharnessreport.js:16
&gt; +

I would not add this here.
Maybe we will need something like this if more WebKit testharness tests appear.

At the moment, it might be better to add it in each of the 7 test files we have.
That is duplicating 7 lines but in the future, if a specific test file is failing, we could then increase it per test/per test file, without increasing for the other files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085597</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-04-15 11:11:44 -0700</bug_when>
    <thetext>I don&apos;t think that 150ms ever makes sense in a regression test, unless we retry when the timeout passes. It is a very short period of time, a test can legitimately stall for seconds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085870</commentid>
    <comment_count>6</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-04-16 03:17:58 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; I don&apos;t think that 150ms ever makes sense in a regression test, unless we
&gt; retry when the timeout passes. It is a very short period of time, a test can
&gt; legitimately stall for seconds.

I don&apos;t know if you can do that with testharness, at least automatically. The only solution I can think of is splitting all tests in single files and letting the webkit test runner handle the timeouts, but we are speaking of files with a lot of test, more than 20.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085876</commentid>
    <comment_count>7</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-04-16 04:41:08 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; I don&apos;t think that 150ms ever makes sense in a regression test, unless we
&gt; &gt; retry when the timeout passes. It is a very short period of time, a test can
&gt; &gt; legitimately stall for seconds.
&gt; 
&gt; I don&apos;t know if you can do that with testharness, at least automatically.
&gt; The only solution I can think of is splitting all tests in single files and
&gt; letting the webkit test runner handle the timeouts, but we are speaking of
&gt; files with a lot of test, more than 20.

There are 2 timeouts: WK test runner and test harness. We want test harness ones to be short enough so that test runner timeout is not hit. 
We could set the test harness timeout per file depending on the number of timeouting tests in the file. The less timeouting tests in a file, the longer the test harness timeout value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085944</commentid>
    <comment_count>8</comment_count>
      <attachid>250787</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-04-16 09:33:32 -0700</bug_when>
    <thetext>Comment on attachment 250787
Patch

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

&gt; LayoutTests/ChangeLog:23
&gt; +        * resources/testharnessreport.js: Added default property variables
&gt; +        for tests including a timeout of 150ms.

If any timeout is short (shorter than, say, 5 seconds), then tests will be flaky. That&apos;s not OK.

Please find a way to test without introducing flakiness. This may mean finding a different way to structure the tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085958</commentid>
    <comment_count>9</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-04-16 10:25:04 -0700</bug_when>
    <thetext>For the moment, we could just comment out the failing tests. We would umcomment them as we add features. And no more need to set specific timeouts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086003</commentid>
    <comment_count>10</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2015-04-16 11:55:32 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 250787 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=250787&amp;action=review
&gt; 
&gt; &gt; LayoutTests/ChangeLog:23
&gt; &gt; +        * resources/testharnessreport.js: Added default property variables
&gt; &gt; +        for tests including a timeout of 150ms.
&gt; 
&gt; If any timeout is short (shorter than, say, 5 seconds), then tests will be
&gt; flaky. That&apos;s not OK.
&gt; 
&gt; Please find a way to test without introducing flakiness. This may mean
&gt; finding a different way to structure the tests.

I understand that it is not ok. The issue here is that we have a bunch of tests coming from the spec. Tests related to the same matter are placed in the same file. What we did was translating all those tests from tape to testharness (quick and painless) but we kept the files mapping so that they are easier to maintain. The key here is that a file can contain several tests so as Youenn said we have two timeouts, testharness and WebKitTestRunner.

We can do several things here:

1. Remove (or comment out) the failing tests from the files. This is hard to maintain because for every patch we want to submit we would need to readd or uncomment the harness tests to see if they pass.
2. Create a 1-1 relation between harness tests and webkit tests. This would be hell to maintain because we would need to use either random filenames or name the files after the test description, which is a plain string. Every time a test is changed in the spec we would need to rename our test and that leads to tracing problems, etc.
3. Remove all timeouts. This causes testharness timeouts to trigger webkit timeouts, which renders useless the finegraining of the testharness tests as we don&apos;t have output.

Both things reduce flakyness, but have severe issues that make our lifes much more complicated. Another solution that introduces some flakyness (that is under control right now) is keeping things as we have them now, but setting that timeout for the testharness tests (we won&apos;t touch webkit&apos;s).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086046</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-04-16 13:18:50 -0700</bug_when>
    <thetext>It is not OK to introduce any known flaky tests. Each failure has a cost, as bot watchers see a red bubble, and need to investigate why it&apos;s red.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086048</commentid>
    <comment_count>12</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-04-16 13:19:36 -0700</bug_when>
    <thetext>Flakky tests are painful.
Let&apos;s comment out timeouting tests for the moment and remove specific test timeouts.

If no one objects, we will land these changes tomorrow as an unreviewed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1086259</commentid>
    <comment_count>13</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-04-17 00:03:32 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Flakky tests are painful.
&gt; Let&apos;s comment out timeouting tests for the moment and remove specific test
&gt; timeouts.
&gt; 
&gt; If no one objects, we will land these changes tomorrow as an unreviewed
&gt; patch.

As a first, step, let&apos;s remove all timeout values from testharness tests, except for individual tests that actually timeout.
That way, we still ensure that these tests do not crash.
If that solves flakiness issues, we are good.
Otherwise, let&apos;s comment out flakky tests and readd them when features will get added.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250787</attachid>
            <date>2015-04-15 07:04:14 -0700</date>
            <delta_ts>2015-04-16 09:33:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143774-20150415160314.patch</filename>
            <type>text/plain</type>
            <size>43674</size>
            <attacher name="Xabier Rodríguez Calvar">calvaris</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgyODM5CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYzA0NTdkM2RhYzhmYzBjMGVkYjg2
OGQ2NzBlZDhjM2ZjZTMwZjM5Zi4uZTcxZTU1NGRhYTIwZTIwMzQxMjBjN2I4NmNkODQ5OTBhZGFl
MzY4NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDE1LTA0LTE1ICBZb3Vlbm4gRmFibGV0ICA8
eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+IGFuZCBYYWJpZXIgUm9kcmlndWV6IENhbHZhciA8
Y2FsdmFyaXNAaWdhbGlhLmNvbT4KKworICAgICAgICBTdHJlYW1zIEFQSSB0ZXN0cyBzaG91bGQg
aGF2ZSBhIGNvbW1vbiB0aW1lb3V0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDM3NzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBFdmVuIHdoZW4gc29tZSBwYWdlcyBvbiB0aGUgaW50ZXJuZXQgY2xhaW0g
dGhhdCB5b3UgY2FuIHNldCBhCisgICAgICAgIGRlZmF1bHQgdGltZW91dCBvZiBhbGwgdGVzdHMg
aW4gdGVzdCBoYXJuZXNzLCB5b3UgY2FuJ3QgYmVjYXVzZQorICAgICAgICB0aGUgdGltZW91dCBp
cyByZWFkIGZyb20gdGVzdCBwcm9wZXJ0aWVzIGFuZCB0ZXN0IHByb3BlcnRpZXMgY29tZQorICAg
ICAgICBvbmx5IGZyb20gdGhlIG9uZXMgZGVmaW5lZCBmb3IgZXZlcnkgdGVzdC4gVGhlcmUgaXMg
bm8gcGF0aCBjb2RlCisgICAgICAgIHRvIGdldCBwcm9wZXJ0aWVzIHRoYXQgaXMgbm90IGZyb20g
dGhlIHRlc3Qgb25lcy4KKworICAgICAgICBUaGlzIHBhdGNoIGRlZmluZXMgYSBkZWZhdWx0VGVz
dFByb3BlcnRpZXMgdmFyaWFibGUgdGhhdCBjYW4gYmUKKyAgICAgICAgcGFzc2VkIHRvIGFsbCB0
ZXN0cyAoaW4gdGhpcyBjYXNlIHdlIHVzZSBpcyBvbmx5IGZvciB0aGUgYXN5bmMKKyAgICAgICAg
b25lcykgY29udGFpbmluZyBhIHRpbWVvdXQgb2YgMTUwbXMuCisKKyAgICAgICAgVGhpcyB3YXMg
dGhlIGxlc3MgaW52YXNpdmUgd2F5IHRoYXQgd2UgY291bGQgZmluZCB0aGF0IGRpZG4ndCBtZWFu
CisgICAgICAgIHRvIGNoYW5nZSB0aGUgdGVzdGhhcm5lc3MuanMgZmlsZSBpdHNlbGYgKHRoYXQg
d2UgaW50ZW5kIHRvIHRvdWNoCisgICAgICAgIGFzIGxlc3MgYXMgcG9zc2libGUgdG8ga2VlcCBp
dCBpbiBzeW5jIGVhc2lseSB3aXRoIHVwc3RyZWFtKS4KKworICAgICAgICAqIHJlc291cmNlcy90
ZXN0aGFybmVzc3JlcG9ydC5qczogQWRkZWQgZGVmYXVsdCBwcm9wZXJ0eSB2YXJpYWJsZXMKKyAg
ICAgICAgZm9yIHRlc3RzIGluY2x1ZGluZyBhIHRpbWVvdXQgb2YgMTUwbXMuCisgICAgICAgICog
c3RyZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50YXRpb24vYmFkLXVuZGVybHlpbmctc291cmNlcy5o
dG1sOgorICAgICAgICAqIHN0cmVhbXMvcmVmZXJlbmNlLWltcGxlbWVudGF0aW9uL2JyYW5kLWNo
ZWNrcy5odG1sOgorICAgICAgICAqIHN0cmVhbXMvcmVmZXJlbmNlLWltcGxlbWVudGF0aW9uL2Nv
dW50LXF1ZXVpbmctc3RyYXRlZ3kuaHRtbDoKKyAgICAgICAgKiBzdHJlYW1zL3JlZmVyZW5jZS1p
bXBsZW1lbnRhdGlvbi9yZWFkYWJsZS1zdHJlYW0tY2FuY2VsLmh0bWw6CisgICAgICAgICogc3Ry
ZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50YXRpb24vcmVhZGFibGUtc3RyZWFtLXJlYWRlci5odG1s
OgorICAgICAgICAqIHN0cmVhbXMvcmVmZXJlbmNlLWltcGxlbWVudGF0aW9uL3JlYWRhYmxlLXN0
cmVhbS10ZW1wbGF0ZWQuaHRtbDoKKyAgICAgICAgKiBzdHJlYW1zL3JlZmVyZW5jZS1pbXBsZW1l
bnRhdGlvbi9yZWFkYWJsZS1zdHJlYW0uaHRtbDogUGFzcworICAgICAgICBwcm9wZXJ0aWVzIHRv
IGFsbCBhc3luYyB0ZXN0cy4KKwogMjAxNS0wNC0xNCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFw
QGFwcGxlLmNvbT4KIAogICAgICAgICBpbnNwZWN0b3IvY29uc29sZS9jb25zb2xlLWFwaS5odG1s
IGlzIHZlcnkgc2xvdywgZnJlcXVlbnRseSB0aW1pbmcgb3V0CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMgYi9MYXlvdXRUZXN0cy9yZXNvdXJj
ZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMKaW5kZXggYjI1ZGRkNzk0NGNjOWVjMDcxZmQzOTRjMmY2
ZjMyYTg0OWY2MGRhYi4uNTJlNzEwY2Y0Mzc2MGY0MGU1YTM4YzA3YTdkNmEwZmJmMDY2YWNiNSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzCisr
KyBiL0xheW91dFRlc3RzL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcwpAQCAtMTIsNiAr
MTIsOCBAQAogICogcGFyYW1ldGVycyB0aGV5IGFyZSBjYWxsZWQgd2l0aCBzZWUgdGVzdGhhcm5l
c3MuanMNCiAgKi8NCiANCit2YXIgZGVmYXVsdFRlc3RQcm9wZXJ0aWVzID0geyB0aW1lb3V0OiAx
NTAgfTsNCisNCiAvLyBTZXR1cCBmb3IgV2ViS2l0IEphdmFTY3JpcHQgdGVzdHMNCiBpZiAoc2Vs
Zi50ZXN0UnVubmVyKSB7DQogICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOw0KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3N0cmVhbXMvcmVmZXJlbmNlLWltcGxlbWVudGF0aW9uL2JhZC11bmRl
cmx5aW5nLXNvdXJjZXMuaHRtbCBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVmZXJlbmNlLWltcGxl
bWVudGF0aW9uL2JhZC11bmRlcmx5aW5nLXNvdXJjZXMuaHRtbAppbmRleCAyYjM2NmI4MTJkZjU4
ZGFhZWJjMDM1MzMyMmFmYTFmNDU0ZjFmZjI1Li41NjIwYjU1MzliYThjMzc3MTU2MDhiZTNlMjQw
YzM4OTI3MzFiMWYyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlZmVyZW5jZS1p
bXBsZW1lbnRhdGlvbi9iYWQtdW5kZXJseWluZy1zb3VyY2VzLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvc3RyZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50YXRpb24vYmFkLXVuZGVybHlpbmctc291cmNl
cy5odG1sCkBAIC0yNyw3ICsyNyw3IEBAIHRlc3QoZnVuY3Rpb24oKSB7CiAgICAgfSwgJ2NvbnN0
cnVjdGluZyB0aGUgc3RyZWFtIHNob3VsZCByZS10aHJvdyB0aGUgZXJyb3InKTsKIH0sICdVbmRl
cmx5aW5nIHNvdXJjZSBzdGFydDogdGhyb3dpbmcgbWV0aG9kJyk7CiAKLXZhciB0ZXN0MSA9IGFz
eW5jX3Rlc3QoJ1VuZGVybHlpbmcgc291cmNlOiB0aHJvd2luZyBwdWxsIGdldHRlciAoaW5pdGlh
bCBwdWxsKScsIHsgdGltZW91dDogNTAgfSk7Cit2YXIgdGVzdDEgPSBhc3luY190ZXN0KCdVbmRl
cmx5aW5nIHNvdXJjZTogdGhyb3dpbmcgcHVsbCBnZXR0ZXIgKGluaXRpYWwgcHVsbCknLCBkZWZh
dWx0VGVzdFByb3BlcnRpZXMpOwogdGVzdDEuc3RlcChmdW5jdGlvbigpIHsKICAgICB2YXIgdGhl
RXJyb3IgPSBuZXcgRXJyb3IoJ2EgdW5pcXVlIHN0cmluZycpOwogICAgIHZhciBycyA9IG5ldyBS
ZWFkYWJsZVN0cmVhbSh7CkBAIC00NCw3ICs0NCw3IEBAIHRlc3QxLnN0ZXAoZnVuY3Rpb24oKSB7
CiAgICAgICAgIH0pKTsKIH0pOwogCi12YXIgdGVzdDIgPSBhc3luY190ZXN0KCdVbmRlcmx5aW5n
IHNvdXJjZTogdGhyb3dpbmcgcHVsbCBtZXRob2QgKGluaXRpYWwgcHVsbCknLCB7IHRpbWVvdXQ6
IDUwIH0pOwordmFyIHRlc3QyID0gYXN5bmNfdGVzdCgnVW5kZXJseWluZyBzb3VyY2U6IHRocm93
aW5nIHB1bGwgbWV0aG9kIChpbml0aWFsIHB1bGwpJywgZGVmYXVsdFRlc3RQcm9wZXJ0aWVzKTsK
IHRlc3QyLnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIHRoZUVycm9yID0gbmV3IEVycm9yKCdh
IHVuaXF1ZSBzdHJpbmcnKTsKICAgICB2YXIgcnMgPSBuZXcgUmVhZGFibGVTdHJlYW0oewpAQCAt
NjEsNyArNjEsNyBAQCB0ZXN0Mi5zdGVwKGZ1bmN0aW9uKCkgewogICAgICAgICB9KSk7CiB9KTsK
IAotdmFyIHRlc3QzID0gYXN5bmNfdGVzdCgnVW5kZXJseWluZyBzb3VyY2U6IHRocm93aW5nIHB1
bGwgZ2V0dGVyIChzZWNvbmQgcHVsbCknKTsKK3ZhciB0ZXN0MyA9IGFzeW5jX3Rlc3QoJ1VuZGVy
bHlpbmcgc291cmNlOiB0aHJvd2luZyBwdWxsIGdldHRlciAoc2Vjb25kIHB1bGwpJywgZGVmYXVs
dFRlc3RQcm9wZXJ0aWVzKTsKIHRlc3QzLnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIHRoZUVy
cm9yID0gbmV3IEVycm9yKCdhIHVuaXF1ZSBzdHJpbmcnKTsKICAgICB2YXIgY291bnRlciA9IDA7
CkBAIC04OSw3ICs4OSw3IEBAIHRlc3QzLnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgICAgIH0pKTsK
IH0pOwogCi12YXIgdGVzdDQgPSBhc3luY190ZXN0KCdVbmRlcmx5aW5nIHNvdXJjZTogdGhyb3dp
bmcgcHVsbCBtZXRob2QgKHNlY29uZCBwdWxsKScpOwordmFyIHRlc3Q0ID0gYXN5bmNfdGVzdCgn
VW5kZXJseWluZyBzb3VyY2U6IHRocm93aW5nIHB1bGwgbWV0aG9kIChzZWNvbmQgcHVsbCknLCBk
ZWZhdWx0VGVzdFByb3BlcnRpZXMpOwogdGVzdDQuc3RlcChmdW5jdGlvbigpIHsKICAgICB2YXIg
dGhlRXJyb3IgPSBuZXcgRXJyb3IoJ2EgdW5pcXVlIHN0cmluZycpOwogICAgIHZhciBjb3VudGVy
ID0gMDsKQEAgLTExNSw3ICsxMTUsNyBAQCB0ZXN0NC5zdGVwKGZ1bmN0aW9uKCkgewogICAgICAg
ICB9KSk7CiB9KTsKIAotdmFyIHRlc3Q1ID0gYXN5bmNfdGVzdCgnVW5kZXJseWluZyBzb3VyY2U6
IHRocm93aW5nIGNhbmNlbCBnZXR0ZXInKTsKK3ZhciB0ZXN0NSA9IGFzeW5jX3Rlc3QoJ1VuZGVy
bHlpbmcgc291cmNlOiB0aHJvd2luZyBjYW5jZWwgZ2V0dGVyJywgZGVmYXVsdFRlc3RQcm9wZXJ0
aWVzKTsKIHRlc3Q1LnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIHRoZUVycm9yID0gbmV3IEVy
cm9yKCdhIHVuaXF1ZSBzdHJpbmcnKTsKICAgICB2YXIgcnMgPSBuZXcgUmVhZGFibGVTdHJlYW0o
ewpAQCAtMTMyLDcgKzEzMiw3IEBAIHRlc3Q1LnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgICAgIH0p
KTsKIH0pOwogCi12YXIgdGVzdDYgPSBhc3luY190ZXN0KCdVbmRlcmx5aW5nIHNvdXJjZTogdGhy
b3dpbmcgY2FuY2VsIG1ldGhvZCcpOwordmFyIHRlc3Q2ID0gYXN5bmNfdGVzdCgnVW5kZXJseWlu
ZyBzb3VyY2U6IHRocm93aW5nIGNhbmNlbCBtZXRob2QnLCBkZWZhdWx0VGVzdFByb3BlcnRpZXMp
OwogdGVzdDYuc3RlcChmdW5jdGlvbigpIHsKICAgICB2YXIgdGhlRXJyb3IgPSBuZXcgRXJyb3Io
J2EgdW5pcXVlIHN0cmluZycpOwogICAgIHZhciBycyA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7CkBA
IC0xNDksNyArMTQ5LDcgQEAgdGVzdDYuc3RlcChmdW5jdGlvbigpIHsKICAgICAgICAgfSkpOwog
fSk7CiAKLXZhciB0ZXN0NyA9IGFzeW5jX3Rlc3QoJ1VuZGVybHlpbmcgc291cmNlOiB0aHJvd2lu
ZyBzdHJhdGVneSBnZXR0ZXInLCB7IHRpbWVvdXQ6IDUwIH0pOwordmFyIHRlc3Q3ID0gYXN5bmNf
dGVzdCgnVW5kZXJseWluZyBzb3VyY2U6IHRocm93aW5nIHN0cmF0ZWd5IGdldHRlcicsIGRlZmF1
bHRUZXN0UHJvcGVydGllcyk7CiB0ZXN0Ny5zdGVwKGZ1bmN0aW9uKCkgewogICAgIHZhciBzdGFy
dGVkID0gZmFsc2U7CiAgICAgdmFyIHRoZUVycm9yID0gbmV3IEVycm9yKCdhIHVuaXF1ZSBzdHJp
bmcnKTsKQEAgLTE3MSw3ICsxNzEsNyBAQCB0ZXN0Ny5zdGVwKGZ1bmN0aW9uKCkgewogICAgIH0p
KTsKIH0pOwogCi12YXIgdGVzdDggPSBhc3luY190ZXN0KCdVbmRlcmx5aW5nIHNvdXJjZTogdGhy
b3dpbmcgc3RyYXRlZ3kuc2l6ZSBnZXR0ZXInLCB7IHRpbWVvdXQ6IDUwIH0pOwordmFyIHRlc3Q4
ID0gYXN5bmNfdGVzdCgnVW5kZXJseWluZyBzb3VyY2U6IHRocm93aW5nIHN0cmF0ZWd5LnNpemUg
Z2V0dGVyJywgZGVmYXVsdFRlc3RQcm9wZXJ0aWVzKTsKIHRlc3Q4LnN0ZXAoZnVuY3Rpb24oKSB7
CiAgICAgdmFyIHN0YXJ0ZWQgPSBmYWxzZTsKICAgICB2YXIgdGhlRXJyb3IgPSBuZXcgRXJyb3Io
J2EgdW5pcXVlIHN0cmluZycpOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIHRlc3Q4LnN0ZXAoZnVuY3Rp
b24oKSB7CiAgICAgfSkpOwogfSk7CiAKLXZhciB0ZXN0OSA9IGFzeW5jX3Rlc3QoJ1VuZGVybHlp
bmcgc291cmNlOiB0aHJvd2luZyBzdHJhdGVneS5zaXplIG1ldGhvZCcsIHsgdGltZW91dDogNTAg
fSk7Cit2YXIgdGVzdDkgPSBhc3luY190ZXN0KCdVbmRlcmx5aW5nIHNvdXJjZTogdGhyb3dpbmcg
c3RyYXRlZ3kuc2l6ZSBtZXRob2QnLCBkZWZhdWx0VGVzdFByb3BlcnRpZXMpOwogdGVzdDkuc3Rl
cChmdW5jdGlvbigpIHsKICAgICB2YXIgc3RhcnRlZCA9IGZhbHNlOwogICAgIHZhciB0aGVFcnJv
ciA9IG5ldyBFcnJvcignYSB1bmlxdWUgc3RyaW5nJyk7CkBAIC0yMjMsNyArMjIzLDcgQEAgdGVz
dDkuc3RlcChmdW5jdGlvbigpIHsKICAgICB9KSk7CiB9KTsKIAotdmFyIHRlc3QxMCA9IGFzeW5j
X3Rlc3QoJ1VuZGVybHlpbmcgc291cmNlOiB0aHJvd2luZyBzdHJhdGVneS5zaG91bGRBcHBseUJh
Y2twcmVzc3VyZSBnZXR0ZXInLCB7IHRpbWVvdXQ6IDUwIH0pOwordmFyIHRlc3QxMCA9IGFzeW5j
X3Rlc3QoJ1VuZGVybHlpbmcgc291cmNlOiB0aHJvd2luZyBzdHJhdGVneS5zaG91bGRBcHBseUJh
Y2twcmVzc3VyZSBnZXR0ZXInLCBkZWZhdWx0VGVzdFByb3BlcnRpZXMpOwogdGVzdDEwLnN0ZXAo
ZnVuY3Rpb24oKSB7CiAgICAgdmFyIHN0YXJ0ZWQgPSBmYWxzZTsKICAgICB2YXIgdGhlRXJyb3Ig
PSBuZXcgRXJyb3IoJ2EgdW5pcXVlIHN0cmluZycpOwpAQCAtMjQ5LDcgKzI0OSw3IEBAIHRlc3Qx
MC5zdGVwKGZ1bmN0aW9uKCkgewogICAgIH0pKTsKIH0pOwogCi12YXIgdGVzdDExID0gYXN5bmNf
dGVzdCgnVW5kZXJseWluZyBzb3VyY2U6IHRocm93aW5nIHN0cmF0ZWd5LnNob3VsZEFwcGx5QmFj
a3ByZXNzdXJlIG1ldGhvZCcsIHsgdGltZW91dDogNTAgfSk7Cit2YXIgdGVzdDExID0gYXN5bmNf
dGVzdCgnVW5kZXJseWluZyBzb3VyY2U6IHRocm93aW5nIHN0cmF0ZWd5LnNob3VsZEFwcGx5QmFj
a3ByZXNzdXJlIG1ldGhvZCcsIGRlZmF1bHRUZXN0UHJvcGVydGllcyk7CiB0ZXN0MTEuc3RlcChm
dW5jdGlvbigpIHsKICAgICB2YXIgc3RhcnRlZCA9IGZhbHNlOwogICAgIHZhciB0aGVFcnJvciA9
IG5ldyBFcnJvcignYSB1bmlxdWUgc3RyaW5nJyk7CkBAIC0yNzUsNyArMjc1LDcgQEAgdGVzdDEx
LnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgfSkpOwogfSk7CiAKLXZhciB0ZXN0MTIgPSBhc3luY190
ZXN0KCdVbmRlcmx5aW5nIHNvdXJjZTogc3RyYXRlZ3kuc2l6ZSByZXR1cm5pbmcgTmFOJywgeyB0
aW1lb3V0OiA1MCB9KTsKK3ZhciB0ZXN0MTIgPSBhc3luY190ZXN0KCdVbmRlcmx5aW5nIHNvdXJj
ZTogc3RyYXRlZ3kuc2l6ZSByZXR1cm5pbmcgTmFOJywgZGVmYXVsdFRlc3RQcm9wZXJ0aWVzKTsK
IHRlc3QxMi5zdGVwKGZ1bmN0aW9uKCkgewogICAgIHZhciB0aGVFcnJvciA9IHVuZGVmaW5lZDsK
ICAgICB2YXIgcnMgPSBuZXcgUmVhZGFibGVTdHJlYW0oewpAQCAtMzA0LDcgKzMwNCw3IEBAIHRl
c3QxMi5zdGVwKGZ1bmN0aW9uKCkgewogICAgIH0pKTsKIH0pOwogCi12YXIgdGVzdDEzID0gYXN5
bmNfdGVzdCgnVW5kZXJseWluZyBzb3VyY2U6IHN0cmF0ZWd5LnNpemUgcmV0dXJuaW5nIC1JbmZp
bml0eScsIHsgdGltZW91dDogNTAgfSk7Cit2YXIgdGVzdDEzID0gYXN5bmNfdGVzdCgnVW5kZXJs
eWluZyBzb3VyY2U6IHN0cmF0ZWd5LnNpemUgcmV0dXJuaW5nIC1JbmZpbml0eScsIGRlZmF1bHRU
ZXN0UHJvcGVydGllcyk7CiB0ZXN0MTMuc3RlcChmdW5jdGlvbigpIHsKICAgICB2YXIgdGhlRXJy
b3IgPSB1bmRlZmluZWQ7CiAgICAgdmFyIHJzID0gbmV3IFJlYWRhYmxlU3RyZWFtKHsKQEAgLTMz
Myw3ICszMzMsNyBAQCB0ZXN0MTMuc3RlcChmdW5jdGlvbigpIHsKICAgICB9KSk7CiB9KTsKIAot
dmFyIHRlc3QxNCA9IGFzeW5jX3Rlc3QoJ1VuZGVybHlpbmcgc291cmNlOiBzdHJhdGVneS5zaXpl
IHJldHVybmluZyArSW5maW5pdHknLCB7IHRpbWVvdXQ6IDUwIH0pOwordmFyIHRlc3QxNCA9IGFz
eW5jX3Rlc3QoJ1VuZGVybHlpbmcgc291cmNlOiBzdHJhdGVneS5zaXplIHJldHVybmluZyArSW5m
aW5pdHknLCBkZWZhdWx0VGVzdFByb3BlcnRpZXMpOwogdGVzdDE0LnN0ZXAoZnVuY3Rpb24oKSB7
CiAgICAgdmFyIHRoZUVycm9yID0gdW5kZWZpbmVkOwogICAgIHZhciBycyA9IG5ldyBSZWFkYWJs
ZVN0cmVhbSh7CkBAIC0zNjIsNyArMzYyLDcgQEAgdGVzdDE0LnN0ZXAoZnVuY3Rpb24oKSB7CiAg
ICAgfSkpOwogfSk7CiAKLXZhciB0ZXN0MTUgPSBhc3luY190ZXN0KCdVbmRlcmx5aW5nIHNvdXJj
ZTogY2FsbGluZyBjbG9zZSB0d2ljZSBvbiBhbiBlbXB0eSBzdHJlYW0gc2hvdWxkIHRocm93IHRo
ZSBzZWNvbmQgdGltZScsIHsgdGltZW91dDogNTAgfSk7Cit2YXIgdGVzdDE1ID0gYXN5bmNfdGVz
dCgnVW5kZXJseWluZyBzb3VyY2U6IGNhbGxpbmcgY2xvc2UgdHdpY2Ugb24gYW4gZW1wdHkgc3Ry
ZWFtIHNob3VsZCB0aHJvdyB0aGUgc2Vjb25kIHRpbWUnLCBkZWZhdWx0VGVzdFByb3BlcnRpZXMp
OwogdGVzdDE1LnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgbmV3IFJlYWRhYmxlU3RyZWFtKHsKICAg
ICAgICAgc3RhcnQ6IGZ1bmN0aW9uKGMpIHsKQEAgLTM3Miw3ICszNzIsNyBAQCB0ZXN0MTUuc3Rl
cChmdW5jdGlvbigpIHsKICAgICB9KS5nZXRSZWFkZXIoKS5jbG9zZWQudGhlbih0ZXN0MTUuc3Rl
cF9mdW5jKGZ1bmN0aW9uKCkgeyB0ZXN0MTUuZG9uZSgnY2xvc2VkIHNob3VsZCBmdWxmaWxsJyk7
IH0pKTsKIH0pOwogCi12YXIgdGVzdDE2ID0gYXN5bmNfdGVzdCgnVW5kZXJseWluZyBzb3VyY2U6
IGNhbGxpbmcgY2xvc2UgdHdpY2Ugb24gYSBub24tZW1wdHkgc3RyZWFtIHNob3VsZCB0aHJvdyB0
aGUgc2Vjb25kIHRpbWUnKTsKK3ZhciB0ZXN0MTYgPSBhc3luY190ZXN0KCdVbmRlcmx5aW5nIHNv
dXJjZTogY2FsbGluZyBjbG9zZSB0d2ljZSBvbiBhIG5vbi1lbXB0eSBzdHJlYW0gc2hvdWxkIHRo
cm93IHRoZSBzZWNvbmQgdGltZScsIGRlZmF1bHRUZXN0UHJvcGVydGllcyk7CiB0ZXN0MTYuc3Rl
cChmdW5jdGlvbigpIHsKICAgICB2YXIgc3RhcnRDYWxsZWQgPSBmYWxzZTsKICAgICB2YXIgcmVh
ZENhbGxlZCA9IGZhbHNlOwpAQCAtMzk2LDcgKzM5Niw3IEBAIHRlc3QxNi5zdGVwKGZ1bmN0aW9u
KCkgewogICAgIH0pKTsKIH0pOwogCi12YXIgdGVzdDE3ID0gYXN5bmNfdGVzdCgnVW5kZXJseWlu
ZyBzb3VyY2U6IGNhbGxpbmcgY2xvc2Ugb24gYW4gZW1wdHkgY2FuY2VsZWQgc3RyZWFtIHNob3Vs
ZCBub3QgdGhyb3cnKTsKK3ZhciB0ZXN0MTcgPSBhc3luY190ZXN0KCdVbmRlcmx5aW5nIHNvdXJj
ZTogY2FsbGluZyBjbG9zZSBvbiBhbiBlbXB0eSBjYW5jZWxlZCBzdHJlYW0gc2hvdWxkIG5vdCB0
aHJvdycsIGRlZmF1bHRUZXN0UHJvcGVydGllcyk7CiB0ZXN0MTcuc3RlcChmdW5jdGlvbigpIHsK
ICAgICB2YXIgY29udHJvbGxlcjsKICAgICB2YXIgc3RhcnRDYWxsZWQgPSBmYWxzZTsKQEAgLTQx
Niw3ICs0MTYsNyBAQCB0ZXN0MTcuc3RlcChmdW5jdGlvbigpIHsKICAgICB9KSk7CiB9KTsKIAot
dmFyIHRlc3QxOCA9IGFzeW5jX3Rlc3QoJ1VuZGVybHlpbmcgc291cmNlOiBjYWxsaW5nIGNsb3Nl
IG9uIGEgbm9uLWVtcHR5IGNhbmNlbGVkIHN0cmVhbSBzaG91bGQgbm90IHRocm93Jyk7Cit2YXIg
dGVzdDE4ID0gYXN5bmNfdGVzdCgnVW5kZXJseWluZyBzb3VyY2U6IGNhbGxpbmcgY2xvc2Ugb24g
YSBub24tZW1wdHkgY2FuY2VsZWQgc3RyZWFtIHNob3VsZCBub3QgdGhyb3cnLCBkZWZhdWx0VGVz
dFByb3BlcnRpZXMpOwogdGVzdDE4LnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIGNvbnRyb2xs
ZXI7CiAgICAgdmFyIHN0YXJ0Q2FsbGVkID0gZmFsc2U7CkBAIC00MzcsNyArNDM3LDcgQEAgdGVz
dDE4LnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgfSkpOwogfSk7CiAKLXZhciB0ZXN0MTkgPSBhc3lu
Y190ZXN0KCdVbmRlcmx5aW5nIHNvdXJjZTogY2FsbGluZyBjbG9zZSBhZnRlciBlcnJvciBzaG91
bGQgdGhyb3cnLCB7IHRpbWVvdXQ6IDUwIH0pOwordmFyIHRlc3QxOSA9IGFzeW5jX3Rlc3QoJ1Vu
ZGVybHlpbmcgc291cmNlOiBjYWxsaW5nIGNsb3NlIGFmdGVyIGVycm9yIHNob3VsZCB0aHJvdycs
IGRlZmF1bHRUZXN0UHJvcGVydGllcyk7CiB0ZXN0MTkuc3RlcChmdW5jdGlvbigpIHsKICAgICB2
YXIgdGhlRXJyb3IgPSBuZXcgRXJyb3IoJ2JvbycpOwogICAgIHZhciBzdGFydENhbGxlZCA9IGZh
bHNlOwpAQCAtNDU0LDcgKzQ1NCw3IEBAIHRlc3QxOS5zdGVwKGZ1bmN0aW9uKCkgewogICAgIH0p
KTsKIH0pOwogCi12YXIgdGVzdDIwID0gYXN5bmNfdGVzdCgnVW5kZXJseWluZyBzb3VyY2U6IGNh
bGxpbmcgZXJyb3IgdHdpY2Ugc2hvdWxkIHRocm93IHRoZSBzZWNvbmQgdGltZScsIHsgdGltZW91
dDogNTAgfSk7Cit2YXIgdGVzdDIwID0gYXN5bmNfdGVzdCgnVW5kZXJseWluZyBzb3VyY2U6IGNh
bGxpbmcgZXJyb3IgdHdpY2Ugc2hvdWxkIHRocm93IHRoZSBzZWNvbmQgdGltZScsIGRlZmF1bHRU
ZXN0UHJvcGVydGllcyk7CiB0ZXN0MjAuc3RlcChmdW5jdGlvbigpIHsKICAgICB2YXIgdGhlRXJy
b3IgPSBuZXcgRXJyb3IoJ2JvbycpOwogICAgIHZhciBzdGFydENhbGxlZCA9IGZhbHNlOwpAQCAt
NDcxLDcgKzQ3MSw3IEBAIHRlc3QyMC5zdGVwKGZ1bmN0aW9uKCkgewogICAgIH0pKTsKIH0pOwog
Ci12YXIgdGVzdDIxID0gYXN5bmNfdGVzdCgnVW5kZXJseWluZyBzb3VyY2U6IGNhbGxpbmcgZXJy
b3IgYWZ0ZXIgY2xvc2Ugc2hvdWxkIHRocm93JywgeyB0aW1lb3V0OiA1MCB9KTsKK3ZhciB0ZXN0
MjEgPSBhc3luY190ZXN0KCdVbmRlcmx5aW5nIHNvdXJjZTogY2FsbGluZyBlcnJvciBhZnRlciBj
bG9zZSBzaG91bGQgdGhyb3cnLCBkZWZhdWx0VGVzdFByb3BlcnRpZXMpOwogdGVzdDIxLnN0ZXAo
ZnVuY3Rpb24oKSB7CiAgICAgdmFyIHN0YXJ0Q2FsbGVkID0gZmFsc2U7CiAgICAgbmV3IFJlYWRh
YmxlU3RyZWFtKHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0cmVhbXMvcmVmZXJlbmNlLWlt
cGxlbWVudGF0aW9uL2JyYW5kLWNoZWNrcy5odG1sIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWZl
cmVuY2UtaW1wbGVtZW50YXRpb24vYnJhbmQtY2hlY2tzLmh0bWwKaW5kZXggOWNiZjExZDI2NjZi
YWU1ODdlNjllMGU2NmVjMDNjYTBlY2MyMjk4NC4uODM1MjljMmUxMGZiMWM3OWZlNDMwMjI4MTBj
ZjhjNGE4ODZmYzE2NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWZlcmVuY2Ut
aW1wbGVtZW50YXRpb24vYnJhbmQtY2hlY2tzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvc3RyZWFt
cy9yZWZlcmVuY2UtaW1wbGVtZW50YXRpb24vYnJhbmQtY2hlY2tzLmh0bWwKQEAgLTExOCwxOSAr
MTE4LDE5IEBAIHRlc3QoZnVuY3Rpb24oKSB7CiAgICAgYXNzZXJ0X3Rocm93cyhuZXcgVHlwZUVy
cm9yKCksIGZ1bmN0aW9uKCkgeyBuZXcgUmVhZGFibGVTdHJlYW1SZWFkZXIoZmFrZVJlYWRhYmxl
U3RyZWFtKCkpOyB9LCAnQ29uc3RydWN0aW5nIGEgUmVhZGFibGVTdHJlYW1SZWFkZXIgc2hvdWxk
IHRocm93Jyk7CiB9LCAnUmVhZGFibGVTdHJlYW1SZWFkZXIgZW5mb3JjZXMgYSBicmFuZCBjaGVj
ayBvbiBpdHMgYXJndW1lbnQnKTsKIAotdmFyIHRlc3QxID0gYXN5bmNfdGVzdCgnUmVhZGFibGVT
dHJlYW1SZWFkZXIucHJvdG90eXBlLmNsb3NlZCBlbmZvcmNlcyBhIGJyYW5kIGNoZWNrJyk7Cit2
YXIgdGVzdDEgPSBhc3luY190ZXN0KCdSZWFkYWJsZVN0cmVhbVJlYWRlci5wcm90b3R5cGUuY2xv
c2VkIGVuZm9yY2VzIGEgYnJhbmQgY2hlY2snLCBkZWZhdWx0VGVzdFByb3BlcnRpZXMpOwogdGVz
dDEuc3RlcChmdW5jdGlvbigpIHsKICAgICBnZXR0ZXJSZWplY3RzKHRlc3QxLCBSZWFkYWJsZVN0
cmVhbVJlYWRlci5wcm90b3R5cGUsICdjbG9zZWQnLCBmYWtlUmVhZGFibGVTdHJlYW1SZWFkZXIo
KSk7CiAgICAgZ2V0dGVyUmVqZWN0cyh0ZXN0MSwgUmVhZGFibGVTdHJlYW1SZWFkZXIucHJvdG90
eXBlLCAnY2xvc2VkJywgcmVhbFJlYWRhYmxlU3RyZWFtKCksIHRydWUpOwogfSk7CiAKLXZhciB0
ZXN0MiA9IGFzeW5jX3Rlc3QoJ1JlYWRhYmxlU3RyZWFtUmVhZGVyLnByb3RvdHlwZS5jYW5jZWwg
ZW5mb3JjZXMgYSBicmFuZCBjaGVjaycpOwordmFyIHRlc3QyID0gYXN5bmNfdGVzdCgnUmVhZGFi
bGVTdHJlYW1SZWFkZXIucHJvdG90eXBlLmNhbmNlbCBlbmZvcmNlcyBhIGJyYW5kIGNoZWNrJywg
ZGVmYXVsdFRlc3RQcm9wZXJ0aWVzKTsKIHRlc3QyLnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgbWV0
aG9kUmVqZWN0cyh0ZXN0MiwgUmVhZGFibGVTdHJlYW1SZWFkZXIucHJvdG90eXBlLCAnY2FuY2Vs
JywgZmFrZVJlYWRhYmxlU3RyZWFtUmVhZGVyKCkpOwogICAgIG1ldGhvZFJlamVjdHModGVzdDIs
IFJlYWRhYmxlU3RyZWFtUmVhZGVyLnByb3RvdHlwZSwgJ2NhbmNlbCcsIHJlYWxSZWFkYWJsZVN0
cmVhbSgpLCB0cnVlKTsKIH0pOwogCi12YXIgdGVzdDMgPSBhc3luY190ZXN0KCdSZWFkYWJsZVN0
cmVhbVJlYWRlci5wcm90b3R5cGUucmVhZCBlbmZvcmNlcyBhIGJyYW5kIGNoZWNrJyk7Cit2YXIg
dGVzdDMgPSBhc3luY190ZXN0KCdSZWFkYWJsZVN0cmVhbVJlYWRlci5wcm90b3R5cGUucmVhZCBl
bmZvcmNlcyBhIGJyYW5kIGNoZWNrJywgZGVmYXVsdFRlc3RQcm9wZXJ0aWVzKTsKIHRlc3QzLnN0
ZXAoZnVuY3Rpb24oKSB7CiAgICAgbWV0aG9kUmVqZWN0cyh0ZXN0MywgUmVhZGFibGVTdHJlYW1S
ZWFkZXIucHJvdG90eXBlLCAncmVhZCcsIGZha2VSZWFkYWJsZVN0cmVhbVJlYWRlcigpKTsKICAg
ICBtZXRob2RSZWplY3RzKHRlc3QzLCBSZWFkYWJsZVN0cmVhbVJlYWRlci5wcm90b3R5cGUsICdy
ZWFkJywgcmVhbFJlYWRhYmxlU3RyZWFtKCksIHRydWUpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvc3RyZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50YXRpb24vY291bnQtcXVldWluZy1zdHJhdGVn
eS5odG1sIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50YXRpb24vY291
bnQtcXVldWluZy1zdHJhdGVneS5odG1sCmluZGV4IDNiOTY0NWI0Zjk5MzdlNGFlOTQ1ZDc1ZDQy
NzZiYjVhYThiM2RhY2UuLjNiNjI5MTdjNjcwYzgyYjFlOTE5NDQ0ZmY3MzkxMDE2ZGJkZTQ1NTMg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0cmVhbXMvcmVmZXJlbmNlLWltcGxlbWVudGF0aW9u
L2NvdW50LXF1ZXVpbmctc3RyYXRlZ3kuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3Jl
ZmVyZW5jZS1pbXBsZW1lbnRhdGlvbi9jb3VudC1xdWV1aW5nLXN0cmF0ZWd5Lmh0bWwKQEAgLTE3
LDcgKzE3LDcgQEAgdGVzdChmdW5jdGlvbigpIHsKICAgICBuZXcgUmVhZGFibGVTdHJlYW0oeyBz
dHJhdGVneTogbmV3IENvdW50UXVldWluZ1N0cmF0ZWd5KHsgImhpZ2hXYXRlck1hcmsiOiA0IH0p
IH0pOwogfSwgJ0NhbiBjb25zdHJ1Y3QgYSByZWFkYWJsZSBzdHJlYW0gd2l0aCBhIHZhbGlkIENv
dW50UXVldWluZ1N0cmF0ZWd5Jyk7CiAKLXZhciB0ZXN0MSA9IGFzeW5jX3Rlc3QoJ0NvcnJlY3Rs
eSBnb3Zlcm5zIHRoZSByZXR1cm4gdmFsdWUgb2YgYSBSZWFkYWJsZVN0cmVhbVwncyBlbnF1ZXVl
IGZ1bmN0aW9uIChIV00gPSAwKScpOwordmFyIHRlc3QxID0gYXN5bmNfdGVzdCgnQ29ycmVjdGx5
IGdvdmVybnMgdGhlIHJldHVybiB2YWx1ZSBvZiBhIFJlYWRhYmxlU3RyZWFtXCdzIGVucXVldWUg
ZnVuY3Rpb24gKEhXTSA9IDApJywgZGVmYXVsdFRlc3RQcm9wZXJ0aWVzKTsKIHRlc3QxLnN0ZXAo
ZnVuY3Rpb24oKSB7CiAgICAgdmFyIGVucXVldWU7CiAgICAgdmFyIHJzID0gbmV3IFJlYWRhYmxl
U3RyZWFtKHsKQEAgLTUyLDcgKzUyLDcgQEAgdGVzdDEuc3RlcChmdW5jdGlvbigpIHsKICAgICB9
KSkuY2F0Y2godGVzdDEuc3RlcF9mdW5jKGZ1bmN0aW9uKGUpIHsgYXNzZXJ0X3VucmVhY2hlZChl
KTsgfSApKTsKIH0pOwogCi12YXIgdGVzdDIgPSBhc3luY190ZXN0KCdDb3JyZWN0bHkgZ292ZXJu
cyB0aGUgcmV0dXJuIHZhbHVlIG9mIGEgUmVhZGFibGVTdHJlYW1cJ3MgZW5xdWV1ZSBmdW5jdGlv
biAoSFdNID0gMSknKTsKK3ZhciB0ZXN0MiA9IGFzeW5jX3Rlc3QoJ0NvcnJlY3RseSBnb3Zlcm5z
IHRoZSByZXR1cm4gdmFsdWUgb2YgYSBSZWFkYWJsZVN0cmVhbVwncyBlbnF1ZXVlIGZ1bmN0aW9u
IChIV00gPSAxKScsIGRlZmF1bHRUZXN0UHJvcGVydGllcyk7CiB0ZXN0Mi5zdGVwKGZ1bmN0aW9u
KCkgewogICAgIHZhciBlbnF1ZXVlOwogICAgIHZhciBycyA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7
CkBAIC04Nyw3ICs4Nyw3IEBAIHRlc3QyLnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgfSkpLmNhdGNo
KHRlc3QyLnN0ZXBfZnVuYyhmdW5jdGlvbihlKSB7IGFzc2VydF91bnJlYWNoZWQoZSk7IH0gKSk7
CiB9KTsKIAotdmFyIHRlc3QzID0gYXN5bmNfdGVzdCgnQ29ycmVjdGx5IGdvdmVybnMgdGhlIHJl
dHVybiB2YWx1ZSBvZiBhIFJlYWRhYmxlU3RyZWFtXCdzIGVucXVldWUgZnVuY3Rpb24gKEhXTSA9
IDQpJyk7Cit2YXIgdGVzdDMgPSBhc3luY190ZXN0KCdDb3JyZWN0bHkgZ292ZXJucyB0aGUgcmV0
dXJuIHZhbHVlIG9mIGEgUmVhZGFibGVTdHJlYW1cJ3MgZW5xdWV1ZSBmdW5jdGlvbiAoSFdNID0g
NCknLCBkZWZhdWx0VGVzdFByb3BlcnRpZXMpOwogdGVzdDMuc3RlcChmdW5jdGlvbigpIHsKICAg
ICB2YXIgZW5xdWV1ZTsKICAgICB2YXIgcnMgPSBuZXcgUmVhZGFibGVTdHJlYW0oewpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50YXRpb24vcmVhZGFi
bGUtc3RyZWFtLWNhbmNlbC5odG1sIGIvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWZlcmVuY2UtaW1w
bGVtZW50YXRpb24vcmVhZGFibGUtc3RyZWFtLWNhbmNlbC5odG1sCmluZGV4IGIwNmMzODYyZTE1
ZjhlODllNzhkOGYxYWFiZTA3MTU1Mzg0ZGJjMzguLmNiOTZkNmZjNDZkYjBhZjc4NWMxOTEwNDBj
M2Y3MDViMmEyZjIxYWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0cmVhbXMvcmVmZXJlbmNl
LWltcGxlbWVudGF0aW9uL3JlYWRhYmxlLXN0cmVhbS1jYW5jZWwuaHRtbAorKysgYi9MYXlvdXRU
ZXN0cy9zdHJlYW1zL3JlZmVyZW5jZS1pbXBsZW1lbnRhdGlvbi9yZWFkYWJsZS1zdHJlYW0tY2Fu
Y2VsLmh0bWwKQEAgLTMsNyArMyw3IEBACiA8c2NyaXB0IHNyYz0nLi4vLi4vcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzcmVwb3J0LmpzJz48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSdyZXNvdXJjZXMvc3Ry
ZWFtcy11dGlscy5qcyc+PC9zY3JpcHQ+CiA8c2NyaXB0PgotdmFyIHRlc3QxID0gYXN5bmNfdGVz
dCgnUmVhZGFibGVTdHJlYW0gY2FuY2VsbGF0aW9uOiBpbnRlZ3JhdGlvbiB0ZXN0IG9uIGFuIGlu
ZmluaXRlIHN0cmVhbSBkZXJpdmVkIGZyb20gYSByYW5kb20gcHVzaCBzb3VyY2UnKTsKK3ZhciB0
ZXN0MSA9IGFzeW5jX3Rlc3QoJ1JlYWRhYmxlU3RyZWFtIGNhbmNlbGxhdGlvbjogaW50ZWdyYXRp
b24gdGVzdCBvbiBhbiBpbmZpbml0ZSBzdHJlYW0gZGVyaXZlZCBmcm9tIGEgcmFuZG9tIHB1c2gg
c291cmNlJywgZGVmYXVsdFRlc3RQcm9wZXJ0aWVzKTsKIHRlc3QxLnN0ZXAoZnVuY3Rpb24oKSB7
CiAgICAgdmFyIHJhbmRvbVNvdXJjZSA9IG5ldyBSYW5kb21QdXNoU291cmNlKCk7CiAKQEAgLTY0
LDcgKzY0LDcgQEAgdGVzdChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICd0aGUgZXJy
b3IgcGFzc2VkIHRvIHRoZSB1bmRlcmx5aW5nIHNvdXJjZVwncyBjYW5jZWwgbWV0aG9kIHNob3Vs
ZCBlcXVhbCB0aGUgb25lIHBhc3NlZCB0byB0aGUgc3RyZWFtXCdzIGNhbmNlbCcpOwogfSwgJ1Jl
YWRhYmxlU3RyZWFtIGNhbmNlbGxhdGlvbjogY2FuY2VsKHJlYXNvbikgc2hvdWxkIHBhc3MgdGhy
b3VnaCB0aGUgZ2l2ZW4gcmVhc29uIHRvIHRoZSB1bmRlcmx5aW5nIHNvdXJjZScpOwogCi12YXIg
dGVzdDIgPSBhc3luY190ZXN0KCdSZWFkYWJsZVN0cmVhbSBjYW5jZWxsYXRpb246IGNhbmNlbCgp
IG9uIGEgbG9ja2VkIHN0cmVhbSBzaG91bGQgZmFpbCBhbmQgbm90IGNhbGwgdGhlIHVuZGVybHlp
bmcgc291cmNlIGNhbmNlbCcpOwordmFyIHRlc3QyID0gYXN5bmNfdGVzdCgnUmVhZGFibGVTdHJl
YW0gY2FuY2VsbGF0aW9uOiBjYW5jZWwoKSBvbiBhIGxvY2tlZCBzdHJlYW0gc2hvdWxkIGZhaWwg
YW5kIG5vdCBjYWxsIHRoZSB1bmRlcmx5aW5nIHNvdXJjZSBjYW5jZWwnLCBkZWZhdWx0VGVzdFBy
b3BlcnRpZXMpOwogdGVzdDIuc3RlcChmdW5jdGlvbigpIHsKICAgICB2YXIgcnMgPSBuZXcgUmVh
ZGFibGVTdHJlYW0oewogICAgICAgICBzdGFydDogZnVuY3Rpb24oYykgewpAQCAtOTEsNyArOTEs
NyBAQCB0ZXN0Mi5zdGVwKGZ1bmN0aW9uKCkgewogICAgIH0pKTsKIH0pOwogCi12YXIgdGVzdDMg
PSBhc3luY190ZXN0KCdSZWFkYWJsZVN0cmVhbSBjYW5jZWxsYXRpb246IHJldHVybmluZyBhIHZh
bHVlIGZyb20gdGhlIHVuZGVybHlpbmcgc291cmNlXCdzIGNhbmNlbCBzaG91bGQgbm90IGFmZmVj
dCB0aGUgZnVsZmlsbG1lbnQgdmFsdWUgb2YgdGhlIHByb21pc2UgcmV0dXJuZWQgYnkgdGhlIHN0
cmVhbVwncyBjYW5jZWwnKTsKK3ZhciB0ZXN0MyA9IGFzeW5jX3Rlc3QoJ1JlYWRhYmxlU3RyZWFt
IGNhbmNlbGxhdGlvbjogcmV0dXJuaW5nIGEgdmFsdWUgZnJvbSB0aGUgdW5kZXJseWluZyBzb3Vy
Y2VcJ3MgY2FuY2VsIHNob3VsZCBub3QgYWZmZWN0IHRoZSBmdWxmaWxsbWVudCB2YWx1ZSBvZiB0
aGUgcHJvbWlzZSByZXR1cm5lZCBieSB0aGUgc3RyZWFtXCdzIGNhbmNlbCcsIGRlZmF1bHRUZXN0
UHJvcGVydGllcyk7CiB0ZXN0My5zdGVwKGZ1bmN0aW9uKCkgewogICAgIHZhciBycyA9IG5ldyBS
ZWFkYWJsZVN0cmVhbSh7CiAgICAgICAgIGNhbmNlbDogZnVuY3Rpb24ocmVhc29uKSB7CkBAIC0x
MDcsNyArMTA3LDcgQEAgdGVzdDMuc3RlcChmdW5jdGlvbigpIHsKICAgICB9KSk7CiB9KTsKIAot
dmFyIHRlc3Q0ID0gYXN5bmNfdGVzdCgnUmVhZGFibGVTdHJlYW0gY2FuY2VsbGF0aW9uOiBpZiB0
aGUgdW5kZXJseWluZyBzb3VyY2VcJ3MgY2FuY2VsIG1ldGhvZCByZXR1cm5zIGEgcHJvbWlzZSwg
dGhlIHByb21pc2UgcmV0dXJuZWQgYnkgdGhlIHN0cmVhbVwncyBjYW5jZWwgc2hvdWxkIGZ1bGZp
bGwgd2hlbiB0aGF0IG9uZSBkb2VzJyk7Cit2YXIgdGVzdDQgPSBhc3luY190ZXN0KCdSZWFkYWJs
ZVN0cmVhbSBjYW5jZWxsYXRpb246IGlmIHRoZSB1bmRlcmx5aW5nIHNvdXJjZVwncyBjYW5jZWwg
bWV0aG9kIHJldHVybnMgYSBwcm9taXNlLCB0aGUgcHJvbWlzZSByZXR1cm5lZCBieSB0aGUgc3Ry
ZWFtXCdzIGNhbmNlbCBzaG91bGQgZnVsZmlsbCB3aGVuIHRoYXQgb25lIGRvZXMnLCBkZWZhdWx0
VGVzdFByb3BlcnRpZXMpOwogdGVzdDQuc3RlcChmdW5jdGlvbigpIHsKICAgICB2YXIgcmVzb2x2
ZVNvdXJjZUNhbmNlbFByb21pc2U7CiAgICAgdmFyIHNvdXJjZUNhbmNlbFByb21pc2VIYXNGdWxm
aWxsZWQgPSBmYWxzZTsKQEAgLTEzNiw3ICsxMzYsNyBAQCB0ZXN0NC5zdGVwKGZ1bmN0aW9uKCkg
ewogICAgIH0pLCBzdGFuZGFyZFRpbWVvdXQpOwogfSk7CiAKLXZhciB0ZXN0NSA9IGFzeW5jX3Rl
c3QoJ1JlYWRhYmxlU3RyZWFtIGNhbmNlbGxhdGlvbjogaWYgdGhlIHVuZGVybHlpbmcgc291cmNl
XCdzIGNhbmNlbCBtZXRob2QgcmV0dXJucyBhIHByb21pc2UsIHRoZSBwcm9taXNlIHJldHVybmVk
IGJ5IHRoZSBzdHJlYW1cJ3MgY2FuY2VsIHNob3VsZCByZWplY3Qgd2hlbiB0aGF0IG9uZSBkb2Vz
Jyk7Cit2YXIgdGVzdDUgPSBhc3luY190ZXN0KCdSZWFkYWJsZVN0cmVhbSBjYW5jZWxsYXRpb246
IGlmIHRoZSB1bmRlcmx5aW5nIHNvdXJjZVwncyBjYW5jZWwgbWV0aG9kIHJldHVybnMgYSBwcm9t
aXNlLCB0aGUgcHJvbWlzZSByZXR1cm5lZCBieSB0aGUgc3RyZWFtXCdzIGNhbmNlbCBzaG91bGQg
cmVqZWN0IHdoZW4gdGhhdCBvbmUgZG9lcycsIGRlZmF1bHRUZXN0UHJvcGVydGllcyk7CiB0ZXN0
NS5zdGVwKGZ1bmN0aW9uKCkgewogICAgIHZhciByZWplY3RTb3VyY2VDYW5jZWxQcm9taXNlOwog
ICAgIHZhciBzb3VyY2VDYW5jZWxQcm9taXNlSGFzUmVqZWN0ZWQgPSBmYWxzZTsKQEAgLTE2OSw3
ICsxNjksNyBAQCB0ZXN0NS5zdGVwKGZ1bmN0aW9uKCkgewogICAgIH0pLCBzdGFuZGFyZFRpbWVv
dXQpOwogfSk7CiAKLXZhciB0ZXN0NiA9IGFzeW5jX3Rlc3QoJ1JlYWRhYmxlU3RyZWFtIGNhbmNl
bGxhdGlvbjogY2FuY2VsbGluZyBiZWZvcmUgc3RhcnQgZmluaXNoZXMgc2hvdWxkIHByZXZlbnQg
cHVsbCgpIGZyb20gYmVpbmcgY2FsbGVkJyk7Cit2YXIgdGVzdDYgPSBhc3luY190ZXN0KCdSZWFk
YWJsZVN0cmVhbSBjYW5jZWxsYXRpb246IGNhbmNlbGxpbmcgYmVmb3JlIHN0YXJ0IGZpbmlzaGVz
IHNob3VsZCBwcmV2ZW50IHB1bGwoKSBmcm9tIGJlaW5nIGNhbGxlZCcsIGRlZmF1bHRUZXN0UHJv
cGVydGllcyk7CiB0ZXN0Ni5zdGVwKGZ1bmN0aW9uKCkgewogICAgIHZhciBycyA9IG5ldyBSZWFk
YWJsZVN0cmVhbSh7CiAgICAgICAgIHB1bGw6IGZ1bmN0aW9uKCkgewpAQCAtMTgyLDcgKzE4Miw3
IEBAIHRlc3Q2LnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgfSkpLmNhdGNoKHRlc3Q2LnN0ZXBfZnVu
YyhmdW5jdGlvbihlKSB7IGFzc2VydF9yZWFjaGVkKGUpOyB9ICkpOwogfSk7CiAKLXZhciB0ZXN0
NyA9IGFzeW5jX3Rlc3QoJ1JlYWRhYmxlU3RyZWFtIGNhbmNlbCBzaG91bGQgZnVsZmlsbCBwcm9t
aXNlIHdoZW4gY2FuY2VsIGNhbGxiYWNrIHdlbnQgZmluZScpOwordmFyIHRlc3Q3ID0gYXN5bmNf
dGVzdCgnUmVhZGFibGVTdHJlYW0gY2FuY2VsIHNob3VsZCBmdWxmaWxsIHByb21pc2Ugd2hlbiBj
YW5jZWwgY2FsbGJhY2sgd2VudCBmaW5lJywgZGVmYXVsdFRlc3RQcm9wZXJ0aWVzKTsKIHRlc3Q3
LnN0ZXAoZnVuY3Rpb24oKQogewogICAgIHZhciBjYW5jZWxSZWNlaXZlZCA9IGZhbHNlOwpAQCAt
MjAzLDcgKzIwMyw3IEBAIHRlc3Q3LnN0ZXAoZnVuY3Rpb24oKQogICAgICAgICB9KSk7CiB9KTsK
IAotdmFyIHRlc3Q4ID0gYXN5bmNfdGVzdCgnUmVhZGFibGVTdHJlYW0gY2FuY2VsIHNob3VsZCBy
ZWplY3QgcHJvbWlzZSB3aGVuIGNhbmNlbCBjYWxsYmFjayByYWlzZXMgYW4gZXhjZXB0aW9uJyk7
Cit2YXIgdGVzdDggPSBhc3luY190ZXN0KCdSZWFkYWJsZVN0cmVhbSBjYW5jZWwgc2hvdWxkIHJl
amVjdCBwcm9taXNlIHdoZW4gY2FuY2VsIGNhbGxiYWNrIHJhaXNlcyBhbiBleGNlcHRpb24nLCBk
ZWZhdWx0VGVzdFByb3BlcnRpZXMpOwogdGVzdDguc3RlcChmdW5jdGlvbigpCiB7CiAgICAgdmFy
IHRocm93bkVycm9yID0gdW5kZWZpbmVkOwpAQCAtMjI3LDcgKzIyNyw3IEBAIHRlc3Q4LnN0ZXAo
ZnVuY3Rpb24oKQogICAgICk7CiB9KTsKIAotdmFyIHRlc3Q5ID0gYXN5bmNfdGVzdCgnUmVhZGFi
bGVTdHJlYW0gY2FuY2VsIHNob3VsZCBmdWxmaWxsIHByb21pc2Ugd2hlbiBjYW5jZWwgY2FsbGJh
Y2sgd2VudCBmaW5lIGFmdGVyIHJldHVybmluZyBhIHByb21pc2UnKTsKK3ZhciB0ZXN0OSA9IGFz
eW5jX3Rlc3QoJ1JlYWRhYmxlU3RyZWFtIGNhbmNlbCBzaG91bGQgZnVsZmlsbCBwcm9taXNlIHdo
ZW4gY2FuY2VsIGNhbGxiYWNrIHdlbnQgZmluZSBhZnRlciByZXR1cm5pbmcgYSBwcm9taXNlJywg
ZGVmYXVsdFRlc3RQcm9wZXJ0aWVzKTsKIHRlc3Q5LnN0ZXAoZnVuY3Rpb24oKQogewogICAgIHZh
ciBjYW5jZWxSZWFzb24gPSAidGVzdCI7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdHJlYW1z
L3JlZmVyZW5jZS1pbXBsZW1lbnRhdGlvbi9yZWFkYWJsZS1zdHJlYW0tcmVhZGVyLmh0bWwgYi9M
YXlvdXRUZXN0cy9zdHJlYW1zL3JlZmVyZW5jZS1pbXBsZW1lbnRhdGlvbi9yZWFkYWJsZS1zdHJl
YW0tcmVhZGVyLmh0bWwKaW5kZXggNDI5NTkwNzUyOThjY2EyZGQzYzg1ODg1YzUwM2JmZDRjNGQ5
ZWJkYy4uYjAyNjU3NTNlYjJiOWZjNmU2NmU3MWI0YzAwMjJmNmUyYWQ5NjZmZCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvc3RyZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50YXRpb24vcmVhZGFibGUt
c3RyZWFtLXJlYWRlci5odG1sCisrKyBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVmZXJlbmNlLWlt
cGxlbWVudGF0aW9uL3JlYWRhYmxlLXN0cmVhbS1yZWFkZXIuaHRtbApAQCAtMTA3LDcgKzEwNyw3
IEBAIHRlc3QoZnVuY3Rpb24oKSB7CiAgICAgbmV3IFJlYWRhYmxlU3RyZWFtUmVhZGVyKHJzKTsg
Ly8gQ29uc3RydWN0aW5nIGRpcmVjdGx5IHNob3VsZCBub3QgdGhyb3cuCiB9LCAnQ29uc3RydWN0
aW5nIGEgUmVhZGFibGVTdHJlYW1SZWFkZXIgZGlyZWN0bHkgc2hvdWxkIGJlIE9LIGlmIHRoZSBz
dHJlYW0gaXMgZXJyb3JlZCcpOwogCi12YXIgdGVzdDEgPSBhc3luY190ZXN0KCdSZWFkaW5nIGZy
b20gYSByZWFkZXIgZm9yIGFuIGVtcHR5IHN0cmVhbSB3aWxsIHdhaXQgdW50aWwgYSBjaHVuayBp
cyBhdmFpbGFibGUnKTsKK3ZhciB0ZXN0MSA9IGFzeW5jX3Rlc3QoJ1JlYWRpbmcgZnJvbSBhIHJl
YWRlciBmb3IgYW4gZW1wdHkgc3RyZWFtIHdpbGwgd2FpdCB1bnRpbCBhIGNodW5rIGlzIGF2YWls
YWJsZScsIGRlZmF1bHRUZXN0UHJvcGVydGllcyk7CiB0ZXN0MS5zdGVwKGZ1bmN0aW9uKCkgewog
ICAgIHZhciBjb250cm9sbGVyOwogICAgIHZhciBycyA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7CkBA
IC0xMjUsNyArMTI1LDcgQEAgdGVzdDEuc3RlcChmdW5jdGlvbigpIHsKICAgICBjb250cm9sbGVy
LmVucXVldWUoJ2EnKTsKIH0pOwogCi12YXIgdGVzdDIgPSBhc3luY190ZXN0KCdjYW5jZWwoKSBv
biBhIHJlYWRlciByZWxlYXNlcyB0aGUgcmVhZGVyIGJlZm9yZSBjYWxsaW5nIHRocm91Z2gnKTsK
K3ZhciB0ZXN0MiA9IGFzeW5jX3Rlc3QoJ2NhbmNlbCgpIG9uIGEgcmVhZGVyIHJlbGVhc2VzIHRo
ZSByZWFkZXIgYmVmb3JlIGNhbGxpbmcgdGhyb3VnaCcsIGRlZmF1bHRUZXN0UHJvcGVydGllcyk7
CiB0ZXN0Mi5zdGVwKGZ1bmN0aW9uKCkgewogICAgIHZhciBjYW5jZWxDYWxsZWQgPSBmYWxzZTsK
ICAgICB2YXIgcGFzc2VkUmVhc29uID0gbmV3IEVycm9yKCdpdCB3YXNuXCd0IHRoZSByaWdodCB0
aW1lLCBzb3JyeScpOwpAQCAtMTQ2LDcgKzE0Niw3IEBAIHRlc3QyLnN0ZXAoZnVuY3Rpb24oKSB7
CiAgICAgICAgIHRlc3QyLnN0ZXBfZnVuYyhmdW5jdGlvbihlKSB7IGFzc2VydF91bnJlYWNoZWQo
J3JlYWRlci5jYW5jZWwoKSBzaG91bGQgbm90IHJlamVjdCcpOyB9KSk7CiB9KTsKIAotdmFyIHRl
c3QzID0gYXN5bmNfdGVzdCgnY2xvc2VkIHNob3VsZCBiZSBmdWxmaWxsZWQgYWZ0ZXIgc3RyZWFt
IGlzIGNsb3NlZCAoLmNsb3NlZCBhY2Nlc3MgYmVmb3JlIGFjcXVpcmluZyknLCB7IHRpbWVvdXQ6
IDUwIH0pOwordmFyIHRlc3QzID0gYXN5bmNfdGVzdCgnY2xvc2VkIHNob3VsZCBiZSBmdWxmaWxs
ZWQgYWZ0ZXIgc3RyZWFtIGlzIGNsb3NlZCAoLmNsb3NlZCBhY2Nlc3MgYmVmb3JlIGFjcXVpcmlu
ZyknLCBkZWZhdWx0VGVzdFByb3BlcnRpZXMpOwogdGVzdDMuc3RlcChmdW5jdGlvbigpIHsKICAg
ICB2YXIgY29udHJvbGxlcjsKICAgICB2YXIgcnMgPSBuZXcgUmVhZGFibGVTdHJlYW0oewpAQCAt
MTYzLDcgKzE2Myw3IEBAIHRlc3QzLnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgY29udHJvbGxlci5j
bG9zZSgpOwogfSk7CiAKLXZhciB0ZXN0NCA9IGFzeW5jX3Rlc3QoJ2Nsb3NlZCBzaG91bGQgYmUg
ZnVsZmlsbGVkIGFmdGVyIHJlYWRlciByZWxlYXNlcyBpdHMgbG9jayAobXVsdGlwbGUgc3RyZWFt
IGxvY2tzKScpOwordmFyIHRlc3Q0ID0gYXN5bmNfdGVzdCgnY2xvc2VkIHNob3VsZCBiZSBmdWxm
aWxsZWQgYWZ0ZXIgcmVhZGVyIHJlbGVhc2VzIGl0cyBsb2NrIChtdWx0aXBsZSBzdHJlYW0gbG9j
a3MpJywgZGVmYXVsdFRlc3RQcm9wZXJ0aWVzKTsKIHRlc3Q0LnN0ZXAoZnVuY3Rpb24oKSB7CiAg
ICAgdmFyIGNvbnRyb2xsZXI7CiAgICAgdmFyIHJlYWRlcjFDbG9zZWQgPSBmYWxzZTsKQEAgLTE5
MCw3ICsxOTAsNyBAQCB0ZXN0NC5zdGVwKGZ1bmN0aW9uKCkgewogICAgIH0pKTsKIH0pOwogCi12
YXIgdGVzdDUgPSBhc3luY190ZXN0KCdNdWx0aXBsZSByZWFkZXJzIGNhbiBhY2Nlc3MgdGhlIHN0
cmVhbSBpbiBzZXF1ZW5jZScpOwordmFyIHRlc3Q1ID0gYXN5bmNfdGVzdCgnTXVsdGlwbGUgcmVh
ZGVycyBjYW4gYWNjZXNzIHRoZSBzdHJlYW0gaW4gc2VxdWVuY2UnLCBkZWZhdWx0VGVzdFByb3Bl
cnRpZXMpOwogdGVzdDUuc3RlcChmdW5jdGlvbigpIHsKICAgICB2YXIgcmVhZENvdW50ID0gMDsK
ICAgICB2YXIgcnMgPSBuZXcgUmVhZGFibGVTdHJlYW0oewpAQCAtMjIxLDcgKzIyMSw3IEBAIHRl
c3Q1LnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgfSksIHN0YW5kYXJkVGltZW91dCk7CiB9KTsKIAot
dmFyIHRlc3Q2ID0gYXN5bmNfdGVzdCgnQ2Fubm90IHVzZSBhbiBhbHJlYWR5LXJlbGVhc2VkIHJl
YWRlciB0byB1bmxvY2sgYSBzdHJlYW0gYWdhaW4nKTsKK3ZhciB0ZXN0NiA9IGFzeW5jX3Rlc3Qo
J0Nhbm5vdCB1c2UgYW4gYWxyZWFkeS1yZWxlYXNlZCByZWFkZXIgdG8gdW5sb2NrIGEgc3RyZWFt
IGFnYWluJywgZGVmYXVsdFRlc3RQcm9wZXJ0aWVzKTsKIHRlc3Q2LnN0ZXAoZnVuY3Rpb24oKSB7
CiAgICAgdmFyIHJzID0gbmV3IFJlYWRhYmxlU3RyZWFtKHsKICAgICAgICAgc3RhcnQ6IGZ1bmN0
aW9uKGMpIHsKQEAgLTI0MSw3ICsyNDEsNyBAQCB0ZXN0Ni5zdGVwKGZ1bmN0aW9uKCkgewogICAg
IH0pKTsKIH0pOwogCi12YXIgdGVzdDcgPSBhc3luY190ZXN0KCdjYW5jZWwoKSBvbiBhIHJlbGVh
c2VkIHJlYWRlciBpcyBhIG5vLW9wIGFuZCBkb2VzIG5vdCBwYXNzIHRocm91Z2gnKTsKK3ZhciB0
ZXN0NyA9IGFzeW5jX3Rlc3QoJ2NhbmNlbCgpIG9uIGEgcmVsZWFzZWQgcmVhZGVyIGlzIGEgbm8t
b3AgYW5kIGRvZXMgbm90IHBhc3MgdGhyb3VnaCcsIGRlZmF1bHRUZXN0UHJvcGVydGllcyk7CiB0
ZXN0Ny5zdGVwKGZ1bmN0aW9uKCkgewogICAgIHZhciByZWFkQ291bnRzID0gMDsKICAgICB2YXIg
Y2FuY2VsbGVkID0gZmFsc2U7CkBAIC0yNzQsNyArMjc0LDcgQEAgdGVzdDcuc3RlcChmdW5jdGlv
bigpIHsKICAgICB9KSwgc3RhbmRhcmRUaW1lb3V0KTsKIH0pOwogCi12YXIgdGVzdDggPSBhc3lu
Y190ZXN0KCdHZXR0aW5nIGEgc2Vjb25kIHJlYWRlciBhZnRlciBlcnJvcmluZyB0aGUgc3RyZWFt
IHNob3VsZCBzdWNjZWVkJyk7Cit2YXIgdGVzdDggPSBhc3luY190ZXN0KCdHZXR0aW5nIGEgc2Vj
b25kIHJlYWRlciBhZnRlciBlcnJvcmluZyB0aGUgc3RyZWFtIHNob3VsZCBzdWNjZWVkJywgZGVm
YXVsdFRlc3RQcm9wZXJ0aWVzKTsKIHRlc3Q4LnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIGNv
bnRyb2xsZXI7CiAgICAgdmFyIHJlY2VpdmVkRXJyb3JzID0gMDsKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3N0cmVhbXMvcmVmZXJlbmNlLWltcGxlbWVudGF0aW9uL3JlYWRhYmxlLXN0cmVhbS10
ZW1wbGF0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3N0cmVhbXMvcmVmZXJlbmNlLWltcGxlbWVudGF0
aW9uL3JlYWRhYmxlLXN0cmVhbS10ZW1wbGF0ZWQuaHRtbAppbmRleCAwOWYwZDcyZGU4Mjc1Yzc0
ZTAzN2UyYjJiYzBhMjk1ZmEzODQyODMyLi44ODZhYmNhNDc2ZTYxNWI3MTg4OGIzMGYzZGFmNDE0
OTVkNzdlMzgyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlZmVyZW5jZS1pbXBs
ZW1lbnRhdGlvbi9yZWFkYWJsZS1zdHJlYW0tdGVtcGxhdGVkLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvc3RyZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50YXRpb24vcmVhZGFibGUtc3RyZWFtLXRlbXBs
YXRlZC5odG1sCkBAIC0yMSw3ICsyMSw3IEBAIGZ1bmN0aW9uIHRlbXBsYXRlZFJTQ2xvc2VkKGxh
YmVsLCBmYWN0b3J5KSB7CiAgICAgdGVzdChmdW5jdGlvbigpIHsKICAgICB9LCAnUnVubmluZyB0
ZW1wbGF0ZWRSU0Nsb3NlZCB3aXRoICcgKyBsYWJlbCk7CiAKLSAgICB2YXIgdGVzdDEgPSBhc3lu
Y190ZXN0KCdjYW5jZWwoKSBzaG91bGQgcmV0dXJuIGEgZGlzdGluY3QgZnVsZmlsbGVkIHByb21p
c2UgZWFjaCB0aW1lJyk7CisgICAgdmFyIHRlc3QxID0gYXN5bmNfdGVzdCgnY2FuY2VsKCkgc2hv
dWxkIHJldHVybiBhIGRpc3RpbmN0IGZ1bGZpbGxlZCBwcm9taXNlIGVhY2ggdGltZScsIGRlZmF1
bHRUZXN0UHJvcGVydGllcyk7CiAgICAgdGVzdDEuc3RlcChmdW5jdGlvbigpIHsKICAgICAgICAg
dmFyIHJzID0gZmFjdG9yeSgpOwogICAgICAgICB2YXIgcHJvbWlzZXNDb3VudCA9IDA7CkBAIC02
MSw3ICs2MSw3IEBAIGZ1bmN0aW9uIHRlbXBsYXRlZFJTRXJyb3JlZChsYWJlbCwgZmFjdG9yeSwg
ZXJyb3IpIHsKICAgICB0ZXN0KGZ1bmN0aW9uKCkgewogICAgIH0sICdSdW5uaW5nIHRlbXBsYXRl
ZFJTRXJyb3JlZCB3aXRoICcgKyBsYWJlbCk7CiAKLSAgICB2YXIgdGVzdDEgPSBhc3luY190ZXN0
KCdnZXRSZWFkZXIoKSBzaG91bGQgcmV0dXJuIGEgcmVhZGVyIHRoYXQgYWN0cyBlcnJvcmVkJyk7
CisgICAgdmFyIHRlc3QxID0gYXN5bmNfdGVzdCgnZ2V0UmVhZGVyKCkgc2hvdWxkIHJldHVybiBh
IHJlYWRlciB0aGF0IGFjdHMgZXJyb3JlZCcsIGRlZmF1bHRUZXN0UHJvcGVydGllcyk7CiAgICAg
dGVzdDEuc3RlcChmdW5jdGlvbigpIHsKICAgICAgICAgdmFyIHJzID0gZmFjdG9yeSgpOwogICAg
ICAgICB2YXIgcHJvbWlzZXNDb3VudCA9IDA7CkBAIC04NCw3ICs4NCw3IEBAIGZ1bmN0aW9uIHRl
bXBsYXRlZFJTRXJyb3JlZFN5bmNPbmx5KGxhYmVsLCBmYWN0b3J5LCBlcnJvcikgewogICAgIHRl
c3QoZnVuY3Rpb24oKSB7CiAgICAgfSwgJ1J1bm5pbmcgdGVtcGxhdGVkUlNFcnJvcmVkU3luY09u
bHkgd2l0aCAnICsgbGFiZWwpOwogCi0gICAgdmFyIHRlc3QxID0gYXN5bmNfdGVzdCgnY2FuY2Vs
KCkgc2hvdWxkIHJldHVybiBhIGRpc3RpbmN0IHJlamVjdGVkIHByb21pc2UgZWFjaCB0aW1lJyk7
CisgICAgdmFyIHRlc3QxID0gYXN5bmNfdGVzdCgnY2FuY2VsKCkgc2hvdWxkIHJldHVybiBhIGRp
c3RpbmN0IHJlamVjdGVkIHByb21pc2UgZWFjaCB0aW1lJywgZGVmYXVsdFRlc3RQcm9wZXJ0aWVz
KTsKICAgICB0ZXN0MS5zdGVwKGZ1bmN0aW9uKCkgewogICAgICAgICB2YXIgcnMgPSBmYWN0b3J5
KCk7CiAgICAgICAgIHZhciBwcm9taXNlc0NvdW50ID0gMDsKQEAgLTEwNCw3ICsxMDQsNyBAQCBm
dW5jdGlvbiB0ZW1wbGF0ZWRSU0Vycm9yZWRTeW5jT25seShsYWJlbCwgZmFjdG9yeSwgZXJyb3Ip
IHsKICAgICAgICAgYXNzZXJ0X25vdF9lcXVhbHMoY2FuY2VsUHJvbWlzZTEsIGNhbmNlbFByb21p
c2UyLCAnY2FuY2VsKCkgY2FsbHMgc2hvdWxkIHJldHVybiBkaXN0aW5jdCBwcm9taXNlcycpOwog
ICAgIH0pOwogCi0gICAgdmFyIHRlc3QyID0gYXN5bmNfdGVzdCgncmVhZGVyIGNhbmNlbCgpIHNo
b3VsZCByZXR1cm4gYSBkaXN0aW5jdCByZWplY3RlZCBwcm9taXNlIGVhY2ggdGltZScpOworICAg
IHZhciB0ZXN0MiA9IGFzeW5jX3Rlc3QoJ3JlYWRlciBjYW5jZWwoKSBzaG91bGQgcmV0dXJuIGEg
ZGlzdGluY3QgcmVqZWN0ZWQgcHJvbWlzZSBlYWNoIHRpbWUnLCBkZWZhdWx0VGVzdFByb3BlcnRp
ZXMpOwogICAgIHRlc3QyLnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgICAgIHZhciBycyA9IGZhY3Rv
cnkoKTsKICAgICAgICAgdmFyIHJlYWRlciA9IHJzLmdldFJlYWRlcigpOwpAQCAtMTUwLDcgKzE1
MCw3IEBAIGZ1bmN0aW9uIHRlbXBsYXRlZFJTRW1wdHlSZWFkZXIobGFiZWwsIGZhY3RvcnkpIHsK
ICAgICAgICAgYXNzZXJ0X2VxdWFscyh0eXBlb2YgcmVhZGVyLnJlbGVhc2VMb2NrLCAnZnVuY3Rp
b24nLCAnaGFzIGEgcmVsZWFzZUxvY2sgbWV0aG9kJyk7CiAgICAgfSwgJ2luc3RhbmNlcyBoYXZl
IHRoZSBjb3JyZWN0IG1ldGhvZHMgYW5kIHByb3BlcnRpZXMnKTsKIAotICAgIHZhciB0ZXN0MSA9
IGFzeW5jX3Rlc3QoJ3JlYWQoKSBzaG91bGQgbmV2ZXIgc2V0dGxlJyk7CisgICAgdmFyIHRlc3Qx
ID0gYXN5bmNfdGVzdCgncmVhZCgpIHNob3VsZCBuZXZlciBzZXR0bGUnLCBkZWZhdWx0VGVzdFBy
b3BlcnRpZXMpOwogICAgIHRlc3QxLnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgICAgIHZhciB7IHJl
YWRlciB9ID0gZmFjdG9yeSgpOwogCkBAIC0xNjIsNyArMTYyLDcgQEAgZnVuY3Rpb24gdGVtcGxh
dGVkUlNFbXB0eVJlYWRlcihsYWJlbCwgZmFjdG9yeSkgewogICAgICAgICBzZXRUaW1lb3V0KHRl
c3QxLnN0ZXBfZnVuYyhmdW5jdGlvbigpIHsgdGVzdDEuZG9uZSgpOyB9KSwgc3RhbmRhcmRUaW1l
b3V0KTsKICAgICB9KTsKIAotICAgIHZhciB0ZXN0MiA9IGFzeW5jX3Rlc3QoJ3R3byByZWFkKClz
IHNob3VsZCBib3RoIG5ldmVyIHNldHRsZScpOworICAgIHZhciB0ZXN0MiA9IGFzeW5jX3Rlc3Qo
J3R3byByZWFkKClzIHNob3VsZCBib3RoIG5ldmVyIHNldHRsZScsIGRlZmF1bHRUZXN0UHJvcGVy
dGllcyk7CiAgICAgdGVzdDIuc3RlcChmdW5jdGlvbigpIHsKICAgICAgICAgdmFyIHsgcmVhZGVy
IH0gPSBmYWN0b3J5KCk7CiAKQEAgLTE5MSw3ICsxOTEsNyBAQCBmdW5jdGlvbiB0ZW1wbGF0ZWRS
U0VtcHR5UmVhZGVyKGxhYmVsLCBmYWN0b3J5KSB7CiAgICAgICAgIGFzc2VydF90aHJvd3MobmV3
IFR5cGVFcnJvcigpLCBmdW5jdGlvbigpIHsgc3RyZWFtLmdldFJlYWRlcigpOyB9LCAnc3RyZWFt
LmdldFJlYWRlcigpIHNob3VsZCB0aHJvdyBhIFR5cGVFcnJvcicpOwogICAgIH0sICdnZXRSZWFk
ZXIoKSBhZ2FpbiBvbiB0aGUgc3RyZWFtIHNob3VsZCBmYWlsJyk7CiAKLSAgICB2YXIgdGVzdDMg
PSBhc3luY190ZXN0KCdyZWxlYXNpbmcgdGhlIGxvY2sgd2l0aCBwZW5kaW5nIHJlYWQgcmVxdWVz
dHMgc2hvdWxkIHRocm93IGJ1dCB0aGUgcmVhZCByZXF1ZXN0cyBzaG91bGQgc3RheSBwZW5kaW5n
Jyk7CisgICAgdmFyIHRlc3QzID0gYXN5bmNfdGVzdCgncmVsZWFzaW5nIHRoZSBsb2NrIHdpdGgg
cGVuZGluZyByZWFkIHJlcXVlc3RzIHNob3VsZCB0aHJvdyBidXQgdGhlIHJlYWQgcmVxdWVzdHMg
c2hvdWxkIHN0YXkgcGVuZGluZycsIGRlZmF1bHRUZXN0UHJvcGVydGllcyk7CiAgICAgdGVzdDMu
c3RlcChmdW5jdGlvbigpIHsKICAgICAgICAgdmFyIHsgcmVhZGVyIH0gPSBmYWN0b3J5KCk7CiAK
QEAgLTIxNSw3ICsyMTUsNyBAQCBmdW5jdGlvbiB0ZW1wbGF0ZWRSU0VtcHR5UmVhZGVyKGxhYmVs
LCBmYWN0b3J5KSB7CiAgICAgICAgIHNldFRpbWVvdXQodGVzdDMuc3RlcF9mdW5jKGZ1bmN0aW9u
KCkgeyB0ZXN0My5kb25lKCk7IH0pLCBzdGFuZGFyZFRpbWVvdXQpOwogICAgIH0pOwogCi0gICAg
dmFyIHRlc3Q0ID0gYXN5bmNfdGVzdCgncmVsZWFzaW5nIHRoZSBsb2NrIHNob3VsZCBjYXVzZSBm
dXJ0aGVyIHJlYWQoKSBjYWxscyB0byByZXNvbHZlIGFzIGlmIHRoZSBzdHJlYW0gaXMgY2xvc2Vk
Jyk7CisgICAgdmFyIHRlc3Q0ID0gYXN5bmNfdGVzdCgncmVsZWFzaW5nIHRoZSBsb2NrIHNob3Vs
ZCBjYXVzZSBmdXJ0aGVyIHJlYWQoKSBjYWxscyB0byByZXNvbHZlIGFzIGlmIHRoZSBzdHJlYW0g
aXMgY2xvc2VkJywgZGVmYXVsdFRlc3RQcm9wZXJ0aWVzKTsKICAgICB0ZXN0NC5zdGVwKGZ1bmN0
aW9uKCkgewogICAgICAgICB2YXIgeyByZWFkZXIgfSA9IGZhY3RvcnkoKTsKICAgICAgICAgdmFy
IHByb21pc2VzQ291bnQgPSAwOwpAQCAtMjMzLDcgKzIzMyw3IEBAIGZ1bmN0aW9uIHRlbXBsYXRl
ZFJTRW1wdHlSZWFkZXIobGFiZWwsIGZhY3RvcnkpIHsKICAgICAgICAgfSkpOwogICAgIH0pOwog
Ci0gICAgdmFyIHRlc3Q1ID0gYXN5bmNfdGVzdCgncmVsZWFzaW5nIHRoZSBsb2NrIHNob3VsZCBj
YXVzZSBjbG9zZWQgdG8gZnVsZmlsbCcpOworICAgIHZhciB0ZXN0NSA9IGFzeW5jX3Rlc3QoJ3Jl
bGVhc2luZyB0aGUgbG9jayBzaG91bGQgY2F1c2UgY2xvc2VkIHRvIGZ1bGZpbGwnLCBkZWZhdWx0
VGVzdFByb3BlcnRpZXMpOwogICAgIHRlc3Q1LnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgICAgIHZh
ciB7IHJlYWRlciB9ID0gZmFjdG9yeSgpOwogICAgICAgICB2YXIgcHJvbWlzZXNDb3VudCA9IDA7
CkBAIC0yNTIsNyArMjUyLDcgQEAgZnVuY3Rpb24gdGVtcGxhdGVkUlNFbXB0eVJlYWRlcihsYWJl
bCwgZmFjdG9yeSkgewogICAgICAgICB9KSk7CiAgICAgfSk7CiAKLSAgICB2YXIgdGVzdDYgPSBh
c3luY190ZXN0KCdjYW5jZWxpbmcgdmlhIHRoZSByZWFkZXIgc2hvdWxkIGNhdXNlIHRoZSByZWFk
ZXIgdG8gYWN0IGNsb3NlZCcpOworICAgIHZhciB0ZXN0NiA9IGFzeW5jX3Rlc3QoJ2NhbmNlbGlu
ZyB2aWEgdGhlIHJlYWRlciBzaG91bGQgY2F1c2UgdGhlIHJlYWRlciB0byBhY3QgY2xvc2VkJywg
ZGVmYXVsdFRlc3RQcm9wZXJ0aWVzKTsKICAgICB0ZXN0Ni5zdGVwKGZ1bmN0aW9uKCkgewogICAg
ICAgICB2YXIgeyByZWFkZXIgfSA9IGZhY3RvcnkoKTsKIApAQCAtMjYzLDcgKzI2Myw3IEBAIGZ1
bmN0aW9uIHRlbXBsYXRlZFJTRW1wdHlSZWFkZXIobGFiZWwsIGZhY3RvcnkpIHsKICAgICAgICAg
fSkpOwogICAgIH0pOwogCi0gICAgdmFyIHRlc3Q3ID0gYXN5bmNfdGVzdCgnY2FuY2VsaW5nIHZp
YSB0aGUgc3RyZWFtIHNob3VsZCBmYWlsJyk7CisgICAgdmFyIHRlc3Q3ID0gYXN5bmNfdGVzdCgn
Y2FuY2VsaW5nIHZpYSB0aGUgc3RyZWFtIHNob3VsZCBmYWlsJywgZGVmYXVsdFRlc3RQcm9wZXJ0
aWVzKTsKICAgICB0ZXN0Ny5zdGVwKGZ1bmN0aW9uKCkgewogICAgICAgICB2YXIgeyBzdHJlYW0g
fSA9IGZhY3RvcnkoKTsKIApAQCAtMjc4LDcgKzI3OCw3IEBAIGZ1bmN0aW9uIHRlbXBsYXRlZFJT
Q2xvc2VkUmVhZGVyKGxhYmVsLCBmYWN0b3J5KSB7CiAgICAgdGVzdChmdW5jdGlvbigpIHsKICAg
ICB9LCAnUnVubmluZyB0ZW1wbGF0ZWRSU0Nsb3NlZFJlYWRlciB3aXRoICcgKyBsYWJlbCk7CiAK
LSAgICB2YXIgIHRlc3QxID0gYXN5bmNfdGVzdCgncmVhZCgpIHNob3VsZCBmdWxmaWxsIHdpdGgg
eyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH0nKTsKKyAgICB2YXIgIHRlc3QxID0gYXN5
bmNfdGVzdCgncmVhZCgpIHNob3VsZCBmdWxmaWxsIHdpdGggeyB2YWx1ZTogdW5kZWZpbmVkLCBk
b25lOiB0cnVlIH0nLCBkZWZhdWx0VGVzdFByb3BlcnRpZXMpOwogICAgIHRlc3QxLnN0ZXAoZnVu
Y3Rpb24oKSB7CiAgICAgICAgIHZhciB7IHJlYWRlciB9ID0gZmFjdG9yeSgpOwogCkBAIC0yOTEs
NyArMjkxLDcgQEAgZnVuY3Rpb24gdGVtcGxhdGVkUlNDbG9zZWRSZWFkZXIobGFiZWwsIGZhY3Rv
cnkpIHsKICAgICAgICAgKTsKICAgICB9KTsKIAotICAgIHZhciB0ZXN0MiA9IGFzeW5jX3Rlc3Qo
J2Nsb3NlZCBzaG91bGQgZnVsZmlsbCB3aXRoIHVuZGVmaW5lZCcsIHsgdGltZW91dDogNTB9KTsK
KyAgICB2YXIgdGVzdDIgPSBhc3luY190ZXN0KCdjbG9zZWQgc2hvdWxkIGZ1bGZpbGwgd2l0aCB1
bmRlZmluZWQnLCBkZWZhdWx0VGVzdFByb3BlcnRpZXMpOwogICAgIHRlc3QyLnN0ZXAoZnVuY3Rp
b24oKSB7CiAgICAgICAgIHZhciB7IHJlYWRlciB9ID0gZmFjdG9yeSgpOwogCkBAIC0zMDQsNyAr
MzA0LDcgQEAgZnVuY3Rpb24gdGVtcGxhdGVkUlNDbG9zZWRSZWFkZXIobGFiZWwsIGZhY3Rvcnkp
IHsKICAgICAgICAgKTsKICAgICB9KTsKIAotICAgIHZhciB0ZXN0MyA9IGFzeW5jX3Rlc3QoJ2Nh
bmNlbCgpIHNob3VsZCByZXR1cm4gYSBkaXN0aW5jdCBmdWxmaWxsZWQgcHJvbWlzZSBlYWNoIHRp
bWUnKTsKKyAgICB2YXIgdGVzdDMgPSBhc3luY190ZXN0KCdjYW5jZWwoKSBzaG91bGQgcmV0dXJu
IGEgZGlzdGluY3QgZnVsZmlsbGVkIHByb21pc2UgZWFjaCB0aW1lJywgZGVmYXVsdFRlc3RQcm9w
ZXJ0aWVzKTsKICAgICB0ZXN0My5zdGVwKGZ1bmN0aW9uKCkgewogICAgICAgICB2YXIgeyByZWFk
ZXIgfSA9IGZhY3RvcnkoKTsKICAgICAgICAgdmFyIHByb21pc2VDb3VudCA9IDA7CkBAIC0zMzYs
NyArMzM2LDcgQEAgZnVuY3Rpb24gdGVtcGxhdGVkUlNFcnJvcmVkUmVhZGVyKGxhYmVsLCBmYWN0
b3J5LCBlcnJvcikgewogICAgIHRlc3QoZnVuY3Rpb24oKSB7CiAgICAgfSwgJ1J1bm5pbmcgdGVt
cGxhdGVkUlNFcnJvcmVkUmVhZGVyIHdpdGggJyArIGxhYmVsKTsKIAotICAgIHZhciB0ZXN0MSA9
IGFzeW5jX3Rlc3QoJ2Nsb3NlZCBzaG91bGQgcmVqZWN0IHdpdGggdGhlIGVycm9yJywgeyB0aW1l
b3V0OiA1MCB9KTsKKyAgICB2YXIgdGVzdDEgPSBhc3luY190ZXN0KCdjbG9zZWQgc2hvdWxkIHJl
amVjdCB3aXRoIHRoZSBlcnJvcicsIGRlZmF1bHRUZXN0UHJvcGVydGllcyk7CiAgICAgdGVzdDEu
c3RlcChmdW5jdGlvbigpIHsKICAgICAgICAgdmFyIHsgcmVhZGVyIH0gPSBmYWN0b3J5KCk7CiAK
QEAgLTM0OSw3ICszNDksNyBAQCBmdW5jdGlvbiB0ZW1wbGF0ZWRSU0Vycm9yZWRSZWFkZXIobGFi
ZWwsIGZhY3RvcnksIGVycm9yKSB7CiAgICAgICAgICk7CiAgICAgfSk7CiAKLSAgICB2YXIgdGVz
dDIgPSBhc3luY190ZXN0KCdyZWFkKCkgc2hvdWxkIHJlamVjdCB3aXRoIHRoZSBlcnJvcicpOwor
ICAgIHZhciB0ZXN0MiA9IGFzeW5jX3Rlc3QoJ3JlYWQoKSBzaG91bGQgcmVqZWN0IHdpdGggdGhl
IGVycm9yJywgZGVmYXVsdFRlc3RQcm9wZXJ0aWVzKTsKICAgICB0ZXN0Mi5zdGVwKGZ1bmN0aW9u
KCkgewogICAgICAgICB2YXIgeyByZWFkZXIgfSA9IGZhY3RvcnkoKTsKIApAQCAtMzY5LDcgKzM2
OSw3IEBAIGZ1bmN0aW9uIHRlbXBsYXRlZFJTVHdvQ2h1bmtzT3BlblJlYWRlcihsYWJlbCwgZmFj
dG9yeSwgY2h1bmtzKSB7CiAgICAgdGVzdChmdW5jdGlvbigpIHsKICAgICB9LCAnUnVubmluZyB0
ZW1wbGF0ZWRSU1R3b0NodW5rc09wZW5SZWFkZXIgd2l0aCAnICsgbGFiZWwpOwogCi0gICAgdmFy
IHRlc3QxID0gYXN5bmNfdGVzdCgnY2FsbGluZyByZWFkKCkgdHdpY2Ugd2l0aG91dCB3YWl0aW5n
IHdpbGwgZXZlbnR1YWxseSBnaXZlIGJvdGggY2h1bmtzJyk7CisgICAgdmFyIHRlc3QxID0gYXN5
bmNfdGVzdCgnY2FsbGluZyByZWFkKCkgdHdpY2Ugd2l0aG91dCB3YWl0aW5nIHdpbGwgZXZlbnR1
YWxseSBnaXZlIGJvdGggY2h1bmtzJywgZGVmYXVsdFRlc3RQcm9wZXJ0aWVzKTsKICAgICB0ZXN0
MS5zdGVwKGZ1bmN0aW9uKCkgewogICAgICAgICB2YXIgeyByZWFkZXIgfSA9IGZhY3RvcnkoKTsK
ICAgICAgICAgdmFyIHByb21pc2VDb3VudCA9IDA7CkBAIC0zODUsNyArMzg1LDcgQEAgZnVuY3Rp
b24gdGVtcGxhdGVkUlNUd29DaHVua3NPcGVuUmVhZGVyKGxhYmVsLCBmYWN0b3J5LCBjaHVua3Mp
IHsKICAgICAgICAgfSkpOwogICAgIH0pOwogCi0gICAgdmFyIHRlc3QyID0gYXN5bmNfdGVzdCgn
Y2FsbGluZyByZWFkKCkgdHdpY2Ugd2l0aCB3YWl0aW5nIHdpbGwgZXZlbnR1YWxseSBnaXZlIGJv
dGggY2h1bmtzJyk7CisgICAgdmFyIHRlc3QyID0gYXN5bmNfdGVzdCgnY2FsbGluZyByZWFkKCkg
dHdpY2Ugd2l0aCB3YWl0aW5nIHdpbGwgZXZlbnR1YWxseSBnaXZlIGJvdGggY2h1bmtzJywgZGVm
YXVsdFRlc3RQcm9wZXJ0aWVzKTsKICAgICB0ZXN0Mi5zdGVwKGZ1bmN0aW9uKCkgewogICAgICAg
ICB2YXIgeyByZWFkZXIgfSA9IGZhY3RvcnkoKTsKIApAQCAtNDA1LDcgKzQwNSw3IEBAIGZ1bmN0
aW9uIHRlbXBsYXRlZFJTVHdvQ2h1bmtzT3BlblJlYWRlcihsYWJlbCwgZmFjdG9yeSwgY2h1bmtz
KSB7CiAgICAgICAgIGFzc2VydF9ub3RfZXF1YWxzKHJlYWRlci5yZWFkKCksIHJlYWRlci5yZWFk
KCksICd0aGUgcHJvbWlzZXMgcmV0dXJuZWQgc2hvdWxkIGJlIGRpc3RpbmN0Jyk7CiAgICAgfSwg
J3JlYWQoKSBzaG91bGQgcmV0dXJuIGRpc3RpbmN0IHByb21pc2VzIGVhY2ggdGltZScpOwogCi0g
ICAgdmFyIHRlc3QzID0gYXN5bmNfdGVzdCgnY2FuY2VsKCkgYWZ0ZXIgYSByZWFkKCkgc2hvdWxk
IHN0aWxsIGdpdmUgdGhhdCBzaW5nbGUgcmVhZCByZXN1bHQnKTsKKyAgICB2YXIgdGVzdDMgPSBh
c3luY190ZXN0KCdjYW5jZWwoKSBhZnRlciBhIHJlYWQoKSBzaG91bGQgc3RpbGwgZ2l2ZSB0aGF0
IHNpbmdsZSByZWFkIHJlc3VsdCcsIGRlZmF1bHRUZXN0UHJvcGVydGllcyk7CiAgICAgdGVzdDMu
c3RlcChmdW5jdGlvbigpIHsKICAgICAgICAgdmFyIHsgcmVhZGVyIH0gPSBmYWN0b3J5KCk7CiAg
ICAgICAgIHZhciBwcm9taXNlQ291bnQgPSAwOwpAQCAtNDM0LDcgKzQzNCw3IEBAIGZ1bmN0aW9u
IHRlbXBsYXRlZFJTVHdvQ2h1bmtzQ2xvc2VkUmVhZGVyKGxhYmVsLCBmYWN0b3J5LCBjaHVua3Mp
IHsKICAgICB0ZXN0KGZ1bmN0aW9uKCkgewogICAgIH0sICdSdW5uaW5nIHRlbXBsYXRlZFJTVHdv
Q2h1bmtzQ2xvc2VkUmVhZGVyIHdpdGggJyArIGxhYmVsKTsKIAotICAgIHZhciB0ZXN0MSA9IGFz
eW5jX3Rlc3QoJ3RoaXJkIHJlYWQoKSwgd2l0aG91dCB3YWl0aW5nLCBzaG91bGQgZ2l2ZSB7IHZh
bHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfScpOworICAgIHZhciB0ZXN0MSA9IGFzeW5jX3Rl
c3QoJ3RoaXJkIHJlYWQoKSwgd2l0aG91dCB3YWl0aW5nLCBzaG91bGQgZ2l2ZSB7IHZhbHVlOiB1
bmRlZmluZWQsIGRvbmU6IHRydWUgfScsIGRlZmF1bHRUZXN0UHJvcGVydGllcyk7CiAgICAgdGVz
dDEuc3RlcChmdW5jdGlvbigpIHsKICAgICAgICAgdmFyIHsgcmVhZGVyIH0gPSBmYWN0b3J5KCk7
CiAgICAgICAgIHZhciBwcm9taXNlQ291bnQgPSAwOwpAQCAtNDU0LDcgKzQ1NCw3IEBAIGZ1bmN0
aW9uIHRlbXBsYXRlZFJTVHdvQ2h1bmtzQ2xvc2VkUmVhZGVyKGxhYmVsLCBmYWN0b3J5LCBjaHVu
a3MpIHsKICAgICAgICAgfSkpCiAgICAgfSk7CiAKLSAgICB2YXIgdGVzdDIgPSBhc3luY190ZXN0
KCd0aGlyZCByZWFkLCB3aXRoIHdhaXRpbmcsIHNob3VsZCBnaXZlIHsgdmFsdWU6IHVuZGVmaW5l
ZCwgZG9uZTogdHJ1ZSB9Jyk7CisgICAgdmFyIHRlc3QyID0gYXN5bmNfdGVzdCgndGhpcmQgcmVh
ZCwgd2l0aCB3YWl0aW5nLCBzaG91bGQgZ2l2ZSB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRy
dWUgfScsIGRlZmF1bHRUZXN0UHJvcGVydGllcyk7CiAgICAgdGVzdDIuc3RlcChmdW5jdGlvbigp
IHsKICAgICAgICAgdmFyIHsgcmVhZGVyIH0gPSBmYWN0b3J5KCk7CiAKQEAgLTQ3Miw3ICs0NzIs
NyBAQCBmdW5jdGlvbiB0ZW1wbGF0ZWRSU1R3b0NodW5rc0Nsb3NlZFJlYWRlcihsYWJlbCwgZmFj
dG9yeSwgY2h1bmtzKSB7CiAgICAgICAgIH0pKS5jYXRjaCh0ZXN0Mi5zdGVwX2Z1bmMoZnVuY3Rp
b24oZSkgeyBhc3NlcnRfdW5yZWFjaGVkKGUpOyB9KSk7CiAgICAgfSk7CiAKLSAgICB2YXIgdGVz
dDMgPSBhc3luY190ZXN0KCdkcmFpbmluZyB0aGUgc3RyZWFtIHZpYSByZWFkKCkgc2hvdWxkIGNh
dXNlIHRoZSByZWFkZXIgY2xvc2VkIHByb21pc2UgdG8gZnVsZmlsbCcpOworICAgIHZhciB0ZXN0
MyA9IGFzeW5jX3Rlc3QoJ2RyYWluaW5nIHRoZSBzdHJlYW0gdmlhIHJlYWQoKSBzaG91bGQgY2F1
c2UgdGhlIHJlYWRlciBjbG9zZWQgcHJvbWlzZSB0byBmdWxmaWxsJywgZGVmYXVsdFRlc3RQcm9w
ZXJ0aWVzKTsKICAgICB0ZXN0My5zdGVwKGZ1bmN0aW9uKCkgewogICAgICAgICB2YXIgeyByZWFk
ZXIgfSA9IGZhY3RvcnkoKTsKICAgICAgICAgdmFyIHJlYWRDYWxsZWQgPSBmYWxzZTsKQEAgLTQ5
MSw3ICs0OTEsNyBAQCBmdW5jdGlvbiB0ZW1wbGF0ZWRSU1R3b0NodW5rc0Nsb3NlZFJlYWRlcihs
YWJlbCwgZmFjdG9yeSwgY2h1bmtzKSB7CiAgICAgICAgIHJlYWRDYWxsZWQgPSB0cnVlOwogICAg
IH0pOwogCi0gICAgdmFyIHRlc3Q0ID0gYXN5bmNfdGVzdCgncmVsZWFzaW5nIHRoZSBsb2NrIGFm
dGVyIHRoZSBzdHJlYW0gaXMgY2xvc2VkIHNob3VsZCBkbyBub3RoaW5nJyk7CisgICAgdmFyIHRl
c3Q0ID0gYXN5bmNfdGVzdCgncmVsZWFzaW5nIHRoZSBsb2NrIGFmdGVyIHRoZSBzdHJlYW0gaXMg
Y2xvc2VkIHNob3VsZCBkbyBub3RoaW5nJywgZGVmYXVsdFRlc3RQcm9wZXJ0aWVzKTsKICAgICB0
ZXN0NC5zdGVwKGZ1bmN0aW9uKCkgewogICAgICAgICB2YXIgeyByZWFkZXIgfSA9IGZhY3Rvcnko
KTsKICAgICAgICAgdmFyIHJlYWRDYWxsZWQgPSBmYWxzZTsKQEAgLTUwNyw3ICs1MDcsNyBAQCBm
dW5jdGlvbiB0ZW1wbGF0ZWRSU1R3b0NodW5rc0Nsb3NlZFJlYWRlcihsYWJlbCwgZmFjdG9yeSwg
Y2h1bmtzKSB7CiAgICAgICAgIHJlYWRDYWxsZWQgPSB0cnVlOwogICAgIH0pOwogCi0gICAgdmFy
IHRlc3Q1ID0gYXN5bmNfdGVzdCgncmVsZWFzaW5nIHRoZSBsb2NrIHNob3VsZCBjYXVzZSByZWFk
KCkgdG8gYWN0IGFzIGlmIHRoZSBzdHJlYW0gaXMgY2xvc2VkJyk7CisgICAgdmFyIHRlc3Q1ID0g
YXN5bmNfdGVzdCgncmVsZWFzaW5nIHRoZSBsb2NrIHNob3VsZCBjYXVzZSByZWFkKCkgdG8gYWN0
IGFzIGlmIHRoZSBzdHJlYW0gaXMgY2xvc2VkJywgZGVmYXVsdFRlc3RQcm9wZXJ0aWVzKTsKICAg
ICB0ZXN0NS5zdGVwKGZ1bmN0aW9uKCkgewogICAgICAgICB2YXIgeyByZWFkZXIgfSA9IGZhY3Rv
cnkoKTsKICAgICAgICAgdmFyIHByb21pc2VDYWxscyA9IDA7CkBAIC01MjksNyArNTI5LDcgQEAg
ZnVuY3Rpb24gdGVtcGxhdGVkUlNUd29DaHVua3NDbG9zZWRSZWFkZXIobGFiZWwsIGZhY3Rvcnks
IGNodW5rcykgewogICAgICAgICB9KSkKICAgICB9KTsKIAotICAgIHZhciB0ZXN0NiA9IGFzeW5j
X3Rlc3QoJ3JlYWRlclwncyBjbG9zZWQgcHJvcGVydHkgYWx3YXlzIHJldHVybnMgdGhlIHNhbWUg
cHJvbWlzZScpOworICAgIHZhciB0ZXN0NiA9IGFzeW5jX3Rlc3QoJ3JlYWRlclwncyBjbG9zZWQg
cHJvcGVydHkgYWx3YXlzIHJldHVybnMgdGhlIHNhbWUgcHJvbWlzZScsIGRlZmF1bHRUZXN0UHJv
cGVydGllcyk7CiAgICAgdGVzdDYuc3RlcChmdW5jdGlvbigpIHsKICAgICAgICAgdmFyIHsgcmVh
ZGVyLCBzdHJlYW0gfSA9IGZhY3RvcnkoKTsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Ry
ZWFtcy9yZWZlcmVuY2UtaW1wbGVtZW50YXRpb24vcmVhZGFibGUtc3RyZWFtLmh0bWwgYi9MYXlv
dXRUZXN0cy9zdHJlYW1zL3JlZmVyZW5jZS1pbXBsZW1lbnRhdGlvbi9yZWFkYWJsZS1zdHJlYW0u
aHRtbAppbmRleCA3NjQ1YTliOWI1ZmEwOWY1NzNmZTk4MzIwNDk5MGMxYjljOWQ1ODZiLi4yMzEz
ZDQwNDI1NTBmZjlmYWU3MGVkNDAxY2JmZTIwNDhlNzg2ZWUyIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9zdHJlYW1zL3JlZmVyZW5jZS1pbXBsZW1lbnRhdGlvbi9yZWFkYWJsZS1zdHJlYW0uaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9zdHJlYW1zL3JlZmVyZW5jZS1pbXBsZW1lbnRhdGlvbi9yZWFk
YWJsZS1zdHJlYW0uaHRtbApAQCAtNTMsNyArNTMsNyBAQCB0ZXN0KGZ1bmN0aW9uKCkgewogICAg
IG5ldyBSZWFkYWJsZVN0cmVhbSh7IHN0cmF0ZWd5OiAyIH0pOyAvLyBDb25zdHJ1Y3RvciBzaG91
bGQgbm90IHRocm93IHdoZW4gc3RyYXRlZ3kgaXMgbm90IGFuIG9iamVjdC4KIH0sICdSZWFkYWJs
ZVN0cmVhbSBjb25zdHJ1Y3RvciBjYW4gZ2V0IGluaXRpYWwgZ2FyYmFnZSBhcyBzdHJhdGVneSBh
cmd1bWVudCcpOwogCi12YXIgdGVzdDEgPSBhc3luY190ZXN0KCdSZWFkYWJsZVN0cmVhbSBzdGFy
dCBzaG91bGQgYmUgYWJsZSB0byByZXR1cm4gYSBwcm9taXNlJyk7Cit2YXIgdGVzdDEgPSBhc3lu
Y190ZXN0KCdSZWFkYWJsZVN0cmVhbSBzdGFydCBzaG91bGQgYmUgYWJsZSB0byByZXR1cm4gYSBw
cm9taXNlJywgZGVmYXVsdFRlc3RQcm9wZXJ0aWVzKTsKIHRlc3QxLnN0ZXAoZnVuY3Rpb24oKQog
ewogICAgIHZhciByZWFkQ2FsbGVkID0gZmFsc2U7CkBAIC04Miw3ICs4Miw3IEBAIHRlc3QxLnN0
ZXAoZnVuY3Rpb24oKQogICAgIH0pKTsKIH0pOwogCi12YXIgdGVzdDIgPSBhc3luY190ZXN0KCdS
ZWFkYWJsZVN0cmVhbSBzdGFydCBzaG91bGQgYmUgYWJsZSB0byByZXR1cm4gYSBwcm9taXNlIGFu
ZCByZWplY3QgaXQnLCB7IHRpbWVvdXQ6IDEwMCB9KTsKK3ZhciB0ZXN0MiA9IGFzeW5jX3Rlc3Qo
J1JlYWRhYmxlU3RyZWFtIHN0YXJ0IHNob3VsZCBiZSBhYmxlIHRvIHJldHVybiBhIHByb21pc2Ug
YW5kIHJlamVjdCBpdCcsIGRlZmF1bHRUZXN0UHJvcGVydGllcyk7CiB0ZXN0Mi5zdGVwKGZ1bmN0
aW9uKCkKIHsKICAgICB2YXIgdGhlRXJyb3IgPSBuZXcgRXJyb3IoJ3JlamVjdGVkIScpOwpAQCAt
MTAyLDcgKzEwMiw3IEBAIHRlc3QyLnN0ZXAoZnVuY3Rpb24oKQogICAgIH0pKTsKIH0pOwogCi12
YXIgdGVzdDMgPSBhc3luY190ZXN0KCdSZWFkYWJsZVN0cmVhbSBzaG91bGQgYmUgYWJsZSB0byBl
bnF1ZXVlIGRpZmZlcmVudCBvYmplY3RzLicpOwordmFyIHRlc3QzID0gYXN5bmNfdGVzdCgnUmVh
ZGFibGVTdHJlYW0gc2hvdWxkIGJlIGFibGUgdG8gZW5xdWV1ZSBkaWZmZXJlbnQgb2JqZWN0cy4n
LCBkZWZhdWx0VGVzdFByb3BlcnRpZXMpOwogdGVzdDMuc3RlcChmdW5jdGlvbigpIHsKICAgICB2
YXIgcmVhZENhbGxzID0gMDsKICAgICB2YXIgb2JqZWN0cyA9IFsKQEAgLTE0Niw3ICsxNDYsNyBA
QCB0ZXN0KGZ1bmN0aW9uKCkgewogICAgIGFzc2VydF90aHJvd3MoZXJyb3IsIGZ1bmN0aW9uKCkg
eyBuZXcgUmVhZGFibGVTdHJlYW0oeyBzdGFydCgpIHsgdGhyb3cgZXJyb3I7IH0gfSkgfSwgJ2Vy
cm9yIHNob3VsZCBiZSByZS10aHJvd24nKTsKIH0sICdSZWFkYWJsZVN0cmVhbTogaWYgc3RhcnQg
dGhyb3dzIGFuIGVycm9yLCBpdCBzaG91bGQgYmUgcmUtdGhyb3duJyk7CiAKLXZhciB0ZXN0NCA9
IGFzeW5jX3Rlc3QoJ1JlYWRhYmxlU3RyZWFtOiBpZiBwdWxsIHJlamVjdHMsIGl0IHNob3VsZCBl
cnJvciB0aGUgc3RyZWFtJyk7Cit2YXIgdGVzdDQgPSBhc3luY190ZXN0KCdSZWFkYWJsZVN0cmVh
bTogaWYgcHVsbCByZWplY3RzLCBpdCBzaG91bGQgZXJyb3IgdGhlIHN0cmVhbScsIGRlZmF1bHRU
ZXN0UHJvcGVydGllcyk7CiB0ZXN0NC5zdGVwKGZ1bmN0aW9uKCkgewogICAgIHZhciBlcnJvciA9
IG5ldyBFcnJvcigncHVsbCBmYWlsdXJlJyk7CiAgICAgdmFyIHJzID0gbmV3IFJlYWRhYmxlU3Ry
ZWFtKHsKQEAgLTE3NCw3ICsxNzQsNyBAQCB0ZXN0NC5zdGVwKGZ1bmN0aW9uKCkgewogICAgIH0p
KTsKIH0pOwogCi12YXIgdGVzdDUgPSBhc3luY190ZXN0KCdSZWFkYWJsZVN0cmVhbTogc2hvdWxk
IG9ubHkgY2FsbCBwdWxsIG9uY2UgdXBvbiBzdGFydGluZyB0aGUgc3RyZWFtJyk7Cit2YXIgdGVz
dDUgPSBhc3luY190ZXN0KCdSZWFkYWJsZVN0cmVhbTogc2hvdWxkIG9ubHkgY2FsbCBwdWxsIG9u
Y2UgdXBvbiBzdGFydGluZyB0aGUgc3RyZWFtJywgZGVmYXVsdFRlc3RQcm9wZXJ0aWVzKTsKIHRl
c3Q1LnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIHB1bGxDb3VudCA9IDA7CiAgICAgdmFyIHN0
YXJ0UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIHRlc3Q1
LnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgfSksIHN0YW5kYXJkVGltZW91dCk7CiB9KTsKIAotdmFy
IHRlc3Q2ID0gYXN5bmNfdGVzdCgnUmVhZGFibGVTdHJlYW06IHNob3VsZCBvbmx5IGNhbGwgcHVs
bCBvbmNlIGZvciBhIGZvcmV2ZXItZW1wdHkgc3RyZWFtLCBldmVuIGFmdGVyIHJlYWRpbmcnKTsK
K3ZhciB0ZXN0NiA9IGFzeW5jX3Rlc3QoJ1JlYWRhYmxlU3RyZWFtOiBzaG91bGQgb25seSBjYWxs
IHB1bGwgb25jZSBmb3IgYSBmb3JldmVyLWVtcHR5IHN0cmVhbSwgZXZlbiBhZnRlciByZWFkaW5n
JywgZGVmYXVsdFRlc3RQcm9wZXJ0aWVzKTsKIHRlc3Q2LnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAg
dmFyIHB1bGxDb3VudCA9IDA7CiAgICAgdmFyIHN0YXJ0UHJvbWlzZSA9IFByb21pc2UucmVzb2x2
ZSgpOwpAQCAtMjIyLDcgKzIyMiw3IEBAIHRlc3Q2LnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgfSks
IHN0YW5kYXJkVGltZW91dCk7CiB9KTsKIAotdmFyIHRlc3Q3ID0gYXN5bmNfdGVzdCgnUmVhZGFi
bGVTdHJlYW06IHNob3VsZCBvbmx5IGNhbGwgcHVsbCBvbmNlIG9uIGEgbm9uLWVtcHR5IHN0cmVh
bSByZWFkIGZyb20gYmVmb3JlIHN0YXJ0IGZ1bGZpbGxzJyk7Cit2YXIgdGVzdDcgPSBhc3luY190
ZXN0KCdSZWFkYWJsZVN0cmVhbTogc2hvdWxkIG9ubHkgY2FsbCBwdWxsIG9uY2Ugb24gYSBub24t
ZW1wdHkgc3RyZWFtIHJlYWQgZnJvbSBiZWZvcmUgc3RhcnQgZnVsZmlsbHMnLCBkZWZhdWx0VGVz
dFByb3BlcnRpZXMpOwogdGVzdDcuc3RlcChmdW5jdGlvbigpIHsKICAgICB2YXIgcHVsbENvdW50
ID0gMDsKICAgICB2YXIgc3RhcnRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7CkBAIC0yNTMs
NyArMjUzLDcgQEAgdGVzdDcuc3RlcChmdW5jdGlvbigpIHsKICAgICB9KSwgc3RhbmRhcmRUaW1l
b3V0KTsKIH0pOwogCi12YXIgdGVzdDggPSBhc3luY190ZXN0KCdSZWFkYWJsZVN0cmVhbTogc2hv
dWxkIG9ubHkgY2FsbCBwdWxsIHR3aWNlIG9uIGEgbm9uLWVtcHR5IHN0cmVhbSByZWFkIGZyb20g
YWZ0ZXIgc3RhcnQgZnVsZmlsbHMnKTsKK3ZhciB0ZXN0OCA9IGFzeW5jX3Rlc3QoJ1JlYWRhYmxl
U3RyZWFtOiBzaG91bGQgb25seSBjYWxsIHB1bGwgdHdpY2Ugb24gYSBub24tZW1wdHkgc3RyZWFt
IHJlYWQgZnJvbSBhZnRlciBzdGFydCBmdWxmaWxscycsIGRlZmF1bHRUZXN0UHJvcGVydGllcyk7
CiB0ZXN0OC5zdGVwKGZ1bmN0aW9uKCkgewogICAgIHZhciBwdWxsQ291bnQgPSAwOwogICAgIHZh
ciBzdGFydFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTsKQEAgLTI4NCw3ICsyODQsNyBAQCB0
ZXN0OC5zdGVwKGZ1bmN0aW9uKCkgewogICAgIH0pLCBzdGFuZGFyZFRpbWVvdXQpOwogfSk7CiAK
LXZhciB0ZXN0OSA9IGFzeW5jX3Rlc3QoJ1JlYWRhYmxlU3RyZWFtOiBzaG91bGQgY2FsbCBwdWxs
IGluIHJlYWN0aW9uIHRvIHJlYWQoKWluZyB0aGUgbGFzdCBjaHVuaywgaWYgbm90IGRyYWluaW5n
Jyk7Cit2YXIgdGVzdDkgPSBhc3luY190ZXN0KCdSZWFkYWJsZVN0cmVhbTogc2hvdWxkIGNhbGwg
cHVsbCBpbiByZWFjdGlvbiB0byByZWFkKClpbmcgdGhlIGxhc3QgY2h1bmssIGlmIG5vdCBkcmFp
bmluZycsIGRlZmF1bHRUZXN0UHJvcGVydGllcyk7CiB0ZXN0OS5zdGVwKGZ1bmN0aW9uKCkgewog
ICAgIHZhciBwdWxsQ291bnQgPSAwOwogICAgIHZhciBjb250cm9sbGVyOwpAQCAtMzI1LDcgKzMy
NSw3IEBAIHRlc3Q5LnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgfSksIHN0YW5kYXJkVGltZW91dCk7
CiB9KTsKIAotdmFyIHRlc3QxMCA9IGFzeW5jX3Rlc3QoJ1JlYWRhYmxlU3RyZWFtOiBzaG91bGQg
bm90IGNhbGwgcHVsbCgpIGluIHJlYWN0aW9uIHRvIHJlYWQoKWluZyB0aGUgbGFzdCBjaHVuaywg
aWYgZHJhaW5pbmcnKTsKK3ZhciB0ZXN0MTAgPSBhc3luY190ZXN0KCdSZWFkYWJsZVN0cmVhbTog
c2hvdWxkIG5vdCBjYWxsIHB1bGwoKSBpbiByZWFjdGlvbiB0byByZWFkKClpbmcgdGhlIGxhc3Qg
Y2h1bmssIGlmIGRyYWluaW5nJywgZGVmYXVsdFRlc3RQcm9wZXJ0aWVzKTsKIHRlc3QxMC5zdGVw
KGZ1bmN0aW9uKCkgewogICAgIHZhciBwdWxsQ291bnQgPSAwOwogICAgIHZhciBjb250cm9sbGVy
OwpAQCAtMzY4LDcgKzM2OCw3IEBAIHRlc3QxMC5zdGVwKGZ1bmN0aW9uKCkgewogICAgIH0pLCBz
dGFuZGFyZFRpbWVvdXQpOwogfSk7CiAKLXZhciB0ZXN0MTEgPSBhc3luY190ZXN0KCdSZWFkYWJs
ZVN0cmVhbTogc2hvdWxkIG5vdCBjYWxsIHB1bGwgdW50aWwgdGhlIHByZXZpb3VzIHB1bGwgY2Fs
bFwncyBwcm9taXNlIGZ1bGZpbGxzJyk7Cit2YXIgdGVzdDExID0gYXN5bmNfdGVzdCgnUmVhZGFi
bGVTdHJlYW06IHNob3VsZCBub3QgY2FsbCBwdWxsIHVudGlsIHRoZSBwcmV2aW91cyBwdWxsIGNh
bGxcJ3MgcHJvbWlzZSBmdWxmaWxscycsIGRlZmF1bHRUZXN0UHJvcGVydGllcyk7CiB0ZXN0MTEu
c3RlcChmdW5jdGlvbigpIHsKICAgICB2YXIgcmVzb2x2ZTsKICAgICB2YXIgcmV0dXJuZWRQcm9t
aXNlOwpAQCAtNDA4LDcgKzQwOCw3IEBAIHRlc3QxMS5zdGVwKGZ1bmN0aW9uKCkgewogICAgIH0p
KTsKIH0pOwogCi12YXIgdGVzdDEyID0gYXN5bmNfdGVzdCgnUmVhZGFibGVTdHJlYW06IHNob3Vs
ZCBwdWxsIGFmdGVyIHN0YXJ0LCBhbmQgYWZ0ZXIgZXZlcnkgcmVhZCcpOwordmFyIHRlc3QxMiA9
IGFzeW5jX3Rlc3QoJ1JlYWRhYmxlU3RyZWFtOiBzaG91bGQgcHVsbCBhZnRlciBzdGFydCwgYW5k
IGFmdGVyIGV2ZXJ5IHJlYWQnLCBkZWZhdWx0VGVzdFByb3BlcnRpZXMpOwogdGVzdDEyLnN0ZXAo
ZnVuY3Rpb24oKSB7CiAgICAgdmFyIHRpbWVzQ2FsbGVkID0gMDsKICAgICB2YXIgc3RhcnRQcm9t
aXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7CkBAIC00NTQsNyArNDU0LDcgQEAgdGVzdDEyLnN0ZXAo
ZnVuY3Rpb24oKSB7CiAgICAgfSkpLmNhdGNoKHRlc3QxMi5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkg
eyBhc3NlcnRfdW5yZWFjaGVkKGUpOyB9KSk7CiB9KTsKIAotdmFyIHRlc3QxMyA9IGFzeW5jX3Rl
c3QoJ1JlYWRhYmxlU3RyZWFtOiBzaG91bGQgbm90IGNhbGwgcHVsbCBhZnRlciBzdGFydCBpZiB0
aGUgc3RyZWFtIGlzIG5vdyBjbG9zZWQnKTsKK3ZhciB0ZXN0MTMgPSBhc3luY190ZXN0KCdSZWFk
YWJsZVN0cmVhbTogc2hvdWxkIG5vdCBjYWxsIHB1bGwgYWZ0ZXIgc3RhcnQgaWYgdGhlIHN0cmVh
bSBpcyBub3cgY2xvc2VkJywgZGVmYXVsdFRlc3RQcm9wZXJ0aWVzKTsKIHRlc3QxMy5zdGVwKGZ1
bmN0aW9uKCkgewogICAgIHZhciB0aW1lc0NhbGxlZCA9IDA7CiAgICAgdmFyIHN0YXJ0UHJvbWlz
ZSA9IFByb21pc2UucmVzb2x2ZSgpOwpAQCAtNDg0LDcgKzQ4NCw3IEBAIHRlc3QxMy5zdGVwKGZ1
bmN0aW9uKCkgewogICAgIH0pKS5jYXRjaCh0ZXN0MTMuc3RlcF9mdW5jKGZ1bmN0aW9uKGUpIHsg
YXNzZXJ0X3VucmVhY2hlZChlKTsgfSkpOwogfSk7CiAKLXZhciB0ZXN0MTQgPSBhc3luY190ZXN0
KCdSZWFkYWJsZVN0cmVhbTogc2hvdWxkIGNhbGwgcHVsbCBhZnRlciBlbnF1ZXVlaW5nIGZyb20g
aW5zaWRlIHB1bGwgKHdpdGggbm8gcmVhZCByZXF1ZXN0cyksIGlmIHN0cmF0ZWd5IGFsbG93cycp
OwordmFyIHRlc3QxNCA9IGFzeW5jX3Rlc3QoJ1JlYWRhYmxlU3RyZWFtOiBzaG91bGQgY2FsbCBw
dWxsIGFmdGVyIGVucXVldWVpbmcgZnJvbSBpbnNpZGUgcHVsbCAod2l0aCBubyByZWFkIHJlcXVl
c3RzKSwgaWYgc3RyYXRlZ3kgYWxsb3dzJywgZGVmYXVsdFRlc3RQcm9wZXJ0aWVzKTsKIHRlc3Qx
NC5zdGVwKGZ1bmN0aW9uKCkgewogICAgIHZhciB0aW1lc0NhbGxlZCA9IDA7CiAgICAgdmFyIHN0
YXJ0UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpOwpAQCAtNTE2LDcgKzUxNiw3IEBAIHRlc3Qx
NC5zdGVwKGZ1bmN0aW9uKCkgewogICAgIH0pKTsKIH0pOwogCi12YXIgdGVzdDE1ID0gYXN5bmNf
dGVzdCgnUmVhZGFibGVTdHJlYW0gcHVsbCBzaG91bGQgYmUgYWJsZSB0byBjbG9zZSBhIHN0cmVh
bS4nLCB7IHRpbWVvdXQ6IDUwIH0pOwordmFyIHRlc3QxNSA9IGFzeW5jX3Rlc3QoJ1JlYWRhYmxl
U3RyZWFtIHB1bGwgc2hvdWxkIGJlIGFibGUgdG8gY2xvc2UgYSBzdHJlYW0uJywgZGVmYXVsdFRl
c3RQcm9wZXJ0aWVzKTsKIHRlc3QxNS5zdGVwKGZ1bmN0aW9uKCkgewogICAgIHZhciBwdWxsQ2Fs
bGVkID0gZmFsc2U7CiAgICAgdmFyIHJzID0gbmV3IFJlYWRhYmxlU3RyZWFtKHsKQEAgLTU2NSw3
ICs1NjUsNyBAQCB0ZXN0KGZ1bmN0aW9uKCkgewogICAgIH0pOwogfSwgJ1JlYWRhYmxlU3RyZWFt
OiBlbnF1ZXVlIHNob3VsZCB0aHJvdyB0aGUgc3RvcmVkIGVycm9yIHdoZW4gdGhlIHN0cmVhbSBp
cyBlcnJvcmVkJyk7CiAKLXZhciB0ZXN0MTYgPSBhc3luY190ZXN0KCdSZWFkYWJsZVN0cmVhbTog
c2hvdWxkIGNhbGwgdW5kZXJseWluZyBzb3VyY2UgbWV0aG9kcyBhcyBtZXRob2RzJyk7Cit2YXIg
dGVzdDE2ID0gYXN5bmNfdGVzdCgnUmVhZGFibGVTdHJlYW06IHNob3VsZCBjYWxsIHVuZGVybHlp
bmcgc291cmNlIG1ldGhvZHMgYXMgbWV0aG9kcycsIGRlZmF1bHRUZXN0UHJvcGVydGllcyk7CiB0
ZXN0MTYuc3RlcChmdW5jdGlvbigpIHsKICAgICB2YXIgc3RhcnRDYWxsZWQgPSAwOwogICAgIHZh
ciBwdWxsQ2FsbGVkID0gMDsKQEAgLTYyOCw3ICs2MjgsNyBAQCB0ZXN0KGZ1bmN0aW9uKCkgewog
ICB9KTsKIH0sICdSZWFkYWJsZVN0cmVhbSBzdHJhdGVnaWVzOiB0aGUgZGVmYXVsdCBzdHJhdGVn
eSBzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBhbGwgYnV0IHRoZSBmaXJzdCBlbnF1ZXVlIGNhbGwn
KTsKIAotdmFyIHRlc3QxNyA9IGFzeW5jX3Rlc3QoJ1JlYWRhYmxlU3RyZWFtIHN0cmF0ZWdpZXM6
IHRoZSBkZWZhdWx0IHN0cmF0ZWd5IHNob3VsZCBjb250aW51ZSByZXR1cm5pbmcgdHJ1ZSBmcm9t
IGVucXVldWUgaWYgdGhlIGNodW5rcyBhcmUgcmVhZCBpbW1lZGlhdGVseScpOwordmFyIHRlc3Qx
NyA9IGFzeW5jX3Rlc3QoJ1JlYWRhYmxlU3RyZWFtIHN0cmF0ZWdpZXM6IHRoZSBkZWZhdWx0IHN0
cmF0ZWd5IHNob3VsZCBjb250aW51ZSByZXR1cm5pbmcgdHJ1ZSBmcm9tIGVucXVldWUgaWYgdGhl
IGNodW5rcyBhcmUgcmVhZCBpbW1lZGlhdGVseScsIGRlZmF1bHRUZXN0UHJvcGVydGllcyk7CiB0
ZXN0MTcuc3RlcChmdW5jdGlvbigpIHsKICAgICB2YXIgY29udHJvbGxlcjsKICAgICB2YXIgcnMg
PSBuZXcgUmVhZGFibGVTdHJlYW0oewpAQCAtNjU4LDcgKzY1OCw3IEBAIHRlc3QxNy5zdGVwKGZ1
bmN0aW9uKCkgewogICAgIH0pKS5jYXRjaCh0ZXN0MTcuc3RlcF9mdW5jKGZ1bmN0aW9uKGUpIHsg
YXNzZXJ0X3VucmVhY2hlZChlKTsgfSApKTsKIH0pOwogCi12YXIgdGVzdDE4ID0gYXN5bmNfdGVz
dCgnUmVhZGFibGVTdHJlYW0gaW50ZWdyYXRpb24gdGVzdDogYWRhcHRpbmcgYSByYW5kb20gcHVz
aCBzb3VyY2UnKTsKK3ZhciB0ZXN0MTggPSBhc3luY190ZXN0KCdSZWFkYWJsZVN0cmVhbSBpbnRl
Z3JhdGlvbiB0ZXN0OiBhZGFwdGluZyBhIHJhbmRvbSBwdXNoIHNvdXJjZScsIGRlZmF1bHRUZXN0
UHJvcGVydGllcyk7CiB0ZXN0MTguc3RlcChmdW5jdGlvbigpIHsKICAgICB2YXIgcHVsbENoZWNr
ZWQgPSBmYWxzZTsKICAgICB2YXIgcmFuZG9tU291cmNlID0gbmV3IFJhbmRvbVB1c2hTb3VyY2Uo
OCk7CkBAIC03MDIsNyArNzAyLDcgQEAgdGVzdDE4LnN0ZXAoZnVuY3Rpb24oKSB7CiAgICAgfSks
IHRlc3QxOC5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkgeyBhc3NlcnRfcmVhY2hlZChlKTsgfSkpOwog
fSk7CiAKLXZhciB0ZXN0MTkgPSBhc3luY190ZXN0KCdSZWFkYWJsZVN0cmVhbSBpbnRlZ3JhdGlv
biB0ZXN0OiBhZGFwdGluZyBhIHN5bmMgcHVsbCBzb3VyY2UnKTsKK3ZhciB0ZXN0MTkgPSBhc3lu
Y190ZXN0KCdSZWFkYWJsZVN0cmVhbSBpbnRlZ3JhdGlvbiB0ZXN0OiBhZGFwdGluZyBhIHN5bmMg
cHVsbCBzb3VyY2UnLCBkZWZhdWx0VGVzdFByb3BlcnRpZXMpOwogdGVzdDE5LnN0ZXAoZnVuY3Rp
b24oKSB7CiAgICAgdmFyIHJzID0gc2VxdWVudGlhbFJlYWRhYmxlU3RyZWFtKDEwKTsKIApAQCAt
NzE0LDcgKzcxNCw3IEBAIHRlc3QxOS5zdGVwKGZ1bmN0aW9uKCkgewogICAgIH0pKTsKIH0pOwog
Ci12YXIgdGVzdDIwID0gYXN5bmNfdGVzdCgnUmVhZGFibGVTdHJlYW0gaW50ZWdyYXRpb24gdGVz
dDogYWRhcHRpbmcgYW4gYXN5bmMgcHVsbCBzb3VyY2UnKTsKK3ZhciB0ZXN0MjAgPSBhc3luY190
ZXN0KCdSZWFkYWJsZVN0cmVhbSBpbnRlZ3JhdGlvbiB0ZXN0OiBhZGFwdGluZyBhbiBhc3luYyBw
dWxsIHNvdXJjZScsIGRlZmF1bHRUZXN0UHJvcGVydGllcyk7CiB0ZXN0MjAuc3RlcChmdW5jdGlv
bigpIHsKICAgICB2YXIgcnMgPSBzZXF1ZW50aWFsUmVhZGFibGVTdHJlYW0oMTAsIHsgYXN5bmM6
IHRydWUgfSk7CiAK
</data>
<flag name="review"
          id="275581"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>