<?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>103824</bug_id>
          
          <creation_ts>2012-12-01 17:19:10 -0800</creation_ts>
          <short_desc>clean up test result summarization / aggregating code in nrwt</short_desc>
          <delta_ts>2013-02-20 16:31:56 -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>528+ (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>NRWT</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>78168</dependson>
    
    <dependson>103828</dependson>
    
    <dependson>103829</dependson>
    
    <dependson>103830</dependson>
    
    <dependson>103943</dependson>
    
    <dependson>103961</dependson>
    
    <dependson>103963</dependson>
    
    <dependson>104047</dependson>
    
    <dependson>104048</dependson>
    
    <dependson>104051</dependson>
    
    <dependson>104059</dependson>
    
    <dependson>104061</dependson>
    
    <dependson>104064</dependson>
    
    <dependson>104067</dependson>
    
    <dependson>104072</dependson>
    
    <dependson>104158</dependson>
    
    <dependson>104165</dependson>
    
    <dependson>104871</dependson>
    
    <dependson>105077</dependson>
    
    <dependson>105078</dependson>
    
    <dependson>105080</dependson>
          <blocked>103826</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>780806</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-12-01 17:19:10 -0800</bug_when>
    <thetext>Right now the code for collecting the results of individual tests is scattered over several badly named classes and dicts (ResultSummary, summarized_results, etc.) and is unwieldly. It would make things a lot easier to follow if this code was cleaned up and given some sort of structure; this bug is a meta-bug to track that work. 

In addition, the test-running code (webkitpy.layout_tests.controllers.manager.Manager and layout_test_runner.Runner) have some weird object ownership structuring and don&apos;t really return enough information to be very useful; as a result, the run_webkit_tests_integration tests have to jump through a bunch of hoops to test things (e.g., bug 78168) and it would be nice to clean that up.

Lastly, if we cleaned up the way we returned information about the test run back it would probably simplify various client programs like the buildbot log parsers and calling scripts used for various purposes (e.g., me trying to hunt down flaky tests).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780810</commentid>
    <comment_count>1</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-12-01 17:31:21 -0800</bug_when>
    <thetext>The general model I have in mind can be thought of functionally or in a dataflow manner ...

1) get a list of test paths (e.g., [&apos;fast/html&apos;, &apos;fast/forms&apos;]

2) convert those into a list of test names

3) convert those into a list of TestInputs

4) run the tests, each test produces a list of TestFailures plus other data (like test run time) which is collected into a TestResult for each test

5) the list of TestResults is collected into a TestPass class (what is currently called a ResultSummary), or some similar name; the concept is &quot;making a pass over the tests&quot; rather than &quot;this test passed&quot;, but I don&apos;t like the confusion. 

6) if we had any unexpected failures and were not told to not retry failures, we do a second pass over those, producing a second TestPass objects (currently what is called the retry_summary)

7) from those two TestPass objects we can merge the results and summarize them (in the routine currently called summarize_results that returns a flat JSON/POD object that can be stored as full_results.json)

8) the results of 6 and 7 are collected together (along with the single exit code containing the number of unexpected failures) into a RunDetails object and handed back to callers, who now will have a full description of everything that happened during the test run.

I&apos;m not wild about any of these names and am open to suggestions. Note that all of this basically describes the existing flow and objects; I&apos;m not changing anything much, just cleaning it up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780818</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-12-01 17:59:25 -0800</bug_when>
    <thetext>Obviously, all of this cleanup is a bunch of work and will come as a bunch of patches, not one big honking one :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780819</commentid>
    <comment_count>3</comment_count>
      <attachid>177122</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-12-01 18:03:20 -0800</bug_when>
    <thetext>Created attachment 177122
work-in-progress big honking patch; no need to review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780826</commentid>
    <comment_count>4</comment_count>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2012-12-01 18:31:44 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; The general model I have in mind can be thought of functionally or in a dataflow manner ...
&gt; 
&gt; 1) get a list of test paths (e.g., [&apos;fast/html&apos;, &apos;fast/forms&apos;]
&gt; 
&gt; 2) convert those into a list of test names

At some point around here we need to parse TestExpectations. We need to know the expectations to create the TestInput, right?

Also, it&apos;s not worth complicating things too much. But as you&apos;re designing this, a nice-to-have to keep in mind would be being able to start step 4 before having completely finished steps 2 and 3. This is to improve the time it takes to run the tests. Taking http://build.chromium.org/p/chromium.webkit/builders/WebKit%20XP/builds/1244/steps/webkit_tests/logs/stdio as a probably extreme slow case:

16:58:57.230 3892 Collecting tests ...
16:59:25.726 3892 Parsing expectations ...
16:59:37.567 3892 Found 33781 tests; running 26622, skipping 7159.

Collecting tests took 28.5 seconds and parsing expectations took 12. This is obviously a very slow machine, but anything we can do to improve this would be great.

&gt; 5) the list of TestResults is collected into a TestPass class (what is currently called a ResultSummary), or some similar name; the concept is &quot;making a pass over the tests&quot; rather than &quot;this test passed&quot;, but I don&apos;t like the confusion. 

As you said, overloading &quot;pass&quot; is asking for trouble. TestResultSet maybe? TestResultList? TestRunOutput? TestRunResults? I agree all of these sound not quite right, but I&apos;d prefer any of these to TestPass. :)

&gt; 6) if we had any unexpected failures and were not told to not retry failures, we do a second pass over those, producing a second TestPass objects (currently what is called the retry_summary)

This another thing that would be great to parallelize. It&apos;s super annoying right now that we wait until the last shard finishes before we start the retry. I find this especially annoying when running tests locally. I usually run with --no-retry because takes too long. Again, just something to keep in mind as you&apos;re writing the code.

&gt; 7) from those two TestPass objects we can merge the results and summarize them (in the routine currently called summarize_results that returns a flat JSON/POD object that can be stored as full_results.json)

Side note: at some point, we should change the test results server to store the aggregate results files with a different name (e.g. aggregate-results.json) so that we can properly name this file results.json to match results.html.

&gt; I&apos;m not wild about any of these names and am open to suggestions. Note that all of this basically describes the existing flow and objects; I&apos;m not changing anything much, just cleaning it up.

Yup. Except for overloading &quot;pass&quot;, this all sounds good. Don&apos;t let any of my comments here complicate the refactoring too much. Just thought I&apos;d mention them if it affected the code/design in anyway or if they were easy-ish to accomplish.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>780833</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-12-01 19:26:24 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #1)
&gt; &gt; The general model I have in mind can be thought of functionally or in a dataflow manner ...
&gt; &gt; 
&gt; &gt; 1) get a list of test paths (e.g., [&apos;fast/html&apos;, &apos;fast/forms&apos;]
&gt; &gt; 
&gt; &gt; 2) convert those into a list of test names
&gt; 
&gt; At some point around here we need to parse TestExpectations. We need to know the expectations to create the TestInput, right?
&gt; 

Correct. I didn&apos;t detail every step :).

&gt; Also, it&apos;s not worth complicating things too much. But as you&apos;re designing this, a nice-to-have to keep in mind would be being able to start step 4 before having completely finished steps 2 and 3. This is to improve the time it takes to run the tests. Taking http://build.chromium.org/p/chromium.webkit/builders/WebKit%20XP/builds/1244/steps/webkit_tests/logs/stdio as a probably extreme slow case:
&gt; 
&gt; 16:58:57.230 3892 Collecting tests ...
&gt; 16:59:25.726 3892 Parsing expectations ...
&gt; 16:59:37.567 3892 Found 33781 tests; running 26622, skipping 7159.
&gt; 
&gt; Collecting tests took 28.5 seconds and parsing expectations took 12. This is obviously a very slow machine, but anything we can do to improve this would be great.
&gt; 

Yeah, I have often thought about this. Pipelining this is a bit tricky, especially since it affects how we do sharding and compute the batches to run, but as you say, it could be a nice win on a slow machine.

&gt; &gt; 5) the list of TestResults is collected into a TestPass class (what is currently called a ResultSummary), or some similar name; the concept is &quot;making a pass over the tests&quot; rather than &quot;this test passed&quot;, but I don&apos;t like the confusion. 
&gt; 
&gt; As you said, overloading &quot;pass&quot; is asking for trouble. TestResultSet maybe? TestResultList? TestRunOutput? TestRunResults? I agree all of these sound not quite right, but I&apos;d prefer any of these to TestPass. :)
&gt; 

Yeah, I think I had thought of most of those as well, but I don&apos;t much care for the TestRun variants since I don&apos;t then know what to call the RunDetails/overall object. Your objection to TestPass is recorded :)

Anyone else have any ideas?

&gt; &gt; 6) if we had any unexpected failures and were not told to not retry failures, we do a second pass over those, producing a second TestPass objects (currently what is called the retry_summary)
&gt; 
&gt; This another thing that would be great to parallelize. It&apos;s super annoying right now that we wait until the last shard finishes before we start the retry. I find this especially annoying when running tests locally. I usually run with --no-retry because takes too long. Again, just something to keep in mind as you&apos;re writing the code.
&gt;

I intentionally don&apos;t retry in parallel with running the first pass, in order to avoid additional potential flakiness introduced by parallel results. I think this is the better behavior, even if it makes the run longer locally.

&gt; &gt; 7) from those two TestPass objects we can merge the results and summarize them (in the routine currently called summarize_results that returns a flat JSON/POD object that can be stored as full_results.json)
&gt; 
&gt; Side note: at some point, we should change the test results server to store the aggregate results files with a different name (e.g. aggregate-results.json) so that we can properly name this file results.json to match results.html.
&gt; 

Yup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837906</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2013-02-20 16:31:56 -0800</bug_when>
    <thetext>Okay, I hit declining marginal return here and am calling this done.

The code ended up as follows:

run_webkit_tests.py creates a Manager object. The manager builds a list of TestInputs representing the tests to run. Each test gets run (normally), producing a TestResult. The TestResults get collected into a TestRunResults object (initial_results), which also contains some derived aggregate statistics.

If there are unexpected results, they are retried, producing a second TestRunResults object (retry_results).

initial_results and retry_results are then summarized (again) into a dict called summarized_results. 

These three objects, along with the resulting exit code, are returned as a RunDetails object back to run_webkit_tests.py. The RunDetails object is used to print the results to stdout and to compute the json blocks uploaded to the dashboards (and then to determine the exit code to leave with).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177122</attachid>
            <date>2012-12-01 18:03:20 -0800</date>
            <delta_ts>2012-12-01 18:03:48 -0800</delta_ts>
            <desc>work-in-progress big honking patch; no need to review</desc>
            <filename>bug-103824-20121201180049.patch</filename>
            <type>text/plain</type>
            <size>164659</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1Nzg2CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9tZXNzYWdlX3Bvb2wucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9tZXNzYWdlX3Bvb2wucHkKaW5kZXggMmUxZTg1ZTVjYjA2MDQ4NTQxMjMxNjc3NWRhZWJl
NjEzM2ZlZDQyMC4uMDMwNTZjZjY0ZmUwNWM1YjUwN2I3MzY5YTU2N2NkYzU3YzA3NGQ5MyAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vbWVzc2FnZV9wb29sLnB5Cisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL21lc3NhZ2VfcG9vbC5weQpAQCAtMTg0
LDcgKzE4NCw3IEBAIGNsYXNzIF9NZXNzYWdlUG9vbChvYmplY3QpOgogICAgICAgICAgICAgcGFz
cwogCiAKLWNsYXNzIFdvcmtlckV4Y2VwdGlvbihFeGNlcHRpb24pOgorY2xhc3MgV29ya2VyRXhj
ZXB0aW9uKEJhc2VFeGNlcHRpb24pOgogICAgICIiIlJhaXNlZCB3aGVuIHdlIHJlY2VpdmUgYW4g
dW5leHBlY3RlZC91bmtub3duIGV4Y2VwdGlvbiBmcm9tIGEgd29ya2VyLiIiIgogICAgIHBhc3MK
IApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJv
bGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5CmluZGV4IDU0Y2U1ZTZm
ZTExOTg2YmY3NDI1ZDVjZDg0ZjljMTE1YjA2YWUwNjcuLmIxMGY1YzI2ZTA2NjdkNzJlZGNjMTNi
ZGY5YmRjZTNmYzlmMmVmMDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lci5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5u
ZXIucHkKQEAgLTM0LDYgKzM0LDcgQEAgaW1wb3J0IHRpbWUKIAogZnJvbSB3ZWJraXRweS5jb21t
b24gaW1wb3J0IG1lc3NhZ2VfcG9vbAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJv
bGxlcnMgaW1wb3J0IHNpbmdsZV90ZXN0X3J1bm5lcgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMubW9kZWxzLnJlc3VsdF9zdW1tYXJ5IGltcG9ydCBSZXN1bHRTdW1tYXJ5CiBmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy5tb2RlbHMgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCiBmcm9tIHdl
YmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMgaW1wb3J0IHRlc3RfZmFpbHVyZXMKIGZyb20gd2Vi
a2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscyBpbXBvcnQgdGVzdF9yZXN1bHRzCkBAIC00NSwxMSAr
NDYsOCBAQCBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKIFRlc3RFeHBlY3Rh
dGlvbnMgPSB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zCiAKLSMgRXhwb3J0IHRo
aXMgc28gY2FsbGVycyBkb24ndCBuZWVkIHRvIGtub3cgYWJvdXQgbWVzc2FnZSBwb29scy4KLVdv
cmtlckV4Y2VwdGlvbiA9IG1lc3NhZ2VfcG9vbC5Xb3JrZXJFeGNlcHRpb24KIAotCi1jbGFzcyBU
ZXN0UnVuSW50ZXJydXB0ZWRFeGNlcHRpb24oRXhjZXB0aW9uKToKK2NsYXNzIF9UZXN0UnVuSW50
ZXJydXB0ZWRFeGNlcHRpb24oRXhjZXB0aW9uKToKICAgICAiIiJSYWlzZWQgd2hlbiBhIHRlc3Qg
cnVuIHNob3VsZCBiZSBzdG9wcGVkIGltbWVkaWF0ZWx5LiIiIgogICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCByZWFzb24pOgogICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZikKQEAgLTc1LDI0
ICs3MywxMiBAQCBjbGFzcyBMYXlvdXRUZXN0UnVubmVyKG9iamVjdCk6CiAgICAgICAgIHNlbGYu
X25lZWRzX3dlYnNvY2tldHMgPSBOb25lCiAgICAgICAgIHNlbGYuX3JldHJ5aW5nID0gRmFsc2UK
ICAgICAgICAgc2VsZi5fdGVzdF9maWxlc19saXN0ID0gW10KLSAgICAgICAgc2VsZi5fYWxsX3Jl
c3VsdHMgPSBbXQotICAgICAgICBzZWxmLl9ncm91cF9zdGF0cyA9IHt9Ci0gICAgICAgIHNlbGYu
X3dvcmtlcl9zdGF0cyA9IHt9CiAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBzZWxmLl9wb3J0
Lmhvc3QuZmlsZXN5c3RlbQogCi0gICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCB0ZXN0X2lucHV0cywg
ZXhwZWN0YXRpb25zLCByZXN1bHRfc3VtbWFyeSwgbnVtX3dvcmtlcnMsIG5lZWRzX2h0dHAsIG5l
ZWRzX3dlYnNvY2tldHMsIHJldHJ5aW5nKToKLSAgICAgICAgIiIiUmV0dXJucyBhIHR1cGxlIG9m
IChpbnRlcnJ1cHRlZCwga2V5Ym9hcmRfaW50ZXJydXB0ZWQsIHRocmVhZF90aW1pbmdzLCB0ZXN0
X3RpbWluZ3MsIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKToKLSAgICAgICAgICAgIGludGVycnVw
dGVkIGlzIHdoZXRoZXIgdGhlIHJ1biB3YXMgaW50ZXJydXB0ZWQKLSAgICAgICAgICAgIGtleWJv
YXJkX2ludGVycnVwdGVkIGlzIHdoZXRoZXIgdGhlIGludGVycnVwdGlvbiB3YXMgYmVjYXVzZSBz
b21lb25lIHR5cGVkIEN0cmxeQwotICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3MgaXMgYSBsaXN0
IG9mIGRpY3RzIHdpdGggdGhlIHRvdGFsIHJ1bnRpbWUKLSAgICAgICAgICAgICAgICBvZiBlYWNo
IHRocmVhZCB3aXRoICduYW1lJywgJ251bV90ZXN0cycsICd0b3RhbF90aW1lJyBwcm9wZXJ0aWVz
Ci0gICAgICAgICAgICB0ZXN0X3RpbWluZ3MgaXMgYSBsaXN0IG9mIHRpbWluZ3MgZm9yIGVhY2gg
c2hhcmRlZCBzdWJkaXJlY3RvcnkKLSAgICAgICAgICAgICAgICBvZiB0aGUgZm9ybSBbdGltZSwg
ZGlyZWN0b3J5X25hbWUsIG51bV90ZXN0c10KLSAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90
aW1pbmdzIGlzIGEgbGlzdCBvZiBydW4gdGltZXMgZm9yIGVhY2ggdGVzdAotICAgICAgICAgICAg
ICAgIGluIHRoZSBmb3JtIHtmaWxlbmFtZTpmaWxlbmFtZSwgdGVzdF9ydW5fdGltZTp0ZXN0X3J1
bl90aW1lfQotICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IHRvIHBv
cHVsYXRlIHdpdGggdGhlIHJlc3VsdHMKLSAgICAgICAgIiIiCisgICAgZGVmIHJ1bl90ZXN0cyhz
ZWxmLCB0ZXN0X2lucHV0cywgdGVzdHNfdG9fc2tpcCwgZXhwZWN0YXRpb25zLCBudW1fdW5pcXVl
X3Rlc3RzLCBudW1faXRlcmF0aW9ucywgbnVtX3dvcmtlcnMsIG5lZWRzX2h0dHAsIG5lZWRzX3dl
YnNvY2tldHMsIHJldHJ5aW5nKToKKyAgICAgICAgcmVzdWx0X3N1bW1hcnkgPSBSZXN1bHRTdW1t
YXJ5KGV4cGVjdGF0aW9ucywgbnVtX3VuaXF1ZV90ZXN0cywgbnVtX2l0ZXJhdGlvbnMpCiAgICAg
ICAgIHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1bW1hcnkgPSByZXN1bHRfc3VtbWFyeQorCiAgICAg
ICAgIHNlbGYuX2V4cGVjdGF0aW9ucyA9IGV4cGVjdGF0aW9ucwogICAgICAgICBzZWxmLl9uZWVk
c19odHRwID0gbmVlZHNfaHR0cAogICAgICAgICBzZWxmLl9uZWVkc193ZWJzb2NrZXRzID0gbmVl
ZHNfd2Vic29ja2V0cwpAQCAtMTAxLDE1ICs4Nyw5IEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXIo
b2JqZWN0KToKICAgICAgICAgc2VsZi5fcHJpbnRlci5udW1fdGVzdHMgPSBsZW4oc2VsZi5fdGVz
dF9maWxlc19saXN0KQogICAgICAgICBzZWxmLl9wcmludGVyLm51bV9jb21wbGV0ZWQgPSAwCiAK
LSAgICAgICAgc2VsZi5fYWxsX3Jlc3VsdHMgPSBbXQotICAgICAgICBzZWxmLl9ncm91cF9zdGF0
cyA9IHt9Ci0gICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0cyA9IHt9CiAgICAgICAgIHNlbGYuX2hh
c19odHRwX2xvY2sgPSBGYWxzZQogICAgICAgICBzZWxmLl9yZW1haW5pbmdfbG9ja2VkX3NoYXJk
cyA9IFtdCiAKLSAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBGYWxzZQotICAgICAgICBp
bnRlcnJ1cHRlZCA9IEZhbHNlCi0KICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUo
J1NoYXJkaW5nIHRlc3RzIC4uLicpCiAgICAgICAgIGxvY2tlZF9zaGFyZHMsIHVubG9ja2VkX3No
YXJkcyA9IHNlbGYuX3NoYXJkZXIuc2hhcmRfdGVzdHModGVzdF9pbnB1dHMsIGludChzZWxmLl9v
cHRpb25zLmNoaWxkX3Byb2Nlc3NlcyksIHNlbGYuX29wdGlvbnMuZnVsbHlfcGFyYWxsZWwpCiAK
QEAgLTEzMCwyOCArMTEwLDMxIEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXIob2JqZWN0KToKICAg
ICAgICAgc2VsZi5fcHJpbnRlci5wcmludF93b3JrZXJzX2FuZF9zaGFyZHMobnVtX3dvcmtlcnMs
IGxlbihhbGxfc2hhcmRzKSwgbGVuKGxvY2tlZF9zaGFyZHMpKQogCiAgICAgICAgIGlmIHNlbGYu
X29wdGlvbnMuZHJ5X3J1bjoKLSAgICAgICAgICAgIHJldHVybiAoa2V5Ym9hcmRfaW50ZXJydXB0
ZWQsIGludGVycnVwdGVkLCBzZWxmLl93b3JrZXJfc3RhdHMudmFsdWVzKCksIHNlbGYuX2dyb3Vw
X3N0YXRzLCBzZWxmLl9hbGxfcmVzdWx0cykKKyAgICAgICAgICAgIHJldHVybiByZXN1bHRfc3Vt
bWFyeQogCiAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdTdGFydGluZyAlcyAu
Li4nICUgZ3JhbW1hci5wbHVyYWxpemUoJ3dvcmtlcicsIG51bV93b3JrZXJzKSkKIAorICAgICAg
ICBmb3IgdGVzdF9uYW1lIGluIHNldCh0ZXN0c190b19za2lwKToKKyAgICAgICAgICAgIHJlc3Vs
dF9zdW1tYXJ5LnNraXAodGVzdF9uYW1lKQorCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdp
dGggbWVzc2FnZV9wb29sLmdldChzZWxmLCBzZWxmLl93b3JrZXJfZmFjdG9yeSwgbnVtX3dvcmtl
cnMsIHNlbGYuX3BvcnQud29ya2VyX3N0YXJ0dXBfZGVsYXlfc2VjcygpLCBzZWxmLl9wb3J0Lmhv
c3QpIGFzIHBvb2w6CiAgICAgICAgICAgICAgICAgcG9vbC5ydW4oKCd0ZXN0X2xpc3QnLCBzaGFy
ZC5uYW1lLCBzaGFyZC50ZXN0X2lucHV0cykgZm9yIHNoYXJkIGluIGFsbF9zaGFyZHMpCisgICAg
ICAgIGV4Y2VwdCBfVGVzdFJ1bkludGVycnVwdGVkRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAg
X2xvZy53YXJuaW5nKGUucmVhc29uKQorICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkuaW50ZXJy
dXB0ZWQgPSBUcnVlCiAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAg
ICAgIHNlbGYuX3ByaW50ZXIuZmx1c2goKQogICAgICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0
ZWxuKCdJbnRlcnJ1cHRlZCwgZXhpdGluZyAuLi4nKQotICAgICAgICAgICAga2V5Ym9hcmRfaW50
ZXJydXB0ZWQgPSBUcnVlCi0gICAgICAgIGV4Y2VwdCBUZXN0UnVuSW50ZXJydXB0ZWRFeGNlcHRp
b24sIGU6Ci0gICAgICAgICAgICBfbG9nLndhcm5pbmcoZS5yZWFzb24pCi0gICAgICAgICAgICBp
bnRlcnJ1cHRlZCA9IFRydWUKKyAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LmludGVycnVwdGVk
ID0gVHJ1ZQorICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkua2V5Ym9hcmRfaW50ZXJydXB0ZWQg
PSBUcnVlCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6CiAgICAgICAgICAgICBfbG9nLmRl
YnVnKCclcygiJXMiKSByYWlzZWQsIGV4aXRpbmcnICUgKGUuX19jbGFzc19fLl9fbmFtZV9fLCBz
dHIoZSkpKQogICAgICAgICAgICAgcmFpc2UKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAg
IHNlbGYuc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCiAKLSAgICAgICAgIyBGSVhNRTogc2hvdWxk
IHRoaXMgYmUgYSBjbGFzcyBpbnN0ZWFkIG9mIGEgdHVwbGU/Ci0gICAgICAgIHJldHVybiAoaW50
ZXJydXB0ZWQsIGtleWJvYXJkX2ludGVycnVwdGVkLCBzZWxmLl93b3JrZXJfc3RhdHMudmFsdWVz
KCksIHNlbGYuX2dyb3VwX3N0YXRzLCBzZWxmLl9hbGxfcmVzdWx0cykKKyAgICAgICAgcmV0dXJu
IHJlc3VsdF9zdW1tYXJ5CiAKICAgICBkZWYgX3dvcmtlcl9mYWN0b3J5KHNlbGYsIHdvcmtlcl9j
b25uZWN0aW9uKToKICAgICAgICAgcmVzdWx0c19kaXJlY3RvcnkgPSBzZWxmLl9yZXN1bHRzX2Rp
cmVjdG9yeQpAQCAtMTc2LDcgKzE1OSw3IEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXIob2JqZWN0
KToKICAgICAgICAgICAgIGlmIGxpbWl0IGFuZCBmYWlsdXJlX2NvdW50ID49IGxpbWl0OgogICAg
ICAgICAgICAgICAgIG1lc3NhZ2UgKz0gIiAlZCB0ZXN0cyBydW4uIiAlIChyZXN1bHRfc3VtbWFy
eS5leHBlY3RlZCArIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWQpCiAgICAgICAgICAgICAgICAg
c2VsZi5fbWFya19pbnRlcnJ1cHRlZF90ZXN0c19hc19za2lwcGVkKHJlc3VsdF9zdW1tYXJ5KQot
ICAgICAgICAgICAgICAgIHJhaXNlIFRlc3RSdW5JbnRlcnJ1cHRlZEV4Y2VwdGlvbihtZXNzYWdl
KQorICAgICAgICAgICAgICAgIHJhaXNlIF9UZXN0UnVuSW50ZXJydXB0ZWRFeGNlcHRpb24obWVz
c2FnZSkKIAogICAgICAgICBpbnRlcnJ1cHRfaWZfYXRfZmFpbHVyZV9saW1pdCgKICAgICAgICAg
ICAgIHNlbGYuX29wdGlvbnMuZXhpdF9hZnRlcl9uX2ZhaWx1cmVzLApAQCAtMjM4LDggKzIyMSw2
IEBAIGNsYXNzIExheW91dFRlc3RSdW5uZXIob2JqZWN0KToKICAgICAgICAgc2VsZi5fcHJpbnRl
ci5wcmludF9zdGFydGVkX3Rlc3QodGVzdF9pbnB1dC50ZXN0X25hbWUpCiAKICAgICBkZWYgX2hh
bmRsZV9maW5pc2hlZF90ZXN0X2xpc3Qoc2VsZiwgd29ya2VyX25hbWUsIGxpc3RfbmFtZSwgbnVt
X3Rlc3RzLCBlbGFwc2VkX3RpbWUpOgotICAgICAgICBzZWxmLl9ncm91cF9zdGF0c1tsaXN0X25h
bWVdID0gKG51bV90ZXN0cywgZWxhcHNlZF90aW1lKQotCiAgICAgICAgIGRlZiBmaW5kKG5hbWUs
IHRlc3RfbGlzdHMpOgogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHRlc3RfbGlzdHMp
KToKICAgICAgICAgICAgICAgICBpZiB0ZXN0X2xpc3RzW2ldLm5hbWUgPT0gbmFtZToKQEAgLTI1
MywxMCArMjM0LDYgQEAgY2xhc3MgTGF5b3V0VGVzdFJ1bm5lcihvYmplY3QpOgogICAgICAgICAg
ICAgICAgIHNlbGYuc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCiAKICAgICBkZWYgX2hhbmRsZV9m
aW5pc2hlZF90ZXN0KHNlbGYsIHdvcmtlcl9uYW1lLCByZXN1bHQsIGVsYXBzZWRfdGltZSwgbG9n
X21lc3NhZ2VzPVtdKToKLSAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRzLnNldGRlZmF1bHQod29y
a2VyX25hbWUsIHsnbmFtZSc6IHdvcmtlcl9uYW1lLCAnbnVtX3Rlc3RzJzogMCwgJ3RvdGFsX3Rp
bWUnOiAwfSkKLSAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRzW3dvcmtlcl9uYW1lXVsndG90YWxf
dGltZSddICs9IGVsYXBzZWRfdGltZQotICAgICAgICBzZWxmLl93b3JrZXJfc3RhdHNbd29ya2Vy
X25hbWVdWydudW1fdGVzdHMnXSArPSAxCi0gICAgICAgIHNlbGYuX2FsbF9yZXN1bHRzLmFwcGVu
ZChyZXN1bHQpCiAgICAgICAgIHNlbGYuX3VwZGF0ZV9zdW1tYXJ5X3dpdGhfcmVzdWx0KHNlbGYu
X2N1cnJlbnRfcmVzdWx0X3N1bW1hcnksIHJlc3VsdCkKIAogCkBAIC0yNzUsOCArMjUyLDcgQEAg
Y2xhc3MgV29ya2VyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2JhdGNoX2NvdW50ID0gTm9uZQog
ICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gTm9uZQogICAgICAgICBzZWxmLl9kcml2ZXIgPSBO
b25lCi0gICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlID0gTm9uZQotICAgICAgICBzZWxmLl90
ZXN0c19ydW5fZmlsZW5hbWUgPSBOb25lCisgICAgICAgIHNlbGYuX251bV90ZXN0cyA9IDAKIAog
ICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICBzZWxmLnN0b3AoKQpAQCAtMjkxLDE0ICsy
NjcsMTIgQEAgY2xhc3MgV29ya2VyKG9iamVjdCk6CiAKICAgICAgICAgc2VsZi5fYmF0Y2hfY291
bnQgPSAwCiAgICAgICAgIHNlbGYuX2JhdGNoX3NpemUgPSBzZWxmLl9vcHRpb25zLmJhdGNoX3Np
emUgb3IgMAotICAgICAgICB0ZXN0c19ydW5fZmlsZW5hbWUgPSBzZWxmLl9maWxlc3lzdGVtLmpv
aW4oc2VsZi5fcmVzdWx0c19kaXJlY3RvcnksICJ0ZXN0c19ydW4lZC50eHQiICUgc2VsZi5fd29y
a2VyX251bWJlcikKLSAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUgPSBzZWxmLl9maWxlc3lz
dGVtLm9wZW5fdGV4dF9maWxlX2Zvcl93cml0aW5nKHRlc3RzX3J1bl9maWxlbmFtZSkKIAogICAg
IGRlZiBoYW5kbGUoc2VsZiwgbmFtZSwgc291cmNlLCB0ZXN0X2xpc3RfbmFtZSwgdGVzdF9pbnB1
dHMpOgogICAgICAgICBhc3NlcnQgbmFtZSA9PSAndGVzdF9saXN0JwogICAgICAgICBzdGFydF90
aW1lID0gdGltZS50aW1lKCkKICAgICAgICAgZm9yIHRlc3RfaW5wdXQgaW4gdGVzdF9pbnB1dHM6
Ci0gICAgICAgICAgICBzZWxmLl9ydW5fdGVzdCh0ZXN0X2lucHV0KQorICAgICAgICAgICAgc2Vs
Zi5fcnVuX3Rlc3QodGVzdF9pbnB1dCwgdGVzdF9saXN0X25hbWUpCiAgICAgICAgIGVsYXBzZWRf
dGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZQogICAgICAgICBzZWxmLl9jYWxsZXIucG9z
dCgnZmluaXNoZWRfdGVzdF9saXN0JywgdGVzdF9saXN0X25hbWUsIGxlbih0ZXN0X2lucHV0cyks
IGVsYXBzZWRfdGltZSkKIApAQCAtMzExLDcgKzI4NSw3IEBAIGNsYXNzIFdvcmtlcihvYmplY3Qp
OgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdGVzdF9pbnB1dC5zaG91bGRfcnVuX3BpeGVs
X3Rlc3QgPSBzZWxmLl9wb3J0LnNob3VsZF9ydW5fYXNfcGl4ZWxfdGVzdCh0ZXN0X2lucHV0KQog
Ci0gICAgZGVmIF9ydW5fdGVzdChzZWxmLCB0ZXN0X2lucHV0KToKKyAgICBkZWYgX3J1bl90ZXN0
KHNlbGYsIHRlc3RfaW5wdXQsIHRlc3RfbGlzdF9uYW1lKToKICAgICAgICAgc2VsZi5fYmF0Y2hf
Y291bnQgKz0gMQogCiAgICAgICAgIHN0b3Bfd2hlbl9kb25lID0gRmFsc2UKQEAgLTMyNSw2ICsy
OTksMTAgQEAgY2xhc3MgV29ya2VyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2NhbGxlci5wb3N0
KCdzdGFydGVkX3Rlc3QnLCB0ZXN0X2lucHV0LCB0ZXN0X3RpbWVvdXRfc2VjKQogCiAgICAgICAg
IHJlc3VsdCA9IHNlbGYuX3J1bl90ZXN0X3dpdGhfdGltZW91dCh0ZXN0X2lucHV0LCB0ZXN0X3Rp
bWVvdXRfc2VjLCBzdG9wX3doZW5fZG9uZSkKKyAgICAgICAgcmVzdWx0Lndvcmtlcl9uYW1lID0g
c2VsZi5fbmFtZQorICAgICAgICByZXN1bHQuc2hhcmRfbmFtZSA9IHRlc3RfbGlzdF9uYW1lCisg
ICAgICAgIHJlc3VsdC50ZXN0X251bWJlciA9IHNlbGYuX251bV90ZXN0cworICAgICAgICBzZWxm
Ll9udW1fdGVzdHMgKz0gMQogCiAgICAgICAgIGVsYXBzZWRfdGltZSA9IHRpbWUudGltZSgpIC0g
c3RhcnQKICAgICAgICAgc2VsZi5fY2FsbGVyLnBvc3QoJ2ZpbmlzaGVkX3Rlc3QnLCByZXN1bHQs
IGVsYXBzZWRfdGltZSkKQEAgLTMzNCw5ICszMTIsNiBAQCBjbGFzcyBXb3JrZXIob2JqZWN0KToK
ICAgICBkZWYgc3RvcChzZWxmKToKICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgY2xlYW5pbmcgdXAi
ICUgc2VsZi5fbmFtZSkKICAgICAgICAgc2VsZi5fa2lsbF9kcml2ZXIoKQotICAgICAgICBpZiBz
ZWxmLl90ZXN0c19ydW5fZmlsZToKLSAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLmNs
b3NlKCkKLSAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlID0gTm9uZQogCiAgICAgZGVm
IF90aW1lb3V0KHNlbGYsIHRlc3RfaW5wdXQpOgogICAgICAgICAiIiJDb21wdXRlIHRoZSBhcHBy
b3ByaWF0ZSB0aW1lb3V0IHZhbHVlIGZvciBhIHRlc3QuIiIiCkBAIC0zNzAsNyArMzQ1LDYgQEAg
Y2xhc3MgV29ya2VyKG9iamVjdCk6CiAKICAgICBkZWYgX2NsZWFuX3VwX2FmdGVyX3Rlc3Qoc2Vs
ZiwgdGVzdF9pbnB1dCwgcmVzdWx0KToKICAgICAgICAgdGVzdF9uYW1lID0gdGVzdF9pbnB1dC50
ZXN0X25hbWUKLSAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUud3JpdGUodGVzdF9uYW1lICsg
IlxuIikKIAogICAgICAgICBpZiByZXN1bHQuZmFpbHVyZXM6CiAgICAgICAgICAgICAjIENoZWNr
IGFuZCBraWxsIER1bXBSZW5kZXJUcmVlIGlmIHdlIG5lZWQgdG8uCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9y
dW5uZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9j
b250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXJfdW5pdHRlc3QucHkKaW5kZXggMTM4NDFjMWUy
N2UzOTE5ODk1NmI5ZjRkYTkwMTRmOGViNDhjN2VmMy4uZjkwOTIxZTgwZTY5OGVmYWQ1OTMxOGU3
NGRiMjI3NWJjYTY4MDdjNiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyX3VuaXR0ZXN0LnB5CisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90
ZXN0X3J1bm5lcl91bml0dGVzdC5weQpAQCAtMzMsNyArMzMsNyBAQCBpbXBvcnQgdW5pdHRlc3QK
IGZyb20gd2Via2l0cHkuY29tbW9uLmhvc3RfbW9jayBpbXBvcnQgTW9ja0hvc3QKIGZyb20gd2Vi
a2l0cHkuY29tbW9uLnN5c3RlbS5zeXN0ZW1ob3N0X21vY2sgaW1wb3J0IE1vY2tTeXN0ZW1Ib3N0
CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcnVuX3dlYmtpdF90ZXN0cwotZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMubGF5b3V0X3Rlc3RfcnVubmVyIGlt
cG9ydCBMYXlvdXRUZXN0UnVubmVyLCBTaGFyZGVyLCBUZXN0UnVuSW50ZXJydXB0ZWRFeGNlcHRp
b24KK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmNvbnRyb2xsZXJzLmxheW91dF90ZXN0X3J1
bm5lciBpbXBvcnQgTGF5b3V0VGVzdFJ1bm5lciwgU2hhcmRlciwgX1Rlc3RSdW5JbnRlcnJ1cHRl
ZEV4Y2VwdGlvbgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzIGltcG9ydCB0ZXN0
X2V4cGVjdGF0aW9ucwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzIGltcG9ydCB0
ZXN0X2ZhaWx1cmVzCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMucmVzdWx0X3N1
bW1hcnkgaW1wb3J0IFJlc3VsdFN1bW1hcnkKQEAgLTEwMCwxMyArMTAwLDE0IEBAIGNsYXNzIExh
eW91dFRlc3RSdW5uZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHJldHVybiBM
b2NrQ2hlY2tpbmdSdW5uZXIocG9ydCwgb3B0aW9ucywgRmFrZVByaW50ZXIoKSwgc2VsZiwgVHJ1
ZSkKIAogICAgIGRlZiBfcmVzdWx0X3N1bW1hcnkoc2VsZiwgcnVubmVyLCB0ZXN0cyk6Ci0gICAg
ICAgIHJldHVybiBSZXN1bHRTdW1tYXJ5KFRlc3RFeHBlY3RhdGlvbnMocnVubmVyLl9wb3J0LCB0
ZXN0cyksIHRlc3RzLCAxLCBzZXQoKSkKKyAgICAgICAgcmV0dXJuIFJlc3VsdFN1bW1hcnkoVGVz
dEV4cGVjdGF0aW9ucyhydW5uZXIuX3BvcnQsIHRlc3RzKSwgbGVuKHRlc3RzKSwgMSkKIAogICAg
IGRlZiBfcnVuX3Rlc3RzKHNlbGYsIHJ1bm5lciwgdGVzdHMpOgogICAgICAgICB0ZXN0X2lucHV0
cyA9IFtUZXN0SW5wdXQodGVzdCwgNjAwMCkgZm9yIHRlc3QgaW4gdGVzdHNdCiAgICAgICAgIGV4
cGVjdGF0aW9ucyA9IFRlc3RFeHBlY3RhdGlvbnMocnVubmVyLl9wb3J0LCB0ZXN0cykKLSAgICAg
ICAgcnVubmVyLnJ1bl90ZXN0cyh0ZXN0X2lucHV0cywgZXhwZWN0YXRpb25zLCBzZWxmLl9yZXN1
bHRfc3VtbWFyeShydW5uZXIsIHRlc3RzKSwKLSAgICAgICAgICAgIG51bV93b3JrZXJzPTEsIG5l
ZWRzX2h0dHA9YW55KCdodHRwJyBpbiB0ZXN0IGZvciB0ZXN0IGluIHRlc3RzKSwgbmVlZHNfd2Vi
c29ja2V0cz1hbnkoWyd3ZWJzb2NrZXQnIGluIHRlc3QgZm9yIHRlc3QgaW4gdGVzdHNdKSwgcmV0
cnlpbmc9RmFsc2UpCisgICAgICAgIHJ1bm5lci5ydW5fdGVzdHModGVzdF9pbnB1dHMsIFtdLCBl
eHBlY3RhdGlvbnMsIGxlbih0ZXN0cyksIDEsIG51bV93b3JrZXJzPTEsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgbmVlZHNfaHR0cD1hbnkoJ2h0dHAnIGluIHRlc3QgZm9yIHRlc3QgaW4gdGVz
dHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRzX3dlYnNvY2tldHM9YW55KFsnd2Vi
c29ja2V0JyBpbiB0ZXN0IGZvciB0ZXN0IGluIHRlc3RzXSksIHJldHJ5aW5nPUZhbHNlKQogCiAg
ICAgZGVmIHRlc3RfaHR0cF9sb2NraW5nKHNlbGYpOgogICAgICAgICBydW5uZXIgPSBzZWxmLl9y
dW5uZXIoKQpAQCAtMTM3LDEzICsxMzgsMTMgQEAgY2xhc3MgTGF5b3V0VGVzdFJ1bm5lclRlc3Rz
KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICAgICAjIEludGVycnVwdCBpZiB3ZSd2ZSBleGNl
ZWRlZCBlaXRoZXIgbGltaXQ6CiAgICAgICAgIHJ1bm5lci5fb3B0aW9ucy5leGl0X2FmdGVyX25f
Y3Jhc2hlc19vcl90aW1lb3V0cyA9IDEwCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRlc3RS
dW5JbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgcnVubmVyLl9pbnRlcnJ1cHRfaWZfYXRfZmFpbHVyZV9s
aW1pdHMsIHJlc3VsdF9zdW1tYXJ5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhfVGVzdFJ1
bkludGVycnVwdGVkRXhjZXB0aW9uLCBydW5uZXIuX2ludGVycnVwdF9pZl9hdF9mYWlsdXJlX2xp
bWl0cywgcmVzdWx0X3N1bW1hcnkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0X3N1
bW1hcnkucmVzdWx0c1sncGFzc2VzL3RleHQuaHRtbCddLnR5cGUsIHRlc3RfZXhwZWN0YXRpb25z
LlNLSVApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0X3N1bW1hcnkucmVzdWx0c1sn
cGFzc2VzL2ltYWdlLmh0bWwnXS50eXBlLCB0ZXN0X2V4cGVjdGF0aW9ucy5TS0lQKQogCiAgICAg
ICAgIHJ1bm5lci5fb3B0aW9ucy5leGl0X2FmdGVyX25fY3Jhc2hlc19vcl90aW1lb3V0cyA9IE5v
bmUKICAgICAgICAgcnVubmVyLl9vcHRpb25zLmV4aXRfYWZ0ZXJfbl9mYWlsdXJlcyA9IDEwCi0g
ICAgICAgIGV4Y2VwdGlvbiA9IHNlbGYuYXNzZXJ0UmFpc2VzKFRlc3RSdW5JbnRlcnJ1cHRlZEV4
Y2VwdGlvbiwgcnVubmVyLl9pbnRlcnJ1cHRfaWZfYXRfZmFpbHVyZV9saW1pdHMsIHJlc3VsdF9z
dW1tYXJ5KQorICAgICAgICBleGNlcHRpb24gPSBzZWxmLmFzc2VydFJhaXNlcyhfVGVzdFJ1bklu
dGVycnVwdGVkRXhjZXB0aW9uLCBydW5uZXIuX2ludGVycnVwdF9pZl9hdF9mYWlsdXJlX2xpbWl0
cywgcmVzdWx0X3N1bW1hcnkpCiAKICAgICBkZWYgdGVzdF91cGRhdGVfc3VtbWFyeV93aXRoX3Jl
c3VsdChzZWxmKToKICAgICAgICAgIyBSZWZ0ZXN0cyBleHBlY3RlZCB0byBiZSBpbWFnZSBtaXNt
YXRjaCBzaG91bGQgYmUgcmVzcGVjdGVkIHdoZW4gcGl4ZWxfdGVzdHM9RmFsc2UuCkBAIC0xNTMs
MTMgKzE1NCwxMyBAQCBjbGFzcyBMYXlvdXRUZXN0UnVubmVyVGVzdHModW5pdHRlc3QuVGVzdENh
c2UpOgogICAgICAgICBleHBlY3RhdGlvbnMgPSBUZXN0RXhwZWN0YXRpb25zKHJ1bm5lci5fcG9y
dCwgdGVzdHM9W3Rlc3RdKQogICAgICAgICBydW5uZXIuX2V4cGVjdGF0aW9ucyA9IGV4cGVjdGF0
aW9ucwogCi0gICAgICAgIHJlc3VsdF9zdW1tYXJ5ID0gUmVzdWx0U3VtbWFyeShleHBlY3RhdGlv
bnMsIFt0ZXN0XSwgMSwgc2V0KCkpCisgICAgICAgIHJlc3VsdF9zdW1tYXJ5ID0gUmVzdWx0U3Vt
bWFyeShleHBlY3RhdGlvbnMsIDEsIDEpCiAgICAgICAgIHJlc3VsdCA9IFRlc3RSZXN1bHQodGVz
dF9uYW1lPXRlc3QsIGZhaWx1cmVzPVt0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVSZWZ0ZXN0TWlzbWF0
Y2hEaWROb3RPY2N1cigpXSwgcmVmdGVzdF90eXBlPVsnIT0nXSkKICAgICAgICAgcnVubmVyLl91
cGRhdGVfc3VtbWFyeV93aXRoX3Jlc3VsdChyZXN1bHRfc3VtbWFyeSwgcmVzdWx0KQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKDEsIHJlc3VsdF9zdW1tYXJ5LmV4cGVjdGVkKQogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKDAsIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWQpCiAKLSAgICAgICAg
cmVzdWx0X3N1bW1hcnkgPSBSZXN1bHRTdW1tYXJ5KGV4cGVjdGF0aW9ucywgW3Rlc3RdLCAxLCBz
ZXQoKSkKKyAgICAgICAgcmVzdWx0X3N1bW1hcnkgPSBSZXN1bHRTdW1tYXJ5KGV4cGVjdGF0aW9u
cywgMSwgMSkKICAgICAgICAgcmVzdWx0ID0gVGVzdFJlc3VsdCh0ZXN0X25hbWU9dGVzdCwgZmFp
bHVyZXM9W10sIHJlZnRlc3RfdHlwZT1bJz09J10pCiAgICAgICAgIHJ1bm5lci5fdXBkYXRlX3N1
bW1hcnlfd2l0aF9yZXN1bHQocmVzdWx0X3N1bW1hcnksIHJlc3VsdCkKICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgwLCByZXN1bHRfc3VtbWFyeS5leHBlY3RlZCkKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5
CmluZGV4IDU5ODZkNTM5NjMyMTFjMzRiZTMxM2Q0ZTJmZDQ2YTU0OTM0MzU3M2EuLmQzNTU1YjUx
NmY1YWY4ZTA0MjRkNTE2ZWJhM2NkMThkNzUwNjFhNDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weQpA
QCAtMzYsNiArMzYsNyBAQCBjcmVhdGUgYSBmaW5hbCByZXBvcnQuCiAiIiIKIAogaW1wb3J0IGVy
cm5vCitpbXBvcnQganNvbgogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBtYXRoCiBpbXBvcnQgUXVl
dWUKQEAgLTQ2LDcgKzQ3LDcgQEAgaW1wb3J0IHRpbWUKIAogZnJvbSB3ZWJraXRweS5jb21tb24g
aW1wb3J0IG1lc3NhZ2VfcG9vbAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxl
cnMubGF5b3V0X3Rlc3RfZmluZGVyIGltcG9ydCBMYXlvdXRUZXN0RmluZGVyCi1mcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycy5sYXlvdXRfdGVzdF9ydW5uZXIgaW1wb3J0IExh
eW91dFRlc3RSdW5uZXIsIFRlc3RSdW5JbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgV29ya2VyRXhjZXB0
aW9uCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycy5sYXlvdXRfdGVzdF9y
dW5uZXIgaW1wb3J0IExheW91dFRlc3RSdW5uZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LmNvbnRyb2xsZXJzLnRlc3RfcmVzdWx0X3dyaXRlciBpbXBvcnQgVGVzdFJlc3VsdFdyaXRlcgog
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IGpzb25fbGF5
b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRf
cGFja2FnZSBpbXBvcnQganNvbl9yZXN1bHRzX2dlbmVyYXRvcgpAQCAtNTQsNyArNTUsNiBAQCBm
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25z
CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMgaW1wb3J0IHRlc3RfZmFpbHVyZXMK
IGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscyBpbXBvcnQgdGVzdF9yZXN1bHRzCiBm
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9pbnB1dCBpbXBvcnQgVGVzdElu
cHV0Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMucmVzdWx0X3N1bW1hcnkgaW1w
b3J0IFJlc3VsdFN1bW1hcnkKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnZpZXdzIGltcG9y
dCBwcmludGluZwogCiBmcm9tIHdlYmtpdHB5LnRvb2wgaW1wb3J0IGdyYW1tYXIKQEAgLTY3LDYg
KzY3LDE3IEBAIEJVSUxERVJfQkFTRV9VUkwgPSAiaHR0cDovL2J1aWxkLmNocm9taXVtLm9yZy9i
dWlsZGJvdC9sYXlvdXRfdGVzdF9yZXN1bHRzLyIKIFRlc3RFeHBlY3RhdGlvbnMgPSB0ZXN0X2V4
cGVjdGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zCiAKIAorY2xhc3MgUnVuRGV0YWlscyhvYmplY3Qp
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGl0X2NvZGUsIHN1bW1hcml6ZWRfcmVzdWx0cz1O
b25lLCByZXN1bHRfc3VtbWFyeT1Ob25lLCByZXRyeV9zdW1tYXJ5PU5vbmUpOgorICAgICAgICBz
ZWxmLmV4aXRfY29kZSA9IGV4aXRfY29kZQorICAgICAgICBzZWxmLnN1bW1hcml6ZWRfcmVzdWx0
cyA9IHN1bW1hcml6ZWRfcmVzdWx0cworICAgICAgICBzZWxmLnJlc3VsdF9zdW1tYXJ5ID0gcmVz
dWx0X3N1bW1hcnkKKyAgICAgICAgc2VsZi5yZXRyeV9zdW1tYXJ5ID0gcmV0cnlfc3VtbWFyeQor
ICAgICAgICBzZWxmLmFsbF9yZXN1bHRzID0gcmVzdWx0X3N1bW1hcnkuYWxsX3Jlc3VsdHMgaWYg
cmVzdWx0X3N1bW1hcnkgZWxzZSBbXQorICAgICAgICBpZiByZXRyeV9zdW1tYXJ5ICE9IHJlc3Vs
dF9zdW1tYXJ5OgorICAgICAgICAgICAgc2VsZi5hbGxfcmVzdWx0cy5leHRlbmQocmV0cnlfc3Vt
bWFyeS5hbGxfcmVzdWx0cykKKworCiBkZWYgaW50ZXJwcmV0X3Rlc3RfZmFpbHVyZXMocG9ydCwg
dGVzdF9uYW1lLCBmYWlsdXJlcyk6CiAgICAgIiIiSW50ZXJwcmV0IHRlc3QgZmFpbHVyZXMgYW5k
IHJldHVybnMgYSB0ZXN0IHJlc3VsdCBhcyBkaWN0LgogCkBAIC0xMDcsMjEgKzExOCw4IEBAIGRl
ZiB1c2VfdHJhY19saW5rc19pbl9yZXN1bHRzX2h0bWwocG9ydF9vYmopOgogIyBvciBzcGxpdCBv
ZmYgZnJvbSBNYW5hZ2VyIG9udG8gYW5vdGhlciBoZWxwZXIgY2xhc3MsIGJ1dCBzaG91bGQgbm90
IGJlIGEgZnJlZSBmdW5jdGlvbi4KICMgTW9zdCBsaWtlbHkgdGhpcyBzaG91bGQgYmUgbWFkZSBp
bnRvIGl0cyBvd24gY2xhc3MsIGFuZCB0aGlzIHN1cGVyLWxvbmcgZnVuY3Rpb24KICMgc3BsaXQg
aW50byBtYW55IGhlbHBlciBmdW5jdGlvbnMuCi1kZWYgc3VtbWFyaXplX3Jlc3VsdHMocG9ydF9v
YmosIGV4cGVjdGF0aW9ucywgcmVzdWx0X3N1bW1hcnksIHJldHJ5X3N1bW1hcnksIHRlc3RfdGlt
aW5ncywgb25seV91bmV4cGVjdGVkLCBpbnRlcnJ1cHRlZCk6Ci0gICAgIiIiU3VtbWFyaXplIGZh
aWxpbmcgcmVzdWx0cyBhcyBhIGRpY3QuCi0KLSAgICBGSVhNRTogc3BsaXQgdGhpcyBkYXRhIHN0
cnVjdHVyZSBpbnRvIGEgc2VwYXJhdGUgY2xhc3M/Ci0KLSAgICBBcmdzOgotICAgICAgICBwb3J0
X29iajogaW50ZXJmYWNlIHRvIHBvcnQtc3BlY2lmaWMgaG9va3MKLSAgICAgICAgZXhwZWN0YXRp
b25zOiB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zIG9iamVjdAotICAgICAgICBy
ZXN1bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgZnJvbSBpbml0aWFsIHRlc3QgcnVucwotICAg
ICAgICByZXRyeV9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCBmcm9tIGZpbmFsIHRlc3QgcnVuIG9m
IHJldHJpZWQgdGVzdHMKLSAgICAgICAgdGVzdF90aW1pbmdzOiBhIGxpc3Qgb2YgVGVzdFJlc3Vs
dCBvYmplY3RzIHdoaWNoIGNvbnRhaW4gdGVzdCBydW50aW1lcyBpbiBzZWNvbmRzCi0gICAgICAg
IG9ubHlfdW5leHBlY3RlZDogd2hldGhlciB0byByZXR1cm4gYSBzdW1tYXJ5IG9ubHkgZm9yIHRo
ZSB1bmV4cGVjdGVkIHJlc3VsdHMKLSAgICBSZXR1cm5zOgotICAgICAgICBBIGRpY3Rpb25hcnkg
Y29udGFpbmluZyBhIHN1bW1hcnkgb2YgdGhlIHVuZXhwZWN0ZWQgcmVzdWx0cyBmcm9tIHRoZQot
ICAgICAgICBydW4sIHdpdGggdGhlIGZvbGxvd2luZyBmaWVsZHM6CitkZWYgc3VtbWFyaXplX3Jl
c3VsdHMocG9ydF9vYmosIHJlc3VsdF9zdW1tYXJ5LCByZXRyeV9zdW1tYXJ5KToKKyAgICAiIiJS
ZXR1cm5zIGEgZGljdGlvbmFyeSBjb250YWluaW5nIGEgc3VtbWFyeSBvZiB0aGUgdGVzdCBydW5z
LCB3aXRoIHRoZSBmb2xsb3dpbmcgZmllbGRzOgogICAgICAgICAndmVyc2lvbic6IGEgdmVyc2lv
biBpbmRpY2F0b3IKICAgICAgICAgJ2ZpeGFibGUnOiBUaGUgbnVtYmVyIG9mIGZpeGFibGUgdGVz
dHMgKE5PVyAtIFBBU1MpCiAgICAgICAgICdza2lwcGVkJzogVGhlIG51bWJlciBvZiBza2lwcGVk
IHRlc3RzIChOT1cgJiBTS0lQUEVEKQpAQCAtMTM0LDYgKzEzMiw3IEBAIGRlZiBzdW1tYXJpemVf
cmVzdWx0cyhwb3J0X29iaiwgZXhwZWN0YXRpb25zLCByZXN1bHRfc3VtbWFyeSwgcmV0cnlfc3Vt
bWFyeSwgdGVzCiAgICAgcmVzdWx0cyA9IHt9CiAgICAgcmVzdWx0c1sndmVyc2lvbiddID0gMwog
CisgICAgZXhwZWN0YXRpb25zID0gcmVzdWx0X3N1bW1hcnkuZXhwZWN0YXRpb25zCiAgICAgdGJl
ID0gcmVzdWx0X3N1bW1hcnkudGVzdHNfYnlfZXhwZWN0YXRpb24KICAgICB0YnQgPSByZXN1bHRf
c3VtbWFyeS50ZXN0c19ieV90aW1lbGluZQogICAgIHJlc3VsdHNbJ2ZpeGFibGUnXSA9IGxlbih0
YnRbdGVzdF9leHBlY3RhdGlvbnMuTk9XXSAtIHRiZVt0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTXSkK
QEAgLTE1MSw5ICsxNTAsNyBAQCBkZWYgc3VtbWFyaXplX3Jlc3VsdHMocG9ydF9vYmosIGV4cGVj
dGF0aW9ucywgcmVzdWx0X3N1bW1hcnksIHJldHJ5X3N1bW1hcnksIHRlcwogICAgICAgICBrZXl3
b3Jkc1ttb2RpZmllcl9lbnVtXSA9IG1vZGlmaWVyX3N0cmluZy51cHBlcigpCiAKICAgICB0ZXN0
cyA9IHt9Ci0gICAgb3JpZ2luYWxfcmVzdWx0cyA9IHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRf
cmVzdWx0cyBpZiBvbmx5X3VuZXhwZWN0ZWQgZWxzZSByZXN1bHRfc3VtbWFyeS5yZXN1bHRzCi0K
LSAgICBmb3IgdGVzdF9uYW1lLCByZXN1bHQgaW4gb3JpZ2luYWxfcmVzdWx0cy5pdGVyaXRlbXMo
KToKKyAgICBmb3IgdGVzdF9uYW1lLCByZXN1bHQgaW4gcmVzdWx0X3N1bW1hcnkucmVzdWx0cy5p
dGVyaXRlbXMoKToKICAgICAgICAgIyBOb3RlIHRoYXQgaWYgYSB0ZXN0IGNyYXNoZWQgaW4gdGhl
IG9yaWdpbmFsIHJ1biwgd2UgaWdub3JlCiAgICAgICAgICMgd2hldGhlciBvciBub3QgaXQgY3Jh
c2hlZCB3aGVuIHdlIHJldHJpZWQgaXQgKGlmIHdlIHJldHJpZWQgaXQpLAogICAgICAgICAjIGFu
ZCBhbHdheXMgY29uc2lkZXIgdGhlIHJlc3VsdCBub3QgZmxha3kuCkBAIC0xODAsNyArMTc3LDgg
QEAgZGVmIHN1bW1hcml6ZV9yZXN1bHRzKHBvcnRfb2JqLCBleHBlY3RhdGlvbnMsIHJlc3VsdF9z
dW1tYXJ5LCByZXRyeV9zdW1tYXJ5LCB0ZXMKICAgICAgICAgICAgIGlmIGV4cGVjdGVkID09ICdQ
QVNTJzoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBlbGlmIHJlc3VsdF90eXBl
ID09IHRlc3RfZXhwZWN0YXRpb25zLkNSQVNIOgotICAgICAgICAgICAgbnVtX3JlZ3Jlc3Npb25z
ICs9IDEKKyAgICAgICAgICAgIGlmIHRlc3RfbmFtZSBpbiByZXN1bHRfc3VtbWFyeS51bmV4cGVj
dGVkX3Jlc3VsdHM6CisgICAgICAgICAgICAgICAgbnVtX3JlZ3Jlc3Npb25zICs9IDEKICAgICAg
ICAgZWxpZiByZXN1bHRfdHlwZSA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5NSVNTSU5HOgogICAgICAg
ICAgICAgaWYgdGVzdF9uYW1lIGluIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRfcmVzdWx0czoK
ICAgICAgICAgICAgICAgICBudW1fbWlzc2luZyArPSAxCkBAIC0xOTgsOSArMTk2LDYgQEAgZGVm
IHN1bW1hcml6ZV9yZXN1bHRzKHBvcnRfb2JqLCBleHBlY3RhdGlvbnMsIHJlc3VsdF9zdW1tYXJ5
LCByZXRyeV9zdW1tYXJ5LCB0ZXMKIAogICAgICAgICB0ZXN0X2RpY3RbJ2V4cGVjdGVkJ10gPSBl
eHBlY3RlZAogICAgICAgICB0ZXN0X2RpY3RbJ2FjdHVhbCddID0gIiAiLmpvaW4oYWN0dWFsKQot
ICAgICAgICAjIEZJWE1FOiBTZXQgdGhpcyBjb3JyZWN0bHkgb25jZSBodHRwczovL3dlYmtpdC5v
cmcvYi8zNzczOSBpcyBmaXhlZAotICAgICAgICAjIGFuZCBvbmx5IHNldCBpdCBpZiB0aGVyZSBh
Y3R1YWxseSBpcyBzdGRlcnIgZGF0YS4KLQogICAgICAgICB0ZXN0X2RpY3QudXBkYXRlKGludGVy
cHJldF90ZXN0X2ZhaWx1cmVzKHBvcnRfb2JqLCB0ZXN0X25hbWUsIHJlc3VsdC5mYWlsdXJlcykp
CiAKICAgICAgICAgIyBTdG9yZSB0ZXN0IGhpZXJhcmNoaWNhbGx5IGJ5IGRpcmVjdG9yeS4gZS5n
LgpAQCAtMjMwLDcgKzIyNSw3IEBAIGRlZiBzdW1tYXJpemVfcmVzdWx0cyhwb3J0X29iaiwgZXhw
ZWN0YXRpb25zLCByZXN1bHRfc3VtbWFyeSwgcmV0cnlfc3VtbWFyeSwgdGVzCiAgICAgcmVzdWx0
c1snbnVtX21pc3NpbmcnXSA9IG51bV9taXNzaW5nCiAgICAgcmVzdWx0c1snbnVtX3JlZ3Jlc3Np
b25zJ10gPSBudW1fcmVncmVzc2lvbnMKICAgICByZXN1bHRzWyd1c2VzX2V4cGVjdGF0aW9uc19m
aWxlJ10gPSBwb3J0X29iai51c2VzX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoKQotICAgIHJlc3Vs
dHNbJ2ludGVycnVwdGVkJ10gPSBpbnRlcnJ1cHRlZCAgIyBEb2VzIHJlc3VsdHMuaHRtbCBoYXZl
IGVub3VnaCBpbmZvcm1hdGlvbiB0byBjb21wdXRlIHRoaXMgaXRzZWxmPyAoYnkgY2hlY2tpbmcg
dG90YWwgbnVtYmVyIG9mIHJlc3VsdHMgdnMuIHRvdGFsIG51bWJlciBvZiB0ZXN0cz8pCisgICAg
cmVzdWx0c1snaW50ZXJydXB0ZWQnXSA9IHJlc3VsdF9zdW1tYXJ5LmludGVycnVwdGVkICAjIERv
ZXMgcmVzdWx0cy5odG1sIGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGNvbXB1dGUgdGhpcyBp
dHNlbGY/IChieSBjaGVja2luZyB0b3RhbCBudW1iZXIgb2YgcmVzdWx0cyB2cy4gdG90YWwgbnVt
YmVyIG9mIHRlc3RzPykKICAgICByZXN1bHRzWydsYXlvdXRfdGVzdHNfZGlyJ10gPSBwb3J0X29i
ai5sYXlvdXRfdGVzdHNfZGlyKCkKICAgICByZXN1bHRzWydoYXNfd2RpZmYnXSA9IHBvcnRfb2Jq
LndkaWZmX2F2YWlsYWJsZSgpCiAgICAgcmVzdWx0c1snaGFzX3ByZXR0eV9wYXRjaCddID0gcG9y
dF9vYmoucHJldHR5X3BhdGNoX2F2YWlsYWJsZSgpCkBAIC0yODMsNyArMjc4LDYgQEAgY2xhc3Mg
TWFuYWdlcihvYmplY3QpOgogCiAgICAgICAgIHNlbGYuX3BhdGhzID0gc2V0KCkKICAgICAgICAg
c2VsZi5fdGVzdF9uYW1lcyA9IE5vbmUKLSAgICAgICAgc2VsZi5fcmV0cnlpbmcgPSBGYWxzZQog
ICAgICAgICBzZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSA9IHNlbGYuX3BvcnQucmVzdWx0c19kaXJl
Y3RvcnkoKQogICAgICAgICBzZWxmLl9maW5kZXIgPSBMYXlvdXRUZXN0RmluZGVyKHNlbGYuX3Bv
cnQsIHNlbGYuX29wdGlvbnMpCiAgICAgICAgIHNlbGYuX3J1bm5lciA9IExheW91dFRlc3RSdW5u
ZXIoc2VsZi5fb3B0aW9ucywgc2VsZi5fcG9ydCwgc2VsZi5fcHJpbnRlciwgc2VsZi5fcmVzdWx0
c19kaXJlY3RvcnksIHNlbGYuX2V4cGVjdGF0aW9ucywgc2VsZi5fdGVzdF9pc19zbG93KQpAQCAt
Mjk3LDM4ICsyOTEsMjggQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAgIGRlZiBfaXNfd2Vi
c29ja2V0X3Rlc3Qoc2VsZiwgdGVzdCk6CiAgICAgICAgIHJldHVybiBzZWxmLldFQlNPQ0tFVF9T
VUJESVIgaW4gdGVzdAogCi0gICAgZGVmIF9odHRwX3Rlc3RzKHNlbGYpOgotICAgICAgICByZXR1
cm4gc2V0KHRlc3QgZm9yIHRlc3QgaW4gc2VsZi5fdGVzdF9uYW1lcyBpZiBzZWxmLl9pc19odHRw
X3Rlc3QodGVzdCkpCisgICAgZGVmIF9odHRwX3Rlc3RzKHNlbGYsIHRlc3RfbmFtZXMpOgorICAg
ICAgICByZXR1cm4gc2V0KHRlc3QgZm9yIHRlc3QgaW4gdGVzdF9uYW1lcyBpZiBzZWxmLl9pc19o
dHRwX3Rlc3QodGVzdCkpCiAKICAgICBkZWYgX2lzX3BlcmZfdGVzdChzZWxmLCB0ZXN0KToKICAg
ICAgICAgcmV0dXJuIHNlbGYuUEVSRl9TVUJESVIgPT0gdGVzdCBvciAoc2VsZi5QRVJGX1NVQkRJ
UiArIHNlbGYuX3BvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUikgaW4gdGVzdAogCi0gICAgZGVmIF9w
cmVwYXJlX2xpc3RzKHNlbGYpOgotICAgICAgICB0ZXN0c190b19za2lwID0gc2VsZi5fZmluZGVy
LnNraXBfdGVzdHMoc2VsZi5fcGF0aHMsIHNlbGYuX3Rlc3RfbmFtZXMsIHNlbGYuX2V4cGVjdGF0
aW9ucywgc2VsZi5faHR0cF90ZXN0cygpKQotICAgICAgICBzZWxmLl90ZXN0X25hbWVzID0gW3Rl
c3QgZm9yIHRlc3QgaW4gc2VsZi5fdGVzdF9uYW1lcyBpZiB0ZXN0IG5vdCBpbiB0ZXN0c190b19z
a2lwXQorICAgIGRlZiBfcHJlcGFyZV9saXN0cyhzZWxmLCBwYXRocywgdGVzdF9uYW1lcyk6Cisg
ICAgICAgIHRlc3RzX3RvX3NraXAgPSBzZWxmLl9maW5kZXIuc2tpcF90ZXN0cyhwYXRocywgdGVz
dF9uYW1lcywgc2VsZi5fZXhwZWN0YXRpb25zLCBzZWxmLl9odHRwX3Rlc3RzKHRlc3RfbmFtZXMp
KQorICAgICAgICB0ZXN0X25hbWVzID0gW3Rlc3QgZm9yIHRlc3QgaW4gdGVzdF9uYW1lcyBpZiB0
ZXN0IG5vdCBpbiB0ZXN0c190b19za2lwXQogCiAgICAgICAgICMgQ3JlYXRlIGEgc29ydGVkIGxp
c3Qgb2YgdGVzdCBmaWxlcyBzbyB0aGUgc3Vic2V0IGNodW5rLAogICAgICAgICAjIGlmIHVzZWQs
IGNvbnRhaW5zIGFscGhhYmV0aWNhbGx5IGNvbnNlY3V0aXZlIHRlc3RzLgogICAgICAgICBpZiBz
ZWxmLl9vcHRpb25zLm9yZGVyID09ICduYXR1cmFsJzoKLSAgICAgICAgICAgIHNlbGYuX3Rlc3Rf
bmFtZXMuc29ydChrZXk9c2VsZi5fcG9ydC50ZXN0X2tleSkKKyAgICAgICAgICAgIHRlc3RfbmFt
ZXMuc29ydChrZXk9c2VsZi5fcG9ydC50ZXN0X2tleSkKICAgICAgICAgZWxpZiBzZWxmLl9vcHRp
b25zLm9yZGVyID09ICdyYW5kb20nOgotICAgICAgICAgICAgcmFuZG9tLnNodWZmbGUoc2VsZi5f
dGVzdF9uYW1lcykKKyAgICAgICAgICAgIHJhbmRvbS5zaHVmZmxlKHRlc3RfbmFtZXMpCiAKLSAg
ICAgICAgc2VsZi5fdGVzdF9uYW1lcywgdGVzdHNfaW5fb3RoZXJfY2h1bmtzID0gc2VsZi5fZmlu
ZGVyLnNwbGl0X2ludG9fY2h1bmtzKHNlbGYuX3Rlc3RfbmFtZXMpCisgICAgICAgIHRlc3RfbmFt
ZXMsIHRlc3RzX2luX290aGVyX2NodW5rcyA9IHNlbGYuX2ZpbmRlci5zcGxpdF9pbnRvX2NodW5r
cyh0ZXN0X25hbWVzKQogICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMuYWRkX3NraXBwZWRfdGVz
dHModGVzdHNfaW5fb3RoZXJfY2h1bmtzKQogICAgICAgICB0ZXN0c190b19za2lwLnVwZGF0ZSh0
ZXN0c19pbl9vdGhlcl9jaHVua3MpCiAKLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5yZXBlYXRf
ZWFjaCA+IDE6Ci0gICAgICAgICAgICBsaXN0X3dpdGhfcmVwZXRpdGlvbnMgPSBbXQotICAgICAg
ICAgICAgZm9yIHRlc3QgaW4gc2VsZi5fdGVzdF9uYW1lczoKLSAgICAgICAgICAgICAgICBsaXN0
X3dpdGhfcmVwZXRpdGlvbnMgKz0gKFt0ZXN0XSAqIHNlbGYuX29wdGlvbnMucmVwZWF0X2VhY2gp
Ci0gICAgICAgICAgICBzZWxmLl90ZXN0X25hbWVzID0gbGlzdF93aXRoX3JlcGV0aXRpb25zCi0K
LSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5pdGVyYXRpb25zID4gMToKLSAgICAgICAgICAgIHNl
bGYuX3Rlc3RfbmFtZXMgPSBzZWxmLl90ZXN0X25hbWVzICogc2VsZi5fb3B0aW9ucy5pdGVyYXRp
b25zCi0KLSAgICAgICAgaXRlcmF0aW9ucyA9IHNlbGYuX29wdGlvbnMucmVwZWF0X2VhY2ggKiBz
ZWxmLl9vcHRpb25zLml0ZXJhdGlvbnMKLSAgICAgICAgcmV0dXJuIFJlc3VsdFN1bW1hcnkoc2Vs
Zi5fZXhwZWN0YXRpb25zLCBzZXQoc2VsZi5fdGVzdF9uYW1lcyksIGl0ZXJhdGlvbnMsIHRlc3Rz
X3RvX3NraXApCisgICAgICAgIHJldHVybiB0ZXN0X25hbWVzLCB0ZXN0c190b19za2lwCiAKICAg
ICBkZWYgX3Rlc3RfaW5wdXRfZm9yX2ZpbGUoc2VsZiwgdGVzdF9maWxlKToKICAgICAgICAgcmV0
dXJuIFRlc3RJbnB1dCh0ZXN0X2ZpbGUsCkBAIC0zNDUsMTIgKzMyOSwxMiBAQCBjbGFzcyBNYW5h
Z2VyKG9iamVjdCk6CiAgICAgZGVmIF90ZXN0X2lzX3Nsb3coc2VsZiwgdGVzdF9maWxlKToKICAg
ICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdGF0aW9ucy5oYXNfbW9kaWZpZXIodGVzdF9maWxlLCB0
ZXN0X2V4cGVjdGF0aW9ucy5TTE9XKQogCi0gICAgZGVmIG5lZWRzX3NlcnZlcnMoc2VsZik6Ci0g
ICAgICAgIHJldHVybiBhbnkoc2VsZi5fdGVzdF9yZXF1aXJlc19sb2NrKHRlc3RfbmFtZSkgZm9y
IHRlc3RfbmFtZSBpbiBzZWxmLl90ZXN0X25hbWVzKSBhbmQgc2VsZi5fb3B0aW9ucy5odHRwCisg
ICAgZGVmIG5lZWRzX3NlcnZlcnMoc2VsZiwgdGVzdHNfdG9fcnVuKToKKyAgICAgICAgcmV0dXJu
IGFueShzZWxmLl90ZXN0X3JlcXVpcmVzX2xvY2sodGVzdF9uYW1lKSBmb3IgdGVzdF9uYW1lIGlu
IHRlc3RzX3RvX3J1bikgYW5kIHNlbGYuX29wdGlvbnMuaHR0cAogCi0gICAgZGVmIF9zZXRfdXBf
cnVuKHNlbGYpOgorICAgIGRlZiBfc2V0X3VwX3J1bihzZWxmLCBuZWVkc19zZXJ2ZXJzKToKICAg
ICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUoIkNoZWNraW5nIGJ1aWxkIC4uLiIpCi0g
ICAgICAgIGlmIG5vdCBzZWxmLl9wb3J0LmNoZWNrX2J1aWxkKHNlbGYubmVlZHNfc2VydmVycygp
KToKKyAgICAgICAgaWYgbm90IHNlbGYuX3BvcnQuY2hlY2tfYnVpbGQobmVlZHNfc2VydmVycyk6
CiAgICAgICAgICAgICBfbG9nLmVycm9yKCJCdWlsZCBjaGVjayBmYWlsZWQiKQogICAgICAgICAg
ICAgcmV0dXJuIEZhbHNlCiAKQEAgLTM2Myw3ICszNDcsNyBAQCBjbGFzcyBNYW5hZ2VyKG9iamVj
dCk6CiAgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgc3lzdGVtIGRlcGVuZGVuY2llcyAodGhlbWVz
LCBmb250cywgLi4uKSBhcmUgY29ycmVjdC4KICAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMu
bm9jaGVja19zeXNfZGVwczoKICAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRl
KCJDaGVja2luZyBzeXN0ZW0gZGVwZW5kZW5jaWVzIC4uLiIpCi0gICAgICAgICAgICBpZiBub3Qg
c2VsZi5fcG9ydC5jaGVja19zeXNfZGVwcyhzZWxmLm5lZWRzX3NlcnZlcnMoKSk6CisgICAgICAg
ICAgICBpZiBub3Qgc2VsZi5fcG9ydC5jaGVja19zeXNfZGVwcyhuZWVkc19zZXJ2ZXJzKToKICAg
ICAgICAgICAgICAgICBzZWxmLl9wb3J0LnN0b3BfaGVscGVyKCkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKIApAQCAtMzc3LDUwICszNjEsNDUgQEAgY2xhc3MgTWFuYWdlcihvYmplY3Qp
OgogICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIHJ1bihzZWxmLCBhcmdzKToKLSAgICAg
ICAgIiIiUnVuIGFsbCBvdXIgdGVzdHMgb24gYWxsIG91ciB0ZXN0IGZpbGVzIGFuZCByZXR1cm4g
dGhlIG51bWJlciBvZiB1bmV4cGVjdGVkIHJlc3VsdHMgKDAgPT0gc3VjY2VzcykuIiIiCisgICAg
ICAgICIiIlJ1biBhbGwgb3VyIHRlc3RzIG9uIGFsbCBvdXIgdGVzdCBmaWxlcyBhbmQgcmV0dXJu
IGEgdHVwbGUgb2YKKyAgICAgICAgICAgLSB0aGUgbnVtYmVyIG9mIHVuZXhwZWN0ZWQgcmVzdWx0
cyAoMCA9PSBzdWNjZXNzKQorICAgICAgICAgICAtIGEgc3VtbWFyaXplZCBkaWN0IGNvbnRhaW5p
bmcgdGhlIHJlc3VsdHMgb2YgdGhlIHRlc3RzCisgICAgICAgICAgIC0gZGV0YWlscyBmb3IgdGhl
IG1haW4gcnVuCisgICAgICAgICAgIC0gZGV0YWlscyBmb3IgdGhlIHJldHJ5IHJ1bi4KKyAgICAg
ICAgICAgSWYgdGhlIGZpcnN0IHZhbHVlIGlzIC0xLCB0aGUgcmVtYWluaW5nIHZhbHVlcyBhcmUg
Tm9uZS4KKyAgICAgICAgICAgIiIiCisKICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRh
dGUoIkNvbGxlY3RpbmcgdGVzdHMgLi4uIikKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2Vs
Zi5fcGF0aHMsIHNlbGYuX3Rlc3RfbmFtZXMgPSBzZWxmLl9jb2xsZWN0X3Rlc3RzKGFyZ3MpCisg
ICAgICAgICAgICBwYXRocywgdGVzdF9uYW1lcyA9IHNlbGYuX2NvbGxlY3RfdGVzdHMoYXJncykK
ICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXhjZXB0aW9uOgogICAgICAgICAgICAgIyBUaGlz
IGlzIHJhaXNlZCBpZiAtLXRlc3QtbGlzdCBkb2Vzbid0IGV4aXN0Ci0gICAgICAgICAgICByZXR1
cm4gLTEKKyAgICAgICAgICAgIHJldHVybiBSdW5EZXRhaWxzKGV4aXRfY29kZT0tMSkKIAogICAg
ICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgiUGFyc2luZyBleHBlY3RhdGlvbnMgLi4u
IikKLSAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zID0gdGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4
cGVjdGF0aW9ucyhzZWxmLl9wb3J0LCBzZWxmLl90ZXN0X25hbWVzKQorICAgICAgICBzZWxmLl9l
eHBlY3RhdGlvbnMgPSB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zKHNlbGYuX3Bv
cnQsIHRlc3RfbmFtZXMpCiAKLSAgICAgICAgbnVtX2FsbF90ZXN0X2ZpbGVzX2ZvdW5kID0gbGVu
KHNlbGYuX3Rlc3RfbmFtZXMpCi0gICAgICAgIHJlc3VsdF9zdW1tYXJ5ID0gc2VsZi5fcHJlcGFy
ZV9saXN0cygpCisgICAgICAgIHRlc3RzX3RvX3J1biwgdGVzdHNfdG9fc2tpcCA9IHNlbGYuX3By
ZXBhcmVfbGlzdHMocGF0aHMsIHRlc3RfbmFtZXMpCiAKICAgICAgICAgIyBDaGVjayB0byBtYWtl
IHN1cmUgd2UncmUgbm90IHNraXBwaW5nIGV2ZXJ5IHRlc3QuCi0gICAgICAgIGlmIG5vdCBzZWxm
Ll90ZXN0X25hbWVzOgorICAgICAgICBpZiBub3QgdGVzdHNfdG9fcnVuOgogICAgICAgICAgICAg
X2xvZy5jcml0aWNhbCgnTm8gdGVzdHMgdG8gcnVuLicpCi0gICAgICAgICAgICByZXR1cm4gLTEK
LQotICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X2ZvdW5kKG51bV9hbGxfdGVzdF9maWxlc19m
b3VuZCwgbGVuKHNlbGYuX3Rlc3RfbmFtZXMpLCBzZWxmLl9vcHRpb25zLnJlcGVhdF9lYWNoLCBz
ZWxmLl9vcHRpb25zLml0ZXJhdGlvbnMpCi0gICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfZXhw
ZWN0ZWQocmVzdWx0X3N1bW1hcnksIHNlbGYuX2V4cGVjdGF0aW9ucy5nZXRfdGVzdHNfd2l0aF9y
ZXN1bHRfdHlwZSkKKyAgICAgICAgICAgIHJldHVybiBSdW5EZXRhaWxzKGV4aXRfY29kZT0tMSkK
IAotICAgICAgICBpZiBub3Qgc2VsZi5fc2V0X3VwX3J1bigpOgotICAgICAgICAgICAgcmV0dXJu
IC0xCisgICAgICAgIGlmIG5vdCBzZWxmLl9zZXRfdXBfcnVuKHNlbGYubmVlZHNfc2VydmVycyh0
ZXN0c190b19ydW4pKToKKyAgICAgICAgICAgIHJldHVybiBSdW5EZXRhaWxzKGV4aXRfY29kZT0t
MSkKIAogICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgcmV0cnlfc3Vt
bWFyeSA9IHJlc3VsdF9zdW1tYXJ5ID0gc2VsZi5fcnVuX3Rlc3RzKHRlc3RzX3RvX3J1biwgdGVz
dHNfdG9fc2tpcCwgc2VsZi5fb3B0aW9ucy5yZXBlYXRfZWFjaCwgc2VsZi5fb3B0aW9ucy5pdGVy
YXRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSwgcmV0cnlpbmc9RmFs
c2UpCiAKLSAgICAgICAgaW50ZXJydXB0ZWQsIGtleWJvYXJkX2ludGVycnVwdGVkLCB0aHJlYWRf
dGltaW5ncywgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyA9IFwKLSAgICAg
ICAgICAgIHNlbGYuX3J1bl90ZXN0cyhzZWxmLl90ZXN0X25hbWVzLCByZXN1bHRfc3VtbWFyeSwg
aW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSkKLQotICAgICAgICAjIFdlIGV4Y2x1
ZGUgdGhlIGNyYXNoZXMgZnJvbSB0aGUgbGlzdCBvZiByZXN1bHRzIHRvIHJldHJ5LCBiZWNhdXNl
Ci0gICAgICAgICMgd2Ugd2FudCB0byB0cmVhdCBldmVuIGEgcG90ZW50aWFsbHkgZmxha3kgY3Jh
c2ggYXMgYW4gZXJyb3IuCi0KLSAgICAgICAgZmFpbHVyZXMgPSBzZWxmLl9nZXRfZmFpbHVyZXMo
cmVzdWx0X3N1bW1hcnksIGluY2x1ZGVfY3Jhc2hlcz1zZWxmLl9wb3J0LnNob3VsZF9yZXRyeV9j
cmFzaGVzKCksIGluY2x1ZGVfbWlzc2luZz1GYWxzZSkKLSAgICAgICAgcmV0cnlfc3VtbWFyeSA9
IHJlc3VsdF9zdW1tYXJ5Ci0gICAgICAgIHdoaWxlIChsZW4oZmFpbHVyZXMpIGFuZCBzZWxmLl9v
cHRpb25zLnJldHJ5X2ZhaWx1cmVzIGFuZCBub3Qgc2VsZi5fcmV0cnlpbmcgYW5kIG5vdCBpbnRl
cnJ1cHRlZCBhbmQgbm90IGtleWJvYXJkX2ludGVycnVwdGVkKToKLSAgICAgICAgICAgIF9sb2cu
aW5mbygnJykKLSAgICAgICAgICAgIF9sb2cuaW5mbygiUmV0cnlpbmcgJWQgdW5leHBlY3RlZCBm
YWlsdXJlKHMpIC4uLiIgJSBsZW4oZmFpbHVyZXMpKQotICAgICAgICAgICAgX2xvZy5pbmZvKCcn
KQotICAgICAgICAgICAgc2VsZi5fcmV0cnlpbmcgPSBUcnVlCi0gICAgICAgICAgICByZXRyeV9z
dW1tYXJ5ID0gUmVzdWx0U3VtbWFyeShzZWxmLl9leHBlY3RhdGlvbnMsIGZhaWx1cmVzLmtleXMo
KSwgMSwgc2V0KCkpCi0gICAgICAgICAgICAjIE5vdGUgdGhhdCB3ZSBpbnRlbnRpb25hbGx5IGln
bm9yZSB0aGUgcmV0dXJuIHZhbHVlIGhlcmUuCi0gICAgICAgICAgICBzZWxmLl9ydW5fdGVzdHMo
ZmFpbHVyZXMua2V5cygpLCByZXRyeV9zdW1tYXJ5LCAxKQotICAgICAgICAgICAgZmFpbHVyZXMg
PSBzZWxmLl9nZXRfZmFpbHVyZXMocmV0cnlfc3VtbWFyeSwgaW5jbHVkZV9jcmFzaGVzPVRydWUs
IGluY2x1ZGVfbWlzc2luZz1UcnVlKQorICAgICAgICBpZiBub3QgcmVzdWx0X3N1bW1hcnkuaW50
ZXJydXB0ZWQgYW5kIHNlbGYuX29wdGlvbnMucmV0cnlfZmFpbHVyZXM6CisgICAgICAgICAgICB0
ZXN0c190b19yZXRyeSA9IHNlbGYuX3Rlc3RzX3RvX3JldHJ5KHJlc3VsdF9zdW1tYXJ5LCBpbmNs
dWRlX2NyYXNoZXM9c2VsZi5fcG9ydC5zaG91bGRfcmV0cnlfY3Jhc2hlcygpKQorICAgICAgICAg
ICAgaWYgdGVzdHNfdG9fcmV0cnk6CisgICAgICAgICAgICAgICAgX2xvZy5pbmZvKCcnKQorICAg
ICAgICAgICAgICAgIF9sb2cuaW5mbygiUmV0cnlpbmcgJWQgdW5leHBlY3RlZCBmYWlsdXJlKHMp
IC4uLiIgJSBsZW4odGVzdHNfdG9fcmV0cnkpKQorICAgICAgICAgICAgICAgIF9sb2cuaW5mbygn
JykKKyAgICAgICAgICAgICAgICByZXRyeV9zdW1tYXJ5ID0gc2VsZi5fcnVuX3Rlc3RzKHRlc3Rz
X3RvX3JldHJ5LCBbXSwgMSwgMSwgMSwgcmV0cnlpbmc9VHJ1ZSkKIAogICAgICAgICBlbmRfdGlt
ZSA9IHRpbWUudGltZSgpCiAKQEAgLTQyOCwzNyArNDA3LDQ0IEBAIGNsYXNzIE1hbmFnZXIob2Jq
ZWN0KToKICAgICAgICAgIyBmb3IgbmV3IGxvZ3MgYWZ0ZXIgdGhlIHRlc3QgcnVuIGZpbmlzaGVz
LgogICAgICAgICBzZWxmLl9sb29rX2Zvcl9uZXdfY3Jhc2hfbG9ncyhyZXN1bHRfc3VtbWFyeSwg
c3RhcnRfdGltZSkKICAgICAgICAgc2VsZi5fbG9va19mb3JfbmV3X2NyYXNoX2xvZ3MocmV0cnlf
c3VtbWFyeSwgc3RhcnRfdGltZSkKKwogICAgICAgICBzZWxmLl9jbGVhbl91cF9ydW4oKQogCi0g
ICAgICAgIHVuZXhwZWN0ZWRfcmVzdWx0cyA9IHN1bW1hcml6ZV9yZXN1bHRzKHNlbGYuX3BvcnQs
IHNlbGYuX2V4cGVjdGF0aW9ucywgcmVzdWx0X3N1bW1hcnksIHJldHJ5X3N1bW1hcnksIGluZGl2
aWR1YWxfdGVzdF90aW1pbmdzLCBvbmx5X3VuZXhwZWN0ZWQ9VHJ1ZSwgaW50ZXJydXB0ZWQ9aW50
ZXJydXB0ZWQpCisgICAgICAgIGlmIHJlc3VsdF9zdW1tYXJ5LmtleWJvYXJkX2ludGVycnVwdGVk
IG9yIHJldHJ5X3N1bW1hcnkua2V5Ym9hcmRfaW50ZXJydXB0ZWQ6CisgICAgICAgICAgICByYWlz
ZSBLZXlib2FyZEludGVycnVwdAogCi0gICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfcmVzdWx0
cyhlbmRfdGltZSAtIHN0YXJ0X3RpbWUsIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsIGlu
ZGl2aWR1YWxfdGVzdF90aW1pbmdzLCByZXN1bHRfc3VtbWFyeSwgdW5leHBlY3RlZF9yZXN1bHRz
KQorICAgICAgICBzdW1tYXJpemVkX3Jlc3VsdHMgPSBzdW1tYXJpemVfcmVzdWx0cyhzZWxmLl9w
b3J0LCByZXN1bHRfc3VtbWFyeSwgcmV0cnlfc3VtbWFyeSkKIAotICAgICAgICAjIFJlLXJhaXNl
IGEgS2V5Ym9hcmRJbnRlcnJ1cHQgaWYgbmVjZXNzYXJ5IHNvIHRoZSBjYWxsZXIgY2FuIGhhbmRs
ZSBpdC4KLSAgICAgICAgaWYga2V5Ym9hcmRfaW50ZXJydXB0ZWQ6Ci0gICAgICAgICAgICByYWlz
ZSBLZXlib2FyZEludGVycnVwdAorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3RpbWluZ19z
dGF0aXN0aWNzKGVuZF90aW1lIC0gc3RhcnRfdGltZSwgcmVzdWx0X3N1bW1hcnkpCiAKLSAgICAg
ICAgIyBGSVhNRTogcmVtb3ZlIHJlY29yZF9yZXN1bHRzLiBJdCdzIGp1c3QgdXNlZCBmb3IgdGVz
dGluZy4gVGhlcmUncyBubyBuZWVkCi0gICAgICAgICMgZm9yIGl0IHRvIGJlIGEgY29tbWFuZGxp
bmUgYXJndW1lbnQuCi0gICAgICAgIGlmIChzZWxmLl9vcHRpb25zLnJlY29yZF9yZXN1bHRzIGFu
ZCBub3Qgc2VsZi5fb3B0aW9ucy5kcnlfcnVuIGFuZCBub3Qga2V5Ym9hcmRfaW50ZXJydXB0ZWQp
OgorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X29uZV9saW5lX3N1bW1hcnkocmVzdWx0X3N1
bW1hcnkudG90YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHRfc3VtbWFyeS5leHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWQpCisKKyAgICAgICAgaWYg
bm90IHNlbGYuX29wdGlvbnMuZHJ5X3J1biBhbmQgbm90IHJlc3VsdF9zdW1tYXJ5LmtleWJvYXJk
X2ludGVycnVwdGVkOgogICAgICAgICAgICAgc2VsZi5fcG9ydC5wcmludF9sZWFrc19zdW1tYXJ5
KCkKLSAgICAgICAgICAgICMgV3JpdGUgdGhlIHNhbWUgZGF0YSB0byBsb2cgZmlsZXMgYW5kIHVw
bG9hZCBnZW5lcmF0ZWQgSlNPTiBmaWxlcyB0byBhcHBlbmdpbmUgc2VydmVyLgotICAgICAgICAg
ICAgc3VtbWFyaXplZF9yZXN1bHRzID0gc3VtbWFyaXplX3Jlc3VsdHMoc2VsZi5fcG9ydCwgc2Vs
Zi5fZXhwZWN0YXRpb25zLCByZXN1bHRfc3VtbWFyeSwgcmV0cnlfc3VtbWFyeSwgaW5kaXZpZHVh
bF90ZXN0X3RpbWluZ3MsIG9ubHlfdW5leHBlY3RlZD1GYWxzZSwgaW50ZXJydXB0ZWQ9aW50ZXJy
dXB0ZWQpCi0gICAgICAgICAgICBzZWxmLl91cGxvYWRfanNvbl9maWxlcyhzdW1tYXJpemVkX3Jl
c3VsdHMsIHJlc3VsdF9zdW1tYXJ5LCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKKyAgICAgICAg
ICAgIHNlbGYuX3VwbG9hZF9qc29uX2ZpbGVzKHN1bW1hcml6ZWRfcmVzdWx0cywgcmVzdWx0X3N1
bW1hcnksIHRlc3RzX3RvX3J1bikKKworICAgICAgICAgICAgcmVzdWx0c19wYXRoID0gc2VsZi5f
ZmlsZXN5c3RlbS5qb2luKHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5LCAncmVzdWx0cy5odG1sJykK
KyAgICAgICAgICAgIHNlbGYuX2NvcHlfcmVzdWx0c19odG1sX2ZpbGUocmVzdWx0c19wYXRoKQor
ICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5zaG93X3Jlc3VsdHMgYW5kIChyZXN1bHRfc3Vt
bWFyeS51bmV4cGVjdGVkX2ZhaWx1cmVzIG9yIChzZWxmLl9vcHRpb25zLmZ1bGxfcmVzdWx0c19o
dG1sIGFuZCByZXN1bHRfc3VtbWFyeS50b3RhbF9mYWlsdXJlcykpOgorICAgICAgICAgICAgICAg
IHNlbGYuX3BvcnQuc2hvd19yZXN1bHRzX2h0bWxfZmlsZShyZXN1bHRzX3BhdGgpCisKKyAgICAg
ICAgcmV0dXJuIFJ1bkRldGFpbHMoc2VsZi5fcG9ydC5leGl0X2NvZGVfZnJvbV9zdW1tYXJpemVk
X3Jlc3VsdHMoc3VtbWFyaXplZF9yZXN1bHRzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
c3VtbWFyaXplZF9yZXN1bHRzLCByZXN1bHRfc3VtbWFyeSwgcmV0cnlfc3VtbWFyeSkKIAotICAg
ICAgICAjIFdyaXRlIHRoZSBzdW1tYXJ5IHRvIGRpc2sgKHJlc3VsdHMuaHRtbCkgYW5kIGRpc3Bs
YXkgaXQgaWYgcmVxdWVzdGVkLgotICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5kcnlfcnVu
OgotICAgICAgICAgICAgc2VsZi5fY29weV9yZXN1bHRzX2h0bWxfZmlsZSgpCi0gICAgICAgICAg
ICBpZiBzZWxmLl9vcHRpb25zLnNob3dfcmVzdWx0czoKLSAgICAgICAgICAgICAgICBzZWxmLl9z
aG93X3Jlc3VsdHNfaHRtbF9maWxlKHJlc3VsdF9zdW1tYXJ5KQorICAgIGRlZiBfcnVuX3Rlc3Rz
KHNlbGYsIHRlc3RzX3RvX3J1biwgdGVzdHNfdG9fc2tpcCwgcmVwZWF0X2VhY2gsIGl0ZXJhdGlv
bnMsIG51bV93b3JrZXJzLCByZXRyeWluZyk6CisgICAgICAgIHRlc3RfaW5wdXRzID0gW10KKyAg
ICAgICAgZm9yIF8gaW4gcmFuZ2UoaXRlcmF0aW9ucyk6CisgICAgICAgICAgICBmb3IgdGVzdCBp
biB0ZXN0c190b19ydW46CisgICAgICAgICAgICAgICAgZm9yIF8gaW4gcmFuZ2UocmVwZWF0X2Vh
Y2gpOgorICAgICAgICAgICAgICAgICAgICB0ZXN0X2lucHV0cy5hcHBlbmQoc2VsZi5fdGVzdF9p
bnB1dF9mb3JfZmlsZSh0ZXN0KSkKIAotICAgICAgICByZXR1cm4gc2VsZi5fcG9ydC5leGl0X2Nv
ZGVfZnJvbV9zdW1tYXJpemVkX3Jlc3VsdHModW5leHBlY3RlZF9yZXN1bHRzKQorICAgICAgICBu
ZWVkc19odHRwID0gc2VsZi5fcG9ydC5yZXF1aXJlc19odHRwX3NlcnZlcigpIG9yIGFueShzZWxm
Ll9pc19odHRwX3Rlc3QodGVzdCkgZm9yIHRlc3QgaW4gdGVzdHNfdG9fcnVuKQorICAgICAgICBu
ZWVkc193ZWJzb2NrZXRzID0gYW55KHNlbGYuX2lzX3dlYnNvY2tldF90ZXN0KHRlc3QpIGZvciB0
ZXN0IGluIHRlc3RzX3RvX3J1bikKIAotICAgIGRlZiBfcnVuX3Rlc3RzKHNlbGYsIHRlc3RzLCBy
ZXN1bHRfc3VtbWFyeSwgbnVtX3dvcmtlcnMpOgotICAgICAgICB0ZXN0X2lucHV0cyA9IFtzZWxm
Ll90ZXN0X2lucHV0X2Zvcl9maWxlKHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzXQotICAgICAgICBu
ZWVkc19odHRwID0gc2VsZi5fcG9ydC5yZXF1aXJlc19odHRwX3NlcnZlcigpIG9yIGFueShzZWxm
Ll9pc19odHRwX3Rlc3QodGVzdCkgZm9yIHRlc3QgaW4gdGVzdHMpCi0gICAgICAgIG5lZWRzX3dl
YnNvY2tldHMgPSBhbnkoc2VsZi5faXNfd2Vic29ja2V0X3Rlc3QodGVzdCkgZm9yIHRlc3QgaW4g
dGVzdHMpCi0gICAgICAgIHJldHVybiBzZWxmLl9ydW5uZXIucnVuX3Rlc3RzKHRlc3RfaW5wdXRz
LCBzZWxmLl9leHBlY3RhdGlvbnMsIHJlc3VsdF9zdW1tYXJ5LCBudW1fd29ya2VycywgbmVlZHNf
aHR0cCwgbmVlZHNfd2Vic29ja2V0cywgc2VsZi5fcmV0cnlpbmcpCisgICAgICAgIHJldHVybiBz
ZWxmLl9ydW5uZXIucnVuX3Rlc3RzKHRlc3RfaW5wdXRzLCB0ZXN0c190b19za2lwLCBzZWxmLl9l
eHBlY3RhdGlvbnMsIGxlbihzZXQodGVzdHNfdG9fcnVuKSksIHJlcGVhdF9lYWNoICogaXRlcmF0
aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX3dvcmtlcnMs
IG5lZWRzX2h0dHAsIG5lZWRzX3dlYnNvY2tldHMsIHJldHJ5aW5nKQogCiAgICAgZGVmIF9jbGVh
bl91cF9ydW4oc2VsZik6CiAgICAgICAgICIiIlJlc3RvcmVzIHRoZSBzeXN0ZW0gYWZ0ZXIgd2Un
cmUgZG9uZSBydW5uaW5nIHRlc3RzLiIiIgpAQCAtNTA2LDM3ICs0OTIsMTcgQEAgY2xhc3MgTWFu
YWdlcihvYmplY3QpOgogICAgICAgICAgICAgaWYgc2VsZi5fZmlsZXN5c3RlbS5pc2RpcihzZWxm
Ll9maWxlc3lzdGVtLmpvaW4obGF5b3V0X3Rlc3RzX2RpciwgZGlybmFtZSkpOgogICAgICAgICAg
ICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucm10cmVlKHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxm
Ll9yZXN1bHRzX2RpcmVjdG9yeSwgZGlybmFtZSkpCiAKLSAgICBkZWYgX2dldF9mYWlsdXJlcyhz
ZWxmLCByZXN1bHRfc3VtbWFyeSwgaW5jbHVkZV9jcmFzaGVzLCBpbmNsdWRlX21pc3NpbmcpOgot
ICAgICAgICAiIiJGaWx0ZXJzIGEgZGljdCBvZiByZXN1bHRzIGFuZCByZXR1cm5zIG9ubHkgdGhl
IGZhaWx1cmVzLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHRo
ZSByZXN1bHRzIG9mIHRoZSB0ZXN0IHJ1bgotICAgICAgICAgIGluY2x1ZGVfY3Jhc2hlczogd2hl
dGhlciBjcmFzaGVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0LgotICAgICAgICAgICAgV2Ug
dXNlIEZhbHNlIHdoZW4gZmluZGluZyB0aGUgbGlzdCBvZiBmYWlsdXJlcyB0byByZXRyeQotICAg
ICAgICAgICAgdG8gc2VlIGlmIHRoZSByZXN1bHRzIHdlcmUgZmxha3kuIEFsdGhvdWdoIHRoZSBj
cmFzaGVzIG1heSBhbHNvIGJlCi0gICAgICAgICAgICBmbGFreSwgd2UgdHJlYXQgdGhlbSBhcyBp
ZiB0aGV5IGFyZW4ndCBzbyB0aGF0IHRoZXkncmUgbm90IGlnbm9yZWQuCi0gICAgICAgIFJldHVy
bnM6Ci0gICAgICAgICAgYSBkaWN0IG9mIGZpbGVzIC0+IHJlc3VsdHMKLSAgICAgICAgIiIiCi0g
ICAgICAgIGZhaWxlZF9yZXN1bHRzID0ge30KKyAgICBkZWYgX3Rlc3RzX3RvX3JldHJ5KHNlbGYs
IHJlc3VsdF9zdW1tYXJ5LCBpbmNsdWRlX2NyYXNoZXMpOgorICAgICAgICB0ZXN0X25hbWVzID0g
W10KICAgICAgICAgZm9yIHRlc3QsIHJlc3VsdCBpbiByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVk
X3Jlc3VsdHMuaXRlcml0ZW1zKCk6CiAgICAgICAgICAgICBpZiAocmVzdWx0LnR5cGUgPT0gdGVz
dF9leHBlY3RhdGlvbnMuUEFTUyBvcgotICAgICAgICAgICAgICAgIChyZXN1bHQudHlwZSA9PSB0
ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSCBhbmQgbm90IGluY2x1ZGVfY3Jhc2hlcykgb3IKLSAgICAg
ICAgICAgICAgICAocmVzdWx0LnR5cGUgPT0gdGVzdF9leHBlY3RhdGlvbnMuTUlTU0lORyBhbmQg
bm90IGluY2x1ZGVfbWlzc2luZykpOgorICAgICAgICAgICAgICAgIHJlc3VsdC50eXBlID09IHRl
c3RfZXhwZWN0YXRpb25zLk1JU1NJTkcgb3IKKyAgICAgICAgICAgICAgICAocmVzdWx0LnR5cGUg
PT0gdGVzdF9leHBlY3RhdGlvbnMuQ1JBU0ggYW5kIG5vdCBpbmNsdWRlX2NyYXNoZXMpKToKICAg
ICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZmFpbGVkX3Jlc3VsdHNbdGVzdF0g
PSByZXN1bHQudHlwZQorICAgICAgICAgICAgdGVzdF9uYW1lcy5hcHBlbmQodGVzdCkKKyAgICAg
ICAgcmV0dXJuIHRlc3RfbmFtZXMKIAotICAgICAgICByZXR1cm4gZmFpbGVkX3Jlc3VsdHMKLQot
ICAgIGRlZiBfY2hhcl9mb3JfcmVzdWx0KHNlbGYsIHJlc3VsdCk6Ci0gICAgICAgIHJlc3VsdCA9
IHJlc3VsdC5sb3dlcigpCi0gICAgICAgIGlmIHJlc3VsdCBpbiBUZXN0RXhwZWN0YXRpb25zLkVY
UEVDVEFUSU9OUzoKLSAgICAgICAgICAgIHJlc3VsdF9lbnVtX3ZhbHVlID0gVGVzdEV4cGVjdGF0
aW9ucy5FWFBFQ1RBVElPTlNbcmVzdWx0XQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVz
dWx0X2VudW1fdmFsdWUgPSBUZXN0RXhwZWN0YXRpb25zLk1PRElGSUVSU1tyZXN1bHRdCi0gICAg
ICAgIHJldHVybiBqc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5KU09OTGF5b3V0UmVzdWx0
c0dlbmVyYXRvci5GQUlMVVJFX1RPX0NIQVJbcmVzdWx0X2VudW1fdmFsdWVdCi0KLSAgICBkZWYg
X3VwbG9hZF9qc29uX2ZpbGVzKHNlbGYsIHN1bW1hcml6ZWRfcmVzdWx0cywgcmVzdWx0X3N1bW1h
cnksIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKToKKyAgICBkZWYgX3VwbG9hZF9qc29uX2ZpbGVz
KHNlbGYsIHN1bW1hcml6ZWRfcmVzdWx0cywgcmVzdWx0X3N1bW1hcnksIHRlc3RzX3RvX3J1bik6
CiAgICAgICAgICIiIldyaXRlcyB0aGUgcmVzdWx0cyBvZiB0aGUgdGVzdCBydW4gYXMgSlNPTiBm
aWxlcyBpbnRvIHRoZSByZXN1bHRzCiAgICAgICAgIGRpciBhbmQgdXBsb2FkIHRoZSBmaWxlcyB0
byB0aGUgYXBwZW5naW5lIHNlcnZlci4KIApAQCAtNTQ0LDE1ICs1MTAsMTggQEAgY2xhc3MgTWFu
YWdlcihvYmplY3QpOgogICAgICAgICAgIHVuZXhwZWN0ZWRfcmVzdWx0czogZGljdCBvZiB1bmV4
cGVjdGVkIHJlc3VsdHMKICAgICAgICAgICBzdW1tYXJpemVkX3Jlc3VsdHM6IGRpY3Qgb2YgcmVz
dWx0cwogICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBmdWxsIHN1bW1hcnkgb2JqZWN0Ci0gICAg
ICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3M6IGxpc3Qgb2YgdGVzdCB0aW1lcyAodXNlZCBi
eSB0aGUgZmxha2luZXNzCi0gICAgICAgICAgICBkYXNoYm9hcmQpLgogICAgICAgICAiIiIKICAg
ICAgICAgX2xvZy5kZWJ1ZygiV3JpdGluZyBKU09OIGZpbGVzIGluICVzLiIgJSBzZWxmLl9yZXN1
bHRzX2RpcmVjdG9yeSkKIAotICAgICAgICB0aW1lc190cmllID0ganNvbl9yZXN1bHRzX2dlbmVy
YXRvci50ZXN0X3RpbWluZ3NfdHJpZShzZWxmLl9wb3J0LCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5n
cykKKyAgICAgICAgIyBGSVhNRTogVXBsb2FkIHN0YXRzLmpzb24gdG8gdGhlIHNlcnZlciBhbmQg
ZGVsZXRlIHRpbWVzX21zLgorICAgICAgICB0aW1lc190cmllID0ganNvbl9yZXN1bHRzX2dlbmVy
YXRvci50ZXN0X3RpbWluZ3NfdHJpZShzZWxmLl9wb3J0LCByZXN1bHRfc3VtbWFyeS5yZXN1bHRz
LnZhbHVlcygpKQogICAgICAgICB0aW1lc19qc29uX3BhdGggPSBzZWxmLl9maWxlc3lzdGVtLmpv
aW4oc2VsZi5fcmVzdWx0c19kaXJlY3RvcnksICJ0aW1lc19tcy5qc29uIikKICAgICAgICAganNv
bl9yZXN1bHRzX2dlbmVyYXRvci53cml0ZV9qc29uKHNlbGYuX2ZpbGVzeXN0ZW0sIHRpbWVzX3Ry
aWUsIHRpbWVzX2pzb25fcGF0aCkKIAorICAgICAgICBzdGF0c190cmllID0gc2VsZi5fc3RhdHNf
dHJpZShyZXN1bHRfc3VtbWFyeSkKKyAgICAgICAgc3RhdHNfcGF0aCA9IHNlbGYuX2ZpbGVzeXN0
ZW0uam9pbihzZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSwgInN0YXRzLmpzb24iKQorICAgICAgICBz
ZWxmLl9maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShzdGF0c19wYXRoLCBqc29uLmR1bXBzKHN0
YXRzX3RyaWUpKQorCiAgICAgICAgIGZ1bGxfcmVzdWx0c19wYXRoID0gc2VsZi5fZmlsZXN5c3Rl
bS5qb2luKHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5LCAiZnVsbF9yZXN1bHRzLmpzb24iKQogICAg
ICAgICAjIFdlIHdyaXRlIGZ1bGxfcmVzdWx0cy5qc29uIG91dCBhcyBqc29ucCBiZWNhdXNlIHdl
IG5lZWQgdG8gbG9hZCBpdCBmcm9tIGEgZmlsZSB1cmwgYW5kIENocm9taXVtIGRvZXNuJ3QgYWxs
b3cgdGhhdC4KICAgICAgICAganNvbl9yZXN1bHRzX2dlbmVyYXRvci53cml0ZV9qc29uKHNlbGYu
X2ZpbGVzeXN0ZW0sIHN1bW1hcml6ZWRfcmVzdWx0cywgZnVsbF9yZXN1bHRzX3BhdGgsIGNhbGxi
YWNrPSJBRERfUkVTVUxUUyIpCkBAIC01NjAsOCArNTI5LDcgQEAgY2xhc3MgTWFuYWdlcihvYmpl
Y3QpOgogICAgICAgICBnZW5lcmF0b3IgPSBqc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRvci5K
U09OTGF5b3V0UmVzdWx0c0dlbmVyYXRvcigKICAgICAgICAgICAgIHNlbGYuX3BvcnQsIHNlbGYu
X29wdGlvbnMuYnVpbGRlcl9uYW1lLCBzZWxmLl9vcHRpb25zLmJ1aWxkX25hbWUsCiAgICAgICAg
ICAgICBzZWxmLl9vcHRpb25zLmJ1aWxkX251bWJlciwgc2VsZi5fcmVzdWx0c19kaXJlY3Rvcnks
Ci0gICAgICAgICAgICBCVUlMREVSX0JBU0VfVVJMLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywK
LSAgICAgICAgICAgIHNlbGYuX2V4cGVjdGF0aW9ucywgcmVzdWx0X3N1bW1hcnksIHNlbGYuX3Rl
c3RfbmFtZXMsCisgICAgICAgICAgICBCVUlMREVSX0JBU0VfVVJMLCBzZWxmLl9leHBlY3RhdGlv
bnMsIHJlc3VsdF9zdW1tYXJ5LCB0ZXN0c190b19ydW4sCiAgICAgICAgICAgICBzZWxmLl9vcHRp
b25zLnRlc3RfcmVzdWx0c19zZXJ2ZXIsCiAgICAgICAgICAgICAibGF5b3V0LXRlc3RzIiwKICAg
ICAgICAgICAgIHNlbGYuX29wdGlvbnMubWFzdGVyX25hbWUpCkBAIC01NzksMzEgKzU0NywyMCBA
QCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVtb3Zl
KHRpbWVzX2pzb25fcGF0aCkKICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5yZW1vdmUoaW5jcmVt
ZW50YWxfcmVzdWx0c19wYXRoKQogCi0gICAgZGVmIF9udW1fZGlnaXRzKHNlbGYsIG51bSk6Ci0g
ICAgICAgICIiIlJldHVybnMgdGhlIG51bWJlciBvZiBkaWdpdHMgbmVlZGVkIHRvIHJlcHJlc2Vu
dCB0aGUgbGVuZ3RoIG9mIGEKLSAgICAgICAgc2VxdWVuY2UuIiIiCi0gICAgICAgIG5kaWdpdHMg
PSAxCi0gICAgICAgIGlmIGxlbihudW0pOgotICAgICAgICAgICAgbmRpZ2l0cyA9IGludChtYXRo
LmxvZzEwKGxlbihudW0pKSkgKyAxCi0gICAgICAgIHJldHVybiBuZGlnaXRzCi0KLSAgICBkZWYg
X2NvcHlfcmVzdWx0c19odG1sX2ZpbGUoc2VsZik6Ci0gICAgICAgIGJhc2VfZGlyID0gc2VsZi5f
cG9ydC5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoJ0xheW91dFRlc3RzJywgJ2Zhc3QnLCAnaGFybmVz
cycpCi0gICAgICAgIHJlc3VsdHNfZmlsZSA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihiYXNlX2Rp
ciwgJ3Jlc3VsdHMuaHRtbCcpCi0gICAgICAgICMgRklYTUU6IFdoYXQgc2hvdWxkIHdlIGRvIGlm
IHRoaXMgZG9lc24ndCBleGlzdCAoZS5nLiwgaW4gdW5pdCB0ZXN0cyk/Ci0gICAgICAgIGlmIHNl
bGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHJlc3VsdHNfZmlsZSk6Ci0gICAgICAgICAgICBzZWxmLl9m
aWxlc3lzdGVtLmNvcHlmaWxlKHJlc3VsdHNfZmlsZSwgc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNl
bGYuX3Jlc3VsdHNfZGlyZWN0b3J5LCAicmVzdWx0cy5odG1sIikpCi0KLSAgICBkZWYgX3Nob3df
cmVzdWx0c19odG1sX2ZpbGUoc2VsZiwgcmVzdWx0X3N1bW1hcnkpOgotICAgICAgICAiIiJTaG93
cyB0aGUgcmVzdWx0cy5odG1sIHBhZ2UuIiIiCi0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMuZnVs
bF9yZXN1bHRzX2h0bWw6Ci0gICAgICAgICAgICB0ZXN0X2ZpbGVzID0gcmVzdWx0X3N1bW1hcnku
ZmFpbHVyZXMua2V5cygpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB1bmV4cGVjdGVkX2Zh
aWx1cmVzID0gc2VsZi5fZ2V0X2ZhaWx1cmVzKHJlc3VsdF9zdW1tYXJ5LCBpbmNsdWRlX2NyYXNo
ZXM9VHJ1ZSwgaW5jbHVkZV9taXNzaW5nPVRydWUpCi0gICAgICAgICAgICB0ZXN0X2ZpbGVzID0g
dW5leHBlY3RlZF9mYWlsdXJlcy5rZXlzKCkKLQotICAgICAgICBpZiBub3QgbGVuKHRlc3RfZmls
ZXMpOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgcmVzdWx0c19maWxlbmFtZSA9IHNl
bGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSwgInJlc3VsdHMuaHRt
bCIpCi0gICAgICAgIHNlbGYuX3BvcnQuc2hvd19yZXN1bHRzX2h0bWxfZmlsZShyZXN1bHRzX2Zp
bGVuYW1lKQorICAgIGRlZiBfY29weV9yZXN1bHRzX2h0bWxfZmlsZShzZWxmLCBkZXN0aW5hdGlv
bl9wYXRoKToKKyAgICAgICAgIyBOb3RlIHRoYXQgdGhlIHJlc3VsdHNfZmlsZSB3b24ndCBleGlz
dCBpbiBhIG1vY2sgZmlsZXN5c3RlbSAoZHVyaW5nIHRoZSB1bml0IHRlc3RzKS4KKyAgICAgICAg
c291cmNlX3BhdGggPSBzZWxmLl9wb3J0LnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnTGF5b3V0VGVz
dHMnLCAnZmFzdCcsICdoYXJuZXNzJywgJ3Jlc3VsdHMuaHRtbCcpCisgICAgICAgIGlmIHNlbGYu
X2ZpbGVzeXN0ZW0uZXhpc3RzKHNvdXJjZV9wYXRoKToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVz
eXN0ZW0uY29weWZpbGUoc291cmNlX3BhdGgsIGRlc3RpbmF0aW9uX3BhdGgpCisKKyAgICBkZWYg
X3N0YXRzX3RyaWUoc2VsZiwgcmVzdWx0X3N1bW1hcnkpOgorICAgICAgICBkZWYgX3dvcmtlcl9u
dW1iZXIod29ya2VyX25hbWUpOgorICAgICAgICAgICAgcmV0dXJuIGludCh3b3JrZXJfbmFtZS5z
cGxpdCgnLycpWzFdKSBpZiB3b3JrZXJfbmFtZSBlbHNlIC0xCisKKyAgICAgICAgc3RhdHMgPSB7
fQorICAgICAgICBmb3IgcmVzdWx0IGluIHJlc3VsdF9zdW1tYXJ5LnJlc3VsdHMudmFsdWVzKCk6
CisgICAgICAgICAgICBzdGF0c1tyZXN1bHQudGVzdF9uYW1lXSA9IHsncmVzdWx0cyc6IChfd29y
a2VyX251bWJlcihyZXN1bHQud29ya2VyX25hbWUpLCByZXN1bHQudGVzdF9udW1iZXIsIHJlc3Vs
dC5waWQsIGludChyZXN1bHQudGVzdF9ydW5fdGltZSAqIDEwMDApKX0KKyAgICAgICAgc3RhdHNf
dHJpZSA9IHt9CisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBzdGF0cy5pdGVyaXRlbXMoKToK
KyAgICAgICAgICAgIGpzb25fcmVzdWx0c19nZW5lcmF0b3IuYWRkX3BhdGhfdG9fdHJpZShuYW1l
LCB2YWx1ZSwgc3RhdHNfdHJpZSkKKyAgICAgICAgcmV0dXJuIHN0YXRzX3RyaWUKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFn
ZXJfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250
cm9sbGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5CmluZGV4IGU5NGQxMzMyYmU0MjM1NmE0ZmYyYzY5
Y2UzZjQ4ODQ0YmEyOThiNDMuLjFjMTMxNGRlMjI1OTY5Y2UyOGE4MGE4NDYzYTYwY2M5MDViYTU2
ODIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRy
b2xsZXJzL21hbmFnZXJfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlcl91bml0dGVzdC5weQpAQCAtMzQsNiArMzQs
NyBAQCBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiAKK2Zyb20gd2Vi
a2l0cHkuY29tbW9uLmhvc3QgaW1wb3J0IEhvc3QKIGZyb20gd2Via2l0cHkuY29tbW9uLmhvc3Rf
bW9jayBpbXBvcnQgTW9ja0hvc3QKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmNvbnRyb2xs
ZXJzLm1hbmFnZXIgaW1wb3J0IE1hbmFnZXIsIGludGVycHJldF90ZXN0X2ZhaWx1cmVzLCBzdW1t
YXJpemVfcmVzdWx0cwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzIGltcG9ydCB0
ZXN0X2V4cGVjdGF0aW9ucwpAQCAtNDYsNTMgKzQ3LDI4IEBAIGZyb20gd2Via2l0cHkudG9vbC5t
b2NrdG9vbCBpbXBvcnQgTW9ja09wdGlvbnMKIAogY2xhc3MgTWFuYWdlclRlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X25lZWRzX3NlcnZlcnMoc2VsZik6Ci0gICAgICAgIGRl
ZiBnZXRfbWFuYWdlcl93aXRoX3Rlc3RzKHRlc3RfbmFtZXMpOgotICAgICAgICAgICAgcG9ydCA9
IE1vY2soKSAgIyBGSVhNRTogVXNlIGEgdGlnaHRlciBtb2NrLgotICAgICAgICAgICAgcG9ydC5U
RVNUX1BBVEhfU0VQQVJBVE9SID0gJy8nCi0gICAgICAgICAgICBtYW5hZ2VyID0gTWFuYWdlcihw
b3J0LCBvcHRpb25zPU1vY2tPcHRpb25zKGh0dHA9VHJ1ZSwgbWF4X2xvY2tlZF9zaGFyZHM9MSks
IHByaW50ZXI9TW9jaygpKQotICAgICAgICAgICAgbWFuYWdlci5fdGVzdF9uYW1lcyA9IHRlc3Rf
bmFtZXMKLSAgICAgICAgICAgIHJldHVybiBtYW5hZ2VyCisgICAgICAgIHBvcnQgPSBNb2NrSG9z
dCgpLnBvcnRfZmFjdG9yeS5nZXQoJ3Rlc3QtbWFjLWxlb3BhcmQnKQorICAgICAgICBtYW5hZ2Vy
ID0gTWFuYWdlcihwb3J0LCBvcHRpb25zPU1vY2tPcHRpb25zKGh0dHA9VHJ1ZSwgbWF4X2xvY2tl
ZF9zaGFyZHM9MSksIHByaW50ZXI9TW9jaygpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1h
bmFnZXIubmVlZHNfc2VydmVycyhbJ2Zhc3QvaHRtbCddKSkKIAotICAgICAgICBtYW5hZ2VyID0g
Z2V0X21hbmFnZXJfd2l0aF90ZXN0cyhbJ2Zhc3QvaHRtbCddKQotICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKG1hbmFnZXIubmVlZHNfc2VydmVycygpKQotCi0gICAgICAgIG1hbmFnZXIgPSBnZXRf
bWFuYWdlcl93aXRoX3Rlc3RzKFsnaHR0cC90ZXN0cy9taXNjJ10pCi0gICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShtYW5hZ2VyLm5lZWRzX3NlcnZlcnMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KG1hbmFnZXIubmVlZHNfc2VydmVycyhbJ2h0dHAvdGVzdHMvbWltZSddKSkKIAogICAgIGRlZiBp
bnRlZ3JhdGlvbl90ZXN0X25lZWRzX3NlcnZlcnMoc2VsZik6Ci0gICAgICAgIGRlZiBnZXRfbWFu
YWdlcl93aXRoX3Rlc3RzKHRlc3RfbmFtZXMpOgotICAgICAgICAgICAgaG9zdCA9IE1vY2tIb3N0
KCkKLSAgICAgICAgICAgIHBvcnQgPSBob3N0LnBvcnRfZmFjdG9yeS5nZXQoKQotICAgICAgICAg
ICAgbWFuYWdlciA9IE1hbmFnZXIocG9ydCwgb3B0aW9ucz1Nb2NrT3B0aW9ucyh0ZXN0X2xpc3Q9
Tm9uZSwgaHR0cD1UcnVlLCBtYXhfbG9ja2VkX3NoYXJkcz0xKSwgcHJpbnRlcj1Nb2NrKCkpCi0g
ICAgICAgICAgICBtYW5hZ2VyLl9jb2xsZWN0X3Rlc3RzKHRlc3RfbmFtZXMpCi0gICAgICAgICAg
ICByZXR1cm4gbWFuYWdlcgotCi0gICAgICAgIG1hbmFnZXIgPSBnZXRfbWFuYWdlcl93aXRoX3Rl
c3RzKFsnZmFzdC9odG1sJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWFuYWdlci5uZWVk
c19zZXJ2ZXJzKCkpCi0KLSAgICAgICAgbWFuYWdlciA9IGdldF9tYW5hZ2VyX3dpdGhfdGVzdHMo
WydodHRwL3Rlc3RzL21pbWUnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hbmFnZXIubmVl
ZHNfc2VydmVycygpKQorICAgICAgICBwb3J0ID0gSG9zdCgpLnBvcnRfZmFjdG9yeS5nZXQoKQor
ICAgICAgICBtYW5hZ2VyID0gTWFuYWdlcihwb3J0LCBvcHRpb25zPU1vY2tPcHRpb25zKHRlc3Rf
bGlzdD1Ob25lLCBodHRwPVRydWUsIG1heF9sb2NrZWRfc2hhcmRzPTEpLCBwcmludGVyPU1vY2so
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYW5hZ2VyLm5lZWRzX3NlcnZlcnMoWydmYXN0
L2h0bWwnXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYW5hZ2VyLm5lZWRzX3NlcnZlcnMo
WydodHRwL3Rlc3RzL21pbWUnXSkpCiAKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4z
Mic6Ci0gICAgICAgICAgICBtYW5hZ2VyID0gZ2V0X21hbmFnZXJfd2l0aF90ZXN0cyhbJ2Zhc3Rc
XGh0bWwnXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWFuYWdlci5uZWVkc19zZXJ2
ZXJzKCkpCi0KLSAgICAgICAgICAgIG1hbmFnZXIgPSBnZXRfbWFuYWdlcl93aXRoX3Rlc3RzKFsn
aHR0cFxcdGVzdHNcXG1pbWUnXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYW5hZ2Vy
Lm5lZWRzX3NlcnZlcnMoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWFuYWdlci5u
ZWVkc19zZXJ2ZXJzKFsnZmFzdFxcaHRtbCddKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShtYW5hZ2VyLm5lZWRzX3NlcnZlcnMoWydodHRwXFx0ZXN0c1xtaW1lJ10pKQogCiAgICAgZGVm
IHRlc3RfbG9va19mb3JfbmV3X2NyYXNoX2xvZ3Moc2VsZik6Ci0gICAgICAgIGRlZiBnZXRfbWFu
YWdlcl93aXRoX3Rlc3RzKHRlc3RfbmFtZXMpOgotICAgICAgICAgICAgaG9zdCA9IE1vY2tIb3N0
KCkKLSAgICAgICAgICAgIHBvcnQgPSBob3N0LnBvcnRfZmFjdG9yeS5nZXQoJ3Rlc3QtbWFjLWxl
b3BhcmQnKQotICAgICAgICAgICAgbWFuYWdlciA9IE1hbmFnZXIocG9ydCwgb3B0aW9ucz1Nb2Nr
T3B0aW9ucyh0ZXN0X2xpc3Q9Tm9uZSwgaHR0cD1UcnVlLCBtYXhfbG9ja2VkX3NoYXJkcz0xKSwg
cHJpbnRlcj1Nb2NrKCkpCi0gICAgICAgICAgICBtYW5hZ2VyLl9jb2xsZWN0X3Rlc3RzKHRlc3Rf
bmFtZXMpCi0gICAgICAgICAgICByZXR1cm4gbWFuYWdlcgotICAgICAgICBob3N0ID0gTW9ja0hv
c3QoKQotICAgICAgICBwb3J0ID0gaG9zdC5wb3J0X2ZhY3RvcnkuZ2V0KCd0ZXN0LW1hYy1sZW9w
YXJkJykKKyAgICAgICAgcG9ydCA9IE1vY2tIb3N0KCkucG9ydF9mYWN0b3J5LmdldCgndGVzdC1t
YWMtbGVvcGFyZCcpCisgICAgICAgIG1hbmFnZXIgPSBNYW5hZ2VyKHBvcnQsIG9wdGlvbnM9TW9j
a09wdGlvbnMobWF4X2xvY2tlZF9zaGFyZHM9MSksIHByaW50ZXI9TW9jaygpKQogICAgICAgICB0
ZXN0cyA9IFsnZmFpbHVyZXMvZXhwZWN0ZWQvY3Jhc2guaHRtbCddCiAgICAgICAgIGV4cGVjdGF0
aW9ucyA9IHRlc3RfZXhwZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvbnMocG9ydCwgdGVzdHMpCi0g
ICAgICAgIHJzID0gUmVzdWx0U3VtbWFyeShleHBlY3RhdGlvbnMsIHRlc3RzLCAxLCBzZXQoKSkK
LSAgICAgICAgbWFuYWdlciA9IGdldF9tYW5hZ2VyX3dpdGhfdGVzdHModGVzdHMpCisgICAgICAg
IHJzID0gUmVzdWx0U3VtbWFyeShleHBlY3RhdGlvbnMsIGxlbih0ZXN0cyksIDEpCiAgICAgICAg
IG1hbmFnZXIuX2xvb2tfZm9yX25ld19jcmFzaF9sb2dzKHJzLCB0aW1lLnRpbWUoKSkKIAogCkBA
IC0xNDIsNyArMTE4LDcgQEAgY2xhc3MgUmVzdWx0U3VtbWFyeVRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgogICAgIGRlZiBnZXRfcmVzdWx0X3N1bW1hcnkoc2VsZiwgcG9ydCwgdGVzdF9uYW1lcywg
ZXhwZWN0YXRpb25zX3N0cik6CiAgICAgICAgIHBvcnQuZXhwZWN0YXRpb25zX2RpY3QgPSBsYW1i
ZGE6IHsnJzogZXhwZWN0YXRpb25zX3N0cn0KICAgICAgICAgZXhwZWN0YXRpb25zID0gdGVzdF9l
eHBlY3RhdGlvbnMuVGVzdEV4cGVjdGF0aW9ucyhwb3J0LCB0ZXN0X25hbWVzKQotICAgICAgICBy
ZXR1cm4gdGVzdF9uYW1lcywgUmVzdWx0U3VtbWFyeShleHBlY3RhdGlvbnMsIHRlc3RfbmFtZXMs
IDEsIHNldCgpKSwgZXhwZWN0YXRpb25zCisgICAgICAgIHJldHVybiB0ZXN0X25hbWVzLCBSZXN1
bHRTdW1tYXJ5KGV4cGVjdGF0aW9ucywgbGVuKHRlc3RfbmFtZXMpLCAxKSwgZXhwZWN0YXRpb25z
CiAKICAgICAjIEZJWE1FOiBVc2UgdGhpcyB0byB0ZXN0IG1vcmUgb2Ygc3VtbWFyaXplX3Jlc3Vs
dHMuIFRoaXMgd2FzIG1vdmVkIGZyb20gcHJpbnRpbmdfdW5pdHRlc3QucHkuCiAgICAgZGVmIHN1
bW1hcml6ZWRfcmVzdWx0cyhzZWxmLCBwb3J0LCBleHBlY3RlZCwgcGFzc2luZywgZmxha3ksIGV4
dHJhX3Rlc3RzPVtdLCBleHRyYV9leHBlY3RhdGlvbnM9Tm9uZSk6CkBAIC0xNzgsMjcgKzE1NCwy
NSBAQCBjbGFzcyBSZXN1bHRTdW1tYXJ5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAg
ICAgICByZXRyeS5hZGQoc2VsZi5nZXRfcmVzdWx0KCdwYXNzZXMvdGV4dC5odG1sJyksIFRydWUs
IHRlc3RfaXNfc2xvdykKICAgICAgICAgICAgIHJldHJ5LmFkZChzZWxmLmdldF9yZXN1bHQoJ2Zh
aWx1cmVzL2V4cGVjdGVkL3RpbWVvdXQuaHRtbCcpLCBUcnVlLCB0ZXN0X2lzX3Nsb3cpCiAgICAg
ICAgICAgICByZXRyeS5hZGQoc2VsZi5nZXRfcmVzdWx0KCdmYWlsdXJlcy9leHBlY3RlZC9jcmFz
aC5odG1sJyksIFRydWUsIHRlc3RfaXNfc2xvdykKLSAgICAgICAgdW5leHBlY3RlZF9yZXN1bHRz
ID0gc3VtbWFyaXplX3Jlc3VsdHMocG9ydCwgZXhwLCBycywgcmV0cnksIHRlc3RfdGltaW5ncz17
fSwgb25seV91bmV4cGVjdGVkPVRydWUsIGludGVycnVwdGVkPUZhbHNlKQotICAgICAgICBleHBl
Y3RlZF9yZXN1bHRzID0gc3VtbWFyaXplX3Jlc3VsdHMocG9ydCwgZXhwLCBycywgcmV0cnksIHRl
c3RfdGltaW5ncz17fSwgb25seV91bmV4cGVjdGVkPUZhbHNlLCBpbnRlcnJ1cHRlZD1GYWxzZSkK
LSAgICAgICAgcmV0dXJuIGV4cGVjdGVkX3Jlc3VsdHMsIHVuZXhwZWN0ZWRfcmVzdWx0cworICAg
ICAgICByZXR1cm4gc3VtbWFyaXplX3Jlc3VsdHMocG9ydCwgcnMsIHJldHJ5KQogCiAgICAgZGVm
IHRlc3Rfbm9fc3ZuX3JldmlzaW9uKHNlbGYpOgogICAgICAgICBob3N0ID0gTW9ja0hvc3QoaW5p
dGlhbGl6ZV9zY21fYnlfZGVmYXVsdD1GYWxzZSkKICAgICAgICAgcG9ydCA9IGhvc3QucG9ydF9m
YWN0b3J5LmdldCgndGVzdCcpCi0gICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMsIHVuZXhwZWN0ZWRf
cmVzdWx0cyA9IHNlbGYuc3VtbWFyaXplZF9yZXN1bHRzKHBvcnQsIGV4cGVjdGVkPUZhbHNlLCBw
YXNzaW5nPUZhbHNlLCBmbGFreT1GYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdyZXZp
c2lvbicgbm90IGluIHVuZXhwZWN0ZWRfcmVzdWx0cykKKyAgICAgICAgc3VtbWFyaXplZF9yZXN1
bHRzID0gc2VsZi5zdW1tYXJpemVkX3Jlc3VsdHMocG9ydCwgZXhwZWN0ZWQ9RmFsc2UsIHBhc3Np
bmc9RmFsc2UsIGZsYWt5PUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3JldmlzaW9u
JyBub3QgaW4gc3VtbWFyaXplZF9yZXN1bHRzKQogCiAgICAgZGVmIHRlc3Rfc3ZuX3JldmlzaW9u
KHNlbGYpOgogICAgICAgICBob3N0ID0gTW9ja0hvc3QoaW5pdGlhbGl6ZV9zY21fYnlfZGVmYXVs
dD1GYWxzZSkKICAgICAgICAgcG9ydCA9IGhvc3QucG9ydF9mYWN0b3J5LmdldCgndGVzdCcpCiAg
ICAgICAgIHBvcnQuX29wdGlvbnMuYnVpbGRlcl9uYW1lID0gJ2R1bW15IGJ1aWxkZXInCi0gICAg
ICAgIGV4cGVjdGVkX3Jlc3VsdHMsIHVuZXhwZWN0ZWRfcmVzdWx0cyA9IHNlbGYuc3VtbWFyaXpl
ZF9yZXN1bHRzKHBvcnQsIGV4cGVjdGVkPUZhbHNlLCBwYXNzaW5nPUZhbHNlLCBmbGFreT1GYWxz
ZSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHModW5leHBlY3RlZF9yZXN1bHRzWydyZXZp
c2lvbiddLCAnJykKKyAgICAgICAgc3VtbWFyaXplZF9yZXN1bHRzID0gc2VsZi5zdW1tYXJpemVk
X3Jlc3VsdHMocG9ydCwgZXhwZWN0ZWQ9RmFsc2UsIHBhc3Npbmc9RmFsc2UsIGZsYWt5PUZhbHNl
KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscyhzdW1tYXJpemVkX3Jlc3VsdHNbJ3Jldmlz
aW9uJ10sICcnKQogCiAgICAgZGVmIHRlc3Rfc3VtbWFyaXplZF9yZXN1bHRzX3dvbnRmaXgoc2Vs
Zik6CiAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCiAgICAgICAgIHBvcnQgPSBob3N0LnBvcnRf
ZmFjdG9yeS5nZXQoJ3Rlc3QnKQogICAgICAgICBwb3J0Ll9vcHRpb25zLmJ1aWxkZXJfbmFtZSA9
ICdkdW1teSBidWlsZGVyJwogICAgICAgICBwb3J0Ll9maWxlc3lzdGVtLndyaXRlX3RleHRfZmls
ZShwb3J0Ll9maWxlc3lzdGVtLmpvaW4ocG9ydC5sYXlvdXRfdGVzdHNfZGlyKCksICJmYWlsdXJl
cy9leHBlY3RlZC93b250Zml4Lmh0bWwiKSwgIkR1bW15IHRlc3QgY29udGVudHMiKQotICAgICAg
ICBleHBlY3RlZF9yZXN1bHRzLCB1bmV4cGVjdGVkX3Jlc3VsdHMgPSBzZWxmLnN1bW1hcml6ZWRf
cmVzdWx0cyhwb3J0LCBleHBlY3RlZD1GYWxzZSwgcGFzc2luZz1GYWxzZSwgZmxha3k9RmFsc2Us
IGV4dHJhX3Rlc3RzPVsnZmFpbHVyZXMvZXhwZWN0ZWQvd29udGZpeC5odG1sJ10sIGV4dHJhX2V4
cGVjdGF0aW9ucz0nQnVnKHgpIGZhaWx1cmVzL2V4cGVjdGVkL3dvbnRmaXguaHRtbCBbIFdvbnRG
aXggXVxuJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3Rz
J11bJ2ZhaWx1cmVzJ11bJ2V4cGVjdGVkJ11bJ3dvbnRmaXguaHRtbCddWyd3b250Zml4J10pCisg
ICAgICAgIHN1bW1hcml6ZWRfcmVzdWx0cyA9IHNlbGYuc3VtbWFyaXplZF9yZXN1bHRzKHBvcnQs
IGV4cGVjdGVkPUZhbHNlLCBwYXNzaW5nPUZhbHNlLCBmbGFreT1GYWxzZSwgZXh0cmFfdGVzdHM9
WydmYWlsdXJlcy9leHBlY3RlZC93b250Zml4Lmh0bWwnXSwgZXh0cmFfZXhwZWN0YXRpb25zPSdC
dWcoeCkgZmFpbHVyZXMvZXhwZWN0ZWQvd29udGZpeC5odG1sIFsgV29udEZpeCBdXG4nKQorICAg
ICAgICBzZWxmLmFzc2VydFRydWUoc3VtbWFyaXplZF9yZXN1bHRzWyd0ZXN0cyddWydmYWlsdXJl
cyddWydleHBlY3RlZCddWyd3b250Zml4Lmh0bWwnXVsnd29udGZpeCddKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvc2luZ2xlX3Rl
c3RfcnVubmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJv
bGxlcnMvc2luZ2xlX3Rlc3RfcnVubmVyLnB5CmluZGV4IDI4ZTlkNjNmMGUxNTc4NzkzM2YzOGM1
NDRkYzYyNGYyYjA2NzAyOGEuLmU5ZmNkMmI3NTVkYWU3MTRkY2ViOTU2MTliNGIwMDNmZTc2MWNm
M2IgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRy
b2xsZXJzL3NpbmdsZV90ZXN0X3J1bm5lci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9zaW5nbGVfdGVzdF9ydW5uZXIucHkKQEAgLTEyNCw3
ICsxMjQsNyBAQCBjbGFzcyBTaW5nbGVUZXN0UnVubmVyKG9iamVjdCk6CiAgICAgICAgICMgRklY
TUU6IEl0IHRoZSB0ZXN0IGNyYXNoZWQgb3IgdGltZWQgb3V0LCBpdCBtaWdodCBiZSBiZXR0ZXIg
dG8gYXZvaWQKICAgICAgICAgIyB0byB3cml0ZSBuZXcgYmFzZWxpbmVzLgogICAgICAgICBzZWxm
Ll9vdmVyd3JpdGVfYmFzZWxpbmVzKGRyaXZlcl9vdXRwdXQpCi0gICAgICAgIHJldHVybiBUZXN0
UmVzdWx0KHNlbGYuX3Rlc3RfbmFtZSwgZmFpbHVyZXMsIGRyaXZlcl9vdXRwdXQudGVzdF90aW1l
LCBkcml2ZXJfb3V0cHV0Lmhhc19zdGRlcnIoKSkKKyAgICAgICAgcmV0dXJuIFRlc3RSZXN1bHQo
c2VsZi5fdGVzdF9uYW1lLCBmYWlsdXJlcywgZHJpdmVyX291dHB1dC50ZXN0X3RpbWUsIGRyaXZl
cl9vdXRwdXQuaGFzX3N0ZGVycigpLCBwaWQ9ZHJpdmVyX291dHB1dC5waWQpCiAKICAgICBfcmVu
ZGVyX3RyZWVfZHVtcF9wYXR0ZXJuID0gcmUuY29tcGlsZShyIl5sYXllciBhdCBcKFxkKyxcZCtc
KSBzaXplIFxkK3hcZCtcbiIpCiAKQEAgLTIxNywxMyArMjE3LDEzIEBAIGNsYXNzIFNpbmdsZVRl
c3RSdW5uZXIob2JqZWN0KToKICAgICAgICAgaWYgZHJpdmVyX291dHB1dC5jcmFzaDoKICAgICAg
ICAgICAgICMgRG9uJ3QgY29udGludWUgYW55IG1vcmUgaWYgd2UgYWxyZWFkeSBoYXZlIGEgY3Jh
c2guCiAgICAgICAgICAgICAjIEluIGNhc2Ugb2YgdGltZW91dHMsIHdlIGNvbnRpbnVlIHNpbmNl
IHdlIHN0aWxsIHdhbnQgdG8gc2VlIHRoZSB0ZXh0IGFuZCBpbWFnZSBvdXRwdXQuCi0gICAgICAg
ICAgICByZXR1cm4gVGVzdFJlc3VsdChzZWxmLl90ZXN0X25hbWUsIGZhaWx1cmVzLCBkcml2ZXJf
b3V0cHV0LnRlc3RfdGltZSwgZHJpdmVyX291dHB1dC5oYXNfc3RkZXJyKCkpCisgICAgICAgICAg
ICByZXR1cm4gVGVzdFJlc3VsdChzZWxmLl90ZXN0X25hbWUsIGZhaWx1cmVzLCBkcml2ZXJfb3V0
cHV0LnRlc3RfdGltZSwgZHJpdmVyX291dHB1dC5oYXNfc3RkZXJyKCksIHBpZD1kcml2ZXJfb3V0
cHV0LnBpZCkKIAogICAgICAgICBmYWlsdXJlcy5leHRlbmQoc2VsZi5fY29tcGFyZV90ZXh0KGV4
cGVjdGVkX2RyaXZlcl9vdXRwdXQudGV4dCwgZHJpdmVyX291dHB1dC50ZXh0KSkKICAgICAgICAg
ZmFpbHVyZXMuZXh0ZW5kKHNlbGYuX2NvbXBhcmVfYXVkaW8oZXhwZWN0ZWRfZHJpdmVyX291dHB1
dC5hdWRpbywgZHJpdmVyX291dHB1dC5hdWRpbykpCiAgICAgICAgIGlmIHNlbGYuX3Nob3VsZF9y
dW5fcGl4ZWxfdGVzdDoKICAgICAgICAgICAgIGZhaWx1cmVzLmV4dGVuZChzZWxmLl9jb21wYXJl
X2ltYWdlKGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQsIGRyaXZlcl9vdXRwdXQpKQotICAgICAgICBy
ZXR1cm4gVGVzdFJlc3VsdChzZWxmLl90ZXN0X25hbWUsIGZhaWx1cmVzLCBkcml2ZXJfb3V0cHV0
LnRlc3RfdGltZSwgZHJpdmVyX291dHB1dC5oYXNfc3RkZXJyKCkpCisgICAgICAgIHJldHVybiBU
ZXN0UmVzdWx0KHNlbGYuX3Rlc3RfbmFtZSwgZmFpbHVyZXMsIGRyaXZlcl9vdXRwdXQudGVzdF90
aW1lLCBkcml2ZXJfb3V0cHV0Lmhhc19zdGRlcnIoKSwgcGlkPWRyaXZlcl9vdXRwdXQucGlkKQog
CiAgICAgZGVmIF9jb21wYXJlX3RleHQoc2VsZiwgZXhwZWN0ZWRfdGV4dCwgYWN0dWFsX3RleHQp
OgogICAgICAgICBmYWlsdXJlcyA9IFtdCkBAIC0yOTMsOCArMjkzLDEwIEBAIGNsYXNzIFNpbmds
ZVRlc3RSdW5uZXIob2JqZWN0KToKICAgICAgICAgIyBOb3RlIHRoYXQgc29ydGluZyBieSB0aGUg
ZXhwZWN0YXRpb24gc29ydHMgIiE9IiBiZWZvcmUgIj09IiBzbyB0aGlzIGlzIGVhc3kgdG8gZG8u
CiAKICAgICAgICAgcHV0QWxsTWlzbWF0Y2hCZWZvcmVNYXRjaCA9IHNvcnRlZAorICAgICAgICBy
ZWZlcmVuY2VfdGVzdF9uYW1lcyA9IFtdCiAgICAgICAgIGZvciBleHBlY3RhdGlvbiwgcmVmZXJl
bmNlX2ZpbGVuYW1lIGluIHB1dEFsbE1pc21hdGNoQmVmb3JlTWF0Y2goc2VsZi5fcmVmZXJlbmNl
X2ZpbGVzKToKICAgICAgICAgICAgIHJlZmVyZW5jZV90ZXN0X25hbWUgPSBzZWxmLl9wb3J0LnJl
bGF0aXZlX3Rlc3RfZmlsZW5hbWUocmVmZXJlbmNlX2ZpbGVuYW1lKQorICAgICAgICAgICAgcmVm
ZXJlbmNlX3Rlc3RfbmFtZXMuYXBwZW5kKHJlZmVyZW5jZV90ZXN0X25hbWUpCiAgICAgICAgICAg
ICByZWZlcmVuY2Vfb3V0cHV0ID0gc2VsZi5fZHJpdmVyLnJ1bl90ZXN0KERyaXZlcklucHV0KHJl
ZmVyZW5jZV90ZXN0X25hbWUsIHNlbGYuX3RpbWVvdXQsIE5vbmUsIHNob3VsZF9ydW5fcGl4ZWxf
dGVzdD1UcnVlKSwgc2VsZi5fc3RvcF93aGVuX2RvbmUpCiAgICAgICAgICAgICB0ZXN0X3Jlc3Vs
dCA9IHNlbGYuX2NvbXBhcmVfb3V0cHV0X3dpdGhfcmVmZXJlbmNlKHJlZmVyZW5jZV9vdXRwdXQs
IHRlc3Rfb3V0cHV0LCByZWZlcmVuY2VfZmlsZW5hbWUsIGV4cGVjdGF0aW9uID09ICchPScpCiAK
QEAgLTMwNSw3ICszMDcsNyBAQCBjbGFzcyBTaW5nbGVUZXN0UnVubmVyKG9iamVjdCk6CiAgICAg
ICAgIGFzc2VydChyZWZlcmVuY2Vfb3V0cHV0KQogICAgICAgICB0ZXN0X3Jlc3VsdF93cml0ZXIu
d3JpdGVfdGVzdF9yZXN1bHQoc2VsZi5fZmlsZXN5c3RlbSwgc2VsZi5fcG9ydCwgc2VsZi5fdGVz
dF9uYW1lLCB0ZXN0X291dHB1dCwgcmVmZXJlbmNlX291dHB1dCwgdGVzdF9yZXN1bHQuZmFpbHVy
ZXMpCiAgICAgICAgIHJlZnRlc3RfdHlwZSA9IHNldChbcmVmZXJlbmNlX2ZpbGVbMF0gZm9yIHJl
ZmVyZW5jZV9maWxlIGluIHNlbGYuX3JlZmVyZW5jZV9maWxlc10pCi0gICAgICAgIHJldHVybiBU
ZXN0UmVzdWx0KHNlbGYuX3Rlc3RfbmFtZSwgdGVzdF9yZXN1bHQuZmFpbHVyZXMsIHRvdGFsX3Rl
c3RfdGltZSArIHRlc3RfcmVzdWx0LnRlc3RfcnVuX3RpbWUsIHRlc3RfcmVzdWx0Lmhhc19zdGRl
cnIsIHJlZnRlc3RfdHlwZT1yZWZ0ZXN0X3R5cGUpCisgICAgICAgIHJldHVybiBUZXN0UmVzdWx0
KHNlbGYuX3Rlc3RfbmFtZSwgdGVzdF9yZXN1bHQuZmFpbHVyZXMsIHRvdGFsX3Rlc3RfdGltZSAr
IHRlc3RfcmVzdWx0LnRlc3RfcnVuX3RpbWUsIHRlc3RfcmVzdWx0Lmhhc19zdGRlcnIsIHJlZnRl
c3RfdHlwZT1yZWZ0ZXN0X3R5cGUsIHBpZD10ZXN0X3Jlc3VsdC5waWQsIHJlZmVyZW5jZXM9cmVm
ZXJlbmNlX3Rlc3RfbmFtZXMpCiAKICAgICBkZWYgX2NvbXBhcmVfb3V0cHV0X3dpdGhfcmVmZXJl
bmNlKHNlbGYsIHJlZmVyZW5jZV9kcml2ZXJfb3V0cHV0LCBhY3R1YWxfZHJpdmVyX291dHB1dCwg
cmVmZXJlbmNlX2ZpbGVuYW1lLCBtaXNtYXRjaCk6CiAgICAgICAgIHRvdGFsX3Rlc3RfdGltZSA9
IHJlZmVyZW5jZV9kcml2ZXJfb3V0cHV0LnRlc3RfdGltZSArIGFjdHVhbF9kcml2ZXJfb3V0cHV0
LnRlc3RfdGltZQpAQCAtMzE3LDcgKzMxOSw3IEBAIGNsYXNzIFNpbmdsZVRlc3RSdW5uZXIob2Jq
ZWN0KToKICAgICAgICAgICAgIHJldHVybiBUZXN0UmVzdWx0KHNlbGYuX3Rlc3RfbmFtZSwgZmFp
bHVyZXMsIHRvdGFsX3Rlc3RfdGltZSwgaGFzX3N0ZGVycikKICAgICAgICAgZmFpbHVyZXMuZXh0
ZW5kKHNlbGYuX2hhbmRsZV9lcnJvcihyZWZlcmVuY2VfZHJpdmVyX291dHB1dCwgcmVmZXJlbmNl
X2ZpbGVuYW1lPXJlZmVyZW5jZV9maWxlbmFtZSkpCiAgICAgICAgIGlmIGZhaWx1cmVzOgotICAg
ICAgICAgICAgcmV0dXJuIFRlc3RSZXN1bHQoc2VsZi5fdGVzdF9uYW1lLCBmYWlsdXJlcywgdG90
YWxfdGVzdF90aW1lLCBoYXNfc3RkZXJyKQorICAgICAgICAgICAgcmV0dXJuIFRlc3RSZXN1bHQo
c2VsZi5fdGVzdF9uYW1lLCBmYWlsdXJlcywgdG90YWxfdGVzdF90aW1lLCBoYXNfc3RkZXJyLCBw
aWQ9YWN0dWFsX2RyaXZlcl9vdXRwdXQucGlkKQogCiAgICAgICAgIGlmIG5vdCByZWZlcmVuY2Vf
ZHJpdmVyX291dHB1dC5pbWFnZV9oYXNoIGFuZCBub3QgYWN0dWFsX2RyaXZlcl9vdXRwdXQuaW1h
Z2VfaGFzaDoKICAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZCh0ZXN0X2ZhaWx1cmVzLkZhaWx1
cmVSZWZ0ZXN0Tm9JbWFnZXNHZW5lcmF0ZWQocmVmZXJlbmNlX2ZpbGVuYW1lKSkKQEAgLTMzNiw0
ICszMzgsNCBAQCBjbGFzcyBTaW5nbGVUZXN0UnVubmVyKG9iamVjdCk6CiAgICAgICAgICAgICBl
bHNlOgogICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygiICAlcyAtPiByZWYgdGVzdCBoYXNo
ZXMgZGlkbid0IG1hdGNoIGJ1dCBkaWZmIHBhc3NlZCIgJSBzZWxmLl90ZXN0X25hbWUpCiAKLSAg
ICAgICAgcmV0dXJuIFRlc3RSZXN1bHQoc2VsZi5fdGVzdF9uYW1lLCBmYWlsdXJlcywgdG90YWxf
dGVzdF90aW1lLCBoYXNfc3RkZXJyKQorICAgICAgICByZXR1cm4gVGVzdFJlc3VsdChzZWxmLl90
ZXN0X25hbWUsIGZhaWx1cmVzLCB0b3RhbF90ZXN0X3RpbWUsIGhhc19zdGRlcnIsIHBpZD1hY3R1
YWxfZHJpdmVyX291dHB1dC5waWQpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9qc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRv
ci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdl
L2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CmluZGV4IGYyNzdjOTNkZTgxM2IxYTU4
ZjU3N2NjNmQyYjI5ODYwOGU4M2I2N2EuLjc3YjE3ZGNhMjZhZjkxNTE5YzdkMGJmMmVjMDgxZjBj
ZWJhOTRjMzYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2xheW91dF9wYWNrYWdlL2pzb25fbGF5b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2pzb25fbGF5
b3V0X3Jlc3VsdHNfZ2VuZXJhdG9yLnB5CkBAIC01Miw3ICs1Miw3IEBAIGNsYXNzIEpTT05MYXlv
dXRSZXN1bHRzR2VuZXJhdG9yKGpzb25fcmVzdWx0c19nZW5lcmF0b3IuSlNPTlJlc3VsdHNHZW5l
cmF0b3JCYXNlCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgYnVpbGRlcl9uYW1lLCBi
dWlsZF9uYW1lLCBidWlsZF9udW1iZXIsCiAgICAgICAgIHJlc3VsdHNfZmlsZV9iYXNlX3BhdGgs
IGJ1aWxkZXJfYmFzZV91cmwsCi0gICAgICAgIHRlc3RfdGltaW5ncywgZXhwZWN0YXRpb25zLCBy
ZXN1bHRfc3VtbWFyeSwgYWxsX3Rlc3RzLAorICAgICAgICBleHBlY3RhdGlvbnMsIHJlc3VsdF9z
dW1tYXJ5LCBhbGxfdGVzdHMsCiAgICAgICAgIHRlc3RfcmVzdWx0c19zZXJ2ZXI9Tm9uZSwgdGVz
dF90eXBlPSIiLCBtYXN0ZXJfbmFtZT0iIik6CiAgICAgICAgICIiIk1vZGlmaWVzIHRoZSByZXN1
bHRzLmpzb24gZmlsZS4gR3JhYnMgaXQgb2ZmIHRoZSBhcmNoaXZlIGRpcmVjdG9yeQogICAgICAg
ICBpZiBpdCBpcyBub3QgZm91bmQgbG9jYWxseS4KQEAgLTcxLDcgKzcxLDcgQEAgY2xhc3MgSlNP
TkxheW91dFJlc3VsdHNHZW5lcmF0b3IoanNvbl9yZXN1bHRzX2dlbmVyYXRvci5KU09OUmVzdWx0
c0dlbmVyYXRvckJhc2UKICAgICAgICAgc2VsZi5fcmVzdWx0X3N1bW1hcnkgPSByZXN1bHRfc3Vt
bWFyeQogICAgICAgICBzZWxmLl9mYWlsdXJlcyA9IGRpY3QoKHRlc3RfbmFtZSwgcmVzdWx0X3N1
bW1hcnkucmVzdWx0c1t0ZXN0X25hbWVdLnR5cGUpIGZvciB0ZXN0X25hbWUgaW4gcmVzdWx0X3N1
bW1hcnkuZmFpbHVyZXMpCiAgICAgICAgIHNlbGYuX2FsbF90ZXN0cyA9IGFsbF90ZXN0cwotICAg
ICAgICBzZWxmLl90ZXN0X3RpbWluZ3MgPSBkaWN0KCh0ZXN0X3R1cGxlLnRlc3RfbmFtZSwgdGVz
dF90dXBsZS50ZXN0X3J1bl90aW1lKSBmb3IgdGVzdF90dXBsZSBpbiB0ZXN0X3RpbWluZ3MpCisg
ICAgICAgIHNlbGYuX3Rlc3RfdGltaW5ncyA9IGRpY3QoKG5hbWUsIHJlc3VsdF9zdW1tYXJ5LnJl
c3VsdHNbbmFtZV0udGVzdF9ydW5fdGltZSkgZm9yIG5hbWUgaW4gcmVzdWx0X3N1bW1hcnkucmVz
dWx0cykKIAogICAgICAgICBzZWxmLmdlbmVyYXRlX2pzb25fb3V0cHV0KCkKIApkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Jlc3VsdF9zdW1t
YXJ5LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Jlc3Vs
dF9zdW1tYXJ5LnB5CmluZGV4IDViYjUwMTA2MTc5NmU1MjdlYzQ0MmI3OTg0ZjJiMzc0YWJiYWI0
ZjcuLmQwM2E5YjIyNGQzMzMzNzM3MDY3MGMyOGUwYzMwZGM4NDEwYzdhMDkgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21vZGVscy9yZXN1bHRfc3VtbWFy
eS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2RlbHMvcmVz
dWx0X3N1bW1hcnkucHkKQEAgLTMxLDggKzMxLDggQEAgZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVz
dHMubW9kZWxzLnRlc3RfZXhwZWN0YXRpb25zIGltcG9ydCBUZXN0RXhwZWN0YXRpb25zLCBTS0kK
IAogCiBjbGFzcyBSZXN1bHRTdW1tYXJ5KG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYs
IGV4cGVjdGF0aW9ucywgdGVzdF9maWxlcywgaXRlcmF0aW9ucywgZXhwZWN0ZWRfc2tpcHMpOgot
ICAgICAgICBzZWxmLnRvdGFsID0gbGVuKHRlc3RfZmlsZXMpICogaXRlcmF0aW9ucworICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBleHBlY3RhdGlvbnMsIG51bV90ZXN0cywgaXRlcmF0aW9ucyk6Cisg
ICAgICAgIHNlbGYudG90YWwgPSBudW1fdGVzdHMgKiBpdGVyYXRpb25zCiAgICAgICAgIHNlbGYu
cmVtYWluaW5nID0gc2VsZi50b3RhbAogICAgICAgICBzZWxmLmV4cGVjdGF0aW9ucyA9IGV4cGVj
dGF0aW9ucwogICAgICAgICBzZWxmLmV4cGVjdGVkID0gMApAQCAtNDQsMzEgKzQ0LDM1IEBAIGNs
YXNzIFJlc3VsdFN1bW1hcnkob2JqZWN0KToKICAgICAgICAgc2VsZi50ZXN0c19ieV9leHBlY3Rh
dGlvbiA9IHt9CiAgICAgICAgIHNlbGYudGVzdHNfYnlfdGltZWxpbmUgPSB7fQogICAgICAgICBz
ZWxmLnJlc3VsdHMgPSB7fQorICAgICAgICBzZWxmLmFsbF9yZXN1bHRzID0gW10KICAgICAgICAg
c2VsZi51bmV4cGVjdGVkX3Jlc3VsdHMgPSB7fQogICAgICAgICBzZWxmLmZhaWx1cmVzID0ge30K
ICAgICAgICAgc2VsZi50b3RhbF9mYWlsdXJlcyA9IDAKLSAgICAgICAgc2VsZi5leHBlY3RlZF9z
a2lwcyA9IDAKLSAgICAgICAgc2VsZi50b3RhbF90ZXN0c19ieV9leHBlY3RhdGlvbltTS0lQXSA9
IGxlbihleHBlY3RlZF9za2lwcykKLSAgICAgICAgc2VsZi50ZXN0c19ieV9leHBlY3RhdGlvbltT
S0lQXSA9IGV4cGVjdGVkX3NraXBzCi0gICAgICAgIGZvciBleHBlY3RhdGlvbiBpbiBUZXN0RXhw
ZWN0YXRpb25zLkVYUEVDVEFUSU9OUy52YWx1ZXMoKToKKyAgICAgICAgZm9yIGV4cGVjdGF0aW9u
IGluIChUZXN0RXhwZWN0YXRpb25zLkVYUEVDVEFUSU9OUy52YWx1ZXMoKSArIFtTS0lQXSk6CiAg
ICAgICAgICAgICBzZWxmLnRlc3RzX2J5X2V4cGVjdGF0aW9uW2V4cGVjdGF0aW9uXSA9IHNldCgp
CiAgICAgICAgICAgICBzZWxmLnRvdGFsX3Rlc3RzX2J5X2V4cGVjdGF0aW9uW2V4cGVjdGF0aW9u
XSA9IDAKICAgICAgICAgZm9yIHRpbWVsaW5lIGluIFRlc3RFeHBlY3RhdGlvbnMuVElNRUxJTkVT
LnZhbHVlcygpOgogICAgICAgICAgICAgc2VsZi50ZXN0c19ieV90aW1lbGluZVt0aW1lbGluZV0g
PSBleHBlY3RhdGlvbnMuZ2V0X3Rlc3RzX3dpdGhfdGltZWxpbmUodGltZWxpbmUpCiAgICAgICAg
IHNlbGYuc2xvd190ZXN0cyA9IHNldCgpCisgICAgICAgIHNlbGYuaW50ZXJydXB0ZWQgPSBGYWxz
ZQorICAgICAgICBzZWxmLmtleWJvYXJkX2ludGVycnVwdGVkID0gRmFsc2UKKworICAgIGRlZiBz
a2lwKHNlbGYsIHRlc3RfbmFtZSk6CisgICAgICAgIHNlbGYudGVzdHNfYnlfZXhwZWN0YXRpb25b
U0tJUF0uYWRkKHRlc3RfbmFtZSkKKyAgICAgICAgc2VsZi50b3RhbF90ZXN0c19ieV9leHBlY3Rh
dGlvbltTS0lQXSArPSAxCiAKICAgICBkZWYgYWRkKHNlbGYsIHRlc3RfcmVzdWx0LCBleHBlY3Rl
ZCwgdGVzdF9pc19zbG93KToKICAgICAgICAgc2VsZi50b3RhbF90ZXN0c19ieV9leHBlY3RhdGlv
blt0ZXN0X3Jlc3VsdC50eXBlXSArPSAxCiAgICAgICAgIHNlbGYudGVzdHNfYnlfZXhwZWN0YXRp
b25bdGVzdF9yZXN1bHQudHlwZV0uYWRkKHRlc3RfcmVzdWx0LnRlc3RfbmFtZSkKICAgICAgICAg
c2VsZi5yZXN1bHRzW3Rlc3RfcmVzdWx0LnRlc3RfbmFtZV0gPSB0ZXN0X3Jlc3VsdAorICAgICAg
ICBpZiB0ZXN0X3Jlc3VsdC50eXBlICE9IFNLSVA6CisgICAgICAgICAgICBzZWxmLmFsbF9yZXN1
bHRzLmFwcGVuZCh0ZXN0X3Jlc3VsdCkKICAgICAgICAgc2VsZi5yZW1haW5pbmcgLT0gMQogICAg
ICAgICBpZiBsZW4odGVzdF9yZXN1bHQuZmFpbHVyZXMpOgogICAgICAgICAgICAgc2VsZi50b3Rh
bF9mYWlsdXJlcyArPSAxCiAgICAgICAgICAgICBzZWxmLmZhaWx1cmVzW3Rlc3RfcmVzdWx0LnRl
c3RfbmFtZV0gPSB0ZXN0X3Jlc3VsdC5mYWlsdXJlcwogICAgICAgICBpZiBleHBlY3RlZDoKICAg
ICAgICAgICAgIHNlbGYuZXhwZWN0ZWQgKz0gMQotICAgICAgICAgICAgaWYgdGVzdF9yZXN1bHQu
dHlwZSA9PSBTS0lQOgotICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWRfc2tpcHMgKz0gMQog
ICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi51bmV4cGVjdGVkX3Jlc3VsdHNbdGVzdF9y
ZXN1bHQudGVzdF9uYW1lXSA9IHRlc3RfcmVzdWx0CiAgICAgICAgICAgICBzZWxmLnVuZXhwZWN0
ZWQgKz0gMQpAQCAtODAsMyArODQsMTkgQEAgY2xhc3MgUmVzdWx0U3VtbWFyeShvYmplY3QpOgog
ICAgICAgICAgICAgICAgIHNlbGYudW5leHBlY3RlZF90aW1lb3V0cyArPSAxCiAgICAgICAgIGlm
IHRlc3RfaXNfc2xvdzoKICAgICAgICAgICAgIHNlbGYuc2xvd190ZXN0cy5hZGQodGVzdF9yZXN1
bHQudGVzdF9uYW1lKQorCisgICAgZGVmIHdvcmtlcl9zdGF0cyhzZWxmKToKKyAgICAgICAgdGlt
ZXMgPSB7fQorICAgICAgICBmb3IgcmVzdWx0IGluIHNlbGYucmVzdWx0cy52YWx1ZXMoKToKKyAg
ICAgICAgICAgIHRpbWVzLnNldGRlZmF1bHQocmVzdWx0Lndvcmtlcl9uYW1lLCB7J251bV90ZXN0
cyc6IDAsICd0b3RhbF90aW1lJzogMH0pCisgICAgICAgICAgICB0aW1lc1tyZXN1bHQud29ya2Vy
X25hbWVdWydudW1fdGVzdHMnXSArPSAxCisgICAgICAgICAgICB0aW1lc1tyZXN1bHQud29ya2Vy
X25hbWVdWyd0b3RhbF90aW1lJ10gKz0gcmVzdWx0LnRlc3RfcnVuX3RpbWUKKyAgICAgICAgcmV0
dXJuIHRpbWVzCisKKyAgICBkZWYgc2hhcmRfc3RhdHMoc2VsZik6CisgICAgICAgIHRpbWVzID0g
e30KKyAgICAgICAgZm9yIHJlc3VsdCBpbiBzZWxmLnJlc3VsdHMudmFsdWVzKCk6CisgICAgICAg
ICAgICB0aW1lcy5zZXRkZWZhdWx0KHJlc3VsdC5zaGFyZF9uYW1lLCB7J251bV90ZXN0cyc6IDAs
ICd0b3RhbF90aW1lJzogMH0pCisgICAgICAgICAgICB0aW1lc1tyZXN1bHQuc2hhcmRfbmFtZV1b
J251bV90ZXN0cyddICs9IDEKKyAgICAgICAgICAgIHRpbWVzW3Jlc3VsdC5zaGFyZF9uYW1lXVsn
dG90YWxfdGltZSddICs9IHJlc3VsdC50ZXN0X3J1bl90aW1lCisgICAgICAgIHJldHVybiB0aW1l
cwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxz
L3Rlc3RfcmVzdWx0cy5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL21v
ZGVscy90ZXN0X3Jlc3VsdHMucHkKaW5kZXggNmI5ZGI1NTg3NjFlNWRlNjQ0Mzc3ODQxMDBlYjcw
M2NlNjg4MmNjYy4uNTExMjFmNWRhOTY1ZDYzMDk3NjUzNTBmNmNkZGU5ZGFmYTRkOWFhOCAxMDA2
NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbW9kZWxzL3Rlc3Rf
cmVzdWx0cy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9tb2Rl
bHMvdGVzdF9yZXN1bHRzLnB5CkBAIC0zOCwxNSArMzgsMjMgQEAgY2xhc3MgVGVzdFJlc3VsdChv
YmplY3QpOgogICAgIGRlZiBsb2FkcyhzdHJpbmcpOgogICAgICAgICByZXR1cm4gY1BpY2tsZS5s
b2FkcyhzdHJpbmcpCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9uYW1lLCBmYWlsdXJl
cz1Ob25lLCB0ZXN0X3J1bl90aW1lPU5vbmUsIGhhc19zdGRlcnI9RmFsc2UsIHJlZnRlc3RfdHlw
ZT1bXSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfbmFtZSwgZmFpbHVyZXM9Tm9uZSwg
dGVzdF9ydW5fdGltZT1Ob25lLCBoYXNfc3RkZXJyPUZhbHNlLCByZWZ0ZXN0X3R5cGU9Tm9uZSwg
cGlkPU5vbmUsIHJlZmVyZW5jZXM9Tm9uZSk6CiAgICAgICAgIHNlbGYudGVzdF9uYW1lID0gdGVz
dF9uYW1lCiAgICAgICAgIHNlbGYuZmFpbHVyZXMgPSBmYWlsdXJlcyBvciBbXQogICAgICAgICBz
ZWxmLnRlc3RfcnVuX3RpbWUgPSB0ZXN0X3J1bl90aW1lIG9yIDAKICAgICAgICAgc2VsZi5oYXNf
c3RkZXJyID0gaGFzX3N0ZGVycgotICAgICAgICBzZWxmLnJlZnRlc3RfdHlwZSA9IHJlZnRlc3Rf
dHlwZQorICAgICAgICBzZWxmLnJlZnRlc3RfdHlwZSA9IHJlZnRlc3RfdHlwZSBvciBbXQorICAg
ICAgICBzZWxmLnBpZCA9IHBpZAorICAgICAgICBzZWxmLnJlZmVyZW5jZXMgPSByZWZlcmVuY2Vz
IG9yIFtdCisKICAgICAgICAgIyBGSVhNRTogU2V0dGluZyB0aGlzIGluIHRoZSBjb25zdHJ1Y3Rv
ciBtYWtlcyB0aGlzIGNsYXNzIGhhcmQgdG8gbXV0YXRlLgogICAgICAgICBzZWxmLnR5cGUgPSB0
ZXN0X2ZhaWx1cmVzLmRldGVybWluZV9yZXN1bHRfdHlwZShmYWlsdXJlcykKIAorICAgICAgICAj
IFRoZXNlIGZpZWxkcyBhcmUgYW5ub3RhdGlvbnMgYWRkZWQgYnkgdGhlIGxheW91dCB0ZXN0IHJ1
bm5lcnMsIHJhdGhlciB0aGFuIGJlaW5nIHRoZSByZXN1bHRzIG9mIHRoZSB0ZXN0IGl0c2VsZi4K
KyAgICAgICAgc2VsZi53b3JrZXJfbmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5zaGFyZF9uYW1l
ID0gTm9uZQorICAgICAgICBzZWxmLnRlc3RfbnVtYmVyID0gTm9uZQorCiAgICAgZGVmIF9fZXFf
XyhzZWxmLCBvdGhlcik6CiAgICAgICAgIHJldHVybiAoc2VsZi50ZXN0X25hbWUgPT0gb3RoZXIu
dGVzdF9uYW1lIGFuZAogICAgICAgICAgICAgICAgIHNlbGYuZmFpbHVyZXMgPT0gb3RoZXIuZmFp
bHVyZXMgYW5kCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2RyaXZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvZHJpdmVyLnB5CmluZGV4IDc5OTNkMDU3N2FmMTNjODhkNmM1MDM4Nzc5YmJiYTVmNjZjNTY1
MTcuLjRkNGRhNjU4ODA1NTI5MjcyNTQxYzFmZmFjMTFlZGU5NWUwYzJjOTkgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CkBAIC03
Nyw3ICs3Nyw3IEBAIGNsYXNzIERyaXZlck91dHB1dChvYmplY3QpOgogCiAgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHRleHQsIGltYWdlLCBpbWFnZV9oYXNoLCBhdWRpbywgY3Jhc2g9RmFsc2UsCiAg
ICAgICAgICAgICB0ZXN0X3RpbWU9MCwgbWVhc3VyZW1lbnRzPU5vbmUsIHRpbWVvdXQ9RmFsc2Us
IGVycm9yPScnLCBjcmFzaGVkX3Byb2Nlc3NfbmFtZT0nPz8nLAotICAgICAgICAgICAgY3Jhc2hl
ZF9waWQ9Tm9uZSwgY3Jhc2hfbG9nPU5vbmUpOgorICAgICAgICAgICAgY3Jhc2hlZF9waWQ9Tm9u
ZSwgY3Jhc2hfbG9nPU5vbmUsIHBpZD1Ob25lKToKICAgICAgICAgIyBGSVhNRTogQXJncyBjb3Vs
ZCBiZSByZW5hbWVkIHRvIGJldHRlciBjbGFyaWZ5IHdoYXQgdGhleSBkby4KICAgICAgICAgc2Vs
Zi50ZXh0ID0gdGV4dAogICAgICAgICBzZWxmLmltYWdlID0gaW1hZ2UgICMgTWF5IGJlIGVtcHR5
LXN0cmluZyBpZiB0aGUgdGVzdCBjcmFzaGVzLgpAQCAtOTIsNiArOTIsNyBAQCBjbGFzcyBEcml2
ZXJPdXRwdXQob2JqZWN0KToKICAgICAgICAgc2VsZi5tZWFzdXJlbWVudHMgPSBtZWFzdXJlbWVu
dHMKICAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAogICAgICAgICBzZWxmLmVycm9yID0g
ZXJyb3IgICMgc3RkZXJyIG91dHB1dAorICAgICAgICBzZWxmLnBpZCA9IHBpZAogCiAgICAgZGVm
IGhhc19zdGRlcnIoc2VsZik6CiAgICAgICAgIHJldHVybiBib29sKHNlbGYuZXJyb3IpCkBAIC0x
NjgsNiArMTY5LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAKICAgICAgICAgY3Jhc2hlZCA9
IHNlbGYuaGFzX2NyYXNoZWQoKQogICAgICAgICB0aW1lZF9vdXQgPSBzZWxmLl9zZXJ2ZXJfcHJv
Y2Vzcy50aW1lZF9vdXQKKyAgICAgICAgcGlkID0gc2VsZi5fc2VydmVyX3Byb2Nlc3MucGlkKCkK
IAogICAgICAgICBpZiBzdG9wX3doZW5fZG9uZSBvciBjcmFzaGVkIG9yIHRpbWVkX291dDoKICAg
ICAgICAgICAgICMgV2UgY2FsbCBzdG9wKCkgZXZlbiBpZiB3ZSBjcmFzaGVkIG9yIHRpbWVkIG91
dCBpbiBvcmRlciB0byBnZXQgYW55IHJlbWFpbmluZyBzdGRvdXQvc3RkZXJyIG91dHB1dC4KQEAg
LTE5OSw3ICsyMDEsNyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgICAgIGNyYXNo
PWNyYXNoZWQsIHRlc3RfdGltZT10aW1lLnRpbWUoKSAtIHRlc3RfYmVnaW5fdGltZSwgbWVhc3Vy
ZW1lbnRzPXNlbGYuX21lYXN1cmVtZW50cywKICAgICAgICAgICAgIHRpbWVvdXQ9dGltZWRfb3V0
LCBlcnJvcj1zZWxmLmVycm9yX2Zyb21fdGVzdCwKICAgICAgICAgICAgIGNyYXNoZWRfcHJvY2Vz
c19uYW1lPXNlbGYuX2NyYXNoZWRfcHJvY2Vzc19uYW1lLAotICAgICAgICAgICAgY3Jhc2hlZF9w
aWQ9c2VsZi5fY3Jhc2hlZF9waWQsIGNyYXNoX2xvZz1jcmFzaF9sb2cpCisgICAgICAgICAgICBj
cmFzaGVkX3BpZD1zZWxmLl9jcmFzaGVkX3BpZCwgY3Jhc2hfbG9nPWNyYXNoX2xvZywgcGlkPXBp
ZCkKIAogICAgIGRlZiBfZ2V0X2NyYXNoX2xvZyhzZWxmLCBzdGRvdXQsIHN0ZGVyciwgbmV3ZXJf
dGhhbik6CiAgICAgICAgIHJldHVybiBzZWxmLl9wb3J0Ll9nZXRfY3Jhc2hfbG9nKHNlbGYuX2Ny
YXNoZWRfcHJvY2Vzc19uYW1lLCBzZWxmLl9jcmFzaGVkX3BpZCwgc3Rkb3V0LCBzdGRlcnIsIG5l
d2VyX3RoYW4pCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L3Rlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L3Rlc3QucHkKaW5kZXggZjdkZDI5MTllNmE5ZWYzNTcyNmRmZmJkNzNmODU5Y2VlZWM3YmZmNC4u
ZGY4ZGE4ZDY0MGUzMDlhNTlhOGZlZTQyOWUwZDZhNDdmNzQwMDkwYSAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5CisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQpAQCAtNTM2LDEyICs1
MzYsMjMgQEAgY2xhc3MgVGVzdFBvcnQoUG9ydCk6CiAKIGNsYXNzIFRlc3REcml2ZXIoRHJpdmVy
KToKICAgICAiIiJUZXN0L0R1bW15IGltcGxlbWVudGF0aW9uIG9mIHRoZSBEdW1wUmVuZGVyVHJl
ZSBpbnRlcmZhY2UuIiIiCisgICAgbmV4dF9waWQgPSAxCisKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoVGVzdERyaXZlciwgc2VsZikuX19p
bml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLnN0YXJ0ZWQgPSBGYWxzZQorICAg
ICAgICBzZWxmLnBpZCA9IDAKIAogICAgIGRlZiBjbWRfbGluZShzZWxmLCBwaXhlbF90ZXN0cywg
cGVyX3Rlc3RfYXJncyk6CiAgICAgICAgIHBpeGVsX3Rlc3RzX2ZsYWcgPSAnLXAnIGlmIHBpeGVs
X3Rlc3RzIGVsc2UgJycKICAgICAgICAgcmV0dXJuIFtzZWxmLl9wb3J0Ll9wYXRoX3RvX2RyaXZl
cigpXSArIFtwaXhlbF90ZXN0c19mbGFnXSArIHNlbGYuX3BvcnQuZ2V0X29wdGlvbignYWRkaXRp
b25hbF9kcnRfZmxhZycsIFtdKSArIHBlcl90ZXN0X2FyZ3MKIAogICAgIGRlZiBydW5fdGVzdChz
ZWxmLCB0ZXN0X2lucHV0LCBzdG9wX3doZW5fZG9uZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLnN0
YXJ0ZWQ6CisgICAgICAgICAgICBzZWxmLnN0YXJ0ZWQgPSBUcnVlCisgICAgICAgICAgICBzZWxm
LnBpZCA9IFRlc3REcml2ZXIubmV4dF9waWQKKyAgICAgICAgICAgIFRlc3REcml2ZXIubmV4dF9w
aWQgKz0gMQorCiAgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogICAgICAgICB0ZXN0
X25hbWUgPSB0ZXN0X2lucHV0LnRlc3RfbmFtZQogICAgICAgICB0ZXN0X2FyZ3MgPSB0ZXN0X2lu
cHV0LmFyZ3Mgb3IgW10KQEAgLTU4OSwxMCArNjAwLDcgQEAgY2xhc3MgVGVzdERyaXZlcihEcml2
ZXIpOgogICAgICAgICByZXR1cm4gRHJpdmVyT3V0cHV0KGFjdHVhbF90ZXh0LCBpbWFnZSwgdGVz
dC5hY3R1YWxfY2hlY2tzdW0sIGF1ZGlvLAogICAgICAgICAgICAgY3Jhc2g9dGVzdC5jcmFzaCBv
ciB0ZXN0LndlYl9wcm9jZXNzX2NyYXNoLCBjcmFzaGVkX3Byb2Nlc3NfbmFtZT1jcmFzaGVkX3By
b2Nlc3NfbmFtZSwKICAgICAgICAgICAgIGNyYXNoZWRfcGlkPWNyYXNoZWRfcGlkLCBjcmFzaF9s
b2c9Y3Jhc2hfbG9nLAotICAgICAgICAgICAgdGVzdF90aW1lPXRpbWUudGltZSgpIC0gc3RhcnRf
dGltZSwgdGltZW91dD10ZXN0LnRpbWVvdXQsIGVycm9yPXRlc3QuZXJyb3IpCi0KLSAgICBkZWYg
c3RhcnQoc2VsZiwgcGl4ZWxfdGVzdHMsIHBlcl90ZXN0X2FyZ3MpOgotICAgICAgICBwYXNzCisg
ICAgICAgICAgICB0ZXN0X3RpbWU9dGltZS50aW1lKCkgLSBzdGFydF90aW1lLCB0aW1lb3V0PXRl
c3QudGltZW91dCwgZXJyb3I9dGVzdC5lcnJvciwgcGlkPXNlbGYucGlkKQogCiAgICAgZGVmIHN0
b3Aoc2VsZik6Ci0gICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5zdGFydGVkID0gRmFsc2UKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRf
dGVzdHMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0
X3Rlc3RzLnB5CmluZGV4IGM1MDVjZDM5OWNhNzc1YmZlZTM4YTZlMDc2NmExODVjN2E5MTJkZWUu
LjIzYjlhYmY2MWM2ODVkY2VhNjQ4MzNiODM4YzY2NWJjNjM3NTVkNjQgMTAwNzU1Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5w
eQpAQCAtMzksOSArMzksMTAgQEAgaW1wb3J0IHRyYWNlYmFjawogCiBmcm9tIHdlYmtpdHB5LmNv
bW1vbi5ob3N0IGltcG9ydCBIb3N0CiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0
IHN0YWNrX3V0aWxzCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycy5tYW5h
Z2VyIGltcG9ydCBNYW5hZ2VyLCBXb3JrZXJFeGNlcHRpb24sIFRlc3RSdW5JbnRlcnJ1cHRlZEV4
Y2VwdGlvbgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMubWFuYWdlciBp
bXBvcnQgTWFuYWdlciwgUnVuRGV0YWlscwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9k
ZWxzIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9ucwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
cG9ydCBpbXBvcnQgY29uZmlndXJhdGlvbl9vcHRpb25zLCBwbGF0Zm9ybV9vcHRpb25zCitmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy52aWV3cy5idWlsZGJvdF9yZXN1bHRzIGltcG9ydCBCdWls
ZEJvdFByaW50ZXIKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnZpZXdzIGltcG9ydCBwcmlu
dGluZwogCiAKQEAgLTg5LDM4ICs5MCwzMCBAQCBkZWYgbGludChwb3J0LCBvcHRpb25zKToKICAg
ICByZXR1cm4gMAogCiAKLWRlZiBydW4ocG9ydCwgb3B0aW9ucywgYXJncywgcmVndWxhcl9vdXRw
dXQ9c3lzLnN0ZGVyciwgYnVpbGRib3Rfb3V0cHV0PXN5cy5zdGRvdXQpOgotICAgIHRyeToKLSAg
ICAgICAgd2FybmluZ3MgPSBfc2V0X3VwX2Rlcml2ZWRfb3B0aW9ucyhwb3J0LCBvcHRpb25zKQot
Ci0gICAgICAgIHByaW50ZXIgPSBwcmludGluZy5QcmludGVyKHBvcnQsIG9wdGlvbnMsIHJlZ3Vs
YXJfb3V0cHV0LCBidWlsZGJvdF9vdXRwdXQsIGxvZ2dlcj1sb2dnaW5nLmdldExvZ2dlcigpKQor
ZGVmIHJ1bihwb3J0LCBvcHRpb25zLCBhcmdzLCBsb2dnaW5nX3N0cmVhbSk6CisgICAgd2Fybmlu
Z3MgPSBfc2V0X3VwX2Rlcml2ZWRfb3B0aW9ucyhwb3J0LCBvcHRpb25zKQogCi0gICAgICAgIGZv
ciB3YXJuaW5nIGluIHdhcm5pbmdzOgotICAgICAgICAgICAgX2xvZy53YXJuaW5nKHdhcm5pbmcp
CisgICAgcHJpbnRlciA9IHByaW50aW5nLlByaW50ZXIocG9ydCwgb3B0aW9ucywgbG9nZ2luZ19z
dHJlYW0sIGxvZ2dlcj1sb2dnaW5nLmdldExvZ2dlcigpKQogCi0gICAgICAgIGlmIG9wdGlvbnMu
bGludF90ZXN0X2ZpbGVzOgotICAgICAgICAgICAgcmV0dXJuIGxpbnQocG9ydCwgb3B0aW9ucykK
KyAgICBmb3Igd2FybmluZyBpbiB3YXJuaW5nczoKKyAgICAgICAgX2xvZy53YXJuaW5nKHdhcm5p
bmcpCiAKLSAgICAgICAgIyBXZSB3cmFwIGFueSBwYXJ0cyBvZiB0aGUgcnVuIHRoYXQgYXJlIHNs
b3cgb3IgbGlrZWx5IHRvIHJhaXNlIGV4Y2VwdGlvbnMKLSAgICAgICAgIyBpbiBhIHRyeS9maW5h
bGx5IHRvIGVuc3VyZSB0aGF0IHdlIGNsZWFuIHVwIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24u
Ci0gICAgICAgIHVuZXhwZWN0ZWRfcmVzdWx0X2NvdW50ID0gLTEKKyAgICBtYW5hZ2VyID0gTWFu
YWdlcihwb3J0LCBvcHRpb25zLCBwcmludGVyKQogCi0gICAgICAgIG1hbmFnZXIgPSBNYW5hZ2Vy
KHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpCi0gICAgICAgIHByaW50ZXIucHJpbnRfY29uZmlnKHBv
cnQucmVzdWx0c19kaXJlY3RvcnkoKSkKKyAgICBwcmludGVyLnByaW50X2NvbmZpZyhwb3J0LnJl
c3VsdHNfZGlyZWN0b3J5KCkpCiAKLSAgICAgICAgdW5leHBlY3RlZF9yZXN1bHRfY291bnQgPSBt
YW5hZ2VyLnJ1bihhcmdzKQotICAgICAgICBfbG9nLmRlYnVnKCJUZXN0aW5nIGNvbXBsZXRlZCwg
RXhpdCBzdGF0dXM6ICVkIiAlIHVuZXhwZWN0ZWRfcmVzdWx0X2NvdW50KQorICAgIHRyeToKKyAg
ICAgICAgcnVuX2RldGFpbHMgPSBtYW5hZ2VyLnJ1bihhcmdzKQorICAgICAgICBfbG9nLmRlYnVn
KCJUZXN0aW5nIGNvbXBsZXRlZCwgRXhpdCBzdGF0dXM6ICVkIiAlIHJ1bl9kZXRhaWxzLmV4aXRf
Y29kZSkKKyAgICAgICAgcmV0dXJuIHJ1bl9kZXRhaWxzCiAgICAgZXhjZXB0IEV4Y2VwdGlvbjoK
ICAgICAgICAgZXhjZXB0aW9uX3R5cGUsIGV4Y2VwdGlvbl92YWx1ZSwgZXhjZXB0aW9uX3RyYWNl
YmFjayA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgIGlmIGV4Y2VwdGlvbl90eXBlIG5vdCBpbiAo
S2V5Ym9hcmRJbnRlcnJ1cHQsIFRlc3RSdW5JbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgV29ya2VyRXhj
ZXB0aW9uKToKLSAgICAgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICdcbiVzIHJhaXNlZDog
JXMnICUgKGV4Y2VwdGlvbl90eXBlLl9fbmFtZV9fLCBleGNlcHRpb25fdmFsdWUpCi0gICAgICAg
ICAgICBzdGFja191dGlscy5sb2dfdHJhY2ViYWNrKF9sb2cuZXJyb3IsIGV4Y2VwdGlvbl90cmFj
ZWJhY2spCisgICAgICAgIHByaW50ID4+IGxvZ2dpbmdfc3RyZWFtLCAnXG4lcyByYWlzZWQ6ICVz
JyAlIChleGNlcHRpb25fdHlwZS5fX25hbWVfXywgZXhjZXB0aW9uX3ZhbHVlKQorICAgICAgICBz
dGFja191dGlscy5sb2dfdHJhY2ViYWNrKF9sb2cuZXJyb3IsIGV4Y2VwdGlvbl90cmFjZWJhY2sp
CiAgICAgICAgIHJhaXNlCiAgICAgZmluYWxseToKICAgICAgICAgcHJpbnRlci5jbGVhbnVwKCkK
IAotICAgIHJldHVybiB1bmV4cGVjdGVkX3Jlc3VsdF9jb3VudAotCiAKIGRlZiBfc2V0X3VwX2Rl
cml2ZWRfb3B0aW9ucyhwb3J0LCBvcHRpb25zKToKICAgICAiIiJTZXRzIHRoZSBvcHRpb25zIHZh
bHVlcyB0aGF0IGRlcGVuZCBvbiBvdGhlciBvcHRpb25zIHZhbHVlcy4iIiIKQEAgLTMxMiw5ICsz
MDUsNiBAQCBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgogICAgICAgICAgICAgaGVscD0iU2hv
dyBhbGwgZmFpbHVyZXMgaW4gcmVzdWx0cy5odG1sLCByYXRoZXIgdGhhbiBvbmx5IHJlZ3Jlc3Np
b25zIiksCiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLWNsb2JiZXItb2xkLXJlc3Vs
dHMiLCBhY3Rpb249InN0b3JlX3RydWUiLAogICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgaGVs
cD0iQ2xvYmJlcnMgdGVzdCByZXN1bHRzIGZyb20gcHJldmlvdXMgcnVucy4iKSwKLSAgICAgICAg
b3B0cGFyc2UubWFrZV9vcHRpb24oIi0tbm8tcmVjb3JkLXJlc3VsdHMiLCBhY3Rpb249InN0b3Jl
X2ZhbHNlIiwKLSAgICAgICAgICAgIGRlZmF1bHQ9VHJ1ZSwgZGVzdD0icmVjb3JkX3Jlc3VsdHMi
LAotICAgICAgICAgICAgaGVscD0iRG9uJ3QgcmVjb3JkIHRoZSByZXN1bHRzLiIpLAogICAgICAg
ICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1odHRwIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVz
dD0iaHR0cCIsCiAgICAgICAgICAgICBkZWZhdWx0PVRydWUsIGhlbHA9IlJ1biBIVFRQIGFuZCBX
ZWJTb2NrZXQgdGVzdHMgKGRlZmF1bHQpIiksCiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9u
KCItLW5vLWh0dHAiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0iaHR0cCIsCkBAIC00MjUs
NyArNDE1LDcgQEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKICAgICByZXR1cm4gb3B0aW9u
X3BhcnNlci5wYXJzZV9hcmdzKGFyZ3MpCiAKIAotZGVmIG1haW4oYXJndj1Ob25lKToKK2RlZiBt
YWluKGFyZ3Y9Tm9uZSwgc3Rkb3V0PXN5cy5zdGRvdXQsIHN0ZGVycj1zeXMuc3RkZXJyKToKICAg
ICB0cnk6CiAgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZV9hcmdzKGFyZ3YpCiAgICAgICAg
IGlmIG9wdGlvbnMucGxhdGZvcm0gYW5kICd0ZXN0JyBpbiBvcHRpb25zLnBsYXRmb3JtOgpAQCAt
NDM5LDIzICs0MjksMzAgQEAgZGVmIG1haW4oYXJndj1Ob25lKToKICAgICAgICAgcG9ydCA9IGhv
c3QucG9ydF9mYWN0b3J5LmdldChvcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zKQogICAgIGV4Y2Vw
dCBOb3RJbXBsZW1lbnRlZEVycm9yLCBlOgogICAgICAgICAjIEZJWE1FOiBpcyB0aGlzIHRoZSBi
ZXN0IHdheSB0byBoYW5kbGUgdW5zdXBwb3J0ZWQgcG9ydCBuYW1lcz8KLSAgICAgICAgcHJpbnQg
Pj4gc3lzLnN0ZGVyciwgc3RyKGUpCisgICAgICAgIHByaW50ID4+IHN0ZGVyciwgc3RyKGUpCiAg
ICAgICAgIHJldHVybiBFWENFUFRJT05BTF9FWElUX1NUQVRVUwogICAgIGV4Y2VwdCBFeGNlcHRp
b24sIGU6Ci0gICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICdcbiVzIHJhaXNlZDogJXMnICUg
KGUuX19jbGFzc19fLl9fbmFtZV9fLCBzdHIoZSkpCisgICAgICAgIHByaW50ID4+IHN0ZGVyciwg
J1xuJXMgcmFpc2VkOiAlcycgJSAoZS5fX2NsYXNzX18uX19uYW1lX18sIHN0cihlKSkKICAgICAg
ICAgdHJhY2ViYWNrLnByaW50X2V4YyhmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgIHJhaXNlCiAK
ICAgICBsb2dnaW5nLmdldExvZ2dlcigpLnNldExldmVsKGxvZ2dpbmcuREVCVUcgaWYgb3B0aW9u
cy5kZWJ1Z19yd3RfbG9nZ2luZyBlbHNlIGxvZ2dpbmcuSU5GTykKLSAgICByZXR1cm4gcnVuKHBv
cnQsIG9wdGlvbnMsIGFyZ3MpCisKKyAgICBpZiBvcHRpb25zLmxpbnRfdGVzdF9maWxlczoKKyAg
ICAgICAgcmV0dXJuIGxpbnQocG9ydCwgb3B0aW9ucykKKworICAgIHJ1bl9kZXRhaWxzID0gcnVu
KHBvcnQsIG9wdGlvbnMsIGFyZ3MsIHN0ZGVycikKKworICAgIGJvdF9wcmludGVyID0gQnVpbGRC
b3RQcmludGVyKHN0ZG91dCwgb3B0aW9ucy5kZWJ1Z19yd3RfbG9nZ2luZykKKyAgICBib3RfcHJp
bnRlci5wcmludF9yZXN1bHRzKHJ1bl9kZXRhaWxzKQorCisgICAgcmV0dXJuIHJ1bl9kZXRhaWxz
LmV4aXRfY29kZQogCiAKIGlmICdfX21haW5fXycgPT0gX19uYW1lX186CiAgICAgdHJ5OgotICAg
ICAgICByZXR1cm5fY29kZSA9IG1haW4oKQotICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uLCBlOgot
ICAgICAgICBpZiBlLl9fY2xhc3NfXyBpbiAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFRlc3RSdW5JbnRl
cnJ1cHRlZEV4Y2VwdGlvbik6Ci0gICAgICAgICAgICBzeXMuZXhpdChJTlRFUlJVUFRFRF9FWElU
X1NUQVRVUykKKyAgICAgICAgc3lzLmV4aXQobWFpbigpKQorICAgIGV4Y2VwdCBLZXlib2FyZElu
dGVycnVwdDoKKyAgICAgICAgc3lzLmV4aXQoSU5URVJSVVBURURfRVhJVF9TVEFUVVMpCisgICAg
ZXhjZXB0OgogICAgICAgICBzeXMuZXhpdChFWENFUFRJT05BTF9FWElUX1NUQVRVUykKLQotICAg
IHN5cy5leGl0KHJldHVybl9jb2RlKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0
aW9udGVzdC5weQppbmRleCAyYmZlOTA0ZDViMjRiMjNlZTIwMjI0NTU3OTRiNjExNWUxZGFiNzBi
Li42OGNjOGZkYzg5ZTQ2NjdlNWEyZjBkY2E3NTNkNDhiNzNjNmU1YjI3IDEwMDc1NQotLS0gYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVn
cmF0aW9udGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9y
dW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQpAQCAtMzAsNyArMzAsNiBAQAogIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogCiBpbXBvcnQgY29kZWNzCi1pbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQganNv
bgogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwpAQCAtNTIsMjAgKzUxLDE3IEBAIGZyb20gd2Vi
a2l0cHkuY29tbW9uLmhvc3RfbW9jayBpbXBvcnQgTW9ja0hvc3QKIAogZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMgaW1wb3J0IHBvcnQKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzIGltcG9y
dCBydW5fd2Via2l0X3Rlc3RzCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVy
cy5tYW5hZ2VyIGltcG9ydCBXb3JrZXJFeGNlcHRpb24KIGZyb20gd2Via2l0cHkubGF5b3V0X3Rl
c3RzLnBvcnQgaW1wb3J0IFBvcnQKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQudGVz
dCBpbXBvcnQgVGVzdFBvcnQsIFRlc3REcml2ZXIKIGZyb20gd2Via2l0cHkudGVzdC5za2lwIGlt
cG9ydCBza2lwX2lmCiBmcm9tIHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tPcHRp
b25zCiAKIAotZGVmIHBhcnNlX2FyZ3MoZXh0cmFfYXJncz1Ob25lLCByZWNvcmRfcmVzdWx0cz1G
YWxzZSwgdGVzdHNfaW5jbHVkZWQ9RmFsc2UsIG5ld19yZXN1bHRzPUZhbHNlLCBwcmludF9ub3Ro
aW5nPVRydWUpOgorZGVmIHBhcnNlX2FyZ3MoZXh0cmFfYXJncz1Ob25lLCB0ZXN0c19pbmNsdWRl
ZD1GYWxzZSwgbmV3X3Jlc3VsdHM9RmFsc2UsIHByaW50X25vdGhpbmc9VHJ1ZSk6CiAgICAgZXh0
cmFfYXJncyA9IGV4dHJhX2FyZ3Mgb3IgW10KICAgICBhcmdzID0gW10KICAgICBpZiBub3QgJy0t
cGxhdGZvcm0nIGluIGV4dHJhX2FyZ3M6CiAgICAgICAgIGFyZ3MuZXh0ZW5kKFsnLS1wbGF0Zm9y
bScsICd0ZXN0J10pCi0gICAgaWYgbm90IHJlY29yZF9yZXN1bHRzOgotICAgICAgICBhcmdzLmFw
cGVuZCgnLS1uby1yZWNvcmQtcmVzdWx0cycpCiAgICAgaWYgbm90IG5ld19yZXN1bHRzOgogICAg
ICAgICBhcmdzLmFwcGVuZCgnLS1uby1uZXctdGVzdC1yZXN1bHRzJykKIApAQCAtODEsOCArNzcs
OCBAQCBkZWYgcGFyc2VfYXJncyhleHRyYV9hcmdzPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNl
LCB0ZXN0c19pbmNsdWRlZD1GYWxzZSwgbmV3XwogICAgIHJldHVybiBydW5fd2Via2l0X3Rlc3Rz
LnBhcnNlX2FyZ3MoYXJncykKIAogCi1kZWYgcGFzc2luZ19ydW4oZXh0cmFfYXJncz1Ob25lLCBw
b3J0X29iaj1Ob25lLCByZWNvcmRfcmVzdWx0cz1GYWxzZSwgdGVzdHNfaW5jbHVkZWQ9RmFsc2Us
IGhvc3Q9Tm9uZSwgc2hhcmVkX3BvcnQ9VHJ1ZSk6Ci0gICAgb3B0aW9ucywgcGFyc2VkX2FyZ3Mg
PSBwYXJzZV9hcmdzKGV4dHJhX2FyZ3MsIHJlY29yZF9yZXN1bHRzLCB0ZXN0c19pbmNsdWRlZCkK
K2RlZiBwYXNzaW5nX3J1bihleHRyYV9hcmdzPU5vbmUsIHBvcnRfb2JqPU5vbmUsIHRlc3RzX2lu
Y2x1ZGVkPUZhbHNlLCBob3N0PU5vbmUsIHNoYXJlZF9wb3J0PVRydWUpOgorICAgIG9wdGlvbnMs
IHBhcnNlZF9hcmdzID0gcGFyc2VfYXJncyhleHRyYV9hcmdzLCB0ZXN0c19pbmNsdWRlZCkKICAg
ICBpZiBub3QgcG9ydF9vYmo6CiAgICAgICAgIGhvc3QgPSBob3N0IG9yIE1vY2tIb3N0KCkKICAg
ICAgICAgcG9ydF9vYmogPSBob3N0LnBvcnRfZmFjdG9yeS5nZXQocG9ydF9uYW1lPW9wdGlvbnMu
cGxhdGZvcm0sIG9wdGlvbnM9b3B0aW9ucykKQEAgLTkwLDIzICs4NiwyMSBAQCBkZWYgcGFzc2lu
Z19ydW4oZXh0cmFfYXJncz1Ob25lLCBwb3J0X29iaj1Ob25lLCByZWNvcmRfcmVzdWx0cz1GYWxz
ZSwgdGVzdHNfaW5jbAogICAgIGlmIHNoYXJlZF9wb3J0OgogICAgICAgICBwb3J0X29iai5ob3N0
LnBvcnRfZmFjdG9yeS5nZXQgPSBsYW1iZGEgKmFyZ3MsICoqa3dhcmdzOiBwb3J0X29iagogCi0g
ICAgYnVpbGRib3Rfb3V0cHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQotICAgIHJlZ3VsYXJfb3V0
cHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQotICAgIHJlcyA9IHJ1bl93ZWJraXRfdGVzdHMucnVu
KHBvcnRfb2JqLCBvcHRpb25zLCBwYXJzZWRfYXJncywgYnVpbGRib3Rfb3V0cHV0PWJ1aWxkYm90
X291dHB1dCwgcmVndWxhcl9vdXRwdXQ9cmVndWxhcl9vdXRwdXQpCi0gICAgcmV0dXJuIHJlcyA9
PSAwCisgICAgbG9nZ2luZ19zdHJlYW0gPSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgcnVuX2Rl
dGFpbHMgPSBydW5fd2Via2l0X3Rlc3RzLnJ1bihwb3J0X29iaiwgb3B0aW9ucywgcGFyc2VkX2Fy
Z3MsIGxvZ2dpbmdfc3RyZWFtPWxvZ2dpbmdfc3RyZWFtKQorICAgIHJldHVybiBydW5fZGV0YWls
cy5leGl0X2NvZGUgPT0gMAogCiAKLWRlZiBsb2dnaW5nX3J1bihleHRyYV9hcmdzPU5vbmUsIHBv
cnRfb2JqPU5vbmUsIHJlY29yZF9yZXN1bHRzPUZhbHNlLCB0ZXN0c19pbmNsdWRlZD1GYWxzZSwg
aG9zdD1Ob25lLCBuZXdfcmVzdWx0cz1GYWxzZSwgc2hhcmVkX3BvcnQ9VHJ1ZSk6CitkZWYgbG9n
Z2luZ19ydW4oZXh0cmFfYXJncz1Ob25lLCBwb3J0X29iaj1Ob25lLCB0ZXN0c19pbmNsdWRlZD1G
YWxzZSwgaG9zdD1Ob25lLCBuZXdfcmVzdWx0cz1GYWxzZSwgc2hhcmVkX3BvcnQ9VHJ1ZSk6CiAg
ICAgb3B0aW9ucywgcGFyc2VkX2FyZ3MgPSBwYXJzZV9hcmdzKGV4dHJhX2FyZ3M9ZXh0cmFfYXJn
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkX3Jlc3VsdHM9
cmVjb3JkX3Jlc3VsdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
c3RzX2luY2x1ZGVkPXRlc3RzX2luY2x1ZGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcmludF9ub3RoaW5nPUZhbHNlLCBuZXdfcmVzdWx0cz1uZXdfcmVzdWx0cykK
ICAgICBob3N0ID0gaG9zdCBvciBNb2NrSG9zdCgpCiAgICAgaWYgbm90IHBvcnRfb2JqOgogICAg
ICAgICBwb3J0X29iaiA9IGhvc3QucG9ydF9mYWN0b3J5LmdldChwb3J0X25hbWU9b3B0aW9ucy5w
bGF0Zm9ybSwgb3B0aW9ucz1vcHRpb25zKQogCi0gICAgcmVzLCBidWlsZGJvdF9vdXRwdXQsIHJl
Z3VsYXJfb3V0cHV0ID0gcnVuX2FuZF9jYXB0dXJlKHBvcnRfb2JqLCBvcHRpb25zLCBwYXJzZWRf
YXJncywgc2hhcmVkX3BvcnQpCi0gICAgcmV0dXJuIChyZXMsIGJ1aWxkYm90X291dHB1dCwgcmVn
dWxhcl9vdXRwdXQsIGhvc3QudXNlcikKKyAgICByZXMsIG91dHB1dCA9IHJ1bl9hbmRfY2FwdHVy
ZShwb3J0X29iaiwgb3B0aW9ucywgcGFyc2VkX2FyZ3MsIHNoYXJlZF9wb3J0KQorICAgIHJldHVy
biAocmVzLCBvdXRwdXQsIGhvc3QudXNlcikKIAogCiBkZWYgcnVuX2FuZF9jYXB0dXJlKHBvcnRf
b2JqLCBvcHRpb25zLCBwYXJzZWRfYXJncywgc2hhcmVkX3BvcnQ9VHJ1ZSk6CkBAIC0xMTUsNjQg
KzEwOSw0OCBAQCBkZWYgcnVuX2FuZF9jYXB0dXJlKHBvcnRfb2JqLCBvcHRpb25zLCBwYXJzZWRf
YXJncywgc2hhcmVkX3BvcnQ9VHJ1ZSk6CiAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENh
cHR1cmUoKQogICAgIHRyeToKICAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQotICAgICAgICBi
dWlsZGJvdF9vdXRwdXQgPSBTdHJpbmdJTy5TdHJpbmdJTygpCi0gICAgICAgIHJlZ3VsYXJfb3V0
cHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQotICAgICAgICByZXMgPSBydW5fd2Via2l0X3Rlc3Rz
LnJ1bihwb3J0X29iaiwgb3B0aW9ucywgcGFyc2VkX2FyZ3MsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJ1aWxkYm90X291dHB1dD1idWlsZGJvdF9vdXRwdXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3VsYXJfb3V0cHV0PXJlZ3VsYXJfb3V0cHV0
KQorICAgICAgICBsb2dnaW5nX3N0cmVhbSA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAg
cnVuX2RldGFpbHMgPSBydW5fd2Via2l0X3Rlc3RzLnJ1bihwb3J0X29iaiwgb3B0aW9ucywgcGFy
c2VkX2FyZ3MsIGxvZ2dpbmdfc3RyZWFtPWxvZ2dpbmdfc3RyZWFtKQogICAgIGZpbmFsbHk6CiAg
ICAgICAgIG9jLnJlc3RvcmVfb3V0cHV0KCkKLSAgICByZXR1cm4gKHJlcywgYnVpbGRib3Rfb3V0
cHV0LCByZWd1bGFyX291dHB1dCkKKyAgICByZXR1cm4gKHJ1bl9kZXRhaWxzLmV4aXRfY29kZSwg
bG9nZ2luZ19zdHJlYW0pCiAKIAotZGVmIGdldF90ZXN0c19ydW4oZXh0cmFfYXJncz1Ob25lLCB0
ZXN0c19pbmNsdWRlZD1GYWxzZSwgZmxhdHRlbl9iYXRjaGVzPUZhbHNlLAotICAgICAgICAgICAg
ICAgICAgaG9zdD1Ob25lLCBpbmNsdWRlX3JlZmVyZW5jZV9odG1sPUZhbHNlKToKLSAgICBleHRy
YV9hcmdzID0gZXh0cmFfYXJncyBvciBbXQotICAgIGlmIG5vdCB0ZXN0c19pbmNsdWRlZDoKLSAg
ICAgICAgIyBOb3QgaW5jbHVkaW5nIGh0dHAgdGVzdHMgc2luY2UgdGhleSBnZXQgcnVuIG91dCBv
ZiBvcmRlciAodGhhdAotICAgICAgICAjIGJlaGF2aW9yIGhhcyBpdHMgb3duIHRlc3QsIHNlZSB0
ZXN0X2dldF90ZXN0X2ZpbGVfcXVldWUpCi0gICAgICAgIGV4dHJhX2FyZ3MgPSBbJ3Bhc3Nlcycs
ICdmYWlsdXJlcyddICsgZXh0cmFfYXJncwotICAgIG9wdGlvbnMsIHBhcnNlZF9hcmdzID0gcGFy
c2VfYXJncyhleHRyYV9hcmdzLCB0ZXN0c19pbmNsdWRlZD1UcnVlKQotCi0gICAgaG9zdCA9IGhv
c3Qgb3IgTW9ja0hvc3QoKQotICAgIHRlc3RfYmF0Y2hlcyA9IFtdCitkZWYgZ2V0X3Rlc3RzX3J1
bihhcmdzLCBob3N0PU5vbmUpOgorICAgIHJlc3VsdHMgPSBnZXRfdGVzdF9yZXN1bHRzKGFyZ3Ms
IGhvc3QpCisgICAgcmV0dXJuIFtyZXN1bHQudGVzdF9uYW1lIGZvciByZXN1bHQgaW4gcmVzdWx0
c10KIAotICAgIGNsYXNzIFJlY29yZGluZ1Rlc3REcml2ZXIoVGVzdERyaXZlcik6Ci0gICAgICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCB3b3JrZXJfbnVtYmVyKToKLSAgICAgICAgICAgIFRl
c3REcml2ZXIuX19pbml0X18oc2VsZiwgcG9ydCwgd29ya2VyX251bWJlciwgcGl4ZWxfdGVzdHM9
cG9ydC5nZXRfb3B0aW9uKCdwaXhlbF90ZXN0JyksIG5vX3RpbWVvdXQ9RmFsc2UpCi0gICAgICAg
ICAgICBzZWxmLl9jdXJyZW50X3Rlc3RfYmF0Y2ggPSBOb25lCiAKLSAgICAgICAgZGVmIHN0YXJ0
KHNlbGYpOgotICAgICAgICAgICAgcGFzcworZGVmIGdldF90ZXN0X2JhdGNoZXMoYXJncywgaG9z
dD1Ob25lKToKKyAgICByZXN1bHRzID0gZ2V0X3Rlc3RfcmVzdWx0cyhhcmdzLCBob3N0KQorICAg
IGJhdGNoZXMgPSBbXQorICAgIGJhdGNoID0gW10KKyAgICBjdXJyZW50X3BpZCA9IE5vbmUKKyAg
ICBmb3IgcmVzdWx0IGluIHJlc3VsdHM6CisgICAgICAgIGlmIGJhdGNoIGFuZCByZXN1bHQucGlk
ICE9IGN1cnJlbnRfcGlkOgorICAgICAgICAgICAgYmF0Y2hlcy5hcHBlbmQoYmF0Y2gpCisgICAg
ICAgICAgICBiYXRjaCA9IFtdCisgICAgICAgIGJhdGNoLmFwcGVuZChyZXN1bHQudGVzdF9uYW1l
KQorICAgIGlmIGJhdGNoOgorICAgICAgICBiYXRjaGVzLmFwcGVuZChiYXRjaCkKKyAgICByZXR1
cm4gYmF0Y2hlcwogCi0gICAgICAgIGRlZiBzdG9wKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5f
Y3VycmVudF90ZXN0X2JhdGNoID0gTm9uZQogCi0gICAgICAgIGRlZiBydW5fdGVzdChzZWxmLCB0
ZXN0X2lucHV0LCBzdG9wX3doZW5fZG9uZSk6Ci0gICAgICAgICAgICBpZiBzZWxmLl9jdXJyZW50
X3Rlc3RfYmF0Y2ggaXMgTm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Rlc3Rf
YmF0Y2ggPSBbXQotICAgICAgICAgICAgICAgIHRlc3RfYmF0Y2hlcy5hcHBlbmQoc2VsZi5fY3Vy
cmVudF90ZXN0X2JhdGNoKQotICAgICAgICAgICAgdGVzdF9uYW1lID0gdGVzdF9pbnB1dC50ZXN0
X25hbWUKLSAgICAgICAgICAgICMgSW4gY2FzZSBvZiByZWZ0ZXN0LCBvbmUgdGVzdCBjYWxscyB0
aGUgZHJpdmVyJ3MgcnVuX3Rlc3QoKSB0d2ljZS4KLSAgICAgICAgICAgICMgV2Ugc2hvdWxkIG5v
dCBhZGQgYSByZWZlcmVuY2UgaHRtbCB1c2VkIGJ5IHJlZnRlc3RzIHRvIHRlc3RzIHVubGVzcyBp
bmNsdWRlX3JlZmVyZW5jZV9odG1sIHBhcmFtZXRlcgotICAgICAgICAgICAgIyBpcyBleHBsaWNp
dGx5IGdpdmVuLgotICAgICAgICAgICAgZmlsZXN5c3RlbSA9IHNlbGYuX3BvcnQuaG9zdC5maWxl
c3lzdGVtCi0gICAgICAgICAgICBkaXJuYW1lLCBmaWxlbmFtZSA9IGZpbGVzeXN0ZW0uc3BsaXQo
dGVzdF9uYW1lKQotICAgICAgICAgICAgaWYgaW5jbHVkZV9yZWZlcmVuY2VfaHRtbCBvciBub3Qg
UG9ydC5pc19yZWZlcmVuY2VfaHRtbF9maWxlKGZpbGVzeXN0ZW0sIGRpcm5hbWUsIGZpbGVuYW1l
KToKLSAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X3Rlc3RfYmF0Y2guYXBwZW5kKHRlc3Rf
bmFtZSkKLSAgICAgICAgICAgIHJldHVybiBUZXN0RHJpdmVyLnJ1bl90ZXN0KHNlbGYsIHRlc3Rf
aW5wdXQsIHN0b3Bfd2hlbl9kb25lKQorZGVmIGdldF90ZXN0X3Jlc3VsdHMoYXJncywgaG9zdD1O
b25lKToKKyAgICBvcHRpb25zLCBwYXJzZWRfYXJncyA9IHBhcnNlX2FyZ3MoYXJncywgdGVzdHNf
aW5jbHVkZWQ9VHJ1ZSkKIAotICAgIGNsYXNzIFJlY29yZGluZ1Rlc3RQb3J0KFRlc3RQb3J0KToK
LSAgICAgICAgZGVmIGNyZWF0ZV9kcml2ZXIoc2VsZiwgd29ya2VyX251bWJlcik6Ci0gICAgICAg
ICAgICByZXR1cm4gUmVjb3JkaW5nVGVzdERyaXZlcihzZWxmLCB3b3JrZXJfbnVtYmVyKQotCi0g
ICAgcmVjb3JkaW5nX3BvcnQgPSBSZWNvcmRpbmdUZXN0UG9ydChob3N0LCBvcHRpb25zPW9wdGlv
bnMpCi0gICAgcnVuX2FuZF9jYXB0dXJlKHJlY29yZGluZ19wb3J0LCBvcHRpb25zLCBwYXJzZWRf
YXJncykKKyAgICBob3N0ID0gaG9zdCBvciBNb2NrSG9zdCgpCisgICAgcG9ydF9vYmogPSBob3N0
LnBvcnRfZmFjdG9yeS5nZXQocG9ydF9uYW1lPW9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnM9b3B0
aW9ucykKIAotICAgIGlmIGZsYXR0ZW5fYmF0Y2hlczoKLSAgICAgICAgcmV0dXJuIGxpc3QoaXRl
cnRvb2xzLmNoYWluKCp0ZXN0X2JhdGNoZXMpKQorICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRw
dXRDYXB0dXJlKCkKKyAgICBvYy5jYXB0dXJlX291dHB1dCgpCisgICAgbG9nZ2luZ19zdHJlYW0g
PSBTdHJpbmdJTy5TdHJpbmdJTygpCisgICAgdHJ5OgorICAgICAgICBydW5fZGV0YWlscyA9IHJ1
bl93ZWJraXRfdGVzdHMucnVuKHBvcnRfb2JqLCBvcHRpb25zLCBwYXJzZWRfYXJncywgbG9nZ2lu
Z19zdHJlYW09bG9nZ2luZ19zdHJlYW0pCisgICAgZmluYWxseToKKyAgICAgICAgb2MucmVzdG9y
ZV9vdXRwdXQoKQogCi0gICAgcmV0dXJuIHRlc3RfYmF0Y2hlcworICAgIHJldHVybiBydW5fZGV0
YWlscy5hbGxfcmVzdWx0cwogCiAKICMgVXBkYXRlIHRoaXMgbWFnaWMgbnVtYmVyIGlmIHlvdSBh
ZGQgYW4gdW5leHBlY3RlZCB0ZXN0IHRvIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LnRlc3QK
QEAgLTI1MCwzMCArMjI4LDQ5IEBAIGNsYXNzIExpbnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBT
dHJlYW1UZXN0aW5nTWl4aW4pOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvc3QucG9ydHNf
cGFyc2VkLCBbJ2EnXSkKIAogICAgIGRlZiB0ZXN0X2xpbnRfdGVzdF9maWxlcyhzZWxmKToKLSAg
ICAgICAgcmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKFsnLS1saW50LXRlc3QtZmls
ZXMnXSkKKyAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQorICAgICAg
ICBvYy5jYXB0dXJlX291dHB1dCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlcyA9IHJ1
bl93ZWJraXRfdGVzdHMubWFpbihbJy0tcGxhdGZvcm0nLCAndGVzdCcsICctLWxpbnQtdGVzdC1m
aWxlcyddKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3V0LCBlcnIsIGxvZ3MgPSBv
Yy5yZXN0b3JlX291dHB1dCgpCisKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDApCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RW1wdHkob3V0KQotICAgICAgICBzZWxmLmFzc2VydENvbnRhaW5z
KGVyciwgJ0xpbnQgc3VjY2VlZGVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsICcn
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZSgnTGludCBzdWNjZWVkZWQnIGluIGxvZ3MpCiAKICAgICBkZWYgdGVzdF9saW50X3Rlc3Rf
ZmlsZXNfX2Vycm9ycyhzZWxmKToKLSAgICAgICAgb3B0aW9ucywgcGFyc2VkX2FyZ3MgPSBwYXJz
ZV9hcmdzKFsnLS1saW50LXRlc3QtZmlsZXMnXSkKKyAgICAgICAgb3B0aW9ucywgcGFyc2VkX2Fy
Z3MgPSBwYXJzZV9hcmdzKFsnLS1wbGF0Zm9ybScsICd0ZXN0JywgJy0tbGludC10ZXN0LWZpbGVz
J10pCiAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCiAgICAgICAgIHBvcnRfb2JqID0gaG9zdC5w
b3J0X2ZhY3RvcnkuZ2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdGlvbnM9b3B0aW9ucykKICAgICAg
ICAgcG9ydF9vYmouZXhwZWN0YXRpb25zX2RpY3QgPSBsYW1iZGE6IHsnJzogJy0tIHN5bnRheCBl
cnJvcid9Ci0gICAgICAgIHJlcywgb3V0LCBlcnIgPSBydW5fYW5kX2NhcHR1cmUocG9ydF9vYmos
IG9wdGlvbnMsIHBhcnNlZF9hcmdzKQorCisgICAgICAgIG9jID0gb3V0cHV0Y2FwdHVyZS5PdXRw
dXRDYXB0dXJlKCkKKyAgICAgICAgb2MuY2FwdHVyZV9vdXRwdXQoKQorICAgICAgICB0cnk6Cisg
ICAgICAgICAgICByZXMgPSBydW5fd2Via2l0X3Rlc3RzLmxpbnQocG9ydF9vYmosIG9wdGlvbnMp
CisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvdXQsIGVyciwgbG9ncyA9IG9jLnJlc3Rv
cmVfb3V0cHV0KCkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgLTEpCi0gICAgICAg
IHNlbGYuYXNzZXJ0RW1wdHkob3V0KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KFsnTGlu
dCBmYWlsZWQnIGluIG1zZyBmb3IgbXNnIGluIGVyci5idWZsaXN0XSkpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwob3V0LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsICcnKQor
ICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0xpbnQgZmFpbGVkJyBpbiBsb2dzKQogCiAgICAgICAg
ICMgZW5zdXJlIHdlIGxpbnQgKmFsbCogb2YgdGhlIGZpbGVzIGluIHRoZSBjYXNjYWRlLgogICAg
ICAgICBwb3J0X29iai5leHBlY3RhdGlvbnNfZGljdCA9IGxhbWJkYTogeydmb28nOiAnLS0gc3lu
dGF4IGVycm9yMScsICdiYXInOiAnLS0gc3ludGF4IGVycm9yMid9Ci0gICAgICAgIHJlcywgb3V0
LCBlcnIgPSBydW5fYW5kX2NhcHR1cmUocG9ydF9vYmosIG9wdGlvbnMsIHBhcnNlZF9hcmdzKQor
ICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJl
cyA9IHJ1bl93ZWJraXRfdGVzdHMubGludChwb3J0X29iaiwgb3B0aW9ucykKKyAgICAgICAgZmlu
YWxseToKKyAgICAgICAgICAgIG91dCwgZXJyLCBsb2dzID0gb2MucmVzdG9yZV9vdXRwdXQoKQog
CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRF
bXB0eShvdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkoWydmb286MScgaW4gbXNnIGZv
ciBtc2cgaW4gZXJyLmJ1Zmxpc3RdKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueShbJ2Jh
cjoxJyBpbiBtc2cgZm9yIG1zZyBpbiBlcnIuYnVmbGlzdF0pKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKG91dCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCAnJykKKyAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKCdmb286MScgaW4gbG9ncykKKyAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKCdiYXI6MScgaW4gbG9ncykKIAogCiBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSwgU3RyZWFtVGVzdGluZ01peGluKToKQEAgLTI4OCwxNCArMjg1LDE0IEBAIGNsYXNzIE1haW5U
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBTdHJlYW1UZXN0aW5nTWl4aW4pOgogICAgICAgICBzZWxm
LnNob3VsZF90ZXN0X3Byb2Nlc3NlcyA9IG5vdCBzZWxmLl9wbGF0Zm9ybS5pc193aW4oKQogCiAg
ICAgZGVmIHRlc3RfYWxsKHNlbGYpOgotICAgICAgICByZXMsIG91dCwgZXJyLCB1c2VyID0gbG9n
Z2luZ19ydW4oW10sIHRlc3RzX2luY2x1ZGVkPVRydWUpCisgICAgICAgIHJlcywgXywgXyA9IGxv
Z2dpbmdfcnVuKFtdLCB0ZXN0c19pbmNsdWRlZD1UcnVlKQogICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHJlcywgdW5leHBlY3RlZF90ZXN0c19jb3VudCkKIAogICAgIGRlZiB0ZXN0X2Jhc2ljKHNl
bGYpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oKSkKIAogICAgIGRlZiB0
ZXN0X2JhdGNoX3NpemUoc2VsZik6Ci0gICAgICAgIGJhdGNoX3Rlc3RzX3J1biA9IGdldF90ZXN0
c19ydW4oWyctLWJhdGNoLXNpemUnLCAnMiddKQorICAgICAgICBiYXRjaF90ZXN0c19ydW4gPSBn
ZXRfdGVzdF9iYXRjaGVzKFsnLS1iYXRjaC1zaXplJywgJzInXSkKICAgICAgICAgZm9yIGJhdGNo
IGluIGJhdGNoX3Rlc3RzX3J1bjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oYmF0
Y2gpIDw9IDIsICclcyBoYWQgdG9vIG1hbnkgdGVzdHMnICUgJywgJy5qb2luKGJhdGNoKSkKIApA
QCAtMzA3LDcgKzMwNCw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBTdHJl
YW1UZXN0aW5nTWl4aW4pOgogICAgICAgICBpZiAiV0VCS0lUX1RFU1RfTUFYX0xPQ0tFRF9TSEFS
RFMiIGluIG9zLmVudmlyb246CiAgICAgICAgICAgICBzYXZlX2Vudl93ZWJraXRfdGVzdF9tYXhf
bG9ja2VkX3NoYXJkcyA9IG9zLmVudmlyb25bIldFQktJVF9URVNUX01BWF9MT0NLRURfU0hBUkRT
Il0KICAgICAgICAgICAgIGRlbCBvcy5lbnZpcm9uWyJXRUJLSVRfVEVTVF9NQVhfTE9DS0VEX1NI
QVJEUyJdCi0gICAgICAgIF8sIF8sIHJlZ3VsYXJfb3V0cHV0LCBfID0gbG9nZ2luZ19ydW4oWyct
LWRlYnVnLXJ3dC1sb2dnaW5nJywgJy0tY2hpbGQtcHJvY2Vzc2VzJywgJzInXSwgc2hhcmVkX3Bv
cnQ9RmFsc2UpCisgICAgICAgIF8sIHJlZ3VsYXJfb3V0cHV0LCBfID0gbG9nZ2luZ19ydW4oWyct
LWRlYnVnLXJ3dC1sb2dnaW5nJywgJy0tY2hpbGQtcHJvY2Vzc2VzJywgJzInXSwgc2hhcmVkX3Bv
cnQ9RmFsc2UpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnko
WycoMSBsb2NrZWQpJyBpbiBsaW5lIGZvciBsaW5lIGluIHJlZ3VsYXJfb3V0cHV0LmJ1Zmxpc3Rd
KSkKICAgICAgICAgZmluYWxseToKQEAgLTMxNiwyMyArMzEzLDIzIEBAIGNsYXNzIE1haW5UZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlLCBTdHJlYW1UZXN0aW5nTWl4aW4pOgogCiAgICAgZGVmIHRlc3Rf
Y2hpbGRfcHJvY2Vzc2VzXzIoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuc2hvdWxkX3Rlc3RfcHJv
Y2Vzc2VzOgotICAgICAgICAgICAgXywgXywgcmVndWxhcl9vdXRwdXQsIF8gPSBsb2dnaW5nX3J1
bigKKyAgICAgICAgICAgIF8sIHJlZ3VsYXJfb3V0cHV0LCBfID0gbG9nZ2luZ19ydW4oCiAgICAg
ICAgICAgICAgICAgWyctLWRlYnVnLXJ3dC1sb2dnaW5nJywgJy0tY2hpbGQtcHJvY2Vzc2VzJywg
JzInXSwgc2hhcmVkX3BvcnQ9RmFsc2UpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55
KFsnUnVubmluZyAyICcgaW4gbGluZSBmb3IgbGluZSBpbiByZWd1bGFyX291dHB1dC5idWZsaXN0
XSkpCiAKICAgICBkZWYgdGVzdF9jaGlsZF9wcm9jZXNzZXNfbWluKHNlbGYpOgogICAgICAgICBp
ZiBzZWxmLnNob3VsZF90ZXN0X3Byb2Nlc3NlczoKLSAgICAgICAgICAgIF8sIF8sIHJlZ3VsYXJf
b3V0cHV0LCBfID0gbG9nZ2luZ19ydW4oCisgICAgICAgICAgICBfLCByZWd1bGFyX291dHB1dCwg
XyA9IGxvZ2dpbmdfcnVuKAogICAgICAgICAgICAgICAgIFsnLS1kZWJ1Zy1yd3QtbG9nZ2luZycs
ICctLWNoaWxkLXByb2Nlc3NlcycsICcyJywgJy1pJywgJ3Bhc3Nlcy9wYXNzZXMnLCAncGFzc2Vz
J10sCiAgICAgICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgc2hhcmVkX3BvcnQ9RmFs
c2UpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYW55KFsnUnVubmluZyAxICcgaW4gbGlu
ZSBmb3IgbGluZSBpbiByZWd1bGFyX291dHB1dC5idWZsaXN0XSkpCiAKICAgICBkZWYgdGVzdF9k
cnlydW4oc2VsZik6Ci0gICAgICAgIGJhdGNoX3Rlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyct
LWRyeS1ydW4nXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXRjaF90ZXN0c19ydW4sIFtd
KQorICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLS1kcnktcnVuJ10pCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdHNfcnVuLCBbXSkKIAotICAgICAgICBiYXRjaF90ZXN0
c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLW4nXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChi
YXRjaF90ZXN0c19ydW4sIFtdKQorICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsn
LW4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0c19ydW4sIFtdKQogCiAgICAgZGVm
IHRlc3RfZXhjZXB0aW9uX3JhaXNlZChzZWxmKToKICAgICAgICAgIyBFeGNlcHRpb25zIHJhaXNl
ZCBieSBhIHdvcmtlciBhcmUgdHJlYXRlZCBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24KQEAgLTM0
OCw4MSArMzQ1LDc0IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBTdHJlYW1U
ZXN0aW5nTWl4aW4pOgogICAgICAgICAgICAgWydmYWlsdXJlcy9leHBlY3RlZC9leGNlcHRpb24u
aHRtbCcsICctLWNoaWxkLXByb2Nlc3NlcycsICcxJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUpCiAK
ICAgICAgICAgaWYgc2VsZi5zaG91bGRfdGVzdF9wcm9jZXNzZXM6Ci0gICAgICAgICAgICBzZWxm
LmFzc2VydFJhaXNlcyhXb3JrZXJFeGNlcHRpb24sIGxvZ2dpbmdfcnVuLAorICAgICAgICAgICAg
c2VsZi5hc3NlcnRSYWlzZXMoQmFzZUV4Y2VwdGlvbiwgbG9nZ2luZ19ydW4sCiAgICAgICAgICAg
ICAgICAgWyctLWNoaWxkLXByb2Nlc3NlcycsICcyJywgJy0tZm9yY2UnLCAnZmFpbHVyZXMvZXhw
ZWN0ZWQvZXhjZXB0aW9uLmh0bWwnLCAncGFzc2VzL3RleHQuaHRtbCddLCB0ZXN0c19pbmNsdWRl
ZD1UcnVlLCBzaGFyZWRfcG9ydD1GYWxzZSkKIAogICAgIGRlZiB0ZXN0X2Z1bGxfcmVzdWx0c19o
dG1sKHNlbGYpOgogICAgICAgICAjIEZJWE1FOiB2ZXJpZnkgaHRtbD8KLSAgICAgICAgcmVzLCBv
dXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKFsnLS1mdWxsLXJlc3VsdHMtaHRtbCddKQorICAg
ICAgICByZXMsIF8sIF8gPSBsb2dnaW5nX3J1bihbJy0tZnVsbC1yZXN1bHRzLWh0bWwnXSkKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDApCiAKICAgICBkZWYgdGVzdF9odW5nX3RocmVh
ZChzZWxmKToKLSAgICAgICAgcmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKFsnLS1y
dW4tc2luZ2x5JywgJy0tdGltZS1vdXQtbXM9NTAnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ2ZhaWx1cmVzL2V4cGVjdGVkL2hhbmcuaHRtbCddLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkK
KyAgICAgICAgcmVzLCBlcnIsIF8gPSBsb2dnaW5nX3J1bihbJy0tcnVuLXNpbmdseScsICctLXRp
bWUtb3V0LW1zPTUwJywgJ2ZhaWx1cmVzL2V4cGVjdGVkL2hhbmcuaHRtbCddLCB0ZXN0c19pbmNs
dWRlZD1UcnVlKQogICAgICAgICAjIE5vdGUgdGhhdCBoYW5nLmh0bWwgaXMgbWFya2VkIGFzIFdv
bnRGaXggYW5kIGFsbCBXb250Rml4IHRlc3RzIGFyZQogICAgICAgICAjIGV4cGVjdGVkIHRvIFBh
c3MsIHNvIHRoYXQgYWN0dWFsbHkgcnVubmluZyB0aGVtIGdlbmVyYXRlcyBhbiAidW5leHBlY3Rl
ZCIgZXJyb3IuCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAxKQotICAgICAgICBzZWxm
LmFzc2VydE5vdEVtcHR5KG91dCkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFbXB0eShlcnIpCiAK
ICAgICBkZWYgdGVzdF9rZXlib2FyZF9pbnRlcnJ1cHQoc2VsZik6CiAgICAgICAgICMgTm90ZSB0
aGF0IHRoaXMgYWxzbyB0ZXN0cyBydW5uaW5nIGEgdGVzdCBtYXJrZWQgYXMgU0tJUCBpZgogICAg
ICAgICAjIHlvdSBzcGVjaWZ5IGl0IGV4cGxpY2l0bHkuCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFp
c2VzKEtleWJvYXJkSW50ZXJydXB0LCBsb2dnaW5nX3J1biwKLSAgICAgICAgICAgIFsnZmFpbHVy
ZXMvZXhwZWN0ZWQva2V5Ym9hcmQuaHRtbCcsICctLWNoaWxkLXByb2Nlc3NlcycsICcxJ10sCi0g
ICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNl
cyhLZXlib2FyZEludGVycnVwdCwgbG9nZ2luZ19ydW4sIFsnZmFpbHVyZXMvZXhwZWN0ZWQva2V5
Ym9hcmQuaHRtbCcsICctLWNoaWxkLXByb2Nlc3NlcycsICcxJ10sIHRlc3RzX2luY2x1ZGVkPVRy
dWUpCiAKICAgICAgICAgaWYgc2VsZi5zaG91bGRfdGVzdF9wcm9jZXNzZXM6CiAgICAgICAgICAg
ICBzZWxmLmFzc2VydFJhaXNlcyhLZXlib2FyZEludGVycnVwdCwgbG9nZ2luZ19ydW4sCiAgICAg
ICAgICAgICAgICAgWydmYWlsdXJlcy9leHBlY3RlZC9rZXlib2FyZC5odG1sJywgJ3Bhc3Nlcy90
ZXh0Lmh0bWwnLCAnLS1jaGlsZC1wcm9jZXNzZXMnLCAnMicsICctLWZvcmNlJ10sIHRlc3RzX2lu
Y2x1ZGVkPVRydWUsIHNoYXJlZF9wb3J0PUZhbHNlKQogCiAgICAgZGVmIHRlc3Rfbm9fdGVzdHNf
Zm91bmQoc2VsZik6Ci0gICAgICAgIHJlcywgb3V0LCBlcnIsIHVzZXIgPSBsb2dnaW5nX3J1bihb
J3Jlc291cmNlcyddLCB0ZXN0c19pbmNsdWRlZD1UcnVlKQorICAgICAgICByZXMsIGVyciwgXyA9
IGxvZ2dpbmdfcnVuKFsncmVzb3VyY2VzJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUpCiAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFbXB0eShvdXQp
CiAgICAgICAgIHNlbGYuYXNzZXJ0Q29udGFpbnMoZXJyLCAnTm8gdGVzdHMgdG8gcnVuLlxuJykK
IAogICAgIGRlZiB0ZXN0X25vX3Rlc3RzX2ZvdW5kXzIoc2VsZik6Ci0gICAgICAgIHJlcywgb3V0
LCBlcnIsIHVzZXIgPSBsb2dnaW5nX3J1bihbJ2ZvbyddLCB0ZXN0c19pbmNsdWRlZD1UcnVlKQor
ICAgICAgICByZXMsIGVyciwgXyA9IGxvZ2dpbmdfcnVuKFsnZm9vJ10sIHRlc3RzX2luY2x1ZGVk
PVRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAtMSkKLSAgICAgICAgc2VsZi5h
c3NlcnRFbXB0eShvdXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0Q29udGFpbnMoZXJyLCAnTm8gdGVz
dHMgdG8gcnVuLlxuJykKIAogICAgIGRlZiB0ZXN0X25hdHVyYWxfb3JkZXIoc2VsZik6CiAgICAg
ICAgIHRlc3RzX3RvX3J1biA9IFsncGFzc2VzL2F1ZGlvLmh0bWwnLCAnZmFpbHVyZXMvZXhwZWN0
ZWQvdGV4dC5odG1sJywgJ2ZhaWx1cmVzL2V4cGVjdGVkL21pc3NpbmdfdGV4dC5odG1sJywgJ3Bh
c3Nlcy9hcmdzLmh0bWwnXQotICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLS1v
cmRlcj1uYXR1cmFsJ10gKyB0ZXN0c190b19ydW4sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0
ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLS1v
cmRlcj1uYXR1cmFsJ10gKyB0ZXN0c190b19ydW4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
WydmYWlsdXJlcy9leHBlY3RlZC9taXNzaW5nX3RleHQuaHRtbCcsICdmYWlsdXJlcy9leHBlY3Rl
ZC90ZXh0Lmh0bWwnLCAncGFzc2VzL2FyZ3MuaHRtbCcsICdwYXNzZXMvYXVkaW8uaHRtbCddLCB0
ZXN0c19ydW4pCiAKICAgICBkZWYgdGVzdF9uYXR1cmFsX29yZGVyX3Rlc3Rfc3BlY2lmaWVkX211
bHRpcGxlX3RpbWVzKHNlbGYpOgogICAgICAgICB0ZXN0c190b19ydW4gPSBbJ3Bhc3Nlcy9hcmdz
Lmh0bWwnLCAncGFzc2VzL2F1ZGlvLmh0bWwnLCAncGFzc2VzL2F1ZGlvLmh0bWwnLCAncGFzc2Vz
L2FyZ3MuaHRtbCddCi0gICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLW9yZGVy
PW5hdHVyYWwnXSArIHRlc3RzX3RvX3J1biwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9i
YXRjaGVzPVRydWUpCisgICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLW9yZGVy
PW5hdHVyYWwnXSArIHRlc3RzX3RvX3J1bikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ3Bh
c3Nlcy9hcmdzLmh0bWwnLCAncGFzc2VzL2FyZ3MuaHRtbCcsICdwYXNzZXMvYXVkaW8uaHRtbCcs
ICdwYXNzZXMvYXVkaW8uaHRtbCddLCB0ZXN0c19ydW4pCiAKICAgICBkZWYgdGVzdF9yYW5kb21f
b3JkZXIoc2VsZik6CiAgICAgICAgIHRlc3RzX3RvX3J1biA9IFsncGFzc2VzL2F1ZGlvLmh0bWwn
LCAnZmFpbHVyZXMvZXhwZWN0ZWQvdGV4dC5odG1sJywgJ2ZhaWx1cmVzL2V4cGVjdGVkL21pc3Np
bmdfdGV4dC5odG1sJywgJ3Bhc3Nlcy9hcmdzLmh0bWwnXQotICAgICAgICB0ZXN0c19ydW4gPSBn
ZXRfdGVzdHNfcnVuKFsnLS1vcmRlcj1yYW5kb20nXSArIHRlc3RzX3RvX3J1biwgdGVzdHNfaW5j
bHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAgICAgIHRlc3RzX3J1biA9IGdl
dF90ZXN0c19ydW4oWyctLW9yZGVyPXJhbmRvbSddICsgdGVzdHNfdG9fcnVuKQogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHNvcnRlZCh0ZXN0c190b19ydW4pLCBzb3J0ZWQodGVzdHNfcnVuKSkK
IAogICAgIGRlZiB0ZXN0X3JhbmRvbV9vcmRlcl90ZXN0X3NwZWNpZmllZF9tdWx0aXBsZV90aW1l
cyhzZWxmKToKICAgICAgICAgdGVzdHNfdG9fcnVuID0gWydwYXNzZXMvYXJncy5odG1sJywgJ3Bh
c3Nlcy9hdWRpby5odG1sJywgJ3Bhc3Nlcy9hdWRpby5odG1sJywgJ3Bhc3Nlcy9hcmdzLmh0bWwn
XQotICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLS1vcmRlcj1yYW5kb20nXSAr
IHRlc3RzX3RvX3J1biwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUp
CisgICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLW9yZGVyPXJhbmRvbSddICsg
dGVzdHNfdG9fcnVuKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RzX3J1bi5jb3VudCgn
cGFzc2VzL2F1ZGlvLmh0bWwnKSwgMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0c19y
dW4uY291bnQoJ3Bhc3Nlcy9hcmdzLmh0bWwnKSwgMikKIAogICAgIGRlZiB0ZXN0X25vX29yZGVy
KHNlbGYpOgogICAgICAgICB0ZXN0c190b19ydW4gPSBbJ3Bhc3Nlcy9hdWRpby5odG1sJywgJ2Zh
aWx1cmVzL2V4cGVjdGVkL3RleHQuaHRtbCcsICdmYWlsdXJlcy9leHBlY3RlZC9taXNzaW5nX3Rl
eHQuaHRtbCcsICdwYXNzZXMvYXJncy5odG1sJ10KLSAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rl
c3RzX3J1bihbJy0tb3JkZXI9bm9uZSddICsgdGVzdHNfdG9fcnVuLCB0ZXN0c19pbmNsdWRlZD1U
cnVlLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3Rz
X3J1bihbJy0tb3JkZXI9bm9uZSddICsgdGVzdHNfdG9fcnVuKQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHRlc3RzX3RvX3J1biwgdGVzdHNfcnVuKQogCiAgICAgZGVmIHRlc3Rfbm9fb3JkZXJf
dGVzdF9zcGVjaWZpZWRfbXVsdGlwbGVfdGltZXMoc2VsZik6CiAgICAgICAgIHRlc3RzX3RvX3J1
biA9IFsncGFzc2VzL2FyZ3MuaHRtbCcsICdwYXNzZXMvYXVkaW8uaHRtbCcsICdwYXNzZXMvYXVk
aW8uaHRtbCcsICdwYXNzZXMvYXJncy5odG1sJ10KLSAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rl
c3RzX3J1bihbJy0tb3JkZXI9bm9uZSddICsgdGVzdHNfdG9fcnVuLCB0ZXN0c19pbmNsdWRlZD1U
cnVlLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3Rz
X3J1bihbJy0tb3JkZXI9bm9uZSddICsgdGVzdHNfdG9fcnVuKQogICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHRlc3RzX3RvX3J1biwgdGVzdHNfcnVuKQogCiAgICAgZGVmIHRlc3Rfbm9fb3JkZXJf
d2l0aF9kaXJlY3RvcnlfZW50cmllc19pbl9uYXR1cmFsX29yZGVyKHNlbGYpOgogICAgICAgICB0
ZXN0c190b19ydW4gPSBbJ2h0dHAvdGVzdHMvc3NsJywgJ3BlcmYvZm9vJywgJ2h0dHAvdGVzdHMv
cGFzc2VzJ10KLSAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tb3JkZXI9bm9u
ZSddICsgdGVzdHNfdG9fcnVuLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9
VHJ1ZSkKKyAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tb3JkZXI9bm9uZSdd
ICsgdGVzdHNfdG9fcnVuKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RzX3J1biwgWydo
dHRwL3Rlc3RzL3NzbC90ZXh0Lmh0bWwnLCAncGVyZi9mb28vdGVzdC5odG1sJywgJ2h0dHAvdGVz
dHMvcGFzc2VzL2ltYWdlLmh0bWwnLCAnaHR0cC90ZXN0cy9wYXNzZXMvdGV4dC5odG1sJ10pCiAK
ICAgICBkZWYgdGVzdF9nY19iZXR3ZWVuX3Rlc3RzKHNlbGYpOgpAQCAtNDM2LDg2ICs0MjYsODEg
QEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UsIFN0cmVhbVRlc3RpbmdNaXhpbik6
CiAKICAgICBkZWYgdGVzdF9yZXBlYXRfZWFjaChzZWxmKToKICAgICAgICAgdGVzdHNfdG9fcnVu
ID0gWydwYXNzZXMvaW1hZ2UuaHRtbCcsICdwYXNzZXMvdGV4dC5odG1sJ10KLSAgICAgICAgdGVz
dHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tcmVwZWF0LWVhY2gnLCAnMiddICsgdGVzdHNfdG9f
cnVuLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAgICAg
dGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tcmVwZWF0LWVhY2gnLCAnMiddICsgdGVzdHNf
dG9fcnVuKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RzX3J1biwgWydwYXNzZXMvaW1h
Z2UuaHRtbCcsICdwYXNzZXMvaW1hZ2UuaHRtbCcsICdwYXNzZXMvdGV4dC5odG1sJywgJ3Bhc3Nl
cy90ZXh0Lmh0bWwnXSkKIAogICAgIGRlZiB0ZXN0X2lnbm9yZV9mbGFnKHNlbGYpOgogICAgICAg
ICAjIE5vdGUgdGhhdCBwYXNzZXMvaW1hZ2UuaHRtbCBpcyBleHBlY3RlZCB0byBiZSBydW4gc2lu
Y2Ugd2Ugc3BlY2lmaWVkIGl0IGRpcmVjdGx5LgotICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVz
dHNfcnVuKFsnLWknLCAncGFzc2VzJywgJ3Bhc3Nlcy9pbWFnZS5odG1sJ10sIGZsYXR0ZW5fYmF0
Y2hlcz1UcnVlLCB0ZXN0c19pbmNsdWRlZD1UcnVlKQorICAgICAgICB0ZXN0c19ydW4gPSBnZXRf
dGVzdHNfcnVuKFsnLWknLCAncGFzc2VzJywgJ3Bhc3Nlcy9pbWFnZS5odG1sJ10pCiAgICAgICAg
IHNlbGYuYXNzZXJ0RmFsc2UoJ3Bhc3Nlcy90ZXh0Lmh0bWwnIGluIHRlc3RzX3J1bikKICAgICAg
ICAgc2VsZi5hc3NlcnRUcnVlKCdwYXNzZXMvaW1hZ2UuaHRtbCcgaW4gdGVzdHNfcnVuKQogCiAg
ICAgZGVmIHRlc3Rfc2tpcHBlZF9mbGFnKHNlbGYpOgotICAgICAgICB0ZXN0c19ydW4gPSBnZXRf
dGVzdHNfcnVuKFsncGFzc2VzJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hl
cz1UcnVlKQorICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsncGFzc2VzJ10pCiAg
ICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ3Bhc3Nlcy9za2lwcGVkL3NraXAuaHRtbCcgaW4gdGVz
dHNfcnVuKQogICAgICAgICBudW1fdGVzdHNfcnVuX2J5X2RlZmF1bHQgPSBsZW4odGVzdHNfcnVu
KQogCiAgICAgICAgICMgQ2hlY2sgdGhhdCBub3RoaW5nIGNoYW5nZXMgd2hlbiB3ZSBzcGVjaWZ5
IHNraXBwZWQ9ZGVmYXVsdC4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZ2V0X3Rlc3Rz
X3J1bihbJy0tc2tpcHBlZD1kZWZhdWx0JywgJ3Bhc3NlcyddLCB0ZXN0c19pbmNsdWRlZD1UcnVl
LCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkpLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihn
ZXRfdGVzdHNfcnVuKFsnLS1za2lwcGVkPWRlZmF1bHQnLCAncGFzc2VzJ10pKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnVtX3Rlc3RzX3J1bl9ieV9kZWZhdWx0KQogCiAgICAgICAgICMg
Tm93IGNoZWNrIHRoYXQgd2UgcnVuIG9uZSBtb3JlIHRlc3QgKHRoZSBza2lwcGVkIG9uZSkuCi0g
ICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLXNraXBwZWQ9aWdub3JlJywgJ3Bh
c3NlcyddLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAg
ICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tc2tpcHBlZD1pZ25vcmUnLCAncGFzc2Vz
J10pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgncGFzc2VzL3NraXBwZWQvc2tpcC5odG1sJyBp
biB0ZXN0c19ydW4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRlc3RzX3J1biksIG51
bV90ZXN0c19ydW5fYnlfZGVmYXVsdCArIDEpCiAKICAgICAgICAgIyBOb3cgY2hlY2sgdGhhdCB3
ZSBvbmx5IHJ1biB0aGUgc2tpcHBlZCB0ZXN0LgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdl
dF90ZXN0c19ydW4oWyctLXNraXBwZWQ9b25seScsICdwYXNzZXMnXSwgdGVzdHNfaW5jbHVkZWQ9
VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBb
J3Bhc3Nlcy9za2lwcGVkL3NraXAuaHRtbCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdl
dF90ZXN0c19ydW4oWyctLXNraXBwZWQ9b25seScsICdwYXNzZXMnXSksIFsncGFzc2VzL3NraXBw
ZWQvc2tpcC5odG1sJ10pCiAKICAgICAgICAgIyBOb3cgY2hlY2sgdGhhdCB3ZSBkb24ndCBydW4g
YW55dGhpbmcuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3Rlc3RzX3J1bihbJy0tc2tp
cHBlZD1hbHdheXMnLCAncGFzc2VzL3NraXBwZWQvc2tpcC5odG1sJ10sIHRlc3RzX2luY2x1ZGVk
PVRydWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
W10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3Rlc3RzX3J1bihbJy0tc2tpcHBlZD1h
bHdheXMnLCAncGFzc2VzL3NraXBwZWQvc2tpcC5odG1sJ10pLCBbXSkKIAogICAgIGRlZiB0ZXN0
X2l0ZXJhdGlvbnMoc2VsZik6CiAgICAgICAgIHRlc3RzX3RvX3J1biA9IFsncGFzc2VzL2ltYWdl
Lmh0bWwnLCAncGFzc2VzL3RleHQuaHRtbCddCi0gICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0
c19ydW4oWyctLWl0ZXJhdGlvbnMnLCAnMiddICsgdGVzdHNfdG9fcnVuLCB0ZXN0c19pbmNsdWRl
ZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rl
c3RzX3J1bihbJy0taXRlcmF0aW9ucycsICcyJ10gKyB0ZXN0c190b19ydW4pCiAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwodGVzdHNfcnVuLCBbJ3Bhc3Nlcy9pbWFnZS5odG1sJywgJ3Bhc3Nlcy90
ZXh0Lmh0bWwnLCAncGFzc2VzL2ltYWdlLmh0bWwnLCAncGFzc2VzL3RleHQuaHRtbCddKQogCiAg
ICAgZGVmIHRlc3RfcmVwZWF0X2VhY2hfaXRlcmF0aW9uc19udW1fdGVzdHMoc2VsZik6CiAgICAg
ICAgICMgVGhlIHRvdGFsIG51bWJlciBvZiB0ZXN0cyBzaG91bGQgYmU6IG51bWJlcl9vZl90ZXN0
cyAqCiAgICAgICAgICMgcmVwZWF0X2VhY2ggKiBpdGVyYXRpb25zCiAgICAgICAgIGhvc3QgPSBN
b2NrSG9zdCgpCi0gICAgICAgIHJlcywgb3V0LCBlcnIsIF8gPSBsb2dnaW5nX3J1bihbJy0taXRl
cmF0aW9ucycsICcyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
LS1yZXBlYXQtZWFjaCcsICc0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnLS1kZWJ1Zy1yd3QtbG9nZ2luZycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ3Bhc3Nlcy90ZXh0Lmh0bWwnLCAnZmFpbHVyZXMvZXhwZWN0ZWQvdGV4dC5o
dG1sJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c19pbmNs
dWRlZD1UcnVlLCBob3N0PWhvc3QsIHJlY29yZF9yZXN1bHRzPVRydWUpCi0gICAgICAgIHNlbGYu
YXNzZXJ0Q29udGFpbnMob3V0LCAiPT4gUmVzdWx0czogOC8xNiB0ZXN0cyBwYXNzZWQgKDUwLjAl
KVxuIikKKyAgICAgICAgcmVzLCBlcnIsIF8gPSBsb2dnaW5nX3J1bihbJy0taXRlcmF0aW9ucycs
ICcyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tcmVwZWF0LWVhY2gn
LCAnNCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLWRlYnVnLXJ3dC1s
b2dnaW5nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bhc3Nlcy90ZXh0
Lmh0bWwnLCAnZmFpbHVyZXMvZXhwZWN0ZWQvdGV4dC5odG1sJ10sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVkPVRydWUsIGhvc3Q9aG9zdCkKICAgICAg
ICAgc2VsZi5hc3NlcnRDb250YWlucyhlcnIsICJBbGwgMTYgdGVzdHMgcmFuIGFzIGV4cGVjdGVk
LlxuIikKIAogICAgIGRlZiB0ZXN0X3J1bl9jaHVuayhzZWxmKToKICAgICAgICAgIyBUZXN0IHRo
YXQgd2UgYWN0dWFsbHkgc2VsZWN0IHRoZSByaWdodCBjaHVuawotICAgICAgICBhbGxfdGVzdHNf
cnVuID0gZ2V0X3Rlc3RzX3J1bihmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKLSAgICAgICAgY2h1bmtf
dGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tcnVuLWNodW5rJywgJzE6NCddLCBmbGF0dGVu
X2JhdGNoZXM9VHJ1ZSkKKyAgICAgICAgYWxsX3Rlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWydw
YXNzZXMnLCAnZmFpbHVyZXMnXSkKKyAgICAgICAgY2h1bmtfdGVzdHNfcnVuID0gZ2V0X3Rlc3Rz
X3J1bihbJy0tcnVuLWNodW5rJywgJzE6NCcsICdwYXNzZXMnLCAnZmFpbHVyZXMnXSkKICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChhbGxfdGVzdHNfcnVuWzQ6OF0sIGNodW5rX3Rlc3RzX3J1bikK
IAogICAgICAgICAjIFRlc3QgdGhhdCB3ZSB3cmFwIGFyb3VuZCBpZiB0aGUgbnVtYmVyIG9mIHRl
c3RzIGlzIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5IHRoZSBjaHVuayBzaXplCiAgICAgICAgIHRl
c3RzX3RvX3J1biA9IFsncGFzc2VzL2Vycm9yLmh0bWwnLCAncGFzc2VzL2ltYWdlLmh0bWwnLCAn
cGFzc2VzL3BsYXRmb3JtX2ltYWdlLmh0bWwnLCAncGFzc2VzL3RleHQuaHRtbCddCi0gICAgICAg
IGNodW5rX3Rlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLXJ1bi1jaHVuaycsICcxOjMnXSAr
IHRlc3RzX3RvX3J1biwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUp
CisgICAgICAgIGNodW5rX3Rlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLXJ1bi1jaHVuaycs
ICcxOjMnXSArIHRlc3RzX3RvX3J1bikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ3Bhc3Nl
cy90ZXh0Lmh0bWwnLCAncGFzc2VzL2Vycm9yLmh0bWwnLCAncGFzc2VzL2ltYWdlLmh0bWwnXSwg
Y2h1bmtfdGVzdHNfcnVuKQogCiAgICAgZGVmIHRlc3RfcnVuX2ZvcmNlKHNlbGYpOgogICAgICAg
ICAjIFRoaXMgcmFpc2VzIGFuIGV4Y2VwdGlvbiBiZWNhdXNlIHdlIHJ1bgogICAgICAgICAjIGZh
aWx1cmVzL2V4cGVjdGVkL2V4Y2VwdGlvbi5odG1sLCB3aGljaCBpcyBub3JtYWxseSBTS0lQcGVk
LgotCi0gICAgICAgICMgU2VlIGFsc28gdGhlIGNvbW1lbnRzIGluIHRlc3RfZXhjZXB0aW9uX3Jh
aXNlZCgpIGFib3V0IFZhbHVlRXJyb3IgdnMuIFdvcmtlckV4Y2VwdGlvbi4KLSAgICAgICAgc2Vs
Zi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9nZ2luZ19ydW4sIFsnLS1mb3JjZSddKQorICAg
ICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIGxvZ2dpbmdfcnVuLCBbJy0tZm9yY2Un
XSkKIAogICAgIGRlZiB0ZXN0X3J1bl9wYXJ0KHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCB3
ZSBhY3R1YWxseSBzZWxlY3QgdGhlIHJpZ2h0IHBhcnQKICAgICAgICAgdGVzdHNfdG9fcnVuID0g
WydwYXNzZXMvZXJyb3IuaHRtbCcsICdwYXNzZXMvaW1hZ2UuaHRtbCcsICdwYXNzZXMvcGxhdGZv
cm1faW1hZ2UuaHRtbCcsICdwYXNzZXMvdGV4dC5odG1sJ10KLSAgICAgICAgdGVzdHNfcnVuID0g
Z2V0X3Rlc3RzX3J1bihbJy0tcnVuLXBhcnQnLCAnMToyJ10gKyB0ZXN0c190b19ydW4sIHRlc3Rz
X2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAgICB0ZXN0c19ydW4g
PSBnZXRfdGVzdHNfcnVuKFsnLS1ydW4tcGFydCcsICcxOjInXSArIHRlc3RzX3RvX3J1bikKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ3Bhc3Nlcy9lcnJvci5odG1sJywgJ3Bhc3Nlcy9pbWFn
ZS5odG1sJ10sIHRlc3RzX3J1bikKIAogICAgICAgICAjIFRlc3QgdGhhdCB3ZSB3cmFwIGFyb3Vu
ZCBpZiB0aGUgbnVtYmVyIG9mIHRlc3RzIGlzIG5vdCBldmVubHkgZGl2aXNpYmxlIGJ5IHRoZSBj
aHVuayBzaXplCiAgICAgICAgICMgKGhlcmUgd2UgZW5kIHVwIHdpdGggMyBwYXJ0cywgZWFjaCB3
aXRoIDIgdGVzdHMsIGFuZCB3ZSBvbmx5IGhhdmUgNCB0ZXN0cyB0b3RhbCwgc28gdGhlCiAgICAg
ICAgICMgbGFzdCBwYXJ0IHJlcGVhdHMgdGhlIGZpcnN0IHR3byB0ZXN0cykuCi0gICAgICAgIGNo
dW5rX3Rlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWyctLXJ1bi1wYXJ0JywgJzM6MyddICsgdGVz
dHNfdG9fcnVuLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAg
ICAgICAgY2h1bmtfdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tcnVuLXBhcnQnLCAnMzoz
J10gKyB0ZXN0c190b19ydW4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydwYXNzZXMvZXJy
b3IuaHRtbCcsICdwYXNzZXMvaW1hZ2UuaHRtbCddLCBjaHVua190ZXN0c19ydW4pCiAKICAgICBk
ZWYgdGVzdF9ydW5fc2luZ2x5KHNlbGYpOgotICAgICAgICBiYXRjaF90ZXN0c19ydW4gPSBnZXRf
dGVzdHNfcnVuKFsnLS1ydW4tc2luZ2x5J10pCisgICAgICAgIGJhdGNoX3Rlc3RzX3J1biA9IGdl
dF90ZXN0X2JhdGNoZXMoWyctLXJ1bi1zaW5nbHknXSkKICAgICAgICAgZm9yIGJhdGNoIGluIGJh
dGNoX3Rlc3RzX3J1bjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJhdGNoKSwg
MSwgJyVzIGhhZCB0b28gbWFueSB0ZXN0cycgJSAnLCAnLmpvaW4oYmF0Y2gpKQogCkBAIC01MjUs
NyArNTEwLDcgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UsIFN0cmVhbVRlc3Rp
bmdNaXhpbik6CiAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCiAgICAgICAgIGhvc3QuZmlsZXN5
c3RlbS53cml0ZV90ZXh0X2ZpbGUoJy90bXAvb3ZlcnJpZGVzLnR4dCcsICdCdWcoeCkgcGFzc2Vz
L2ltYWdlLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIFBhc3MgXVxuJykKIAotICAgICAgICBiYXRj
aGVzID0gZ2V0X3Rlc3RzX3J1bihbJy0tc2tpcC1mYWlsaW5nLXRlc3RzJywgJy0tYWRkaXRpb25h
bC1leHBlY3RhdGlvbnMnLCAnL3RtcC9vdmVycmlkZXMudHh0J10sIGhvc3Q9aG9zdCkKKyAgICAg
ICAgYmF0Y2hlcyA9IGdldF90ZXN0X2JhdGNoZXMoWyctLXNraXAtZmFpbGluZy10ZXN0cycsICct
LWFkZGl0aW9uYWwtZXhwZWN0YXRpb25zJywgJy90bXAvb3ZlcnJpZGVzLnR4dCddLCBob3N0PWhv
c3QpCiAgICAgICAgIGhhc19wYXNzZXNfdGV4dCA9IEZhbHNlCiAgICAgICAgIGZvciBiYXRjaCBp
biBiYXRjaGVzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnZmFpbHVyZXMvZXhwZWN0
ZWQvdGV4dC5odG1sJyBpbiBiYXRjaCkKQEAgLTUzNCwyMyArNTE5LDE5IEBAIGNsYXNzIE1haW5U
ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBTdHJlYW1UZXN0aW5nTWl4aW4pOgogICAgICAgICBzZWxm
LmFzc2VydFRydWUoaGFzX3Bhc3Nlc190ZXh0KQogCiAgICAgZGVmIHRlc3RfcnVuX3NpbmdseV9h
Y3R1YWxseV9ydW5zX3Rlc3RzKHNlbGYpOgotICAgICAgICByZXMsIF8sIF8sIF8gPSBsb2dnaW5n
X3J1bihbJy0tcnVuLXNpbmdseScsICdmYWlsdXJlcy91bmV4cGVjdGVkJ10pCisgICAgICAgIHJl
cywgXywgXyA9IGxvZ2dpbmdfcnVuKFsnLS1ydW4tc2luZ2x5JywgJ2ZhaWx1cmVzL3VuZXhwZWN0
ZWQnXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIHVuZXhwZWN0ZWRfZmFpbHVyZXMp
CiAKICAgICBkZWYgdGVzdF9zaW5nbGVfZmlsZShzZWxmKToKLSAgICAgICAgIyBGSVhNRTogV2Ug
c2hvdWxkIGNvbnNpZGVyIHJlcGxhY2luZyBtb3JlIG9mIHRoZSBnZXRfdGVzdHNfcnVuKCktc3R5
bGUgdGVzdHMKLSAgICAgICAgIyB3aXRoIHRlc3RzIHRoYXQgcmVhZCB0aGUgdGVzdHNfcnVuKiBm
aWxlcywgbGlrZSB0aGlzIG9uZS4KLSAgICAgICAgaG9zdCA9IE1vY2tIb3N0KCkKLSAgICAgICAg
dGVzdHNfcnVuID0gcGFzc2luZ19ydW4oWydwYXNzZXMvdGV4dC5odG1sJ10sIHRlc3RzX2luY2x1
ZGVkPVRydWUsIGhvc3Q9aG9zdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob3N0LmZpbGVz
eXN0ZW0ucmVhZF90ZXh0X2ZpbGUoJy90bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy90ZXN0c19ydW4w
LnR4dCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAncGFzc2VzL3RleHQuaHRtbFxuJykK
KyAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJ3Bhc3Nlcy90ZXh0Lmh0bWwnXSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0c19ydW4sIFsncGFzc2VzL3RleHQuaHRtbCdd
KQogCiAgICAgZGVmIHRlc3Rfc2luZ2xlX2ZpbGVfd2l0aF9wcmVmaXgoc2VsZik6Ci0gICAgICAg
IHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWydMYXlvdXRUZXN0cy9wYXNzZXMvdGV4dC5odG1s
J10sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAgICB0
ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnTGF5b3V0VGVzdHMvcGFzc2VzL3RleHQuaHRtbCdd
KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsncGFzc2VzL3RleHQuaHRtbCddLCB0ZXN0c19y
dW4pCiAKICAgICBkZWYgdGVzdF9zaW5nbGVfc2tpcHBlZF9maWxlKHNlbGYpOgotICAgICAgICB0
ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnZmFpbHVyZXMvZXhwZWN0ZWQva2V5YmFvcmQuaHRt
bCddLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAgICAg
dGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJ2ZhaWx1cmVzL2V4cGVjdGVkL2tleWJhb3JkLmh0
bWwnXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgdGVzdHNfcnVuKQogCiAgICAgZGVm
IHRlc3Rfc3RkZXJyX2lzX3NhdmVkKHNlbGYpOgpAQCAtNTYzLDExICs1NDQsMTAgQEAgY2xhc3Mg
TWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UsIFN0cmVhbVRlc3RpbmdNaXhpbik6CiAgICAgICAg
IGhvc3QgPSBNb2NrSG9zdCgpCiAgICAgICAgIGZpbGVuYW1lID0gJy90bXAvZm9vLnR4dCcKICAg
ICAgICAgaG9zdC5maWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShmaWxlbmFtZSwgJ3Bhc3Nlcy90
ZXh0Lmh0bWwnKQotICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLS10ZXN0LWxp
c3Q9JXMnICUgZmlsZW5hbWVdLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9
VHJ1ZSwgaG9zdD1ob3N0KQorICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLS10
ZXN0LWxpc3Q9JXMnICUgZmlsZW5hbWVdLCBob3N0PWhvc3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoWydwYXNzZXMvdGV4dC5odG1sJ10sIHRlc3RzX3J1bikKICAgICAgICAgaG9zdC5maWxl
c3lzdGVtLnJlbW92ZShmaWxlbmFtZSkKLSAgICAgICAgcmVzLCBvdXQsIGVyciwgdXNlciA9IGxv
Z2dpbmdfcnVuKFsnLS10ZXN0LWxpc3Q9JXMnICUgZmlsZW5hbWVdLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgaG9zdD1ob3N0
KQorICAgICAgICByZXMsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKFsnLS10ZXN0LWxpc3Q9JXMn
ICUgZmlsZW5hbWVdLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBob3N0PWhvc3QpCiAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwocmVzLCAtMSkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFbXB0eShlcnIp
CiAKQEAgLTU3NSwxNiArNTU1LDE1IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNl
LCBTdHJlYW1UZXN0aW5nTWl4aW4pOgogICAgICAgICBob3N0ID0gTW9ja0hvc3QoKQogICAgICAg
ICBmaWxlbmFtZSA9ICcvdG1wL2Zvby50eHQnCiAgICAgICAgIGhvc3QuZmlsZXN5c3RlbS53cml0
ZV90ZXh0X2ZpbGUoZmlsZW5hbWUsICdMYXlvdXRUZXN0cy9wYXNzZXMvdGV4dC5odG1sJykKLSAg
ICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tdGVzdC1saXN0PSVzJyAlIGZpbGVu
YW1lXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUsIGhvc3Q9aG9z
dCkKKyAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tdGVzdC1saXN0PSVzJyAl
IGZpbGVuYW1lXSwgaG9zdD1ob3N0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsncGFzc2Vz
L3RleHQuaHRtbCddLCB0ZXN0c19ydW4pCiAKICAgICBkZWYgdGVzdF91bmV4cGVjdGVkX2ZhaWx1
cmVzKHNlbGYpOgogICAgICAgICAjIFJ1biB0ZXN0cyBpbmNsdWRpbmcgdGhlIHVuZXhwZWN0ZWQg
ZmFpbHVyZXMuCiAgICAgICAgIHNlbGYuX3VybF9vcGVuZWQgPSBOb25lCi0gICAgICAgIHJlcywg
b3V0LCBlcnIsIHVzZXIgPSBsb2dnaW5nX3J1bih0ZXN0c19pbmNsdWRlZD1UcnVlKQorICAgICAg
ICByZXMsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKHRlc3RzX2luY2x1ZGVkPVRydWUpCiAKICAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIHVuZXhwZWN0ZWRfdGVzdHNfY291bnQpCi0gICAg
ICAgIHNlbGYuYXNzZXJ0Tm90RW1wdHkob3V0KQogICAgICAgICBzZWxmLmFzc2VydE5vdEVtcHR5
KGVycikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1c2VyLm9wZW5lZF91cmxzLCBbcGF0aC5h
YnNwYXRoX3RvX3VyaShNb2NrSG9zdCgpLnBsYXRmb3JtLCAnL3RtcC9sYXlvdXQtdGVzdC1yZXN1
bHRzL3Jlc3VsdHMuaHRtbCcpXSkKIApAQCAtNTkyLDEzICs1NzEsMTIgQEAgY2xhc3MgTWFpblRl
c3QodW5pdHRlc3QuVGVzdENhc2UsIFN0cmVhbVRlc3RpbmdNaXhpbik6CiAgICAgICAgICMgVGVz
dCB0aGF0IHdlIHVwZGF0ZSBleHBlY3RhdGlvbnMgaW4gcGxhY2UuIElmIHRoZSBleHBlY3RhdGlv
bgogICAgICAgICAjIGlzIG1pc3NpbmcsIHVwZGF0ZSB0aGUgZXhwZWN0ZWQgZ2VuZXJpYyBsb2Nh
dGlvbi4KICAgICAgICAgaG9zdCA9IE1vY2tIb3N0KCkKLSAgICAgICAgcmVzLCBvdXQsIGVyciwg
XyA9IGxvZ2dpbmdfcnVuKFsnLS1uby1zaG93LXJlc3VsdHMnLAorICAgICAgICByZXMsIGVyciwg
XyA9IGxvZ2dpbmdfcnVuKFsnLS1uby1zaG93LXJlc3VsdHMnLAogICAgICAgICAgICAgJ2ZhaWx1
cmVzL2V4cGVjdGVkL21pc3NpbmdfaW1hZ2UuaHRtbCcsCiAgICAgICAgICAgICAnZmFpbHVyZXMv
dW5leHBlY3RlZC9taXNzaW5nX3RleHQuaHRtbCcsCiAgICAgICAgICAgICAnZmFpbHVyZXMvdW5l
eHBlY3RlZC90ZXh0LWltYWdlLWNoZWNrc3VtLmh0bWwnXSwKLSAgICAgICAgICAgIHRlc3RzX2lu
Y2x1ZGVkPVRydWUsIGhvc3Q9aG9zdCwgcmVjb3JkX3Jlc3VsdHM9VHJ1ZSkKKyAgICAgICAgICAg
IHRlc3RzX2luY2x1ZGVkPVRydWUsIGhvc3Q9aG9zdCkKICAgICAgICAgZmlsZV9saXN0ID0gaG9z
dC5maWxlc3lzdGVtLndyaXR0ZW5fZmlsZXMua2V5cygpCi0gICAgICAgIGZpbGVfbGlzdC5yZW1v
dmUoJy90bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy90ZXN0c19ydW4wLnR4dCcpCiAgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwocmVzLCAxKQogICAgICAgICBleHBlY3RlZF90b2tlbiA9ICcidW5leHBl
Y3RlZCI6eyJ0ZXh0LWltYWdlLWNoZWNrc3VtLmh0bWwiOnsiZXhwZWN0ZWQiOiJQQVNTIiwiYWN0
dWFsIjoiSU1BR0UrVEVYVCIsImltYWdlX2RpZmZfcGVyY2VudCI6MX0sIm1pc3NpbmdfdGV4dC5o
dG1sIjp7ImV4cGVjdGVkIjoiUEFTUyIsImlzX21pc3NpbmdfdGV4dCI6dHJ1ZSwiYWN0dWFsIjoi
TUlTU0lORyJ9JwogICAgICAgICBqc29uX3N0cmluZyA9IGhvc3QuZmlsZXN5c3RlbS5yZWFkX3Rl
eHRfZmlsZSgnL3RtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Z1bGxfcmVzdWx0cy5qc29uJykKQEAg
LTYxNCw3ICs1OTIsNyBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwgU3RyZWFt
VGVzdGluZ01peGluKToKICAgICAgICAgYXJncyA9IFsnLS1waXhlbC10ZXN0cycsICctLXBpeGVs
LXRlc3QtZGlyZWN0b3J5JywgJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvcGl4ZWxkaXInLAogICAgICAg
ICAgICAgICAgICdmYWlsdXJlcy91bmV4cGVjdGVkL3BpeGVsZGlyL2ltYWdlX2luX3BpeGVsZGly
Lmh0bWwnLAogICAgICAgICAgICAgICAgICdmYWlsdXJlcy91bmV4cGVjdGVkL2ltYWdlX25vdF9p
bl9waXhlbGRpci5odG1sJ10KLSAgICAgICAgcmVzLCBvdXQsIGVyciwgXyA9IGxvZ2dpbmdfcnVu
KGV4dHJhX2FyZ3M9YXJncywgaG9zdD1ob3N0LCByZWNvcmRfcmVzdWx0cz1UcnVlLCB0ZXN0c19p
bmNsdWRlZD1UcnVlKQorICAgICAgICByZXMsIGVyciwgXyA9IGxvZ2dpbmdfcnVuKGV4dHJhX2Fy
Z3M9YXJncywgaG9zdD1ob3N0LCB0ZXN0c19pbmNsdWRlZD1UcnVlKQogCiAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwocmVzLCAxKQogICAgICAgICBleHBlY3RlZF90b2tlbiA9ICcidW5leHBlY3Rl
ZCI6eyJwaXhlbGRpciI6eyJpbWFnZV9pbl9waXhlbGRpci5odG1sIjp7ImV4cGVjdGVkIjoiUEFT
UyIsImFjdHVhbCI6IklNQUdFIicKQEAgLTYzMSwzMSArNjA5LDIxIEBAIGNsYXNzIE1haW5UZXN0
KHVuaXR0ZXN0LlRlc3RDYXNlLCBTdHJlYW1UZXN0aW5nTWl4aW4pOgogICAgICAgICBob3N0ID0g
TW9ja0hvc3QoKQogICAgICAgICBvcHRpb25zLCBwYXJzZWRfYXJncyA9IHJ1bl93ZWJraXRfdGVz
dHMucGFyc2VfYXJncyhbJy0tcGl4ZWwtdGVzdHMnLCAnLS1uby1uZXctdGVzdC1yZXN1bHRzJ10p
CiAgICAgICAgIHRlc3RfcG9ydCA9IEN1c3RvbUV4aXRDb2RlUG9ydChob3N0LCBvcHRpb25zPW9w
dGlvbnMpCi0gICAgICAgIHJlcywgb3V0LCBlcnIsIF8gPSBsb2dnaW5nX3J1bihbJy0tbm8tc2hv
dy1yZXN1bHRzJywKKyAgICAgICAgcmVzLCBlcnIsIF8gPSBsb2dnaW5nX3J1bihbJy0tbm8tc2hv
dy1yZXN1bHRzJywKICAgICAgICAgICAgICdmYWlsdXJlcy9leHBlY3RlZC9taXNzaW5nX2ltYWdl
Lmh0bWwnLAogICAgICAgICAgICAgJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvbWlzc2luZ190ZXh0Lmh0
bWwnLAogICAgICAgICAgICAgJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvdGV4dC1pbWFnZS1jaGVja3N1
bS5odG1sJ10sCi0gICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1UcnVlLCBob3N0PWhvc3QsIHJl
Y29yZF9yZXN1bHRzPVRydWUsIHBvcnRfb2JqPXRlc3RfcG9ydCkKKyAgICAgICAgICAgIHRlc3Rz
X2luY2x1ZGVkPVRydWUsIGhvc3Q9aG9zdCwgcG9ydF9vYmo9dGVzdF9wb3J0KQogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHJlcywgMikKIAogICAgIGRlZiB0ZXN0X2NyYXNoX3dpdGhfc3RkZXJy
KHNlbGYpOgogICAgICAgICBob3N0ID0gTW9ja0hvc3QoKQotICAgICAgICByZXMsIGJ1aWxkYm90
X291dHB1dCwgcmVndWxhcl9vdXRwdXQsIHVzZXIgPSBsb2dnaW5nX3J1bihbCi0gICAgICAgICAg
ICAgICAgJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvY3Jhc2gtd2l0aC1zdGRlcnIuaHRtbCcsCi0gICAg
ICAgICAgICBdLAotICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwKLSAgICAgICAgICAg
IHJlY29yZF9yZXN1bHRzPVRydWUsCi0gICAgICAgICAgICBob3N0PWhvc3QpCisgICAgICAgIHJl
cywgXywgXyA9IGxvZ2dpbmdfcnVuKFsnZmFpbHVyZXMvdW5leHBlY3RlZC9jcmFzaC13aXRoLXN0
ZGVyci5odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGhvc3Q9aG9zdCkKICAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKGhvc3QuZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZSgnL3RtcC9sYXlvdXQt
dGVzdC1yZXN1bHRzL2Z1bGxfcmVzdWx0cy5qc29uJykuZmluZCgneyJjcmFzaC13aXRoLXN0ZGVy
ci5odG1sIjp7ImV4cGVjdGVkIjoiUEFTUyIsImFjdHVhbCI6IkNSQVNIIiwiaGFzX3N0ZGVyciI6
dHJ1ZX19JykgIT0gLTEpCiAKICAgICBkZWYgdGVzdF9ub19pbWFnZV9mYWlsdXJlX3dpdGhfaW1h
Z2VfZGlmZihzZWxmKToKICAgICAgICAgaG9zdCA9IE1vY2tIb3N0KCkKLSAgICAgICAgcmVzLCBi
dWlsZGJvdF9vdXRwdXQsIHJlZ3VsYXJfb3V0cHV0LCB1c2VyID0gbG9nZ2luZ19ydW4oWwotICAg
ICAgICAgICAgICAgICdmYWlsdXJlcy91bmV4cGVjdGVkL2NoZWNrc3VtLXdpdGgtbWF0Y2hpbmct
aW1hZ2UuaHRtbCcsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9
VHJ1ZSwKLSAgICAgICAgICAgIHJlY29yZF9yZXN1bHRzPVRydWUsCi0gICAgICAgICAgICBob3N0
PWhvc3QpCisgICAgICAgIHJlcywgXywgXyA9IGxvZ2dpbmdfcnVuKFsnZmFpbHVyZXMvdW5leHBl
Y3RlZC9jaGVja3N1bS13aXRoLW1hdGNoaW5nLWltYWdlLmh0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9
VHJ1ZSwgaG9zdD1ob3N0KQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaG9zdC5maWxlc3lzdGVt
LnJlYWRfdGV4dF9maWxlKCcvdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZnVsbF9yZXN1bHRzLmpz
b24nKS5maW5kKCcibnVtX3JlZ3Jlc3Npb25zIjowJykgIT0gLTEpCiAKICAgICBkZWYgdGVzdF9j
cmFzaF9sb2coc2VsZik6CkBAIC02NjYsMTIgKzYzNCw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlLCBTdHJlYW1UZXN0aW5nTWl4aW4pOgogICAgICAgICBtb2NrX2NyYXNoX3Jl
cG9ydCA9IG1ha2VfbW9ja19jcmFzaF9yZXBvcnRfZGFyd2luKCdEdW1wUmVuZGVyVHJlZScsIDEy
MzQ1KQogICAgICAgICBob3N0ID0gTW9ja0hvc3QoKQogICAgICAgICBob3N0LmZpbGVzeXN0ZW0u
d3JpdGVfdGV4dF9maWxlKCcvVXNlcnMvbW9jay9MaWJyYXJ5L0xvZ3MvRGlhZ25vc3RpY1JlcG9y
dHMvRHVtcFJlbmRlclRyZWVfMjAxMS0wNi0xMy0xNTA3MTlfcXVhZHplbi5jcmFzaCcsIG1vY2tf
Y3Jhc2hfcmVwb3J0KQotICAgICAgICByZXMsIGJ1aWxkYm90X291dHB1dCwgcmVndWxhcl9vdXRw
dXQsIHVzZXIgPSBsb2dnaW5nX3J1bihbCi0gICAgICAgICAgICAgICAgJ2ZhaWx1cmVzL3VuZXhw
ZWN0ZWQvY3Jhc2gtd2l0aC1zdGRlcnIuaHRtbCcsCi0gICAgICAgICAgICBdLAotICAgICAgICAg
ICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwKLSAgICAgICAgICAgIHJlY29yZF9yZXN1bHRzPVRydWUs
Ci0gICAgICAgICAgICBob3N0PWhvc3QpCisgICAgICAgIHJlcywgXywgXyA9IGxvZ2dpbmdfcnVu
KFsnZmFpbHVyZXMvdW5leHBlY3RlZC9jcmFzaC13aXRoLXN0ZGVyci5odG1sJ10sIHRlc3RzX2lu
Y2x1ZGVkPVRydWUsIGhvc3Q9aG9zdCkKICAgICAgICAgZXhwZWN0ZWRfY3Jhc2hfbG9nID0gbW9j
a19jcmFzaF9yZXBvcnQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob3N0LmZpbGVzeXN0ZW0u
cmVhZF90ZXh0X2ZpbGUoJy90bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mYWlsdXJlcy91bmV4cGVj
dGVkL2NyYXNoLXdpdGgtc3RkZXJyLWNyYXNoLWxvZy50eHQnKSwgZXhwZWN0ZWRfY3Jhc2hfbG9n
KQogCkBAIC02ODMsMjMgKzY0NiwxNyBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSwgU3RyZWFtVGVzdGluZ01peGluKToKICAgICAgICAgbW9ja19jcmFzaF9yZXBvcnQgPSBtYWtl
X21vY2tfY3Jhc2hfcmVwb3J0X2RhcndpbignV2ViUHJvY2VzcycsIDEyMzQ1KQogICAgICAgICBo
b3N0ID0gTW9ja0hvc3QoKQogICAgICAgICBob3N0LmZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxl
KCcvVXNlcnMvbW9jay9MaWJyYXJ5L0xvZ3MvRGlhZ25vc3RpY1JlcG9ydHMvV2ViUHJvY2Vzc18y
MDExLTA2LTEzLTE1MDcxOV9xdWFkemVuLmNyYXNoJywgbW9ja19jcmFzaF9yZXBvcnQpCi0gICAg
ICAgIHJlcywgYnVpbGRib3Rfb3V0cHV0LCByZWd1bGFyX291dHB1dCwgdXNlciA9IGxvZ2dpbmdf
cnVuKFsKLSAgICAgICAgICAgICAgICAnZmFpbHVyZXMvdW5leHBlY3RlZC93ZWItcHJvY2Vzcy1j
cmFzaC13aXRoLXN0ZGVyci5odG1sJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB0ZXN0
c19pbmNsdWRlZD1UcnVlLAotICAgICAgICAgICAgcmVjb3JkX3Jlc3VsdHM9VHJ1ZSwKLSAgICAg
ICAgICAgIGhvc3Q9aG9zdCkKKyAgICAgICAgcmVzLCBfLCBfID0gbG9nZ2luZ19ydW4oWydmYWls
dXJlcy91bmV4cGVjdGVkL3dlYi1wcm9jZXNzLWNyYXNoLXdpdGgtc3RkZXJyLmh0bWwnXSwgdGVz
dHNfaW5jbHVkZWQ9VHJ1ZSwgaG9zdD1ob3N0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhv
c3QuZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZSgnL3RtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL2Zh
aWx1cmVzL3VuZXhwZWN0ZWQvd2ViLXByb2Nlc3MtY3Jhc2gtd2l0aC1zdGRlcnItY3Jhc2gtbG9n
LnR4dCcpLCBtb2NrX2NyYXNoX3JlcG9ydCkKIAogICAgIGRlZiB0ZXN0X2V4aXRfYWZ0ZXJfbl9m
YWlsdXJlc191cGxvYWQoc2VsZik6CiAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCi0gICAgICAg
IHJlcywgYnVpbGRib3Rfb3V0cHV0LCByZWd1bGFyX291dHB1dCwgdXNlciA9IGxvZ2dpbmdfcnVu
KFsKKyAgICAgICAgcmVzLCByZWd1bGFyX291dHB1dCwgXyA9IGxvZ2dpbmdfcnVuKFsKICAgICAg
ICAgICAgICAgICAnZmFpbHVyZXMvdW5leHBlY3RlZC90ZXh0LWltYWdlLWNoZWNrc3VtLmh0bWwn
LAogICAgICAgICAgICAgICAgICdwYXNzZXMvdGV4dC5odG1sJywKICAgICAgICAgICAgICAgICAn
LS1leGl0LWFmdGVyLW4tZmFpbHVyZXMnLCAnMScsCiAgICAgICAgICAgICBdLAogICAgICAgICAg
ICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwKLSAgICAgICAgICAgIHJlY29yZF9yZXN1bHRzPVRydWUs
CiAgICAgICAgICAgICBob3N0PWhvc3QpCiAKICAgICAgICAgIyBCeSByZXR1cm5pbmcgRmFsc2Us
IHdlIGtub3cgdGhhdCB0aGUgaW5jcmVtZW50YWwgcmVzdWx0cyB3ZXJlIGdlbmVyYXRlZCBhbmQg
dGhlbiBkZWxldGVkLgpAQCAtNzIwLDU0ICs2NzcsMjQgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRl
c3QuVGVzdENhc2UsIFN0cmVhbVRlc3RpbmdNaXhpbik6CiAKICAgICBkZWYgdGVzdF9leGl0X2Fm
dGVyX25fZmFpbHVyZXMoc2VsZik6CiAgICAgICAgICMgVW5leHBlY3RlZCBmYWlsdXJlcyBzaG91
bGQgcmVzdWx0IGluIHRlc3RzIHN0b3BwaW5nLgotICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVz
dHNfcnVuKFsKLSAgICAgICAgICAgICAgICAnZmFpbHVyZXMvdW5leHBlY3RlZC90ZXh0LWltYWdl
LWNoZWNrc3VtLmh0bWwnLAotICAgICAgICAgICAgICAgICdwYXNzZXMvdGV4dC5odG1sJywKLSAg
ICAgICAgICAgICAgICAnLS1leGl0LWFmdGVyLW4tZmFpbHVyZXMnLCAnMScsCi0gICAgICAgICAg
ICBdLAotICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwKLSAgICAgICAgICAgIGZsYXR0
ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnZmFp
bHVyZXMvdW5leHBlY3RlZC90ZXh0LWltYWdlLWNoZWNrc3VtLmh0bWwnLCAncGFzc2VzL3RleHQu
aHRtbCcsICctLWV4aXQtYWZ0ZXItbi1mYWlsdXJlcycsICcxJ10pCiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoWydmYWlsdXJlcy91bmV4cGVjdGVkL3RleHQtaW1hZ2UtY2hlY2tzdW0uaHRtbCdd
LCB0ZXN0c19ydW4pCiAKICAgICAgICAgIyBCdXQgd2UnbGwga2VlcCBnb2luZyBmb3IgZXhwZWN0
ZWQgb25lcy4KLSAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbCi0gICAgICAgICAg
ICAgICAgJ2ZhaWx1cmVzL2V4cGVjdGVkL3RleHQuaHRtbCcsCi0gICAgICAgICAgICAgICAgJ3Bh
c3Nlcy90ZXh0Lmh0bWwnLAotICAgICAgICAgICAgICAgICctLWV4aXQtYWZ0ZXItbi1mYWlsdXJl
cycsICcxJywKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1UcnVl
LAotICAgICAgICAgICAgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAgICAgIHRlc3RzX3J1biA9
IGdldF90ZXN0c19ydW4oWydmYWlsdXJlcy9leHBlY3RlZC90ZXh0Lmh0bWwnLCAncGFzc2VzL3Rl
eHQuaHRtbCcsICctLWV4aXQtYWZ0ZXItbi1mYWlsdXJlcycsICcxJ10pCiAgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoWydmYWlsdXJlcy9leHBlY3RlZC90ZXh0Lmh0bWwnLCAncGFzc2VzL3RleHQu
aHRtbCddLCB0ZXN0c19ydW4pCiAKICAgICBkZWYgdGVzdF9leGl0X2FmdGVyX25fY3Jhc2hlcyhz
ZWxmKToKICAgICAgICAgIyBVbmV4cGVjdGVkIGNyYXNoZXMgc2hvdWxkIHJlc3VsdCBpbiB0ZXN0
cyBzdG9wcGluZy4KLSAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbCi0gICAgICAg
ICAgICAgICAgJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvY3Jhc2guaHRtbCcsCi0gICAgICAgICAgICAg
ICAgJ3Bhc3Nlcy90ZXh0Lmh0bWwnLAotICAgICAgICAgICAgICAgICctLWV4aXQtYWZ0ZXItbi1j
cmFzaGVzLW9yLXRpbWVvdXRzJywgJzEnLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIHRl
c3RzX2luY2x1ZGVkPVRydWUsCi0gICAgICAgICAgICBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAg
ICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvY3Jh
c2guaHRtbCcsICdwYXNzZXMvdGV4dC5odG1sJywgJy0tZXhpdC1hZnRlci1uLWNyYXNoZXMtb3It
dGltZW91dHMnLCAnMSddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnZmFpbHVyZXMvdW5l
eHBlY3RlZC9jcmFzaC5odG1sJ10sIHRlc3RzX3J1bikKIAogICAgICAgICAjIFNhbWUgd2l0aCB0
aW1lb3V0cy4KLSAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbCi0gICAgICAgICAg
ICAgICAgJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvdGltZW91dC5odG1sJywKLSAgICAgICAgICAgICAg
ICAncGFzc2VzL3RleHQuaHRtbCcsCi0gICAgICAgICAgICAgICAgJy0tZXhpdC1hZnRlci1uLWNy
YXNoZXMtb3ItdGltZW91dHMnLCAnMScsCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgdGVz
dHNfaW5jbHVkZWQ9VHJ1ZSwKLSAgICAgICAgICAgIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQorICAg
ICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnZmFpbHVyZXMvdW5leHBlY3RlZC90aW1l
b3V0Lmh0bWwnLCAncGFzc2VzL3RleHQuaHRtbCcsICctLWV4aXQtYWZ0ZXItbi1jcmFzaGVzLW9y
LXRpbWVvdXRzJywgJzEnXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ2ZhaWx1cmVzL3Vu
ZXhwZWN0ZWQvdGltZW91dC5odG1sJ10sIHRlc3RzX3J1bikKIAogICAgICAgICAjIEJ1dCB3ZSds
bCBrZWVwIGdvaW5nIGZvciBleHBlY3RlZCBvbmVzLgotICAgICAgICB0ZXN0c19ydW4gPSBnZXRf
dGVzdHNfcnVuKFsKLSAgICAgICAgICAgICAgICAnZmFpbHVyZXMvZXhwZWN0ZWQvY3Jhc2guaHRt
bCcsCi0gICAgICAgICAgICAgICAgJ3Bhc3Nlcy90ZXh0Lmh0bWwnLAotICAgICAgICAgICAgICAg
ICctLWV4aXQtYWZ0ZXItbi1jcmFzaGVzLW9yLXRpbWVvdXRzJywgJzEnLAotICAgICAgICAgICAg
XSwKLSAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVkPVRydWUsCi0gICAgICAgICAgICBmbGF0dGVu
X2JhdGNoZXM9VHJ1ZSkKKyAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJ2ZhaWx1
cmVzL2V4cGVjdGVkL2NyYXNoLmh0bWwnLCAncGFzc2VzL3RleHQuaHRtbCcsICctLWV4aXQtYWZ0
ZXItbi1jcmFzaGVzLW9yLXRpbWVvdXRzJywgJzEnXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChbJ2ZhaWx1cmVzL2V4cGVjdGVkL2NyYXNoLmh0bWwnLCAncGFzc2VzL3RleHQuaHRtbCddLCB0
ZXN0c19ydW4pCiAKICAgICBkZWYgdGVzdF9yZXN1bHRzX2RpcmVjdG9yeV9hYnNvbHV0ZShzZWxm
KToKQEAgLTc3Niw4ICs3MDMsNyBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwg
U3RyZWFtVGVzdGluZ01peGluKToKIAogICAgICAgICBob3N0ID0gTW9ja0hvc3QoKQogICAgICAg
ICB3aXRoIGhvc3QuZmlsZXN5c3RlbS5ta2R0ZW1wKCkgYXMgdG1wZGlyOgotICAgICAgICAgICAg
cmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKFsnLS1yZXN1bHRzLWRpcmVjdG9yeT0n
ICsgc3RyKHRtcGRpcildLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRlc3RzX2luY2x1ZGVkPVRydWUsIGhvc3Q9aG9zdCkKKyAgICAgICAgICAgIF8sIF8s
IHVzZXIgPSBsb2dnaW5nX3J1bihbJy0tcmVzdWx0cy1kaXJlY3Rvcnk9JyArIHN0cih0bXBkaXIp
XSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgaG9zdD1ob3N0KQogICAgICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCh1c2VyLm9wZW5lZF91cmxzLCBbcGF0aC5hYnNwYXRoX3RvX3VyaShob3N0LnBsYXRm
b3JtLCBob3N0LmZpbGVzeXN0ZW0uam9pbih0bXBkaXIsICdyZXN1bHRzLmh0bWwnKSldKQogCiAg
ICAgZGVmIHRlc3RfcmVzdWx0c19kaXJlY3RvcnlfZGVmYXVsdChzZWxmKToKQEAgLTc4NSw3ICs3
MTEsNyBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwgU3RyZWFtVGVzdGluZ01p
eGluKToKICAgICAgICAgIyBsb29rIGZvciB3aGF0IHRoZSBvdXRwdXQgcmVzdWx0cyB1cmwgd2Fz
LgogCiAgICAgICAgICMgVGhpcyBpcyB0aGUgZGVmYXVsdCBsb2NhdGlvbi4KLSAgICAgICAgcmVz
LCBvdXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKHRlc3RzX2luY2x1ZGVkPVRydWUpCisgICAg
ICAgIF8sIF8sIHVzZXIgPSBsb2dnaW5nX3J1bih0ZXN0c19pbmNsdWRlZD1UcnVlKQogICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHVzZXIub3BlbmVkX3VybHMsIFtwYXRoLmFic3BhdGhfdG9fdXJp
KE1vY2tIb3N0KCkucGxhdGZvcm0sICcvdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvcmVzdWx0cy5o
dG1sJyldKQogCiAgICAgZGVmIHRlc3RfcmVzdWx0c19kaXJlY3RvcnlfcmVsYXRpdmUoc2VsZik6
CkBAIC03OTQsMjkgKzcyMCwyNCBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwg
U3RyZWFtVGVzdGluZ01peGluKToKICAgICAgICAgaG9zdCA9IE1vY2tIb3N0KCkKICAgICAgICAg
aG9zdC5maWxlc3lzdGVtLm1heWJlX21ha2VfZGlyZWN0b3J5KCcvdG1wL2N3ZCcpCiAgICAgICAg
IGhvc3QuZmlsZXN5c3RlbS5jaGRpcignL3RtcC9jd2QnKQotICAgICAgICByZXMsIG91dCwgZXJy
LCB1c2VyID0gbG9nZ2luZ19ydW4oWyctLXJlc3VsdHMtZGlyZWN0b3J5PWZvbyddLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwg
aG9zdD1ob3N0KQorICAgICAgICBfLCBfLCB1c2VyID0gbG9nZ2luZ19ydW4oWyctLXJlc3VsdHMt
ZGlyZWN0b3J5PWZvbyddLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBob3N0PWhvc3QpCiAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwodXNlci5vcGVuZWRfdXJscywgW3BhdGguYWJzcGF0aF90b191cmko
aG9zdC5wbGF0Zm9ybSwgJy90bXAvY3dkL2Zvby9yZXN1bHRzLmh0bWwnKV0pCiAKICAgICBkZWYg
dGVzdF9yZXRyeWluZ19hbmRfZmxha3lfdGVzdHMoc2VsZik6CiAgICAgICAgIGhvc3QgPSBNb2Nr
SG9zdCgpCi0gICAgICAgIHJlcywgb3V0LCBlcnIsIF8gPSBsb2dnaW5nX3J1bihbJy0tZGVidWct
cnd0LWxvZ2dpbmcnLCAnZmFpbHVyZXMvZmxha3knXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgaG9z
dD1ob3N0KQorICAgICAgICByZXMsIGVyciwgXyA9IGxvZ2dpbmdfcnVuKFsnLS1kZWJ1Zy1yd3Qt
bG9nZ2luZycsICdmYWlsdXJlcy9mbGFreSddLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBob3N0PWhv
c3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAwKQogICAgICAgICBzZWxmLmFzc2Vy
dFRydWUoJ1JldHJ5aW5nJyBpbiBlcnIuZ2V0dmFsdWUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKCdVbmV4cGVjdGVkIGZsYWtpbmVzcycgaW4gb3V0LmdldHZhbHVlKCkpCiAgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZShob3N0LmZpbGVzeXN0ZW0uZXhpc3RzKCcvdG1wL2xheW91dC10ZXN0LXJl
c3VsdHMvZmFpbHVyZXMvZmxha3kvdGV4dC1hY3R1YWwudHh0JykpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZShob3N0LmZpbGVzeXN0ZW0uZXhpc3RzKCcvdG1wL2xheW91dC10ZXN0LXJlc3VsdHMv
cmV0cmllcy90ZXN0c19ydW4wLnR4dCcpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhvc3Qu
ZmlsZXN5c3RlbS5leGlzdHMoJy90bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9yZXRyaWVzL2ZhaWx1
cmVzL2ZsYWt5L3RleHQtYWN0dWFsLnR4dCcpKQogCiAgICAgICAgICMgTm93IHdlIHRlc3QgdGhh
dCAtLWNsb2JiZXItb2xkLXJlc3VsdHMgZG9lcyByZW1vdmUgdGhlIG9sZCBlbnRyaWVzIGFuZCB0
aGUgb2xkIHJldHJpZXMsCiAgICAgICAgICMgYW5kIHRoYXQgd2UgZG9uJ3QgcmV0cnkgYWdhaW4u
CiAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCi0gICAgICAgIHJlcywgb3V0LCBlcnIsIF8gPSBs
b2dnaW5nX3J1bihbJy0tbm8tcmV0cnktZmFpbHVyZXMnLCAnLS1jbG9iYmVyLW9sZC1yZXN1bHRz
JywgJ2ZhaWx1cmVzL2ZsYWt5J10sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGhvc3Q9aG9zdCkKKyAg
ICAgICAgcmVzLCBlcnIsIF8gPSBsb2dnaW5nX3J1bihbJy0tbm8tcmV0cnktZmFpbHVyZXMnLCAn
LS1jbG9iYmVyLW9sZC1yZXN1bHRzJywgJ2ZhaWx1cmVzL2ZsYWt5J10sIHRlc3RzX2luY2x1ZGVk
PVRydWUsIGhvc3Q9aG9zdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDEpCiAgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnQ2xvYmJlcmluZyBvbGQgcmVzdWx0cycgaW4gZXJyLmdldHZh
bHVlKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnZmxha3kvdGV4dC5odG1sJyBpbiBlcnIu
Z2V0dmFsdWUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdVbmV4cGVjdGVkIHRleHQtb25s
eSBmYWlsdXJlcycgaW4gb3V0LmdldHZhbHVlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
J1VuZXhwZWN0ZWQgZmxha2luZXNzJyBpbiBvdXQuZ2V0dmFsdWUoKSkKICAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKGhvc3QuZmlsZXN5c3RlbS5leGlzdHMoJy90bXAvbGF5b3V0LXRlc3QtcmVzdWx0
cy9mYWlsdXJlcy9mbGFreS90ZXh0LWFjdHVhbC50eHQnKSkKICAgICAgICAgc2VsZi5hc3NlcnRG
YWxzZShob3N0LmZpbGVzeXN0ZW0uZXhpc3RzKCdyZXRyaWVzJykpCiAKQEAgLTgyNCwxMCArNzQ1
LDEwIEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBTdHJlYW1UZXN0aW5nTWl4
aW4pOgogICAgICAgICAjIFRoZXNlIG5leHQgdGVzdHMgdGVzdCB0aGF0IHdlIHJ1biB0aGUgdGVz
dHMgaW4gYXNjZW5kaW5nIGFscGhhYmV0aWNhbAogICAgICAgICAjIG9yZGVyIHBlciBkaXJlY3Rv
cnkuIEhUVFAgdGVzdHMgYXJlIHNoYXJkZWQgc2VwYXJhdGVseSBmcm9tIG90aGVyIHRlc3RzLAog
ICAgICAgICAjIHNvIHdlIGhhdmUgdG8gdGVzdCBib3RoLgotICAgICAgICB0ZXN0c19ydW4gPSBn
ZXRfdGVzdHNfcnVuKFsnLWknLCAncGFzc2VzL3Bhc3NlcycsICdwYXNzZXMnXSwgdGVzdHNfaW5j
bHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAgICAgIHRlc3RzX3J1biA9IGdl
dF90ZXN0c19ydW4oWyctaScsICdwYXNzZXMvcGFzc2VzJywgJ3Bhc3NlcyddKQogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHRlc3RzX3J1biwgc29ydGVkKHRlc3RzX3J1bikpCiAKLSAgICAgICAg
dGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJ2h0dHAvdGVzdHMvcGFzc2VzJ10sIHRlc3RzX2lu
Y2x1ZGVkPVRydWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAgICB0ZXN0c19ydW4gPSBn
ZXRfdGVzdHNfcnVuKFsnaHR0cC90ZXN0cy9wYXNzZXMnXSkKICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCh0ZXN0c19ydW4sIHNvcnRlZCh0ZXN0c19ydW4pKQogCiAgICAgZGVmIHRlc3RfdG9sZXJh
bmNlKHNlbGYpOgpAQCAtODYyLDM0ICs3ODMsMzQgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3Qu
VGVzdENhc2UsIFN0cmVhbVRlc3RpbmdNaXhpbik6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ3ZpcnR1YWwvcGFzc2VzL3RleHQuaHRtbCcsICd2aXJ0dWFsL3Bhc3Nlcy9h
cmdzLmh0bWwnXSkpCiAKICAgICBkZWYgdGVzdF9yZWZ0ZXN0X3J1bihzZWxmKToKLSAgICAgICAg
dGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJ3Bhc3Nlcy9yZWZ0ZXN0Lmh0bWwnXSwgdGVzdHNf
aW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAgICAgIHRlc3RzX3J1biA9
IGdldF90ZXN0c19ydW4oWydwYXNzZXMvcmVmdGVzdC5odG1sJ10pCiAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoWydwYXNzZXMvcmVmdGVzdC5odG1sJ10sIHRlc3RzX3J1bikKIAogICAgIGRlZiB0
ZXN0X3JlZnRlc3RfcnVuX3JlZnRlc3RzX2lmX3BpeGVsX3Rlc3RzX2FyZV9kaXNhYmxlZChzZWxm
KToKLSAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tbm8tcGl4ZWwtdGVzdHMn
LCAncGFzc2VzL3JlZnRlc3QuaHRtbCddLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2Jh
dGNoZXM9VHJ1ZSkKKyAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tbm8tcGl4
ZWwtdGVzdHMnLCAncGFzc2VzL3JlZnRlc3QuaHRtbCddKQogICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKFsncGFzc2VzL3JlZnRlc3QuaHRtbCddLCB0ZXN0c19ydW4pCiAKICAgICBkZWYgdGVzdF9y
ZWZ0ZXN0X3NraXBfcmVmdGVzdHNfaWZfbm9fcmVmX3Rlc3RzKHNlbGYpOgotICAgICAgICB0ZXN0
c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLS1uby1yZWYtdGVzdHMnLCAncGFzc2VzL3JlZnRlc3Qu
aHRtbCddLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAg
ICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJy0tbm8tcmVmLXRlc3RzJywgJ3Bhc3Nlcy9y
ZWZ0ZXN0Lmh0bWwnXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgdGVzdHNfcnVuKQot
ICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsnLS1uby1yZWYtdGVzdHMnLCAnLS1u
by1waXhlbC10ZXN0cycsICdwYXNzZXMvcmVmdGVzdC5odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRy
dWUsIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQorICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNf
cnVuKFsnLS1uby1yZWYtdGVzdHMnLCAnLS1uby1waXhlbC10ZXN0cycsICdwYXNzZXMvcmVmdGVz
dC5odG1sJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRlc3RzX3J1bikKIAogICAg
IGRlZiB0ZXN0X3JlZnRlc3RfZXhwZWN0ZWRfaHRtbF9zaG91bGRfYmVfaWdub3JlZChzZWxmKToK
LSAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJ3Bhc3Nlcy9yZWZ0ZXN0LWV4cGVj
dGVkLmh0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisg
ICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0c19ydW4oWydwYXNzZXMvcmVmdGVzdC1leHBlY3Rl
ZC5odG1sJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRlc3RzX3J1bikKIAogICAg
IGRlZiB0ZXN0X3JlZnRlc3RfZHJpdmVyX3Nob3VsZF9ydW5fZXhwZWN0ZWRfaHRtbChzZWxmKToK
LSAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RzX3J1bihbJ3Bhc3Nlcy9yZWZ0ZXN0Lmh0bWwn
XSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUsIGluY2x1ZGVfcmVm
ZXJlbmNlX2h0bWw9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ3Bhc3Nlcy9yZWZ0
ZXN0Lmh0bWwnLCAncGFzc2VzL3JlZnRlc3QtZXhwZWN0ZWQuaHRtbCddLCB0ZXN0c19ydW4pCisg
ICAgICAgIHRlc3RzX3J1biA9IGdldF90ZXN0X3Jlc3VsdHMoWydwYXNzZXMvcmVmdGVzdC5odG1s
J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdHNfcnVuWzBdLnJlZmVyZW5jZXMsIFsn
cGFzc2VzL3JlZnRlc3QtZXhwZWN0ZWQuaHRtbCddKQogCiAgICAgZGVmIHRlc3RfcmVmdGVzdF9k
cml2ZXJfc2hvdWxkX3J1bl9leHBlY3RlZF9taXNtYXRjaF9odG1sKHNlbGYpOgotICAgICAgICB0
ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVuKFsncGFzc2VzL21pc21hdGNoLmh0bWwnXSwgdGVzdHNf
aW5jbHVkZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUsIGluY2x1ZGVfcmVmZXJlbmNlX2h0
bWw9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ3Bhc3Nlcy9taXNtYXRjaC5odG1s
JywgJ3Bhc3Nlcy9taXNtYXRjaC1leHBlY3RlZC1taXNtYXRjaC5odG1sJ10sIHRlc3RzX3J1bikK
KyAgICAgICAgdGVzdHNfcnVuID0gZ2V0X3Rlc3RfcmVzdWx0cyhbJ3Bhc3Nlcy9taXNtYXRjaC5o
dG1sJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdHNfcnVuWzBdLnJlZmVyZW5jZXMs
IFsncGFzc2VzL21pc21hdGNoLWV4cGVjdGVkLW1pc21hdGNoLmh0bWwnXSkKIAogICAgIGRlZiB0
ZXN0X3JlZnRlc3Rfc2hvdWxkX25vdF91c2VfbmFtaW5nX2NvbnZlbnRpb25faWZfbm90X2xpc3Rl
ZF9pbl9yZWZ0ZXN0bGlzdChzZWxmKToKICAgICAgICAgaG9zdCA9IE1vY2tIb3N0KCkKLSAgICAg
ICAgcmVzLCBvdXQsIGVyciwgXyA9IGxvZ2dpbmdfcnVuKFsnLS1uby1zaG93LXJlc3VsdHMnLCAn
cmVmdGVzdHMvZm9vLyddLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBob3N0PWhvc3QsIHJlY29yZF9y
ZXN1bHRzPVRydWUpCisgICAgICAgIHJlcywgZXJyLCBfID0gbG9nZ2luZ19ydW4oWyctLW5vLXNo
b3ctcmVzdWx0cycsICdyZWZ0ZXN0cy9mb28vJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGhvc3Q9
aG9zdCkKICAgICAgICAganNvbl9zdHJpbmcgPSBob3N0LmZpbGVzeXN0ZW0ucmVhZF90ZXh0X2Zp
bGUoJy90bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mdWxsX3Jlc3VsdHMuanNvbicpCiAgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShqc29uX3N0cmluZy5maW5kKCcidW5saXN0ZWR0ZXN0Lmh0bWwiOnsi
ZXhwZWN0ZWQiOiJQQVNTIiwiaXNfbWlzc2luZ190ZXh0Ijp0cnVlLCJhY3R1YWwiOiJNSVNTSU5H
IiwiaXNfbWlzc2luZ19pbWFnZSI6dHJ1ZX0nKSAhPSAtMSkKICAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKGpzb25fc3RyaW5nLmZpbmQoJyJudW1fcmVncmVzc2lvbnMiOjQnKSAhPSAtMSkKQEAgLTkx
OCwyMCArODM5LDIwIEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBTdHJlYW1U
ZXN0aW5nTWl4aW4pOgogICAgICAgICByZXR1cm4gW3Rlc3QgZm9yIHRlc3QgaW4gdGVzdHMgaWYg
dHlwZSBpbiB0ZXN0XQogCiAgICAgZGVmIHRlc3Rfbm9faHR0cF90ZXN0cyhzZWxmKToKLSAgICAg
ICAgYmF0Y2hfdGVzdHNfZHJ5cnVuID0gZ2V0X3Rlc3RzX3J1bihbJ0xheW91dFRlc3RzL2h0dHAn
LCAnd2Vic29ja2V0LyddLCBmbGF0dGVuX2JhdGNoZXM9VHJ1ZSkKKyAgICAgICAgYmF0Y2hfdGVz
dHNfZHJ5cnVuID0gZ2V0X3Rlc3RzX3J1bihbJ0xheW91dFRlc3RzL2h0dHAnLCAnd2Vic29ja2V0
LyddKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoTWFpblRlc3QuaGFzX3Rlc3Rfb2ZfdHlwZShi
YXRjaF90ZXN0c19kcnlydW4sICdodHRwJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShNYWlu
VGVzdC5oYXNfdGVzdF9vZl90eXBlKGJhdGNoX3Rlc3RzX2RyeXJ1biwgJ3dlYnNvY2tldCcpKQog
Ci0gICAgICAgIGJhdGNoX3Rlc3RzX3J1bl9ub19odHRwID0gZ2V0X3Rlc3RzX3J1bihbJy0tbm8t
aHR0cCcsICdMYXlvdXRUZXN0cy9odHRwJywgJ3dlYnNvY2tldC8nXSwgZmxhdHRlbl9iYXRjaGVz
PVRydWUpCisgICAgICAgIGJhdGNoX3Rlc3RzX3J1bl9ub19odHRwID0gZ2V0X3Rlc3RzX3J1bihb
Jy0tbm8taHR0cCcsICdMYXlvdXRUZXN0cy9odHRwJywgJ3dlYnNvY2tldC8nXSkKICAgICAgICAg
c2VsZi5hc3NlcnRGYWxzZShNYWluVGVzdC5oYXNfdGVzdF9vZl90eXBlKGJhdGNoX3Rlc3RzX3J1
bl9ub19odHRwLCAnaHR0cCcpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKE1haW5UZXN0Lmhh
c190ZXN0X29mX3R5cGUoYmF0Y2hfdGVzdHNfcnVuX25vX2h0dHAsICd3ZWJzb2NrZXQnKSkKIAot
ICAgICAgICBiYXRjaF90ZXN0c19ydW5faHR0cCA9IGdldF90ZXN0c19ydW4oWyctLWh0dHAnLCAn
TGF5b3V0VGVzdHMvaHR0cCcsICd3ZWJzb2NrZXQvJ10sIGZsYXR0ZW5fYmF0Y2hlcz1UcnVlKQor
ICAgICAgICBiYXRjaF90ZXN0c19ydW5faHR0cCA9IGdldF90ZXN0c19ydW4oWyctLWh0dHAnLCAn
TGF5b3V0VGVzdHMvaHR0cCcsICd3ZWJzb2NrZXQvJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShNYWluVGVzdC5oYXNfdGVzdF9vZl90eXBlKGJhdGNoX3Rlc3RzX3J1bl9odHRwLCAnaHR0cCcp
KQogICAgICAgICBzZWxmLmFzc2VydFRydWUoTWFpblRlc3QuaGFzX3Rlc3Rfb2ZfdHlwZShiYXRj
aF90ZXN0c19ydW5faHR0cCwgJ3dlYnNvY2tldCcpKQogCiAgICAgZGVmIHRlc3RfcGxhdGZvcm1f
dGVzdHNfYXJlX2ZvdW5kKHNlbGYpOgotICAgICAgICB0ZXN0c19ydW4gPSBnZXRfdGVzdHNfcnVu
KFsnLS1wbGF0Zm9ybScsICd0ZXN0LW1hYy1sZW9wYXJkJywgJ2h0dHAnXSwgdGVzdHNfaW5jbHVk
ZWQ9VHJ1ZSwgZmxhdHRlbl9iYXRjaGVzPVRydWUpCisgICAgICAgIHRlc3RzX3J1biA9IGdldF90
ZXN0c19ydW4oWyctLXBsYXRmb3JtJywgJ3Rlc3QtbWFjLWxlb3BhcmQnLCAnaHR0cCddKQogICAg
ICAgICBzZWxmLmFzc2VydFRydWUoJ3BsYXRmb3JtL3Rlc3QtbWFjLWxlb3BhcmQvaHR0cC90ZXN0
Lmh0bWwnIGluIHRlc3RzX3J1bikKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgncGxhdGZvcm0v
dGVzdC13aW4td2luNy9odHRwL3Rlc3QuaHRtbCcgaW4gdGVzdHNfcnVuKQogCkBAIC05MzksOCAr
ODYwLDggQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UsIFN0cmVhbVRlc3RpbmdN
aXhpbik6CiAgICAgICAgICMgVGVzdCB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCBnZW5lcmF0ZSAt
d2RpZmYuaHRtbCBvciAtcHJldHR5Lmh0bWwgaWYgd2RpZmYgYW5kIFByZXR0eVBhdGNoCiAgICAg
ICAgICMgYXJlbid0IGF2YWlsYWJsZS4KICAgICAgICAgaG9zdCA9IE1vY2tIb3N0KCkKLSAgICAg
ICAgcmVzLCBvdXQsIGVyciwgXyA9IGxvZ2dpbmdfcnVuKFsnLS1waXhlbC10ZXN0cycsICdmYWls
dXJlcy91bmV4cGVjdGVkL3RleHQtaW1hZ2UtY2hlY2tzdW0uaHRtbCddLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgcmVjb3JkX3Jl
c3VsdHM9VHJ1ZSwgaG9zdD1ob3N0KQorICAgICAgICByZXMsIGVyciwgXyA9IGxvZ2dpbmdfcnVu
KFsnLS1waXhlbC10ZXN0cycsICdmYWlsdXJlcy91bmV4cGVjdGVkL3RleHQtaW1hZ2UtY2hlY2tz
dW0uaHRtbCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzX2luY2x1
ZGVkPVRydWUsIGhvc3Q9aG9zdCkKICAgICAgICAgd3JpdHRlbl9maWxlcyA9IGhvc3QuZmlsZXN5
c3RlbS53cml0dGVuX2ZpbGVzCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbnkocGF0aC5lbmRz
d2l0aCgnLWRpZmYudHh0JykgZm9yIHBhdGggaW4gd3JpdHRlbl9maWxlcy5rZXlzKCkpKQogICAg
ICAgICBzZWxmLmFzc2VydEZhbHNlKGFueShwYXRoLmVuZHN3aXRoKCctd2RpZmYuaHRtbCcpIGZv
ciBwYXRoIGluIHdyaXR0ZW5fZmlsZXMua2V5cygpKSkKQEAgLTk1MiwxOSArODczLDEzIEBAIGNs
YXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBTdHJlYW1UZXN0aW5nTWl4aW4pOgogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bGxfcmVzdWx0c1snaGFzX3ByZXR0eV9wYXRjaCddLCBG
YWxzZSkKIAogICAgIGRlZiB0ZXN0X3Vuc3VwcG9ydGVkX3BsYXRmb3JtKHNlbGYpOgotICAgICAg
ICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCi0gICAgICAgIHRyeToKLSAgICAg
ICAgICAgIG9jLmNhcHR1cmVfb3V0cHV0KCkKLSAgICAgICAgICAgIHJlcyA9IHJ1bl93ZWJraXRf
dGVzdHMubWFpbihbJy0tcGxhdGZvcm0nLCAnZm9vJ10pCi0gICAgICAgIGZpbmFsbHk6Ci0gICAg
ICAgICAgICBzdGRvdXQsIHN0ZGVyciwgbG9ncyA9IG9jLnJlc3RvcmVfb3V0cHV0KCkKKyAgICAg
ICAgc3Rkb3V0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBzdGRlcnIgPSBTdHJpbmdJ
Ty5TdHJpbmdJTygpCisgICAgICAgIHJlcyA9IHJ1bl93ZWJraXRfdGVzdHMubWFpbihbJy0tcGxh
dGZvcm0nLCAnZm9vJ10sIHN0ZG91dCwgc3RkZXJyKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwocmVzLCBydW5fd2Via2l0X3Rlc3RzLkVYQ0VQVElPTkFMX0VYSVRfU1RBVFVTKQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgn
dW5zdXBwb3J0ZWQgcGxhdGZvcm0nIGluIHN0ZGVycikKLQotICAgICAgICAjIFRoaXMgaXMgZW1w
dHkgYmVjYXVzZSB3ZSBkb24ndCBldmVuIGdldCBhIGNoYW5jZSB0byBjb25maWd1cmUgdGhlIGxv
Z2dlciBiZWZvcmUgZmFpbGluZy4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2dzLCAnJykK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwgJycpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZSgndW5zdXBwb3J0ZWQgcGxhdGZvcm0nIGluIHN0ZGVyci5nZXR2YWx1
ZSgpKQogCiAgICAgZGVmIHRlc3RfdmVyYm9zZV9pbl9jaGlsZF9wcm9jZXNzZXMoc2VsZik6CiAg
ICAgICAgICMgV2hlbiB3ZSBhY3R1YWxseSBydW4gbXVsdGlwbGUgcHJvY2Vzc2VzLCB3ZSBtYXkg
aGF2ZSB0byByZWNvbmZpZ3VyZSBsb2dnaW5nIGluIHRoZQpAQCAtOTc5LDExICs4OTQsMTAgQEAg
Y2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UsIFN0cmVhbVRlc3RpbmdNaXhpbik6CiAg
ICAgICAgIG9wdGlvbnMsIHBhcnNlZF9hcmdzID0gcGFyc2VfYXJncyhbJy0tdmVyYm9zZScsICct
LWZ1bGx5LXBhcmFsbGVsJywgJy0tY2hpbGQtcHJvY2Vzc2VzJywgJzInLCAncGFzc2VzL3RleHQu
aHRtbCcsICdwYXNzZXMvaW1hZ2UuaHRtbCddLCB0ZXN0c19pbmNsdWRlZD1UcnVlLCBwcmludF9u
b3RoaW5nPUZhbHNlKQogICAgICAgICBob3N0ID0gTW9ja0hvc3QoKQogICAgICAgICBwb3J0X29i
aiA9IGhvc3QucG9ydF9mYWN0b3J5LmdldChwb3J0X25hbWU9b3B0aW9ucy5wbGF0Zm9ybSwgb3B0
aW9ucz1vcHRpb25zKQotICAgICAgICBidWlsZGJvdF9vdXRwdXQgPSBTdHJpbmdJTy5TdHJpbmdJ
TygpCi0gICAgICAgIHJlZ3VsYXJfb3V0cHV0ID0gU3RyaW5nSU8uU3RyaW5nSU8oKQotICAgICAg
ICByZXMgPSBydW5fd2Via2l0X3Rlc3RzLnJ1bihwb3J0X29iaiwgb3B0aW9ucywgcGFyc2VkX2Fy
Z3MsIGJ1aWxkYm90X291dHB1dD1idWlsZGJvdF9vdXRwdXQsIHJlZ3VsYXJfb3V0cHV0PXJlZ3Vs
YXJfb3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3RleHQuaHRtbCBwYXNzZWQnIGlu
IHJlZ3VsYXJfb3V0cHV0LmdldHZhbHVlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnaW1h
Z2UuaHRtbCBwYXNzZWQnIGluIHJlZ3VsYXJfb3V0cHV0LmdldHZhbHVlKCkpCisgICAgICAgIGxv
Z2dpbmdfc3RyZWFtID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICBydW5fd2Via2l0X3Rl
c3RzLnJ1bihwb3J0X29iaiwgb3B0aW9ucywgcGFyc2VkX2FyZ3MsIGxvZ2dpbmdfc3RyZWFtPWxv
Z2dpbmdfc3RyZWFtKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3RleHQuaHRtbCBwYXNzZWQn
IGluIGxvZ2dpbmdfc3RyZWFtLmdldHZhbHVlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgn
aW1hZ2UuaHRtbCBwYXNzZWQnIGluIGxvZ2dpbmdfc3RyZWFtLmdldHZhbHVlKCkpCiAKIAogY2xh
c3MgRW5kVG9FbmRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTk5NCw3ICs5MDgsNyBAQCBj
bGFzcyBFbmRUb0VuZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfZW5k
X3RvX2VuZChzZWxmKToKICAgICAgICAgaG9zdCA9IE1vY2tIb3N0KCkKLSAgICAgICAgcmVzLCBv
dXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKHJlY29yZF9yZXN1bHRzPVRydWUsIHRlc3RzX2lu
Y2x1ZGVkPVRydWUsIGhvc3Q9aG9zdCkKKyAgICAgICAgcmVzLCBfLCB1c2VyID0gbG9nZ2luZ19y
dW4odGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgaG9zdD1ob3N0KQogCiAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwocmVzLCB1bmV4cGVjdGVkX3Rlc3RzX2NvdW50KQogICAgICAgICByZXN1bHRzID0gc2Vs
Zi5wYXJzZV9mdWxsX3Jlc3VsdHMoaG9zdC5maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKCcvdG1w
L2xheW91dC10ZXN0LXJlc3VsdHMvZnVsbF9yZXN1bHRzLmpzb24nKSkKQEAgLTEwMDksOSArOTIz
LDggQEAgY2xhc3MgRW5kVG9FbmRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgIyBU
ZXN0IHRoYXQgd2UgdXBkYXRlIGV4cGVjdGF0aW9ucyBpbiBwbGFjZS4gSWYgdGhlIGV4cGVjdGF0
aW9uCiAgICAgICAgICMgaXMgbWlzc2luZywgdXBkYXRlIHRoZSBleHBlY3RlZCBnZW5lcmljIGxv
Y2F0aW9uLgogICAgICAgICBob3N0ID0gTW9ja0hvc3QoKQotICAgICAgICByZXMsIG91dCwgZXJy
LCBfID0gbG9nZ2luZ19ydW4oWyctLW5vLXNob3ctcmVzdWx0cycsICdyZWZ0ZXN0cy9mb28vJ10s
IHRlc3RzX2luY2x1ZGVkPVRydWUsIGhvc3Q9aG9zdCwgcmVjb3JkX3Jlc3VsdHM9VHJ1ZSkKKyAg
ICAgICAgcmVzLCBfLCBfID0gbG9nZ2luZ19ydW4oWyctLW5vLXNob3ctcmVzdWx0cycsICdyZWZ0
ZXN0cy9mb28vJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUsIGhvc3Q9aG9zdCkKICAgICAgICAgZmls
ZV9saXN0ID0gaG9zdC5maWxlc3lzdGVtLndyaXR0ZW5fZmlsZXMua2V5cygpCi0gICAgICAgIGZp
bGVfbGlzdC5yZW1vdmUoJy90bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy90ZXN0c19ydW4wLnR4dCcp
CiAgICAgICAgIGpzb25fc3RyaW5nID0gaG9zdC5maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKCcv
dG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZnVsbF9yZXN1bHRzLmpzb24nKQogICAgICAgICBqc29u
ID0gc2VsZi5wYXJzZV9mdWxsX3Jlc3VsdHMoanNvbl9zdHJpbmcpCiAgICAgICAgIHNlbGYuYXNz
ZXJ0VHJ1ZSgibXVsdGlwbGUtbWF0Y2gtc3VjY2Vzcy5odG1sIiBub3QgaW4ganNvblsidGVzdHMi
XVsicmVmdGVzdHMiXVsiZm9vIl0pCkBAIC0xMDQxLDE2ICs5NTQsMTEgQEAgY2xhc3MgUmViYXNl
bGluZVRlc3QodW5pdHRlc3QuVGVzdENhc2UsIFN0cmVhbVRlc3RpbmdNaXhpbik6CiAgICAgICAg
ICMgVGVzdCB0aGF0IHdlIHVwZGF0ZSBleHBlY3RhdGlvbnMgaW4gcGxhY2UuIElmIHRoZSBleHBl
Y3RhdGlvbgogICAgICAgICAjIGlzIG1pc3NpbmcsIHVwZGF0ZSB0aGUgZXhwZWN0ZWQgZ2VuZXJp
YyBsb2NhdGlvbi4KICAgICAgICAgaG9zdCA9IE1vY2tIb3N0KCkKLSAgICAgICAgcmVzLCBvdXQs
IGVyciwgXyA9IGxvZ2dpbmdfcnVuKFsnLS1waXhlbC10ZXN0cycsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAnLS1yZXNldC1yZXN1bHRzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICdwYXNz
ZXMvaW1hZ2UuaHRtbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAnZmFpbHVyZXMvZXhwZWN0
ZWQvbWlzc2luZ19pbWFnZS5odG1sJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c19p
bmNsdWRlZD1UcnVlLCBob3N0PWhvc3QsIG5ld19yZXN1bHRzPVRydWUpCisgICAgICAgIHJlcywg
ZXJyLCBfID0gbG9nZ2luZ19ydW4oWyctLXBpeGVsLXRlc3RzJywgJy0tcmVzZXQtcmVzdWx0cycs
ICdwYXNzZXMvaW1hZ2UuaHRtbCcsICdmYWlsdXJlcy9leHBlY3RlZC9taXNzaW5nX2ltYWdlLmh0
bWwnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1U
cnVlLCBob3N0PWhvc3QsIG5ld19yZXN1bHRzPVRydWUpCiAgICAgICAgIGZpbGVfbGlzdCA9IGhv
c3QuZmlsZXN5c3RlbS53cml0dGVuX2ZpbGVzLmtleXMoKQotICAgICAgICBmaWxlX2xpc3QucmVt
b3ZlKCcvdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvdGVzdHNfcnVuMC50eHQnKQogICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHJlcywgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFbXB0eShvdXQpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZpbGVfbGlzdCksIDQpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwobGVuKGZpbGVfbGlzdCksIDgpCiAgICAgICAgIHNlbGYuYXNzZXJ0QmFzZWxp
bmVzKGZpbGVfbGlzdCwgInBhc3Nlcy9pbWFnZSIsIFsiLnR4dCIsICIucG5nIl0sIGVycikKICAg
ICAgICAgc2VsZi5hc3NlcnRCYXNlbGluZXMoZmlsZV9saXN0LCAiZmFpbHVyZXMvZXhwZWN0ZWQv
bWlzc2luZ19pbWFnZSIsIFsiLnR4dCIsICIucG5nIl0sIGVycikKIApAQCAtMTA1OCwxNyArOTY2
LDE1IEBAIGNsYXNzIFJlYmFzZWxpbmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBTdHJlYW1UZXN0
aW5nTWl4aW4pOgogICAgICAgICAjIFRlc3QgdGhhdCB3ZSB1cGRhdGUgZXhwZWN0YXRpb25zIGlu
IHBsYWNlLiBJZiB0aGUgZXhwZWN0YXRpb24KICAgICAgICAgIyBpcyBtaXNzaW5nLCB1cGRhdGUg
dGhlIGV4cGVjdGVkIGdlbmVyaWMgbG9jYXRpb24uCiAgICAgICAgIGhvc3QgPSBNb2NrSG9zdCgp
Ci0gICAgICAgIHJlcywgb3V0LCBlcnIsIF8gPSBsb2dnaW5nX3J1bihbJy0tbm8tc2hvdy1yZXN1
bHRzJywKLSAgICAgICAgICAgICAgICAgICAgICdmYWlsdXJlcy91bmV4cGVjdGVkL21pc3Npbmdf
dGV4dC5odG1sJywKLSAgICAgICAgICAgICAgICAgICAgICdmYWlsdXJlcy91bmV4cGVjdGVkL21p
c3NpbmdfaW1hZ2UuaHRtbCcsCi0gICAgICAgICAgICAgICAgICAgICAnZmFpbHVyZXMvdW5leHBl
Y3RlZC9taXNzaW5nX2F1ZGlvLmh0bWwnLAotICAgICAgICAgICAgICAgICAgICAgJ2ZhaWx1cmVz
L3VuZXhwZWN0ZWQvbWlzc2luZ19yZW5kZXJfdHJlZV9kdW1wLmh0bWwnXSwKLSAgICAgICAgICAg
ICAgICAgICAgIHRlc3RzX2luY2x1ZGVkPVRydWUsIGhvc3Q9aG9zdCwgbmV3X3Jlc3VsdHM9VHJ1
ZSkKKyAgICAgICAgcmVzLCBlcnIsIF8gPSBsb2dnaW5nX3J1bihbJy0tbm8tc2hvdy1yZXN1bHRz
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhaWx1cmVzL3VuZXhwZWN0
ZWQvbWlzc2luZ190ZXh0Lmh0bWwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnZmFpbHVyZXMvdW5leHBlY3RlZC9taXNzaW5nX2ltYWdlLmh0bWwnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnZmFpbHVyZXMvdW5leHBlY3RlZC9taXNzaW5nX2F1ZGlv
Lmh0bWwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFpbHVyZXMvdW5l
eHBlY3RlZC9taXNzaW5nX3JlbmRlcl90cmVlX2R1bXAuaHRtbCddLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1UcnVlLCBob3N0PWhvc3QsIG5ld19y
ZXN1bHRzPVRydWUpCiAgICAgICAgIGZpbGVfbGlzdCA9IGhvc3QuZmlsZXN5c3RlbS53cml0dGVu
X2ZpbGVzLmtleXMoKQotICAgICAgICBmaWxlX2xpc3QucmVtb3ZlKCcvdG1wL2xheW91dC10ZXN0
LXJlc3VsdHMvdGVzdHNfcnVuMC50eHQnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywg
MCkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFbXB0eShvdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwobGVuKGZpbGVfbGlzdCksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZp
bGVfbGlzdCksIDEwKQogICAgICAgICBzZWxmLmFzc2VydEJhc2VsaW5lcyhmaWxlX2xpc3QsICJm
YWlsdXJlcy91bmV4cGVjdGVkL21pc3NpbmdfdGV4dCIsIFsiLnR4dCJdLCBlcnIpCiAgICAgICAg
IHNlbGYuYXNzZXJ0QmFzZWxpbmVzKGZpbGVfbGlzdCwgInBsYXRmb3JtL3Rlc3QvZmFpbHVyZXMv
dW5leHBlY3RlZC9taXNzaW5nX2ltYWdlIiwgWyIucG5nIl0sIGVycikKICAgICAgICAgc2VsZi5h
c3NlcnRCYXNlbGluZXMoZmlsZV9saXN0LCAicGxhdGZvcm0vdGVzdC9mYWlsdXJlcy91bmV4cGVj
dGVkL21pc3NpbmdfcmVuZGVyX3RyZWVfZHVtcCIsIFsiLnR4dCJdLCBlcnIpCkBAIC0xMDc3LDE2
ICs5ODMsMTEgQEAgY2xhc3MgUmViYXNlbGluZVRlc3QodW5pdHRlc3QuVGVzdENhc2UsIFN0cmVh
bVRlc3RpbmdNaXhpbik6CiAgICAgICAgICMgVGVzdCB0aGF0IHdlIHVwZGF0ZSB0aGUgcGxhdGZv
cm0gZXhwZWN0YXRpb25zIGluIHRoZSB2ZXJzaW9uLXNwZWNpZmljIGRpcmVjdG9yaWVzCiAgICAg
ICAgICMgZm9yIGJvdGggZXhpc3RpbmcgYW5kIG5ldyBiYXNlbGluZXMuCiAgICAgICAgIGhvc3Qg
PSBNb2NrSG9zdCgpCi0gICAgICAgIHJlcywgb3V0LCBlcnIsIF8gPSBsb2dnaW5nX3J1bihbJy0t
cGl4ZWwtdGVzdHMnLAotICAgICAgICAgICAgICAgICAgICAgICAgJy0tbmV3LWJhc2VsaW5lJywK
LSAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzZXMvaW1hZ2UuaHRtbCcsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAnZmFpbHVyZXMvZXhwZWN0ZWQvbWlzc2luZ19pbWFnZS5odG1sJ10sCi0g
ICAgICAgICAgICAgICAgICAgIHRlc3RzX2luY2x1ZGVkPVRydWUsIGhvc3Q9aG9zdCwgbmV3X3Jl
c3VsdHM9VHJ1ZSkKKyAgICAgICAgcmVzLCBlcnIsIF8gPSBsb2dnaW5nX3J1bihbJy0tcGl4ZWwt
dGVzdHMnLCAnLS1uZXctYmFzZWxpbmUnLCAncGFzc2VzL2ltYWdlLmh0bWwnLCAnZmFpbHVyZXMv
ZXhwZWN0ZWQvbWlzc2luZ19pbWFnZS5odG1sJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSwgaG9zdD1ob3N0LCBuZXdfcmVzdWx0cz1UcnVl
KQogICAgICAgICBmaWxlX2xpc3QgPSBob3N0LmZpbGVzeXN0ZW0ud3JpdHRlbl9maWxlcy5rZXlz
KCkKLSAgICAgICAgZmlsZV9saXN0LnJlbW92ZSgnL3RtcC9sYXlvdXQtdGVzdC1yZXN1bHRzL3Rl
c3RzX3J1bjAudHh0JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDApCi0gICAgICAg
IHNlbGYuYXNzZXJ0RW1wdHkob3V0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmaWxl
X2xpc3QpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmaWxlX2xpc3QpLCA4KQog
ICAgICAgICBzZWxmLmFzc2VydEJhc2VsaW5lcyhmaWxlX2xpc3QsCiAgICAgICAgICAgICAicGxh
dGZvcm0vdGVzdC1tYWMtbGVvcGFyZC9wYXNzZXMvaW1hZ2UiLCBbIi50eHQiLCAiLnBuZyJdLCBl
cnIpCiAgICAgICAgIHNlbGYuYXNzZXJ0QmFzZWxpbmVzKGZpbGVfbGlzdCwKQEAgLTExMDksNSAr
MTAxMCw2IEBAIGNsYXNzIFBvcnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgZGlz
YWJsZWRfdGVzdF9tYWNfbGlvbihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRfbW9ja19wb3J0
X3dvcmtzKCdtYWMtbGlvbicpCiAKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1
bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3ZpZXdzL2J1aWxkYm90X3Jlc3VsdHMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy92aWV3cy9idWlsZGJvdF9yZXN1bHRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1NTAw
MDZlMTJjMGEzMTMwZDg0ZDA4MTkwNWZkNjZlNzQ4MDU3NDkKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy92aWV3cy9idWlsZGJvdF9yZXN1bHRz
LnB5CkBAIC0wLDAgKzEsMTY2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscyBpbXBvcnQgdGVzdF9l
eHBlY3RhdGlvbnMKKworZnJvbSB3ZWJraXRweS5jb21tb24ubmV0IGltcG9ydCByZXN1bHRzanNv
bnBhcnNlcgorCisKK1Rlc3RFeHBlY3RhdGlvbnMgPSB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhw
ZWN0YXRpb25zCitUZXN0RXhwZWN0YXRpb25QYXJzZXIgPSB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0
RXhwZWN0YXRpb25QYXJzZXIKKworCitjbGFzcyBCdWlsZEJvdFByaW50ZXIob2JqZWN0KToKKyAg
ICAjIFRoaXMgb3V0cHV0IGlzIHBhcnNlZCBieSBidWlsZGJvdHMgYW5kIG11c3Qgb25seSBiZSBj
aGFuZ2VkIGluIGNvb3JkaW5hdGlvbiB3aXRoIGJ1aWxkYm90IHNjcmlwdHMgKHNlZSB3ZWJraXQu
b3JnJ3MKKyAgICAjIFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29u
ZmlnL21hc3Rlci5jZmc6IFJ1bldlYktpdFRlc3RzLl9wYXJzZU5ld1J1bldlYktpdFRlc3RzT3V0
cHV0CisgICAgIyBhbmQgY2hyb21pdW0ub3JnJ3MgYnVpbGRib3QvbWFzdGVyLmNocm9taXVtL3Nj
cmlwdHMvbWFzdGVyL2xvZ19wYXJzZXIvd2Via2l0X3Rlc3RfY29tbWFuZC5weSkuCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgc3RyZWFtLCBkZWJ1Z19sb2dnaW5nKToKKyAgICAgICAgc2VsZi5z
dHJlYW0gPSBzdHJlYW0KKyAgICAgICAgc2VsZi5kZWJ1Z19sb2dnaW5nID0gZGVidWdfbG9nZ2lu
ZworCisgICAgZGVmIHByaW50X3Jlc3VsdHMoc2VsZiwgcnVuX2RldGFpbHMpOgorICAgICAgICBp
ZiBzZWxmLmRlYnVnX2xvZ2dpbmc6CisgICAgICAgICAgICBzZWxmLnByaW50X3Jlc3VsdF9zdW1t
YXJ5KHJ1bl9kZXRhaWxzLnJlc3VsdF9zdW1tYXJ5KQorICAgICAgICBzZWxmLnByaW50X3VuZXhw
ZWN0ZWRfcmVzdWx0cyhydW5fZGV0YWlscy5zdW1tYXJpemVkX3Jlc3VsdHMpCisKKyAgICBkZWYg
X3ByaW50KHNlbGYsIG1zZyk6CisgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKG1zZyArICdcbicp
CisKKyAgICBkZWYgcHJpbnRfcmVzdWx0X3N1bW1hcnkoc2VsZiwgcmVzdWx0X3N1bW1hcnkpOgor
ICAgICAgICBmYWlsZWQgPSByZXN1bHRfc3VtbWFyeS50b3RhbF9mYWlsdXJlcworICAgICAgICB0
b3RhbCA9IHJlc3VsdF9zdW1tYXJ5LnRvdGFsCisgICAgICAgIHBhc3NlZCA9IHRvdGFsIC0gZmFp
bGVkIC0gcmVzdWx0X3N1bW1hcnkucmVtYWluaW5nCisgICAgICAgIHBjdF9wYXNzZWQgPSAwLjAK
KyAgICAgICAgaWYgdG90YWwgPiAwOgorICAgICAgICAgICAgcGN0X3Bhc3NlZCA9IGZsb2F0KHBh
c3NlZCkgKiAxMDAgLyB0b3RhbAorCisgICAgICAgIHNlbGYuX3ByaW50KCI9PiBSZXN1bHRzOiAl
ZC8lZCB0ZXN0cyBwYXNzZWQgKCUuMWYlJSkiICUgKHBhc3NlZCwgdG90YWwsIHBjdF9wYXNzZWQp
KQorICAgICAgICBzZWxmLl9wcmludCgiIikKKyAgICAgICAgc2VsZi5fcHJpbnRfcmVzdWx0X3N1
bW1hcnlfZW50cnkocmVzdWx0X3N1bW1hcnksIHRlc3RfZXhwZWN0YXRpb25zLk5PVywgIlRlc3Rz
IHRvIGJlIGZpeGVkIikKKworICAgICAgICBzZWxmLl9wcmludCgiIikKKyAgICAgICAgIyBGSVhN
RTogV2Ugc2hvdWxkIGJlIHNraXBwaW5nIGFueXRoaW5nIG1hcmtlZCBXT05URklYLCBzbyB3ZSBz
aG91bGRuJ3QgYm90aGVyIGxvZ2dpbmcgdGhlc2Ugc3RhdHMuCisgICAgICAgIHNlbGYuX3ByaW50
X3Jlc3VsdF9zdW1tYXJ5X2VudHJ5KHJlc3VsdF9zdW1tYXJ5LCB0ZXN0X2V4cGVjdGF0aW9ucy5X
T05URklYLAorICAgICAgICAgICAgIlRlc3RzIHRoYXQgd2lsbCBvbmx5IGJlIGZpeGVkIGlmIHRo
ZXkgY3Jhc2ggKFdPTlRGSVgpIikKKyAgICAgICAgc2VsZi5fcHJpbnQoIiIpCisKKyAgICBkZWYg
X3ByaW50X3Jlc3VsdF9zdW1tYXJ5X2VudHJ5KHNlbGYsIHJlc3VsdF9zdW1tYXJ5LCB0aW1lbGlu
ZSwgaGVhZGluZyk6CisgICAgICAgIHRvdGFsID0gbGVuKHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5
X3RpbWVsaW5lW3RpbWVsaW5lXSkKKyAgICAgICAgbm90X3Bhc3NpbmcgPSAodG90YWwgLQorICAg
ICAgICAgICAgbGVuKHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5X2V4cGVjdGF0aW9uW3Rlc3RfZXhw
ZWN0YXRpb25zLlBBU1NdICYKKyAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeS50ZXN0c19i
eV90aW1lbGluZVt0aW1lbGluZV0pKQorICAgICAgICBzZWxmLl9wcmludCgiPT4gJXMgKCVkKToi
ICUgKGhlYWRpbmcsIG5vdF9wYXNzaW5nKSkKKworICAgICAgICBmb3IgcmVzdWx0IGluIFRlc3RF
eHBlY3RhdGlvbnMuRVhQRUNUQVRJT05fT1JERVI6CisgICAgICAgICAgICBpZiByZXN1bHQgaW4g
KHRlc3RfZXhwZWN0YXRpb25zLlBBU1MsIHRlc3RfZXhwZWN0YXRpb25zLlNLSVApOgorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICByZXN1bHRzID0gKHJlc3VsdF9zdW1tYXJ5
LnRlc3RzX2J5X2V4cGVjdGF0aW9uW3Jlc3VsdF0gJgorICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0X3N1bW1hcnkudGVzdHNfYnlfdGltZWxpbmVbdGltZWxpbmVdKQorICAgICAgICAgICAg
ZGVzYyA9IFRlc3RFeHBlY3RhdGlvbnMuRVhQRUNUQVRJT05fREVTQ1JJUFRJT05TW3Jlc3VsdF0K
KyAgICAgICAgICAgIGlmIG5vdF9wYXNzaW5nIGFuZCBsZW4ocmVzdWx0cyk6CisgICAgICAgICAg
ICAgICAgcGN0ID0gbGVuKHJlc3VsdHMpICogMTAwLjAgLyBub3RfcGFzc2luZworICAgICAgICAg
ICAgICAgIHNlbGYuX3ByaW50KCIgICU1ZCAlLTI0cyAoJTQuMWYlJSkiICUgKGxlbihyZXN1bHRz
KSwgZGVzYywgcGN0KSkKKworICAgIGRlZiBwcmludF91bmV4cGVjdGVkX3Jlc3VsdHMoc2VsZiwg
c3VtbWFyaXplZF9yZXN1bHRzKToKKyAgICAgICAgcGFzc2VzID0ge30KKyAgICAgICAgZmxha3kg
PSB7fQorICAgICAgICByZWdyZXNzaW9ucyA9IHt9CisKKyAgICAgICAgZGVmIGFkZF90b19kaWN0
X29mX2xpc3RzKGRpY3QsIGtleSwgdmFsdWUpOgorICAgICAgICAgICAgZGljdC5zZXRkZWZhdWx0
KGtleSwgW10pLmFwcGVuZCh2YWx1ZSkKKworICAgICAgICBkZWYgYWRkX3Jlc3VsdCh0ZXN0LCBy
ZXN1bHRzLCBwYXNzZXM9cGFzc2VzLCBmbGFreT1mbGFreSwgcmVncmVzc2lvbnM9cmVncmVzc2lv
bnMpOgorICAgICAgICAgICAgYWN0dWFsID0gcmVzdWx0c1snYWN0dWFsJ10uc3BsaXQoIiAiKQor
ICAgICAgICAgICAgZXhwZWN0ZWQgPSByZXN1bHRzWydleHBlY3RlZCddLnNwbGl0KCIgIikKKwor
ICAgICAgICAgICAgZGVmIGlzX2V4cGVjdGVkKHJlc3VsdCk6CisgICAgICAgICAgICAgICAgcmV0
dXJuIChyZXN1bHQgaW4gZXhwZWN0ZWQpIG9yIChyZXN1bHQgaW4gKCdURVhUJywgJ0lNQUdFK1RF
WFQnLCAnSU1BR0UnKSBhbmQgJ0ZBSUwnIGluIGV4cGVjdGVkKQorCisgICAgICAgICAgICBpZiBh
bGwoaXNfZXhwZWN0ZWQoYWN0dWFsX3Jlc3VsdCkgZm9yIGFjdHVhbF9yZXN1bHQgaW4gYWN0dWFs
KToKKyAgICAgICAgICAgICAgICAjIERvbid0IHByaW50IGFueXRoaW5nIGZvciB0ZXN0cyB0aGF0
IHJhbiBhcyBleHBlY3RlZAorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBp
ZiBhY3R1YWwgPT0gWydQQVNTJ106CisgICAgICAgICAgICAgICAgaWYgJ0NSQVNIJyBpbiBleHBl
Y3RlZDoKKyAgICAgICAgICAgICAgICAgICAgYWRkX3RvX2RpY3Rfb2ZfbGlzdHMocGFzc2VzLCAn
RXhwZWN0ZWQgdG8gY3Jhc2gsIGJ1dCBwYXNzZWQnLCB0ZXN0KQorICAgICAgICAgICAgICAgIGVs
aWYgJ1RJTUVPVVQnIGluIGV4cGVjdGVkOgorICAgICAgICAgICAgICAgICAgICBhZGRfdG9fZGlj
dF9vZl9saXN0cyhwYXNzZXMsICdFeHBlY3RlZCB0byB0aW1lb3V0LCBidXQgcGFzc2VkJywgdGVz
dCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBhZGRfdG9fZGlj
dF9vZl9saXN0cyhwYXNzZXMsICdFeHBlY3RlZCB0byBmYWlsLCBidXQgcGFzc2VkJywgdGVzdCkK
KyAgICAgICAgICAgIGVsaWYgbGVuKGFjdHVhbCkgPiAxOgorICAgICAgICAgICAgICAgICMgV2Ug
Z3JvdXAgZmxha3kgdGVzdHMgYnkgdGhlIGZpcnN0IGFjdHVhbCByZXN1bHQgd2UgZ290LgorICAg
ICAgICAgICAgICAgIGFkZF90b19kaWN0X29mX2xpc3RzKGZsYWt5LCBhY3R1YWxbMF0sIHRlc3Qp
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFkZF90b19kaWN0X29mX2xpc3Rz
KHJlZ3Jlc3Npb25zLCByZXN1bHRzWydhY3R1YWwnXSwgdGVzdCkKKworICAgICAgICByZXN1bHRz
anNvbnBhcnNlci5mb3JfZWFjaF90ZXN0KHN1bW1hcml6ZWRfcmVzdWx0c1sndGVzdHMnXSwgYWRk
X3Jlc3VsdCkKKworICAgICAgICBpZiBsZW4ocGFzc2VzKSBvciBsZW4oZmxha3kpIG9yIGxlbihy
ZWdyZXNzaW9ucyk6CisgICAgICAgICAgICBzZWxmLl9wcmludCgiIikKKyAgICAgICAgaWYgbGVu
KHBhc3Nlcyk6CisgICAgICAgICAgICBmb3Iga2V5LCB0ZXN0cyBpbiBwYXNzZXMuaXRlcml0ZW1z
KCk6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJpbnQoIiVzOiAoJWQpIiAlIChrZXksIGxlbih0
ZXN0cykpKQorICAgICAgICAgICAgICAgIHRlc3RzLnNvcnQoKQorICAgICAgICAgICAgICAgIGZv
ciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9wcmludCgiICAlcyIg
JSB0ZXN0KQorICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50KCIiKQorICAgICAgICAgICAgc2Vs
Zi5fcHJpbnQoIiIpCisKKyAgICAgICAgaWYgbGVuKGZsYWt5KToKKyAgICAgICAgICAgIGRlc2Ny
aXB0aW9ucyA9IFRlc3RFeHBlY3RhdGlvbnMuRVhQRUNUQVRJT05fREVTQ1JJUFRJT05TCisgICAg
ICAgICAgICBmb3Iga2V5LCB0ZXN0cyBpbiBmbGFreS5pdGVyaXRlbXMoKToKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSBUZXN0RXhwZWN0YXRpb25zLkVYUEVDVEFUSU9OU1trZXkubG93ZXIoKV0K
KyAgICAgICAgICAgICAgICBzZWxmLl9wcmludCgiVW5leHBlY3RlZCBmbGFraW5lc3M6ICVzICgl
ZCkiICUgKGRlc2NyaXB0aW9uc1tyZXN1bHRdLCBsZW4odGVzdHMpKSkKKyAgICAgICAgICAgICAg
ICB0ZXN0cy5zb3J0KCkKKworICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHRzanNvbnBhcnNlci5yZXN1bHRfZm9yX3Rl
c3Qoc3VtbWFyaXplZF9yZXN1bHRzWyd0ZXN0cyddLCB0ZXN0KQorICAgICAgICAgICAgICAgICAg
ICBhY3R1YWwgPSByZXN1bHRbJ2FjdHVhbCddLnNwbGl0KCIgIikKKyAgICAgICAgICAgICAgICAg
ICAgZXhwZWN0ZWQgPSByZXN1bHRbJ2V4cGVjdGVkJ10uc3BsaXQoIiAiKQorICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBUZXN0RXhwZWN0YXRpb25zLkVYUEVDVEFUSU9OU1trZXkubG93ZXIo
KV0KKyAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogY2xlYW4gdGhpcyB1cCBvbmNlIHRoZSBv
bGQgc3ludGF4IGlzIGdvbmUKKyAgICAgICAgICAgICAgICAgICAgbmV3X2V4cGVjdGF0aW9uc19s
aXN0ID0gW1Rlc3RFeHBlY3RhdGlvblBhcnNlci5faW52ZXJ0ZWRfZXhwZWN0YXRpb25fdG9rZW5z
W2V4cF0gZm9yIGV4cCBpbiBsaXN0KHNldChhY3R1YWwpIHwgc2V0KGV4cGVjdGVkKSldCisgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50KCIgICVzIFsgJXMgXSIgJSAodGVzdCwgIiAiLmpv
aW4obmV3X2V4cGVjdGF0aW9uc19saXN0KSkpCisgICAgICAgICAgICAgICAgc2VsZi5fcHJpbnQo
IiIpCisgICAgICAgICAgICBzZWxmLl9wcmludCgiIikKKworICAgICAgICBpZiBsZW4ocmVncmVz
c2lvbnMpOgorICAgICAgICAgICAgZGVzY3JpcHRpb25zID0gVGVzdEV4cGVjdGF0aW9ucy5FWFBF
Q1RBVElPTl9ERVNDUklQVElPTlMKKyAgICAgICAgICAgIGZvciBrZXksIHRlc3RzIGluIHJlZ3Jl
c3Npb25zLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRlc3RFeHBlY3Rh
dGlvbnMuRVhQRUNUQVRJT05TW2tleS5sb3dlcigpXQorICAgICAgICAgICAgICAgIHNlbGYuX3By
aW50KCJSZWdyZXNzaW9uczogVW5leHBlY3RlZCAlcyAoJWQpIiAlIChkZXNjcmlwdGlvbnNbcmVz
dWx0XSwgbGVuKHRlc3RzKSkpCisgICAgICAgICAgICAgICAgdGVzdHMuc29ydCgpCisgICAgICAg
ICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3By
aW50KCIgICVzIFsgJXMgXSIgJSAodGVzdCwgVGVzdEV4cGVjdGF0aW9uUGFyc2VyLl9pbnZlcnRl
ZF9leHBlY3RhdGlvbl90b2tlbnNba2V5XSkpCisgICAgICAgICAgICAgICAgc2VsZi5fcHJpbnQo
IiIpCisKKyAgICAgICAgaWYgbGVuKHN1bW1hcml6ZWRfcmVzdWx0c1sndGVzdHMnXSkgYW5kIHNl
bGYuZGVidWdfbG9nZ2luZzoKKyAgICAgICAgICAgIHNlbGYuX3ByaW50KCIlcyIgJSAoIi0iICog
NzgpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdmll
d3MvYnVpbGRib3RfcmVzdWx0c191bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3ZpZXdzL2J1aWxkYm90X3Jlc3VsdHNfdW5pdHRlc3QucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZTcwZTY4ZmU0NTZhM2RlZmNmMDcwMTE4Y2FlOTFiN2JkMWU2OTFiZgotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3ZpZXdzL2J1aWxkYm90
X3Jlc3VsdHNfdW5pdHRlc3QucHkKQEAgLTAsMCArMSwxNTggQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1
dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBTdHJpbmdJTworaW1wb3J0IHVuaXR0ZXN0
CisKK2Zyb20gd2Via2l0cHkuY29tbW9uLmhvc3RfbW9jayBpbXBvcnQgTW9ja0hvc3QKKworZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMgaW1wb3J0IG1hbmFnZXIKK2Zyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscyBpbXBvcnQgcmVzdWx0X3N1bW1hcnkKK2Zyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscyBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKK2Zy
b20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscyBpbXBvcnQgdGVzdF9mYWlsdXJlcworZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzIGltcG9ydCB0ZXN0X3Jlc3VsdHMKK2Zyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLnZpZXdzIGltcG9ydCBidWlsZGJvdF9yZXN1bHRzCisKKwor
Y2xhc3MgQnVpbGRCb3RQcmludGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBh
c3NlcnRFbXB0eShzZWxmLCBzdHJlYW0pOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN0cmVh
bS5nZXR2YWx1ZSgpKQorCisgICAgZGVmIGFzc2VydE5vdEVtcHR5KHNlbGYsIHN0cmVhbSk6Cisg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJlYW0uZ2V0dmFsdWUoKSkKKworICAgIGRlZiBnZXRf
cHJpbnRlcihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAg
ICAgICBwcmludGVyID0gYnVpbGRib3RfcmVzdWx0cy5CdWlsZEJvdFByaW50ZXIoc3RyZWFtLCBk
ZWJ1Z19sb2dnaW5nPVRydWUpCisgICAgICAgIHJldHVybiBwcmludGVyLCBzdHJlYW0KKworICAg
IGRlZiBnZXRfcmVzdWx0KHNlbGYsIHRlc3RfbmFtZSwgcmVzdWx0X3R5cGU9dGVzdF9leHBlY3Rh
dGlvbnMuUEFTUywgcnVuX3RpbWU9MCk6CisgICAgICAgIGZhaWx1cmVzID0gW10KKyAgICAgICAg
aWYgcmVzdWx0X3R5cGUgPT0gdGVzdF9leHBlY3RhdGlvbnMuVElNRU9VVDoKKyAgICAgICAgICAg
IGZhaWx1cmVzID0gW3Rlc3RfZmFpbHVyZXMuRmFpbHVyZVRpbWVvdXQoKV0KKyAgICAgICAgZWxp
ZiByZXN1bHRfdHlwZSA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSDoKKyAgICAgICAgICAgIGZh
aWx1cmVzID0gW3Rlc3RfZmFpbHVyZXMuRmFpbHVyZUNyYXNoKCldCisgICAgICAgIHJldHVybiB0
ZXN0X3Jlc3VsdHMuVGVzdFJlc3VsdCh0ZXN0X25hbWUsIGZhaWx1cmVzPWZhaWx1cmVzLCB0ZXN0
X3J1bl90aW1lPXJ1bl90aW1lKQorCisgICAgZGVmIGdldF9yZXN1bHRfc3VtbWFyeShzZWxmLCBw
b3J0LCB0ZXN0X25hbWVzLCBleHBlY3RhdGlvbnNfc3RyKToKKyAgICAgICAgcG9ydC50ZXN0X2V4
cGVjdGF0aW9ucyA9IGxhbWJkYTogZXhwZWN0YXRpb25zX3N0cgorICAgICAgICBwb3J0LnRlc3Rf
ZXhwZWN0YXRpb25zX292ZXJyaWRlcyA9IGxhbWJkYTogTm9uZQorICAgICAgICBleHBlY3RhdGlv
bnMgPSB0ZXN0X2V4cGVjdGF0aW9ucy5UZXN0RXhwZWN0YXRpb25zKHBvcnQsIHRlc3RfbmFtZXMp
CisgICAgICAgIHJzID0gcmVzdWx0X3N1bW1hcnkuUmVzdWx0U3VtbWFyeShleHBlY3RhdGlvbnMs
IGxlbih0ZXN0X25hbWVzKSwgMSkKKyAgICAgICAgcmV0dXJuIHRlc3RfbmFtZXMsIHJzLCBleHBl
Y3RhdGlvbnMKKworICAgIGRlZiB0ZXN0X3ByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyhzZWxmKToK
KyAgICAgICAgIyBUaGlzIHJvdXRpbmUgaXMgdGhlIG9ubHkgb25lIHRoYXQgcHJpbnRzIHN0dWZm
IHRoYXQgdGhlIGJvdHMKKyAgICAgICAgIyBjYXJlIGFib3V0LgorICAgICAgICAjCisgICAgICAg
ICMgRklYTUU6IHRoZXJlJ3Mgc29tZSB3ZWlyZCBsYXllcmluZyBnb2luZyBvbiBoZXJlLiBJdCBz
ZWVtcworICAgICAgICAjIGxpa2Ugd2Ugc2hvdWxkbid0IGJlIGJvdGggdXNpbmcgYW4gZXhwZWN0
YXRpb25zIHN0cmluZyBhbmQKKyAgICAgICAgIyBoYXZpbmcgdG8gc3BlY2lmeSB3aGV0aGVyIG9y
IG5vdCB0aGUgcmVzdWx0IHdhcyBleHBlY3RlZC4KKyAgICAgICAgIyBUaGlzIHdob2xlIHNldCBv
ZiB0ZXN0cyBzaG91bGQgcHJvYmFibHkgYmUgcmV3cml0dGVuLgorICAgICAgICAjCisgICAgICAg
ICMgRklYTUU6IFBsdXMsIHRoZSBmYWN0IHRoYXQgd2UncmUgaGF2aW5nIHRvIGNhbGwgaW50bwor
ICAgICAgICAjIHJ1bl93ZWJraXRfdGVzdHMgaXMgY2xlYXJseSBhIGxheWVyaW5nIGludmVyc2lv
bi4KKyAgICAgICAgdGVzdHMgPSBbJ3Bhc3Nlcy90ZXh0Lmh0bWwnLCAnZmFpbHVyZXMvZXhwZWN0
ZWQvdGltZW91dC5odG1sJywgJ2ZhaWx1cmVzL2V4cGVjdGVkL2NyYXNoLmh0bWwnXQorICAgICAg
ICBleHBlY3RhdGlvbnMgPSAnJworCisgICAgICAgIGRlZiBnZXRfdW5leHBlY3RlZF9yZXN1bHRz
KGV4cGVjdGVkLCBwYXNzaW5nLCBmbGFreSk6CisgICAgICAgICAgICAiIiJSZXR1cm4gYW4gdW5l
eHBlY3RlZCByZXN1bHRzIHN1bW1hcnkgbWF0Y2hpbmcgdGhlIGlucHV0IGRlc2NyaXB0aW9uLgor
CisgICAgICAgICAgICBUaGVyZSBhcmUgYSBsb3Qgb2YgZGlmZmVyZW50IGNvbWJpbmF0aW9ucyBv
ZiB0ZXN0IHJlc3VsdHMgdGhhdAorICAgICAgICAgICAgY2FuIGJlIHRlc3RlZDsgdGhpcyByb3V0
aW5lIHByb2R1Y2VzIHZhcmlvdXMgY29tYmluYXRpb25zIGJhc2VkCisgICAgICAgICAgICBvbiB0
aGUgdmFsdWVzIG9mIHRoZSBpbnB1dCBmbGFncy4KKworICAgICAgICAgICAgQXJncworICAgICAg
ICAgICAgICAgIGV4cGVjdGVkOiB3aGV0aGVyIHRoZSB0ZXN0cyByYW4gYXMgZXhwZWN0ZWQKKyAg
ICAgICAgICAgICAgICBwYXNzaW5nOiB3aGV0aGVyIHRoZSB0ZXN0cyBzaG91bGQgYWxsIHBhc3MK
KyAgICAgICAgICAgICAgICBmbGFreTogd2hldGhlciB0aGUgdGVzdHMgc2hvdWxkIGJlIGZsYWt5
IChpZiBGYWxzZSwgdGhleQorICAgICAgICAgICAgICAgICAgICBwcm9kdWNlIHRoZSBzYW1lIHJl
c3VsdHMgb24gYm90aCBydW5zOyBpZiBUcnVlLCB0aGV5CisgICAgICAgICAgICAgICAgICAgIGFs
bCBwYXNzIG9uIHRoZSBzZWNvbmQgcnVuKS4KKworICAgICAgICAgICAgIiIiCisgICAgICAgICAg
ICBwb3J0ID0gTW9ja0hvc3QoKS5wb3J0X2ZhY3RvcnkuZ2V0KCd0ZXN0JykKKyAgICAgICAgICAg
IHRlc3RfaXNfc2xvdyA9IEZhbHNlCisgICAgICAgICAgICBwYXRocywgcnMsIGV4cCA9IHNlbGYu
Z2V0X3Jlc3VsdF9zdW1tYXJ5KHBvcnQsIHRlc3RzLCBleHBlY3RhdGlvbnMpCisgICAgICAgICAg
ICBpZiBleHBlY3RlZDoKKyAgICAgICAgICAgICAgICBycy5hZGQoc2VsZi5nZXRfcmVzdWx0KCdw
YXNzZXMvdGV4dC5odG1sJywgdGVzdF9leHBlY3RhdGlvbnMuUEFTUyksIGV4cGVjdGVkLCB0ZXN0
X2lzX3Nsb3cpCisgICAgICAgICAgICAgICAgcnMuYWRkKHNlbGYuZ2V0X3Jlc3VsdCgnZmFpbHVy
ZXMvZXhwZWN0ZWQvdGltZW91dC5odG1sJywgdGVzdF9leHBlY3RhdGlvbnMuVElNRU9VVCksIGV4
cGVjdGVkLCB0ZXN0X2lzX3Nsb3cpCisgICAgICAgICAgICAgICAgcnMuYWRkKHNlbGYuZ2V0X3Jl
c3VsdCgnZmFpbHVyZXMvZXhwZWN0ZWQvY3Jhc2guaHRtbCcsIHRlc3RfZXhwZWN0YXRpb25zLkNS
QVNIKSwgZXhwZWN0ZWQsIHRlc3RfaXNfc2xvdykKKyAgICAgICAgICAgIGVsaWYgcGFzc2luZzoK
KyAgICAgICAgICAgICAgICBycy5hZGQoc2VsZi5nZXRfcmVzdWx0KCdwYXNzZXMvdGV4dC5odG1s
JyksIGV4cGVjdGVkLCB0ZXN0X2lzX3Nsb3cpCisgICAgICAgICAgICAgICAgcnMuYWRkKHNlbGYu
Z2V0X3Jlc3VsdCgnZmFpbHVyZXMvZXhwZWN0ZWQvdGltZW91dC5odG1sJyksIGV4cGVjdGVkLCB0
ZXN0X2lzX3Nsb3cpCisgICAgICAgICAgICAgICAgcnMuYWRkKHNlbGYuZ2V0X3Jlc3VsdCgnZmFp
bHVyZXMvZXhwZWN0ZWQvY3Jhc2guaHRtbCcpLCBleHBlY3RlZCwgdGVzdF9pc19zbG93KQorICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBycy5hZGQoc2VsZi5nZXRfcmVzdWx0KCdw
YXNzZXMvdGV4dC5odG1sJywgdGVzdF9leHBlY3RhdGlvbnMuVElNRU9VVCksIGV4cGVjdGVkLCB0
ZXN0X2lzX3Nsb3cpCisgICAgICAgICAgICAgICAgcnMuYWRkKHNlbGYuZ2V0X3Jlc3VsdCgnZmFp
bHVyZXMvZXhwZWN0ZWQvdGltZW91dC5odG1sJywgdGVzdF9leHBlY3RhdGlvbnMuQ1JBU0gpLCBl
eHBlY3RlZCwgdGVzdF9pc19zbG93KQorICAgICAgICAgICAgICAgIHJzLmFkZChzZWxmLmdldF9y
ZXN1bHQoJ2ZhaWx1cmVzL2V4cGVjdGVkL2NyYXNoLmh0bWwnLCB0ZXN0X2V4cGVjdGF0aW9ucy5U
SU1FT1VUKSwgZXhwZWN0ZWQsIHRlc3RfaXNfc2xvdykKKyAgICAgICAgICAgIHJldHJ5ID0gcnMK
KyAgICAgICAgICAgIGlmIGZsYWt5OgorICAgICAgICAgICAgICAgIHBhdGhzLCByZXRyeSwgZXhw
ID0gc2VsZi5nZXRfcmVzdWx0X3N1bW1hcnkocG9ydCwgdGVzdHMsIGV4cGVjdGF0aW9ucykKKyAg
ICAgICAgICAgICAgICByZXRyeS5hZGQoc2VsZi5nZXRfcmVzdWx0KCdwYXNzZXMvdGV4dC5odG1s
JyksIFRydWUsIHRlc3RfaXNfc2xvdykKKyAgICAgICAgICAgICAgICByZXRyeS5hZGQoc2VsZi5n
ZXRfcmVzdWx0KCdmYWlsdXJlcy9leHBlY3RlZC90aW1lb3V0Lmh0bWwnKSwgVHJ1ZSwgdGVzdF9p
c19zbG93KQorICAgICAgICAgICAgICAgIHJldHJ5LmFkZChzZWxmLmdldF9yZXN1bHQoJ2ZhaWx1
cmVzL2V4cGVjdGVkL2NyYXNoLmh0bWwnKSwgVHJ1ZSwgdGVzdF9pc19zbG93KQorICAgICAgICAg
ICAgcmV0dXJuIG1hbmFnZXIuc3VtbWFyaXplX3Jlc3VsdHMocG9ydCwgcnMsIHJldHJ5KQorCisg
ICAgICAgIHByaW50ZXIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoKQorCisgICAgICAgICMgdGVz
dCBldmVyeXRoaW5nIHJ1bm5pbmcgYXMgZXhwZWN0ZWQKKyAgICAgICAgdXIgPSBnZXRfdW5leHBl
Y3RlZF9yZXN1bHRzKGV4cGVjdGVkPVRydWUsIHBhc3Npbmc9RmFsc2UsIGZsYWt5PUZhbHNlKQor
ICAgICAgICBwcmludGVyLnByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyh1cikKKyAgICAgICAgc2Vs
Zi5hc3NlcnROb3RFbXB0eShvdXQpCisKKyAgICAgICAgIyB0ZXN0IGZhaWx1cmVzCisgICAgICAg
IHByaW50ZXIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoKQorICAgICAgICB1ciA9IGdldF91bmV4
cGVjdGVkX3Jlc3VsdHMoZXhwZWN0ZWQ9RmFsc2UsIHBhc3Npbmc9RmFsc2UsIGZsYWt5PUZhbHNl
KQorICAgICAgICBwcmludGVyLnByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyh1cikKKyAgICAgICAg
c2VsZi5hc3NlcnROb3RFbXB0eShvdXQpCisKKyAgICAgICAgIyB0ZXN0IHVuZXhwZWN0ZWQgZmxh
a3kKKyAgICAgICAgcHJpbnRlciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcigpCisgICAgICAgIHVy
ID0gZ2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhleHBlY3RlZD1GYWxzZSwgcGFzc2luZz1GYWxzZSwg
Zmxha3k9VHJ1ZSkKKyAgICAgICAgcHJpbnRlci5wcmludF91bmV4cGVjdGVkX3Jlc3VsdHModXIp
CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RW1wdHkob3V0KQorCisgICAgICAgIHByaW50ZXIsIG91
dCA9IHNlbGYuZ2V0X3ByaW50ZXIoKQorICAgICAgICB1ciA9IGdldF91bmV4cGVjdGVkX3Jlc3Vs
dHMoZXhwZWN0ZWQ9RmFsc2UsIHBhc3Npbmc9RmFsc2UsIGZsYWt5PUZhbHNlKQorICAgICAgICBw
cmludGVyLnByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyh1cikKKyAgICAgICAgc2VsZi5hc3NlcnRO
b3RFbXB0eShvdXQpCisKKyAgICAgICAgZXhwZWN0YXRpb25zID0gIiIiCitCVUdYIDogZmFpbHVy
ZXMvZXhwZWN0ZWQvY3Jhc2guaHRtbCA9IENSQVNICitCVUdYIDogZmFpbHVyZXMvZXhwZWN0ZWQv
dGltZW91dC5odG1sID0gVElNRU9VVAorIiIiCisgICAgICAgIHByaW50ZXIsIG91dCA9IHNlbGYu
Z2V0X3ByaW50ZXIoKQorICAgICAgICB1ciA9IGdldF91bmV4cGVjdGVkX3Jlc3VsdHMoZXhwZWN0
ZWQ9RmFsc2UsIHBhc3Npbmc9RmFsc2UsIGZsYWt5PUZhbHNlKQorICAgICAgICBwcmludGVyLnBy
aW50X3VuZXhwZWN0ZWRfcmVzdWx0cyh1cikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFbXB0eShv
dXQpCisKKyAgICAgICAgcHJpbnRlciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcigpCisgICAgICAg
IHVyID0gZ2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhleHBlY3RlZD1GYWxzZSwgcGFzc2luZz1UcnVl
LCBmbGFreT1GYWxzZSkKKyAgICAgICAgcHJpbnRlci5wcmludF91bmV4cGVjdGVkX3Jlc3VsdHMo
dXIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RW1wdHkob3V0KQpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvdmlld3MvcHJpbnRpbmcucHkgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy92aWV3cy9wcmludGluZy5weQppbmRleCBiN2E5
MTk1YTg0YzIxOTlmZTI2NzQ4Y2NlN2JkYjljOWRmYTJlMWRmLi5mMGZjOTQwMmEzNTcwNzNhNGRj
NWIwODQ0MTVmMzExNWM1MTljODAwIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy92aWV3cy9wcmludGluZy5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy92aWV3cy9wcmludGluZy5weQpAQCAtMzMsNyArMzMsNiBAQCBpbXBv
cnQgbWF0aAogaW1wb3J0IG9wdHBhcnNlCiAKIGZyb20gd2Via2l0cHkudG9vbCBpbXBvcnQgZ3Jh
bW1hcgotZnJvbSB3ZWJraXRweS5jb21tb24ubmV0IGltcG9ydCByZXN1bHRzanNvbnBhcnNlcgog
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzIGltcG9ydCB0ZXN0X2V4cGVjdGF0aW9u
cwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfZXhwZWN0YXRpb25zIGlt
cG9ydCBUZXN0RXhwZWN0YXRpb25zLCBUZXN0RXhwZWN0YXRpb25QYXJzZXIKIGZyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzLnZpZXdzLm1ldGVyZWRfc3RyZWFtIGltcG9ydCBNZXRlcmVkU3RyZWFt
CkBAIC01NiwyMyArNTUsMTMgQEAgZGVmIHByaW50X29wdGlvbnMoKToKIAogCiBjbGFzcyBQcmlu
dGVyKG9iamVjdCk6Ci0gICAgIiIiQ2xhc3MgaGFuZGxpbmcgYWxsIG5vbi1kZWJ1Zy1sb2dnaW5n
IHByaW50aW5nIGRvbmUgYnkgcnVuLXdlYmtpdC10ZXN0cy4KLQotICAgIFByaW50aW5nIGZyb20g
cnVuLXdlYmtpdC10ZXN0cyBmYWxscyBpbnRvIHR3byBidWNrZXRzOiBnZW5lcmFsIG9yCi0gICAg
cmVndWxhciBvdXRwdXQgdGhhdCBpcyByZWFkIG9ubHkgYnkgaHVtYW5zIGFuZCBjYW4gYmUgY2hh
bmdlZCBhdCBhbnkKLSAgICB0aW1lLCBhbmQgb3V0cHV0IHRoYXQgaXMgcGFyc2VkIGJ5IGJ1aWxk
Ym90cyAoYW5kIGh1bWFucykgYW5kIGhlbmNlCi0gICAgbXVzdCBiZSBjaGFuZ2VkIG1vcmUgY2Fy
ZWZ1bGx5IGFuZCBpbiBjb29yZGluYXRpb24gd2l0aCB0aGUgYnVpbGRib3QKLSAgICBwYXJzaW5n
IGNvZGUgKGluIGNocm9taXVtLm9yZydzIGJ1aWxkYm90L21hc3Rlci5jaHJvbWl1bS9zY3JpcHRz
L21hc3Rlci8KLSAgICBsb2dfcGFyc2VyL3dlYmtpdF90ZXN0X2NvbW1hbmQucHkgc2NyaXB0KS4K
LQotICAgIEJ5IGRlZmF1bHQgdGhlIGJ1aWxkYm90LXBhcnNlZCBjb2RlIGdldHMgbG9nZ2VkIHRv
IHN0ZG91dCwgYW5kIHJlZ3VsYXIKLSAgICBvdXRwdXQgZ2V0cyBsb2dnZWQgdG8gc3RkZXJyLiIi
IgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCByZWd1bGFyX291dHB1dCwg
YnVpbGRib3Rfb3V0cHV0LCBsb2dnZXI9Tm9uZSk6CisgICAgIiIiQ2xhc3MgaGFuZGxpbmcgYWxs
IG5vbi1kZWJ1Zy1sb2dnaW5nIHByaW50aW5nIGRvbmUgYnkgcnVuLXdlYmtpdC10ZXN0cy4iIiIK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCByZWd1bGFyX291dHB1dCwg
bG9nZ2VyPU5vbmUpOgogICAgICAgICBzZWxmLm51bV9jb21wbGV0ZWQgPSAwCiAgICAgICAgIHNl
bGYubnVtX3Rlc3RzID0gMAogICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAogICAgICAgICBzZWxm
Ll9vcHRpb25zID0gb3B0aW9ucwotICAgICAgICBzZWxmLl9idWlsZGJvdF9zdHJlYW0gPSBidWls
ZGJvdF9vdXRwdXQKICAgICAgICAgc2VsZi5fbWV0ZXIgPSBNZXRlcmVkU3RyZWFtKHJlZ3VsYXJf
b3V0cHV0LCBvcHRpb25zLmRlYnVnX3J3dF9sb2dnaW5nLCBsb2dnZXI9bG9nZ2VyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX29mX2NvbHVtbnM9c2VsZi5fcG9y
dC5ob3N0LnBsYXRmb3JtLnRlcm1pbmFsX3dpZHRoKCkpCiAgICAgICAgIHNlbGYuX3J1bm5pbmdf
dGVzdHMgPSBbXQpAQCAtMTQ5LDYwICsxMzgsNDkgQEAgY2xhc3MgUHJpbnRlcihvYmplY3QpOgog
ICAgICAgICAgICAgbmRpZ2l0cyA9IGludChtYXRoLmxvZzEwKGxlbihudW0pKSkgKyAxCiAgICAg
ICAgIHJldHVybiBuZGlnaXRzCiAKLSAgICBkZWYgcHJpbnRfcmVzdWx0cyhzZWxmLCBydW5fdGlt
ZSwgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3Ms
IHJlc3VsdF9zdW1tYXJ5LCB1bmV4cGVjdGVkX3Jlc3VsdHMpOgotICAgICAgICBzZWxmLl9wcmlu
dF90aW1pbmdfc3RhdGlzdGljcyhydW5fdGltZSwgdGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5n
cywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsIHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICBzZWxm
Ll9wcmludF9yZXN1bHRfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKLSAgICAgICAgc2VsZi5fcHJp
bnRfb25lX2xpbmVfc3VtbWFyeShyZXN1bHRfc3VtbWFyeS50b3RhbCAtIHJlc3VsdF9zdW1tYXJ5
LmV4cGVjdGVkX3NraXBzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdF9zdW1tYXJ5LmV4cGVjdGVkIC0gcmVzdWx0X3N1bW1hcnkuZXhwZWN0ZWRfc2tpcHMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkudW5leHBl
Y3RlZCkKLSAgICAgICAgc2VsZi5fcHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzKHVuZXhwZWN0ZWRf
cmVzdWx0cykKLQotICAgIGRlZiBfcHJpbnRfdGltaW5nX3N0YXRpc3RpY3Moc2VsZiwgdG90YWxf
dGltZSwgdGhyZWFkX3RpbWluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
aXJlY3RvcnlfdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KToKKyAgICBkZWYgcHJpbnRf
dGltaW5nX3N0YXRpc3RpY3Moc2VsZiwgdG90YWxfdGltZSwgcmVzdWx0X3N1bW1hcnkpOgogICAg
ICAgICBzZWxmLl9wcmludF9kZWJ1ZygiVGVzdCB0aW1pbmc6IikKICAgICAgICAgc2VsZi5fcHJp
bnRfZGVidWcoIiAgJTYuMmYgdG90YWwgdGVzdGluZyB0aW1lIiAlIHRvdGFsX3RpbWUpCiAgICAg
ICAgIHNlbGYuX3ByaW50X2RlYnVnKCIiKQorICAgICAgICBzZWxmLl9wcmludF93b3JrZXJfdGlt
ZXMocmVzdWx0X3N1bW1hcnksIGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykpCisg
ICAgICAgIHNlbGYuX3ByaW50X2FnZ3JlZ2F0ZV90ZXN0X3N0YXRpc3RpY3MocmVzdWx0X3N1bW1h
cnkpCisgICAgICAgIHNlbGYuX3ByaW50X2luZGl2aWR1YWxfdGVzdF90aW1lcyhyZXN1bHRfc3Vt
bWFyeSkKKyAgICAgICAgc2VsZi5fcHJpbnRfc2hhcmRfdGltZXMocmVzdWx0X3N1bW1hcnkpCisK
KyAgICBkZWYgX3ByaW50X3dvcmtlcl90aW1lcyhzZWxmLCByZXN1bHRfc3VtbWFyeSwgbnVtX3dv
cmtlcnMpOgogICAgICAgICBzZWxmLl9wcmludF9kZWJ1ZygiVGhyZWFkIHRpbWluZzoiKQogICAg
ICAgICBjdW1sX3RpbWUgPSAwCi0gICAgICAgIGZvciB0IGluIHRocmVhZF90aW1pbmdzOgotICAg
ICAgICAgICAgc2VsZi5fcHJpbnRfZGVidWcoIiAgICAlMTBzOiAlNWQgdGVzdHMsICU2LjJmIHNl
Y3MiICUgKHRbJ25hbWUnXSwgdFsnbnVtX3Rlc3RzJ10sIHRbJ3RvdGFsX3RpbWUnXSkpCi0gICAg
ICAgICAgICBjdW1sX3RpbWUgKz0gdFsndG90YWxfdGltZSddCi0gICAgICAgIHNlbGYuX3ByaW50
X2RlYnVnKCIgICAlNi4yZiBjdW11bGF0aXZlLCAlNi4yZiBvcHRpbWFsIiAlIChjdW1sX3RpbWUs
IGN1bWxfdGltZSAvIGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykpKQorICAgICAg
ICBmb3IgbmFtZSwgc3RhdHMgaW4gcmVzdWx0X3N1bW1hcnkud29ya2VyX3N0YXRzKCkuaXRlcml0
ZW1zKCk6CisgICAgICAgICAgICBzZWxmLl9wcmludF9kZWJ1ZygiICAgICUxMHM6ICU1ZCB0ZXN0
cywgJTYuMmYgc2VjcyIgJSAobmFtZSwgc3RhdHNbJ251bV90ZXN0cyddLCBzdGF0c1sndG90YWxf
dGltZSddKSkKKyAgICAgICAgICAgIGN1bWxfdGltZSArPSBzdGF0c1sndG90YWxfdGltZSddCisg
ICAgICAgIHNlbGYuX3ByaW50X2RlYnVnKCIgICAlNi4yZiBjdW11bGF0aXZlLCAlNi4yZiBvcHRp
bWFsIiAlIChjdW1sX3RpbWUsIGN1bWxfdGltZSAvIG51bV93b3JrZXJzKSkKICAgICAgICAgc2Vs
Zi5fcHJpbnRfZGVidWcoIiIpCiAKLSAgICAgICAgc2VsZi5fcHJpbnRfYWdncmVnYXRlX3Rlc3Rf
c3RhdGlzdGljcyhpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKLSAgICAgICAgc2VsZi5fcHJpbnRf
aW5kaXZpZHVhbF90ZXN0X3RpbWVzKGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLCByZXN1bHRfc3Vt
bWFyeSkKLSAgICAgICAgc2VsZi5fcHJpbnRfZGlyZWN0b3J5X3RpbWluZ3MoZGlyZWN0b3J5X3Rl
c3RfdGltaW5ncykKLQotICAgIGRlZiBfcHJpbnRfYWdncmVnYXRlX3Rlc3Rfc3RhdGlzdGljcyhz
ZWxmLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyk6Ci0gICAgICAgIHRpbWVzX2Zvcl9kdW1wX3Jl
bmRlcl90cmVlID0gW3Rlc3Rfc3RhdHMudGVzdF9ydW5fdGltZSBmb3IgdGVzdF9zdGF0cyBpbiBp
bmRpdmlkdWFsX3Rlc3RfdGltaW5nc10KKyAgICBkZWYgX3ByaW50X2FnZ3JlZ2F0ZV90ZXN0X3N0
YXRpc3RpY3Moc2VsZiwgcmVzdWx0X3N1bW1hcnkpOgorICAgICAgICB0aW1lc19mb3JfZHVtcF9y
ZW5kZXJfdHJlZSA9IFtyZXN1bHQudGVzdF9ydW5fdGltZSBmb3IgcmVzdWx0IGluIHJlc3VsdF9z
dW1tYXJ5LnJlc3VsdHMudmFsdWVzKCldCiAgICAgICAgIHNlbGYuX3ByaW50X3N0YXRpc3RpY3Nf
Zm9yX3Rlc3RfdGltaW5ncygiUEVSIFRFU1QgVElNRSBJTiBURVNUU0hFTEwgKHNlY29uZHMpOiIs
IHRpbWVzX2Zvcl9kdW1wX3JlbmRlcl90cmVlKQogCi0gICAgZGVmIF9wcmludF9pbmRpdmlkdWFs
X3Rlc3RfdGltZXMoc2VsZiwgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MsIHJlc3VsdF9zdW1tYXJ5
KToKLSAgICAgICAgIyBSZXZlcnNlLXNvcnQgYnkgdGhlIHRpbWUgc3BlbnQgaW4gRHVtcFJlbmRl
clRyZWUuCi0gICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzLnNvcnQobGFtYmRhIGEsIGI6
IGNtcChiLnRlc3RfcnVuX3RpbWUsIGEudGVzdF9ydW5fdGltZSkpCisgICAgZGVmIF9wcmludF9p
bmRpdmlkdWFsX3Rlc3RfdGltZXMoc2VsZiwgcmVzdWx0X3N1bW1hcnkpOgogICAgICAgICBudW1f
cHJpbnRlZCA9IDAKICAgICAgICAgc2xvd190ZXN0cyA9IFtdCiAgICAgICAgIHRpbWVvdXRfb3Jf
Y3Jhc2hfdGVzdHMgPSBbXQogICAgICAgICB1bmV4cGVjdGVkX3Nsb3dfdGVzdHMgPSBbXQotICAg
ICAgICBmb3IgdGVzdF90dXBsZSBpbiBpbmRpdmlkdWFsX3Rlc3RfdGltaW5nczoKLSAgICAgICAg
ICAgIHRlc3RfbmFtZSA9IHRlc3RfdHVwbGUudGVzdF9uYW1lCisgICAgICAgIHNvcnRlZF9yZXN1
bHRzID0gc29ydGVkKHJlc3VsdF9zdW1tYXJ5LnJlc3VsdHMudmFsdWVzKCksIGtleT1sYW1iZGEg
cmVzdWx0OiByZXN1bHQudGVzdF9ydW5fdGltZSwgcmV2ZXJzZT1UcnVlKQorICAgICAgICBmb3Ig
cmVzdWx0IGluIHNvcnRlZF9yZXN1bHRzOgogICAgICAgICAgICAgaXNfdGltZW91dF9jcmFzaF9v
cl9zbG93ID0gRmFsc2UKLSAgICAgICAgICAgIGlmIHRlc3RfbmFtZSBpbiByZXN1bHRfc3VtbWFy
eS5zbG93X3Rlc3RzOgorICAgICAgICAgICAgaWYgcmVzdWx0LnRlc3RfbmFtZSBpbiByZXN1bHRf
c3VtbWFyeS5zbG93X3Rlc3RzOgogICAgICAgICAgICAgICAgIGlzX3RpbWVvdXRfY3Jhc2hfb3Jf
c2xvdyA9IFRydWUKLSAgICAgICAgICAgICAgICBzbG93X3Rlc3RzLmFwcGVuZCh0ZXN0X3R1cGxl
KQorICAgICAgICAgICAgICAgIHNsb3dfdGVzdHMuYXBwZW5kKHJlc3VsdCkKIAotICAgICAgICAg
ICAgaWYgdGVzdF9uYW1lIGluIHJlc3VsdF9zdW1tYXJ5LmZhaWx1cmVzOgotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IHJlc3VsdF9zdW1tYXJ5LnJlc3VsdHNbdGVzdF9uYW1lXS50eXBlCi0gICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUIG9yCi0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5DUkFTSCk6Cisg
ICAgICAgICAgICBpZiByZXN1bHQudGVzdF9uYW1lIGluIHJlc3VsdF9zdW1tYXJ5LmZhaWx1cmVz
OgorICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5U
SU1FT1VUIG9yCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC50eXBlID09IHRlc3RfZXhwZWN0
YXRpb25zLkNSQVNIKToKICAgICAgICAgICAgICAgICAgICAgaXNfdGltZW91dF9jcmFzaF9vcl9z
bG93ID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X29yX2NyYXNoX3Rlc3RzLmFw
cGVuZCh0ZXN0X3R1cGxlKQorICAgICAgICAgICAgICAgICAgICB0aW1lb3V0X29yX2NyYXNoX3Rl
c3RzLmFwcGVuZChyZXN1bHQpCiAKICAgICAgICAgICAgIGlmIChub3QgaXNfdGltZW91dF9jcmFz
aF9vcl9zbG93IGFuZCBudW1fcHJpbnRlZCA8IE5VTV9TTE9XX1RFU1RTX1RPX0xPRyk6CiAgICAg
ICAgICAgICAgICAgbnVtX3ByaW50ZWQgPSBudW1fcHJpbnRlZCArIDEKLSAgICAgICAgICAgICAg
ICB1bmV4cGVjdGVkX3Nsb3dfdGVzdHMuYXBwZW5kKHRlc3RfdHVwbGUpCisgICAgICAgICAgICAg
ICAgdW5leHBlY3RlZF9zbG93X3Rlc3RzLmFwcGVuZChyZXN1bHQpCiAKICAgICAgICAgc2VsZi5f
cHJpbnRfZGVidWcoIiIpCiAgICAgICAgIHNlbGYuX3ByaW50X3Rlc3RfbGlzdF90aW1pbmcoIiVz
IHNsb3dlc3QgdGVzdHMgdGhhdCBhcmUgbm90IG1hcmtlZCBhcyBTTE9XIGFuZCBkaWQgbm90IHRp
bWVvdXQvY3Jhc2g6IiAlCkBAIC0yMTksMTEgKzE5NywxMCBAQCBjbGFzcyBQcmludGVyKG9iamVj
dCk6CiAgICAgICAgICAgICB0ZXN0X3J1bl90aW1lID0gcm91bmQodGVzdF90dXBsZS50ZXN0X3J1
bl90aW1lLCAxKQogICAgICAgICAgICAgc2VsZi5fcHJpbnRfZGVidWcoIiAgJXMgdG9vayAlcyBz
ZWNvbmRzIiAlICh0ZXN0X3R1cGxlLnRlc3RfbmFtZSwgdGVzdF9ydW5fdGltZSkpCiAKLSAgICBk
ZWYgX3ByaW50X2RpcmVjdG9yeV90aW1pbmdzKHNlbGYsIGRpcmVjdG9yeV90ZXN0X3RpbWluZ3Mp
OgorICAgIGRlZiBfcHJpbnRfc2hhcmRfdGltZXMoc2VsZiwgcmVzdWx0X3N1bW1hcnkpOgogICAg
ICAgICB0aW1pbmdzID0gW10KLSAgICAgICAgZm9yIGRpcmVjdG9yeSBpbiBkaXJlY3RvcnlfdGVz
dF90aW1pbmdzOgotICAgICAgICAgICAgbnVtX3Rlc3RzLCB0aW1lX2Zvcl9kaXJlY3RvcnkgPSBk
aXJlY3RvcnlfdGVzdF90aW1pbmdzW2RpcmVjdG9yeV0KLSAgICAgICAgICAgIHRpbWluZ3MuYXBw
ZW5kKChyb3VuZCh0aW1lX2Zvcl9kaXJlY3RvcnksIDEpLCBkaXJlY3RvcnksIG51bV90ZXN0cykp
CisgICAgICAgIGZvciBuYW1lLCBzdGF0cyBpbiByZXN1bHRfc3VtbWFyeS5zaGFyZF9zdGF0cygp
Lml0ZXJpdGVtcygpOgorICAgICAgICAgICAgdGltaW5ncy5hcHBlbmQoKHJvdW5kKHN0YXRzWyd0
b3RhbF90aW1lJ10sIDEpLCBuYW1lLCBzdGF0c1snbnVtX3Rlc3RzJ10pKQogICAgICAgICB0aW1p
bmdzLnNvcnQoKQogCiAgICAgICAgIHNlbGYuX3ByaW50X2RlYnVnKCJUaW1lIHRvIHByb2Nlc3Mg
c2xvd2VzdCBzdWJkaXJlY3RvcmllczoiKQpAQCAtMjYzLDQ1ICsyNDAsNyBAQCBjbGFzcyBQcmlu
dGVyKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX3ByaW50X2RlYnVnKCIgIFN0YW5kYXJkIGRldjog
ICAgJTYuM2YiICUgc3RkX2RldmlhdGlvbikKICAgICAgICAgc2VsZi5fcHJpbnRfZGVidWcoIiIp
CiAKLSAgICBkZWYgX3ByaW50X3Jlc3VsdF9zdW1tYXJ5KHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToK
LSAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMuZGVidWdfcnd0X2xvZ2dpbmc6Ci0gICAgICAg
ICAgICByZXR1cm4KLQotICAgICAgICBmYWlsZWQgPSByZXN1bHRfc3VtbWFyeS50b3RhbF9mYWls
dXJlcwotICAgICAgICB0b3RhbCA9IHJlc3VsdF9zdW1tYXJ5LnRvdGFsIC0gcmVzdWx0X3N1bW1h
cnkuZXhwZWN0ZWRfc2tpcHMKLSAgICAgICAgcGFzc2VkID0gdG90YWwgLSBmYWlsZWQgLSByZXN1
bHRfc3VtbWFyeS5yZW1haW5pbmcKLSAgICAgICAgcGN0X3Bhc3NlZCA9IDAuMAotICAgICAgICBp
ZiB0b3RhbCA+IDA6Ci0gICAgICAgICAgICBwY3RfcGFzc2VkID0gZmxvYXQocGFzc2VkKSAqIDEw
MCAvIHRvdGFsCi0KLSAgICAgICAgc2VsZi5fcHJpbnRfZm9yX2JvdCgiPT4gUmVzdWx0czogJWQv
JWQgdGVzdHMgcGFzc2VkICglLjFmJSUpIiAlIChwYXNzZWQsIHRvdGFsLCBwY3RfcGFzc2VkKSkK
LSAgICAgICAgc2VsZi5fcHJpbnRfZm9yX2JvdCgiIikKLSAgICAgICAgc2VsZi5fcHJpbnRfcmVz
dWx0X3N1bW1hcnlfZW50cnkocmVzdWx0X3N1bW1hcnksIHRlc3RfZXhwZWN0YXRpb25zLk5PVywg
IlRlc3RzIHRvIGJlIGZpeGVkIikKLQotICAgICAgICBzZWxmLl9wcmludF9mb3JfYm90KCIiKQot
ICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgYmUgc2tpcHBpbmcgYW55dGhpbmcgbWFya2VkIFdP
TlRGSVgsIHNvIHdlIHNob3VsZG4ndCBib3RoZXIgbG9nZ2luZyB0aGVzZSBzdGF0cy4KLSAgICAg
ICAgc2VsZi5fcHJpbnRfcmVzdWx0X3N1bW1hcnlfZW50cnkocmVzdWx0X3N1bW1hcnksIHRlc3Rf
ZXhwZWN0YXRpb25zLldPTlRGSVgsCi0gICAgICAgICAgICAiVGVzdHMgdGhhdCB3aWxsIG9ubHkg
YmUgZml4ZWQgaWYgdGhleSBjcmFzaCAoV09OVEZJWCkiKQotICAgICAgICBzZWxmLl9wcmludF9m
b3JfYm90KCIiKQotCi0gICAgZGVmIF9wcmludF9yZXN1bHRfc3VtbWFyeV9lbnRyeShzZWxmLCBy
ZXN1bHRfc3VtbWFyeSwgdGltZWxpbmUsIGhlYWRpbmcpOgotICAgICAgICB0b3RhbCA9IGxlbihy
ZXN1bHRfc3VtbWFyeS50ZXN0c19ieV90aW1lbGluZVt0aW1lbGluZV0pCi0gICAgICAgIG5vdF9w
YXNzaW5nID0gKHRvdGFsIC0KLSAgICAgICAgICAgbGVuKHJlc3VsdF9zdW1tYXJ5LnRlc3RzX2J5
X2V4cGVjdGF0aW9uW3Rlc3RfZXhwZWN0YXRpb25zLlBBU1NdICYKLSAgICAgICAgICAgICAgIHJl
c3VsdF9zdW1tYXJ5LnRlc3RzX2J5X3RpbWVsaW5lW3RpbWVsaW5lXSkpCi0gICAgICAgIHNlbGYu
X3ByaW50X2Zvcl9ib3QoIj0+ICVzICglZCk6IiAlIChoZWFkaW5nLCBub3RfcGFzc2luZykpCi0K
LSAgICAgICAgZm9yIHJlc3VsdCBpbiBUZXN0RXhwZWN0YXRpb25zLkVYUEVDVEFUSU9OX09SREVS
OgotICAgICAgICAgICAgaWYgcmVzdWx0IGluICh0ZXN0X2V4cGVjdGF0aW9ucy5QQVNTLCB0ZXN0
X2V4cGVjdGF0aW9ucy5TS0lQKToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAg
ICAgcmVzdWx0cyA9IChyZXN1bHRfc3VtbWFyeS50ZXN0c19ieV9leHBlY3RhdGlvbltyZXN1bHRd
ICYKLSAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkudGVzdHNfYnlfdGltZWxp
bmVbdGltZWxpbmVdKQotICAgICAgICAgICAgZGVzYyA9IFRlc3RFeHBlY3RhdGlvbnMuRVhQRUNU
QVRJT05fREVTQ1JJUFRJT05TW3Jlc3VsdF0KLSAgICAgICAgICAgIGlmIG5vdF9wYXNzaW5nIGFu
ZCBsZW4ocmVzdWx0cyk6Ci0gICAgICAgICAgICAgICAgcGN0ID0gbGVuKHJlc3VsdHMpICogMTAw
LjAgLyBub3RfcGFzc2luZwotICAgICAgICAgICAgICAgIHNlbGYuX3ByaW50X2Zvcl9ib3QoIiAg
JTVkICUtMjRzICglNC4xZiUlKSIgJSAobGVuKHJlc3VsdHMpLCBkZXNjLCBwY3QpKQotCi0gICAg
ZGVmIF9wcmludF9vbmVfbGluZV9zdW1tYXJ5KHNlbGYsIHRvdGFsLCBleHBlY3RlZCwgdW5leHBl
Y3RlZCk6CisgICAgZGVmIHByaW50X29uZV9saW5lX3N1bW1hcnkoc2VsZiwgdG90YWwsIGV4cGVj
dGVkLCB1bmV4cGVjdGVkKToKICAgICAgICAgaW5jb21wbGV0ZSA9IHRvdGFsIC0gZXhwZWN0ZWQg
LSB1bmV4cGVjdGVkCiAgICAgICAgIGluY29tcGxldGVfc3RyID0gJycKICAgICAgICAgaWYgaW5j
b21wbGV0ZToKQEAgLTQxMSw3NSArMzUwLDYgQEAgY2xhc3MgUHJpbnRlcihvYmplY3QpOgogICAg
ICAgICAgICAgcmVscGF0aCA9ICc8bm9uZT4nCiAgICAgICAgIHNlbGYuX3ByaW50X2RlZmF1bHQo
JyAgJXM6ICVzJyAlIChleHRlbnNpb25bMTpdLCByZWxwYXRoKSkKIAotICAgIGRlZiBfcHJpbnRf
dW5leHBlY3RlZF9yZXN1bHRzKHNlbGYsIHVuZXhwZWN0ZWRfcmVzdWx0cyk6Ci0gICAgICAgICMg
UHJpbnRzIHRvIHRoZSBidWlsZGJvdCBzdHJlYW0KLSAgICAgICAgcGFzc2VzID0ge30KLSAgICAg
ICAgZmxha3kgPSB7fQotICAgICAgICByZWdyZXNzaW9ucyA9IHt9Ci0KLSAgICAgICAgZGVmIGFk
ZF90b19kaWN0X29mX2xpc3RzKGRpY3QsIGtleSwgdmFsdWUpOgotICAgICAgICAgICAgZGljdC5z
ZXRkZWZhdWx0KGtleSwgW10pLmFwcGVuZCh2YWx1ZSkKLQotICAgICAgICBkZWYgYWRkX3Jlc3Vs
dCh0ZXN0LCByZXN1bHRzLCBwYXNzZXM9cGFzc2VzLCBmbGFreT1mbGFreSwgcmVncmVzc2lvbnM9
cmVncmVzc2lvbnMpOgotICAgICAgICAgICAgYWN0dWFsID0gcmVzdWx0c1snYWN0dWFsJ10uc3Bs
aXQoIiAiKQotICAgICAgICAgICAgZXhwZWN0ZWQgPSByZXN1bHRzWydleHBlY3RlZCddLnNwbGl0
KCIgIikKLSAgICAgICAgICAgIGlmIGFjdHVhbCA9PSBbJ1BBU1MnXToKLSAgICAgICAgICAgICAg
ICBpZiAnQ1JBU0gnIGluIGV4cGVjdGVkOgotICAgICAgICAgICAgICAgICAgICBhZGRfdG9fZGlj
dF9vZl9saXN0cyhwYXNzZXMsICdFeHBlY3RlZCB0byBjcmFzaCwgYnV0IHBhc3NlZCcsIHRlc3Qp
Ci0gICAgICAgICAgICAgICAgZWxpZiAnVElNRU9VVCcgaW4gZXhwZWN0ZWQ6Ci0gICAgICAgICAg
ICAgICAgICAgIGFkZF90b19kaWN0X29mX2xpc3RzKHBhc3NlcywgJ0V4cGVjdGVkIHRvIHRpbWVv
dXQsIGJ1dCBwYXNzZWQnLCB0ZXN0KQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgICAgIGFkZF90b19kaWN0X29mX2xpc3RzKHBhc3NlcywgJ0V4cGVjdGVkIHRvIGZhaWws
IGJ1dCBwYXNzZWQnLCB0ZXN0KQotICAgICAgICAgICAgZWxpZiBsZW4oYWN0dWFsKSA+IDE6Ci0g
ICAgICAgICAgICAgICAgIyBXZSBncm91cCBmbGFreSB0ZXN0cyBieSB0aGUgZmlyc3QgYWN0dWFs
IHJlc3VsdCB3ZSBnb3QuCi0gICAgICAgICAgICAgICAgYWRkX3RvX2RpY3Rfb2ZfbGlzdHMoZmxh
a3ksIGFjdHVhbFswXSwgdGVzdCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAg
YWRkX3RvX2RpY3Rfb2ZfbGlzdHMocmVncmVzc2lvbnMsIHJlc3VsdHNbJ2FjdHVhbCddLCB0ZXN0
KQotCi0gICAgICAgIHJlc3VsdHNqc29ucGFyc2VyLmZvcl9lYWNoX3Rlc3QodW5leHBlY3RlZF9y
ZXN1bHRzWyd0ZXN0cyddLCBhZGRfcmVzdWx0KQotCi0gICAgICAgIGlmIGxlbihwYXNzZXMpIG9y
IGxlbihmbGFreSkgb3IgbGVuKHJlZ3Jlc3Npb25zKToKLSAgICAgICAgICAgIHNlbGYuX3ByaW50
X2Zvcl9ib3QoIiIpCi0gICAgICAgIGlmIGxlbihwYXNzZXMpOgotICAgICAgICAgICAgZm9yIGtl
eSwgdGVzdHMgaW4gcGFzc2VzLml0ZXJpdGVtcygpOgotICAgICAgICAgICAgICAgIHNlbGYuX3By
aW50X2Zvcl9ib3QoIiVzOiAoJWQpIiAlIChrZXksIGxlbih0ZXN0cykpKQotICAgICAgICAgICAg
ICAgIHRlc3RzLnNvcnQoKQotICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgotICAg
ICAgICAgICAgICAgICAgICBzZWxmLl9wcmludF9mb3JfYm90KCIgICVzIiAlIHRlc3QpCi0gICAg
ICAgICAgICAgICAgc2VsZi5fcHJpbnRfZm9yX2JvdCgiIikKLSAgICAgICAgICAgIHNlbGYuX3By
aW50X2Zvcl9ib3QoIiIpCi0KLSAgICAgICAgaWYgbGVuKGZsYWt5KToKLSAgICAgICAgICAgIGRl
c2NyaXB0aW9ucyA9IFRlc3RFeHBlY3RhdGlvbnMuRVhQRUNUQVRJT05fREVTQ1JJUFRJT05TCi0g
ICAgICAgICAgICBmb3Iga2V5LCB0ZXN0cyBpbiBmbGFreS5pdGVyaXRlbXMoKToKLSAgICAgICAg
ICAgICAgICByZXN1bHQgPSBUZXN0RXhwZWN0YXRpb25zLkVYUEVDVEFUSU9OU1trZXkubG93ZXIo
KV0KLSAgICAgICAgICAgICAgICBzZWxmLl9wcmludF9mb3JfYm90KCJVbmV4cGVjdGVkIGZsYWtp
bmVzczogJXMgKCVkKSIgJSAoZGVzY3JpcHRpb25zW3Jlc3VsdF0sIGxlbih0ZXN0cykpKQotICAg
ICAgICAgICAgICAgIHRlc3RzLnNvcnQoKQotCi0gICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4g
dGVzdHM6Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdHNqc29ucGFyc2VyLnJl
c3VsdF9mb3JfdGVzdCh1bmV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ10sIHRlc3QpCi0gICAgICAg
ICAgICAgICAgICAgIGFjdHVhbCA9IHJlc3VsdFsnYWN0dWFsJ10uc3BsaXQoIiAiKQotICAgICAg
ICAgICAgICAgICAgICBleHBlY3RlZCA9IHJlc3VsdFsnZXhwZWN0ZWQnXS5zcGxpdCgiICIpCi0g
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRlc3RFeHBlY3RhdGlvbnMuRVhQRUNUQVRJT05T
W2tleS5sb3dlcigpXQotICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBjbGVhbiB0aGlzIHVw
IG9uY2UgdGhlIG9sZCBzeW50YXggaXMgZ29uZQotICAgICAgICAgICAgICAgICAgICBuZXdfZXhw
ZWN0YXRpb25zX2xpc3QgPSBbVGVzdEV4cGVjdGF0aW9uUGFyc2VyLl9pbnZlcnRlZF9leHBlY3Rh
dGlvbl90b2tlbnNbZXhwXSBmb3IgZXhwIGluIGxpc3Qoc2V0KGFjdHVhbCkgfCBzZXQoZXhwZWN0
ZWQpKV0KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRfZm9yX2JvdCgiICAlcyBbICVz
IF0iICUgKHRlc3QsICIgIi5qb2luKG5ld19leHBlY3RhdGlvbnNfbGlzdCkpKQotICAgICAgICAg
ICAgICAgIHNlbGYuX3ByaW50X2Zvcl9ib3QoIiIpCi0gICAgICAgICAgICBzZWxmLl9wcmludF9m
b3JfYm90KCIiKQotCi0gICAgICAgIGlmIGxlbihyZWdyZXNzaW9ucyk6Ci0gICAgICAgICAgICBk
ZXNjcmlwdGlvbnMgPSBUZXN0RXhwZWN0YXRpb25zLkVYUEVDVEFUSU9OX0RFU0NSSVBUSU9OUwot
ICAgICAgICAgICAgZm9yIGtleSwgdGVzdHMgaW4gcmVncmVzc2lvbnMuaXRlcml0ZW1zKCk6Ci0g
ICAgICAgICAgICAgICAgcmVzdWx0ID0gVGVzdEV4cGVjdGF0aW9ucy5FWFBFQ1RBVElPTlNba2V5
Lmxvd2VyKCldCi0gICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRfZm9yX2JvdCgiUmVncmVzc2lv
bnM6IFVuZXhwZWN0ZWQgJXMgKCVkKSIgJSAoZGVzY3JpcHRpb25zW3Jlc3VsdF0sIGxlbih0ZXN0
cykpKQotICAgICAgICAgICAgICAgIHRlc3RzLnNvcnQoKQotICAgICAgICAgICAgICAgIGZvciB0
ZXN0IGluIHRlc3RzOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9wcmludF9mb3JfYm90KCIg
ICVzIFsgJXMgXSIgJSAodGVzdCwgVGVzdEV4cGVjdGF0aW9uUGFyc2VyLl9pbnZlcnRlZF9leHBl
Y3RhdGlvbl90b2tlbnNba2V5XSkpCi0gICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRfZm9yX2Jv
dCgiIikKLQotICAgICAgICBpZiBsZW4odW5leHBlY3RlZF9yZXN1bHRzWyd0ZXN0cyddKSBhbmQg
c2VsZi5fb3B0aW9ucy5kZWJ1Z19yd3RfbG9nZ2luZzoKLSAgICAgICAgICAgIHNlbGYuX3ByaW50
X2Zvcl9ib3QoIiVzIiAlICgiLSIgKiA3OCkpCi0KICAgICBkZWYgX3ByaW50X3F1aWV0KHNlbGYs
IG1zZyk6CiAgICAgICAgIHNlbGYud3JpdGVsbihtc2cpCiAKQEAgLTQ5MSw5ICszNjEsNiBAQCBj
bGFzcyBQcmludGVyKG9iamVjdCk6CiAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuZGVidWdfcnd0
X2xvZ2dpbmc6CiAgICAgICAgICAgICBzZWxmLndyaXRlbG4obXNnKQogCi0gICAgZGVmIF9wcmlu
dF9mb3JfYm90KHNlbGYsIG1zZyk6Ci0gICAgICAgIHNlbGYuX2J1aWxkYm90X3N0cmVhbS53cml0
ZShtc2cgKyAiXG4iKQotCiAgICAgZGVmIHdyaXRlX3VwZGF0ZShzZWxmLCBtc2cpOgogICAgICAg
ICBzZWxmLl9tZXRlci53cml0ZV91cGRhdGUobXNnKQogCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy92aWV3cy9wcmludGluZ191bml0dGVzdC5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3ZpZXdzL3ByaW50aW5nX3VuaXR0ZXN0
LnB5CmluZGV4IGMwYjkyOGIwY2M4MTlhMGUwN2RlNzNhOWQ5M2E1YzE3OTBiNDNlOWQuLjc4NzZl
ZDY3ZDA0ZGFmYmZiMGY1MmRhY2E2MzUyNjgzZjhlMjcyNzggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3ZpZXdzL3ByaW50aW5nX3VuaXR0ZXN0LnB5Cisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3ZpZXdzL3ByaW50aW5nX3Vu
aXR0ZXN0LnB5CkBAIC04Myw5ICs4Myw4IEBAIGNsYXNzICBUZXN0cHJpbnRlcih1bml0dGVzdC5U
ZXN0Q2FzZSk6CiAgICAgICAgIG5wcm9jID0gMgogCiAgICAgICAgIHJlZ3VsYXJfb3V0cHV0ID0g
U3RyaW5nSU8uU3RyaW5nSU8oKQotICAgICAgICBidWlsZGJvdF9vdXRwdXQgPSBTdHJpbmdJTy5T
dHJpbmdJTygpCi0gICAgICAgIHByaW50ZXIgPSBwcmludGluZy5QcmludGVyKHNlbGYuX3BvcnQs
IG9wdGlvbnMsIHJlZ3VsYXJfb3V0cHV0LCBidWlsZGJvdF9vdXRwdXQpCi0gICAgICAgIHJldHVy
biBwcmludGVyLCByZWd1bGFyX291dHB1dCwgYnVpbGRib3Rfb3V0cHV0CisgICAgICAgIHByaW50
ZXIgPSBwcmludGluZy5QcmludGVyKHNlbGYuX3BvcnQsIG9wdGlvbnMsIHJlZ3VsYXJfb3V0cHV0
KQorICAgICAgICByZXR1cm4gcHJpbnRlciwgcmVndWxhcl9vdXRwdXQKIAogICAgIGRlZiBnZXRf
cmVzdWx0KHNlbGYsIHRlc3RfbmFtZSwgcmVzdWx0X3R5cGU9dGVzdF9leHBlY3RhdGlvbnMuUEFT
UywgcnVuX3RpbWU9MCk6CiAgICAgICAgIGZhaWx1cmVzID0gW10KQEAgLTk1LDI0ICs5NCwxNiBA
QCBjbGFzcyAgVGVzdHByaW50ZXIodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgZmFp
bHVyZXMgPSBbdGVzdF9mYWlsdXJlcy5GYWlsdXJlQ3Jhc2goKV0KICAgICAgICAgcmV0dXJuIHRl
c3RfcmVzdWx0cy5UZXN0UmVzdWx0KHRlc3RfbmFtZSwgZmFpbHVyZXM9ZmFpbHVyZXMsIHRlc3Rf
cnVuX3RpbWU9cnVuX3RpbWUpCiAKLSAgICBkZWYgZ2V0X3Jlc3VsdF9zdW1tYXJ5KHNlbGYsIHRl
c3RfbmFtZXMsIGV4cGVjdGF0aW9uc19zdHIpOgotICAgICAgICBwb3J0LnRlc3RfZXhwZWN0YXRp
b25zID0gbGFtYmRhOiBleHBlY3RhdGlvbnNfc3RyCi0gICAgICAgIHBvcnQudGVzdF9leHBlY3Rh
dGlvbnNfb3ZlcnJpZGVzID0gbGFtYmRhOiBOb25lCi0gICAgICAgIGV4cGVjdGF0aW9ucyA9IHRl
c3RfZXhwZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvbnMoc2VsZi5fcG9ydCwgdGVzdF9uYW1lcykK
LQotICAgICAgICBycyA9IHJlc3VsdF9zdW1tYXJ5LlJlc3VsdFN1bW1hcnkoZXhwZWN0YXRpb25z
LCB0ZXN0X25hbWVzLCAxLCBzZXQoKSkKLSAgICAgICAgcmV0dXJuIHRlc3RfbmFtZXMsIHJzLCBl
eHBlY3RhdGlvbnMKLQogICAgIGRlZiB0ZXN0X2NvbmZpZ3VyZV9hbmRfY2xlYW51cChzZWxmKToK
ICAgICAgICAgIyBUaGlzIHRlc3QgdmVyaWZpZXMgdGhhdCBjYWxsaW5nIGNsZWFudXAgcmVwZWF0
ZWRseSBhbmQgZGVsZXRpbmcKICAgICAgICAgIyB0aGUgb2JqZWN0IGlzIHNhZmUuCi0gICAgICAg
IHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcigpCisgICAgICAgIHByaW50ZXIs
IGVyciA9IHNlbGYuZ2V0X3ByaW50ZXIoKQogICAgICAgICBwcmludGVyLmNsZWFudXAoKQogICAg
ICAgICBwcmludGVyLmNsZWFudXAoKQogICAgICAgICBwcmludGVyID0gTm9uZQogCiAgICAgZGVm
IHRlc3RfcHJpbnRfY29uZmlnKHNlbGYpOgotICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNl
bGYuZ2V0X3ByaW50ZXIoKQorICAgICAgICBwcmludGVyLCBlcnIgPSBzZWxmLmdldF9wcmludGVy
KCkKICAgICAgICAgIyBGSVhNRTogaXQncyBsYW1lIHRoYXQgaSBoYXZlIHRvIHNldCB0aGVzZSBv
cHRpb25zIGRpcmVjdGx5LgogICAgICAgICBwcmludGVyLl9vcHRpb25zLnBpeGVsX3Rlc3RzID0g
VHJ1ZQogICAgICAgICBwcmludGVyLl9vcHRpb25zLm5ld19iYXNlbGluZSA9IFRydWUKQEAgLTEz
NCwxMjkgKzEyNSwyOCBAQCBjbGFzcyAgVGVzdHByaW50ZXIodW5pdHRlc3QuVGVzdENhc2UpOgog
ICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdCYXNlbGluZSBzZWFyY2ggcGF0aDogdGVzdC1tYWMt
bGVvcGFyZCAtPiB0ZXN0LW1hYy1zbm93bGVvcGFyZCAtPiBnZW5lcmljJyBpbiBlcnIuZ2V0dmFs
dWUoKSkKIAogICAgIGRlZiB0ZXN0X3ByaW50X29uZV9saW5lX3N1bW1hcnkoc2VsZik6Ci0gICAg
ICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcigpCi0gICAgICAgIHByaW50
ZXIuX3ByaW50X29uZV9saW5lX3N1bW1hcnkoMSwgMSwgMCkKKyAgICAgICAgcHJpbnRlciwgZXJy
ID0gc2VsZi5nZXRfcHJpbnRlcigpCisgICAgICAgIHByaW50ZXIucHJpbnRfb25lX2xpbmVfc3Vt
bWFyeSgxLCAxLCAwKQogICAgICAgICBzZWxmLmFzc2VydFdyaXR0ZW4oZXJyLCBbIlRoZSB0ZXN0
IHJhbiBhcyBleHBlY3RlZC5cbiIsICJcbiJdKQogCi0gICAgICAgIHByaW50ZXIsIGVyciwgb3V0
ID0gc2VsZi5nZXRfcHJpbnRlcigpCi0gICAgICAgIHByaW50ZXIuX3ByaW50X29uZV9saW5lX3N1
bW1hcnkoMSwgMSwgMCkKKyAgICAgICAgcHJpbnRlciwgZXJyID0gc2VsZi5nZXRfcHJpbnRlcigp
CisgICAgICAgIHByaW50ZXIucHJpbnRfb25lX2xpbmVfc3VtbWFyeSgxLCAxLCAwKQogICAgICAg
ICBzZWxmLmFzc2VydFdyaXR0ZW4oZXJyLCBbIlRoZSB0ZXN0IHJhbiBhcyBleHBlY3RlZC5cbiIs
ICJcbiJdKQogCi0gICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcigp
Ci0gICAgICAgIHByaW50ZXIuX3ByaW50X29uZV9saW5lX3N1bW1hcnkoMiwgMSwgMSkKKyAgICAg
ICAgcHJpbnRlciwgZXJyID0gc2VsZi5nZXRfcHJpbnRlcigpCisgICAgICAgIHByaW50ZXIucHJp
bnRfb25lX2xpbmVfc3VtbWFyeSgyLCAxLCAxKQogICAgICAgICBzZWxmLmFzc2VydFdyaXR0ZW4o
ZXJyLCBbIlxuIiwgIjEgdGVzdCByYW4gYXMgZXhwZWN0ZWQsIDEgZGlkbid0OlxuIiwgIlxuIl0p
CiAKLSAgICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKCkKLSAgICAg
ICAgcHJpbnRlci5fcHJpbnRfb25lX2xpbmVfc3VtbWFyeSgzLCAyLCAxKQorICAgICAgICBwcmlu
dGVyLCBlcnIgPSBzZWxmLmdldF9wcmludGVyKCkKKyAgICAgICAgcHJpbnRlci5wcmludF9vbmVf
bGluZV9zdW1tYXJ5KDMsIDIsIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0V3JpdHRlbihlcnIsIFsi
XG4iLCAiMiB0ZXN0cyByYW4gYXMgZXhwZWN0ZWQsIDEgZGlkbid0OlxuIiwgIlxuIl0pCiAKLSAg
ICAgICAgcHJpbnRlciwgZXJyLCBvdXQgPSBzZWxmLmdldF9wcmludGVyKCkKLSAgICAgICAgcHJp
bnRlci5fcHJpbnRfb25lX2xpbmVfc3VtbWFyeSgzLCAyLCAwKQorICAgICAgICBwcmludGVyLCBl
cnIgPSBzZWxmLmdldF9wcmludGVyKCkKKyAgICAgICAgcHJpbnRlci5wcmludF9vbmVfbGluZV9z
dW1tYXJ5KDMsIDIsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0V3JpdHRlbihlcnIsIFsnXG4nLCAi
MiB0ZXN0cyByYW4gYXMgZXhwZWN0ZWQgKDEgZGlkbid0IHJ1bikuXG4iLCAnXG4nXSkKIAotICAg
IGRlZiB0ZXN0X3ByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyhzZWxmKToKLSAgICAgICAgIyBUaGlz
IHJvdXRpbmUgaXMgdGhlIG9ubHkgb25lIHRoYXQgcHJpbnRzIHN0dWZmIHRoYXQgdGhlIGJvdHMK
LSAgICAgICAgIyBjYXJlIGFib3V0LgotICAgICAgICAjCi0gICAgICAgICMgRklYTUU6IHRoZXJl
J3Mgc29tZSB3ZWlyZCBsYXllcmluZyBnb2luZyBvbiBoZXJlLiBJdCBzZWVtcwotICAgICAgICAj
IGxpa2Ugd2Ugc2hvdWxkbid0IGJlIGJvdGggdXNpbmcgYW4gZXhwZWN0YXRpb25zIHN0cmluZyBh
bmQKLSAgICAgICAgIyBoYXZpbmcgdG8gc3BlY2lmeSB3aGV0aGVyIG9yIG5vdCB0aGUgcmVzdWx0
IHdhcyBleHBlY3RlZC4KLSAgICAgICAgIyBUaGlzIHdob2xlIHNldCBvZiB0ZXN0cyBzaG91bGQg
cHJvYmFibHkgYmUgcmV3cml0dGVuLgotICAgICAgICAjCi0gICAgICAgICMgRklYTUU6IFBsdXMs
IHRoZSBmYWN0IHRoYXQgd2UncmUgaGF2aW5nIHRvIGNhbGwgaW50bwotICAgICAgICAjIHJ1bl93
ZWJraXRfdGVzdHMgaXMgY2xlYXJseSBhIGxheWVyaW5nIGludmVyc2lvbi4KLSAgICAgICAgZGVm
IGdldF91bmV4cGVjdGVkX3Jlc3VsdHMoZXhwZWN0ZWQsIHBhc3NpbmcsIGZsYWt5KToKLSAgICAg
ICAgICAgICIiIlJldHVybiBhbiB1bmV4cGVjdGVkIHJlc3VsdHMgc3VtbWFyeSBtYXRjaGluZyB0
aGUgaW5wdXQgZGVzY3JpcHRpb24uCi0KLSAgICAgICAgICAgIFRoZXJlIGFyZSBhIGxvdCBvZiBk
aWZmZXJlbnQgY29tYmluYXRpb25zIG9mIHRlc3QgcmVzdWx0cyB0aGF0Ci0gICAgICAgICAgICBj
YW4gYmUgdGVzdGVkOyB0aGlzIHJvdXRpbmUgcHJvZHVjZXMgdmFyaW91cyBjb21iaW5hdGlvbnMg
YmFzZWQKLSAgICAgICAgICAgIG9uIHRoZSB2YWx1ZXMgb2YgdGhlIGlucHV0IGZsYWdzLgotCi0g
ICAgICAgICAgICBBcmdzCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IHdoZXRoZXIgdGhlIHRl
c3RzIHJhbiBhcyBleHBlY3RlZAotICAgICAgICAgICAgICAgIHBhc3Npbmc6IHdoZXRoZXIgdGhl
IHRlc3RzIHNob3VsZCBhbGwgcGFzcwotICAgICAgICAgICAgICAgIGZsYWt5OiB3aGV0aGVyIHRo
ZSB0ZXN0cyBzaG91bGQgYmUgZmxha3kgKGlmIEZhbHNlLCB0aGV5Ci0gICAgICAgICAgICAgICAg
ICAgIHByb2R1Y2UgdGhlIHNhbWUgcmVzdWx0cyBvbiBib3RoIHJ1bnM7IGlmIFRydWUsIHRoZXkK
LSAgICAgICAgICAgICAgICAgICAgYWxsIHBhc3Mgb24gdGhlIHNlY29uZCBydW4pLgotCi0gICAg
ICAgICAgICAiIiIKLSAgICAgICAgICAgIHRlc3RfaXNfc2xvdyA9IEZhbHNlCi0gICAgICAgICAg
ICBwYXRocywgcnMsIGV4cCA9IHNlbGYuZ2V0X3Jlc3VsdF9zdW1tYXJ5KHRlc3RzLCBleHBlY3Rh
dGlvbnMpCi0gICAgICAgICAgICBpZiBleHBlY3RlZDoKLSAgICAgICAgICAgICAgICBycy5hZGQo
c2VsZi5nZXRfcmVzdWx0KCdwYXNzZXMvdGV4dC5odG1sJywgdGVzdF9leHBlY3RhdGlvbnMuUEFT
UyksIGV4cGVjdGVkLCB0ZXN0X2lzX3Nsb3cpCi0gICAgICAgICAgICAgICAgcnMuYWRkKHNlbGYu
Z2V0X3Jlc3VsdCgnZmFpbHVyZXMvZXhwZWN0ZWQvdGltZW91dC5odG1sJywgdGVzdF9leHBlY3Rh
dGlvbnMuVElNRU9VVCksIGV4cGVjdGVkLCB0ZXN0X2lzX3Nsb3cpCi0gICAgICAgICAgICAgICAg
cnMuYWRkKHNlbGYuZ2V0X3Jlc3VsdCgnZmFpbHVyZXMvZXhwZWN0ZWQvY3Jhc2guaHRtbCcsIHRl
c3RfZXhwZWN0YXRpb25zLkNSQVNIKSwgZXhwZWN0ZWQsIHRlc3RfaXNfc2xvdykKLSAgICAgICAg
ICAgIGVsaWYgcGFzc2luZzoKLSAgICAgICAgICAgICAgICBycy5hZGQoc2VsZi5nZXRfcmVzdWx0
KCdwYXNzZXMvdGV4dC5odG1sJyksIGV4cGVjdGVkLCB0ZXN0X2lzX3Nsb3cpCi0gICAgICAgICAg
ICAgICAgcnMuYWRkKHNlbGYuZ2V0X3Jlc3VsdCgnZmFpbHVyZXMvZXhwZWN0ZWQvdGltZW91dC5o
dG1sJyksIGV4cGVjdGVkLCB0ZXN0X2lzX3Nsb3cpCi0gICAgICAgICAgICAgICAgcnMuYWRkKHNl
bGYuZ2V0X3Jlc3VsdCgnZmFpbHVyZXMvZXhwZWN0ZWQvY3Jhc2guaHRtbCcpLCBleHBlY3RlZCwg
dGVzdF9pc19zbG93KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBycy5hZGQo
c2VsZi5nZXRfcmVzdWx0KCdwYXNzZXMvdGV4dC5odG1sJywgdGVzdF9leHBlY3RhdGlvbnMuVElN
RU9VVCksIGV4cGVjdGVkLCB0ZXN0X2lzX3Nsb3cpCi0gICAgICAgICAgICAgICAgcnMuYWRkKHNl
bGYuZ2V0X3Jlc3VsdCgnZmFpbHVyZXMvZXhwZWN0ZWQvdGltZW91dC5odG1sJywgdGVzdF9leHBl
Y3RhdGlvbnMuQ1JBU0gpLCBleHBlY3RlZCwgdGVzdF9pc19zbG93KQotICAgICAgICAgICAgICAg
IHJzLmFkZChzZWxmLmdldF9yZXN1bHQoJ2ZhaWx1cmVzL2V4cGVjdGVkL2NyYXNoLmh0bWwnLCB0
ZXN0X2V4cGVjdGF0aW9ucy5USU1FT1VUKSwgZXhwZWN0ZWQsIHRlc3RfaXNfc2xvdykKLSAgICAg
ICAgICAgIHJldHJ5ID0gcnMKLSAgICAgICAgICAgIGlmIGZsYWt5OgotICAgICAgICAgICAgICAg
IHBhdGhzLCByZXRyeSwgZXhwID0gc2VsZi5nZXRfcmVzdWx0X3N1bW1hcnkodGVzdHMsIGV4cGVj
dGF0aW9ucykKLSAgICAgICAgICAgICAgICByZXRyeS5hZGQoc2VsZi5nZXRfcmVzdWx0KCdwYXNz
ZXMvdGV4dC5odG1sJyksIFRydWUsIHRlc3RfaXNfc2xvdykKLSAgICAgICAgICAgICAgICByZXRy
eS5hZGQoc2VsZi5nZXRfcmVzdWx0KCdmYWlsdXJlcy9leHBlY3RlZC90aW1lb3V0Lmh0bWwnKSwg
VHJ1ZSwgdGVzdF9pc19zbG93KQotICAgICAgICAgICAgICAgIHJldHJ5LmFkZChzZWxmLmdldF9y
ZXN1bHQoJ2ZhaWx1cmVzL2V4cGVjdGVkL2NyYXNoLmh0bWwnKSwgVHJ1ZSwgdGVzdF9pc19zbG93
KQotICAgICAgICAgICAgdW5leHBlY3RlZF9yZXN1bHRzID0gbWFuYWdlci5zdW1tYXJpemVfcmVz
dWx0cyhzZWxmLl9wb3J0LCBleHAsIHJzLCByZXRyeSwgdGVzdF90aW1pbmdzPXt9LCBvbmx5X3Vu
ZXhwZWN0ZWQ9VHJ1ZSwgaW50ZXJydXB0ZWQ9RmFsc2UpCi0gICAgICAgICAgICByZXR1cm4gdW5l
eHBlY3RlZF9yZXN1bHRzCi0KLSAgICAgICAgdGVzdHMgPSBbJ3Bhc3Nlcy90ZXh0Lmh0bWwnLCAn
ZmFpbHVyZXMvZXhwZWN0ZWQvdGltZW91dC5odG1sJywgJ2ZhaWx1cmVzL2V4cGVjdGVkL2NyYXNo
Lmh0bWwnXQotICAgICAgICBleHBlY3RhdGlvbnMgPSAnJwotCi0gICAgICAgIHByaW50ZXIsIGVy
ciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRlcigpCi0KLSAgICAgICAgIyB0ZXN0IGV2ZXJ5dGhpbmcg
cnVubmluZyBhcyBleHBlY3RlZAotICAgICAgICB1ciA9IGdldF91bmV4cGVjdGVkX3Jlc3VsdHMo
ZXhwZWN0ZWQ9VHJ1ZSwgcGFzc2luZz1GYWxzZSwgZmxha3k9RmFsc2UpCi0gICAgICAgIHByaW50
ZXIuX3ByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyh1cikKLSAgICAgICAgc2VsZi5hc3NlcnRFbXB0
eShlcnIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RW1wdHkob3V0KQotCi0gICAgICAgICMgdGVzdCBm
YWlsdXJlcwotICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoKQot
ICAgICAgICB1ciA9IGdldF91bmV4cGVjdGVkX3Jlc3VsdHMoZXhwZWN0ZWQ9RmFsc2UsIHBhc3Np
bmc9RmFsc2UsIGZsYWt5PUZhbHNlKQotICAgICAgICBwcmludGVyLl9wcmludF91bmV4cGVjdGVk
X3Jlc3VsdHModXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RW1wdHkoZXJyKQotICAgICAgICBzZWxm
LmFzc2VydE5vdEVtcHR5KG91dCkKLQotICAgICAgICAjIHRlc3QgdW5leHBlY3RlZCBmbGFreQot
ICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoKQotICAgICAgICB1
ciA9IGdldF91bmV4cGVjdGVkX3Jlc3VsdHMoZXhwZWN0ZWQ9RmFsc2UsIHBhc3Npbmc9RmFsc2Us
IGZsYWt5PVRydWUpCi0gICAgICAgIHByaW50ZXIuX3ByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyh1
cikKLSAgICAgICAgc2VsZi5hc3NlcnRFbXB0eShlcnIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90
RW1wdHkob3V0KQotCi0gICAgICAgIHByaW50ZXIsIGVyciwgb3V0ID0gc2VsZi5nZXRfcHJpbnRl
cigpCi0gICAgICAgIHVyID0gZ2V0X3VuZXhwZWN0ZWRfcmVzdWx0cyhleHBlY3RlZD1GYWxzZSwg
cGFzc2luZz1GYWxzZSwgZmxha3k9RmFsc2UpCi0gICAgICAgIHByaW50ZXIuX3ByaW50X3VuZXhw
ZWN0ZWRfcmVzdWx0cyh1cikKLSAgICAgICAgc2VsZi5hc3NlcnRFbXB0eShlcnIpCi0gICAgICAg
IHNlbGYuYXNzZXJ0Tm90RW1wdHkob3V0KQotCi0gICAgICAgIGV4cGVjdGF0aW9ucyA9ICIiIgot
QlVHWCA6IGZhaWx1cmVzL2V4cGVjdGVkL2NyYXNoLmh0bWwgPSBDUkFTSAotQlVHWCA6IGZhaWx1
cmVzL2V4cGVjdGVkL3RpbWVvdXQuaHRtbCA9IFRJTUVPVVQKLSIiIgotICAgICAgICBwcmludGVy
LCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoKQotICAgICAgICB1ciA9IGdldF91bmV4cGVj
dGVkX3Jlc3VsdHMoZXhwZWN0ZWQ9RmFsc2UsIHBhc3Npbmc9RmFsc2UsIGZsYWt5PUZhbHNlKQot
ICAgICAgICBwcmludGVyLl9wcmludF91bmV4cGVjdGVkX3Jlc3VsdHModXIpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RW1wdHkoZXJyKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVtcHR5KG91dCkKLQot
ICAgICAgICBwcmludGVyLCBlcnIsIG91dCA9IHNlbGYuZ2V0X3ByaW50ZXIoKQotICAgICAgICB1
ciA9IGdldF91bmV4cGVjdGVkX3Jlc3VsdHMoZXhwZWN0ZWQ9RmFsc2UsIHBhc3Npbmc9VHJ1ZSwg
Zmxha3k9RmFsc2UpCi0gICAgICAgIHByaW50ZXIuX3ByaW50X3VuZXhwZWN0ZWRfcmVzdWx0cyh1
cikKLSAgICAgICAgc2VsZi5hc3NlcnRFbXB0eShlcnIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90
RW1wdHkob3V0KQotCi0gICAgZGVmIHRlc3RfcHJpbnRfdW5leHBlY3RlZF9yZXN1bHRzX2J1aWxk
Ym90KHNlbGYpOgotICAgICAgICAjIEZJWE1FOiBUZXN0IHRoYXQgcHJpbnRfdW5leHBlY3RlZF9y
ZXN1bHRzKCkgcHJvZHVjZXMgdGhlIHByaW50ZXIgdGhlCi0gICAgICAgICMgYnVpbGRib3QgaXMg
ZXhwZWN0aW5nLgotICAgICAgICBwYXNzCi0KICAgICBkZWYgdGVzdF90ZXN0X3N0YXR1c19saW5l
KHNlbGYpOgotICAgICAgICBwcmludGVyLCBfLCBfID0gc2VsZi5nZXRfcHJpbnRlcigpCisgICAg
ICAgIHByaW50ZXIsIF8gPSBzZWxmLmdldF9wcmludGVyKCkKICAgICAgICAgcHJpbnRlci5fbWV0
ZXIubnVtYmVyX29mX2NvbHVtbnMgPSBsYW1iZGE6IDgwCiAgICAgICAgIGFjdHVhbCA9IHByaW50
ZXIuX3Rlc3Rfc3RhdHVzX2xpbmUoJ2Zhc3QvZG9tL0hUTUxGb3JtRWxlbWVudC9hc3NvY2lhdGVk
LWVsZW1lbnRzLWFmdGVyLWluZGV4LWFzc2VydGlvbi1mYWlsMS5odG1sJywgJyBwYXNzZWQnKQog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDgwLCBsZW4oYWN0dWFsKSkKQEAgLTI4Miw3ICsxNzIs
NyBAQCBCVUdYIDogZmFpbHVyZXMvZXhwZWN0ZWQvdGltZW91dC5odG1sID0gVElNRU9VVAogICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgJ1swLzBdIGFzc29jaWF0ZWQtZWxlbWVudHMt
YWZ0ZXItaW5kZXgtYXNzZXJ0aW9uLWZhaWwxLmh0bWwgcGFzc2VkJykKIAogICAgIGRlZiB0ZXN0
X2RldGFpbHMoc2VsZik6Ci0gICAgICAgIHByaW50ZXIsIGVyciwgXyA9IHNlbGYuZ2V0X3ByaW50
ZXIoWyctLWRldGFpbHMnXSkKKyAgICAgICAgcHJpbnRlciwgZXJyID0gc2VsZi5nZXRfcHJpbnRl
cihbJy0tZGV0YWlscyddKQogICAgICAgICByZXN1bHQgPSBzZWxmLmdldF9yZXN1bHQoJ3Bhc3Nl
cy9pbWFnZS5odG1sJykKICAgICAgICAgcHJpbnRlci5wcmludF9zdGFydGVkX3Rlc3QoJ3Bhc3Nl
cy9pbWFnZS5odG1sJykKICAgICAgICAgcHJpbnRlci5wcmludF9maW5pc2hlZF90ZXN0KHJlc3Vs
dCwgZXhwZWN0ZWQ9RmFsc2UsIGV4cF9zdHI9JycsIGdvdF9zdHI9JycpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>