<?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>92806</bug_id>
          
          <creation_ts>2012-07-31 16:12:35 -0700</creation_ts>
          <short_desc>nrwt: move actual test-running code into layout_test_runner.py</short_desc>
          <delta_ts>2012-07-31 18:52:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>92805</dependson>
          <blocked>89267</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</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>683590</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-31 16:12:35 -0700</bug_when>
    <thetext>nrwt: move actual test-running code into layout_test_runner.py</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683595</commentid>
    <comment_count>1</comment_count>
      <attachid>155665</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-31 16:16:22 -0700</bug_when>
    <thetext>Created attachment 155665
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683615</commentid>
    <comment_count>2</comment_count>
      <attachid>155665</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-07-31 16:30:59 -0700</bug_when>
    <thetext>Comment on attachment 155665
Patch

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

We&apos;ve got so much yak!

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:87
&gt; +        &quot;&quot;&quot;Runs the tests.

This line is pretty much useless.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:93
&gt; +              typed Ctrl^C

Why are we indenting by 2 space here?

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:99
&gt; +              of each thread with &apos;name&apos;, &apos;num_tests&apos;, &apos;total_time&apos; properties
&gt; +            test_timings is a list of timings for each sharded subdirectory
&gt; +              of the form [time, directory_name, num_tests]
&gt; +            individual_test_timings is a list of run times for each test
&gt; +              in the form {filename:filename, test_run_time:test_run_time}

Ditto.

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:113
&gt; +        self._all_results = []
&gt; +        self._group_stats = {}
&gt; +        self._worker_stats = {}
&gt; +        self._has_http_lock = False
&gt; +        self._remaining_locked_shards = []

Do we really need to re-initialize these variables again?

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:142
&gt; +        def worker_factory(worker_connection):
&gt; +            results_directory = self._results_directory
&gt; +            if self._retrying:
&gt; +                self._filesystem.maybe_make_directory(self._filesystem.join(self._results_directory, &apos;retries&apos;))
&gt; +                results_directory = self._filesystem.join(self._results_directory, &apos;retries&apos;)
&gt; +            return Worker(worker_connection, results_directory, self._options)

It&apos;s probably better to make this is a private method given that this is a massive function already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683715</commentid>
    <comment_count>3</comment_count>
      <attachid>155665</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-31 18:09:54 -0700</bug_when>
    <thetext>Comment on attachment 155665
Patch

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:87
&gt;&gt; +        &quot;&quot;&quot;Runs the tests.
&gt; 
&gt; This line is pretty much useless.

will delete.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:93
&gt;&gt; +              typed Ctrl^C
&gt; 
&gt; Why are we indenting by 2 space here?

no particular reason; this has been this way forever (probably going back to when we used two-space indents in the chromium repo). will fix.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:99
&gt;&gt; +              in the form {filename:filename, test_run_time:test_run_time}
&gt; 
&gt; Ditto.

will fix.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:113
&gt;&gt; +        self._remaining_locked_shards = []
&gt; 
&gt; Do we really need to re-initialize these variables again?

yes, because this routine gets called twice.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py:142
&gt;&gt; +            return Worker(worker_connection, results_directory, self._options)
&gt; 
&gt; It&apos;s probably better to make this is a private method given that this is a massive function already.

will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>683742</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-31 18:52:07 -0700</bug_when>
    <thetext>Committed r124281: &lt;http://trac.webkit.org/changeset/124281&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155665</attachid>
            <date>2012-07-31 16:16:22 -0700</date>
            <delta_ts>2012-07-31 18:09:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-92806-20120731161605.patch</filename>
            <type>text/plain</type>
            <size>53319</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0MjYxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMzljZDM3NGJlMWVjOTk1NzBiNDliNmI1MTFlOTBkNGVh
