<?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>84973</bug_id>
          
          <creation_ts>2012-04-26 10:11:18 -0700</creation_ts>
          <short_desc>[GTK] Google tests that time out are leaked</short_desc>
          <delta_ts>2012-05-09 07:09:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>pnormand</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>610696</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-04-26 10:11:18 -0700</bug_when>
    <thetext>The problem is that run-gtk-test doesn&apos;t run the tests directly, it runs run-with-jhbuild, that runs jhbuild-wrapper that runs the test. When a test times out the process spawned by run-gtk-tests is killed, but in this case it&apos;s not the test, but one of the helps scripts, see:


\_ python ../Tools/Scripts/run-gtk-tests --skip=only --timeout=0 Programs/TestWebKitAPI/WebKit2/TestNewFirstVisuallyNonEmpt
      \_ [python] &lt;defunct&gt;
      \_ python ../Tools/gtk/run-with-jhbuild Programs/TestWebKitAPI/WebKit2/TestNewFirstVisuallyNonEmptyLayout --gtest_throw
            \_ Programs/TestWebKitAPI/WebKit2/TestNewFirstVisuallyNonEmptyLayout --gtest_throw_on_failure
                  \_ ../WebKitBuild/Release/Programs/WebKitWebProcess 9

In the case of glib tests, gtester is spawned that spawns the test, but the pid of the test is shown on stdou, so run-gtk-test parses that info and kills the test too.

So we have at least two options:

 a) Let run-gtk-test run the test directly instead of using two wrapper scripts, and change the bots to call run-gtk-test with jhbuild-wrapper as I already proposed some time ago.
 b) Now that we are using a common main for all google tests, we can just add a message that shows the pid of the process when it starts. We could even use the same message used by gtester so that we can reuse the code that parses it.

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617498</commentid>
    <comment_count>1</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-07 04:09:35 -0700</bug_when>
    <thetext>I&apos;ve noticed that we are also leaking the Xvfb process for exactly the same reason, and I&apos;m afraid the same happens with any other processes spawned by run-gtk-test, so I think option a) is the best one in the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617505</commentid>
    <comment_count>2</comment_count>
      <attachid>140507</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-07 04:14:59 -0700</bug_when>
    <thetext>Created attachment 140507
Patch

This patch moves run-gtk-test to Tools/gtk directory renamed as run-api-tests. Tools/Scripts/run-gtk-test is a simple wrapper that checks whether jhbuild is available or not, so that it runs the whole script with jhbuild if present (instead of running jhbuild for every subprocess of the script). In case of using jhbuild, it uses the jhbuild-wrapper directly instead of run-with-jhbuild to avoid another unnecessary layer.
run-api-tests has been simplified a lot, using common.py to get top_level and build paths, and removing the _create_process helper used to run jhbuild. 
This change should be transparent for users of run-gtk-tests, so we don&apos;t need any change in the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617674</commentid>
    <comment_count>3</comment_count>
      <attachid>140507</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-05-07 10:18:50 -0700</bug_when>
    <thetext>Comment on attachment 140507
Patch

Looks good, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618448</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-08 02:54:45 -0700</bug_when>
    <thetext>Committed r116410: &lt;http://trac.webkit.org/changeset/116410&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618768</commentid>
    <comment_count>5</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-05-08 13:53:23 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Committed r116410: &lt;http://trac.webkit.org/changeset/116410&gt;

Since this patch landed the API tests fail every 2 builds (so, green alternates with red API tests). Traceback:

Traceback (most recent call last):
  File &quot;./Tools/gtk/run-api-tests&quot;, line 353, in &lt;module&gt;
    sys.exit(TestRunner(options, args).run_tests())
  File &quot;./Tools/gtk/run-api-tests&quot;, line 291, in run_tests
    if not self._setup_testing_environment():
  File &quot;./Tools/gtk/run-api-tests&quot;, line 177, in _setup_testing_environment
    if not self._start_accessibility_daemons():
  File &quot;./Tools/gtk/run-api-tests&quot;, line 131, in _start_accessibility_daemons
    spi_bus_launcher_path = self._lookup_atspi2_binary(&apos;at-spi-bus-launcher&apos;)
  File &quot;./Tools/gtk/run-api-tests&quot;, line 124, in _lookup_atspi2_binary
    filepath = os.path.join(exec_prefix, path, filename)
  File &quot;/usr/lib/python2.6/posixpath.py&quot;, line 67, in join
    elif path == &apos;&apos; or path.endswith(&apos;/&apos;):
AttributeError: &apos;NoneType&apos; object has no attribute &apos;endswith&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619198</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-08 23:30:37 -0700</bug_when>
    <thetext>Actually it failed all the times, I already fixed it in http://trac.webkit.org/changeset/116412</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619452</commentid>
    <comment_count>7</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-05-09 07:09:58 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Actually it failed all the times, I already fixed it in http://trac.webkit.org/changeset/116412

There is still something wrong going on in the Release bot. Can you check it please?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140507</attachid>
            <date>2012-05-07 04:14:59 -0700</date>
            <delta_ts>2012-05-07 10:18:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>run-gtk-test-leaked-processes.diff</filename>
            <type>text/plain</type>
            <size>34639</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxZjdh
ODg0Li45YTkwYzU4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTItMDUtMDcgIENhcmxvcyBHYXJjaWEgQ2FtcG9z
ICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEdvb2dsZSB0ZXN0cyB0aGF0
IHRpbWUgb3V0IGFyZSBsZWFrZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTg0OTczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTW92ZSBUb29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMgdG8gVG9vbHMvZ3Rr
L3J1bi1hcGktdGVzdHMKKyAgICAgICAgbGVhdmluZyBydW4tZ3RrLXRlc3RzIGFzIHNpbXBsZSB3
cmFwcGVyIHRoYXQgcnVucyBydW4tYXBpLXRlc3RzIGluCisgICAgICAgIGEgamhidWlsZCBlbnZp
cm9ubWVudCB3aGVuIGpoYnVpbGQgaXMgYXZhaWxhYmxlLgorCisgICAgICAgICogU2NyaXB0cy9y
dW4tZ3RrLXRlc3RzOiBSdW4gVG9vbHMvZ3RrL3J1bi1hcGktdGVzdHMgZGlyZWN0bHkgb3IKKyAg
ICAgICAgd2l0aCBqaGJ1aWxkIGlmIHByZXNlbnQuCisgICAgICAgICogZ3RrL2NvbW1vbi5weToK
KyAgICAgICAgKHBrZ19jb25maWdfZmlsZV92YXJpYWJsZSk6IEdlbmVyaWMgZnVuY3Rpb24gdG8g
Z2V0IGEgdmFyaWFibGUKKyAgICAgICAgZnJvbSBhIHBrZy1jb25maWcgZmlsZS4KKyAgICAgICAg
KHByZWZpeF9vZl9wa2dfY29uZmlnX2ZpbGUpOiBVc2UgcGtnX2NvbmZpZ19maWxlX3ZhcmlhYmxl
IHdpdGggJ3ByZWZpeCcuCisgICAgICAgICogZ3RrL3J1bi1hcGktdGVzdHM6IENvcGllZCBmcm9t
IFRvb2xzL1NjcmlwdHMvcnVuLWd0ay10ZXN0cy4KKyAgICAgICAgKFRlc3RSdW5uZXIuX19pbml0
X18pOiBVc2UgY29tbW9uLmJ1aWxkX3BhdGgoKSB0byBnZXQgdGhlIHByb2dyYW1zIHBhdGguCisg
ICAgICAgIChUZXN0UnVubmVyLl9sb29rdXBfYXRzcGkyX2JpbmFyeSk6IFVzZQorICAgICAgICBj
b21tb24ucGtnX2NvbmZpZ19maWxlX3ZhcmlhYmxlKCkgdG8gZ2V0IHRoZSAnZXhlY19wcmVmaXgn
LgorICAgICAgICAoVGVzdFJ1bm5lci5fc3RhcnRfYWNjZXNzaWJpbGl0eV9kYWVtb25zKTogVXNl
IHN1YnByb2Nlc3MuUG9wZW4oKQorICAgICAgICBkaXJlY3RseSBpbnN0ZWFkIG9mIGhlbHBlciBf
Y3JlYXRlX3Byb2Nlc3MgdGhhdCBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgICAoVGVzdFJ1bm5l
ci5fc2V0dXBfdGVzdGluZ19lbnZpcm9ubWVudCk6IFVzZSBzdWJwcm9jZXNzLlBvcGVuKCkKKyAg
ICAgICAgZGlyZWN0bHkgaW5zdGVhZCBvZiBoZWxwZXIgX2NyZWF0ZV9wcm9jZXNzIHRoYXQgaGFz
IGJlZW4KKyAgICAgICAgcmVtb3ZlZC4gVXNlIGNvbW1vbi50b3BfbGV2ZWxfcGF0aCgpIGFuZCBj
b21tb24uYnVpbGRfcGF0aCgpCisgICAgICAgIGluc3RlYWQgb2YgY3VzdG9tIG1ldGhvZHMgdGhh
dCBoYXZlIGJlZW4gcmVtb3ZlZCB0b28uCisgICAgICAgIChUZXN0UnVubmVyLl9ydW5fdGVzdF9j
b21tYW5kKTogVXNlIHN1YnByb2Nlc3MuUG9wZW4oKSBkaXJlY3RseQorICAgICAgICBpbnN0ZWFk
IG9mIGhlbHBlciBfY3JlYXRlX3Byb2Nlc3MgdGhhdCBoYXMgYmVlbiByZW1vdmVkLgorCiAyMDEy
LTA1LTA2ICBNYXJ5IFd1ICA8bWFyeS53dUB0b3JjaG1vYmlsZS5jb20uY24+CiAKICAgICAgICAg
QWRkIGEgY29udHJpYnV0b3IgdG8gY29tbWl0dGVycy5weQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy9ydW4tZ3RrLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4tZ3RrLXRlc3RzCmluZGV4IDNm
OTA2NzEuLjNhMDdlOWUgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvcnVuLWd0ay10ZXN0cwor
KysgYi9Ub29scy9TY3JpcHRzL3J1bi1ndGstdGVzdHMKQEAgLTEsNiArMSw2IEBACiAjIS91c3Iv
YmluL2VudiBweXRob24KICMKLSMgQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisjIENv
cHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgogIwogIyBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAjIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCwzNzcg
KzIwLDE4IEBACiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCi1pbXBv
cnQgb3B0cGFyc2UKLWltcG9ydCByZQotZnJvbSBzaWduYWwgaW1wb3J0IGFsYXJtLCBzaWduYWws
IFNJR0FMUk0sIFNJR0tJTEwKLWZyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR2lvLCBHTGliCiAK
LWNsYXNzIFNraXBwZWRUZXN0OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0LCByZWFzb24s
IGJ1Zz1Ob25lLCB0ZXN0X2Nhc2VzPVtdKToKLSAgICAgICAgc2VsZi50ZXN0ID0gdGVzdAotICAg
ICAgICBzZWxmLnJlYXNvbiA9IHJlYXNvbgotICAgICAgICBzZWxmLmJ1ZyA9IGJ1ZwotICAgICAg
ICBzZWxmLnRlc3RfY2FzZXMgPSB0ZXN0X2Nhc2VzCithcGlfdGVzdHNfY29tbWFuZCA9IFtdCiAK
LSAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgc2tpcHBlZF90ZXN0X3N0ciA9ICIlcyIg
JSBzZWxmLnRlc3QKLSAgICAgICAgaWYgc2VsZi50ZXN0X2Nhc2VzOgotICAgICAgICAgICAgc2tp
cHBlZF90ZXN0X3N0ciArPSAiIFslc10iICUgIiwgIi5qb2luKHNlbGYudGVzdF9jYXNlcykKLSAg
ICAgICAgc2tpcHBlZF90ZXN0X3N0ciArPSAiOiAlcyAiICUgc2VsZi5yZWFzb24KLSAgICAgICAg
aWYgc2VsZi5idWcgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBza2lwcGVkX3Rlc3Rfc3RyICs9
ICIoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPSVkKSIgJSBzZWxmLmJ1
ZwotICAgICAgICByZXR1cm4gc2tpcHBlZF90ZXN0X3N0cgordG9wX2xldmVsX2RpcmVjdG9yeSA9
IG9zLnBhdGgubm9ybXBhdGgob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyks
ICIuLiIsICIuLiIpKQorcnVuX2FwaV90ZXN0c19wYXRoID0gb3MucGF0aC5qb2luKHRvcF9sZXZl
bF9kaXJlY3RvcnksICdUb29scycsICdndGsnLCAncnVuLWFwaS10ZXN0cycpCiAKLWNsYXNzIFRl
c3RUaW1lb3V0KEV4Y2VwdGlvbik6Ci0gICAgcGFzcworaWYgb3MucGF0aC5leGlzdHMob3MucGF0
aC5qb2luKHRvcF9sZXZlbF9kaXJlY3RvcnksICdXZWJLaXRCdWlsZCcsICdEZXBlbmRlbmNpZXMn
KSk6CisgICAgamhidWlsZF93cmFwcGVyX3BhdGggPSBvcy5wYXRoLmpvaW4odG9wX2xldmVsX2Rp
cmVjdG9yeSwgJ1Rvb2xzJywgJ2poYnVpbGQnLCAnamhidWlsZC13cmFwcGVyJykKKyAgICBhcGlf
dGVzdHNfY29tbWFuZCA9IFtqaGJ1aWxkX3dyYXBwZXJfcGF0aCwgJy0tZ3RrJywgJ3J1bicsIHJ1
bl9hcGlfdGVzdHNfcGF0aF0KK2Vsc2U6CisgICAgYXBpX3Rlc3RzX2NvbW1hbmQgPSBbcnVuX2Fw
aV90ZXN0c19wYXRoXQogCi1jbGFzcyBUZXN0UnVubmVyOgorYXBpX3Rlc3RzX2NvbW1hbmQuZXh0
ZW5kKHN5cy5hcmd2WzE6XSkKK3N5cy5leGl0KHN1YnByb2Nlc3MuUG9wZW4oYXBpX3Rlc3RzX2Nv
bW1hbmQpLndhaXQoKSkKIAotICAgIFRFU1RfRElSUyA9IFsgInVuaXR0ZXN0cyIsICJXZWJLaXQy
QVBJVGVzdHMiLCAiVGVzdFdlYktpdEFQSS9XVEYiLCAiVGVzdFdlYktpdEFQSS9XZWJLaXQyIiBd
Ci0KLSAgICBTS0lQUEVEID0gWwotICAgICAgICBTa2lwcGVkVGVzdCgidW5pdHRlc3RzL3Rlc3Rk
b3dubG9hZCIsCi0gICAgICAgICAgICAgICAgICAgICJUZXN0IGZhaWxzIGluIEdUSyBMaW51eCA2
NC1iaXQgUmVsZWFzZSBib3QiLAotICAgICAgICAgICAgICAgICAgICA4MjMyOSwKLSAgICAgICAg
ICAgICAgICAgICAgWyIvd2Via2l0L2Rvd25sb2FkL25vdC1mb3VuZCJdKSwKLSAgICAgICAgU2tp
cHBlZFRlc3QoInVuaXR0ZXN0cy90ZXN0d2VidmlldyIsCi0gICAgICAgICAgICAgICAgICAgICJU
ZXN0IHRpbWVzIG91dCBpbiBHVEsgTGludXggNjQtYml0IFJlbGVhc2UgYm90IiwKLSAgICAgICAg
ICAgICAgICAgICAgODIzMjgsCi0gICAgICAgICAgICAgICAgICAgIFsiL3dlYmtpdC93ZWJ2aWV3
L2ljb24tdXJpIl0pLAotICAgICAgICBTa2lwcGVkVGVzdCgidW5pdHRlc3RzL3Rlc3R3ZWJyZXNv
dXJjZSIsCi0gICAgICAgICAgICAgICAgICAgICJUZXN0IGZhaWxzIGluIEdUSyBMaW51eCA2NC1i
aXQgUmVsZWFzZSBib3QiLAotICAgICAgICAgICAgICAgICAgICA4MjMzMCwKLSAgICAgICAgICAg
ICAgICAgICAgWyIvd2Via2l0L3dlYnJlc291cmNlL3N1Yl9yZXNvdXJjZV9sb2FkaW5nIl0pLAot
ICAgICAgICBTa2lwcGVkVGVzdCgidW5pdHRlc3RzL3Rlc3R3ZWJpbnNwZWN0b3IiLAotICAgICAg
ICAgICAgICAgICAgICAiVGVzdCBpcyBmbGFreSBpbiBHVEsgTGludXggMzItYml0IFJlbGVhc2Ug
Ym90IiwKLSAgICAgICAgICAgICAgICAgICAgODI4NjksCi0gICAgICAgICAgICAgICAgICAgIFsi
L3dlYmtpdC93ZWJpbnNwZWN0b3IvY2xvc2UtYW5kLWluc3BlY3QiXSksCi0gICAgICAgIFNraXBw
ZWRUZXN0KCJXZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYlZpZXciLAotICAgICAgICAgICAg
ICAgICAgICAiVGVzdCBpcyBmbGFreSBpbiBHVEsgTGludXggMzItYml0IFJlbGVhc2UgYm90IiwK
LSAgICAgICAgICAgICAgICAgICAgODI4NjYsCi0gICAgICAgICAgICAgICAgICAgIFsiL3dlYmtp
dDIvV2ViS2l0V2ViVmlldy9tb3VzZS10YXJnZXQiXSksCi0gICAgICAgIFNraXBwZWRUZXN0KCJX
ZWJLaXQyQVBJVGVzdHMvVGVzdFJlc291cmNlcyIsCi0gICAgICAgICAgICAgICAgICAgICJUZXN0
IGlzIGZsYWt5IGluIEdUSyBMaW51eCAzMi1iaXQgUmVsZWFzZSBib3QiLAotICAgICAgICAgICAg
ICAgICAgICA4Mjg2OCwKLSAgICAgICAgICAgICAgICAgICAgWyIvd2Via2l0Mi9XZWJLaXRXZWJW
aWV3L3Jlc291cmNlcyJdKSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvV2Vi
S2l0Mi9UZXN0V0tDb25uZWN0aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgIlRlc3QgdGltZXMg
b3V0IiwKLSAgICAgICAgICAgICAgICAgICAgODQ5NTkpLAotICAgICAgICBTa2lwcGVkVGVzdCgi
VGVzdFdlYktpdEFQSS9XZWJLaXQyL1Rlc3RSZXN0b3JlU2Vzc2lvblN0YXRlQ29udGFpbmluZ0Zv
cm1EYXRhIiwKLSAgICAgICAgICAgICAgICAgICAgIlNlc3Npb24gU3RhdGUgaXMgbm90IGltcGxl
bWVudGVkIGluIEdUSysgcG9ydCIsCi0gICAgICAgICAgICAgICAgICAgIDg0OTYwKSwKLSAgICAg
ICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvV2ViS2l0Mi9UZXN0U3BhY2ViYXJTY3JvbGxp
bmciLAotICAgICAgICAgICAgICAgICAgICAiVGVzdCBmYWlscyIsCi0gICAgICAgICAgICAgICAg
ICAgIDg0OTYxKSwKLSAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvV2ViS2l0Mi9U
ZXN0TmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0RnJhbWVzIiwKLSAgICAgICAgICAgICAg
ICAgICAgIlRlc3QgZmFpbHMiLAotICAgICAgICAgICAgICAgICAgICA4NTAzNyksCi0gICAgICAg
IFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1dlYktpdDIvVGVzdE1vdXNlTW92ZUFmdGVyQ3Jh
c2giLAotICAgICAgICAgICAgICAgICAgICAiVGVzdCBpcyBmbGFreSIsCi0gICAgICAgICAgICAg
ICAgICAgIDg1MDY2KQotICAgIF0KLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25zLCB0
ZXN0cz1bXSk6Ci0KLSAgICAgICAgIyBGSVhNRTogd2Via2l0LWJ1aWxkLWRpcmVjdG9yeSAtLWNv
bmZpZ3VyYXRpb24gYWx3YXlzIHJldHVybnMKLSAgICAgICAgIyBSZWxlYXNlIGJlY2F1c2Ugd2Ug
bmV2ZXIgY2FsbCBzZXQtd2Via2l0LWNvbmZpZ3VyYXRpb24uCi0gICAgICAgICNidWlsZF9kaXJl
Y3Rvcnlfc2NyaXB0ID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJ3
ZWJraXQtYnVpbGQtZGlyZWN0b3J5IikKLSAgICAgICAgI2J1aWxkX2RpcmVjdG9yeSA9IHNlbGYu
X2V4ZWN1dGl2ZS5ydW5fY29tbWFuZChbYnVpbGRfZGlyZWN0b3J5X3NjcmlwdCwgIi0tY29uZmln
dXJhdGlvbiJdKS5yc3RyaXAoKQotCi0gICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCi0g
ICAgICAgIHNlbGYuX2d0a190b29sc19kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oc2VsZi5fZ2V0
X3RvcF9sZXZlbF9kaXJlY3RvcnkoKSwgIlRvb2xzIiwgImd0ayIpCi0gICAgICAgIHNlbGYuX3By
b2dyYW1zX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fZ2V0X2J1aWxkX2RpcmVjdG9yeSgpLCAi
UHJvZ3JhbXMiKQotICAgICAgICBzZWxmLl90ZXN0cyA9IHNlbGYuX2dldF90ZXN0cyh0ZXN0cykK
LSAgICAgICAgc2VsZi5fc2tpcHBlZF90ZXN0cyA9IFRlc3RSdW5uZXIuU0tJUFBFRAotCi0gICAg
ICAgICMgVGhlc2UgU1BJIGRhZW1vbnMgbmVlZCB0byBiZSBhY3RpdmUgZm9yIHRoZSBhY2Nlc3Np
YmlsaXR5IHRlc3RzIHRvIHdvcmsuCi0gICAgICAgIHNlbGYuX3NwaV9yZWdpc3RyeWQgPSBOb25l
Ci0gICAgICAgIHNlbGYuX3NwaV9idXNfbGF1bmNoZXIgPSBOb25lCi0KLSAgICAgICAgIyBydW4t
Z3RrLXRlc3RzIG1heSBiZSBydW4gZHVyaW5nIG1ha2UgZGlzdGNoZWNrLCB3aGljaCBkb2Vzbid0
IGluY2x1ZGUgamhidWlsZC4KLSAgICAgICAgc2VsZi5famhidWlsZF9wYXRoID0gb3MucGF0aC5q
b2luKHNlbGYuX2d0a190b29sc19kaXJlY3RvcnksICJydW4td2l0aC1qaGJ1aWxkIikKLSAgICAg
ICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuX2poYnVpbGRfcGF0aCk6Ci0gICAgICAgICAg
ICBzZWxmLl9qaGJ1aWxkX3BhdGggPSBOb25lCi0KLSAgICBkZWYgX2dldF90b3BfbGV2ZWxfZGly
ZWN0b3J5KHNlbGYpOgotICAgICAgICByZXR1cm4gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpv
aW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgIi4uIiwgIi4uIikpCi0KLSAgICBkZWYgX2dl
dF9idWlsZF9kaXJlY3Rvcnkoc2VsZik6Ci0gICAgICAgIHRvcF9sZXZlbCA9IHNlbGYuX2dldF90
b3BfbGV2ZWxfZGlyZWN0b3J5KCkKLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5yZWxlYXNlOgot
ICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbih0b3BfbGV2ZWwsICdXZWJLaXRCdWlsZCcs
ICdSZWxlYXNlJykKLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5kZWJ1ZzoKLSAgICAgICAgICAg
IHJldHVybiBvcy5wYXRoLmpvaW4odG9wX2xldmVsLCAnV2ViS2l0QnVpbGQnLCAnRGVidWcnKQot
Ci0gICAgICAgIGJ1aWxkX2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbih0b3BfbGV2ZWwsICdXZWJL
aXRCdWlsZCcsICdSZWxlYXNlJykKLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MucGF0aC5q
b2luKGJ1aWxkX2RpcmVjdG9yeSwgJy5saWJzJykpOgotICAgICAgICAgICAgcmV0dXJuIGJ1aWxk
X2RpcmVjdG9yeQotICAgICAgICBidWlsZF9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4odG9wX2xl
dmVsLCAnV2ViS2l0QnVpbGQnLCAnRGVidWcnKQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhv
cy5wYXRoLmpvaW4oYnVpbGRfZGlyZWN0b3J5LCAnLmxpYnMnKSk6Ci0gICAgICAgICAgICByZXR1
cm4gYnVpbGRfZGlyZWN0b3J5Ci0gICAgICAgIGJ1aWxkX2RpcmVjdG9yeSA9IG9zLnBhdGguam9p
bih0b3BfbGV2ZWwsICdfYnVpbGQnKQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhvcy5wYXRo
LmpvaW4oYnVpbGRfZGlyZWN0b3J5LCAnLmxpYnMnKSk6Ci0gICAgICAgICAgICByZXR1cm4gYnVp
bGRfZGlyZWN0b3J5Ci0KLSAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbih0b3BfbGV2ZWwsICdX
ZWJLaXRCdWlsZCcpCi0KLSAgICBkZWYgX2dldF90ZXN0cyhzZWxmLCB0ZXN0cyk6Ci0gICAgICAg
IGlmIHRlc3RzOgotICAgICAgICAgICAgcmV0dXJuIHRlc3RzCi0KLSAgICAgICAgdGVzdHMgPSBb
XQotICAgICAgICBmb3IgdGVzdF9kaXIgaW4gc2VsZi5URVNUX0RJUlM6Ci0gICAgICAgICAgICBh
YnNvbHV0ZV90ZXN0X2RpciA9IG9zLnBhdGguam9pbihzZWxmLl9wcm9ncmFtc19wYXRoLCB0ZXN0
X2RpcikKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGFic29sdXRlX3Rlc3RfZGly
KToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZm9yIHRlc3RfZmlsZSBp
biBvcy5saXN0ZGlyKGFic29sdXRlX3Rlc3RfZGlyKToKLSAgICAgICAgICAgICAgICBpZiBub3Qg
dGVzdF9maWxlLmxvd2VyKCkuc3RhcnRzd2l0aCgidGVzdCIpOgotICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZQotICAgICAgICAgICAgICAgIHRlc3RfcGF0aCA9IG9zLnBhdGguam9pbihzZWxm
Ll9wcm9ncmFtc19wYXRoLCB0ZXN0X2RpciwgdGVzdF9maWxlKQotICAgICAgICAgICAgICAgIGlm
IG9zLnBhdGguaXNmaWxlKHRlc3RfcGF0aCkgYW5kIG9zLmFjY2Vzcyh0ZXN0X3BhdGgsIG9zLlhf
T0spOgotICAgICAgICAgICAgICAgICAgICB0ZXN0cy5hcHBlbmQodGVzdF9wYXRoKQotICAgICAg
ICByZXR1cm4gdGVzdHMKLQotICAgIGRlZiBfY3JlYXRlX3Byb2Nlc3Moc2VsZiwgY29tbWFuZCwg
c3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLCBlbnY9b3MuZW52aXJvbik6Ci0gICAgICAgIGlmIHNl
bGYuX2poYnVpbGRfcGF0aDoKLSAgICAgICAgICAgIGNvbW1hbmQuaW5zZXJ0KDAsIHNlbGYuX2po
YnVpbGRfcGF0aCkKLSAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuUG9wZW4oY29tbWFuZCwgc3Rk
b3V0PXN0ZG91dCwgc3RkZXJyPXN0ZGVyciwgZW52PWVudikKLQotICAgIGRlZiBfbG9va3VwX2F0
c3BpMl9iaW5hcnkoc2VsZiwgZmlsZW5hbWUpOgotICAgICAgICBwcm9jZXNzID0gc2VsZi5fY3Jl
YXRlX3Byb2Nlc3MoWydwa2ctY29uZmlnJywgJy0tdmFyaWFibGU9ZXhlY19wcmVmaXgnLCAnYXRz
cGktMiddLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQotICAgICAgICBzdGRvdXQgPSBwcm9jZXNz
LmNvbW11bmljYXRlKClbMF0KLSAgICAgICAgZXhlY19wcmVmaXggPSBzdGRvdXQucnN0cmlwKCdc
clxuJykKLSAgICAgICAgZm9yIHBhdGggaW4gWyAnbGliZXhlYycsICdsaWIvYXQtc3BpMi1jb3Jl
JywgJ2xpYjMyL2F0LXNwaTItY29yZScsICdsaWI2NC9hdC1zcGkyLWNvcmUnIF06Ci0gICAgICAg
ICAgICBmaWxlcGF0aCA9IG9zLnBhdGguam9pbihleGVjX3ByZWZpeCwgcGF0aCwgZmlsZW5hbWUp
Ci0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlcGF0aCk6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZpbGVwYXRoCi0KLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGRlZiBfc3Rh
cnRfYWNjZXNzaWJpbGl0eV9kYWVtb25zKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5famhi
dWlsZF9wYXRoOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgc3BpX2J1c19s
YXVuY2hlcl9wYXRoID0gc2VsZi5fbG9va3VwX2F0c3BpMl9iaW5hcnkoJ2F0LXNwaS1idXMtbGF1
bmNoZXInKQotICAgICAgICBzcGlfcmVnaXN0cnlkX3BhdGggPSBzZWxmLl9sb29rdXBfYXRzcGky
X2JpbmFyeSgnYXQtc3BpMi1yZWdpc3RyeWQnKQotICAgICAgICBpZiBub3Qgc3BpX2J1c19sYXVu
Y2hlcl9wYXRoIG9yIG5vdCBzcGlfcmVnaXN0cnlkX3BhdGg6Ci0gICAgICAgICAgICByZXR1cm4g
RmFsc2UKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9hbGx5X2J1c19sYXVuY2hl
ciA9IHNlbGYuX2NyZWF0ZV9wcm9jZXNzKFtzcGlfYnVzX2xhdW5jaGVyX3BhdGhdLCBlbnY9c2Vs
Zi5fdGVzdF9lbnYpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3Jp
dGUoIkZhaWxlZCB0byBsYXVuY2ggdGhlIGFjY2Vzc2liaWxpdHkgYnVzXG4iKQotICAgICAgICAg
ICAgc3lzLnN0ZGVyci5mbHVzaCgpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAg
ICAjIFdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgU1BJIGJ1cyBpcyBsYXVuY2hlZCBiZWZvcmUg
dHJ5aW5nIHRvIHN0YXJ0IHRoZSBTUEkKLSAgICAgICAgIyByZWdpc3RyeSwgc28gd2Ugc3BpbiBh
IG1haW4gbG9vcCB1bnRpbCB0aGUgYnVzIG5hbWUgYXBwZWFycyBvbiBEQnVzLgotICAgICAgICBs
b29wID0gR0xpYi5NYWluTG9vcCgpCi0gICAgICAgIEdpby5idXNfd2F0Y2hfbmFtZShHaW8uQnVz
VHlwZS5TRVNTSU9OLCAnb3JnLmExMXkuQnVzJywgR2lvLkJ1c05hbWVXYXRjaGVyRmxhZ3MuTk9O
RSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSAqYXJnczogbG9vcC5xdWl0KCks
IE5vbmUpCi0gICAgICAgIGxvb3AucnVuKCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBz
ZWxmLl9zcGlfcmVnaXN0cnlkID0gc2VsZi5fY3JlYXRlX3Byb2Nlc3MoW3NwaV9yZWdpc3RyeWRf
cGF0aF0sIGVudj1zZWxmLl90ZXN0X2VudikKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAg
c3lzLnN0ZGVyci53cml0ZSgiRmFpbGVkIHRvIGxhdW5jaCB0aGUgYWNjZXNzaWJpbGl0eSByZWdp
c3RyeVxuIikKLSAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQotICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCi0KLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBfc2V0dXBfdGVzdGlu
Z19lbnZpcm9ubWVudChzZWxmKToKLSAgICAgICAgc2VsZi5fdGVzdF9lbnYgPSBvcy5lbnZpcm9u
Ci0gICAgICAgIHNlbGYuX3Rlc3RfZW52WyJESVNQTEFZIl0gPSBzZWxmLl9vcHRpb25zLmRpc3Bs
YXkKLSAgICAgICAgc2VsZi5fdGVzdF9lbnZbIldFQktJVF9JTlNQRUNUT1JfUEFUSCJdID0gb3Mu
cGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihzZWxmLl9wcm9ncmFtc19wYXRoLCAncmVzb3VyY2Vz
JywgJ2luc3BlY3RvcicpKQotICAgICAgICBzZWxmLl90ZXN0X2VudlsnR1NFVFRJTkdTX0JBQ0tF
TkQnXSA9ICdtZW1vcnknCi0gICAgICAgIHNlbGYuX3Rlc3RfZW52WyJURVNUX1dFQktJVF9BUElf
V0VCS0lUMl9SRVNPVVJDRVNfUEFUSCJdID0gb3MucGF0aC5qb2luKHNlbGYuX2dldF90b3BfbGV2
ZWxfZGlyZWN0b3J5KCksICJUb29scyIsICJUZXN0V2ViS2l0QVBJIiwgIlRlc3RzIiwgIldlYktp
dDIiKQotICAgICAgICBzZWxmLl90ZXN0X2VudlsiVEVTVF9XRUJLSVRfQVBJX1dFQktJVDJfSU5K
RUNURURfQlVORExFX1BBVEgiXSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oc2VsZi5f
Z2V0X2J1aWxkX2RpcmVjdG9yeSgpLCAiTGlicmFyaWVzIikpCi0gICAgICAgIHNlbGYuX3Rlc3Rf
ZW52WyJXRUJLSVRfRVhFQ19QQVRIIl0gPSBzZWxmLl9wcm9ncmFtc19wYXRoCi0KLSAgICAgICAg
dHJ5OgotICAgICAgICAgICAgc2VsZi5feHZmYiA9IHNlbGYuX2NyZWF0ZV9wcm9jZXNzKFsiWHZm
YiIsIHNlbGYuX29wdGlvbnMuZGlzcGxheSwgIi1zY3JlZW4iLCAiMCIsICI4MDB4NjAweDI0Iiwg
Ii1ub2xpc3RlbiIsICJ0Y3AiXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBF
KQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICAgICBzeXMuc3RkZXJy
LndyaXRlKCJGYWlsZWQgdG8gcnVuIFh2ZmI6ICVzXG4iLCBlKQotICAgICAgICAgICAgc3lzLnN0
ZGVyci5mbHVzaCgpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICAjIElmIHdl
IGNhbm5vdCBzdGFydCB0aGUgYWNjZXNzaWJpbGl0eSBkYWVtb25zLCB3ZSBjYW4ganVzdCBza2lw
IHRoZSBhY2Nlc3NpYmlsaXR5IHRlc3RzLgotICAgICAgICBpZiBub3Qgc2VsZi5fc3RhcnRfYWNj
ZXNzaWJpbGl0eV9kYWVtb25zKCk6Ci0gICAgICAgICAgICBwcmludCAiQ291bGQgbm90IHN0YXJ0
IGFjY2Vzc2liaWxpdHkgYnVzLCBzbyBza2lwcGluZyBUZXN0V2ViS2l0QWNjZXNzaWJpbGl0eSIK
LSAgICAgICAgICAgIHNlbGYuX3NraXBwZWRfdGVzdHMuYXBwZW5kKFNraXBwZWRUZXN0KCJXZWJL
aXQyQVBJVGVzdHMvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBzdGFydCBhY2Nlc3Np
YmlsaXR5IGJ1cyIpKQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF90ZWFyX2Rvd25f
dGVzdGluZ19lbnZpcm9ubWVudChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fc3BpX3JlZ2lzdHJ5
ZDoKLSAgICAgICAgICAgIHNlbGYuX3NwaV9yZWdpc3RyeWQudGVybWluYXRlKCkKLSAgICAgICAg
aWYgc2VsZi5fc3BpX2J1c19sYXVuY2hlcjoKLSAgICAgICAgICAgIHNlbGYuX3NwaV9idXNfbGF1
bmNoZXIudGVybWluYXRlKCkKLSAgICAgICAgc2VsZi5feHZmYi5raWxsKCk7Ci0KLSAgICBkZWYg
X2ZpbmRfc2tpcHBlZF90ZXN0KHNlbGYsIHRlc3QpOgotICAgICAgICBmb3Igc2tpcHBlZCBpbiBz
ZWxmLl9za2lwcGVkX3Rlc3RzOgotICAgICAgICAgICAgaWYgdGVzdC5lbmRzd2l0aChza2lwcGVk
LnRlc3QpOgotICAgICAgICAgICAgICAgIHJldHVybiBza2lwcGVkCi0gICAgICAgIHJldHVybiBO
b25lCi0KLSAgICBkZWYgX3Rlc3RfY2FzZXNfdG9fc2tpcChzZWxmLCB0ZXN0KToKLSAgICAgICAg
aWYgc2VsZi5fb3B0aW9ucy5za2lwcGVkX2FjdGlvbiAhPSAnc2tpcCc6Ci0gICAgICAgICAgICBy
ZXR1cm4gW10KLQotICAgICAgICBza2lwcGVkID0gc2VsZi5fZmluZF9za2lwcGVkX3Rlc3QodGVz
dCkKLSAgICAgICAgaWYgc2tpcHBlZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBz
a2lwcGVkLnRlc3RfY2FzZXMKLSAgICAgICAgcmV0dXJuIFtdCi0KLSAgICBkZWYgX3Nob3VsZF9y
dW5fdGVzdChzZWxmLCB0ZXN0KToKLSAgICAgICAgIyBTa2lwcGVkIHRlc3QgYXJlIGlnbm9yZWQs
IHJ1biBhbGwgdGVzdHMuCi0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMuc2tpcHBlZF9hY3Rpb24g
PT0gJ2lnbm9yZSc6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICAgIHNraXBwZWQg
PSBzZWxmLl9maW5kX3NraXBwZWRfdGVzdCh0ZXN0KQotICAgICAgICAjIEJ5IGRlZmF1bHQgc2tp
cHBlZCB0ZXN0IGFyZSBza2lwcGVkLCBydW4gdGhlbSBvbmx5IHdoZW4gdGhlcmUgYXJlIHNwZWNp
ZmljIHRlc3QgY2FzZXMgZmFpbGluZy4KLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5za2lwcGVk
X2FjdGlvbiA9PSAnc2tpcCc6Ci0gICAgICAgICAgICByZXR1cm4gc2tpcHBlZCBpcyBOb25lIG9y
IHNraXBwZWQudGVzdF9jYXNlcwotCi0gICAgICAgICMgUnVuIG9ubHkgc2tpcHBlZCB0ZXN0cy4K
LSAgICAgICAgcmV0dXJuIHNraXBwZWQgaXMgbm90IE5vbmUKLQotICAgIGRlZiBfZ2V0X2NoaWxk
X3BpZF9mcm9tX3Rlc3Rfb3V0cHV0KHNlbGYsIG91dHB1dCk6Ci0gICAgICAgIGlmIG5vdCBvdXRw
dXQ6Ci0gICAgICAgICAgICByZXR1cm4gLTEKLSAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2gocidc
KHBpZD0oP1A8Y2hpbGRfcGlkPlswLTldKylcKScsIG91dHB1dCkKLSAgICAgICAgaWYgbm90IG1h
dGNoOgotICAgICAgICAgICAgcmV0dXJuIC0xCi0gICAgICAgIHJldHVybiBpbnQobWF0Y2guZ3Jv
dXAoJ2NoaWxkX3BpZCcpKQotCi0gICAgZGVmIF9raWxsX3Byb2Nlc3Moc2VsZiwgcGlkKToKLSAg
ICAgICAgdHJ5OgotICAgICAgICAgICAgb3Mua2lsbChwaWQsIFNJR0tJTEwpCi0gICAgICAgIGV4
Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgIyBQcm9jZXNzIGFscmVhZHkgZGllZC4KLSAgICAg
ICAgICAgIHBhc3MKLQotICAgIGRlZiBfcnVuX3Rlc3RfY29tbWFuZChzZWxmLCBjb21tYW5kLCB0
aW1lb3V0PS0xKToKLSAgICAgICAgZGVmIGFsYXJtX2hhbmRsZXIoc2lnbnVtLCBmcmFtZSk6Ci0g
ICAgICAgICAgICByYWlzZSBUZXN0VGltZW91dAotCi0gICAgICAgIHAgPSBzZWxmLl9jcmVhdGVf
cHJvY2Vzcyhjb21tYW5kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBlbnY9c2VsZi5fdGVzdF9l
bnYpCi0gICAgICAgIGlmIHRpbWVvdXQgPiAwOgotICAgICAgICAgICAgc2lnbmFsKFNJR0FMUk0s
IGFsYXJtX2hhbmRsZXIpCi0gICAgICAgICAgICBhbGFybSh0aW1lb3V0KQotCi0gICAgICAgIHN0
ZG91dCA9ICIiCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN0ZG91dCA9IHAuY29tbXVuaWNh
dGUoKVswXQotICAgICAgICAgICAgaWYgdGltZW91dCA+IDA6Ci0gICAgICAgICAgICAgICAgYWxh
cm0oMCkKLSAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoc3Rkb3V0KQotICAgICAgICAgICAg
c3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIGV4Y2VwdCBUZXN0VGltZW91dDoKLSAgICAgICAg
ICAgIHNlbGYuX2tpbGxfcHJvY2VzcyhwLnBpZCkKLSAgICAgICAgICAgIGNoaWxkX3BpZCA9IHNl
bGYuX2dldF9jaGlsZF9waWRfZnJvbV90ZXN0X291dHB1dChzdGRvdXQpCi0gICAgICAgICAgICBp
ZiBjaGlsZF9waWQgPiAwOgotICAgICAgICAgICAgICAgIHNlbGYuX2tpbGxfcHJvY2VzcyhjaGls
ZF9waWQpCi0gICAgICAgICAgICByYWlzZQotCi0gICAgICAgIHJldHVybiBub3QgcC5yZXR1cm5j
b2RlCi0KLSAgICBkZWYgX3J1bl90ZXN0X2dsaWIoc2VsZiwgdGVzdCk6Ci0gICAgICAgIHRlc3Rl
cl9jb21tYW5kID0gWydndGVzdGVyJ10KLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy52ZXJib3Nl
OgotICAgICAgICAgICAgdGVzdGVyX2NvbW1hbmQuYXBwZW5kKCctLXZlcmJvc2UnKQotICAgICAg
ICBmb3IgdGVzdF9jYXNlIGluIHNlbGYuX3Rlc3RfY2FzZXNfdG9fc2tpcCh0ZXN0KToKLSAgICAg
ICAgICAgIHRlc3Rlcl9jb21tYW5kLmV4dGVuZChbJy1zJywgdGVzdF9jYXNlXSkKLSAgICAgICAg
dGVzdGVyX2NvbW1hbmQuYXBwZW5kKHRlc3QpCi0KLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl90
ZXN0X2NvbW1hbmQodGVzdGVyX2NvbW1hbmQsIHNlbGYuX29wdGlvbnMudGltZW91dCkKLQotICAg
IGRlZiBfcnVuX3Rlc3RfZ29vZ2xlKHNlbGYsIHRlc3QpOgotICAgICAgICB0ZXN0ZXJfY29tbWFu
ZCA9IFt0ZXN0LCAiLS1ndGVzdF90aHJvd19vbl9mYWlsdXJlIl0KLSAgICAgICAgc2tpcHBlZF90
ZXN0c19jYXNlcyA9IHNlbGYuX3Rlc3RfY2FzZXNfdG9fc2tpcCh0ZXN0KQotICAgICAgICBpZiBz
a2lwcGVkX3Rlc3RzX2Nhc2VzOgotICAgICAgICAgICAgdGVzdGVyX2NvbW1hbmQuYXBwZW5kKCIt
LWd0ZXN0X2ZpbHRlcj0tJXMiICUgIjoiLmpvaW4oc2tpcHBlZF90ZXN0c19jYXNlcykpCi0KLSAg
ICAgICAgcmV0dXJuIHNlbGYuX3J1bl90ZXN0X2NvbW1hbmQodGVzdGVyX2NvbW1hbmQsIHNlbGYu
X29wdGlvbnMudGltZW91dCkKLQotICAgIGRlZiBfcnVuX3Rlc3Qoc2VsZiwgdGVzdCk6Ci0gICAg
ICAgIGlmICJ1bml0dGVzdHMiIGluIHRlc3Qgb3IgIldlYktpdDJBUElUZXN0cyIgaW4gdGVzdDoK
LSAgICAgICAgICAgIHJldHVybiBzZWxmLl9ydW5fdGVzdF9nbGliKHRlc3QpCi0KLSAgICAgICAg
aWYgIlRlc3RXZWJLaXRBUEkiIGluIHRlc3Q6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcnVu
X3Rlc3RfZ29vZ2xlKHRlc3QpCi0KLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBkZWYgcnVu
X3Rlc3RzKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5fdGVzdHM6Ci0gICAgICAgICAgICBz
eXMuc3RkZXJyLndyaXRlKCJFUlJPUjogdGVzdHMgbm90IGZvdW5kIGluICVzLlxuIiAlIChzZWxm
Ll9wcm9ncmFtc19wYXRoKSkKLSAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQotICAgICAg
ICAgICAgcmV0dXJuIDEKLQotICAgICAgICBpZiBub3Qgc2VsZi5fc2V0dXBfdGVzdGluZ19lbnZp
cm9ubWVudCgpOgotICAgICAgICAgICAgcmV0dXJuIDEKLQotICAgICAgICAjIFJlbW92ZSBza2lw
cGVkIHRlc3RzIG5vdyBpbnN0ZWFkIG9mIHdoZW4gd2UgZmluZCB0aGVtLCBiZWNhdXNlCi0gICAg
ICAgICMgc29tZSB0ZXN0cyBtaWdodCBiZSBza2lwcGVkIHdoaWxlIHNldHRpbmcgdXAgdGhlIHRl
c3QgZW52aXJvbm1lbnQuCi0gICAgICAgIHNlbGYuX3Rlc3RzID0gW3Rlc3QgZm9yIHRlc3QgaW4g
c2VsZi5fdGVzdHMgaWYgc2VsZi5fc2hvdWxkX3J1bl90ZXN0KHRlc3QpXQotCi0gICAgICAgIGZh
aWxlZF90ZXN0cyA9IFtdCi0gICAgICAgIHRpbWVkX291dF90ZXN0cyA9IFtdCi0gICAgICAgIHRy
eToKLSAgICAgICAgICAgIGZvciB0ZXN0IGluIHNlbGYuX3Rlc3RzOgotICAgICAgICAgICAgICAg
IHN1Y2Nlc3MgPSBUcnVlCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAg
ICBzdWNjZXNzID0gc2VsZi5fcnVuX3Rlc3QodGVzdCkKLSAgICAgICAgICAgICAgICBleGNlcHQg
VGVzdFRpbWVvdXQ6Ci0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlRFU1Q6
ICVzOiBUSU1FT1VUXG4iICUgdGVzdCkKLSAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5m
bHVzaCgpCi0gICAgICAgICAgICAgICAgICAgIHRpbWVkX291dF90ZXN0cy5hcHBlbmQodGVzdCkK
LQotICAgICAgICAgICAgICAgIGlmIG5vdCBzdWNjZXNzOgotICAgICAgICAgICAgICAgICAgICBm
YWlsZWRfdGVzdHMuYXBwZW5kKHRlc3QpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBz
ZWxmLl90ZWFyX2Rvd25fdGVzdGluZ19lbnZpcm9ubWVudCgpCi0KLSAgICAgICAgaWYgZmFpbGVk
X3Rlc3RzOgotICAgICAgICAgICAgbmFtZXMgPSBbdGVzdC5yZXBsYWNlKHNlbGYuX3Byb2dyYW1z
X3BhdGgsICcnLCAxKSBmb3IgdGVzdCBpbiBmYWlsZWRfdGVzdHNdCi0gICAgICAgICAgICBzeXMu
c3Rkb3V0LndyaXRlKCJUZXN0cyBmYWlsZWQ6ICVzXG4iICUgIiwgIi5qb2luKG5hbWVzKSkKLSAg
ICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotCi0gICAgICAgIGlmIHRpbWVkX291dF90ZXN0
czoKLSAgICAgICAgICAgIG5hbWVzID0gW3Rlc3QucmVwbGFjZShzZWxmLl9wcm9ncmFtc19wYXRo
LCAnJywgMSkgZm9yIHRlc3QgaW4gdGltZWRfb3V0X3Rlc3RzXQotICAgICAgICAgICAgc3lzLnN0
ZG91dC53cml0ZSgiVGVzdHMgdGhhdCB0aW1lZCBvdXQ6ICVzXG4iICUgIiwgIi5qb2luKG5hbWVz
KSkKLSAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotCi0gICAgICAgIGlmIHNlbGYuX3Nr
aXBwZWRfdGVzdHMgYW5kIHNlbGYuX29wdGlvbnMuc2tpcHBlZF9hY3Rpb24gPT0gJ3NraXAnOgot
ICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiVGVzdHMgc2tpcHBlZDpcbiVzXG4iICUgIlxu
Ii5qb2luKFtzdHIoc2tpcHBlZCkgZm9yIHNraXBwZWQgaW4gc2VsZi5fc2tpcHBlZF90ZXN0c10p
KQotICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0KLSAgICAgICAgcmV0dXJuIGxlbihm
YWlsZWRfdGVzdHMpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgb3B0aW9uX3Bh
cnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZT0ndXNhZ2U6ICVwcm9nIFtvcHRpb25z
XSBbdGVzdC4uLl0nKQotICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLXInLCAnLS1yZWxl
YXNlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywg
ZGVzdD0ncmVsZWFzZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1J1biBp
biBSZWxlYXNlJykKLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy1kJywgJy0tZGVidWcn
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0
PSdkZWJ1ZycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1J1biBpbiBEZWJ1
ZycpCi0gICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctdicsICctLXZlcmJvc2UnLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSd2ZXJi
b3NlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUnVuIGd0ZXN0ZXIgaW4g
dmVyYm9zZSBtb2RlJykKLSAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy0tZGlzcGxheScs
IGFjdGlvbj0nc3RvcmUnLCBkZXN0PSdkaXNwbGF5JywgZGVmYXVsdD0nOjU1JywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaGVscD0nRGlzcGxheSB0byBydW4gWHZmYicpCi0gICAgb3B0
aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctLXNraXBwZWQnLCBhY3Rpb249J3N0b3JlJywgZGVzdD0n
c2tpcHBlZF9hY3Rpb24nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPVsn
c2tpcCcsICdpZ25vcmUnLCAnb25seSddLCBkZWZhdWx0PSdza2lwJywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbWV0YXZhcj0nc2tpcHxpZ25vcmV8b25seScsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHA9J1NwZWNpZmllcyBob3cgdG8gdHJlYXQgdGhlIHNraXBwZWQg
dGVzdHMnKQotICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLXQnLCAnLS10aW1lb3V0JywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZScsIHR5cGU9J2ludCcs
IGRlc3Q9J3RpbWVvdXQnLCBkZWZhdWx0PTEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoZWxwPSdUaW1lIGluIHNlY29uZHMgdW50aWwgYSB0ZXN0IHRpbWVzIG91dCcpCi0gICAgb3B0
aW9ucywgYXJncyA9IG9wdGlvbl9wYXJzZXIucGFyc2VfYXJncygpCi0KLSAgICBzeXMuZXhpdChU
ZXN0UnVubmVyKG9wdGlvbnMsIGFyZ3MpLnJ1bl90ZXN0cygpKQpkaWZmIC0tZ2l0IGEvVG9vbHMv
Z3RrL2NvbW1vbi5weSBiL1Rvb2xzL2d0ay9jb21tb24ucHkKaW5kZXggNjIyZjcwOC4uNGE4OTY5
YiAxMDA2NDQKLS0tIGEvVG9vbHMvZ3RrL2NvbW1vbi5weQorKysgYi9Ub29scy9ndGsvY29tbW9u
LnB5CkBAIC04MCwxNSArODAsMTkgQEAgZGVmIGJ1aWxkX3BhdGgoKmFyZ3MpOgogICAgIHJldHVy
biBvcy5wYXRoLmpvaW4oKihnZXRfYnVpbGRfcGF0aCgpLCkgKyBhcmdzKQogCiAKLWRlZiBwcmVm
aXhfb2ZfcGtnX2NvbmZpZ19maWxlKHBhY2thZ2UpOgotICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNz
LlBvcGVuKFsncGtnLWNvbmZpZycsICctLXZhcmlhYmxlPXByZWZpeCcsIHBhY2thZ2VdLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQor
ZGVmIHBrZ19jb25maWdfZmlsZV92YXJpYWJsZShwYWNrYWdlLCB2YXJpYWJsZSk6CisgICAgcHJv
Y2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oWydwa2ctY29uZmlnJywgJy0tdmFyaWFibGU9JXMnICUg
dmFyaWFibGUsIHBhY2thZ2VdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91
dD1zdWJwcm9jZXNzLlBJUEUpCiAgICAgc3Rkb3V0ID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpWzBd
Ci0gICAgaWYgcHJvY2Vzcy5yZXR1cm5jb2RlICE9IDA6CisgICAgaWYgbm90IHByb2Nlc3MucmV0
dXJuY29kZToKICAgICAgICAgcmV0dXJuIE5vbmUKICAgICByZXR1cm4gc3Rkb3V0LnN0cmlwKCkK
IAogCitkZWYgcHJlZml4X29mX3BrZ19jb25maWdfZmlsZShwYWNrYWdlKToKKyAgICByZXR1cm4g
cGtnX2NvbmZpZ19maWxlX3ZhcmlhYmxlKHBhY2thZ2UsICdwcmVmaXgnKQorCisKIGRlZiBndGtf
dmVyc2lvbl9vZl9wa2dfY29uZmlnX2ZpbGUocGtnX2NvbmZpZ19wYXRoKToKICAgICBwcm9jZXNz
ID0gc3VicHJvY2Vzcy5Qb3BlbihbJ3BrZy1jb25maWcnLCBwa2dfY29uZmlnX3BhdGgsICctLXBy
aW50LXJlcXVpcmVzJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1
YnByb2Nlc3MuUElQRSkKZGlmZiAtLWdpdCBhL1Rvb2xzL2d0ay9ydW4tYXBpLXRlc3RzIGIvVG9v
bHMvZ3RrL3J1bi1hcGktdGVzdHMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4u
ZDlhNmI0ZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2d0ay9ydW4tYXBpLXRlc3RzCkBAIC0w
LDAgKzEsMzUzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChDKSAy
MDExIElnYWxpYSBTLkwuCisjCisjIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyMgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisjIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisjIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCitpbXBv
cnQgY29tbW9uCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBv
cnQgb3B0cGFyc2UKK2ltcG9ydCByZQorZnJvbSBzaWduYWwgaW1wb3J0IGFsYXJtLCBzaWduYWws
IFNJR0FMUk0sIFNJR0tJTEwKK2Zyb20gZ2kucmVwb3NpdG9yeSBpbXBvcnQgR2lvLCBHTGliCisK
K2NsYXNzIFNraXBwZWRUZXN0OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0LCByZWFzb24s
IGJ1Zz1Ob25lLCB0ZXN0X2Nhc2VzPVtdKToKKyAgICAgICAgc2VsZi50ZXN0ID0gdGVzdAorICAg
ICAgICBzZWxmLnJlYXNvbiA9IHJlYXNvbgorICAgICAgICBzZWxmLmJ1ZyA9IGJ1ZworICAgICAg
ICBzZWxmLnRlc3RfY2FzZXMgPSB0ZXN0X2Nhc2VzCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToK
KyAgICAgICAgc2tpcHBlZF90ZXN0X3N0ciA9ICIlcyIgJSBzZWxmLnRlc3QKKyAgICAgICAgaWYg
c2VsZi50ZXN0X2Nhc2VzOgorICAgICAgICAgICAgc2tpcHBlZF90ZXN0X3N0ciArPSAiIFslc10i
ICUgIiwgIi5qb2luKHNlbGYudGVzdF9jYXNlcykKKyAgICAgICAgc2tpcHBlZF90ZXN0X3N0ciAr
PSAiOiAlcyAiICUgc2VsZi5yZWFzb24KKyAgICAgICAgaWYgc2VsZi5idWcgaXMgbm90IE5vbmU6
CisgICAgICAgICAgICBza2lwcGVkX3Rlc3Rfc3RyICs9ICIoaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPSVkKSIgJSBzZWxmLmJ1ZworICAgICAgICByZXR1cm4gc2tpcHBl
ZF90ZXN0X3N0cgorCitjbGFzcyBUZXN0VGltZW91dChFeGNlcHRpb24pOgorICAgIHBhc3MKKwor
Y2xhc3MgVGVzdFJ1bm5lcjoKKworICAgIFRFU1RfRElSUyA9IFsgInVuaXR0ZXN0cyIsICJXZWJL
aXQyQVBJVGVzdHMiLCAiVGVzdFdlYktpdEFQSS9XVEYiLCAiVGVzdFdlYktpdEFQSS9XZWJLaXQy
IiBdCisKKyAgICBTS0lQUEVEID0gWworICAgICAgICBTa2lwcGVkVGVzdCgidW5pdHRlc3RzL3Rl
c3Rkb3dubG9hZCIsCisgICAgICAgICAgICAgICAgICAgICJUZXN0IGZhaWxzIGluIEdUSyBMaW51
eCA2NC1iaXQgUmVsZWFzZSBib3QiLAorICAgICAgICAgICAgICAgICAgICA4MjMyOSwKKyAgICAg
ICAgICAgICAgICAgICAgWyIvd2Via2l0L2Rvd25sb2FkL25vdC1mb3VuZCJdKSwKKyAgICAgICAg
U2tpcHBlZFRlc3QoInVuaXR0ZXN0cy90ZXN0d2VidmlldyIsCisgICAgICAgICAgICAgICAgICAg
ICJUZXN0IHRpbWVzIG91dCBpbiBHVEsgTGludXggNjQtYml0IFJlbGVhc2UgYm90IiwKKyAgICAg
ICAgICAgICAgICAgICAgODIzMjgsCisgICAgICAgICAgICAgICAgICAgIFsiL3dlYmtpdC93ZWJ2
aWV3L2ljb24tdXJpIl0pLAorICAgICAgICBTa2lwcGVkVGVzdCgidW5pdHRlc3RzL3Rlc3R3ZWJy
ZXNvdXJjZSIsCisgICAgICAgICAgICAgICAgICAgICJUZXN0IGZhaWxzIGluIEdUSyBMaW51eCA2
NC1iaXQgUmVsZWFzZSBib3QiLAorICAgICAgICAgICAgICAgICAgICA4MjMzMCwKKyAgICAgICAg
ICAgICAgICAgICAgWyIvd2Via2l0L3dlYnJlc291cmNlL3N1Yl9yZXNvdXJjZV9sb2FkaW5nIl0p
LAorICAgICAgICBTa2lwcGVkVGVzdCgidW5pdHRlc3RzL3Rlc3R3ZWJpbnNwZWN0b3IiLAorICAg
ICAgICAgICAgICAgICAgICAiVGVzdCBpcyBmbGFreSBpbiBHVEsgTGludXggMzItYml0IFJlbGVh
c2UgYm90IiwKKyAgICAgICAgICAgICAgICAgICAgODI4NjksCisgICAgICAgICAgICAgICAgICAg
IFsiL3dlYmtpdC93ZWJpbnNwZWN0b3IvY2xvc2UtYW5kLWluc3BlY3QiXSksCisgICAgICAgIFNr
aXBwZWRUZXN0KCJXZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYlZpZXciLAorICAgICAgICAg
ICAgICAgICAgICAiVGVzdCBpcyBmbGFreSBpbiBHVEsgTGludXggMzItYml0IFJlbGVhc2UgYm90
IiwKKyAgICAgICAgICAgICAgICAgICAgODI4NjYsCisgICAgICAgICAgICAgICAgICAgIFsiL3dl
YmtpdDIvV2ViS2l0V2ViVmlldy9tb3VzZS10YXJnZXQiXSksCisgICAgICAgIFNraXBwZWRUZXN0
KCJXZWJLaXQyQVBJVGVzdHMvVGVzdFJlc291cmNlcyIsCisgICAgICAgICAgICAgICAgICAgICJU
ZXN0IGlzIGZsYWt5IGluIEdUSyBMaW51eCAzMi1iaXQgUmVsZWFzZSBib3QiLAorICAgICAgICAg
ICAgICAgICAgICA4Mjg2OCwKKyAgICAgICAgICAgICAgICAgICAgWyIvd2Via2l0Mi9XZWJLaXRX
ZWJWaWV3L3Jlc291cmNlcyJdKSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkv
V2ViS2l0Mi9UZXN0V0tDb25uZWN0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgIlRlc3QgdGlt
ZXMgb3V0IiwKKyAgICAgICAgICAgICAgICAgICAgODQ5NTkpLAorICAgICAgICBTa2lwcGVkVGVz
dCgiVGVzdFdlYktpdEFQSS9XZWJLaXQyL1Rlc3RSZXN0b3JlU2Vzc2lvblN0YXRlQ29udGFpbmlu
Z0Zvcm1EYXRhIiwKKyAgICAgICAgICAgICAgICAgICAgIlNlc3Npb24gU3RhdGUgaXMgbm90IGlt
cGxlbWVudGVkIGluIEdUSysgcG9ydCIsCisgICAgICAgICAgICAgICAgICAgIDg0OTYwKSwKKyAg
ICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvV2ViS2l0Mi9UZXN0U3BhY2ViYXJTY3Jv
bGxpbmciLAorICAgICAgICAgICAgICAgICAgICAiVGVzdCBmYWlscyIsCisgICAgICAgICAgICAg
ICAgICAgIDg0OTYxKSwKKyAgICAgICAgU2tpcHBlZFRlc3QoIlRlc3RXZWJLaXRBUEkvV2ViS2l0
Mi9UZXN0TmV3Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0RnJhbWVzIiwKKyAgICAgICAgICAg
ICAgICAgICAgIlRlc3QgZmFpbHMiLAorICAgICAgICAgICAgICAgICAgICA4NTAzNyksCisgICAg
ICAgIFNraXBwZWRUZXN0KCJUZXN0V2ViS2l0QVBJL1dlYktpdDIvVGVzdE1vdXNlTW92ZUFmdGVy
Q3Jhc2giLAorICAgICAgICAgICAgICAgICAgICAiVGVzdCBpcyBmbGFreSIsCisgICAgICAgICAg
ICAgICAgICAgIDg1MDY2KQorICAgIF0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25z
LCB0ZXN0cz1bXSk6CisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAgICAgIHNl
bGYuX3Byb2dyYW1zX3BhdGggPSBjb21tb24uYnVpbGRfcGF0aCgiUHJvZ3JhbXMiKQorICAgICAg
ICBzZWxmLl90ZXN0cyA9IHNlbGYuX2dldF90ZXN0cyh0ZXN0cykKKyAgICAgICAgc2VsZi5fc2tp
cHBlZF90ZXN0cyA9IFRlc3RSdW5uZXIuU0tJUFBFRAorCisgICAgICAgICMgVGhlc2UgU1BJIGRh
ZW1vbnMgbmVlZCB0byBiZSBhY3RpdmUgZm9yIHRoZSBhY2Nlc3NpYmlsaXR5IHRlc3RzIHRvIHdv
cmsuCisgICAgICAgIHNlbGYuX3NwaV9yZWdpc3RyeWQgPSBOb25lCisgICAgICAgIHNlbGYuX3Nw
aV9idXNfbGF1bmNoZXIgPSBOb25lCisKKyAgICBkZWYgX2dldF90ZXN0cyhzZWxmLCB0ZXN0cyk6
CisgICAgICAgIGlmIHRlc3RzOgorICAgICAgICAgICAgcmV0dXJuIHRlc3RzCisKKyAgICAgICAg
dGVzdHMgPSBbXQorICAgICAgICBmb3IgdGVzdF9kaXIgaW4gc2VsZi5URVNUX0RJUlM6CisgICAg
ICAgICAgICBhYnNvbHV0ZV90ZXN0X2RpciA9IG9zLnBhdGguam9pbihzZWxmLl9wcm9ncmFtc19w
YXRoLCB0ZXN0X2RpcikKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGFic29sdXRl
X3Rlc3RfZGlyKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZm9yIHRl
c3RfZmlsZSBpbiBvcy5saXN0ZGlyKGFic29sdXRlX3Rlc3RfZGlyKToKKyAgICAgICAgICAgICAg
ICBpZiBub3QgdGVzdF9maWxlLmxvd2VyKCkuc3RhcnRzd2l0aCgidGVzdCIpOgorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHRlc3RfcGF0aCA9IG9zLnBhdGgu
am9pbihzZWxmLl9wcm9ncmFtc19wYXRoLCB0ZXN0X2RpciwgdGVzdF9maWxlKQorICAgICAgICAg
ICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHRlc3RfcGF0aCkgYW5kIG9zLmFjY2Vzcyh0ZXN0X3Bh
dGgsIG9zLlhfT0spOgorICAgICAgICAgICAgICAgICAgICB0ZXN0cy5hcHBlbmQodGVzdF9wYXRo
KQorICAgICAgICByZXR1cm4gdGVzdHMKKworICAgIGRlZiBfbG9va3VwX2F0c3BpMl9iaW5hcnko
c2VsZiwgZmlsZW5hbWUpOgorICAgICAgICBleGVjX3ByZWZpeCA9IGNvbW1vbi5wa2dfY29uZmln
X2ZpbGVfdmFyaWFibGUoJ2F0c3BpLTInLCAnZXhlY19wcmVmaXgnKQorICAgICAgICBmb3IgcGF0
aCBpbiBbJ2xpYmV4ZWMnLCAnbGliL2F0LXNwaTItY29yZScsICdsaWIzMi9hdC1zcGkyLWNvcmUn
LCAnbGliNjQvYXQtc3BpMi1jb3JlJ106CisgICAgICAgICAgICBmaWxlcGF0aCA9IG9zLnBhdGgu
am9pbihleGVjX3ByZWZpeCwgcGF0aCwgZmlsZW5hbWUpCisgICAgICAgICAgICBpZiBvcy5wYXRo
LmlzZmlsZShmaWxlcGF0aCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVwYXRoCisKKyAg
ICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfc3RhcnRfYWNjZXNzaWJpbGl0eV9kYWVtb25z
KHNlbGYpOgorICAgICAgICBzcGlfYnVzX2xhdW5jaGVyX3BhdGggPSBzZWxmLl9sb29rdXBfYXRz
cGkyX2JpbmFyeSgnYXQtc3BpLWJ1cy1sYXVuY2hlcicpCisgICAgICAgIHNwaV9yZWdpc3RyeWRf
cGF0aCA9IHNlbGYuX2xvb2t1cF9hdHNwaTJfYmluYXJ5KCdhdC1zcGkyLXJlZ2lzdHJ5ZCcpCisg
ICAgICAgIGlmIG5vdCBzcGlfYnVzX2xhdW5jaGVyX3BhdGggb3Igbm90IHNwaV9yZWdpc3RyeWRf
cGF0aDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIHRyeToKKyAgICAgICAg
ICAgIHNlbGYuX2FsbHlfYnVzX2xhdW5jaGVyID0gc3VicHJvY2Vzcy5Qb3Blbihbc3BpX2J1c19s
YXVuY2hlcl9wYXRoXSwgZW52PXNlbGYuX3Rlc3RfZW52KQorICAgICAgICBleGNlcHQ6CisgICAg
ICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJGYWlsZWQgdG8gbGF1bmNoIHRoZSBhY2Nlc3NpYmls
aXR5IGJ1c1xuIikKKyAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisKKyAgICAgICAgIyBXZSBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIFNQSSBi
dXMgaXMgbGF1bmNoZWQgYmVmb3JlIHRyeWluZyB0byBzdGFydCB0aGUgU1BJCisgICAgICAgICMg
cmVnaXN0cnksIHNvIHdlIHNwaW4gYSBtYWluIGxvb3AgdW50aWwgdGhlIGJ1cyBuYW1lIGFwcGVh
cnMgb24gREJ1cy4KKyAgICAgICAgbG9vcCA9IEdMaWIuTWFpbkxvb3AoKQorICAgICAgICBHaW8u
YnVzX3dhdGNoX25hbWUoR2lvLkJ1c1R5cGUuU0VTU0lPTiwgJ29yZy5hMTF5LkJ1cycsIEdpby5C
dXNOYW1lV2F0Y2hlckZsYWdzLk5PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1i
ZGEgKmFyZ3M6IGxvb3AucXVpdCgpLCBOb25lKQorICAgICAgICBsb29wLnJ1bigpCisKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fc3BpX3JlZ2lzdHJ5ZCA9IHN1YnByb2Nlc3MuUG9w
ZW4oW3NwaV9yZWdpc3RyeWRfcGF0aF0sIGVudj1zZWxmLl90ZXN0X2VudikKKyAgICAgICAgZXhj
ZXB0OgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiRmFpbGVkIHRvIGxhdW5jaCB0aGUg
YWNjZXNzaWJpbGl0eSByZWdpc3RyeVxuIikKKyAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2go
KQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAg
IGRlZiBfc2V0dXBfdGVzdGluZ19lbnZpcm9ubWVudChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVz
dF9lbnYgPSBvcy5lbnZpcm9uCisgICAgICAgIHNlbGYuX3Rlc3RfZW52WyJESVNQTEFZIl0gPSBz
ZWxmLl9vcHRpb25zLmRpc3BsYXkKKyAgICAgICAgc2VsZi5fdGVzdF9lbnZbIldFQktJVF9JTlNQ
RUNUT1JfUEFUSCJdID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihzZWxmLl9wcm9ncmFt
c19wYXRoLCAncmVzb3VyY2VzJywgJ2luc3BlY3RvcicpKQorICAgICAgICBzZWxmLl90ZXN0X2Vu
dlsnR1NFVFRJTkdTX0JBQ0tFTkQnXSA9ICdtZW1vcnknCisgICAgICAgIHNlbGYuX3Rlc3RfZW52
WyJURVNUX1dFQktJVF9BUElfV0VCS0lUMl9SRVNPVVJDRVNfUEFUSCJdID0gY29tbW9uLnRvcF9s
ZXZlbF9wYXRoKCJUb29scyIsICJUZXN0V2ViS2l0QVBJIiwgIlRlc3RzIiwgIldlYktpdDIiKQor
ICAgICAgICBzZWxmLl90ZXN0X2VudlsiVEVTVF9XRUJLSVRfQVBJX1dFQktJVDJfSU5KRUNURURf
QlVORExFX1BBVEgiXSA9IGNvbW1vbi5idWlsZF9wYXRoKCJMaWJyYXJpZXMiKQorICAgICAgICBz
ZWxmLl90ZXN0X2VudlsiV0VCS0lUX0VYRUNfUEFUSCJdID0gc2VsZi5fcHJvZ3JhbXNfcGF0aAor
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3h2ZmIgPSBzdWJwcm9jZXNzLlBvcGVu
KFsiWHZmYiIsIHNlbGYuX29wdGlvbnMuZGlzcGxheSwgIi1zY3JlZW4iLCAiMCIsICI4MDB4NjAw
eDI0IiwgIi1ub2xpc3RlbiIsICJ0Y3AiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJ
UEUpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHN5cy5zdGRl
cnIud3JpdGUoIkZhaWxlZCB0byBydW4gWHZmYjogJXNcbiIsIGUpCisgICAgICAgICAgICBzeXMu
c3RkZXJyLmZsdXNoKCkKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICMgSWYg
d2UgY2Fubm90IHN0YXJ0IHRoZSBhY2Nlc3NpYmlsaXR5IGRhZW1vbnMsIHdlIGNhbiBqdXN0IHNr
aXAgdGhlIGFjY2Vzc2liaWxpdHkgdGVzdHMuCisgICAgICAgIGlmIG5vdCBzZWxmLl9zdGFydF9h
Y2Nlc3NpYmlsaXR5X2RhZW1vbnMoKToKKyAgICAgICAgICAgIHByaW50ICJDb3VsZCBub3Qgc3Rh
cnQgYWNjZXNzaWJpbGl0eSBidXMsIHNvIHNraXBwaW5nIFRlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5
IgorICAgICAgICAgICAgc2VsZi5fc2tpcHBlZF90ZXN0cy5hcHBlbmQoU2tpcHBlZFRlc3QoIldl
YktpdDJBUElUZXN0cy9UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IHN0YXJ0IGFjY2Vz
c2liaWxpdHkgYnVzIikpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX3RlYXJfZG93
bl90ZXN0aW5nX2Vudmlyb25tZW50KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9zcGlfcmVnaXN0
cnlkOgorICAgICAgICAgICAgc2VsZi5fc3BpX3JlZ2lzdHJ5ZC50ZXJtaW5hdGUoKQorICAgICAg
ICBpZiBzZWxmLl9zcGlfYnVzX2xhdW5jaGVyOgorICAgICAgICAgICAgc2VsZi5fc3BpX2J1c19s
YXVuY2hlci50ZXJtaW5hdGUoKQorICAgICAgICBzZWxmLl94dmZiLnRlcm1pbmF0ZSgpCisKKyAg
ICBkZWYgX2ZpbmRfc2tpcHBlZF90ZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICBmb3Igc2tpcHBl
ZCBpbiBzZWxmLl9za2lwcGVkX3Rlc3RzOgorICAgICAgICAgICAgaWYgdGVzdC5lbmRzd2l0aChz
a2lwcGVkLnRlc3QpOgorICAgICAgICAgICAgICAgIHJldHVybiBza2lwcGVkCisgICAgICAgIHJl
dHVybiBOb25lCisKKyAgICBkZWYgX3Rlc3RfY2FzZXNfdG9fc2tpcChzZWxmLCB0ZXN0KToKKyAg
ICAgICAgaWYgc2VsZi5fb3B0aW9ucy5za2lwcGVkX2FjdGlvbiAhPSAnc2tpcCc6CisgICAgICAg
ICAgICByZXR1cm4gW10KKworICAgICAgICBza2lwcGVkID0gc2VsZi5fZmluZF9za2lwcGVkX3Rl
c3QodGVzdCkKKyAgICAgICAgaWYgc2tpcHBlZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJl
dHVybiBza2lwcGVkLnRlc3RfY2FzZXMKKyAgICAgICAgcmV0dXJuIFtdCisKKyAgICBkZWYgX3No
b3VsZF9ydW5fdGVzdChzZWxmLCB0ZXN0KToKKyAgICAgICAgIyBTa2lwcGVkIHRlc3QgYXJlIGln
bm9yZWQsIHJ1biBhbGwgdGVzdHMuCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuc2tpcHBlZF9h
Y3Rpb24gPT0gJ2lnbm9yZSc6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHNr
aXBwZWQgPSBzZWxmLl9maW5kX3NraXBwZWRfdGVzdCh0ZXN0KQorICAgICAgICAjIEJ5IGRlZmF1
bHQgc2tpcHBlZCB0ZXN0IGFyZSBza2lwcGVkLCBydW4gdGhlbSBvbmx5IHdoZW4gdGhlcmUgYXJl
IHNwZWNpZmljIHRlc3QgY2FzZXMgZmFpbGluZy4KKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5z
a2lwcGVkX2FjdGlvbiA9PSAnc2tpcCc6CisgICAgICAgICAgICByZXR1cm4gc2tpcHBlZCBpcyBO
b25lIG9yIHNraXBwZWQudGVzdF9jYXNlcworCisgICAgICAgICMgUnVuIG9ubHkgc2tpcHBlZCB0
ZXN0cy4KKyAgICAgICAgcmV0dXJuIHNraXBwZWQgaXMgbm90IE5vbmUKKworICAgIGRlZiBfZ2V0
X2NoaWxkX3BpZF9mcm9tX3Rlc3Rfb3V0cHV0KHNlbGYsIG91dHB1dCk6CisgICAgICAgIGlmIG5v
dCBvdXRwdXQ6CisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgbWF0Y2ggPSByZS5zZWFy
Y2gocidcKHBpZD0oP1A8Y2hpbGRfcGlkPlswLTldKylcKScsIG91dHB1dCkKKyAgICAgICAgaWYg
bm90IG1hdGNoOgorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIHJldHVybiBpbnQobWF0
Y2guZ3JvdXAoJ2NoaWxkX3BpZCcpKQorCisgICAgZGVmIF9raWxsX3Byb2Nlc3Moc2VsZiwgcGlk
KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3Mua2lsbChwaWQsIFNJR0tJTEwpCisgICAg
ICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgIyBQcm9jZXNzIGFscmVhZHkgZGllZC4K
KyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBfcnVuX3Rlc3RfY29tbWFuZChzZWxmLCBjb21t
YW5kLCB0aW1lb3V0PS0xKToKKyAgICAgICAgZGVmIGFsYXJtX2hhbmRsZXIoc2lnbnVtLCBmcmFt
ZSk6CisgICAgICAgICAgICByYWlzZSBUZXN0VGltZW91dAorCisgICAgICAgIHAgPSBzdWJwcm9j
ZXNzLlBvcGVuKGNvbW1hbmQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIGVudj1zZWxmLl90ZXN0
X2VudikKKyAgICAgICAgaWYgdGltZW91dCA+IDA6CisgICAgICAgICAgICBzaWduYWwoU0lHQUxS
TSwgYWxhcm1faGFuZGxlcikKKyAgICAgICAgICAgIGFsYXJtKHRpbWVvdXQpCisKKyAgICAgICAg
c3Rkb3V0ID0gIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3Rkb3V0ID0gcC5jb21tdW5p
Y2F0ZSgpWzBdCisgICAgICAgICAgICBpZiB0aW1lb3V0ID4gMDoKKyAgICAgICAgICAgICAgICBh
bGFybSgwKQorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShzdGRvdXQpCisgICAgICAgICAg
ICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgZXhjZXB0IFRlc3RUaW1lb3V0OgorICAgICAg
ICAgICAgc2VsZi5fa2lsbF9wcm9jZXNzKHAucGlkKQorICAgICAgICAgICAgY2hpbGRfcGlkID0g
c2VsZi5fZ2V0X2NoaWxkX3BpZF9mcm9tX3Rlc3Rfb3V0cHV0KHN0ZG91dCkKKyAgICAgICAgICAg
IGlmIGNoaWxkX3BpZCA+IDA6CisgICAgICAgICAgICAgICAgc2VsZi5fa2lsbF9wcm9jZXNzKGNo
aWxkX3BpZCkKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgcmV0dXJuIG5vdCBwLnJldHVy
bmNvZGUKKworICAgIGRlZiBfcnVuX3Rlc3RfZ2xpYihzZWxmLCB0ZXN0KToKKyAgICAgICAgdGVz
dGVyX2NvbW1hbmQgPSBbJ2d0ZXN0ZXInXQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnZlcmJv
c2U6CisgICAgICAgICAgICB0ZXN0ZXJfY29tbWFuZC5hcHBlbmQoJy0tdmVyYm9zZScpCisgICAg
ICAgIGZvciB0ZXN0X2Nhc2UgaW4gc2VsZi5fdGVzdF9jYXNlc190b19za2lwKHRlc3QpOgorICAg
ICAgICAgICAgdGVzdGVyX2NvbW1hbmQuZXh0ZW5kKFsnLXMnLCB0ZXN0X2Nhc2VdKQorICAgICAg
ICB0ZXN0ZXJfY29tbWFuZC5hcHBlbmQodGVzdCkKKworICAgICAgICByZXR1cm4gc2VsZi5fcnVu
X3Rlc3RfY29tbWFuZCh0ZXN0ZXJfY29tbWFuZCwgc2VsZi5fb3B0aW9ucy50aW1lb3V0KQorCisg
ICAgZGVmIF9ydW5fdGVzdF9nb29nbGUoc2VsZiwgdGVzdCk6CisgICAgICAgIHRlc3Rlcl9jb21t
YW5kID0gW3Rlc3QsICItLWd0ZXN0X3Rocm93X29uX2ZhaWx1cmUiXQorICAgICAgICBza2lwcGVk
X3Rlc3RzX2Nhc2VzID0gc2VsZi5fdGVzdF9jYXNlc190b19za2lwKHRlc3QpCisgICAgICAgIGlm
IHNraXBwZWRfdGVzdHNfY2FzZXM6CisgICAgICAgICAgICB0ZXN0ZXJfY29tbWFuZC5hcHBlbmQo
Ii0tZ3Rlc3RfZmlsdGVyPS0lcyIgJSAiOiIuam9pbihza2lwcGVkX3Rlc3RzX2Nhc2VzKSkKKwor
ICAgICAgICByZXR1cm4gc2VsZi5fcnVuX3Rlc3RfY29tbWFuZCh0ZXN0ZXJfY29tbWFuZCwgc2Vs
Zi5fb3B0aW9ucy50aW1lb3V0KQorCisgICAgZGVmIF9ydW5fdGVzdChzZWxmLCB0ZXN0KToKKyAg
ICAgICAgaWYgInVuaXR0ZXN0cyIgaW4gdGVzdCBvciAiV2ViS2l0MkFQSVRlc3RzIiBpbiB0ZXN0
OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl90ZXN0X2dsaWIodGVzdCkKKworICAgICAg
ICBpZiAiVGVzdFdlYktpdEFQSSIgaW4gdGVzdDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9y
dW5fdGVzdF9nb29nbGUodGVzdCkKKworICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBy
dW5fdGVzdHMoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl90ZXN0czoKKyAgICAgICAgICAg
IHN5cy5zdGRlcnIud3JpdGUoIkVSUk9SOiB0ZXN0cyBub3QgZm91bmQgaW4gJXMuXG4iICUgKHNl
bGYuX3Byb2dyYW1zX3BhdGgpKQorICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisgICAg
ICAgICAgICByZXR1cm4gMQorCisgICAgICAgIGlmIG5vdCBzZWxmLl9zZXR1cF90ZXN0aW5nX2Vu
dmlyb25tZW50KCk6CisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgICMgUmVtb3ZlIHNr
aXBwZWQgdGVzdHMgbm93IGluc3RlYWQgb2Ygd2hlbiB3ZSBmaW5kIHRoZW0sIGJlY2F1c2UKKyAg
ICAgICAgIyBzb21lIHRlc3RzIG1pZ2h0IGJlIHNraXBwZWQgd2hpbGUgc2V0dGluZyB1cCB0aGUg
dGVzdCBlbnZpcm9ubWVudC4KKyAgICAgICAgc2VsZi5fdGVzdHMgPSBbdGVzdCBmb3IgdGVzdCBp
biBzZWxmLl90ZXN0cyBpZiBzZWxmLl9zaG91bGRfcnVuX3Rlc3QodGVzdCldCisKKyAgICAgICAg
ZmFpbGVkX3Rlc3RzID0gW10KKyAgICAgICAgdGltZWRfb3V0X3Rlc3RzID0gW10KKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi5fdGVzdHM6CisgICAgICAgICAgICAg
ICAgc3VjY2VzcyA9IFRydWUKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAg
ICAgIHN1Y2Nlc3MgPSBzZWxmLl9ydW5fdGVzdCh0ZXN0KQorICAgICAgICAgICAgICAgIGV4Y2Vw
dCBUZXN0VGltZW91dDoKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiVEVT
VDogJXM6IFRJTUVPVVRcbiIgJSB0ZXN0KQorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0
LmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgdGltZWRfb3V0X3Rlc3RzLmFwcGVuZCh0ZXN0
KQorCisgICAgICAgICAgICAgICAgaWYgbm90IHN1Y2Nlc3M6CisgICAgICAgICAgICAgICAgICAg
IGZhaWxlZF90ZXN0cy5hcHBlbmQodGVzdCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAg
IHNlbGYuX3RlYXJfZG93bl90ZXN0aW5nX2Vudmlyb25tZW50KCkKKworICAgICAgICBpZiBmYWls
ZWRfdGVzdHM6CisgICAgICAgICAgICBuYW1lcyA9IFt0ZXN0LnJlcGxhY2Uoc2VsZi5fcHJvZ3Jh
bXNfcGF0aCwgJycsIDEpIGZvciB0ZXN0IGluIGZhaWxlZF90ZXN0c10KKyAgICAgICAgICAgIHN5
cy5zdGRvdXQud3JpdGUoIlRlc3RzIGZhaWxlZDogJXNcbiIgJSAiLCAiLmpvaW4obmFtZXMpKQor
ICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisKKyAgICAgICAgaWYgdGltZWRfb3V0X3Rl
c3RzOgorICAgICAgICAgICAgbmFtZXMgPSBbdGVzdC5yZXBsYWNlKHNlbGYuX3Byb2dyYW1zX3Bh
dGgsICcnLCAxKSBmb3IgdGVzdCBpbiB0aW1lZF9vdXRfdGVzdHNdCisgICAgICAgICAgICBzeXMu
c3Rkb3V0LndyaXRlKCJUZXN0cyB0aGF0IHRpbWVkIG91dDogJXNcbiIgJSAiLCAiLmpvaW4obmFt
ZXMpKQorICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisKKyAgICAgICAgaWYgc2VsZi5f
c2tpcHBlZF90ZXN0cyBhbmQgc2VsZi5fb3B0aW9ucy5za2lwcGVkX2FjdGlvbiA9PSAnc2tpcCc6
CisgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJUZXN0cyBza2lwcGVkOlxuJXNcbiIgJSAi
XG4iLmpvaW4oW3N0cihza2lwcGVkKSBmb3Igc2tpcHBlZCBpbiBzZWxmLl9za2lwcGVkX3Rlc3Rz
XSkpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKworICAgICAgICByZXR1cm4gbGVu
KGZhaWxlZF90ZXN0cykKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBvcHRpb25f
cGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlPSd1c2FnZTogJXByb2cgW29wdGlv
bnNdIFt0ZXN0Li4uXScpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctcicsICctLXJl
bGVhc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUn
LCBkZXN0PSdyZWxlYXNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUnVu
IGluIFJlbGVhc2UnKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLWQnLCAnLS1kZWJ1
ZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRl
c3Q9J2RlYnVnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUnVuIGluIERl
YnVnJykKKyAgICBvcHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy12JywgJy0tdmVyYm9zZScsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J3Zl
cmJvc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdSdW4gZ3Rlc3RlciBp
biB2ZXJib3NlIG1vZGUnKQorICAgIG9wdGlvbl9wYXJzZXIuYWRkX29wdGlvbignLS1kaXNwbGF5
JywgYWN0aW9uPSdzdG9yZScsIGRlc3Q9J2Rpc3BsYXknLCBkZWZhdWx0PSc6NTUnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdEaXNwbGF5IHRvIHJ1biBYdmZiJykKKyAgICBv
cHRpb25fcGFyc2VyLmFkZF9vcHRpb24oJy0tc2tpcHBlZCcsIGFjdGlvbj0nc3RvcmUnLCBkZXN0
PSdza2lwcGVkX2FjdGlvbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM9
Wydza2lwJywgJ2lnbm9yZScsICdvbmx5J10sIGRlZmF1bHQ9J3NraXAnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtZXRhdmFyPSdza2lwfGlnbm9yZXxvbmx5JywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVscD0nU3BlY2lmaWVzIGhvdyB0byB0cmVhdCB0aGUgc2tpcHBl
ZCB0ZXN0cycpCisgICAgb3B0aW9uX3BhcnNlci5hZGRfb3B0aW9uKCctdCcsICctLXRpbWVvdXQn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlJywgdHlwZT0naW50
JywgZGVzdD0ndGltZW91dCcsIGRlZmF1bHQ9MTAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlbHA9J1RpbWUgaW4gc2Vjb25kcyB1bnRpbCBhIHRlc3QgdGltZXMgb3V0JykKKyAgICBv
cHRpb25zLCBhcmdzID0gb3B0aW9uX3BhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIHN5cy5leGl0
KFRlc3RSdW5uZXIob3B0aW9ucywgYXJncykucnVuX3Rlc3RzKCkpCg==
</data>
<flag name="review"
          id="146383"
          type_id="1"
          status="+"
          setter="pnormand"
    />
          </attachment>
      

    </bug>

</bugzilla>