N2FiOGFhYS4uODIzZDk0NzlhNjA2MmU5NTYxNDE0YjU1YjA4MWQ0MDRiYWU5NDZhOSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDkx
IEBACiAyMDEyLTA3LTMxICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCisg
ICAgICAgIG5yd3Q6IG1vdmUgYWN0dWFsIHRlc3QtcnVubmluZyBjb2RlIGludG8gbGF5b3V0X3Rl
c3RfcnVubmVyLnB5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MjgwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgaXMgdGhlIGZpbmFsIHBhdGNoIGluIG1hbmFnZXItcmVmYWN0b3Jpbmcgc2VyaWVz
IChmb3Igbm93KS4KKyAgICAgICAgVGhpcyBtb3ZlcyBhbGwgb2YgdGhlIGxvZ2ljIHRvIGFjdHVh
bGx5IHJ1biB0aGUgdGVzdHMgaW50bworICAgICAgICBsYXlvdXRfdGVzdF9ydW5uZXIgKGluIGEg
bmV3IExheW91dFRlc3RSdW5uZXIpIGNsYXNzLiBOb3cKKyAgICAgICAgdGhlIG1lY2hhbmljcyBv
ZiBhY3R1YWxseSBleGVjdXRpbmcgYWxsIG9mICB0aGUgdGVzdHMgYXJlCisgICAgICAgIGNvbnRh
aW5lZCBpbiBvbmUgZmlsZSAob2YgY291cnNlIHRoZSBhY3R1YWwgd29yayBvZiB0YWxraW5nIHRv
CisgICAgICAgIERSVC9XVFIgYW5kIGRpZmYnaW5nIHRoZSByZXN1bHRzIGlzIHN0aWxsIGluIHNp
bmdsZV90ZXN0X3J1bm5lcikuCisKKyAgICAgICAgTm93IG1hbmFnZXIgaXMgbGVmdCB3aXRoIHNl
dHRpbmcgdXAgYW5kIHRlYXJpbmcgZG93biB0aGUgdGVzdAorICAgICAgICBlbnZpcm9ubWVudCwg
ZmluZGluZyB0aGUgdGVzdHMgdG8gcnVuLCBhbmQgcHJvY2Vzc2luZyB0aGUKKyAgICAgICAgcmVz
dWx0cyBvZiB0aGUgdGVzdHMsIHdoaWNoIGlzIGEgcHJldHR5IG1hbmFnYWJsZSBhbW91bnQgb2Yg
Y29kZQorICAgICAgICAobm8gcHVuIGludGVuZGVkKS4KKworICAgICAgICBUaGUgdW5pdCB0ZXN0
cyBmb3IgbWFuYWdlciB3ZXJlIHNwbGl0IGluIHR3byBhbmQgYWxsIG9mIHRoZQorICAgICAgICBy
dW5uZXItc3BlY2lmaWMgdGVzdHMgbW92ZWQgaW50byBsYXlvdXRfdGVzdF9ydW5uZXJfdW5pdHRl
c3QuCisgICAgICAgIFRoZXkgd2VyZSBzaWduaWZpY2FudGx5IGNsZWFuZWQgdXAgdG8gYmUgZWFz
aWVyIHRvIHJlYWQgYW5kCisgICAgICAgIG1haW50YWluIGFzIGEgcGFydCBvZiB0aGlzLgorCisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0
X3Rlc3RfcnVubmVyLnB5OgorICAgICAgICAoVGVzdFJ1bkludGVycnVwdGVkRXhjZXB0aW9uKToK
KyAgICAgICAgKFRlc3RSdW5JbnRlcnJ1cHRlZEV4Y2VwdGlvbi5fX2luaXRfXyk6CisgICAgICAg
IChUZXN0UnVuSW50ZXJydXB0ZWRFeGNlcHRpb24uX19yZWR1Y2VfXyk6CisgICAgICAgIChMYXlv
dXRUZXN0UnVubmVyKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXIuX19pbml0X18pOgorICAg
ICAgICAoTGF5b3V0VGVzdFJ1bm5lci50ZXN0X2tleSk6CisgICAgICAgIChMYXlvdXRUZXN0UnVu
bmVyLnJ1bl90ZXN0cyk6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyLnJ1bl90ZXN0cy53b3Jr
ZXJfZmFjdG9yeSk6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyLnJ1bl90ZXN0cy5pbnN0ZWFk
KToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXIuX21hcmtfaW50ZXJydXB0ZWRfdGVzdHNfYXNf
c2tpcHBlZCk6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyLl9pbnRlcnJ1cHRfaWZfYXRfZmFp
bHVyZV9saW1pdHMpOgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lci5faW50ZXJydXB0X2lmX2F0
X2ZhaWx1cmVfbGltaXRzLmludGVycnVwdF9pZl9hdF9mYWlsdXJlX2xpbWl0KToKKyAgICAgICAg
KExheW91dFRlc3RSdW5uZXIuX3VwZGF0ZV9zdW1tYXJ5X3dpdGhfcmVzdWx0KToKKyAgICAgICAg
KExheW91dFRlc3RSdW5uZXIuc3RhcnRfc2VydmVyc193aXRoX2xvY2spOgorICAgICAgICAoTGF5
b3V0VGVzdFJ1bm5lci5zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKToKKyAgICAgICAgKExheW91dFRl
c3RSdW5uZXIuaGFuZGxlKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXIuX2hhbmRsZV9zdGFy
dGVkX3Rlc3QpOgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lci5faGFuZGxlX2ZpbmlzaGVkX3Rl
c3RfbGlzdCk6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVyLl9oYW5kbGVfZmluaXNoZWRfdGVz
dF9saXN0LmZpbmQpOgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lci5faGFuZGxlX2ZpbmlzaGVk
X3Rlc3QpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xs
ZXJzL2xheW91dF90ZXN0X3J1bm5lcl91bml0dGVzdC5weToKKyAgICAgICAgKEZha2VQcmludGVy
KToKKyAgICAgICAgKEZha2VQcmludGVyLnByaW50X3dvcmtlcnNfYW5kX3NoYXJkcyk6CisgICAg
ICAgIChGYWtlUHJpbnRlci5wcmludF9maW5pc2hlZF90ZXN0KToKKyAgICAgICAgKEZha2VQcmlu
dGVyLndyaXRlKToKKyAgICAgICAgKEZha2VQcmludGVyLndyaXRlX3VwZGF0ZSk6CisgICAgICAg
IChGYWtlUHJpbnRlci5mbHVzaCk6CisgICAgICAgIChMb2NrQ2hlY2tpbmdSdW5uZXIpOgorICAg
ICAgICAoTG9ja0NoZWNraW5nUnVubmVyLl9faW5pdF9fKToKKyAgICAgICAgKExvY2tDaGVja2lu
Z1J1bm5lci5oYW5kbGVfZmluaXNoZWRfbGlzdCk6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVy
VGVzdHMpOgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lclRlc3RzLl9ydW5uZXIpOgorICAgICAg
ICAoTGF5b3V0VGVzdFJ1bm5lclRlc3RzLl9yZXN1bHRfc3VtbWFyeSk6CisgICAgICAgIChMYXlv
dXRUZXN0UnVubmVyVGVzdHMuX3J1bl90ZXN0cyk6CisgICAgICAgIChMYXlvdXRUZXN0UnVubmVy
VGVzdHMudGVzdF9odHRwX2xvY2tpbmcpOgorICAgICAgICAoTGF5b3V0VGVzdFJ1bm5lclRlc3Rz
LnRlc3RfcGVyZl9sb2NraW5nKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXJUZXN0cy50ZXN0
X2ludGVycnVwdF9pZl9hdF9mYWlsdXJlX2xpbWl0cyk6CisgICAgICAgIChMYXlvdXRUZXN0UnVu
bmVyVGVzdHMudGVzdF91cGRhdGVfc3VtbWFyeV93aXRoX3Jlc3VsdCk6CisgICAgICAgIChMYXlv
dXRUZXN0UnVubmVyVGVzdHMudGVzdF9zZXJ2ZXJzX3N0YXJ0ZWQpOgorICAgICAgICAoTGF5b3V0
VGVzdFJ1bm5lclRlc3RzLnRlc3Rfc2VydmVyc19zdGFydGVkLnN0YXJ0X2h0dHBfc2VydmVyKToK
KyAgICAgICAgKExheW91dFRlc3RSdW5uZXJUZXN0cy50ZXN0X3NlcnZlcnNfc3RhcnRlZC5zdGFy
dF93ZWJzb2NrZXRfc2VydmVyKToKKyAgICAgICAgKExheW91dFRlc3RSdW5uZXJUZXN0cy50ZXN0
X3NlcnZlcnNfc3RhcnRlZC5zdG9wX2h0dHBfc2VydmVyKToKKyAgICAgICAgKExheW91dFRlc3RS
dW5uZXJUZXN0cy50ZXN0X3NlcnZlcnNfc3RhcnRlZC5zdG9wX3dlYnNvY2tldF9zZXJ2ZXIpOgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFn
ZXIucHk6CisgICAgICAgIChzdW1tYXJpemVfcmVzdWx0cyk6CisgICAgICAgIChNYW5hZ2VyLl9f
aW5pdF9fKToKKyAgICAgICAgKE1hbmFnZXIuX2lzX2h0dHBfdGVzdCk6CisgICAgICAgIChNYW5h
Z2VyKToKKyAgICAgICAgKE1hbmFnZXIuX2lzX3dlYnNvY2tldF90ZXN0KToKKyAgICAgICAgKE1h
bmFnZXIuX3dlYnNvY2tldF90ZXN0cyk6CisgICAgICAgIChNYW5hZ2VyLl9wcmVwYXJlX2xpc3Rz
KToKKyAgICAgICAgKE1hbmFnZXIuX2lzX3JlZl90ZXN0KToKKyAgICAgICAgKE1hbmFnZXIucnVu
KToKKyAgICAgICAgKE1hbmFnZXIuX3J1bl90ZXN0cyk6CisgICAgICAgIChNYW5hZ2VyLl9sb29r
X2Zvcl9uZXdfY3Jhc2hfbG9ncyk6CisgICAgICAgIChNYW5hZ2VyLl9zaG93X3Jlc3VsdHNfaHRt
bF9maWxlKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9s
bGVycy9tYW5hZ2VyX3VuaXR0ZXN0LnB5OgorICAgICAgICAoTWFuYWdlclRlc3QudGVzdF9sb29r
X2Zvcl9uZXdfY3Jhc2hfbG9ncyk6CisgICAgICAgIChSZXN1bHRTdW1tYXJ5VGVzdC5zdW1tYXJp
emVkX3Jlc3VsdHMpOgorICAgICAgICAoUmVzdWx0U3VtbWFyeVRlc3QudGVzdF9zdW1tYXJpemVk
X3Jlc3VsdHNfd29udGZpeCk6CisKKzIwMTItMDctMzEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBj
aHJvbWl1bS5vcmc+CisKICAgICAgICAgbnJ3dDogbW92ZSBzaGFyZGluZyBsb2dpYyBpbnRvIGxh
eW91dF90ZXN0X3J1bm5lci5weQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTI4MDUKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVyLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbGF5b3V0X3Rlc3RfcnVubmVy
LnB5CmluZGV4IGY0ZGIzNzFlNzUyOGE4ZmI0NGFhNWM5ZDYxMGQzZDZiNGQ5OWQzYTAuLmYyNjkx
ODNkYzk5Y2Q5YzIzYTgwYmY1OWQ3MThkY2Q5MDAzMDMwZGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5l
ci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVy
cy9sYXlvdXRfdGVzdF9ydW5uZXIucHkKQEAgLTMyLDE0ICszMiwyNDEgQEAgaW1wb3J0IHJlCiBp
bXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdGltZQogCitmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBv
cnQgbWVzc2FnZV9wb29sCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycyBp
bXBvcnQgc2luZ2xlX3Rlc3RfcnVubmVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2Rl
bHMgaW1wb3J0IHRlc3RfZXhwZWN0YXRpb25zCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5t
b2RlbHMgaW1wb3J0IHRlc3RfZmFpbHVyZXMKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1v
ZGVscyBpbXBvcnQgdGVzdF9yZXN1bHRzCitmcm9tIHdlYmtpdHB5LnRvb2wgaW1wb3J0IGdyYW1t
YXIKIAogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKIAorVGVzdEV4cGVj
dGF0aW9ucyA9IHRlc3RfZXhwZWN0YXRpb25zLlRlc3RFeHBlY3RhdGlvbnMKKworIyBFeHBvcnQg
dGhpcyBzbyBjYWxsZXJzIGRvbid0IG5lZWQgdG8ga25vdyBhYm91dCBtZXNzYWdlIHBvb2xzLgor
V29ya2VyRXhjZXB0aW9uID0gbWVzc2FnZV9wb29sLldvcmtlckV4Y2VwdGlvbgorCisKK2NsYXNz
IFRlc3RSdW5JbnRlcnJ1cHRlZEV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICIiIlJhaXNlZCB3
aGVuIGEgdGVzdCBydW4gc2hvdWxkIGJlIHN0b3BwZWQgaW1tZWRpYXRlbHkuIiIiCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIHJlYXNvbik6CisgICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxm
KQorICAgICAgICBzZWxmLnJlYXNvbiA9IHJlYXNvbgorICAgICAgICBzZWxmLm1zZyA9IHJlYXNv
bgorCisgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9fY2xh
c3NfXywgKHNlbGYucmVhc29uLCkKKworCitjbGFzcyBMYXlvdXRUZXN0UnVubmVyKG9iamVjdCk6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9wdGlvbnMsIHBvcnQsIHByaW50ZXIsIHJlc3VsdHNf
ZGlyZWN0b3J5LCBleHBlY3RhdGlvbnMsIHRlc3RfaXNfc2xvd19mbik6CisgICAgICAgIHNlbGYu
X29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNl
bGYuX3ByaW50ZXIgPSBwcmludGVyCisgICAgICAgIHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5ID0g
cmVzdWx0c19kaXJlY3RvcnkKKyAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25zID0gTm9uZQorICAg
ICAgICBzZWxmLl90ZXN0X2lzX3Nsb3cgPSB0ZXN0X2lzX3Nsb3dfZm4KKyAgICAgICAgc2VsZi5f
c2hhcmRlciA9IFNoYXJkZXIoc2VsZi5fcG9ydC5zcGxpdF90ZXN0LCBzZWxmLl9wb3J0LlRFU1Rf
UEFUSF9TRVBBUkFUT1IsIHNlbGYuX29wdGlvbnMubWF4X2xvY2tlZF9zaGFyZHMpCisKKyAgICAg
ICAgc2VsZi5fY3VycmVudF9yZXN1bHRfc3VtbWFyeSA9IE5vbmUKKyAgICAgICAgc2VsZi5fbmVl
ZHNfaHR0cCA9IE5vbmUKKyAgICAgICAgc2VsZi5fbmVlZHNfd2Vic29ja2V0cyA9IE5vbmUKKyAg
ICAgICAgc2VsZi5fcmV0cnlpbmcgPSBGYWxzZQorICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzX2xp
c3QgPSBbXQorICAgICAgICBzZWxmLl9hbGxfcmVzdWx0cyA9IFtdCisgICAgICAgIHNlbGYuX2dy
b3VwX3N0YXRzID0ge30KKyAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRzID0ge30KKyAgICAgICAg
c2VsZi5fZmlsZXN5c3RlbSA9IHNlbGYuX3BvcnQuaG9zdC5maWxlc3lzdGVtCisKKyAgICBkZWYg
dGVzdF9rZXkoc2VsZiwgdGVzdF9uYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NoYXJkZXIu
dGVzdF9rZXkodGVzdF9uYW1lKQorCisgICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCB0ZXN0X2lucHV0
cywgZXhwZWN0YXRpb25zLCByZXN1bHRfc3VtbWFyeSwgbnVtX3dvcmtlcnMsIG5lZWRzX2h0dHAs
IG5lZWRzX3dlYnNvY2tldHMsIHJldHJ5aW5nKToKKyAgICAgICAgIiIiUnVucyB0aGUgdGVzdHMu
CisKKyAgICAgICAgUmV0dXJuOiBBIHR1cGxlIChpbnRlcnJ1cHRlZCwga2V5Ym9hcmRfaW50ZXJy
dXB0ZWQsIHRocmVhZF90aW1pbmdzLAorICAgICAgICAgICAgdGVzdF90aW1pbmdzLCBpbmRpdmlk
dWFsX3Rlc3RfdGltaW5ncykKKyAgICAgICAgICAgIGludGVycnVwdGVkIGlzIHdoZXRoZXIgdGhl
IHJ1biB3YXMgaW50ZXJydXB0ZWQKKyAgICAgICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkIGlz
IHdoZXRoZXIgdGhlIGludGVycnVwdGlvbiB3YXMgYmVjYXVzZSBzb21lb25lCisgICAgICAgICAg
ICAgIHR5cGVkIEN0cmxeQworICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3MgaXMgYSBsaXN0IG9m
IGRpY3RzIHdpdGggdGhlIHRvdGFsIHJ1bnRpbWUKKyAgICAgICAgICAgICAgb2YgZWFjaCB0aHJl
YWQgd2l0aCAnbmFtZScsICdudW1fdGVzdHMnLCAndG90YWxfdGltZScgcHJvcGVydGllcworICAg
ICAgICAgICAgdGVzdF90aW1pbmdzIGlzIGEgbGlzdCBvZiB0aW1pbmdzIGZvciBlYWNoIHNoYXJk
ZWQgc3ViZGlyZWN0b3J5CisgICAgICAgICAgICAgIG9mIHRoZSBmb3JtIFt0aW1lLCBkaXJlY3Rv
cnlfbmFtZSwgbnVtX3Rlc3RzXQorICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3Mg
aXMgYSBsaXN0IG9mIHJ1biB0aW1lcyBmb3IgZWFjaCB0ZXN0CisgICAgICAgICAgICAgIGluIHRo
ZSBmb3JtIHtmaWxlbmFtZTpmaWxlbmFtZSwgdGVzdF9ydW5fdGltZTp0ZXN0X3J1bl90aW1lfQor
ICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IHRvIHBvcHVsYXRlIHdp
dGggdGhlIHJlc3VsdHMKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2N1cnJlbnRfcmVzdWx0
X3N1bW1hcnkgPSByZXN1bHRfc3VtbWFyeQorICAgICAgICBzZWxmLl9leHBlY3RhdGlvbnMgPSBl
eHBlY3RhdGlvbnMKKyAgICAgICAgc2VsZi5fbmVlZHNfaHR0cCA9IG5lZWRzX2h0dHAKKyAgICAg
ICAgc2VsZi5fbmVlZHNfd2Vic29ja2V0cyA9IG5lZWRzX3dlYnNvY2tldHMKKyAgICAgICAgc2Vs
Zi5fcmV0cnlpbmcgPSByZXRyeWluZworICAgICAgICBzZWxmLl90ZXN0X2ZpbGVzX2xpc3QgPSBb
dGVzdF9pbnB1dC50ZXN0X25hbWUgZm9yIHRlc3RfaW5wdXQgaW4gdGVzdF9pbnB1dHNdCisKKyAg
ICAgICAgc2VsZi5fYWxsX3Jlc3VsdHMgPSBbXQorICAgICAgICBzZWxmLl9ncm91cF9zdGF0cyA9
IHt9CisgICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0cyA9IHt9CisgICAgICAgIHNlbGYuX2hhc19o
dHRwX2xvY2sgPSBGYWxzZQorICAgICAgICBzZWxmLl9yZW1haW5pbmdfbG9ja2VkX3NoYXJkcyA9
IFtdCisKKyAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBGYWxzZQorICAgICAgICBpbnRl
cnJ1cHRlZCA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUoJ1No
YXJkaW5nIHRlc3RzIC4uLicpCisgICAgICAgIGxvY2tlZF9zaGFyZHMsIHVubG9ja2VkX3NoYXJk
cyA9IHNlbGYuX3NoYXJkZXIuc2hhcmRfdGVzdHModGVzdF9pbnB1dHMsIGludChzZWxmLl9vcHRp
b25zLmNoaWxkX3Byb2Nlc3NlcyksIHNlbGYuX29wdGlvbnMuZnVsbHlfcGFyYWxsZWwsIHNlbGYu
X29wdGlvbnMuc2hhcmRfcmVmX3Rlc3RzKQorCisgICAgICAgICMgRklYTUU6IFdlIGRvbid0IGhh
dmUgYSBnb29kIHdheSB0byBjb29yZGluYXRlIHRoZSB3b3JrZXJzIHNvIHRoYXQKKyAgICAgICAg
IyB0aGV5IGRvbid0IHRyeSB0byBydW4gdGhlIHNoYXJkcyB0aGF0IG5lZWQgYSBsb2NrIGlmIHdl
IGRvbid0IGFjdHVhbGx5CisgICAgICAgICMgaGF2ZSB0aGUgbG9jay4gVGhlIGVhc2llc3Qgc29s
dXRpb24gYXQgdGhlIG1vbWVudCBpcyB0byBncmFiIHRoZQorICAgICAgICAjIGxvY2sgYXQgdGhl
IGJlZ2lubmluZyBvZiB0aGUgcnVuLCBhbmQgdGhlbiBydW4gYWxsIG9mIHRoZSBsb2NrZWQKKyAg
ICAgICAgIyBzaGFyZHMgZmlyc3QuIFRoaXMgbWluaW1pemVzIHRoZSB0aW1lIHNwZW50IGhvbGRp
bmcgdGhlIGxvY2ssIGJ1dAorICAgICAgICAjIG1lYW5zIHRoYXQgd2Ugd29uJ3QgYmUgcnVubmlu
ZyB0ZXN0cyB3aGlsZSB3ZSdyZSB3YWl0aW5nIGZvciB0aGUgbG9jay4KKyAgICAgICAgIyBJZiB0
aGlzIGJlY29tZXMgYSBwcm9ibGVtIGluIHByYWN0aWNlIHdlJ2xsIG5lZWQgdG8gY2hhbmdlIHRo
aXMuCisKKyAgICAgICAgYWxsX3NoYXJkcyA9IGxvY2tlZF9zaGFyZHMgKyB1bmxvY2tlZF9zaGFy
ZHMKKyAgICAgICAgc2VsZi5fcmVtYWluaW5nX2xvY2tlZF9zaGFyZHMgPSBsb2NrZWRfc2hhcmRz
CisgICAgICAgIGlmIGxvY2tlZF9zaGFyZHMgYW5kIHNlbGYuX29wdGlvbnMuaHR0cDoKKyAgICAg
ICAgICAgIHNlbGYuc3RhcnRfc2VydmVyc193aXRoX2xvY2soMiAqIG1pbihudW1fd29ya2Vycywg
bGVuKGxvY2tlZF9zaGFyZHMpKSkKKworICAgICAgICBudW1fd29ya2VycyA9IG1pbihudW1fd29y
a2VycywgbGVuKGFsbF9zaGFyZHMpKQorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3dvcmtl
cnNfYW5kX3NoYXJkcyhudW1fd29ya2VycywgbGVuKGFsbF9zaGFyZHMpLCBsZW4obG9ja2VkX3No
YXJkcykpCisKKyAgICAgICAgZGVmIHdvcmtlcl9mYWN0b3J5KHdvcmtlcl9jb25uZWN0aW9uKToK
KyAgICAgICAgICAgIHJlc3VsdHNfZGlyZWN0b3J5ID0gc2VsZi5fcmVzdWx0c19kaXJlY3RvcnkK
KyAgICAgICAgICAgIGlmIHNlbGYuX3JldHJ5aW5nOgorICAgICAgICAgICAgICAgIHNlbGYuX2Zp
bGVzeXN0ZW0ubWF5YmVfbWFrZV9kaXJlY3Rvcnkoc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYu
X3Jlc3VsdHNfZGlyZWN0b3J5LCAncmV0cmllcycpKQorICAgICAgICAgICAgICAgIHJlc3VsdHNf
ZGlyZWN0b3J5ID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5
LCAncmV0cmllcycpCisgICAgICAgICAgICByZXR1cm4gV29ya2VyKHdvcmtlcl9jb25uZWN0aW9u
LCByZXN1bHRzX2RpcmVjdG9yeSwgc2VsZi5fb3B0aW9ucykKKworICAgICAgICBpZiBzZWxmLl9v
cHRpb25zLmRyeV9ydW46CisgICAgICAgICAgICByZXR1cm4gKGtleWJvYXJkX2ludGVycnVwdGVk
LCBpbnRlcnJ1cHRlZCwgc2VsZi5fd29ya2VyX3N0YXRzLnZhbHVlcygpLCBzZWxmLl9ncm91cF9z
dGF0cywgc2VsZi5fYWxsX3Jlc3VsdHMpCisKKyAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91
cGRhdGUoJ1N0YXJ0aW5nICVzIC4uLicgJSBncmFtbWFyLnBsdXJhbGl6ZSgnd29ya2VyJywgbnVt
X3dvcmtlcnMpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggbWVzc2FnZV9wb29s
LmdldChzZWxmLCB3b3JrZXJfZmFjdG9yeSwgbnVtX3dvcmtlcnMsIHNlbGYuX3BvcnQud29ya2Vy
X3N0YXJ0dXBfZGVsYXlfc2VjcygpLCBzZWxmLl9wb3J0Lmhvc3QpIGFzIHBvb2w6CisgICAgICAg
ICAgICAgICAgcG9vbC5ydW4oKCd0ZXN0X2xpc3QnLCBzaGFyZC5uYW1lLCBzaGFyZC50ZXN0X2lu
cHV0cykgZm9yIHNoYXJkIGluIGFsbF9zaGFyZHMpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZElu
dGVycnVwdDoKKyAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIuZmx1c2goKQorICAgICAgICAgICAg
c2VsZi5fcHJpbnRlci53cml0ZSgnSW50ZXJydXB0ZWQsIGV4aXRpbmcgLi4uJykKKyAgICAgICAg
ICAgIGtleWJvYXJkX2ludGVycnVwdGVkID0gVHJ1ZQorICAgICAgICBleGNlcHQgVGVzdFJ1bklu
dGVycnVwdGVkRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgX2xvZy53YXJuaW5nKGUucmVhc29u
KQorICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSBUcnVlCisgICAgICAgIGV4Y2VwdCBFeGNlcHRp
b24sIGU6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCclcygiJXMiKSByYWlzZWQsIGV4aXRpbmcn
ICUgKGUuX19jbGFzc19fLl9fbmFtZV9fLCBzdHIoZSkpKQorICAgICAgICAgICAgcmFpc2UKKyAg
ICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygp
CisKKyAgICAgICAgIyBGSVhNRTogc2hvdWxkIHRoaXMgYmUgYSBjbGFzcyBpbnN0ZWFkIG9mIGEg
dHVwbGU/CisgICAgICAgIHJldHVybiAoaW50ZXJydXB0ZWQsIGtleWJvYXJkX2ludGVycnVwdGVk
LCBzZWxmLl93b3JrZXJfc3RhdHMudmFsdWVzKCksIHNlbGYuX2dyb3VwX3N0YXRzLCBzZWxmLl9h
bGxfcmVzdWx0cykKKworICAgIGRlZiBfbWFya19pbnRlcnJ1cHRlZF90ZXN0c19hc19za2lwcGVk
KHNlbGYsIHJlc3VsdF9zdW1tYXJ5KToKKyAgICAgICAgZm9yIHRlc3RfbmFtZSBpbiBzZWxmLl90
ZXN0X2ZpbGVzX2xpc3Q6CisgICAgICAgICAgICBpZiB0ZXN0X25hbWUgbm90IGluIHJlc3VsdF9z
dW1tYXJ5LnJlc3VsdHM6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9yZXN1bHRzLlRl
c3RSZXN1bHQodGVzdF9uYW1lLCBbdGVzdF9mYWlsdXJlcy5GYWlsdXJlRWFybHlFeGl0KCldKQor
ICAgICAgICAgICAgICAgICMgRklYTUU6IFdlIHByb2JhYmx5IG5lZWQgdG8gbG9vcCBoZXJlIGlm
IHRoZXJlIGFyZSBtdWx0aXBsZSBpdGVyYXRpb25zLgorICAgICAgICAgICAgICAgICMgRklYTUU6
IEFsc28sIHRoZXNlIHJlc3VsdHMgYXJlIHJlYWxseSBuZWl0aGVyIGV4cGVjdGVkIG5vciB1bmV4
cGVjdGVkLiBXZSBwcm9iYWJseQorICAgICAgICAgICAgICAgICMgbmVlZCBhIHRoaXJkIHR5cGUg
b2YgcmVzdWx0LgorICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LmFkZChyZXN1bHQsIGV4
cGVjdGVkPUZhbHNlLCB0ZXN0X2lzX3Nsb3c9c2VsZi5fdGVzdF9pc19zbG93KHRlc3RfbmFtZSkp
CisKKyAgICBkZWYgX2ludGVycnVwdF9pZl9hdF9mYWlsdXJlX2xpbWl0cyhzZWxmLCByZXN1bHRf
c3VtbWFyeSk6CisgICAgICAgICMgTm90ZTogVGhlIG1lc3NhZ2VzIGluIHRoaXMgbWV0aG9kIGFy
ZSBjb25zdHJ1Y3RlZCB0byBtYXRjaCBvbGQtcnVuLXdlYmtpdC10ZXN0cworICAgICAgICAjIHNv
IHRoYXQgZXhpc3RpbmcgYnVpbGRib3QgZ3JlcCBydWxlcyB3b3JrLgorICAgICAgICBkZWYgaW50
ZXJydXB0X2lmX2F0X2ZhaWx1cmVfbGltaXQobGltaXQsIGZhaWx1cmVfY291bnQsIHJlc3VsdF9z
dW1tYXJ5LCBtZXNzYWdlKToKKyAgICAgICAgICAgIGlmIGxpbWl0IGFuZCBmYWlsdXJlX2NvdW50
ID49IGxpbWl0OgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gIiAlZCB0ZXN0cyBydW4uIiAl
IChyZXN1bHRfc3VtbWFyeS5leHBlY3RlZCArIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWQpCisg
ICAgICAgICAgICAgICAgc2VsZi5fbWFya19pbnRlcnJ1cHRlZF90ZXN0c19hc19za2lwcGVkKHJl
c3VsdF9zdW1tYXJ5KQorICAgICAgICAgICAgICAgIHJhaXNlIFRlc3RSdW5JbnRlcnJ1cHRlZEV4
Y2VwdGlvbihtZXNzYWdlKQorCisgICAgICAgIGludGVycnVwdF9pZl9hdF9mYWlsdXJlX2xpbWl0
KAorICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5leGl0X2FmdGVyX25fZmFpbHVyZXMsCisgICAg
ICAgICAgICByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkX2ZhaWx1cmVzLAorICAgICAgICAgICAg
cmVzdWx0X3N1bW1hcnksCisgICAgICAgICAgICAiRXhpdGluZyBlYXJseSBhZnRlciAlZCBmYWls
dXJlcy4iICUgcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZF9mYWlsdXJlcykKKyAgICAgICAgaW50
ZXJydXB0X2lmX2F0X2ZhaWx1cmVfbGltaXQoCisgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmV4
aXRfYWZ0ZXJfbl9jcmFzaGVzX29yX3RpbWVvdXRzLAorICAgICAgICAgICAgcmVzdWx0X3N1bW1h
cnkudW5leHBlY3RlZF9jcmFzaGVzICsgcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZF90aW1lb3V0
cywKKyAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LAorICAgICAgICAgICAgIyBUaGlzIGRpZmZl
cnMgZnJvbSBPUldUIGJlY2F1c2UgaXQgZG9lcyBub3QgaW5jbHVkZSBXZWJQcm9jZXNzIGNyYXNo
ZXMuCisgICAgICAgICAgICAiRXhpdGluZyBlYXJseSBhZnRlciAlZCBjcmFzaGVzIGFuZCAlZCB0
aW1lb3V0cy4iICUgKHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRfY3Jhc2hlcywgcmVzdWx0X3N1
bW1hcnkudW5leHBlY3RlZF90aW1lb3V0cykpCisKKyAgICBkZWYgX3VwZGF0ZV9zdW1tYXJ5X3dp
dGhfcmVzdWx0KHNlbGYsIHJlc3VsdF9zdW1tYXJ5LCByZXN1bHQpOgorICAgICAgICBpZiByZXN1
bHQudHlwZSA9PSB0ZXN0X2V4cGVjdGF0aW9ucy5TS0lQOgorICAgICAgICAgICAgZXhwX3N0ciA9
IGdvdF9zdHIgPSAnU0tJUCcKKyAgICAgICAgICAgIGV4cGVjdGVkID0gVHJ1ZQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl9leHBlY3RhdGlvbnMubWF0Y2hlc19h
bl9leHBlY3RlZF9yZXN1bHQocmVzdWx0LnRlc3RfbmFtZSwgcmVzdWx0LnR5cGUsIHNlbGYuX29w
dGlvbnMucGl4ZWxfdGVzdHMgb3IgdGVzdF9mYWlsdXJlcy5pc19yZWZ0ZXN0X2ZhaWx1cmUocmVz
dWx0LmZhaWx1cmVzKSkKKyAgICAgICAgICAgIGV4cF9zdHIgPSBzZWxmLl9leHBlY3RhdGlvbnMu
Z2V0X2V4cGVjdGF0aW9uc19zdHJpbmcocmVzdWx0LnRlc3RfbmFtZSkKKyAgICAgICAgICAgIGdv
dF9zdHIgPSBzZWxmLl9leHBlY3RhdGlvbnMuZXhwZWN0YXRpb25fdG9fc3RyaW5nKHJlc3VsdC50
eXBlKQorCisgICAgICAgIHJlc3VsdF9zdW1tYXJ5LmFkZChyZXN1bHQsIGV4cGVjdGVkLCBzZWxm
Ll90ZXN0X2lzX3Nsb3cocmVzdWx0LnRlc3RfbmFtZSkpCisKKyAgICAgICAgIyBGSVhNRTogdGhl
cmUncyB0b28gbWFueSBhcmd1bWVudHMgdG8gdGhpcyBmdW5jdGlvbi4KKyAgICAgICAgc2VsZi5f
cHJpbnRlci5wcmludF9maW5pc2hlZF90ZXN0KHJlc3VsdCwgZXhwZWN0ZWQsIGV4cF9zdHIsIGdv
dF9zdHIsIHJlc3VsdF9zdW1tYXJ5LCBzZWxmLl9yZXRyeWluZywgc2VsZi5fdGVzdF9maWxlc19s
aXN0KQorCisgICAgICAgIHNlbGYuX2ludGVycnVwdF9pZl9hdF9mYWlsdXJlX2xpbWl0cyhyZXN1
bHRfc3VtbWFyeSkKKworICAgIGRlZiBzdGFydF9zZXJ2ZXJzX3dpdGhfbG9jayhzZWxmLCBudW1i
ZXJfb2Zfc2VydmVycyk6CisgICAgICAgIHNlbGYuX3ByaW50ZXIud3JpdGVfdXBkYXRlKCdBY3F1
aXJpbmcgaHR0cCBsb2NrIC4uLicpCisgICAgICAgIHNlbGYuX3BvcnQuYWNxdWlyZV9odHRwX2xv
Y2soKQorICAgICAgICBpZiBzZWxmLl9uZWVkc19odHRwOgorICAgICAgICAgICAgc2VsZi5fcHJp
bnRlci53cml0ZV91cGRhdGUoJ1N0YXJ0aW5nIEhUVFAgc2VydmVyIC4uLicpCisgICAgICAgICAg
ICBzZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2VydmVyKG51bWJlcl9vZl9zZXJ2ZXJzPW51bWJlcl9v
Zl9zZXJ2ZXJzKQorICAgICAgICBpZiBzZWxmLl9uZWVkc193ZWJzb2NrZXRzOgorICAgICAgICAg
ICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUoJ1N0YXJ0aW5nIFdlYlNvY2tldCBzZXJ2ZXIg
Li4uJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RhcnRfd2Vic29ja2V0X3NlcnZlcigpCisg
ICAgICAgIHNlbGYuX2hhc19odHRwX2xvY2sgPSBUcnVlCisKKyAgICBkZWYgc3RvcF9zZXJ2ZXJz
X3dpdGhfbG9jayhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5faGFzX2h0dHBfbG9jazoKKyAgICAg
ICAgICAgIGlmIHNlbGYuX25lZWRzX2h0dHA6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRl
ci53cml0ZV91cGRhdGUoJ1N0b3BwaW5nIEhUVFAgc2VydmVyIC4uLicpCisgICAgICAgICAgICAg
ICAgc2VsZi5fcG9ydC5zdG9wX2h0dHBfc2VydmVyKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX25l
ZWRzX3dlYnNvY2tldHM6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRh
dGUoJ1N0b3BwaW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgICAgICBzZWxm
Ll9wb3J0LnN0b3Bfd2Vic29ja2V0X3NlcnZlcigpCisgICAgICAgICAgICBzZWxmLl9wcmludGVy
LndyaXRlX3VwZGF0ZSgnUmVsZWFzaW5nIHNlcnZlciBsb2NrIC4uLicpCisgICAgICAgICAgICBz
ZWxmLl9wb3J0LnJlbGVhc2VfaHR0cF9sb2NrKCkKKyAgICAgICAgICAgIHNlbGYuX2hhc19odHRw
X2xvY2sgPSBGYWxzZQorCisgICAgZGVmIGhhbmRsZShzZWxmLCBuYW1lLCBzb3VyY2UsICphcmdz
KToKKyAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLCAnX2hhbmRsZV8nICsgbmFtZSkKKyAg
ICAgICAgaWYgbWV0aG9kOgorICAgICAgICAgICAgcmV0dXJuIG1ldGhvZChzb3VyY2UsICphcmdz
KQorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigndW5rbm93biBtZXNzYWdlICVzIHJlY2Vp
dmVkIGZyb20gJXMsIGFyZ3M9JXMnICUgKG5hbWUsIHNvdXJjZSwgcmVwcihhcmdzKSkpCisKKyAg
ICBkZWYgX2hhbmRsZV9zdGFydGVkX3Rlc3Qoc2VsZiwgd29ya2VyX25hbWUsIHRlc3RfaW5wdXQs
IHRlc3RfdGltZW91dF9zZWMpOgorICAgICAgICAjIEZJWE1FOiBsb2cgdGhhdCB3ZSd2ZSBzdGFy
dGVkIGFub3RoZXIgdGVzdC4KKyAgICAgICAgcGFzcworCisgICAgZGVmIF9oYW5kbGVfZmluaXNo
ZWRfdGVzdF9saXN0KHNlbGYsIHdvcmtlcl9uYW1lLCBsaXN0X25hbWUsIG51bV90ZXN0cywgZWxh
cHNlZF90aW1lKToKKyAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHNbbGlzdF9uYW1lXSA9IChudW1f
dGVzdHMsIGVsYXBzZWRfdGltZSkKKworICAgICAgICBkZWYgZmluZChuYW1lLCB0ZXN0X2xpc3Rz
KToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbih0ZXN0X2xpc3RzKSk6CisgICAgICAg
ICAgICAgICAgaWYgdGVzdF9saXN0c1tpXS5uYW1lID09IG5hbWU6CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBpCisgICAgICAgICAgICByZXR1cm4gLTEKKworICAgICAgICBpbmRleCA9IGZp
bmQobGlzdF9uYW1lLCBzZWxmLl9yZW1haW5pbmdfbG9ja2VkX3NoYXJkcykKKyAgICAgICAgaWYg
aW5kZXggPj0gMDoKKyAgICAgICAgICAgIHNlbGYuX3JlbWFpbmluZ19sb2NrZWRfc2hhcmRzLnBv
cChpbmRleCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9yZW1haW5pbmdfbG9ja2VkX3NoYXJk
czoKKyAgICAgICAgICAgICAgICBzZWxmLnN0b3Bfc2VydmVyc193aXRoX2xvY2soKQorCisgICAg
ZGVmIF9oYW5kbGVfZmluaXNoZWRfdGVzdChzZWxmLCB3b3JrZXJfbmFtZSwgcmVzdWx0LCBlbGFw
c2VkX3RpbWUsIGxvZ19tZXNzYWdlcz1bXSk6CisgICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0cy5z
ZXRkZWZhdWx0KHdvcmtlcl9uYW1lLCB7J25hbWUnOiB3b3JrZXJfbmFtZSwgJ251bV90ZXN0cyc6
IDAsICd0b3RhbF90aW1lJzogMH0pCisgICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0c1t3b3JrZXJf
bmFtZV1bJ3RvdGFsX3RpbWUnXSArPSBlbGFwc2VkX3RpbWUKKyAgICAgICAgc2VsZi5fd29ya2Vy
X3N0YXRzW3dvcmtlcl9uYW1lXVsnbnVtX3Rlc3RzJ10gKz0gMQorICAgICAgICBzZWxmLl9hbGxf
cmVzdWx0cy5hcHBlbmQocmVzdWx0KQorICAgICAgICBzZWxmLl91cGRhdGVfc3VtbWFyeV93aXRo
X3Jlc3VsdChzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5LCByZXN1bHQpCisKKwogY2xhc3Mg
V29ya2VyKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNhbGxlciwgcmVzdWx0c19k
aXJlY3RvcnksIG9wdGlvbnMpOgogICAgICAgICBzZWxmLl9jYWxsZXIgPSBjYWxsZXIKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xh
eW91dF90ZXN0X3J1bm5lcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL2xheW91dF90ZXN0X3J1bm5lcl91bml0dGVzdC5weQppbmRl
eCA0OGFiZDA3ZjNhZDljNTEwYTFiZDBhNGI5YWE1OTk2MTBjZjA0MDkxLi5jZjUxMTQ0NTBiNmU5
ZTczOGVhMzE3YjU3NDdkZTJjMjRlNTcwZDNiIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9sYXlvdXRfdGVzdF9ydW5uZXJfdW5pdHRl
c3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxl
cnMvbGF5b3V0X3Rlc3RfcnVubmVyX3VuaXR0ZXN0LnB5CkBAIC0zMSw4ICszMSwxNzYgQEAKIGlt
cG9ydCB1bml0dGVzdAogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0X21vY2sgaW1wb3J0IE1v
Y2tIb3N0Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cyBpbXBvcnQgcnVuX3dlYmtpdF90ZXN0
cworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzIGltcG9ydCB0ZXN0X2V4cGVjdGF0
aW9ucworZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9kZWxzIGltcG9ydCB0ZXN0X2ZhaWx1
cmVzCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMucmVzdWx0X3N1bW1hcnkgaW1w
b3J0IFJlc3VsdFN1bW1hcnkKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0
X2lucHV0IGltcG9ydCBUZXN0SW5wdXQKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmNvbnRy
b2xsZXJzLmxheW91dF90ZXN0X3J1bm5lciBpbXBvcnQgU2hhcmRlcgorZnJvbSB3ZWJraXRweS5s
YXlvdXRfdGVzdHMubW9kZWxzLnRlc3RfcmVzdWx0cyBpbXBvcnQgVGVzdFJlc3VsdAorZnJvbSB3
ZWJraXRweS5sYXlvdXRfdGVzdHMuY29udHJvbGxlcnMubGF5b3V0X3Rlc3RfcnVubmVyIGltcG9y
dCBMYXlvdXRUZXN0UnVubmVyLCBTaGFyZGVyLCBUZXN0UnVuSW50ZXJydXB0ZWRFeGNlcHRpb24K
KworCitUZXN0RXhwZWN0YXRpb25zID0gdGVzdF9leHBlY3RhdGlvbnMuVGVzdEV4cGVjdGF0aW9u
cworCisKK2NsYXNzIEZha2VQcmludGVyKG9iamVjdCk6CisgICAgZGVmIHByaW50X3dvcmtlcnNf
YW5kX3NoYXJkcyhzZWxmLCBudW1fd29ya2VycywgbnVtX3NoYXJkcywgbnVtX2xvY2tlZF9zaGFy
ZHMpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcHJpbnRfZmluaXNoZWRfdGVzdChzZWxmLCBy
ZXN1bHQsIGV4cGVjdGVkLCBleHBfc3RyLCBnb3Rfc3RyLCByZXN1bHRfc3VtbWFyeSwgcmV0cnlp
bmcsIHRlc3RfbmFtZXMpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgbXNn
KToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHdyaXRlX3VwZGF0ZShzZWxmLCBtc2cpOgorICAg
ICAgICBwYXNzCisKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgIHBhc3MKKworCitjbGFz
cyBMb2NrQ2hlY2tpbmdSdW5uZXIoTGF5b3V0VGVzdFJ1bm5lcik6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHBvcnQsIG9wdGlvbnMsIHByaW50ZXIsIHRlc3RlciwgaHR0cF9sb2NrKToKKyAgICAg
ICAgc3VwZXIoTG9ja0NoZWNraW5nUnVubmVyLCBzZWxmKS5fX2luaXRfXyhvcHRpb25zLCBwb3J0
LCBwcmludGVyLCBwb3J0LnJlc3VsdHNfZGlyZWN0b3J5KCksIFRlc3RFeHBlY3RhdGlvbnMocG9y
dCwgW10pLCBsYW1iZGEgdGVzdF9uYW1lOiBGYWxzZSkKKyAgICAgICAgc2VsZi5fZmluaXNoZWRf
bGlzdF9jYWxsZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl90ZXN0ZXIgPSB0ZXN0ZXIKKyAgICAg
ICAgc2VsZi5fc2hvdWxkX2hhdmVfaHR0cF9sb2NrID0gaHR0cF9sb2NrCisKKyAgICBkZWYgaGFu
ZGxlX2ZpbmlzaGVkX2xpc3Qoc2VsZiwgc291cmNlLCBsaXN0X25hbWUsIG51bV90ZXN0cywgZWxh
cHNlZF90aW1lKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZpbmlzaGVkX2xpc3RfY2FsbGVkOgor
ICAgICAgICAgICAgc2VsZi5fdGVzdGVyLmFzc2VydEVxdWFscyhsaXN0X25hbWUsICdsb2NrZWRf
dGVzdHMnKQorICAgICAgICAgICAgc2VsZi5fdGVzdGVyLmFzc2VydFRydWUoc2VsZi5fcmVtYWlu
aW5nX2xvY2tlZF9zaGFyZHMpCisgICAgICAgICAgICBzZWxmLl90ZXN0ZXIuYXNzZXJ0VHJ1ZShz
ZWxmLl9oYXNfaHR0cF9sb2NrIGlzIHNlbGYuX3Nob3VsZF9oYXZlX2h0dHBfbG9jaykKKworICAg
ICAgICBzdXBlcihMb2NrQ2hlY2tpbmdSdW5uZXIsIHNlbGYpLmhhbmRsZV9maW5pc2hlZF9saXN0
KHNvdXJjZSwgbGlzdF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSkKKworICAgICAgICBp
ZiBub3Qgc2VsZi5fZmluaXNoZWRfbGlzdF9jYWxsZWQ6CisgICAgICAgICAgICBzZWxmLl90ZXN0
ZXIuYXNzZXJ0RXF1YWxzKHNlbGYuX3JlbWFpbmluZ19sb2NrZWRfc2hhcmRzLCBbXSkKKyAgICAg
ICAgICAgIHNlbGYuX3Rlc3Rlci5hc3NlcnRGYWxzZShzZWxmLl9oYXNfaHR0cF9sb2NrKQorICAg
ICAgICAgICAgc2VsZi5fZmluaXNoZWRfbGlzdF9jYWxsZWQgPSBUcnVlCisKKworY2xhc3MgTGF5
b3V0VGVzdFJ1bm5lclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgX3J1bm5lcihz
ZWxmLCBwb3J0PU5vbmUpOgorICAgICAgICAjIEZJWE1FOiB3ZSBzaG91bGRuJ3QgaGF2ZSB0byB1
c2UgcnVuX3dlYmtpdF90ZXN0cy5weSB0byBnZXQgdGhlIG9wdGlvbnMgd2UgbmVlZC4KKyAgICAg
ICAgb3B0aW9ucyA9IHJ1bl93ZWJraXRfdGVzdHMucGFyc2VfYXJncyhbJy0tcGxhdGZvcm0nLCAn
dGVzdC1tYWMtc25vd2xlb3BhcmQnXSlbMF0KKyAgICAgICAgb3B0aW9ucy5jaGlsZF9wcm9jZXNz
ZXMgPSAnMScKKworICAgICAgICBob3N0ID0gTW9ja0hvc3QoKQorICAgICAgICBwb3J0ID0gcG9y
dCBvciBob3N0LnBvcnRfZmFjdG9yeS5nZXQob3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucz1vcHRp
b25zKQorICAgICAgICByZXR1cm4gTG9ja0NoZWNraW5nUnVubmVyKHBvcnQsIG9wdGlvbnMsIEZh
a2VQcmludGVyKCksIHNlbGYsIFRydWUpCisKKyAgICBkZWYgX3Jlc3VsdF9zdW1tYXJ5KHNlbGYs
IHJ1bm5lciwgdGVzdHMpOgorICAgICAgICByZXR1cm4gUmVzdWx0U3VtbWFyeShUZXN0RXhwZWN0
YXRpb25zKHJ1bm5lci5fcG9ydCwgdGVzdHMpLCB0ZXN0cywgMSwgc2V0KCkpCisKKyAgICBkZWYg
X3J1bl90ZXN0cyhzZWxmLCBydW5uZXIsIHRlc3RzKToKKyAgICAgICAgdGVzdF9pbnB1dHMgPSBb
VGVzdElucHV0KHRlc3QsIDYwMDApIGZvciB0ZXN0IGluIHRlc3RzXQorICAgICAgICBleHBlY3Rh
dGlvbnMgPSBUZXN0RXhwZWN0YXRpb25zKHJ1bm5lci5fcG9ydCwgdGVzdHMpCisgICAgICAgIHJ1
bm5lci5ydW5fdGVzdHModGVzdF9pbnB1dHMsIGV4cGVjdGF0aW9ucywgc2VsZi5fcmVzdWx0X3N1
bW1hcnkocnVubmVyLCB0ZXN0cyksCisgICAgICAgICAgICBudW1fd29ya2Vycz0xLCBuZWVkc19o
dHRwPWFueSgnaHR0cCcgaW4gdGVzdCBmb3IgdGVzdCBpbiB0ZXN0cyksIG5lZWRzX3dlYnNvY2tl
dHM9YW55KFsnd2Vic29ja2V0JyBpbiB0ZXN0IGZvciB0ZXN0IGluIHRlc3RzXSksIHJldHJ5aW5n
PUZhbHNlKQorCisgICAgZGVmIHRlc3RfaHR0cF9sb2NraW5nKHNlbGYpOgorICAgICAgICBydW5u
ZXIgPSBzZWxmLl9ydW5uZXIoKQorICAgICAgICBzZWxmLl9ydW5fdGVzdHMocnVubmVyLCBbJ2h0
dHAvdGVzdHMvcGFzc2VzL3RleHQuaHRtbCcsICdwYXNzZXMvdGV4dC5odG1sJ10pCisKKyAgICBk
ZWYgdGVzdF9wZXJmX2xvY2tpbmcoc2VsZik6CisgICAgICAgIHJ1bm5lciA9IHNlbGYuX3J1bm5l
cigpCisgICAgICAgIHNlbGYuX3J1bl90ZXN0cyhydW5uZXIsIFsnaHR0cC90ZXN0cy9wYXNzZXMv
dGV4dC5odG1sJywgJ3BlcmYvZm9vL3Rlc3QuaHRtbCddKQorCisgICAgZGVmIHRlc3RfaW50ZXJy
dXB0X2lmX2F0X2ZhaWx1cmVfbGltaXRzKHNlbGYpOgorICAgICAgICBydW5uZXIgPSBzZWxmLl9y
dW5uZXIoKQorICAgICAgICBydW5uZXIuX29wdGlvbnMuZXhpdF9hZnRlcl9uX2ZhaWx1cmVzID0g
Tm9uZQorICAgICAgICBydW5uZXIuX29wdGlvbnMuZXhpdF9hZnRlcl9uX2NyYXNoZXNfb3JfdGlt
ZXMgPSBOb25lCisgICAgICAgIHRlc3RfbmFtZXMgPSBbJ3Bhc3Nlcy90ZXh0Lmh0bWwnLCAncGFz
c2VzL2ltYWdlLmh0bWwnXQorICAgICAgICBydW5uZXIuX3Rlc3RfZmlsZXNfbGlzdCA9IHRlc3Rf
bmFtZXMKKworICAgICAgICByZXN1bHRfc3VtbWFyeSA9IHNlbGYuX3Jlc3VsdF9zdW1tYXJ5KHJ1
bm5lciwgdGVzdF9uYW1lcykKKyAgICAgICAgcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZF9mYWls
dXJlcyA9IDEwMAorICAgICAgICByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkX2NyYXNoZXMgPSA1
MAorICAgICAgICByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkX3RpbWVvdXRzID0gNTAKKyAgICAg
ICAgIyBObyBleGNlcHRpb24gd2hlbiB0aGUgZXhpdF9hZnRlciogb3B0aW9ucyBhcmUgTm9uZS4K
KyAgICAgICAgcnVubmVyLl9pbnRlcnJ1cHRfaWZfYXRfZmFpbHVyZV9saW1pdHMocmVzdWx0X3N1
bW1hcnkpCisKKyAgICAgICAgIyBObyBleGNlcHRpb24gd2hlbiB3ZSBoYXZlbid0IGhpdCB0aGUg
bGltaXQgeWV0LgorICAgICAgICBydW5uZXIuX29wdGlvbnMuZXhpdF9hZnRlcl9uX2ZhaWx1cmVz
ID0gMTAxCisgICAgICAgIHJ1bm5lci5fb3B0aW9ucy5leGl0X2FmdGVyX25fY3Jhc2hlc19vcl90
aW1lb3V0cyA9IDEwMQorICAgICAgICBydW5uZXIuX2ludGVycnVwdF9pZl9hdF9mYWlsdXJlX2xp
bWl0cyhyZXN1bHRfc3VtbWFyeSkKKworICAgICAgICAjIEludGVycnVwdCBpZiB3ZSd2ZSBleGNl
ZWRlZCBlaXRoZXIgbGltaXQ6CisgICAgICAgIHJ1bm5lci5fb3B0aW9ucy5leGl0X2FmdGVyX25f
Y3Jhc2hlc19vcl90aW1lb3V0cyA9IDEwCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRlc3RS
dW5JbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgcnVubmVyLl9pbnRlcnJ1cHRfaWZfYXRfZmFpbHVyZV9s
aW1pdHMsIHJlc3VsdF9zdW1tYXJ5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHRf
c3VtbWFyeS5yZXN1bHRzWydwYXNzZXMvdGV4dC5odG1sJ10udHlwZSwgdGVzdF9leHBlY3RhdGlv
bnMuU0tJUCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzdWx0X3N1bW1hcnkucmVzdWx0
c1sncGFzc2VzL2ltYWdlLmh0bWwnXS50eXBlLCB0ZXN0X2V4cGVjdGF0aW9ucy5TS0lQKQorCisg
ICAgICAgIHJ1bm5lci5fb3B0aW9ucy5leGl0X2FmdGVyX25fY3Jhc2hlc19vcl90aW1lb3V0cyA9
IE5vbmUKKyAgICAgICAgcnVubmVyLl9vcHRpb25zLmV4aXRfYWZ0ZXJfbl9mYWlsdXJlcyA9IDEw
CisgICAgICAgIGV4Y2VwdGlvbiA9IHNlbGYuYXNzZXJ0UmFpc2VzKFRlc3RSdW5JbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiwgcnVubmVyLl9pbnRlcnJ1cHRfaWZfYXRfZmFpbHVyZV9saW1pdHMsIHJlc3Vs
dF9zdW1tYXJ5KQorCisgICAgZGVmIHRlc3RfdXBkYXRlX3N1bW1hcnlfd2l0aF9yZXN1bHQoc2Vs
Zik6CisgICAgICAgICMgUmVmdGVzdHMgZXhwZWN0ZWQgdG8gYmUgaW1hZ2UgbWlzbWF0Y2ggc2hv
dWxkIGJlIHJlc3BlY3RlZCB3aGVuIHBpeGVsX3Rlc3RzPUZhbHNlLgorICAgICAgICBydW5uZXIg
PSBzZWxmLl9ydW5uZXIoKQorICAgICAgICBydW5uZXIuX29wdGlvbnMucGl4ZWxfdGVzdHMgPSBG
YWxzZQorICAgICAgICB0ZXN0ID0gJ2ZhaWx1cmVzL2V4cGVjdGVkL3JlZnRlc3QuaHRtbCcKKyAg
ICAgICAgZXhwZWN0YXRpb25zID0gVGVzdEV4cGVjdGF0aW9ucyhydW5uZXIuX3BvcnQsIHRlc3Rz
PVt0ZXN0XSkKKyAgICAgICAgcnVubmVyLl9leHBlY3RhdGlvbnMgPSBleHBlY3RhdGlvbnMKKyAg
ICAgICAgcmVzdWx0X3N1bW1hcnkgPSBSZXN1bHRTdW1tYXJ5KGV4cGVjdGF0aW9ucywgW3Rlc3Rd
LCAxLCBzZXQoKSkKKyAgICAgICAgcmVzdWx0ID0gVGVzdFJlc3VsdCh0ZXN0X25hbWU9dGVzdCwg
ZmFpbHVyZXM9W3Rlc3RfZmFpbHVyZXMuRmFpbHVyZVJlZnRlc3RNaXNtYXRjaERpZE5vdE9jY3Vy
KCldKQorICAgICAgICBydW5uZXIuX3VwZGF0ZV9zdW1tYXJ5X3dpdGhfcmVzdWx0KHJlc3VsdF9z
dW1tYXJ5LCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIHJlc3VsdF9zdW1t
YXJ5LmV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygwLCByZXN1bHRfc3VtbWFy
eS51bmV4cGVjdGVkKQorCisgICAgZGVmIHRlc3Rfc2VydmVyc19zdGFydGVkKHNlbGYpOgorCisg
ICAgICAgIGRlZiBzdGFydF9odHRwX3NlcnZlcihudW1iZXJfb2Zfc2VydmVycz1Ob25lKToKKyAg
ICAgICAgICAgIHNlbGYuaHR0cF9zdGFydGVkID0gVHJ1ZQorCisgICAgICAgIGRlZiBzdGFydF93
ZWJzb2NrZXRfc2VydmVyKCk6CisgICAgICAgICAgICBzZWxmLndlYnNvY2tldF9zdGFydGVkID0g
VHJ1ZQorCisgICAgICAgIGRlZiBzdG9wX2h0dHBfc2VydmVyKCk6CisgICAgICAgICAgICBzZWxm
Lmh0dHBfc3RvcHBlZCA9IFRydWUKKworICAgICAgICBkZWYgc3RvcF93ZWJzb2NrZXRfc2VydmVy
KCk6CisgICAgICAgICAgICBzZWxmLndlYnNvY2tldF9zdG9wcGVkID0gVHJ1ZQorCisgICAgICAg
IGhvc3QgPSBNb2NrSG9zdCgpCisgICAgICAgIHBvcnQgPSBob3N0LnBvcnRfZmFjdG9yeS5nZXQo
J3Rlc3QtbWFjLWxlb3BhcmQnKQorICAgICAgICBwb3J0LnN0YXJ0X2h0dHBfc2VydmVyID0gc3Rh
cnRfaHR0cF9zZXJ2ZXIKKyAgICAgICAgcG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVyID0gc3Rh
cnRfd2Vic29ja2V0X3NlcnZlcgorICAgICAgICBwb3J0LnN0b3BfaHR0cF9zZXJ2ZXIgPSBzdG9w
X2h0dHBfc2VydmVyCisgICAgICAgIHBvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyID0gc3RvcF93
ZWJzb2NrZXRfc2VydmVyCisKKyAgICAgICAgc2VsZi5odHRwX3N0YXJ0ZWQgPSBzZWxmLmh0dHBf
c3RvcHBlZCA9IHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQgPSBzZWxmLndlYnNvY2tldF9zdG9wcGVk
ID0gRmFsc2UKKyAgICAgICAgcnVubmVyID0gc2VsZi5fcnVubmVyKHBvcnQ9cG9ydCkKKyAgICAg
ICAgcnVubmVyLl9uZWVkc19odHRwID0gVHJ1ZQorICAgICAgICBydW5uZXIuX25lZWRzX3dlYnNv
Y2tldHMgPSBGYWxzZQorICAgICAgICBydW5uZXIuc3RhcnRfc2VydmVyc193aXRoX2xvY2sobnVt
YmVyX29mX3NlcnZlcnM9NCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5odHRwX3N0
YXJ0ZWQsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYud2Vic29ja2V0X3N0
YXJ0ZWQsIEZhbHNlKQorICAgICAgICBydW5uZXIuc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuaHR0cF9zdG9wcGVkLCBUcnVlKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLndlYnNvY2tldF9zdG9wcGVkLCBGYWxzZSkKKworICAg
ICAgICBzZWxmLmh0dHBfc3RhcnRlZCA9IHNlbGYuaHR0cF9zdG9wcGVkID0gc2VsZi53ZWJzb2Nr
ZXRfc3RhcnRlZCA9IHNlbGYud2Vic29ja2V0X3N0b3BwZWQgPSBGYWxzZQorICAgICAgICBydW5u
ZXIuX25lZWRzX2h0dHAgPSBUcnVlCisgICAgICAgIHJ1bm5lci5fbmVlZHNfd2Vic29ja2V0cyA9
IFRydWUKKyAgICAgICAgcnVubmVyLnN0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKG51bWJlcl9vZl9z
ZXJ2ZXJzPTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuaHR0cF9zdGFydGVkLCBU
cnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLndlYnNvY2tldF9zdGFydGVkLCBU
cnVlKQorICAgICAgICBydW5uZXIuc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWxzKHNlbGYuaHR0cF9zdG9wcGVkLCBUcnVlKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhzZWxmLndlYnNvY2tldF9zdG9wcGVkLCBUcnVlKQorCisgICAgICAgIHNlbGYu
aHR0cF9zdGFydGVkID0gc2VsZi5odHRwX3N0b3BwZWQgPSBzZWxmLndlYnNvY2tldF9zdGFydGVk
ID0gc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCA9IEZhbHNlCisgICAgICAgIHJ1bm5lci5fbmVlZHNf
aHR0cCA9IEZhbHNlCisgICAgICAgIHJ1bm5lci5fbmVlZHNfd2Vic29ja2V0cyA9IEZhbHNlCisg
ICAgICAgIHJ1bm5lci5zdGFydF9zZXJ2ZXJzX3dpdGhfbG9jayhudW1iZXJfb2Zfc2VydmVycz00
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmh0dHBfc3RhcnRlZCwgRmFsc2UpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQsIEZhbHNlKQor
ICAgICAgICBydW5uZXIuc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKHNlbGYuaHR0cF9zdG9wcGVkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoc2VsZi53ZWJzb2NrZXRfc3RvcHBlZCwgRmFsc2UpCiAKIAogY2xhc3MgU2hhcmRlclRl
c3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyLnB5CmluZGV4IGFjOTk4ZGYz
ZGM0MjdmNjNiMWViYTNjODgxNjllNWNhYjgwNjcwNTMuLmY0ZDkzYjFjM2JiODgyOGJmY2Q1M2Yw
ZTc2OWUxYTNlZWQxZTZiNWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL21hbmFnZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvbWFuYWdlci5weQpAQCAtNDUsOCArNDUsOCBA
QCBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogCiBmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQg
bWVzc2FnZV9wb29sCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycy5sYXlv
dXRfdGVzdF9ydW5uZXIgaW1wb3J0IFdvcmtlciwgU2hhcmRlcgogZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMuY29udHJvbGxlcnMuZmluZGVyIGltcG9ydCBMYXlvdXRUZXN0RmluZGVyCitmcm9t
IHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycy5sYXlvdXRfdGVzdF9ydW5uZXIgaW1w
b3J0IExheW91dFRlc3RSdW5uZXIsIFRlc3RSdW5JbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgV29ya2Vy
RXhjZXB0aW9uCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5jb250cm9sbGVycy50ZXN0X3Jl
c3VsdF93cml0ZXIgaW1wb3J0IFRlc3RSZXN1bHRXcml0ZXIKIGZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBqc29uX2xheW91dF9yZXN1bHRzX2dlbmVyYXRv
cgogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UgaW1wb3J0IGpzb25f
cmVzdWx0c19nZW5lcmF0b3IKQEAgLTI1NCwyMSArMjU0LDYgQEAgZGVmIHN1bW1hcml6ZV9yZXN1
bHRzKHBvcnRfb2JqLCBleHBlY3RhdGlvbnMsIHJlc3VsdF9zdW1tYXJ5LCByZXRyeV9zdW1tYXJ5
LCB0ZXMKICAgICByZXR1cm4gcmVzdWx0cwogCiAKLWNsYXNzIFRlc3RSdW5JbnRlcnJ1cHRlZEV4
Y2VwdGlvbihFeGNlcHRpb24pOgotICAgICIiIlJhaXNlZCB3aGVuIGEgdGVzdCBydW4gc2hvdWxk
IGJlIHN0b3BwZWQgaW1tZWRpYXRlbHkuIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlYXNv
bik6Ci0gICAgICAgIEV4Y2VwdGlvbi5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLnJlYXNv
biA9IHJlYXNvbgotICAgICAgICBzZWxmLm1zZyA9IHJlYXNvbgotCi0gICAgZGVmIF9fcmVkdWNl
X18oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXywgKHNlbGYucmVhc29uLCkK
LQotCi0jIEV4cG9ydCB0aGlzIHNvIGNhbGxlcnMgZG9uJ3QgbmVlZCB0byBrbm93IGFib3V0IG1l
c3NhZ2UgcG9vbHMuCi1Xb3JrZXJFeGNlcHRpb24gPSBtZXNzYWdlX3Bvb2wuV29ya2VyRXhjZXB0
aW9uCi0KLQogY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAgICIiIkEgY2xhc3MgZm9yIG1hbmFn
aW5nIHJ1bm5pbmcgYSBzZXJpZXMgb2YgdGVzdHMgb24gYSBzZXJpZXMgb2YgbGF5b3V0CiAgICAg
dGVzdCBmaWxlcy4iIiIKQEAgLTI5MSw0MSArMjc2LDMyIEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0
KToKICAgICAgICAgc2VsZi5QRVJGX1NVQkRJUiA9ICdwZXJmJwogICAgICAgICBzZWxmLldFQlNP
Q0tFVF9TVUJESVIgPSAnd2Vic29ja2V0JyArIHBvcnQuVEVTVF9QQVRIX1NFUEFSQVRPUgogICAg
ICAgICBzZWxmLkxBWU9VVF9URVNUU19ESVJFQ1RPUlkgPSAnTGF5b3V0VGVzdHMnCi0gICAgICAg
IHNlbGYuX2hhc19odHRwX2xvY2sgPSBGYWxzZQotCi0gICAgICAgIHNlbGYuX3JlbWFpbmluZ19s
b2NrZWRfc2hhcmRzID0gW10KIAogICAgICAgICAjIGRpc2FibGUgd3NzIHNlcnZlci4gbmVlZCB0
byBpbnN0YWxsIHB5T3BlblNTTCBvbiBidWlsZGJvdHMuCiAgICAgICAgICMgc2VsZi5fd2Vic29j
a2V0X3NlY3VyZV9zZXJ2ZXIgPSB3ZWJzb2NrZXRfc2VydmVyLlB5V2ViU29ja2V0KAogICAgICAg
ICAjICAgICAgICBvcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5LCB1c2VfdGxzPVRydWUsIHBvcnQ9
OTMyMykKIAotICAgICAgICAjIGEgc2V0IG9mIHRlc3QgZmlsZXMsIGFuZCB0aGUgc2FtZSB0ZXN0
cyBhcyBhIGxpc3QKLQogICAgICAgICBzZWxmLl9wYXRocyA9IHNldCgpCi0KICAgICAgICAgc2Vs
Zi5fdGVzdF9uYW1lcyA9IE5vbmUKLSAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlID0gUXVldWUu
UXVldWUoKQogICAgICAgICBzZWxmLl9yZXRyeWluZyA9IEZhbHNlCiAgICAgICAgIHNlbGYuX3Jl
c3VsdHNfZGlyZWN0b3J5ID0gc2VsZi5fcG9ydC5yZXN1bHRzX2RpcmVjdG9yeSgpCi0KLSAgICAg
ICAgc2VsZi5fYWxsX3Jlc3VsdHMgPSBbXQotICAgICAgICBzZWxmLl9ncm91cF9zdGF0cyA9IHt9
Ci0gICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0cyA9IHt9Ci0gICAgICAgIHNlbGYuX2N1cnJlbnRf
cmVzdWx0X3N1bW1hcnkgPSBOb25lCiAgICAgICAgIHNlbGYuX2ZpbmRlciA9IExheW91dFRlc3RG
aW5kZXIoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9ucykKLSAgICAgICAgc2VsZi5fc2hhcmRlciA9
IFNoYXJkZXIoc2VsZi5fcG9ydC5zcGxpdF90ZXN0LCBzZWxmLl9wb3J0LlRFU1RfUEFUSF9TRVBB
UkFUT1IsIHNlbGYuX29wdGlvbnMubWF4X2xvY2tlZF9zaGFyZHMpCisgICAgICAgIHNlbGYuX3J1
bm5lciA9IExheW91dFRlc3RSdW5uZXIoc2VsZi5fb3B0aW9ucywgc2VsZi5fcG9ydCwgc2VsZi5f
cHJpbnRlciwgc2VsZi5fcmVzdWx0c19kaXJlY3RvcnksIHNlbGYuX2V4cGVjdGF0aW9ucywgc2Vs
Zi5fdGVzdF9pc19zbG93KQogCiAgICAgZGVmIF9jb2xsZWN0X3Rlc3RzKHNlbGYsIGFyZ3MpOgog
ICAgICAgICByZXR1cm4gc2VsZi5fZmluZGVyLmZpbmRfdGVzdHMoc2VsZi5fb3B0aW9ucywgYXJn
cykKIAogICAgIGRlZiBfaXNfaHR0cF90ZXN0KHNlbGYsIHRlc3QpOgotICAgICAgICByZXR1cm4g
c2VsZi5IVFRQX1NVQkRJUiBpbiB0ZXN0IG9yIHNlbGYuV0VCU09DS0VUX1NVQkRJUiBpbiB0ZXN0
CisgICAgICAgIHJldHVybiBzZWxmLkhUVFBfU1VCRElSIGluIHRlc3Qgb3Igc2VsZi5faXNfd2Vi
c29ja2V0X3Rlc3QodGVzdCkKKworICAgIGRlZiBfaXNfd2Vic29ja2V0X3Rlc3Qoc2VsZiwgdGVz
dCk6CisgICAgICAgIHJldHVybiBzZWxmLldFQlNPQ0tFVF9TVUJESVIgaW4gdGVzdAogCiAgICAg
ZGVmIF9odHRwX3Rlc3RzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2V0KHRlc3QgZm9yIHRlc3Qg
aW4gc2VsZi5fdGVzdF9uYW1lcyBpZiBzZWxmLl9pc19odHRwX3Rlc3QodGVzdCkpCiAKICAgICBk
ZWYgX3dlYnNvY2tldF90ZXN0cyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNldCh0ZXN0IGZvciB0
ZXN0IGluIHNlbGYuX3Rlc3RfbmFtZXMgaWYgc2VsZi5XRUJTT0NLRVRfU1VCRElSIGluIHRlc3Qp
CisgICAgICAgIHJldHVybiBzZXQodGVzdCBmb3IgdGVzdCBpbiBzZWxmLl90ZXN0X2ZpbGVzIGlm
IHNlbGYuX2lzX3dlYnNvY2tldCh0ZXN0KSkKIAogICAgIGRlZiBfaXNfcGVyZl90ZXN0KHNlbGYs
IHRlc3QpOgogICAgICAgICByZXR1cm4gc2VsZi5QRVJGX1NVQkRJUiA9PSB0ZXN0IG9yIChzZWxm
LlBFUkZfU1VCRElSICsgc2VsZi5fcG9ydC5URVNUX1BBVEhfU0VQQVJBVE9SKSBpbiB0ZXN0CkBA
IC0zMzksNyArMzE1LDcgQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAgICAgICBpZiBzZWxm
Ll9vcHRpb25zLnJhbmRvbWl6ZV9vcmRlcjoKICAgICAgICAgICAgIHJhbmRvbS5zaHVmZmxlKHNl
bGYuX3Rlc3RfbmFtZXMpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl90ZXN0X25h
bWVzLnNvcnQoa2V5PXNlbGYuX3NoYXJkZXIudGVzdF9rZXkpCisgICAgICAgICAgICBzZWxmLl90
ZXN0X25hbWVzLnNvcnQoa2V5PXNlbGYuX3J1bm5lci50ZXN0X2tleSkKIAogICAgICAgICBzZWxm
Ll90ZXN0X25hbWVzLCB0ZXN0c19pbl9vdGhlcl9jaHVua3MgPSBzZWxmLl9maW5kZXIuc3BsaXRf
aW50b19jaHVua3Moc2VsZi5fdGVzdF9uYW1lcykKICAgICAgICAgc2VsZi5fZXhwZWN0YXRpb25z
LmFkZF9za2lwcGVkX3Rlc3RzKHRlc3RzX2luX290aGVyX2NodW5rcykKQEAgLTM3OSw4NCArMzU1
LDYgQEAgY2xhc3MgTWFuYWdlcihvYmplY3QpOgogICAgICAgICAgICAgdGVzdF9pbnB1dC5yZWZl
cmVuY2VfZmlsZXMgPSBzZWxmLl9wb3J0LnJlZmVyZW5jZV9maWxlcyh0ZXN0X2lucHV0LnRlc3Rf
bmFtZSkKICAgICAgICAgcmV0dXJuIGJvb2wodGVzdF9pbnB1dC5yZWZlcmVuY2VfZmlsZXMpCiAK
LSAgICBkZWYgX3J1bl90ZXN0cyhzZWxmLCBmaWxlX2xpc3QsIHJlc3VsdF9zdW1tYXJ5LCBudW1f
d29ya2Vycyk6Ci0gICAgICAgICIiIlJ1bnMgdGhlIHRlc3RzIGluIHRoZSBmaWxlX2xpc3QuCi0K
LSAgICAgICAgUmV0dXJuOiBBIHR1cGxlIChpbnRlcnJ1cHRlZCwga2V5Ym9hcmRfaW50ZXJydXB0
ZWQsIHRocmVhZF90aW1pbmdzLAotICAgICAgICAgICAgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFs
X3Rlc3RfdGltaW5ncykKLSAgICAgICAgICAgIGludGVycnVwdGVkIGlzIHdoZXRoZXIgdGhlIHJ1
biB3YXMgaW50ZXJydXB0ZWQKLSAgICAgICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkIGlzIHdo
ZXRoZXIgdGhlIGludGVycnVwdGlvbiB3YXMgYmVjYXVzZSBzb21lb25lCi0gICAgICAgICAgICAg
IHR5cGVkIEN0cmxeQwotICAgICAgICAgICAgdGhyZWFkX3RpbWluZ3MgaXMgYSBsaXN0IG9mIGRp
Y3RzIHdpdGggdGhlIHRvdGFsIHJ1bnRpbWUKLSAgICAgICAgICAgICAgb2YgZWFjaCB0aHJlYWQg
d2l0aCAnbmFtZScsICdudW1fdGVzdHMnLCAndG90YWxfdGltZScgcHJvcGVydGllcwotICAgICAg
ICAgICAgdGVzdF90aW1pbmdzIGlzIGEgbGlzdCBvZiB0aW1pbmdzIGZvciBlYWNoIHNoYXJkZWQg
c3ViZGlyZWN0b3J5Ci0gICAgICAgICAgICAgIG9mIHRoZSBmb3JtIFt0aW1lLCBkaXJlY3Rvcnlf
bmFtZSwgbnVtX3Rlc3RzXQotICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MgaXMg
YSBsaXN0IG9mIHJ1biB0aW1lcyBmb3IgZWFjaCB0ZXN0Ci0gICAgICAgICAgICAgIGluIHRoZSBm
b3JtIHtmaWxlbmFtZTpmaWxlbmFtZSwgdGVzdF9ydW5fdGltZTp0ZXN0X3J1bl90aW1lfQotICAg
ICAgICAgICAgcmVzdWx0X3N1bW1hcnk6IHN1bW1hcnkgb2JqZWN0IHRvIHBvcHVsYXRlIHdpdGgg
dGhlIHJlc3VsdHMKLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX2N1cnJlbnRfcmVzdWx0X3N1
bW1hcnkgPSByZXN1bHRfc3VtbWFyeQotICAgICAgICBzZWxmLl9hbGxfcmVzdWx0cyA9IFtdCi0g
ICAgICAgIHNlbGYuX2dyb3VwX3N0YXRzID0ge30KLSAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRz
ID0ge30KLQotICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IEZhbHNlCi0gICAgICAgIGlu
dGVycnVwdGVkID0gRmFsc2UKLQotICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgn
U2hhcmRpbmcgdGVzdHMgLi4uJykKLSAgICAgICAgdGVzdF9pbnB1dHMgPSBbc2VsZi5fdGVzdF9p
bnB1dF9mb3JfZmlsZShmaWxlKSBmb3IgZmlsZSBpbiBmaWxlX2xpc3RdCi0gICAgICAgIGxvY2tl
ZF9zaGFyZHMsIHVubG9ja2VkX3NoYXJkcyA9IHNlbGYuX3NoYXJkZXIuc2hhcmRfdGVzdHModGVz
dF9pbnB1dHMsIGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyksIHNlbGYuX29wdGlv
bnMuZnVsbHlfcGFyYWxsZWwsIHNlbGYuX29wdGlvbnMuc2hhcmRfcmVmX3Rlc3RzKQotCi0gICAg
ICAgICMgRklYTUU6IFdlIGRvbid0IGhhdmUgYSBnb29kIHdheSB0byBjb29yZGluYXRlIHRoZSB3
b3JrZXJzIHNvIHRoYXQKLSAgICAgICAgIyB0aGV5IGRvbid0IHRyeSB0byBydW4gdGhlIHNoYXJk
cyB0aGF0IG5lZWQgYSBsb2NrIGlmIHdlIGRvbid0IGFjdHVhbGx5Ci0gICAgICAgICMgaGF2ZSB0
aGUgbG9jay4gVGhlIGVhc2llc3Qgc29sdXRpb24gYXQgdGhlIG1vbWVudCBpcyB0byBncmFiIHRo
ZQotICAgICAgICAjIGxvY2sgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcnVuLCBhbmQgdGhlbiBy
dW4gYWxsIG9mIHRoZSBsb2NrZWQKLSAgICAgICAgIyBzaGFyZHMgZmlyc3QuIFRoaXMgbWluaW1p
emVzIHRoZSB0aW1lIHNwZW50IGhvbGRpbmcgdGhlIGxvY2ssIGJ1dAotICAgICAgICAjIG1lYW5z
IHRoYXQgd2Ugd29uJ3QgYmUgcnVubmluZyB0ZXN0cyB3aGlsZSB3ZSdyZSB3YWl0aW5nIGZvciB0
aGUgbG9jay4KLSAgICAgICAgIyBJZiB0aGlzIGJlY29tZXMgYSBwcm9ibGVtIGluIHByYWN0aWNl
IHdlJ2xsIG5lZWQgdG8gY2hhbmdlIHRoaXMuCi0KLSAgICAgICAgYWxsX3NoYXJkcyA9IGxvY2tl
ZF9zaGFyZHMgKyB1bmxvY2tlZF9zaGFyZHMKLSAgICAgICAgc2VsZi5fcmVtYWluaW5nX2xvY2tl
ZF9zaGFyZHMgPSBsb2NrZWRfc2hhcmRzCi0gICAgICAgIGlmIGxvY2tlZF9zaGFyZHMgYW5kIHNl
bGYuX29wdGlvbnMuaHR0cDoKLSAgICAgICAgICAgIHNlbGYuc3RhcnRfc2VydmVyc193aXRoX2xv
Y2soMiAqIG1pbihudW1fd29ya2VycywgbGVuKGxvY2tlZF9zaGFyZHMpKSkKLQotICAgICAgICBu
dW1fd29ya2VycyA9IG1pbihudW1fd29ya2VycywgbGVuKGFsbF9zaGFyZHMpKQotICAgICAgICBz
ZWxmLl9wcmludGVyLnByaW50X3dvcmtlcnNfYW5kX3NoYXJkcyhudW1fd29ya2VycywgbGVuKGFs
bF9zaGFyZHMpLCBsZW4obG9ja2VkX3NoYXJkcykpCi0KLSAgICAgICAgZGVmIHdvcmtlcl9mYWN0
b3J5KHdvcmtlcl9jb25uZWN0aW9uKToKLSAgICAgICAgICAgIHJldHVybiBXb3JrZXIod29ya2Vy
X2Nvbm5lY3Rpb24sIHNlbGYucmVzdWx0c19kaXJlY3RvcnkoKSwgc2VsZi5fb3B0aW9ucykKLQot
ICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmRyeV9ydW46Ci0gICAgICAgICAgICByZXR1cm4gKGtl
eWJvYXJkX2ludGVycnVwdGVkLCBpbnRlcnJ1cHRlZCwgc2VsZi5fd29ya2VyX3N0YXRzLnZhbHVl
cygpLCBzZWxmLl9ncm91cF9zdGF0cywgc2VsZi5fYWxsX3Jlc3VsdHMpCi0KLSAgICAgICAgc2Vs
Zi5fcHJpbnRlci53cml0ZV91cGRhdGUoJ1N0YXJ0aW5nICVzIC4uLicgJSBncmFtbWFyLnBsdXJh
bGl6ZSgnd29ya2VyJywgbnVtX3dvcmtlcnMpKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAg
IHdpdGggbWVzc2FnZV9wb29sLmdldChzZWxmLCB3b3JrZXJfZmFjdG9yeSwgbnVtX3dvcmtlcnMs
IHNlbGYuX3BvcnQud29ya2VyX3N0YXJ0dXBfZGVsYXlfc2VjcygpLCBzZWxmLl9wb3J0Lmhvc3Qp
IGFzIHBvb2w6Ci0gICAgICAgICAgICAgICAgcG9vbC5ydW4oKCd0ZXN0X2xpc3QnLCBzaGFyZC5u
YW1lLCBzaGFyZC50ZXN0X2lucHV0cykgZm9yIHNoYXJkIGluIGFsbF9zaGFyZHMpCi0gICAgICAg
IGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgICAgIHNlbGYuX3ByaW50ZXIuZmx1
c2goKQotICAgICAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZSgnSW50ZXJydXB0ZWQsIGV4aXRp
bmcgLi4uJykKLSAgICAgICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkID0gVHJ1ZQotICAgICAg
ICBleGNlcHQgVGVzdFJ1bkludGVycnVwdGVkRXhjZXB0aW9uLCBlOgotICAgICAgICAgICAgX2xv
Zy53YXJuaW5nKGUucmVhc29uKQotICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSBUcnVlCi0gICAg
ICAgIGV4Y2VwdCBFeGNlcHRpb24sIGU6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCclcygiJXMi
KSByYWlzZWQsIGV4aXRpbmcnICUgKGUuX19jbGFzc19fLl9fbmFtZV9fLCBzdHIoZSkpKQotICAg
ICAgICAgICAgcmFpc2UKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYuc3RvcF9z
ZXJ2ZXJzX3dpdGhfbG9jaygpCi0KLSAgICAgICAgIyBGSVhNRTogc2hvdWxkIHRoaXMgYmUgYSBj
bGFzcyBpbnN0ZWFkIG9mIGEgdHVwbGU/Ci0gICAgICAgIHJldHVybiAoaW50ZXJydXB0ZWQsIGtl
eWJvYXJkX2ludGVycnVwdGVkLCBzZWxmLl93b3JrZXJfc3RhdHMudmFsdWVzKCksIHNlbGYuX2dy
b3VwX3N0YXRzLCBzZWxmLl9hbGxfcmVzdWx0cykKLQotICAgIGRlZiByZXN1bHRzX2RpcmVjdG9y
eShzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX3JldHJ5aW5nOgotICAgICAgICAgICAgcmV0
dXJuIHNlbGYuX3Jlc3VsdHNfZGlyZWN0b3J5Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBz
ZWxmLl9maWxlc3lzdGVtLm1heWJlX21ha2VfZGlyZWN0b3J5KHNlbGYuX2ZpbGVzeXN0ZW0uam9p
bihzZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSwgJ3JldHJpZXMnKSkKLSAgICAgICAgICAgIHJldHVy
biBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fcmVzdWx0c19kaXJlY3RvcnksICdyZXRyaWVz
JykKLQogICAgIGRlZiBuZWVkc19zZXJ2ZXJzKHNlbGYpOgogICAgICAgICByZXR1cm4gYW55KHNl
bGYuX3Rlc3RfcmVxdWlyZXNfbG9jayh0ZXN0X25hbWUpIGZvciB0ZXN0X25hbWUgaW4gc2VsZi5f
dGVzdF9uYW1lcykgYW5kIHNlbGYuX29wdGlvbnMuaHR0cAogCkBAIC01MTYsMTAgKzQxNCwxMiBA
QCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAKICAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGlt
ZSgpCiAKLSAgICAgICAgaW50ZXJydXB0ZWQsIGtleWJvYXJkX2ludGVycnVwdGVkLCB0aHJlYWRf
dGltaW5ncywgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncyA9IHNlbGYuX3J1
bl90ZXN0cyhzZWxmLl90ZXN0X25hbWVzLCByZXN1bHRfc3VtbWFyeSwgaW50KHNlbGYuX29wdGlv
bnMuY2hpbGRfcHJvY2Vzc2VzKSkKKyAgICAgICAgaW50ZXJydXB0ZWQsIGtleWJvYXJkX2ludGVy
cnVwdGVkLCB0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rlc3RfdGlt
aW5ncyA9IFwKKyAgICAgICAgICAgIHNlbGYuX3J1bl90ZXN0cyhzZWxmLl90ZXN0X25hbWVzLCBy
ZXN1bHRfc3VtbWFyeSwgaW50KHNlbGYuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSkKIAogICAg
ICAgICAjIFdlIGV4Y2x1ZGUgdGhlIGNyYXNoZXMgZnJvbSB0aGUgbGlzdCBvZiByZXN1bHRzIHRv
IHJldHJ5LCBiZWNhdXNlCiAgICAgICAgICMgd2Ugd2FudCB0byB0cmVhdCBldmVuIGEgcG90ZW50
aWFsbHkgZmxha3kgY3Jhc2ggYXMgYW4gZXJyb3IuCisKICAgICAgICAgZmFpbHVyZXMgPSBzZWxm
Ll9nZXRfZmFpbHVyZXMocmVzdWx0X3N1bW1hcnksIGluY2x1ZGVfY3Jhc2hlcz1zZWxmLl9wb3J0
LnNob3VsZF9yZXRyeV9jcmFzaGVzKCksIGluY2x1ZGVfbWlzc2luZz1GYWxzZSkKICAgICAgICAg
cmV0cnlfc3VtbWFyeSA9IHJlc3VsdF9zdW1tYXJ5CiAgICAgICAgIHdoaWxlIChsZW4oZmFpbHVy
ZXMpIGFuZCBzZWxmLl9vcHRpb25zLnJldHJ5X2ZhaWx1cmVzIGFuZCBub3Qgc2VsZi5fcmV0cnlp
bmcgYW5kIG5vdCBpbnRlcnJ1cHRlZCBhbmQgbm90IGtleWJvYXJkX2ludGVycnVwdGVkKToKQEAg
LTUyOSw3ICs0MjksNyBAQCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgICAgICBzZWxm
Ll9yZXRyeWluZyA9IFRydWUKICAgICAgICAgICAgIHJldHJ5X3N1bW1hcnkgPSBSZXN1bHRTdW1t
YXJ5KHNlbGYuX2V4cGVjdGF0aW9ucywgZmFpbHVyZXMua2V5cygpLCAxLCBzZXQoKSkKICAgICAg
ICAgICAgICMgTm90ZSB0aGF0IHdlIGludGVudGlvbmFsbHkgaWdub3JlIHRoZSByZXR1cm4gdmFs
dWUgaGVyZS4KLSAgICAgICAgICAgIHNlbGYuX3J1bl90ZXN0cyhmYWlsdXJlcy5rZXlzKCksIHJl
dHJ5X3N1bW1hcnksIG51bV93b3JrZXJzPTEpCisgICAgICAgICAgICBzZWxmLl9ydW5fdGVzdHMo
ZmFpbHVyZXMua2V5cygpLCByZXRyeV9zdW1tYXJ5LCAxKQogICAgICAgICAgICAgZmFpbHVyZXMg
PSBzZWxmLl9nZXRfZmFpbHVyZXMocmV0cnlfc3VtbWFyeSwgaW5jbHVkZV9jcmFzaGVzPVRydWUs
IGluY2x1ZGVfbWlzc2luZz1UcnVlKQogCiAgICAgICAgIGVuZF90aW1lID0gdGltZS50aW1lKCkK
QEAgLTU2NCwyOCArNDY0LDExIEBAIGNsYXNzIE1hbmFnZXIob2JqZWN0KToKIAogICAgICAgICBy
ZXR1cm4gc2VsZi5fcG9ydC5leGl0X2NvZGVfZnJvbV9zdW1tYXJpemVkX3Jlc3VsdHModW5leHBl
Y3RlZF9yZXN1bHRzKQogCi0gICAgZGVmIHN0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKHNlbGYsIG51
bWJlcl9vZl9zZXJ2ZXJzKToKLSAgICAgICAgc2VsZi5fcHJpbnRlci53cml0ZV91cGRhdGUoJ0Fj
cXVpcmluZyBodHRwIGxvY2sgLi4uJykKLSAgICAgICAgc2VsZi5fcG9ydC5hY3F1aXJlX2h0dHBf
bG9jaygpCi0gICAgICAgIGlmIHNlbGYuX2h0dHBfdGVzdHMoKToKLSAgICAgICAgICAgIHNlbGYu
X3ByaW50ZXIud3JpdGVfdXBkYXRlKCdTdGFydGluZyBIVFRQIHNlcnZlciAuLi4nKQotICAgICAg
ICAgICAgc2VsZi5fcG9ydC5zdGFydF9odHRwX3NlcnZlcihudW1iZXJfb2Zfc2VydmVycz1udW1i
ZXJfb2Zfc2VydmVycykKLSAgICAgICAgaWYgc2VsZi5fd2Vic29ja2V0X3Rlc3RzKCk6Ci0gICAg
ICAgICAgICBzZWxmLl9wcmludGVyLndyaXRlX3VwZGF0ZSgnU3RhcnRpbmcgV2ViU29ja2V0IHNl
cnZlciAuLi4nKQotICAgICAgICAgICAgc2VsZi5fcG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVy
KCkKLSAgICAgICAgc2VsZi5faGFzX2h0dHBfbG9jayA9IFRydWUKLQotICAgIGRlZiBzdG9wX3Nl
cnZlcnNfd2l0aF9sb2NrKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9oYXNfaHR0cF9sb2NrOgot
ICAgICAgICAgICAgaWYgc2VsZi5faHR0cF90ZXN0cygpOgotICAgICAgICAgICAgICAgIHNlbGYu
X3ByaW50ZXIud3JpdGVfdXBkYXRlKCdTdG9wcGluZyBIVFRQIHNlcnZlciAuLi4nKQotICAgICAg
ICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF9odHRwX3NlcnZlcigpCi0gICAgICAgICAgICBpZiBz
ZWxmLl93ZWJzb2NrZXRfdGVzdHMoKToKLSAgICAgICAgICAgICAgICBzZWxmLl9wcmludGVyLndy
aXRlX3VwZGF0ZSgnU3RvcHBpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQotICAgICAgICAgICAg
ICAgIHNlbGYuX3BvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyKCkKLSAgICAgICAgICAgIHNlbGYu
X3ByaW50ZXIud3JpdGVfdXBkYXRlKCdSZWxlYXNpbmcgc2VydmVyIGxvY2sgLi4uJykKLSAgICAg
ICAgICAgIHNlbGYuX3BvcnQucmVsZWFzZV9odHRwX2xvY2soKQotICAgICAgICAgICAgc2VsZi5f
aGFzX2h0dHBfbG9jayA9IEZhbHNlCisgICAgZGVmIF9ydW5fdGVzdHMoc2VsZiwgdGVzdHMsIHJl
c3VsdF9zdW1tYXJ5LCBudW1fd29ya2Vycyk6CisgICAgICAgIHRlc3RfaW5wdXRzID0gW3NlbGYu
X3Rlc3RfaW5wdXRfZm9yX2ZpbGUodGVzdCkgZm9yIHRlc3QgaW4gdGVzdHNdCisgICAgICAgIG5l
ZWRzX2h0dHAgPSBhbnkoc2VsZi5faXNfaHR0cF90ZXN0KHRlc3QpIGZvciB0ZXN0IGluIHRlc3Rz
KQorICAgICAgICBuZWVkc193ZWJzb2NrZXRzID0gYW55KHNlbGYuX2lzX3dlYnNvY2tldF90ZXN0
KHRlc3QpIGZvciB0ZXN0IGluIHRlc3RzKQorICAgICAgICByZXR1cm4gc2VsZi5fcnVubmVyLnJ1
bl90ZXN0cyh0ZXN0X2lucHV0cywgc2VsZi5fZXhwZWN0YXRpb25zLCByZXN1bHRfc3VtbWFyeSwg
bnVtX3dvcmtlcnMsIG5lZWRzX2h0dHAsIG5lZWRzX3dlYnNvY2tldHMsIHNlbGYuX3JldHJ5aW5n
KQogCiAgICAgZGVmIF9jbGVhbl91cF9ydW4oc2VsZik6CiAgICAgICAgICIiIlJlc3RvcmVzIHRo
ZSBzeXN0ZW0gYWZ0ZXIgd2UncmUgZG9uZSBydW5uaW5nIHRlc3RzLiIiIgpAQCAtNjIxLDUyICs1
MDQsNiBAQCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgd3JpdGVyID0g
VGVzdFJlc3VsdFdyaXRlcihzZWxmLl9wb3J0Ll9maWxlc3lzdGVtLCBzZWxmLl9wb3J0LCBzZWxm
Ll9wb3J0LnJlc3VsdHNfZGlyZWN0b3J5KCksIHRlc3QpCiAgICAgICAgICAgICAgICAgd3JpdGVy
LndyaXRlX2NyYXNoX2xvZyhjcmFzaF9sb2cpCiAKLSAgICBkZWYgX21hcmtfaW50ZXJydXB0ZWRf
dGVzdHNfYXNfc2tpcHBlZChzZWxmLCByZXN1bHRfc3VtbWFyeSk6Ci0gICAgICAgIGZvciB0ZXN0
X25hbWUgaW4gc2VsZi5fdGVzdF9uYW1lczoKLSAgICAgICAgICAgIGlmIHRlc3RfbmFtZSBub3Qg
aW4gcmVzdWx0X3N1bW1hcnkucmVzdWx0czoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSB0ZXN0
X3Jlc3VsdHMuVGVzdFJlc3VsdCh0ZXN0X25hbWUsIFt0ZXN0X2ZhaWx1cmVzLkZhaWx1cmVFYXJs
eUV4aXQoKV0pCi0gICAgICAgICAgICAgICAgIyBGSVhNRTogV2UgcHJvYmFibHkgbmVlZCB0byBs
b29wIGhlcmUgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGl0ZXJhdGlvbnMuCi0gICAgICAgICAgICAg
ICAgIyBGSVhNRTogQWxzbywgdGhlc2UgcmVzdWx0cyBhcmUgcmVhbGx5IG5laXRoZXIgZXhwZWN0
ZWQgbm9yIHVuZXhwZWN0ZWQuIFdlIHByb2JhYmx5Ci0gICAgICAgICAgICAgICAgIyBuZWVkIGEg
dGhpcmQgdHlwZSBvZiByZXN1bHQuCi0gICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkuYWRk
KHJlc3VsdCwgZXhwZWN0ZWQ9RmFsc2UsIHRlc3RfaXNfc2xvdz1zZWxmLl90ZXN0X2lzX3Nsb3co
dGVzdF9uYW1lKSkKLQotICAgIGRlZiBfaW50ZXJydXB0X2lmX2F0X2ZhaWx1cmVfbGltaXRzKHNl
bGYsIHJlc3VsdF9zdW1tYXJ5KToKLSAgICAgICAgIyBOb3RlOiBUaGUgbWVzc2FnZXMgaW4gdGhp
cyBtZXRob2QgYXJlIGNvbnN0cnVjdGVkIHRvIG1hdGNoIG9sZC1ydW4td2Via2l0LXRlc3RzCi0g
ICAgICAgICMgc28gdGhhdCBleGlzdGluZyBidWlsZGJvdCBncmVwIHJ1bGVzIHdvcmsuCi0gICAg
ICAgIGRlZiBpbnRlcnJ1cHRfaWZfYXRfZmFpbHVyZV9saW1pdChsaW1pdCwgZmFpbHVyZV9jb3Vu
dCwgcmVzdWx0X3N1bW1hcnksIG1lc3NhZ2UpOgotICAgICAgICAgICAgaWYgbGltaXQgYW5kIGZh
aWx1cmVfY291bnQgPj0gbGltaXQ6Ci0gICAgICAgICAgICAgICAgbWVzc2FnZSArPSAiICVkIHRl
c3RzIHJ1bi4iICUgKHJlc3VsdF9zdW1tYXJ5LmV4cGVjdGVkICsgcmVzdWx0X3N1bW1hcnkudW5l
eHBlY3RlZCkKLSAgICAgICAgICAgICAgICBzZWxmLl9tYXJrX2ludGVycnVwdGVkX3Rlc3RzX2Fz
X3NraXBwZWQocmVzdWx0X3N1bW1hcnkpCi0gICAgICAgICAgICAgICAgcmFpc2UgVGVzdFJ1bklu
dGVycnVwdGVkRXhjZXB0aW9uKG1lc3NhZ2UpCi0KLSAgICAgICAgaW50ZXJydXB0X2lmX2F0X2Zh
aWx1cmVfbGltaXQoCi0gICAgICAgICAgICBzZWxmLl9vcHRpb25zLmV4aXRfYWZ0ZXJfbl9mYWls
dXJlcywKLSAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnVuZXhwZWN0ZWRfZmFpbHVyZXMsCi0g
ICAgICAgICAgICByZXN1bHRfc3VtbWFyeSwKLSAgICAgICAgICAgICJFeGl0aW5nIGVhcmx5IGFm
dGVyICVkIGZhaWx1cmVzLiIgJSByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkX2ZhaWx1cmVzKQot
ICAgICAgICBpbnRlcnJ1cHRfaWZfYXRfZmFpbHVyZV9saW1pdCgKLSAgICAgICAgICAgIHNlbGYu
X29wdGlvbnMuZXhpdF9hZnRlcl9uX2NyYXNoZXNfb3JfdGltZW91dHMsCi0gICAgICAgICAgICBy
ZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkX2NyYXNoZXMgKyByZXN1bHRfc3VtbWFyeS51bmV4cGVj
dGVkX3RpbWVvdXRzLAotICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnksCi0gICAgICAgICAgICAj
IFRoaXMgZGlmZmVycyBmcm9tIE9SV1QgYmVjYXVzZSBpdCBkb2VzIG5vdCBpbmNsdWRlIFdlYlBy
b2Nlc3MgY3Jhc2hlcy4KLSAgICAgICAgICAgICJFeGl0aW5nIGVhcmx5IGFmdGVyICVkIGNyYXNo
ZXMgYW5kICVkIHRpbWVvdXRzLiIgJSAocmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZF9jcmFzaGVz
LCByZXN1bHRfc3VtbWFyeS51bmV4cGVjdGVkX3RpbWVvdXRzKSkKLQotICAgIGRlZiBfdXBkYXRl
X3N1bW1hcnlfd2l0aF9yZXN1bHQoc2VsZiwgcmVzdWx0X3N1bW1hcnksIHJlc3VsdCk6Ci0gICAg
ICAgIGlmIHJlc3VsdC50eXBlID09IHRlc3RfZXhwZWN0YXRpb25zLlNLSVA6Ci0gICAgICAgICAg
ICBleHBfc3RyID0gZ290X3N0ciA9ICdTS0lQJwotICAgICAgICAgICAgZXhwZWN0ZWQgPSBUcnVl
Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBleHBlY3RlZCA9IHNlbGYuX2V4cGVjdGF0aW9u
cy5tYXRjaGVzX2FuX2V4cGVjdGVkX3Jlc3VsdChyZXN1bHQudGVzdF9uYW1lLCByZXN1bHQudHlw
ZSwgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cyBvciB0ZXN0X2ZhaWx1cmVzLmlzX3JlZnRlc3Rf
ZmFpbHVyZShyZXN1bHQuZmFpbHVyZXMpKQotICAgICAgICAgICAgZXhwX3N0ciA9IHNlbGYuX2V4
cGVjdGF0aW9ucy5nZXRfZXhwZWN0YXRpb25zX3N0cmluZyhyZXN1bHQudGVzdF9uYW1lKQotICAg
ICAgICAgICAgZ290X3N0ciA9IHNlbGYuX2V4cGVjdGF0aW9ucy5leHBlY3RhdGlvbl90b19zdHJp
bmcocmVzdWx0LnR5cGUpCi0KLSAgICAgICAgcmVzdWx0X3N1bW1hcnkuYWRkKHJlc3VsdCwgZXhw
ZWN0ZWQsIHNlbGYuX3Rlc3RfaXNfc2xvdyhyZXN1bHQudGVzdF9uYW1lKSkKLQotICAgICAgICAj
IEZJWE1FOiB0aGVyZSdzIHRvbyBtYW55IGFyZ3VtZW50cyB0byB0aGlzIGZ1bmN0aW9uLgotICAg
ICAgICBzZWxmLl9wcmludGVyLnByaW50X2ZpbmlzaGVkX3Rlc3QocmVzdWx0LCBleHBlY3RlZCwg
ZXhwX3N0ciwgZ290X3N0ciwgcmVzdWx0X3N1bW1hcnksIHNlbGYuX3JldHJ5aW5nLCBzZWxmLl90
ZXN0X25hbWVzKQotCi0gICAgICAgIHNlbGYuX2ludGVycnVwdF9pZl9hdF9mYWlsdXJlX2xpbWl0
cyhyZXN1bHRfc3VtbWFyeSkKLQogICAgIGRlZiBfY2xvYmJlcl9vbGRfcmVzdWx0cyhzZWxmKToK
ICAgICAgICAgIyBKdXN0IGNsb2JiZXIgdGhlIGFjdHVhbCB0ZXN0IHJlc3VsdHMgZGlyZWN0b3Jp
ZXMgc2luY2UgdGhlIG90aGVyCiAgICAgICAgICMgZmlsZXMgaW4gdGhlIHJlc3VsdHMgZGlyZWN0
b3J5IGFyZSBleHBsaWNpdGx5IHVzZWQgZm9yIGNyb3NzLXJ1bgpAQCAtNzgwLDM1ICs2MTcsMyBA
QCBjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAKICAgICAgICAgcmVzdWx0c19maWxlbmFtZSA9IHNl
bGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl9yZXN1bHRzX2RpcmVjdG9yeSwgInJlc3VsdHMuaHRt
bCIpCiAgICAgICAgIHNlbGYuX3BvcnQuc2hvd19yZXN1bHRzX2h0bWxfZmlsZShyZXN1bHRzX2Zp
bGVuYW1lKQotCi0gICAgZGVmIGhhbmRsZShzZWxmLCBuYW1lLCBzb3VyY2UsICphcmdzKToKLSAg
ICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLCAnX2hhbmRsZV8nICsgbmFtZSkKLSAgICAgICAg
aWYgbWV0aG9kOgotICAgICAgICAgICAgcmV0dXJuIG1ldGhvZChzb3VyY2UsICphcmdzKQotICAg
ICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigndW5rbm93biBtZXNzYWdlICVzIHJlY2VpdmVkIGZy
b20gJXMsIGFyZ3M9JXMnICUgKG5hbWUsIHNvdXJjZSwgcmVwcihhcmdzKSkpCi0KLSAgICBkZWYg
X2hhbmRsZV9zdGFydGVkX3Rlc3Qoc2VsZiwgd29ya2VyX25hbWUsIHRlc3RfaW5wdXQsIHRlc3Rf
dGltZW91dF9zZWMpOgotICAgICAgICAjIEZJWE1FOiBsb2cgdGhhdCB3ZSd2ZSBzdGFydGVkIGFu
b3RoZXIgdGVzdC4KLSAgICAgICAgcGFzcwotCi0gICAgZGVmIF9oYW5kbGVfZmluaXNoZWRfdGVz
dF9saXN0KHNlbGYsIHdvcmtlcl9uYW1lLCBsaXN0X25hbWUsIG51bV90ZXN0cywgZWxhcHNlZF90
aW1lKToKLSAgICAgICAgc2VsZi5fZ3JvdXBfc3RhdHNbbGlzdF9uYW1lXSA9IChudW1fdGVzdHMs
IGVsYXBzZWRfdGltZSkKLQotICAgICAgICBkZWYgZmluZChuYW1lLCB0ZXN0X2xpc3RzKToKLSAg
ICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbih0ZXN0X2xpc3RzKSk6Ci0gICAgICAgICAgICAg
ICAgaWYgdGVzdF9saXN0c1tpXS5uYW1lID09IG5hbWU6Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBpCi0gICAgICAgICAgICByZXR1cm4gLTEKLQotICAgICAgICBpbmRleCA9IGZpbmQobGlz
dF9uYW1lLCBzZWxmLl9yZW1haW5pbmdfbG9ja2VkX3NoYXJkcykKLSAgICAgICAgaWYgaW5kZXgg
Pj0gMDoKLSAgICAgICAgICAgIHNlbGYuX3JlbWFpbmluZ19sb2NrZWRfc2hhcmRzLnBvcChpbmRl
eCkKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9yZW1haW5pbmdfbG9ja2VkX3NoYXJkczoKLSAg
ICAgICAgICAgICAgICBzZWxmLnN0b3Bfc2VydmVyc193aXRoX2xvY2soKQotCi0gICAgZGVmIF9o
YW5kbGVfZmluaXNoZWRfdGVzdChzZWxmLCB3b3JrZXJfbmFtZSwgcmVzdWx0LCBlbGFwc2VkX3Rp
bWUsIGxvZ19tZXNzYWdlcz1bXSk6Ci0gICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0cy5zZXRkZWZh
dWx0KHdvcmtlcl9uYW1lLCB7J25hbWUnOiB3b3JrZXJfbmFtZSwgJ251bV90ZXN0cyc6IDAsICd0
b3RhbF90aW1lJzogMH0pCi0gICAgICAgIHNlbGYuX3dvcmtlcl9zdGF0c1t3b3JrZXJfbmFtZV1b
J3RvdGFsX3RpbWUnXSArPSBlbGFwc2VkX3RpbWUKLSAgICAgICAgc2VsZi5fd29ya2VyX3N0YXRz
W3dvcmtlcl9uYW1lXVsnbnVtX3Rlc3RzJ10gKz0gMQotICAgICAgICBzZWxmLl9hbGxfcmVzdWx0
cy5hcHBlbmQocmVzdWx0KQotICAgICAgICBzZWxmLl91cGRhdGVfc3VtbWFyeV93aXRoX3Jlc3Vs
dChzZWxmLl9jdXJyZW50X3Jlc3VsdF9zdW1tYXJ5LCByZXN1bHQpCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9tYW5hZ2VyX3VuaXR0
ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMv
bWFuYWdlcl91bml0dGVzdC5weQppbmRleCA5NzRjNjNlNWM1Y2UwMTM0YzIxOGVmNjY2ZjdmNzNh
ZjQ4YWU5MjJkLi5jZTUxMTgxM2QwYTA0MGZmMGU2NmExMTQwOGEwYThiM2E1N2E0ZGI1IDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9t
YW5hZ2VyX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2NvbnRyb2xsZXJzL21hbmFnZXJfdW5pdHRlc3QucHkKQEAgLTMwLDEyOSArMzAsMjEgQEAK
IAogIiIiVW5pdCB0ZXN0cyBmb3IgbWFuYWdlci5weS4iIiIKIAotaW1wb3J0IFN0cmluZ0lPCiBp
bXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiAKLWZyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbS5maWxlc3lzdGVtX21vY2sgaW1wb3J0IE1vY2tGaWxlU3lzdGVtCi1mcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IG91dHB1dGNhcHR1cmUKLWZyb20gd2Via2l0
cHkudGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBNb2NrCi1mcm9tIHdlYmtpdHB5IGltcG9ydCBsYXlv
dXRfdGVzdHMKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IHBvcnRfdGVz
dGNhc2UKLQotZnJvbSB3ZWJraXRweSBpbXBvcnQgbGF5b3V0X3Rlc3RzCi1mcm9tIHdlYmtpdHB5
LmxheW91dF90ZXN0cyBpbXBvcnQgcnVuX3dlYmtpdF90ZXN0cwotZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMuY29udHJvbGxlcnMgaW1wb3J0IG1hbmFnZXIKLWZyb20gd2Via2l0cHkubGF5b3V0
X3Rlc3RzLmNvbnRyb2xsZXJzLm1hbmFnZXIgaW1wb3J0IGludGVycHJldF90ZXN0X2ZhaWx1cmVz
LCAgTWFuYWdlciwgVGVzdFJ1bkludGVycnVwdGVkRXhjZXB0aW9uCitmcm9tIHdlYmtpdHB5LmNv
bW1vbi5ob3N0X21vY2sgaW1wb3J0IE1vY2tIb3N0Citmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0
cy5jb250cm9sbGVycy5tYW5hZ2VyIGltcG9ydCBNYW5hZ2VyLCBpbnRlcnByZXRfdGVzdF9mYWls
dXJlcywgc3VtbWFyaXplX3Jlc3VsdHMKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVs
cyBpbXBvcnQgdGVzdF9leHBlY3RhdGlvbnMKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1v
ZGVscyBpbXBvcnQgdGVzdF9mYWlsdXJlcwogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubW9k
ZWxzIGltcG9ydCB0ZXN0X3Jlc3VsdHMKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLm1vZGVs
cy5yZXN1bHRfc3VtbWFyeSBpbXBvcnQgUmVzdWx0U3VtbWFyeQotZnJvbSB3ZWJraXRweS5sYXlv
dXRfdGVzdHMubW9kZWxzLnRlc3RfZXhwZWN0YXRpb25zIGltcG9ydCBUZXN0RXhwZWN0YXRpb25z
Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9yZXN1bHRzIGltcG9ydCBU
ZXN0UmVzdWx0Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9pbnB1dCBp
bXBvcnQgVGVzdElucHV0Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy52aWV3cyBpbXBvcnQg
cHJpbnRpbmcKK2Zyb20gd2Via2l0cHkudGhpcmRwYXJ0eS5tb2NrIGltcG9ydCBNb2NrCiBmcm9t
IHdlYmtpdHB5LnRvb2wubW9ja3Rvb2wgaW1wb3J0IE1vY2tPcHRpb25zCi1mcm9tIHdlYmtpdHB5
LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlX21vY2sgaW1wb3J0IE1vY2tFeGVjdXRpdmUKLWZyb20g
d2Via2l0cHkuY29tbW9uLmhvc3RfbW9jayBpbXBvcnQgTW9ja0hvc3QKLQotCi1jbGFzcyBMb2Nr
Q2hlY2tpbmdNYW5hZ2VyKE1hbmFnZXIpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0LCBv
cHRpb25zLCBwcmludGVyLCB0ZXN0ZXIsIGh0dHBfbG9jayk6Ci0gICAgICAgIHN1cGVyKExvY2tD
aGVja2luZ01hbmFnZXIsIHNlbGYpLl9faW5pdF9fKHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpCi0g
ICAgICAgIHNlbGYuX2ZpbmlzaGVkX2xpc3RfY2FsbGVkID0gRmFsc2UKLSAgICAgICAgc2VsZi5f
dGVzdGVyID0gdGVzdGVyCi0gICAgICAgIHNlbGYuX3Nob3VsZF9oYXZlX2h0dHBfbG9jayA9IGh0
dHBfbG9jawotCi0gICAgZGVmIGhhbmRsZV9maW5pc2hlZF9saXN0KHNlbGYsIHNvdXJjZSwgbGlz
dF9uYW1lLCBudW1fdGVzdHMsIGVsYXBzZWRfdGltZSk6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9m
aW5pc2hlZF9saXN0X2NhbGxlZDoKLSAgICAgICAgICAgIHNlbGYuX3Rlc3Rlci5hc3NlcnRFcXVh
bHMobGlzdF9uYW1lLCAnbG9ja2VkX3Rlc3RzJykKLSAgICAgICAgICAgIHNlbGYuX3Rlc3Rlci5h
c3NlcnRUcnVlKHNlbGYuX3JlbWFpbmluZ19sb2NrZWRfc2hhcmRzKQotICAgICAgICAgICAgc2Vs
Zi5fdGVzdGVyLmFzc2VydFRydWUoc2VsZi5faGFzX2h0dHBfbG9jayBpcyBzZWxmLl9zaG91bGRf
aGF2ZV9odHRwX2xvY2spCi0KLSAgICAgICAgc3VwZXIoTG9ja0NoZWNraW5nTWFuYWdlciwgc2Vs
ZikuaGFuZGxlX2ZpbmlzaGVkX2xpc3Qoc291cmNlLCBsaXN0X25hbWUsIG51bV90ZXN0cywgZWxh
cHNlZF90aW1lKQotCi0gICAgICAgIGlmIG5vdCBzZWxmLl9maW5pc2hlZF9saXN0X2NhbGxlZDoK
LSAgICAgICAgICAgIHNlbGYuX3Rlc3Rlci5hc3NlcnRFcXVhbHMoc2VsZi5fcmVtYWluaW5nX2xv
Y2tlZF9zaGFyZHMsIFtdKQotICAgICAgICAgICAgc2VsZi5fdGVzdGVyLmFzc2VydEZhbHNlKHNl
bGYuX2hhc19odHRwX2xvY2spCi0gICAgICAgICAgICBzZWxmLl9maW5pc2hlZF9saXN0X2NhbGxl
ZCA9IFRydWUKIAogCiBjbGFzcyBNYW5hZ2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAg
ZGVmIGdldF9vcHRpb25zKHNlbGYpOgotICAgICAgICByZXR1cm4gTW9ja09wdGlvbnMocGl4ZWxf
dGVzdHM9RmFsc2UsIG5ld19iYXNlbGluZT1GYWxzZSwgdGltZV9vdXRfbXM9NjAwMCwgc2xvd190
aW1lX291dF9tcz0zMDAwMCwgd29ya2VyX21vZGVsPSdpbmxpbmUnLCBtYXhfbG9ja2VkX3NoYXJk
cz0xKQotCi0gICAgZGVmIHRlc3RfaHR0cF9sb2NraW5nKHRlc3Rlcik6Ci0gICAgICAgIG9wdGlv
bnMsIGFyZ3MgPSBydW5fd2Via2l0X3Rlc3RzLnBhcnNlX2FyZ3MoWyctLXBsYXRmb3JtPXRlc3Qn
LCAnLS1wcmludD1ub3RoaW5nJywgJ2h0dHAvdGVzdHMvcGFzc2VzJywgJ3Bhc3NlcyddKQotICAg
ICAgICBob3N0ID0gTW9ja0hvc3QoKQotICAgICAgICBwb3J0ID0gaG9zdC5wb3J0X2ZhY3Rvcnku
Z2V0KHBvcnRfbmFtZT1vcHRpb25zLnBsYXRmb3JtLCBvcHRpb25zPW9wdGlvbnMpCi0gICAgICAg
IHJ1bl93ZWJraXRfdGVzdHMuX3NldF91cF9kZXJpdmVkX29wdGlvbnMocG9ydCwgb3B0aW9ucykK
LSAgICAgICAgcHJpbnRlciA9IHByaW50aW5nLlByaW50ZXIocG9ydCwgb3B0aW9ucywgU3RyaW5n
SU8uU3RyaW5nSU8oKSwgU3RyaW5nSU8uU3RyaW5nSU8oKSkKLSAgICAgICAgbWFuYWdlciA9IExv
Y2tDaGVja2luZ01hbmFnZXIocG9ydCwgb3B0aW9ucywgcHJpbnRlciwgdGVzdGVyLCBUcnVlKQot
ICAgICAgICBudW1fdW5leHBlY3RlZF9yZXN1bHRzID0gbWFuYWdlci5ydW4oYXJncykKLSAgICAg
ICAgcHJpbnRlci5jbGVhbnVwKCkKLSAgICAgICAgdGVzdGVyLmFzc2VydEVxdWFscyhudW1fdW5l
eHBlY3RlZF9yZXN1bHRzLCAwKQotCi0gICAgZGVmIHRlc3RfcGVyZl9sb2NraW5nKHRlc3Rlcik6
Ci0gICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBydW5fd2Via2l0X3Rlc3RzLnBhcnNlX2FyZ3MoWyct
LXBsYXRmb3JtPXRlc3QnLCAnLS1wcmludD1ub3RoaW5nJywgJy0tbm8taHR0cCcsICdwYXNzZXMn
LCAncGVyZi8nXSkKLSAgICAgICAgaG9zdCA9IE1vY2tIb3N0KCkKLSAgICAgICAgcG9ydCA9IGhv
c3QucG9ydF9mYWN0b3J5LmdldChwb3J0X25hbWU9b3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucz1v
cHRpb25zKQotICAgICAgICBydW5fd2Via2l0X3Rlc3RzLl9zZXRfdXBfZGVyaXZlZF9vcHRpb25z
KHBvcnQsIG9wdGlvbnMpCi0gICAgICAgIHByaW50ZXIgPSBwcmludGluZy5QcmludGVyKHBvcnQs
IG9wdGlvbnMsIFN0cmluZ0lPLlN0cmluZ0lPKCksIFN0cmluZ0lPLlN0cmluZ0lPKCkpCi0gICAg
ICAgIG1hbmFnZXIgPSBMb2NrQ2hlY2tpbmdNYW5hZ2VyKHBvcnQsIG9wdGlvbnMsIHByaW50ZXIs
IHRlc3RlciwgRmFsc2UpCi0gICAgICAgIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMgPSBtYW5hZ2Vy
LnJ1bihhcmdzKQotICAgICAgICBwcmludGVyLmNsZWFudXAoKQotICAgICAgICB0ZXN0ZXIuYXNz
ZXJ0RXF1YWxzKG51bV91bmV4cGVjdGVkX3Jlc3VsdHMsIDApCi0KLSAgICBkZWYgdGVzdF9pbnRl
cnJ1cHRfaWZfYXRfZmFpbHVyZV9saW1pdHMoc2VsZik6Ci0gICAgICAgIHBvcnQgPSBNb2NrKCkg
ICMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIGEgdGlnaHRlciBtb2NrLgotICAgICAgICBwb3J0LlRF
U1RfUEFUSF9TRVBBUkFUT1IgPSAnLycKLSAgICAgICAgcG9ydC5fZmlsZXN5c3RlbSA9IE1vY2tG
aWxlU3lzdGVtKCkKLSAgICAgICAgbWFuYWdlciA9IE1hbmFnZXIocG9ydD1wb3J0LCBvcHRpb25z
PU1vY2tPcHRpb25zKG1heF9sb2NrZWRfc2hhcmRzPTEpLCBwcmludGVyPU1vY2soKSkKLQotICAg
ICAgICBtYW5hZ2VyLl9vcHRpb25zID0gTW9ja09wdGlvbnMoZXhpdF9hZnRlcl9uX2ZhaWx1cmVz
PU5vbmUsIGV4aXRfYWZ0ZXJfbl9jcmFzaGVzX29yX3RpbWVvdXRzPU5vbmUsIG1heF9sb2NrZWRf
c2hhcmRzPTEpCi0gICAgICAgIG1hbmFnZXIuX3Rlc3RfbmFtZXMgPSBbJ2Zvby9iYXIuaHRtbCcs
ICdiYXouaHRtbCddCi0gICAgICAgIG1hbmFnZXIuX3Rlc3RfaXNfc2xvdyA9IGxhbWJkYSB0ZXN0
X25hbWU6IEZhbHNlCi0KLSAgICAgICAgcmVzdWx0X3N1bW1hcnkgPSBSZXN1bHRTdW1tYXJ5KE1v
Y2soKSwgbWFuYWdlci5fdGVzdF9uYW1lcywgMSwgc2V0KCkpCi0gICAgICAgIHJlc3VsdF9zdW1t
YXJ5LnVuZXhwZWN0ZWRfZmFpbHVyZXMgPSAxMDAKLSAgICAgICAgcmVzdWx0X3N1bW1hcnkudW5l
eHBlY3RlZF9jcmFzaGVzID0gNTAKLSAgICAgICAgcmVzdWx0X3N1bW1hcnkudW5leHBlY3RlZF90
aW1lb3V0cyA9IDUwCi0gICAgICAgICMgTm8gZXhjZXB0aW9uIHdoZW4gdGhlIGV4aXRfYWZ0ZXIq
IG9wdGlvbnMgYXJlIE5vbmUuCi0gICAgICAgIG1hbmFnZXIuX2ludGVycnVwdF9pZl9hdF9mYWls
dXJlX2xpbWl0cyhyZXN1bHRfc3VtbWFyeSkKLQotICAgICAgICAjIE5vIGV4Y2VwdGlvbiB3aGVu
IHdlIGhhdmVuJ3QgaGl0IHRoZSBsaW1pdCB5ZXQuCi0gICAgICAgIG1hbmFnZXIuX29wdGlvbnMu
ZXhpdF9hZnRlcl9uX2ZhaWx1cmVzID0gMTAxCi0gICAgICAgIG1hbmFnZXIuX29wdGlvbnMuZXhp
dF9hZnRlcl9uX2NyYXNoZXNfb3JfdGltZW91dHMgPSAxMDEKLSAgICAgICAgbWFuYWdlci5faW50
ZXJydXB0X2lmX2F0X2ZhaWx1cmVfbGltaXRzKHJlc3VsdF9zdW1tYXJ5KQotCi0gICAgICAgICMg
SW50ZXJydXB0IGlmIHdlJ3ZlIGV4Y2VlZGVkIGVpdGhlciBsaW1pdDoKLSAgICAgICAgbWFuYWdl
ci5fb3B0aW9ucy5leGl0X2FmdGVyX25fY3Jhc2hlc19vcl90aW1lb3V0cyA9IDEwCi0gICAgICAg
IHNlbGYuYXNzZXJ0UmFpc2VzKFRlc3RSdW5JbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgbWFuYWdlci5f
aW50ZXJydXB0X2lmX2F0X2ZhaWx1cmVfbGltaXRzLCByZXN1bHRfc3VtbWFyeSkKLQotICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHRfc3VtbWFyeS5yZXN1bHRzWydmb28vYmFyLmh0bWwn
XS50eXBlLCB0ZXN0X2V4cGVjdGF0aW9ucy5TS0lQKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhyZXN1bHRfc3VtbWFyeS5yZXN1bHRzWydiYXouaHRtbCddLnR5cGUsIHRlc3RfZXhwZWN0YXRp
b25zLlNLSVApCi0KLSAgICAgICAgbWFuYWdlci5fb3B0aW9ucy5leGl0X2FmdGVyX25fY3Jhc2hl
c19vcl90aW1lb3V0cyA9IE5vbmUKLSAgICAgICAgbWFuYWdlci5fb3B0aW9ucy5leGl0X2FmdGVy
X25fZmFpbHVyZXMgPSAxMAotICAgICAgICBleGNlcHRpb24gPSBzZWxmLmFzc2VydFJhaXNlcyhU
ZXN0UnVuSW50ZXJydXB0ZWRFeGNlcHRpb24sIG1hbmFnZXIuX2ludGVycnVwdF9pZl9hdF9mYWls
dXJlX2xpbWl0cywgcmVzdWx0X3N1bW1hcnkpCi0KLSAgICBkZWYgdGVzdF91cGRhdGVfc3VtbWFy
eV93aXRoX3Jlc3VsdChzZWxmKToKLSAgICAgICAgaG9zdCA9IE1vY2tIb3N0KCkKLSAgICAgICAg
cG9ydCA9IGhvc3QucG9ydF9mYWN0b3J5LmdldCgndGVzdC13aW4teHAnKQotICAgICAgICB0ZXN0
ID0gJ2ZhaWx1cmVzL2V4cGVjdGVkL3JlZnRlc3QuaHRtbCcKLSAgICAgICAgcG9ydC5leHBlY3Rh
dGlvbnNfZGljdCA9IGxhbWJkYTogeycnOiAnV09OVEZJWCA6IGZhaWx1cmVzL2V4cGVjdGVkL3Jl
ZnRlc3QuaHRtbCA9IElNQUdFJ30KLSAgICAgICAgZXhwZWN0YXRpb25zID0gVGVzdEV4cGVjdGF0
aW9ucyhwb3J0LCB0ZXN0cz1bdGVzdF0pCi0gICAgICAgICMgUmVmdGVzdHMgZXhwZWN0ZWQgdG8g
YmUgaW1hZ2UgbWlzbWF0Y2ggc2hvdWxkIGJlIHJlc3BlY3RlZCB3aGVuIHBpeGVsX3Rlc3RzPUZh
bHNlLgotICAgICAgICBtYW5hZ2VyID0gTWFuYWdlcihwb3J0PXBvcnQsIG9wdGlvbnM9TW9ja09w
dGlvbnMocGl4ZWxfdGVzdHM9RmFsc2UsIGV4aXRfYWZ0ZXJfbl9mYWlsdXJlcz1Ob25lLCBleGl0
X2FmdGVyX25fY3Jhc2hlc19vcl90aW1lb3V0cz1Ob25lLCBtYXhfbG9ja2VkX3NoYXJkcz0xKSwg
cHJpbnRlcj1Nb2NrKCkpCi0gICAgICAgIG1hbmFnZXIuX2V4cGVjdGF0aW9ucyA9IGV4cGVjdGF0
aW9ucwotICAgICAgICByZXN1bHRfc3VtbWFyeSA9IFJlc3VsdFN1bW1hcnkoZXhwZWN0YXRpb25z
LCBbdGVzdF0sIDEsIHNldCgpKQotICAgICAgICByZXN1bHQgPSBUZXN0UmVzdWx0KHRlc3RfbmFt
ZT10ZXN0LCBmYWlsdXJlcz1bdGVzdF9mYWlsdXJlcy5GYWlsdXJlUmVmdGVzdE1pc21hdGNoRGlk
Tm90T2NjdXIoKV0pCi0gICAgICAgIG1hbmFnZXIuX3VwZGF0ZV9zdW1tYXJ5X3dpdGhfcmVzdWx0
KHJlc3VsdF9zdW1tYXJ5LCByZXN1bHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDEsIHJl
c3VsdF9zdW1tYXJ5LmV4cGVjdGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygwLCByZXN1
bHRfc3VtbWFyeS51bmV4cGVjdGVkKQotCiAgICAgZGVmIHRlc3RfbmVlZHNfc2VydmVycyhzZWxm
KToKICAgICAgICAgZGVmIGdldF9tYW5hZ2VyX3dpdGhfdGVzdHModGVzdF9uYW1lcyk6CiAgICAg
ICAgICAgICBwb3J0ID0gTW9jaygpICAjIEZJWE1FOiBVc2UgYSB0aWdodGVyIG1vY2suCkBAIC0y
MDMsNTggKzk1LDYgQEAgY2xhc3MgTWFuYWdlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAg
ICAgICBtYW5hZ2VyID0gZ2V0X21hbmFnZXJfd2l0aF90ZXN0cyh0ZXN0cykKICAgICAgICAgbWFu
YWdlci5fbG9va19mb3JfbmV3X2NyYXNoX2xvZ3MocnMsIHRpbWUudGltZSgpKQogCi0gICAgZGVm
IHRlc3Rfc2VydmVyc19zdGFydGVkKHNlbGYpOgotCi0gICAgICAgIGRlZiBzdGFydF9odHRwX3Nl
cnZlcihudW1iZXJfb2Zfc2VydmVycz1Ob25lKToKLSAgICAgICAgICAgIHNlbGYuaHR0cF9zdGFy
dGVkID0gVHJ1ZQotCi0gICAgICAgIGRlZiBzdGFydF93ZWJzb2NrZXRfc2VydmVyKCk6Ci0gICAg
ICAgICAgICBzZWxmLndlYnNvY2tldF9zdGFydGVkID0gVHJ1ZQotCi0gICAgICAgIGRlZiBzdG9w
X2h0dHBfc2VydmVyKCk6Ci0gICAgICAgICAgICBzZWxmLmh0dHBfc3RvcHBlZCA9IFRydWUKLQot
ICAgICAgICBkZWYgc3RvcF93ZWJzb2NrZXRfc2VydmVyKCk6Ci0gICAgICAgICAgICBzZWxmLndl
YnNvY2tldF9zdG9wcGVkID0gVHJ1ZQotCi0gICAgICAgIGhvc3QgPSBNb2NrSG9zdCgpCi0gICAg
ICAgIHBvcnQgPSBob3N0LnBvcnRfZmFjdG9yeS5nZXQoJ3Rlc3QtbWFjLWxlb3BhcmQnKQotICAg
ICAgICBwb3J0LnN0YXJ0X2h0dHBfc2VydmVyID0gc3RhcnRfaHR0cF9zZXJ2ZXIKLSAgICAgICAg
cG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVyID0gc3RhcnRfd2Vic29ja2V0X3NlcnZlcgotICAg
ICAgICBwb3J0LnN0b3BfaHR0cF9zZXJ2ZXIgPSBzdG9wX2h0dHBfc2VydmVyCi0gICAgICAgIHBv
cnQuc3RvcF93ZWJzb2NrZXRfc2VydmVyID0gc3RvcF93ZWJzb2NrZXRfc2VydmVyCi0KLSAgICAg
ICAgc2VsZi5odHRwX3N0YXJ0ZWQgPSBzZWxmLmh0dHBfc3RvcHBlZCA9IHNlbGYud2Vic29ja2V0
X3N0YXJ0ZWQgPSBzZWxmLndlYnNvY2tldF9zdG9wcGVkID0gRmFsc2UKLSAgICAgICAgbWFuYWdl
ciA9IE1hbmFnZXIocG9ydD1wb3J0LCBvcHRpb25zPU1vY2tPcHRpb25zKGh0dHA9VHJ1ZSwgbWF4
X2xvY2tlZF9zaGFyZHM9MSksIHByaW50ZXI9TW9jaygpKQotICAgICAgICBtYW5hZ2VyLl90ZXN0
X25hbWVzID0gWydodHRwL3Rlc3RzL3Bhc3MudHh0J10KLSAgICAgICAgbWFuYWdlci5zdGFydF9z
ZXJ2ZXJzX3dpdGhfbG9jayhudW1iZXJfb2Zfc2VydmVycz00KQotICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhzZWxmLmh0dHBfc3RhcnRlZCwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMoc2VsZi53ZWJzb2NrZXRfc3RhcnRlZCwgRmFsc2UpCi0gICAgICAgIG1hbmFnZXIuc3RvcF9z
ZXJ2ZXJzX3dpdGhfbG9jaygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuaHR0cF9z
dG9wcGVkLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLndlYnNvY2tldF9z
dG9wcGVkLCBGYWxzZSkKLQotICAgICAgICBzZWxmLmh0dHBfc3RhcnRlZCA9IHNlbGYuaHR0cF9z
dG9wcGVkID0gc2VsZi53ZWJzb2NrZXRfc3RhcnRlZCA9IHNlbGYud2Vic29ja2V0X3N0b3BwZWQg
PSBGYWxzZQotICAgICAgICBtYW5hZ2VyID0gTWFuYWdlcihwb3J0PXBvcnQsIG9wdGlvbnM9TW9j
a09wdGlvbnMoaHR0cD1UcnVlLCBtYXhfbG9ja2VkX3NoYXJkcz0xKSwgcHJpbnRlcj1Nb2NrKCkp
Ci0gICAgICAgIG1hbmFnZXIuX3Rlc3RfbmFtZXMgPSBbJ3dlYnNvY2tldC9wYXNzLnR4dCddCi0g
ICAgICAgIG1hbmFnZXIuc3RhcnRfc2VydmVyc193aXRoX2xvY2sobnVtYmVyX29mX3NlcnZlcnM9
NCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5odHRwX3N0YXJ0ZWQsIFRydWUpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYud2Vic29ja2V0X3N0YXJ0ZWQsIFRydWUpCi0g
ICAgICAgIG1hbmFnZXIuc3RvcF9zZXJ2ZXJzX3dpdGhfbG9jaygpCi0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKHNlbGYuaHR0cF9zdG9wcGVkLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFscyhzZWxmLndlYnNvY2tldF9zdG9wcGVkLCBUcnVlKQotCi0gICAgICAgIHNlbGYuaHR0cF9z
dGFydGVkID0gc2VsZi5odHRwX3N0b3BwZWQgPSBzZWxmLndlYnNvY2tldF9zdGFydGVkID0gc2Vs
Zi53ZWJzb2NrZXRfc3RvcHBlZCA9IEZhbHNlCi0gICAgICAgIG1hbmFnZXIgPSBNYW5hZ2VyKHBv
cnQ9cG9ydCwgb3B0aW9ucz1Nb2NrT3B0aW9ucyhodHRwPVRydWUsIG1heF9sb2NrZWRfc2hhcmRz
PTEpLCBwcmludGVyPU1vY2soKSkKLSAgICAgICAgbWFuYWdlci5fdGVzdF9uYW1lcyA9IFsncGVy
Zi9mb28vdGVzdC5odG1sJ10KLSAgICAgICAgbWFuYWdlci5zdGFydF9zZXJ2ZXJzX3dpdGhfbG9j
ayhudW1iZXJfb2Zfc2VydmVycz00KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmh0
dHBfc3RhcnRlZCwgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYud2Vic29j
a2V0X3N0YXJ0ZWQsIEZhbHNlKQotICAgICAgICBtYW5hZ2VyLnN0b3Bfc2VydmVyc193aXRoX2xv
Y2soKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmh0dHBfc3RvcHBlZCwgRmFsc2Up
Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYud2Vic29ja2V0X3N0b3BwZWQsIEZhbHNl
KQotCi0KIAogY2xhc3MgUmVzdWx0U3VtbWFyeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCkBA
IC0zMzAsOCArMTcwLDggQEAgY2xhc3MgUmVzdWx0U3VtbWFyeVRlc3QodW5pdHRlc3QuVGVzdENh
c2UpOgogICAgICAgICAgICAgcmV0cnkuYWRkKHNlbGYuZ2V0X3Jlc3VsdCgncGFzc2VzL3RleHQu
aHRtbCcpLCBUcnVlLCB0ZXN0X2lzX3Nsb3cpCiAgICAgICAgICAgICByZXRyeS5hZGQoc2VsZi5n
ZXRfcmVzdWx0KCdmYWlsdXJlcy9leHBlY3RlZC90aW1lb3V0Lmh0bWwnKSwgVHJ1ZSwgdGVzdF9p
c19zbG93KQogICAgICAgICAgICAgcmV0cnkuYWRkKHNlbGYuZ2V0X3Jlc3VsdCgnZmFpbHVyZXMv
ZXhwZWN0ZWQvY3Jhc2guaHRtbCcpLCBUcnVlLCB0ZXN0X2lzX3Nsb3cpCi0gICAgICAgIHVuZXhw
ZWN0ZWRfcmVzdWx0cyA9IG1hbmFnZXIuc3VtbWFyaXplX3Jlc3VsdHMocG9ydCwgZXhwLCBycywg
cmV0cnksIHRlc3RfdGltaW5ncz17fSwgb25seV91bmV4cGVjdGVkPVRydWUsIGludGVycnVwdGVk
PUZhbHNlKQotICAgICAgICBleHBlY3RlZF9yZXN1bHRzID0gbWFuYWdlci5zdW1tYXJpemVfcmVz
dWx0cyhwb3J0LCBleHAsIHJzLCByZXRyeSwgdGVzdF90aW1pbmdzPXt9LCBvbmx5X3VuZXhwZWN0
ZWQ9RmFsc2UsIGludGVycnVwdGVkPUZhbHNlKQorICAgICAgICB1bmV4cGVjdGVkX3Jlc3VsdHMg
PSBzdW1tYXJpemVfcmVzdWx0cyhwb3J0LCBleHAsIHJzLCByZXRyeSwgdGVzdF90aW1pbmdzPXt9
LCBvbmx5X3VuZXhwZWN0ZWQ9VHJ1ZSwgaW50ZXJydXB0ZWQ9RmFsc2UpCisgICAgICAgIGV4cGVj
dGVkX3Jlc3VsdHMgPSBzdW1tYXJpemVfcmVzdWx0cyhwb3J0LCBleHAsIHJzLCByZXRyeSwgdGVz
dF90aW1pbmdzPXt9LCBvbmx5X3VuZXhwZWN0ZWQ9RmFsc2UsIGludGVycnVwdGVkPUZhbHNlKQog
ICAgICAgICByZXR1cm4gZXhwZWN0ZWRfcmVzdWx0cywgdW5leHBlY3RlZF9yZXN1bHRzCiAKICAg
ICBkZWYgdGVzdF9ub19zdm5fcmV2aXNpb24oc2VsZik6CkBAIC0zNTQsNiArMTk0LDMgQEAgY2xh
c3MgUmVzdWx0U3VtbWFyeVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBwb3J0Ll9m
aWxlc3lzdGVtLndyaXRlX3RleHRfZmlsZShwb3J0Ll9maWxlc3lzdGVtLmpvaW4ocG9ydC5sYXlv
dXRfdGVzdHNfZGlyKCksICJmYWlsdXJlcy9leHBlY3RlZC93b250Zml4Lmh0bWwiKSwgIkR1bW15
IHRlc3QgY29udGVudHMiKQogICAgICAgICBleHBlY3RlZF9yZXN1bHRzLCB1bmV4cGVjdGVkX3Jl
c3VsdHMgPSBzZWxmLnN1bW1hcml6ZWRfcmVzdWx0cyhwb3J0LCBleHBlY3RlZD1GYWxzZSwgcGFz
c2luZz1GYWxzZSwgZmxha3k9RmFsc2UsIGV4dHJhX3Rlc3RzPVsnZmFpbHVyZXMvZXhwZWN0ZWQv
d29udGZpeC5odG1sJ10sIGV4dHJhX2V4cGVjdGF0aW9ucz0nQlVHWCBXT05URklYIDogZmFpbHVy
ZXMvZXhwZWN0ZWQvd29udGZpeC5odG1sID0gVEVYVFxuJykKICAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKGV4cGVjdGVkX3Jlc3VsdHNbJ3Rlc3RzJ11bJ2ZhaWx1cmVzJ11bJ2V4cGVjdGVkJ11bJ3dv
bnRmaXguaHRtbCddWyd3b250Zml4J10pCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0g
ICAgcG9ydF90ZXN0Y2FzZS5tYWluKCkK
</data>
<flag name="review"
          id="165169"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>