<?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>54079</bug_id>
          
          <creation_ts>2011-02-09 01:29:46 -0800</creation_ts>
          <short_desc>nrwt multiprocessing: move non-testing logic out of single_test_runner, create worker_mixin</short_desc>
          <delta_ts>2011-02-14 14:56:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>
          
          <blocked>49566</blocked>
    
    <blocked>54082</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>eric</cc>
    
    <cc>hayato</cc>
    
    <cc>mihaip</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>348058</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-09 01:29:46 -0800</bug_when>
    <thetext>nrwt multiprocessing: move non-testing logic out of single_test_runner, create worker_mixin</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348062</commentid>
    <comment_count>1</comment_count>
      <attachid>81771</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-09 01:34:59 -0800</bug_when>
    <thetext>Created attachment 81771
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348071</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-09 01:52:19 -0800</bug_when>
    <thetext>This patch is actually simpler than it appears. You can ignore all of the diffs in single_test_runner.py, as it is simply being rolled back to what it was as of r77076. 

Ito-san, I&apos;ve moved all of the non-testing logic back out of single_test_runner and into a new class called worker_mixin that will be shared between TestShellThread and Worker. It contains all of the worker logic that isn&apos;t specific to actually running the test and producing the outputs (which is in single_test_runner) and isn&apos;t specific to the concurrency/messaging model (which will either be in TestShellThread or Worker).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>348092</commentid>
    <comment_count>3</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2011-02-09 02:26:30 -0800</bug_when>
    <thetext>Hi Dirk,

Thank you for your very quick and great effort to roll back single_test_runner.

I was thinking how to move concurrency code back to TestShellThread in dump_render_tree.py.
I was not aware that Work should share same code. So the roll back doesn&apos;t seem to be an easy task than I thought.

I am not sure whether coding convention of WebKit allows multiple inheritance, mix-in, or not. If it is okay, the patch looks good to me.


(In reply to comment #2)
&gt; This patch is actually simpler than it appears. You can ignore all of the diffs in single_test_runner.py, as it is simply being rolled back to what it was as of r77076. 
&gt; 
&gt; Ito-san, I&apos;ve moved all of the non-testing logic back out of single_test_runner and into a new class called worker_mixin that will be shared between TestShellThread and Worker. It contains all of the worker logic that isn&apos;t specific to actually running the test and producing the outputs (which is in single_test_runner) and isn&apos;t specific to the concurrency/messaging model (which will either be in TestShellThread or Worker).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349891</commentid>
    <comment_count>4</comment_count>
      <attachid>81771</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-02-11 11:51:48 -0800</bug_when>
    <thetext>Comment on attachment 81771
Patch

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

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:31
&gt; +import os

Not seeing any usage of is in this file.

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/worker_mixin.py:50
&gt; +    def deferred_init(self, port):

The naming of this confused me; what is supposed to be deferred about it?

&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/worker_mixin.py:57
&gt; +        self._has_http_lock = False

Seems strange that you have to maintain your own flag instead of having it in the port, which actually acquires the lock. Should this be moved there?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>349953</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-11 13:07:48 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 81771 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81771&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/single_test_runner.py:31
&gt; &gt; +import os
&gt; 
&gt; Not seeing any usage of is in this file.
&gt; 

That&apos;s probably a leftover. I&apos;ll delete it.

&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/worker_mixin.py:50
&gt; &gt; +    def deferred_init(self, port):
&gt; 
&gt; The naming of this confused me; what is supposed to be deferred about it?
&gt;

It isn&apos;t called during the constructor, when most initialization is done (and can&apos;t be, because the constructor is called pre-fork). It is called during the run() method, when it&apos;s actually in the right process. I thought I had added a comment, but I guess not. I&apos;ll add one.
  
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/layout_package/worker_mixin.py:57
&gt; &gt; +        self._has_http_lock = False
&gt; 
&gt; Seems strange that you have to maintain your own flag instead of having it in the port, which actually acquires the lock. Should this be moved there?

I don&apos;t think so. This flag mostly exists for the caller to track whether or not he needs to call the stop() routine to release the lock. If I pushed this flag into the port, it would need to expose it publicly (which  I could do).

Arguably the flag should be set by the caller as well, but this class needs to know whether or not it has the lock as well in order to be able to clean up reliably (I suppose it could always release the lock during clean up, but that feels wrong).

Frankly, it&apos;s a bad design in the first place to even need to track whether or not we&apos;re holding the lock across multiple function calls. This is the fault of the code in TestShellThread.run(), which has an inverted loop structure. That could be re-written, but frankly I&apos;d prefer to just get these patches landed and kill that class completely and then come back and fix this. I can add a FIXME if that would help.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350079</commentid>
    <comment_count>6</comment_count>
      <attachid>81771</attachid>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-02-11 15:08:30 -0800</bug_when>
    <thetext>Comment on attachment 81771
Patch

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

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/worker_mixin.py:50
&gt;&gt;&gt; +    def deferred_init(self, port):
&gt;&gt; 
&gt;&gt; The naming of this confused me; what is supposed to be deferred about it?
&gt; 
&gt; It isn&apos;t called during the constructor, when most initialization is done (and can&apos;t be, because the constructor is called pre-fork). It is called during the run() method, when it&apos;s actually in the right process. I thought I had added a comment, but I guess not. I&apos;ll add one.

At least in dump_render_tree_thread.py, it&apos;s called from TestShellThread.__init__. Maybe it should be called init_in_worker_process? (assuming that it&apos;s OK for it to be called in TestShellThread&apos;s constructor because we&apos;re not actually forking in the threading model)?

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/worker_mixin.py:57

&gt;&gt; 
&gt;&gt; Seems strange that you have to maintain your own flag instead of having it in the port, which actually acquires the lock. Should this be moved there?
&gt; 
&gt; I don&apos;t think so. This flag mostly exists for the caller to track whether or not he needs to call the stop() routine to release the lock. If I pushed this flag into the port, it would need to expose it publicly (which  I could do).
&gt; 
&gt; Arguably the flag should be set by the caller as well, but this class needs to know whether or not it has the lock as well in order to be able to clean up reliably (I suppose it could always release the lock during clean up, but that feels wrong).
&gt; 
&gt; Frankly, it&apos;s a bad design in the first place to even need to track whether or not we&apos;re holding the lock across multiple function calls. This is the fault of the code in TestShellThread.run(), which has an inverted loop structure. That could be re-written, but frankly I&apos;d prefer to just get these patches landed and kill that class completely and then come back and fix this. I can add a FIXME if that would help.

A FIXME is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350146</commentid>
    <comment_count>7</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-11 16:25:19 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 81771 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=81771&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/layout_package/worker_mixin.py:50
&gt; &gt;&gt;&gt; +    def deferred_init(self, port):
&gt; &gt;&gt; 
&gt; &gt;&gt; The naming of this confused me; what is supposed to be deferred about it?
&gt; &gt; 
&gt; &gt; It isn&apos;t called during the constructor, when most initialization is done (and can&apos;t be, because the constructor is called pre-fork). It is called during the run() method, when it&apos;s actually in the right process. I thought I had added a comment, but I guess not. I&apos;ll add one.
&gt; 
&gt; At least in dump_render_tree_thread.py, it&apos;s called from TestShellThread.__init__. Maybe it should be called init_in_worker_process? (assuming that it&apos;s OK for it to be called in TestShellThread&apos;s constructor because we&apos;re not actually forking in the threading model)?
&gt;

ok. In bug 54082, you&apos;d have seen it getting called from inside Worker.run(). In dump_render_thread it&apos;s safe to be called during __init__, but it could also be called during run(). Maybe something like run_init()?
I&apos;m a little reluctant to call it init_in_worker_process because only one of the five ways it&apos;s called is actually from a child process (the others being two called in the same thread and two called from a separate thread).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350200</commentid>
    <comment_count>8</comment_count>
      <attachid>82220</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-11 18:33:30 -0800</bug_when>
    <thetext>Created attachment 82220
merge in changes from 54070, 54071, 54072, 54074, feedback from mihaip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>350903</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-02-14 14:56:56 -0800</bug_when>
    <thetext>Committed r78511: &lt;http://trac.webkit.org/changeset/78511&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>81771</attachid>
            <date>2011-02-09 01:34:59 -0800</date>
            <delta_ts>2011-02-11 18:33:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54079-20110209013458.patch</filename>
            <type>text/plain</type>
            <size>24405</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA2NTEz
MjZlODEzNjQ0MWQ2OTE1MzY3NmZlMjlkZTY5OWQ1ZjMzMzY4Li4yMjJjMTMzMDZmYmJkYTI4MzY4
YjliMmI4NDE2NmE4NGFiNTU1MTQwIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMjMgQEAKIAogICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBUaGlzIHBhdGNoIHNodWZmbGVzIGNvZGUgb3V0IG9m
IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkIGFuZAorICAgICAgICBzaW5nbGVfdGVzdF9ydW5uZXIg
YW5kIGludG8gYSBuZXcgd29ya2VyX21peGluIGNsYXNzIHRoYXQgd2lsbAorICAgICAgICBiZSBz
aGFyZWQgYnkgYm90aCBUZXN0U2hlbGxUaHJlYWQgYW5kIFdvcmtlci4gVGhpcyBjaGFuZ2UKKyAg
ICAgICAgcmVzdG9yZXMgc2luZ2xlX3Rlc3RfcnVubmVyIHRvIGl0cyBzdGF0ZSBhcyBvZiByNzc2
MDYgLSBpdCBpcworICAgICAgICBzdGF0ZWxlc3MgYWdhaW4uIEl0IGFsc28gcHJ1bmVzIFRlc3RT
aGVsbFRocmVhZCB0byBwcmV0dHkgbXVjaAorICAgICAgICBqdXN0IHRoZSBsb2dpYyB1c2VkIGZv
ciB0aGUgb3JpZ2luYWwgc2hhcmVkLW1lbW9yeSBhY2Nlc3MuCisKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0MDc5CisKKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3Ro
cmVhZC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRf
cGFja2FnZS9zaW5nbGVfdGVzdF9ydW5uZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyX21peGluLnB5OiBBZGRlZC4KKwor
MjAxMS0wMi0wOSAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBUaGlzIHBhdGNoIHVwZGF0
ZXMgTlJXVCB0byBhZGQgcGVyLXdvcmtlciBhbmQgcGVyLXNoYXJkIHRlc3Qgc3RhdHMKICAgICAg
ICAgaW50byBUZXN0UnVubmVyMiwgYnJpbmdpbmcgaXQgdG8gcGFyaXR5IHdpdGggVGVzdFJ1bm5l
ci4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVh
ZC5weQppbmRleCA3ZGRkN2IwZjlhYzE4YmE0ODA1YzhkNDA5MThlZGFhNzgzYmQ4ODE1Li4wNGRk
MTE4MTIxNzAxMDMzMDIwMjhiMGM4YjhjMGViODY1ZWQyZWY3IDEwMDY0NAotLS0gYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90
cmVlX3RocmVhZC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9s
YXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weQpAQCAtNDAsMTMgKzQwLDEz
IEBAIGltcG9ydCB0aHJlYWQKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCiAKLWZyb20g
d2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlLnNpbmdsZV90ZXN0X3J1bm5lciBp
bXBvcnQgU2luZ2xlVGVzdFJ1bm5lcgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0
X3BhY2thZ2UgaW1wb3J0IHdvcmtlcl9taXhpbgogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIo
IndlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZS4iCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgImR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkIikKIAogCi1jbGFzcyBUZXN0U2hlbGxU
aHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CitjbGFzcyBUZXN0U2hlbGxUaHJlYWQodGhyZWFkaW5n
LlRocmVhZCwgd29ya2VyX21peGluLldvcmtlck1peGluKToKICAgICBkZWYgX19pbml0X18oc2Vs
ZiwgcG9ydCwgb3B0aW9ucywgd29ya2VyX251bWJlciwgd29ya2VyX25hbWUsCiAgICAgICAgICAg
ICAgICAgIGZpbGVuYW1lX2xpc3RfcXVldWUsIHJlc3VsdF9xdWV1ZSk6CiAgICAgICAgICIiIklu
aXRpYWxpemUgYWxsIHRoZSBsb2NhbCBzdGF0ZSBmb3IgdGhpcyBEdW1wUmVuZGVyVHJlZSB0aHJl
YWQuCkBAIC04MSw2ICs4MSw3IEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZCh0aHJlYWRpbmcuVGhy
ZWFkKToKICAgICAgICAgc2VsZi5fc3RvcF90aW1lID0gMAogICAgICAgICBzZWxmLl9odHRwX2xv
Y2tfd2FpdF9iZWdpbiA9IDAKICAgICAgICAgc2VsZi5faHR0cF9sb2NrX3dhaXRfZW5kID0gMAor
ICAgICAgICBzZWxmLmRlZmVycmVkX2luaXQocG9ydCkKIAogICAgIGRlZiBjYW5jZWwoc2VsZik6
CiAgICAgICAgICIiIlNldCBhIGZsYWcgdGVsbGluZyB0aGlzIHRocmVhZCB0byBxdWl0LiIiIgpA
QCAtMTc1LDIzICsxNzYsMTAgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJl
YWQpOgogCiAgICAgICAgIElmIHRlc3RfcnVubmVyIGlzIG5vdCBOb25lLCB0aGVuIHdlIGNhbGwg
dGVzdF9ydW5uZXIuVXBkYXRlU3VtbWFyeSgpCiAgICAgICAgIHdpdGggdGhlIHJlc3VsdHMgb2Yg
ZWFjaCB0ZXN0LiIiIgotICAgICAgICBzaW5nbGVfdGVzdF9ydW5uZXIgPSBTaW5nbGVUZXN0UnVu
bmVyKHNlbGYuX29wdGlvbnMsIHNlbGYuX3BvcnQsCi0gICAgICAgICAgICBzZWxmLl9uYW1lLCBz
ZWxmLl93b3JrZXJfbnVtYmVyKQotCi0gICAgICAgIGJhdGNoX3NpemUgPSBzZWxmLl9vcHRpb25z
LmJhdGNoX3NpemUKLSAgICAgICAgYmF0Y2hfY291bnQgPSAwCi0KLSAgICAgICAgIyBBcHBlbmQg
dGVzdHMgd2UncmUgcnVubmluZyB0byB0aGUgZXhpc3RpbmcgdGVzdHNfcnVuLnR4dCBmaWxlLgot
ICAgICAgICAjIFRoaXMgaXMgY3JlYXRlZCBpbiBydW5fd2Via2l0X3Rlc3RzLnB5Ol9QcmVwYXJl
TGlzdHNBbmRQcmludE91dHB1dC4KLSAgICAgICAgdGVzdHNfcnVuX2ZpbGVuYW1lID0gc2VsZi5f
cG9ydC5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
dGVzdHNfcnVuJWQudHh0IiAlIHNlbGYuX3dvcmtlcl9udW1iZXIpCi0gICAgICAgIHRlc3RzX3J1
bl9maWxlID0gc2VsZi5fcG9ydC5fZmlsZXN5c3RlbS5vcGVuX3RleHRfZmlsZV9mb3Jfd3JpdGlu
Zyh0ZXN0c19ydW5fZmlsZW5hbWUsIGFwcGVuZD1GYWxzZSkKLQogICAgICAgICB3aGlsZSBUcnVl
OgogICAgICAgICAgICAgaWYgc2VsZi5fY2FuY2VsZWQ6CiAgICAgICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygnVGVzdGluZyBjYW5jZWxsZWQnKQotICAgICAgICAgICAgICAgIHRlc3RzX3J1bl9maWxl
LmNsb3NlKCkKLSAgICAgICAgICAgICAgICBzaW5nbGVfdGVzdF9ydW5uZXIuY2xlYW51cCgpCisg
ICAgICAgICAgICAgICAgc2VsZi5jbGVhbnVwKCkKICAgICAgICAgICAgICAgICByZXR1cm4KIAog
ICAgICAgICAgICAgaWYgbGVuKHNlbGYuX2ZpbGVuYW1lX2xpc3QpIGlzIDA6CkBAIC0yMDQsMTYg
KzE5MiwxNSBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAg
ICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfZ3JvdXAsIHNlbGYuX2ZpbGVuYW1lX2xpc3Qg
PSBcCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlbmFtZV9saXN0X3F1ZXVlLmdl
dF9ub3dhaXQoKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBRdWV1ZS5FbXB0eToKLSAgICAgICAg
ICAgICAgICAgICAgdGVzdHNfcnVuX2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICBz
aW5nbGVfdGVzdF9ydW5uZXIuY2xlYW51cCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xl
YW51cCgpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgICAgICAgICAgaWYg
c2VsZi5fY3VycmVudF9ncm91cCA9PSAidGVzdHNfdG9faHR0cF9sb2NrIjoKICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5faHR0cF9sb2NrX3dhaXRfYmVnaW4gPSB0aW1lLnRpbWUoKQotICAgICAg
ICAgICAgICAgICAgICBzaW5nbGVfdGVzdF9ydW5uZXIuc3RhcnRfc2VydmVyc193aXRoX2xvY2so
KQorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKCkKICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5faHR0cF9sb2NrX3dhaXRfZW5kID0gdGltZS50aW1lKCkK
LSAgICAgICAgICAgICAgICBlbGlmIHNpbmdsZV90ZXN0X3J1bm5lci5oYXNfaHR0cF9sb2NrOgot
ICAgICAgICAgICAgICAgICAgICBzaW5nbGVfdGVzdF9ydW5uZXIuc3RvcF9zZXJ2ZXJzX3dpdGhf
bG9jaygpCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLl9oYXNfaHR0cF9sb2NrOgorICAgICAg
ICAgICAgICAgICAgICBzZWxmLnN0b3Bfc2VydmVyc193aXRoX2xvY2soKQogCiAgICAgICAgICAg
ICAgICAgc2VsZi5fbnVtX3Rlc3RzX2luX2N1cnJlbnRfZ3JvdXAgPSBsZW4oc2VsZi5fZmlsZW5h
bWVfbGlzdCkKICAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2dyb3VwX3N0YXJ0X3RpbWUg
PSB0aW1lLnRpbWUoKQpAQCAtMjIxLDMzICsyMDgsMTMgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFk
KHRocmVhZGluZy5UaHJlYWQpOgogICAgICAgICAgICAgdGVzdF9pbnB1dCA9IHNlbGYuX2ZpbGVu
YW1lX2xpc3QucG9wKCkKIAogICAgICAgICAgICAgIyBXZSBoYXZlIGEgdXJsLCBydW4gdGVzdHMu
Ci0gICAgICAgICAgICBiYXRjaF9jb3VudCArPSAxCiAgICAgICAgICAgICBzZWxmLl9udW1fdGVz
dHMgKz0gMQogCi0gICAgICAgICAgICB0aW1lb3V0ID0gc2luZ2xlX3Rlc3RfcnVubmVyLnRpbWVv
dXQodGVzdF9pbnB1dCkKLSAgICAgICAgICAgIHJlc3VsdCA9IHNpbmdsZV90ZXN0X3J1bm5lci5y
dW5fdGVzdCh0ZXN0X2lucHV0LCB0aW1lb3V0KQotCi0gICAgICAgICAgICB0ZXN0c19ydW5fZmls
ZS53cml0ZSh0ZXN0X2lucHV0LmZpbGVuYW1lICsgIlxuIikKLSAgICAgICAgICAgIHRlc3RfbmFt
ZSA9IHNlbGYuX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2lucHV0LmZpbGVuYW1l
KQotICAgICAgICAgICAgaWYgcmVzdWx0LmZhaWx1cmVzOgotICAgICAgICAgICAgICAgICMgQ2hl
Y2sgYW5kIGtpbGwgRHVtcFJlbmRlclRyZWUgaWYgd2UgbmVlZCB0by4KLSAgICAgICAgICAgICAg
ICBpZiBhbnkoW2Yuc2hvdWxkX2tpbGxfZHVtcF9yZW5kZXJfdHJlZSgpIGZvciBmIGluIHJlc3Vs
dC5mYWlsdXJlc10pOgotICAgICAgICAgICAgICAgICAgICBzaW5nbGVfdGVzdF9ydW5uZXIua2ls
bF9kdW1wX3JlbmRlcl90cmVlKCkKLSAgICAgICAgICAgICAgICAgICAgIyBSZXNldCB0aGUgYmF0
Y2ggY291bnQgc2luY2UgdGhlIHNoZWxsIGp1c3QgYm91bmNlZC4KLSAgICAgICAgICAgICAgICAg
ICAgYmF0Y2hfY291bnQgPSAwCi0KLSAgICAgICAgICAgICAgICAjIFByaW50IHRoZSBlcnJvciBt
ZXNzYWdlKHMpLgotICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzICVzIGZhaWxlZDoiICUg
KHNlbGYuX25hbWUsIHRlc3RfbmFtZSkpCi0gICAgICAgICAgICAgICAgZm9yIGYgaW4gcmVzdWx0
LmZhaWx1cmVzOgotICAgICAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAgJXMiICUgKHNl
bGYuX25hbWUsIGYubWVzc2FnZSgpKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAg
ICAgX2xvZy5kZWJ1ZygiJXMgJXMgcGFzc2VkIiAlIChzZWxmLl9uYW1lLCB0ZXN0X25hbWUpKQot
ICAgICAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlLnB1dChyZXN1bHQuZHVtcHMoKSkKKyAgICAg
ICAgICAgIHJlc3VsdCA9IHNlbGYucnVuX3Rlc3Rfd2l0aF90aW1lb3V0KHRlc3RfaW5wdXQsIHNl
bGYudGltZW91dCh0ZXN0X2lucHV0KSkKIAotICAgICAgICAgICAgaWYgYmF0Y2hfc2l6ZSA+IDAg
YW5kIGJhdGNoX2NvdW50ID49IGJhdGNoX3NpemU6Ci0gICAgICAgICAgICAgICAgIyBCb3VuY2Ug
dGhlIHNoZWxsIGFuZCByZXNldCBjb3VudC4KLSAgICAgICAgICAgICAgICBzaW5nbGVfdGVzdF9y
dW5uZXIua2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKLSAgICAgICAgICAgICAgICBiYXRjaF9jb3Vu
dCA9IDAKKyAgICAgICAgICAgIHNlbGYuY2xlYW5fdXBfYWZ0ZXJfdGVzdCh0ZXN0X2lucHV0LCBy
ZXN1bHQpCisgICAgICAgICAgICBzZWxmLl90ZXN0X3Jlc3VsdHMuYXBwZW5kKHJlc3VsdCkKKyAg
ICAgICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZS5wdXQocmVzdWx0LmR1bXBzKCkpCiAKICAgICAg
ICAgICAgIGlmIHRlc3RfcnVubmVyOgogICAgICAgICAgICAgICAgIHRlc3RfcnVubmVyLnVwZGF0
ZV9zdW1tYXJ5KHJlc3VsdF9zdW1tYXJ5KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvc2luZ2xlX3Rlc3RfcnVubmVyLnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvc2luZ2xl
X3Rlc3RfcnVubmVyLnB5CmluZGV4IDhmMTUxZThjM2EyYWI4OWE5YzIwMDNiNjM5YjljNjRiOWI4
ODJhZDkuLmQ4NDYzZDlhNGU4MzJhZGNlOWE1N2UyMzAwNWQ4YWFhODY0MmMyY2QgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3Np
bmdsZV90ZXN0X3J1bm5lci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9sYXlvdXRfcGFja2FnZS9zaW5nbGVfdGVzdF9ydW5uZXIucHkKQEAgLTI4LDE0ICsyOCwx
MCBAQAogCiAKIGltcG9ydCBsb2dnaW5nCi1pbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgb3MKIGlt
cG9ydCB0aW1lCiAKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGJhc2UK
LQotZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBlcyBpbXBvcnQgdGV4dF9kaWZm
Ci1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy50ZXN0X3R5cGVzIGltcG9ydCBpbWFnZV9kaWZm
Ci0KIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB0ZXN0
X2ZhaWx1cmVzCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZS50ZXN0
X3Jlc3VsdHMgaW1wb3J0IFRlc3RSZXN1bHQKIApAQCAtNDMsNiArMzksMTIgQEAgZnJvbSB3ZWJr
aXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3BhY2thZ2UudGVzdF9yZXN1bHRzIGltcG9ydCBUZXN0
UmVzdWx0CiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKIAorZGVmIHJ1bl9z
aW5nbGVfdGVzdChwb3J0LCBvcHRpb25zLCB0ZXN0X2lucHV0LCBkcml2ZXIsIHdvcmtlcl9uYW1l
LCB0ZXN0X3R5cGVzKToKKyAgICAjIEZJWE1FOiBQdWxsIHRoaXMgaW50byBUZXN0U2hlbGxUaHJl
YWQuX3J1bigpLgorICAgIHJ1bm5lciA9IFNpbmdsZVRlc3RSdW5uZXIob3B0aW9ucywgcG9ydCwg
ZHJpdmVyLCB0ZXN0X2lucHV0LCB3b3JrZXJfbmFtZSwgdGVzdF90eXBlcykKKyAgICByZXR1cm4g
cnVubmVyLnJ1bigpCisKKwogY2xhc3MgRXhwZWN0ZWREcml2ZXJPdXRwdXQ6CiAgICAgIiIiR3Jv
dXBzIGluZm9ybWF0aW9uIGFib3V0IGFuIGV4cGVjdGVkIGRyaXZlciBvdXRwdXQuIiIiCiAgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHRleHQsIGltYWdlLCBpbWFnZV9oYXNoKToKQEAgLTUzLDExMSAr
NTUsMTUgQEAgY2xhc3MgRXhwZWN0ZWREcml2ZXJPdXRwdXQ6CiAKIGNsYXNzIFNpbmdsZVRlc3RS
dW5uZXI6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9ucywgcG9ydCwgd29ya2VyX25h
bWUsIHdvcmtlcl9udW1iZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25zLCBwb3J0
LCBkcml2ZXIsIHRlc3RfaW5wdXQsIHdvcmtlcl9uYW1lLCB0ZXN0X3R5cGVzKToKICAgICAgICAg
c2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAg
ICAgc2VsZi5fZHJpdmVyID0gZHJpdmVyCisgICAgICAgIHNlbGYuX2ZpbGVuYW1lID0gdGVzdF9p
bnB1dC5maWxlbmFtZQorICAgICAgICBzZWxmLl90aW1lb3V0ID0gdGVzdF9pbnB1dC50aW1lb3V0
CiAgICAgICAgIHNlbGYuX3dvcmtlcl9uYW1lID0gd29ya2VyX25hbWUKLSAgICAgICAgc2VsZi5f
d29ya2VyX251bWJlciA9IHdvcmtlcl9udW1iZXIKLSAgICAgICAgc2VsZi5fZHJpdmVyID0gTm9u
ZQotICAgICAgICBzZWxmLl90ZXN0X3R5cGVzID0gW10KLSAgICAgICAgc2VsZi5oYXNfaHR0cF9s
b2NrID0gRmFsc2UKLSAgICAgICAgZm9yIGNscyBpbiBzZWxmLl9nZXRfdGVzdF90eXBlX2NsYXNz
ZXMoKToKLSAgICAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMuYXBwZW5kKGNscyhzZWxmLl9wb3J0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMu
cmVzdWx0c19kaXJlY3RvcnkpKQotCi0gICAgZGVmIGNsZWFudXAoc2VsZik6Ci0gICAgICAgIHNl
bGYua2lsbF9kdW1wX3JlbmRlcl90cmVlKCkKLSAgICAgICAgaWYgc2VsZi5oYXNfaHR0cF9sb2Nr
OgotICAgICAgICAgICAgc2VsZi5zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKCkKLQotICAgIGRlZiBf
Z2V0X3Rlc3RfdHlwZV9jbGFzc2VzKHNlbGYpOgotICAgICAgICBjbGFzc2VzID0gW3RleHRfZGlm
Zi5UZXN0VGV4dERpZmZdCi0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHM6Ci0g
ICAgICAgICAgICBjbGFzc2VzLmFwcGVuZChpbWFnZV9kaWZmLkltYWdlRGlmZikKLSAgICAgICAg
cmV0dXJuIGNsYXNzZXMKLQotICAgIGRlZiB0aW1lb3V0KHNlbGYsIHRlc3RfaW5wdXQpOgotICAg
ICAgICAjIFdlIGNhbGN1bGF0ZSBob3cgbG9uZyB3ZSBleHBlY3QgdGhlIHRlc3QgdG8gdGFrZS4K
LSAgICAgICAgIwotICAgICAgICAjIFRoZSBEdW1wUmVuZGVyVHJlZSB3YXRjaGRvZyB1c2VzIDIu
NXggdGhlIHRpbWVvdXQ7IHdlIHdhbnQgdG8gYmUKLSAgICAgICAgIyBsYXJnZXIgdGhhbiB0aGF0
LiBXZSBhbHNvIGFkZCBhIGxpdHRsZSBtb3JlIHBhZGRpbmcgaWYgd2UncmUKLSAgICAgICAgIyBy
dW5uaW5nIHRlc3RzIGluIGEgc2VwYXJhdGUgdGhyZWFkLgotICAgICAgICAjCi0gICAgICAgICMg
Tm90ZSB0aGF0IHdlIG5lZWQgdG8gY29udmVydCB0aGUgdGVzdCB0aW1lb3V0IGZyb20gYQotICAg
ICAgICAjIHN0cmluZyB2YWx1ZSBpbiBtaWxsaXNlY29uZHMgdG8gYSBmbG9hdCBmb3IgUHl0aG9u
LgotICAgICAgICBkcml2ZXJfdGltZW91dF9zZWMgPSAzLjAgKiBmbG9hdCh0ZXN0X2lucHV0LnRp
bWVvdXQpIC8gMTAwMC4wCi0gICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6
Ci0gICAgICAgICAgICByZXR1cm4gZHJpdmVyX3RpbWVvdXRfc2VjCi0KLSAgICAgICAgdGhyZWFk
X3BhZGRpbmdfc2VjID0gMS4wCi0gICAgICAgIHRocmVhZF90aW1lb3V0X3NlYyA9IGRyaXZlcl90
aW1lb3V0X3NlYyArIHRocmVhZF9wYWRkaW5nX3NlYwotICAgICAgICByZXR1cm4gdGhyZWFkX3Rp
bWVvdXRfc2VjCi0KLSAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCwgdGltZW91dCk6
Ci0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMucnVuX3NpbmdseToKLSAgICAgICAgICAgIHJldHVy
biBzZWxmLl9ydW5fdGVzdF9pbl9hbm90aGVyX3RocmVhZCh0ZXN0X2lucHV0LCB0aW1lb3V0KQot
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl90ZXN0X2luX3RoaXNf
dGhyZWFkKHRlc3RfaW5wdXQpCi0gICAgICAgIHJldHVybiByZXN1bHQKLQotICAgIGRlZiBfcnVu
X3Rlc3RfaW5fYW5vdGhlcl90aHJlYWQoc2VsZiwgdGVzdF9pbnB1dCwgdGhyZWFkX3RpbWVvdXRf
c2VjKToKLSAgICAgICAgIiIiUnVuIGEgdGVzdCBpbiBhIHNlcGFyYXRlIHRocmVhZCwgZW5mb3Jj
aW5nIGEgaGFyZCB0aW1lIGxpbWl0LgotCi0gICAgICAgIFNpbmNlIHdlIGNhbiBvbmx5IGRldGVj
dCB0aGUgdGVybWluYXRpb24gb2YgYSB0aHJlYWQsIG5vdCBhbnkgaW50ZXJuYWwKLSAgICAgICAg
c3RhdGUgb3IgcHJvZ3Jlc3MsIHdlIGNhbiBvbmx5IHJ1biBwZXItdGVzdCB0aW1lb3V0cyB3aGVu
IHJ1bm5pbmcgdGVzdAotICAgICAgICBmaWxlcyBzaW5nbHkuCi0KLSAgICAgICAgQXJnczoKLSAg
ICAgICAgICB0ZXN0X2lucHV0OiBPYmplY3QgY29udGFpbmluZyB0aGUgdGVzdCBmaWxlbmFtZSBh
bmQgdGltZW91dAotICAgICAgICAgIHRocmVhZF90aW1lb3V0X3NlYzogdGltZSB0byB3YWl0IGJl
Zm9yZSBraWxsaW5nIHRoZSBkcml2ZXIgcHJvY2Vzcy4KLSAgICAgICAgUmV0dXJuczoKLSAgICAg
ICAgICBBIFRlc3RSZXN1bHQKLSAgICAgICAgIiIiCi0gICAgICAgIHdvcmtlciA9IHNlbGYKLSAg
ICAgICAgcmVzdWx0ID0gTm9uZQotCi0gICAgICAgIGRyaXZlciA9IHdvcmtlci5fcG9ydC5jcmVh
dGVfZHJpdmVyKHdvcmtlci5fd29ya2VyX251bWJlcikKLSAgICAgICAgZHJpdmVyLnN0YXJ0KCkK
LQotICAgICAgICBjbGFzcyBTaW5nbGVUZXN0VGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgotICAg
ICAgICAgICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSB3b3JrZXIu
cnVuKHRlc3RfaW5wdXQsIGRyaXZlcikKLQotICAgICAgICB0aHJlYWQgPSBTaW5nbGVUZXN0VGhy
ZWFkKCkKLSAgICAgICAgdGhyZWFkLnN0YXJ0KCkKLSAgICAgICAgdGhyZWFkLmpvaW4odGhyZWFk
X3RpbWVvdXRfc2VjKQotICAgICAgICBpZiB0aHJlYWQuaXNBbGl2ZSgpOgotICAgICAgICAgICAg
IyBJZiBqb2luKCkgcmV0dXJuZWQgd2l0aCB0aGUgdGhyZWFkIHN0aWxsIHJ1bm5pbmcsIHRoZQot
ICAgICAgICAgICAgIyBEdW1wUmVuZGVyVHJlZSBpcyBjb21wbGV0ZWx5IGh1bmcgYW5kIHRoZXJl
J3Mgbm90aGluZwotICAgICAgICAgICAgIyBtb3JlIHdlIGNhbiBkbyB3aXRoIGl0LiAgV2UgaGF2
ZSB0byBraWxsIGFsbCB0aGUKLSAgICAgICAgICAgICMgRHVtcFJlbmRlclRyZWVzIHRvIGZyZWUg
aXQgdXAuIElmIHdlJ3JlIHJ1bm5pbmcgbW9yZSB0aGFuCi0gICAgICAgICAgICAjIG9uZSBEdW1w
UmVuZGVyVHJlZSB0aHJlYWQsIHdlJ2xsIGVuZCB1cCBraWxsaW5nIHRoZSBvdGhlcgotICAgICAg
ICAgICAgIyBEdW1wUmVuZGVyVHJlZXMgdG9vLCBpbnRyb2R1Y2luZyBzcHVyaW91cyBjcmFzaGVz
LiBXZSBhY2NlcHQKLSAgICAgICAgICAgICMgdGhhdCB0cmFkZW9mZiBpbiBvcmRlciB0byBhdm9p
ZCBsb3NpbmcgdGhlIHJlc3Qgb2YgdGhpcwotICAgICAgICAgICAgIyB0aHJlYWQncyByZXN1bHRz
LgotICAgICAgICAgICAgX2xvZy5lcnJvcignVGVzdCB0aHJlYWQgaHVuZzoga2lsbGluZyBhbGwg
RHVtcFJlbmRlclRyZWVzJykKLQotICAgICAgICBkcml2ZXIuc3RvcCgpCi0KLSAgICAgICAgaWYg
bm90IHJlc3VsdDoKLSAgICAgICAgICAgIHJlc3VsdCA9IFRlc3RSZXN1bHQodGVzdF9pbnB1dC5m
aWxlbmFtZSwgZmFpbHVyZXM9W10sCi0gICAgICAgICAgICAgICAgdGVzdF9ydW5fdGltZT0wLCB0
b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnM9MCwgdGltZV9mb3JfZGlmZnM9e30pCi0gICAgICAgIHJl
dHVybiByZXN1bHQKLQotICAgIGRlZiBfcnVuX3Rlc3RfaW5fdGhpc190aHJlYWQoc2VsZiwgdGVz
dF9pbnB1dCk6Ci0gICAgICAgICIiIlJ1biBhIHNpbmdsZSB0ZXN0IGZpbGUgdXNpbmcgYSBzaGFy
ZWQgRHVtcFJlbmRlclRyZWUgcHJvY2Vzcy4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgIHRl
c3RfaW5wdXQ6IE9iamVjdCBjb250YWluaW5nIHRoZSB0ZXN0IGZpbGVuYW1lLCB1cmkgYW5kIHRp
bWVvdXQKLQotICAgICAgICBSZXR1cm5zOiBhIFRlc3RSZXN1bHQgb2JqZWN0LgotICAgICAgICAi
IiIKLSAgICAgICAgIyBwb2xsKCkgaXMgbm90IHRocmVhZHNhZmUgYW5kIGNhbiB0aHJvdyBPU0Vy
cm9yIGR1ZSB0bzoKLSAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTczMTcx
NwotICAgICAgICBpZiBub3Qgc2VsZi5fZHJpdmVyIG9yIHNlbGYuX2RyaXZlci5wb2xsKCkgaXMg
bm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9kcml2ZXIgPSBzZWxmLl9wb3J0LmNyZWF0ZV9k
cml2ZXIoc2VsZi5fd29ya2VyX251bWJlcikKLSAgICAgICAgICAgIHNlbGYuX2RyaXZlci5zdGFy
dCgpCi0gICAgICAgIHJldHVybiBzZWxmLl9ydW4oc2VsZi5fZHJpdmVyLCB0ZXN0X2lucHV0KQor
ICAgICAgICBzZWxmLl90ZXN0X3R5cGVzID0gdGVzdF90eXBlcworICAgICAgICBzZWxmLl90ZXN0
bmFtZSA9IHBvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSh0ZXN0X2lucHV0LmZpbGVuYW1lKQog
CiAgICAgZGVmIF9leHBlY3RlZF9kcml2ZXJfb3V0cHV0KHNlbGYpOgogICAgICAgICByZXR1cm4g
RXhwZWN0ZWREcml2ZXJPdXRwdXQoc2VsZi5fcG9ydC5leHBlY3RlZF90ZXh0KHNlbGYuX2ZpbGVu
YW1lKSwKQEAgLTE2OCwxMSArNzQsNyBAQCBjbGFzcyBTaW5nbGVUZXN0UnVubmVyOgogICAgICAg
ICByZXR1cm4gKHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMgYW5kCiAgICAgICAgICAgICAgICAg
bm90IChzZWxmLl9vcHRpb25zLm5ld19iYXNlbGluZSBvciBzZWxmLl9vcHRpb25zLnJlc2V0X3Jl
c3VsdHMpKQogCi0gICAgZGVmIF9kcml2ZXJfaW5wdXQoc2VsZiwgdGVzdF9pbnB1dCk6Ci0gICAg
ICAgIHNlbGYuX2ZpbGVuYW1lID0gdGVzdF9pbnB1dC5maWxlbmFtZQotICAgICAgICBzZWxmLl90
aW1lb3V0ID0gdGVzdF9pbnB1dC50aW1lb3V0Ci0gICAgICAgIHNlbGYuX3Rlc3RuYW1lID0gc2Vs
Zi5fcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3RfaW5wdXQuZmlsZW5hbWUpCi0KKyAg
ICBkZWYgX2RyaXZlcl9pbnB1dChzZWxmKToKICAgICAgICAgIyBUaGUgaW1hZ2UgaGFzaCBpcyB1
c2VkIHRvIGF2b2lkIGRvaW5nIGFuIGltYWdlIGR1bXAgaWYgdGhlCiAgICAgICAgICMgY2hlY2tz
dW1zIG1hdGNoLCBzbyBpdCBzaG91bGQgYmUgc2V0IHRvIGEgYmxhbmsgdmFsdWUgaWYgd2UKICAg
ICAgICAgIyBhcmUgZ2VuZXJhdGluZyBhIG5ldyBiYXNlbGluZS4gIChPdGhlcndpc2UsIGFuIGlt
YWdlIGZyb20gYQpAQCAtMTgyLDggKzg0LDggQEAgY2xhc3MgU2luZ2xlVGVzdFJ1bm5lcjoKICAg
ICAgICAgICAgIGltYWdlX2hhc2ggPSBzZWxmLl9wb3J0LmV4cGVjdGVkX2NoZWNrc3VtKHNlbGYu
X2ZpbGVuYW1lKQogICAgICAgICByZXR1cm4gYmFzZS5Ecml2ZXJJbnB1dChzZWxmLl9maWxlbmFt
ZSwgc2VsZi5fdGltZW91dCwgaW1hZ2VfaGFzaCkKIAotICAgIGRlZiBfcnVuKHNlbGYsIGRyaXZl
ciwgdGVzdF9pbnB1dCk6Ci0gICAgICAgIGRyaXZlcl9vdXRwdXQgPSBzZWxmLl9kcml2ZXIucnVu
X3Rlc3Qoc2VsZi5fZHJpdmVyX2lucHV0KHRlc3RfaW5wdXQpKQorICAgIGRlZiBydW4oc2VsZik6
CisgICAgICAgIGRyaXZlcl9vdXRwdXQgPSBzZWxmLl9kcml2ZXIucnVuX3Rlc3Qoc2VsZi5fZHJp
dmVyX2lucHV0KCkpCiAgICAgICAgIHJldHVybiBzZWxmLl9wcm9jZXNzX291dHB1dChkcml2ZXJf
b3V0cHV0KQogCiAgICAgZGVmIF9wcm9jZXNzX291dHB1dChzZWxmLCBkcml2ZXJfb3V0cHV0KToK
QEAgLTIzNCwyOSArMTM2LDMgQEAgY2xhc3MgU2luZ2xlVGVzdFJ1bm5lcjoKICAgICAgICAgdG90
YWxfdGltZV9mb3JfYWxsX2RpZmZzID0gdGltZS50aW1lKCkgLSBzdGFydF9kaWZmX3RpbWUKICAg
ICAgICAgcmV0dXJuIFRlc3RSZXN1bHQoc2VsZi5fZmlsZW5hbWUsIGZhaWx1cmVzLCBkcml2ZXJf
b3V0cHV0LnRlc3RfdGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfdGltZV9m
b3JfYWxsX2RpZmZzLCB0aW1lX2Zvcl9kaWZmcykKLQotICAgIGRlZiBzdGFydF9zZXJ2ZXJzX3dp
dGhfbG9jayhzZWxmKToKLSAgICAgICAgX2xvZy5kZWJ1ZygnQWNxdWlyaW5nIGh0dHAgbG9jayAu
Li4nKQotICAgICAgICBzZWxmLl9wb3J0LmFjcXVpcmVfaHR0cF9sb2NrKCkKLSAgICAgICAgX2xv
Zy5kZWJ1ZygnU3RhcnRpbmcgSFRUUCBzZXJ2ZXIgLi4uJykKLSAgICAgICAgc2VsZi5fcG9ydC5z
dGFydF9odHRwX3NlcnZlcigpCi0gICAgICAgIF9sb2cuZGVidWcoJ1N0YXJ0aW5nIFdlYlNvY2tl
dCBzZXJ2ZXIgLi4uJykKLSAgICAgICAgc2VsZi5fcG9ydC5zdGFydF93ZWJzb2NrZXRfc2VydmVy
KCkKLSAgICAgICAgc2VsZi5oYXNfaHR0cF9sb2NrID0gVHJ1ZQotCi0gICAgZGVmIHN0b3Bfc2Vy
dmVyc193aXRoX2xvY2soc2VsZik6Ci0gICAgICAgICIiIlN0b3AgdGhlIHNlcnZlcnMgYW5kIHJl
bGVhc2UgaHR0cCBsb2NrLiIiIgotICAgICAgICBpZiBzZWxmLmhhc19odHRwX2xvY2s6Ci0gICAg
ICAgICAgICBfbG9nLmRlYnVnKCdTdG9wcGluZyBIVFRQIHNlcnZlciAuLi4nKQotICAgICAgICAg
ICAgc2VsZi5fcG9ydC5zdG9wX2h0dHBfc2VydmVyKCkKLSAgICAgICAgICAgIF9sb2cuZGVidWco
J1N0b3BwaW5nIFdlYlNvY2tldCBzZXJ2ZXIgLi4uJykKLSAgICAgICAgICAgIHNlbGYuX3BvcnQu
c3RvcF93ZWJzb2NrZXRfc2VydmVyKCkKLSAgICAgICAgICAgIF9sb2cuZGVidWcoJ1JlbGVhc2lu
ZyBzZXJ2ZXIgbG9jayAuLi4nKQotICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxlYXNlX2h0dHBf
bG9jaygpCi0gICAgICAgICAgICBzZWxmLmhhc19odHRwX2xvY2sgPSBGYWxzZQotCi0gICAgZGVm
IGtpbGxfZHVtcF9yZW5kZXJfdHJlZShzZWxmKToKLSAgICAgICAgIiIiS2lsbCB0aGUgRHVtcFJl
bmRlclRyZWUgcHJvY2VzcyBpZiBpdCdzIHJ1bm5pbmcuIiIiCi0gICAgICAgIGlmIHNlbGYuX2Ry
aXZlcjoKLSAgICAgICAgICAgIHNlbGYuX2RyaXZlci5zdG9wKCkKLSAgICAgICAgICAgIHNlbGYu
X2RyaXZlciA9IE5vbmUKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtlcl9taXhpbi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtlcl9taXhpbi5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44NmIyMGM2ODNjNzFhYjYwNmQ5YjZlZTBhOTMwNWI2ZTRiYzk0ZGEzCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2th
Z2Uvd29ya2VyX21peGluLnB5CkBAIC0wLDAgKzEsMjEyIEBACisjIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
aW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1l
CisKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnRlc3RfdHlwZXMgaW1wb3J0IHRleHRfZGlm
ZgorZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBlcyBpbXBvcnQgaW1hZ2VfZGlm
ZgorCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZSBpbXBvcnQgc2lu
Z2xlX3Rlc3RfcnVubmVyCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2Fn
ZSBpbXBvcnQgdGVzdF9yZXN1bHRzCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVf
XykKKworCitjbGFzcyBXb3JrZXJNaXhpbihvYmplY3QpOgorICAgICIiIlRoaXMgY2xhc3MgaG9s
ZHMgbG9naWMgY29tbW9uIHRvIFdvcmtlciBhbmQgVGVzdFNoZWxsVGhyZWFkIHRoYXQKKyAgICBk
b2Vzbid0IGRpcmVjdGx5IGhhdmUgdG8gZG8gd2l0aCBydW5uaW5nIHRoZSB0ZXN0cyAod2hpY2gg
aXMKKyAgICBTaW5nbGVUZXN0UnVubmVyJ3MgcmVzcG9uc2liaWxpdHkuIFRoaXMgY2xhc3MgY2Fu
bm90IHN0YW5kIG9uIGl0cyBvd24uIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAg
ICBhc3NlcnQgRmFsc2UsICJXb3JrZXJNaXhpbiBjYW4ndCBiZSBkaXJlY3RseSBpbnN0YW50aWF0
ZWQiCisKKyAgICBkZWYgZGVmZXJyZWRfaW5pdChzZWxmLCBwb3J0KToKKyAgICAgICAgc2VsZi5f
cG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IHBvcnQuX2ZpbGVzeXN0ZW0K
KyAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisgICAgICAgIHNlbGYuX2JhdGNoX3NpemUg
PSBzZWxmLl9vcHRpb25zLmJhdGNoX3NpemUKKyAgICAgICAgc2VsZi5fdGVzdF90eXBlcyA9IFtd
CisgICAgICAgIHNlbGYuX2RyaXZlciA9IE5vbmUKKyAgICAgICAgc2VsZi5faGFzX2h0dHBfbG9j
ayA9IEZhbHNlCisgICAgICAgIGZvciBjbHMgaW4gc2VsZi5fZ2V0X3Rlc3RfdHlwZV9jbGFzc2Vz
KCk6CisgICAgICAgICAgICBzZWxmLl90ZXN0X3R5cGVzLmFwcGVuZChjbHMoc2VsZi5fcG9ydCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLnJl
c3VsdHNfZGlyZWN0b3J5KSkKKyAgICAgICAgdGVzdHNfcnVuX2ZpbGVuYW1lID0gc2VsZi5fZmls
ZXN5c3RlbS5qb2luKHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdHNfcnVuJWQudHh0
IiAlIHNlbGYuX3dvcmtlcl9udW1iZXIpCisgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlID0g
c2VsZi5fZmlsZXN5c3RlbS5vcGVuX3RleHRfZmlsZV9mb3Jfd3JpdGluZyh0ZXN0c19ydW5fZmls
ZW5hbWUpCisKKyAgICBkZWYgX2dldF90ZXN0X3R5cGVfY2xhc3NlcyhzZWxmKToKKyAgICAgICAg
Y2xhc3NlcyA9IFt0ZXh0X2RpZmYuVGVzdFRleHREaWZmXQorICAgICAgICBpZiBzZWxmLl9vcHRp
b25zLnBpeGVsX3Rlc3RzOgorICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoaW1hZ2VfZGlmZi5J
bWFnZURpZmYpCisgICAgICAgIHJldHVybiBjbGFzc2VzCisKKyAgICBkZWYgY2xlYW51cChzZWxm
KToKKyAgICAgICAgaWYgc2VsZi5fZHJpdmVyOgorICAgICAgICAgICAgc2VsZi5raWxsX2RyaXZl
cigpCisgICAgICAgIGlmIHNlbGYuX2hhc19odHRwX2xvY2s6CisgICAgICAgICAgICBzZWxmLnN0
b3Bfc2VydmVyc193aXRoX2xvY2soKQorICAgICAgICBpZiBzZWxmLl90ZXN0c19ydW5fZmlsZToK
KyAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLmNsb3NlKCkKKyAgICAgICAgICAgIHNl
bGYuX3Rlc3RzX3J1bl9maWxlID0gTm9uZQorCisgICAgZGVmIHRpbWVvdXQoc2VsZiwgdGVzdF9p
bnB1dCk6CisgICAgICAgICIiIkNvbXB1dGUgdGhlIGFwcHJvcHJpYXRlIHRpbWVvdXQgdmFsdWUg
Zm9yIGEgdGVzdC4iIiIKKyAgICAgICAgIyBUaGUgRHVtcFJlbmRlclRyZWUgd2F0Y2hkb2cgdXNl
cyAyLjV4IHRoZSB0aW1lb3V0OyB3ZSB3YW50IHRvIGJlCisgICAgICAgICMgbGFyZ2VyIHRoYW4g
dGhhdC4gV2UgYWxzbyBhZGQgYSBsaXR0bGUgbW9yZSBwYWRkaW5nIGlmIHdlJ3JlCisgICAgICAg
ICMgcnVubmluZyB0ZXN0cyBpbiBhIHNlcGFyYXRlIHRocmVhZC4KKyAgICAgICAgIworICAgICAg
ICAjIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGNvbnZlcnQgdGhlIHRlc3QgdGltZW91dCBmcm9tIGEK
KyAgICAgICAgIyBzdHJpbmcgdmFsdWUgaW4gbWlsbGlzZWNvbmRzIHRvIGEgZmxvYXQgZm9yIFB5
dGhvbi4KKyAgICAgICAgZHJpdmVyX3RpbWVvdXRfc2VjID0gMy4wICogZmxvYXQodGVzdF9pbnB1
dC50aW1lb3V0KSAvIDEwMDAuMAorICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5ydW5fc2lu
Z2x5OgorICAgICAgICAgICAgcmV0dXJuIGRyaXZlcl90aW1lb3V0X3NlYworCisgICAgICAgIHRo
cmVhZF9wYWRkaW5nX3NlYyA9IDEuMAorICAgICAgICB0aHJlYWRfdGltZW91dF9zZWMgPSBkcml2
ZXJfdGltZW91dF9zZWMgKyB0aHJlYWRfcGFkZGluZ19zZWMKKyAgICAgICAgcmV0dXJuIHRocmVh
ZF90aW1lb3V0X3NlYworCisgICAgZGVmIHN0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKHNlbGYpOgor
ICAgICAgICBfbG9nLmRlYnVnKCdBY3F1aXJpbmcgaHR0cCBsb2NrIC4uLicpCisgICAgICAgIHNl
bGYuX3BvcnQuYWNxdWlyZV9odHRwX2xvY2soKQorICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGlu
ZyBIVFRQIHNlcnZlciAuLi4nKQorICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2VydmVy
KCkKKyAgICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQor
ICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQorICAgICAgICBzZWxm
Ll9oYXNfaHR0cF9sb2NrID0gVHJ1ZQorCisgICAgZGVmIHN0b3Bfc2VydmVyc193aXRoX2xvY2so
c2VsZik6CisgICAgICAgIGlmIHNlbGYuX2hhc19odHRwX2xvY2s6CisgICAgICAgICAgICBfbG9n
LmRlYnVnKCdTdG9wcGluZyBIVFRQIHNlcnZlciAuLi4nKQorICAgICAgICAgICAgc2VsZi5fcG9y
dC5zdG9wX2h0dHBfc2VydmVyKCkKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ1N0b3BwaW5nIFdl
YlNvY2tldCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF93ZWJzb2Nr
ZXRfc2VydmVyKCkKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ1JlbGVhc2luZyBzZXJ2ZXIgbG9j
ayAuLi4nKQorICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxlYXNlX2h0dHBfbG9jaygpCisgICAg
ICAgICAgICBzZWxmLmhhc19odHRwX2xvY2sgPSBGYWxzZQorCisgICAgZGVmIGtpbGxfZHJpdmVy
KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9kcml2ZXI6CisgICAgICAgICAgICBzZWxmLl9kcml2
ZXIuc3RvcCgpCisgICAgICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCisKKyAgICBkZWYgcnVu
X3Rlc3Rfd2l0aF90aW1lb3V0KHNlbGYsIHRlc3RfaW5wdXQsIHRpbWVvdXQpOgorICAgICAgICBp
ZiBzZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcnVu
X3Rlc3RfaW5fYW5vdGhlcl90aHJlYWQodGVzdF9pbnB1dCwgdGltZW91dCkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9ydW5fdGVzdF9pbl90aGlzX3RocmVhZCh0ZXN0
X2lucHV0KQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgY2xlYW5fdXBfYWZ0ZXJf
dGVzdChzZWxmLCB0ZXN0X2lucHV0LCByZXN1bHQpOgorICAgICAgICBzZWxmLl9iYXRjaF9jb3Vu
dCArPSAxCisgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLndyaXRlKHRlc3RfaW5wdXQuZmls
ZW5hbWUgKyAiXG4iKQorICAgICAgICB0ZXN0X25hbWUgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rl
c3RfZmlsZW5hbWUodGVzdF9pbnB1dC5maWxlbmFtZSkKKworICAgICAgICBpZiByZXN1bHQuZmFp
bHVyZXM6CisgICAgICAgICAgICAjIENoZWNrIGFuZCBraWxsIER1bXBSZW5kZXJUcmVlIGlmIHdl
IG5lZWQgdG8uCisgICAgICAgICAgICBpZiBhbnkoW2Yuc2hvdWxkX2tpbGxfZHVtcF9yZW5kZXJf
dHJlZSgpIGZvciBmIGluIHJlc3VsdC5mYWlsdXJlc10pOgorICAgICAgICAgICAgICAgIHNlbGYu
a2lsbF9kcml2ZXIoKQorICAgICAgICAgICAgICAgICMgUmVzZXQgdGhlIGJhdGNoIGNvdW50IHNp
bmNlIHRoZSBzaGVsbCBqdXN0IGJvdW5jZWQuCisgICAgICAgICAgICAgICAgc2VsZi5fYmF0Y2hf
Y291bnQgPSAwCisKKyAgICAgICAgICAgICMgUHJpbnQgdGhlIGVycm9yIG1lc3NhZ2UocykuCisg
ICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBmYWlsZWQ6IiAlIChzZWxmLl9uYW1lLCB0ZXN0
X25hbWUpKQorICAgICAgICAgICAgZm9yIGYgaW4gcmVzdWx0LmZhaWx1cmVzOgorICAgICAgICAg
ICAgICAgIF9sb2cuZGVidWcoIiVzICAlcyIgJSAoc2VsZi5fbmFtZSwgZi5tZXNzYWdlKCkpKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgcGFzc2VkIiAlIChz
ZWxmLl9uYW1lLCB0ZXN0X25hbWUpKQorCisgICAgICAgIGlmIHNlbGYuX2JhdGNoX3NpemUgPiAw
IGFuZCBzZWxmLl9iYXRjaF9jb3VudCA+PSBzZWxmLl9iYXRjaF9zaXplOgorICAgICAgICAgICAg
IyBCb3VuY2UgdGhlIHNoZWxsIGFuZCByZXNldCBjb3VudC4KKyAgICAgICAgICAgIHNlbGYua2ls
bF9kcml2ZXIoKQorICAgICAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisKKyAgICBkZWYg
X3J1bl90ZXN0X2luX2Fub3RoZXJfdGhyZWFkKHNlbGYsIHRlc3RfaW5wdXQsIHRocmVhZF90aW1l
b3V0X3NlYyk6CisgICAgICAgICIiIlJ1biBhIHRlc3QgaW4gYSBzZXBhcmF0ZSB0aHJlYWQsIGVu
Zm9yY2luZyBhIGhhcmQgdGltZSBsaW1pdC4KKworICAgICAgICBTaW5jZSB3ZSBjYW4gb25seSBk
ZXRlY3QgdGhlIHRlcm1pbmF0aW9uIG9mIGEgdGhyZWFkLCBub3QgYW55IGludGVybmFsCisgICAg
ICAgIHN0YXRlIG9yIHByb2dyZXNzLCB3ZSBjYW4gb25seSBydW4gcGVyLXRlc3QgdGltZW91dHMg
d2hlbiBydW5uaW5nIHRlc3QKKyAgICAgICAgZmlsZXMgc2luZ2x5LgorCisgICAgICAgIEFyZ3M6
CisgICAgICAgICAgdGVzdF9pbnB1dDogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5h
bWUgYW5kIHRpbWVvdXQKKyAgICAgICAgICB0aHJlYWRfdGltZW91dF9zZWM6IHRpbWUgdG8gd2Fp
dCBiZWZvcmUga2lsbGluZyB0aGUgZHJpdmVyIHByb2Nlc3MuCisgICAgICAgIFJldHVybnM6Cisg
ICAgICAgICAgQSBUZXN0UmVzdWx0CisgICAgICAgICIiIgorICAgICAgICB3b3JrZXIgPSBzZWxm
CisgICAgICAgIHJlc3VsdCA9IE5vbmUKKworICAgICAgICBkcml2ZXIgPSB3b3JrZXIuX3BvcnQu
Y3JlYXRlX2RyaXZlcih3b3JrZXIuX3dvcmtlcl9udW1iZXIpCisgICAgICAgIGRyaXZlci5zdGFy
dCgpCisKKyAgICAgICAgY2xhc3MgU2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToK
KyAgICAgICAgICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gd29y
a2VyLl9ydW5fc2luZ2xlX3Rlc3QoZHJpdmVyLCB0ZXN0X2lucHV0KQorCisgICAgICAgIHRocmVh
ZCA9IFNpbmdsZVRlc3RUaHJlYWQoKQorICAgICAgICB0aHJlYWQuc3RhcnQoKQorICAgICAgICB0
aHJlYWQuam9pbih0aHJlYWRfdGltZW91dF9zZWMpCisgICAgICAgIGlmIHRocmVhZC5pc0FsaXZl
KCk6CisgICAgICAgICAgICAjIElmIGpvaW4oKSByZXR1cm5lZCB3aXRoIHRoZSB0aHJlYWQgc3Rp
bGwgcnVubmluZywgdGhlCisgICAgICAgICAgICAjIER1bXBSZW5kZXJUcmVlIGlzIGNvbXBsZXRl
bHkgaHVuZyBhbmQgdGhlcmUncyBub3RoaW5nCisgICAgICAgICAgICAjIG1vcmUgd2UgY2FuIGRv
IHdpdGggaXQuICBXZSBoYXZlIHRvIGtpbGwgYWxsIHRoZQorICAgICAgICAgICAgIyBEdW1wUmVu
ZGVyVHJlZXMgdG8gZnJlZSBpdCB1cC4gSWYgd2UncmUgcnVubmluZyBtb3JlIHRoYW4KKyAgICAg
ICAgICAgICMgb25lIER1bXBSZW5kZXJUcmVlIHRocmVhZCwgd2UnbGwgZW5kIHVwIGtpbGxpbmcg
dGhlIG90aGVyCisgICAgICAgICAgICAjIER1bXBSZW5kZXJUcmVlcyB0b28sIGludHJvZHVjaW5n
IHNwdXJpb3VzIGNyYXNoZXMuIFdlIGFjY2VwdAorICAgICAgICAgICAgIyB0aGF0IHRyYWRlb2Zm
IGluIG9yZGVyIHRvIGF2b2lkIGxvc2luZyB0aGUgcmVzdCBvZiB0aGlzCisgICAgICAgICAgICAj
IHRocmVhZCdzIHJlc3VsdHMuCisgICAgICAgICAgICBfbG9nLmVycm9yKCdUZXN0IHRocmVhZCBo
dW5nOiBraWxsaW5nIGFsbCBEdW1wUmVuZGVyVHJlZXMnKQorCisgICAgICAgIGRyaXZlci5zdG9w
KCkKKworICAgICAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9y
ZXN1bHRzLlRlc3RSZXN1bHQodGVzdF9pbnB1dC5maWxlbmFtZSwgZmFpbHVyZXM9W10sCisgICAg
ICAgICAgICAgICAgdGVzdF9ydW5fdGltZT0wLCB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnM9MCwg
dGltZV9mb3JfZGlmZnM9e30pCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfcnVu
X3Rlc3RfaW5fdGhpc190aHJlYWQoc2VsZiwgdGVzdF9pbnB1dCk6CisgICAgICAgICIiIlJ1biBh
IHNpbmdsZSB0ZXN0IGZpbGUgdXNpbmcgYSBzaGFyZWQgRHVtcFJlbmRlclRyZWUgcHJvY2Vzcy4K
KworICAgICAgICBBcmdzOgorICAgICAgICAgIHRlc3RfaW5wdXQ6IE9iamVjdCBjb250YWluaW5n
IHRoZSB0ZXN0IGZpbGVuYW1lLCB1cmkgYW5kIHRpbWVvdXQKKworICAgICAgICBSZXR1cm5zOiBh
IFRlc3RSZXN1bHQgb2JqZWN0LgorICAgICAgICAiIiIKKyAgICAgICAgIyBwb2xsKCkgaXMgbm90
IHRocmVhZHNhZmUgYW5kIGNhbiB0aHJvdyBPU0Vycm9yIGR1ZSB0bzoKKyAgICAgICAgIyBodHRw
Oi8vYnVncy5weXRob24ub3JnL2lzc3VlMTczMTcxNworICAgICAgICBpZiBub3Qgc2VsZi5fZHJp
dmVyIG9yIHNlbGYuX2RyaXZlci5wb2xsKCkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxm
Ll9kcml2ZXIgPSBzZWxmLl9wb3J0LmNyZWF0ZV9kcml2ZXIoc2VsZi5fd29ya2VyX251bWJlcikK
KyAgICAgICAgICAgIHNlbGYuX2RyaXZlci5zdGFydCgpCisgICAgICAgIHJldHVybiBzZWxmLl9y
dW5fc2luZ2xlX3Rlc3Qoc2VsZi5fZHJpdmVyLCB0ZXN0X2lucHV0KQorCisgICAgZGVmIF9ydW5f
c2luZ2xlX3Rlc3Qoc2VsZiwgZHJpdmVyLCB0ZXN0X2lucHV0KToKKyAgICAgICAgcmV0dXJuIHNp
bmdsZV90ZXN0X3J1bm5lci5ydW5fc2luZ2xlX3Rlc3Qoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9u
cywKKyAgICAgICAgICAgIHRlc3RfaW5wdXQsIGRyaXZlciwgc2VsZi5fbmFtZSwgc2VsZi5fdGVz
dF90eXBlcykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82220</attachid>
            <date>2011-02-11 18:33:30 -0800</date>
            <delta_ts>2011-02-14 14:02:32 -0800</delta_ts>
            <desc>merge in changes from 54070, 54071, 54072, 54074, feedback from mihaip</desc>
            <filename>bug-54079-20110211183329.patch</filename>
            <type>text/plain</type>
            <size>26343</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxMzRk
M2MzZmVmNGEyZDQzMDlkMDdhMTY0Yjc2YzhkODQwZTA0ZTJjLi5hMjExNWM1ZDQ4N2U5OTk1NWQ3
NTA1OWVlZjQzZTZhYjA3ZmVmM2E0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjIgQEAKIDIwMTEtMDItMTEgIERpcmsgUHJhbmtl
ICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBzaHVmZmxlcyBjb2RlIG91dCBvZiBkdW1wX3Jl
bmRlcl90cmVlX3RocmVhZCBhbmQKKyAgICAgICAgc2luZ2xlX3Rlc3RfcnVubmVyIGFuZCBpbnRv
IGEgbmV3IHdvcmtlcl9taXhpbiBjbGFzcyB0aGF0IHdpbGwKKyAgICAgICAgYmUgc2hhcmVkIGJ5
IGJvdGggVGVzdFNoZWxsVGhyZWFkIGFuZCBXb3JrZXIuIFRoaXMgY2hhbmdlCisgICAgICAgIHJl
c3RvcmVzIHNpbmdsZV90ZXN0X3J1bm5lciB0byBpdHMgc3RhdGUgYXMgb2Ygcjc3NjA2IC0gaXQg
aXMKKyAgICAgICAgc3RhdGVsZXNzIGFnYWluLiBJdCBhbHNvIHBydW5lcyBUZXN0U2hlbGxUaHJl
YWQgdG8gcHJldHR5IG11Y2gKKyAgICAgICAganVzdCB0aGUgbG9naWMgdXNlZCBmb3IgdGhlIG9y
aWdpbmFsIHNoYXJlZC1tZW1vcnkgYWNjZXNzLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NDA3OQorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uv
c2luZ2xlX3Rlc3RfcnVubmVyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2xheW91dF9wYWNrYWdlL3dvcmtlcl9taXhpbi5weTogQWRkZWQuCisKKzIwMTEtMDIt
MTEgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgUmV2aWV3
ZWQgYnkgT2phbiBWYWZhaS4KIAogICAgICAgICBUaGlzIHBhdGNoIHVwZGF0ZXMgTlJXVCB0byBh
ZGQgcGVyLXdvcmtlciBhbmQgcGVyLXNoYXJkIHRlc3Qgc3RhdHMKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL2R1bXBfcmVuZGVy
X3RyZWVfdGhyZWFkLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5
b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkKaW5kZXggN2RkZDdiMGY5YWMx
OGJhNDgwNWM4ZDQwOTE4ZWRhYTc4M2JkODgxNS4uODNiMjIxNTBlOTNlZTY3OWU0NDg2MTU4MDM3
M2RhZDFhMjVmYjFhNCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5k
ZXJfdHJlZV90aHJlYWQucHkKQEAgLTQwLDEzICs0MCwxMyBAQCBpbXBvcnQgdGhyZWFkCiBpbXBv
cnQgdGhyZWFkaW5nCiBpbXBvcnQgdGltZQogCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5s
YXlvdXRfcGFja2FnZS5zaW5nbGVfdGVzdF9ydW5uZXIgaW1wb3J0IFNpbmdsZVRlc3RSdW5uZXIK
K2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCB3b3JrZXJf
bWl4aW4KIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMu
bGF5b3V0X3BhY2thZ2UuIgogICAgICAgICAgICAgICAgICAgICAgICAgICJkdW1wX3JlbmRlcl90
cmVlX3RocmVhZCIpCiAKIAotY2xhc3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJlYWQp
OgorY2xhc3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJlYWQsIHdvcmtlcl9taXhpbi5X
b3JrZXJNaXhpbik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHdvcmtl
cl9udW1iZXIsIHdvcmtlcl9uYW1lLAogICAgICAgICAgICAgICAgICBmaWxlbmFtZV9saXN0X3F1
ZXVlLCByZXN1bHRfcXVldWUpOgogICAgICAgICAiIiJJbml0aWFsaXplIGFsbCB0aGUgbG9jYWwg
c3RhdGUgZm9yIHRoaXMgRHVtcFJlbmRlclRyZWUgdGhyZWFkLgpAQCAtMTMwLDYgKzEzMCw3IEBA
IGNsYXNzIFRlc3RTaGVsbFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICBkZWYgcnVuKHNl
bGYpOgogICAgICAgICAiIiJEZWxlZ2F0ZSBtYWluIHdvcmsgdG8gYSBoZWxwZXIgbWV0aG9kIGFu
ZCB3YXRjaCBmb3IgdW5jYXVnaHQKICAgICAgICAgZXhjZXB0aW9ucy4iIiIKKwogICAgICAgICBz
ZWxmLl9jb3ZlcmVkX3J1bigpCiAKICAgICBkZWYgX2NvdmVyZWRfcnVuKHNlbGYpOgpAQCAtMTc1
LDIzICsxNzYsMTYgQEAgY2xhc3MgVGVzdFNoZWxsVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgog
CiAgICAgICAgIElmIHRlc3RfcnVubmVyIGlzIG5vdCBOb25lLCB0aGVuIHdlIGNhbGwgdGVzdF9y
dW5uZXIuVXBkYXRlU3VtbWFyeSgpCiAgICAgICAgIHdpdGggdGhlIHJlc3VsdHMgb2YgZWFjaCB0
ZXN0LiIiIgotICAgICAgICBzaW5nbGVfdGVzdF9ydW5uZXIgPSBTaW5nbGVUZXN0UnVubmVyKHNl
bGYuX29wdGlvbnMsIHNlbGYuX3BvcnQsCi0gICAgICAgICAgICBzZWxmLl9uYW1lLCBzZWxmLl93
b3JrZXJfbnVtYmVyKQotCi0gICAgICAgIGJhdGNoX3NpemUgPSBzZWxmLl9vcHRpb25zLmJhdGNo
X3NpemUKLSAgICAgICAgYmF0Y2hfY291bnQgPSAwCiAKLSAgICAgICAgIyBBcHBlbmQgdGVzdHMg
d2UncmUgcnVubmluZyB0byB0aGUgZXhpc3RpbmcgdGVzdHNfcnVuLnR4dCBmaWxlLgotICAgICAg
ICAjIFRoaXMgaXMgY3JlYXRlZCBpbiBydW5fd2Via2l0X3Rlc3RzLnB5Ol9QcmVwYXJlTGlzdHNB
bmRQcmludE91dHB1dC4KLSAgICAgICAgdGVzdHNfcnVuX2ZpbGVuYW1lID0gc2VsZi5fcG9ydC5f
ZmlsZXN5c3RlbS5qb2luKHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdHNf
cnVuJWQudHh0IiAlIHNlbGYuX3dvcmtlcl9udW1iZXIpCi0gICAgICAgIHRlc3RzX3J1bl9maWxl
ID0gc2VsZi5fcG9ydC5fZmlsZXN5c3RlbS5vcGVuX3RleHRfZmlsZV9mb3Jfd3JpdGluZyh0ZXN0
c19ydW5fZmlsZW5hbWUsIGFwcGVuZD1GYWxzZSkKKyAgICAgICAgIyBJbml0aWFsaXplIHRoZSBy
ZWFsIHN0YXRlIG9mIHRoZSBXb3JrZXJNaXhpbiBub3cgdGhhdCB3ZSdyZSBleGVjdXRpbmcKKyAg
ICAgICAgIyBpbiB0aGUgY2hpbGQgdGhyZWFkLiBUZWNobmljYWxseSwgd2UgY291bGQgaGF2ZSBj
YWxsZWQgdGhpcyBkdXJpbmcKKyAgICAgICAgIyBfX2luaXRfXygpLCBidXQgd2Ugd2FpdCB1bnRp
bCBub3cgdG8gbWF0Y2ggV29ya2VyLnJ1bigpLgorICAgICAgICBzZWxmLnNhZmVfaW5pdChzZWxm
Ll9wb3J0KQogCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICBpZiBzZWxmLl9jYW5j
ZWxlZDoKICAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCdUZXN0aW5nIGNhbmNlbGxlZCcpCi0g
ICAgICAgICAgICAgICAgdGVzdHNfcnVuX2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAgICAgIHNp
bmdsZV90ZXN0X3J1bm5lci5jbGVhbnVwKCkKKyAgICAgICAgICAgICAgICBzZWxmLmNsZWFudXAo
KQogICAgICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgICAgICBpZiBsZW4oc2VsZi5fZmls
ZW5hbWVfbGlzdCkgaXMgMDoKQEAgLTIwNCwxNiArMTk4LDE1IEBAIGNsYXNzIFRlc3RTaGVsbFRo
cmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVu
dF9ncm91cCwgc2VsZi5fZmlsZW5hbWVfbGlzdCA9IFwKICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX2ZpbGVuYW1lX2xpc3RfcXVldWUuZ2V0X25vd2FpdCgpCiAgICAgICAgICAgICAgICAg
ZXhjZXB0IFF1ZXVlLkVtcHR5OgotICAgICAgICAgICAgICAgICAgICB0ZXN0c19ydW5fZmlsZS5j
bG9zZSgpCi0gICAgICAgICAgICAgICAgICAgIHNpbmdsZV90ZXN0X3J1bm5lci5jbGVhbnVwKCkK
KyAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGVhbnVwKCkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuCiAKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9jdXJyZW50X2dyb3VwID09ICJ0ZXN0
c190b19odHRwX2xvY2siOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9odHRwX2xvY2tfd2Fp
dF9iZWdpbiA9IHRpbWUudGltZSgpCi0gICAgICAgICAgICAgICAgICAgIHNpbmdsZV90ZXN0X3J1
bm5lci5zdGFydF9zZXJ2ZXJzX3dpdGhfbG9jaygpCisgICAgICAgICAgICAgICAgICAgIHNlbGYu
c3RhcnRfc2VydmVyc193aXRoX2xvY2soKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9odHRw
X2xvY2tfd2FpdF9lbmQgPSB0aW1lLnRpbWUoKQotICAgICAgICAgICAgICAgIGVsaWYgc2luZ2xl
X3Rlc3RfcnVubmVyLmhhc19odHRwX2xvY2s6Ci0gICAgICAgICAgICAgICAgICAgIHNpbmdsZV90
ZXN0X3J1bm5lci5zdG9wX3NlcnZlcnNfd2l0aF9sb2NrKCkKKyAgICAgICAgICAgICAgICBlbGlm
IHNlbGYuX2hhc19odHRwX2xvY2s6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RvcF9zZXJ2
ZXJzX3dpdGhfbG9jaygpCiAKICAgICAgICAgICAgICAgICBzZWxmLl9udW1fdGVzdHNfaW5fY3Vy
cmVudF9ncm91cCA9IGxlbihzZWxmLl9maWxlbmFtZV9saXN0KQogICAgICAgICAgICAgICAgIHNl
bGYuX2N1cnJlbnRfZ3JvdXBfc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCkBAIC0yMjEsMzMgKzIx
NCwxMyBAQCBjbGFzcyBUZXN0U2hlbGxUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgICAg
ICAgICB0ZXN0X2lucHV0ID0gc2VsZi5fZmlsZW5hbWVfbGlzdC5wb3AoKQogCiAgICAgICAgICAg
ICAjIFdlIGhhdmUgYSB1cmwsIHJ1biB0ZXN0cy4KLSAgICAgICAgICAgIGJhdGNoX2NvdW50ICs9
IDEKICAgICAgICAgICAgIHNlbGYuX251bV90ZXN0cyArPSAxCiAKLSAgICAgICAgICAgIHRpbWVv
dXQgPSBzaW5nbGVfdGVzdF9ydW5uZXIudGltZW91dCh0ZXN0X2lucHV0KQotICAgICAgICAgICAg
cmVzdWx0ID0gc2luZ2xlX3Rlc3RfcnVubmVyLnJ1bl90ZXN0KHRlc3RfaW5wdXQsIHRpbWVvdXQp
Ci0KLSAgICAgICAgICAgIHRlc3RzX3J1bl9maWxlLndyaXRlKHRlc3RfaW5wdXQuZmlsZW5hbWUg
KyAiXG4iKQotICAgICAgICAgICAgdGVzdF9uYW1lID0gc2VsZi5fcG9ydC5yZWxhdGl2ZV90ZXN0
X2ZpbGVuYW1lKHRlc3RfaW5wdXQuZmlsZW5hbWUpCi0gICAgICAgICAgICBpZiByZXN1bHQuZmFp
bHVyZXM6Ci0gICAgICAgICAgICAgICAgIyBDaGVjayBhbmQga2lsbCBEdW1wUmVuZGVyVHJlZSBp
ZiB3ZSBuZWVkIHRvLgotICAgICAgICAgICAgICAgIGlmIGFueShbZi5zaG91bGRfa2lsbF9kdW1w
X3JlbmRlcl90cmVlKCkgZm9yIGYgaW4gcmVzdWx0LmZhaWx1cmVzXSk6Ci0gICAgICAgICAgICAg
ICAgICAgIHNpbmdsZV90ZXN0X3J1bm5lci5raWxsX2R1bXBfcmVuZGVyX3RyZWUoKQotICAgICAg
ICAgICAgICAgICAgICAjIFJlc2V0IHRoZSBiYXRjaCBjb3VudCBzaW5jZSB0aGUgc2hlbGwganVz
dCBib3VuY2VkLgotICAgICAgICAgICAgICAgICAgICBiYXRjaF9jb3VudCA9IDAKLQotICAgICAg
ICAgICAgICAgICMgUHJpbnQgdGhlIGVycm9yIG1lc3NhZ2UocykuCi0gICAgICAgICAgICAgICAg
X2xvZy5kZWJ1ZygiJXMgJXMgZmFpbGVkOiIgJSAoc2VsZi5fbmFtZSwgdGVzdF9uYW1lKSkKLSAg
ICAgICAgICAgICAgICBmb3IgZiBpbiByZXN1bHQuZmFpbHVyZXM6Ci0gICAgICAgICAgICAgICAg
ICAgIF9sb2cuZGVidWcoIiVzICAlcyIgJSAoc2VsZi5fbmFtZSwgZi5tZXNzYWdlKCkpKQotICAg
ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBwYXNzZWQi
ICUgKHNlbGYuX25hbWUsIHRlc3RfbmFtZSkpCi0gICAgICAgICAgICBzZWxmLl9yZXN1bHRfcXVl
dWUucHV0KHJlc3VsdC5kdW1wcygpKQorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5ydW5fdGVz
dF93aXRoX3RpbWVvdXQodGVzdF9pbnB1dCwgc2VsZi50aW1lb3V0KHRlc3RfaW5wdXQpKQogCi0g
ICAgICAgICAgICBpZiBiYXRjaF9zaXplID4gMCBhbmQgYmF0Y2hfY291bnQgPj0gYmF0Y2hfc2l6
ZToKLSAgICAgICAgICAgICAgICAjIEJvdW5jZSB0aGUgc2hlbGwgYW5kIHJlc2V0IGNvdW50Lgot
ICAgICAgICAgICAgICAgIHNpbmdsZV90ZXN0X3J1bm5lci5raWxsX2R1bXBfcmVuZGVyX3RyZWUo
KQotICAgICAgICAgICAgICAgIGJhdGNoX2NvdW50ID0gMAorICAgICAgICAgICAgc2VsZi5jbGVh
bl91cF9hZnRlcl90ZXN0KHRlc3RfaW5wdXQsIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuX3Rl
c3RfcmVzdWx0cy5hcHBlbmQocmVzdWx0KQorICAgICAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVl
LnB1dChyZXN1bHQuZHVtcHMoKSkKIAogICAgICAgICAgICAgaWYgdGVzdF9ydW5uZXI6CiAgICAg
ICAgICAgICAgICAgdGVzdF9ydW5uZXIudXBkYXRlX3N1bW1hcnkocmVzdWx0X3N1bW1hcnkpCmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFj
a2FnZS9zaW5nbGVfdGVzdF9ydW5uZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9zaW5nbGVfdGVzdF9ydW5uZXIucHkKaW5kZXggOTZlM2Vl
NmU4MDQzM2ViMGM1MTc3YTI0N2ZhOTJiMmEzZWE4NTBkNC4uMDg2OGNiNTliYWY3YjQ5OWNmMTYy
NzY0ZWEyYWM3MzM3MDY4MTY5NSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvc2luZ2xlX3Rlc3RfcnVubmVyLnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2xheW91dF9wYWNrYWdlL3NpbmdsZV90
ZXN0X3J1bm5lci5weQpAQCAtMjgsMTQgKzI4LDkgQEAKIAogCiBpbXBvcnQgbG9nZ2luZwotaW1w
b3J0IHRocmVhZGluZwogaW1wb3J0IHRpbWUKIAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMu
cG9ydCBpbXBvcnQgYmFzZQotCi1mcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy50ZXN0X3R5cGVz
IGltcG9ydCB0ZXh0X2RpZmYKLWZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnRlc3RfdHlwZXMg
aW1wb3J0IGltYWdlX2RpZmYKLQogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMubGF5b3V0X3Bh
Y2thZ2UgaW1wb3J0IHRlc3RfZmFpbHVyZXMKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxh
eW91dF9wYWNrYWdlLnRlc3RfcmVzdWx0cyBpbXBvcnQgVGVzdFJlc3VsdAogCkBAIC00Myw2ICsz
OCwxMiBAQCBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5sYXlvdXRfcGFja2FnZS50ZXN0X3Jl
c3VsdHMgaW1wb3J0IFRlc3RSZXN1bHQKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVf
XykKIAogCitkZWYgcnVuX3NpbmdsZV90ZXN0KHBvcnQsIG9wdGlvbnMsIHRlc3RfaW5wdXQsIGRy
aXZlciwgd29ya2VyX25hbWUsIHRlc3RfdHlwZXMpOgorICAgICMgRklYTUU6IFB1bGwgdGhpcyBp
bnRvIFRlc3RTaGVsbFRocmVhZC5fcnVuKCkuCisgICAgcnVubmVyID0gU2luZ2xlVGVzdFJ1bm5l
cihvcHRpb25zLCBwb3J0LCBkcml2ZXIsIHRlc3RfaW5wdXQsIHdvcmtlcl9uYW1lLCB0ZXN0X3R5
cGVzKQorICAgIHJldHVybiBydW5uZXIucnVuKCkKKworCiBjbGFzcyBFeHBlY3RlZERyaXZlck91
dHB1dDoKICAgICAiIiJHcm91cHMgaW5mb3JtYXRpb24gYWJvdXQgYW4gZXhwZWN0ZWQgZHJpdmVy
IG91dHB1dC4iIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgdGV4dCwgaW1hZ2UsIGltYWdlX2hh
c2gpOgpAQCAtNTMsMTExICs1NCwxNSBAQCBjbGFzcyBFeHBlY3RlZERyaXZlck91dHB1dDoKIAog
Y2xhc3MgU2luZ2xlVGVzdFJ1bm5lcjoKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb25z
LCBwb3J0LCB3b3JrZXJfbmFtZSwgd29ya2VyX251bWJlcik6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIG9wdGlvbnMsIHBvcnQsIGRyaXZlciwgdGVzdF9pbnB1dCwgd29ya2VyX25hbWUsIHRlc3Rf
dHlwZXMpOgogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwogICAgICAgICBzZWxmLl9w
b3J0ID0gcG9ydAorICAgICAgICBzZWxmLl9kcml2ZXIgPSBkcml2ZXIKKyAgICAgICAgc2VsZi5f
ZmlsZW5hbWUgPSB0ZXN0X2lucHV0LmZpbGVuYW1lCisgICAgICAgIHNlbGYuX3RpbWVvdXQgPSB0
ZXN0X2lucHV0LnRpbWVvdXQKICAgICAgICAgc2VsZi5fd29ya2VyX25hbWUgPSB3b3JrZXJfbmFt
ZQotICAgICAgICBzZWxmLl93b3JrZXJfbnVtYmVyID0gd29ya2VyX251bWJlcgotICAgICAgICBz
ZWxmLl9kcml2ZXIgPSBOb25lCi0gICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMgPSBbXQotICAgICAg
ICBzZWxmLmhhc19odHRwX2xvY2sgPSBGYWxzZQotICAgICAgICBmb3IgY2xzIGluIHNlbGYuX2dl
dF90ZXN0X3R5cGVfY2xhc3NlcygpOgotICAgICAgICAgICAgc2VsZi5fdGVzdF90eXBlcy5hcHBl
bmQoY2xzKHNlbGYuX3BvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fb3B0aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSkpCi0KLSAgICBkZWYgY2xlYW51cChz
ZWxmKToKLSAgICAgICAgc2VsZi5raWxsX2R1bXBfcmVuZGVyX3RyZWUoKQotICAgICAgICBpZiBz
ZWxmLmhhc19odHRwX2xvY2s6Ci0gICAgICAgICAgICBzZWxmLnN0b3Bfc2VydmVyc193aXRoX2xv
Y2soKQotCi0gICAgZGVmIF9nZXRfdGVzdF90eXBlX2NsYXNzZXMoc2VsZik6Ci0gICAgICAgIGNs
YXNzZXMgPSBbdGV4dF9kaWZmLlRlc3RUZXh0RGlmZl0KLSAgICAgICAgaWYgc2VsZi5fb3B0aW9u
cy5waXhlbF90ZXN0czoKLSAgICAgICAgICAgIGNsYXNzZXMuYXBwZW5kKGltYWdlX2RpZmYuSW1h
Z2VEaWZmKQotICAgICAgICByZXR1cm4gY2xhc3NlcwotCi0gICAgZGVmIHRpbWVvdXQoc2VsZiwg
dGVzdF9pbnB1dCk6Ci0gICAgICAgICMgV2UgY2FsY3VsYXRlIGhvdyBsb25nIHdlIGV4cGVjdCB0
aGUgdGVzdCB0byB0YWtlLgotICAgICAgICAjCi0gICAgICAgICMgVGhlIER1bXBSZW5kZXJUcmVl
IHdhdGNoZG9nIHVzZXMgMi41eCB0aGUgdGltZW91dDsgd2Ugd2FudCB0byBiZQotICAgICAgICAj
IGxhcmdlciB0aGFuIHRoYXQuIFdlIGFsc28gYWRkIGEgbGl0dGxlIG1vcmUgcGFkZGluZyBpZiB3
ZSdyZQotICAgICAgICAjIHJ1bm5pbmcgdGVzdHMgaW4gYSBzZXBhcmF0ZSB0aHJlYWQuCi0gICAg
ICAgICMKLSAgICAgICAgIyBOb3RlIHRoYXQgd2UgbmVlZCB0byBjb252ZXJ0IHRoZSB0ZXN0IHRp
bWVvdXQgZnJvbSBhCi0gICAgICAgICMgc3RyaW5nIHZhbHVlIGluIG1pbGxpc2Vjb25kcyB0byBh
IGZsb2F0IGZvciBQeXRob24uCi0gICAgICAgIGRyaXZlcl90aW1lb3V0X3NlYyA9IDMuMCAqIGZs
b2F0KHRlc3RfaW5wdXQudGltZW91dCkgLyAxMDAwLjAKLSAgICAgICAgaWYgbm90IHNlbGYuX29w
dGlvbnMucnVuX3NpbmdseToKLSAgICAgICAgICAgIHJldHVybiBkcml2ZXJfdGltZW91dF9zZWMK
LQotICAgICAgICB0aHJlYWRfcGFkZGluZ19zZWMgPSAxLjAKLSAgICAgICAgdGhyZWFkX3RpbWVv
dXRfc2VjID0gZHJpdmVyX3RpbWVvdXRfc2VjICsgdGhyZWFkX3BhZGRpbmdfc2VjCi0gICAgICAg
IHJldHVybiB0aHJlYWRfdGltZW91dF9zZWMKLQotICAgIGRlZiBydW5fdGVzdChzZWxmLCB0ZXN0
X2lucHV0LCB0aW1lb3V0KToKLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5ydW5fc2luZ2x5Ogot
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl90ZXN0X2luX2Fub3RoZXJfdGhyZWFkKHRlc3Rf
aW5wdXQsIHRpbWVvdXQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5f
cnVuX3Rlc3RfaW5fdGhpc190aHJlYWQodGVzdF9pbnB1dCkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dAotCi0gICAgZGVmIF9ydW5fdGVzdF9pbl9hbm90aGVyX3RocmVhZChzZWxmLCB0ZXN0X2lucHV0
LCB0aHJlYWRfdGltZW91dF9zZWMpOgotICAgICAgICAiIiJSdW4gYSB0ZXN0IGluIGEgc2VwYXJh
dGUgdGhyZWFkLCBlbmZvcmNpbmcgYSBoYXJkIHRpbWUgbGltaXQuCi0KLSAgICAgICAgU2luY2Ug
d2UgY2FuIG9ubHkgZGV0ZWN0IHRoZSB0ZXJtaW5hdGlvbiBvZiBhIHRocmVhZCwgbm90IGFueSBp
bnRlcm5hbAotICAgICAgICBzdGF0ZSBvciBwcm9ncmVzcywgd2UgY2FuIG9ubHkgcnVuIHBlci10
ZXN0IHRpbWVvdXRzIHdoZW4gcnVubmluZyB0ZXN0Ci0gICAgICAgIGZpbGVzIHNpbmdseS4KLQot
ICAgICAgICBBcmdzOgotICAgICAgICAgIHRlc3RfaW5wdXQ6IE9iamVjdCBjb250YWluaW5nIHRo
ZSB0ZXN0IGZpbGVuYW1lIGFuZCB0aW1lb3V0Ci0gICAgICAgICAgdGhyZWFkX3RpbWVvdXRfc2Vj
OiB0aW1lIHRvIHdhaXQgYmVmb3JlIGtpbGxpbmcgdGhlIGRyaXZlciBwcm9jZXNzLgotICAgICAg
ICBSZXR1cm5zOgotICAgICAgICAgIEEgVGVzdFJlc3VsdAotICAgICAgICAiIiIKLSAgICAgICAg
d29ya2VyID0gc2VsZgotICAgICAgICByZXN1bHQgPSBOb25lCi0KLSAgICAgICAgZHJpdmVyID0g
d29ya2VyLl9wb3J0LmNyZWF0ZV9kcml2ZXIod29ya2VyLl93b3JrZXJfbnVtYmVyKQotICAgICAg
ICBkcml2ZXIuc3RhcnQoKQotCi0gICAgICAgIGNsYXNzIFNpbmdsZVRlc3RUaHJlYWQodGhyZWFk
aW5nLlRocmVhZCk6Ci0gICAgICAgICAgICBkZWYgcnVuKHNlbGYpOgotICAgICAgICAgICAgICAg
IHJlc3VsdCA9IHdvcmtlci5ydW4odGVzdF9pbnB1dCwgZHJpdmVyKQotCi0gICAgICAgIHRocmVh
ZCA9IFNpbmdsZVRlc3RUaHJlYWQoKQotICAgICAgICB0aHJlYWQuc3RhcnQoKQotICAgICAgICB0
aHJlYWQuam9pbih0aHJlYWRfdGltZW91dF9zZWMpCi0gICAgICAgIGlmIHRocmVhZC5pc0FsaXZl
KCk6Ci0gICAgICAgICAgICAjIElmIGpvaW4oKSByZXR1cm5lZCB3aXRoIHRoZSB0aHJlYWQgc3Rp
bGwgcnVubmluZywgdGhlCi0gICAgICAgICAgICAjIER1bXBSZW5kZXJUcmVlIGlzIGNvbXBsZXRl
bHkgaHVuZyBhbmQgdGhlcmUncyBub3RoaW5nCi0gICAgICAgICAgICAjIG1vcmUgd2UgY2FuIGRv
IHdpdGggaXQuICBXZSBoYXZlIHRvIGtpbGwgYWxsIHRoZQotICAgICAgICAgICAgIyBEdW1wUmVu
ZGVyVHJlZXMgdG8gZnJlZSBpdCB1cC4gSWYgd2UncmUgcnVubmluZyBtb3JlIHRoYW4KLSAgICAg
ICAgICAgICMgb25lIER1bXBSZW5kZXJUcmVlIHRocmVhZCwgd2UnbGwgZW5kIHVwIGtpbGxpbmcg
dGhlIG90aGVyCi0gICAgICAgICAgICAjIER1bXBSZW5kZXJUcmVlcyB0b28sIGludHJvZHVjaW5n
IHNwdXJpb3VzIGNyYXNoZXMuIFdlIGFjY2VwdAotICAgICAgICAgICAgIyB0aGF0IHRyYWRlb2Zm
IGluIG9yZGVyIHRvIGF2b2lkIGxvc2luZyB0aGUgcmVzdCBvZiB0aGlzCi0gICAgICAgICAgICAj
IHRocmVhZCdzIHJlc3VsdHMuCi0gICAgICAgICAgICBfbG9nLmVycm9yKCdUZXN0IHRocmVhZCBo
dW5nOiBraWxsaW5nIGFsbCBEdW1wUmVuZGVyVHJlZXMnKQotCi0gICAgICAgIGRyaXZlci5zdG9w
KCkKLQotICAgICAgICBpZiBub3QgcmVzdWx0OgotICAgICAgICAgICAgcmVzdWx0ID0gVGVzdFJl
c3VsdCh0ZXN0X2lucHV0LmZpbGVuYW1lLCBmYWlsdXJlcz1bXSwKLSAgICAgICAgICAgICAgICB0
ZXN0X3J1bl90aW1lPTAsIHRvdGFsX3RpbWVfZm9yX2FsbF9kaWZmcz0wLCB0aW1lX2Zvcl9kaWZm
cz17fSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0gICAgZGVmIF9ydW5fdGVzdF9pbl90aGlz
X3RocmVhZChzZWxmLCB0ZXN0X2lucHV0KToKLSAgICAgICAgIiIiUnVuIGEgc2luZ2xlIHRlc3Qg
ZmlsZSB1c2luZyBhIHNoYXJlZCBEdW1wUmVuZGVyVHJlZSBwcm9jZXNzLgotCi0gICAgICAgIEFy
Z3M6Ci0gICAgICAgICAgdGVzdF9pbnB1dDogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmls
ZW5hbWUsIHVyaSBhbmQgdGltZW91dAotCi0gICAgICAgIFJldHVybnM6IGEgVGVzdFJlc3VsdCBv
YmplY3QuCi0gICAgICAgICIiIgotICAgICAgICAjIHBvbGwoKSBpcyBub3QgdGhyZWFkc2FmZSBh
bmQgY2FuIHRocm93IE9TRXJyb3IgZHVlIHRvOgotICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhv
bi5vcmcvaXNzdWUxNzMxNzE3Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9kcml2ZXIgb3Igc2VsZi5f
ZHJpdmVyLnBvbGwoKSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX2RyaXZlciA9IHNl
bGYuX3BvcnQuY3JlYXRlX2RyaXZlcihzZWxmLl93b3JrZXJfbnVtYmVyKQotICAgICAgICAgICAg
c2VsZi5fZHJpdmVyLnN0YXJ0KCkKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bihzZWxmLl9kcml2
ZXIsIHRlc3RfaW5wdXQpCisgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMgPSB0ZXN0X3R5cGVzCisg
ICAgICAgIHNlbGYuX3Rlc3RuYW1lID0gcG9ydC5yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHRlc3Rf
aW5wdXQuZmlsZW5hbWUpCiAKICAgICBkZWYgX2V4cGVjdGVkX2RyaXZlcl9vdXRwdXQoc2VsZik6
CiAgICAgICAgIHJldHVybiBFeHBlY3RlZERyaXZlck91dHB1dChzZWxmLl9wb3J0LmV4cGVjdGVk
X3RleHQoc2VsZi5fZmlsZW5hbWUpLApAQCAtMTY4LDExICs3Myw3IEBAIGNsYXNzIFNpbmdsZVRl
c3RSdW5uZXI6CiAgICAgICAgIHJldHVybiAoc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cyBhbmQK
ICAgICAgICAgICAgICAgICBub3QgKHNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5lIG9yIHNlbGYu
X29wdGlvbnMucmVzZXRfcmVzdWx0cykpCiAKLSAgICBkZWYgX2RyaXZlcl9pbnB1dChzZWxmLCB0
ZXN0X2lucHV0KToKLSAgICAgICAgc2VsZi5fZmlsZW5hbWUgPSB0ZXN0X2lucHV0LmZpbGVuYW1l
Ci0gICAgICAgIHNlbGYuX3RpbWVvdXQgPSB0ZXN0X2lucHV0LnRpbWVvdXQKLSAgICAgICAgc2Vs
Zi5fdGVzdG5hbWUgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rlc3RfZmlsZW5hbWUodGVzdF9pbnB1
dC5maWxlbmFtZSkKLQorICAgIGRlZiBfZHJpdmVyX2lucHV0KHNlbGYpOgogICAgICAgICAjIFRo
ZSBpbWFnZSBoYXNoIGlzIHVzZWQgdG8gYXZvaWQgZG9pbmcgYW4gaW1hZ2UgZHVtcCBpZiB0aGUK
ICAgICAgICAgIyBjaGVja3N1bXMgbWF0Y2gsIHNvIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBibGFu
ayB2YWx1ZSBpZiB3ZQogICAgICAgICAjIGFyZSBnZW5lcmF0aW5nIGEgbmV3IGJhc2VsaW5lLiAg
KE90aGVyd2lzZSwgYW4gaW1hZ2UgZnJvbSBhCkBAIC0xODIsMTcgKzgzLDE3IEBAIGNsYXNzIFNp
bmdsZVRlc3RSdW5uZXI6CiAgICAgICAgICAgICBpbWFnZV9oYXNoID0gc2VsZi5fcG9ydC5leHBl
Y3RlZF9jaGVja3N1bShzZWxmLl9maWxlbmFtZSkKICAgICAgICAgcmV0dXJuIGJhc2UuRHJpdmVy
SW5wdXQoc2VsZi5fZmlsZW5hbWUsIHNlbGYuX3RpbWVvdXQsIGltYWdlX2hhc2gpCiAKLSAgICBk
ZWYgX3J1bihzZWxmLCBkcml2ZXIsIHRlc3RfaW5wdXQpOgorICAgIGRlZiBydW4oc2VsZik6CiAg
ICAgICAgIGlmIHNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5lIG9yIHNlbGYuX29wdGlvbnMucmVz
ZXRfcmVzdWx0czoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9ydW5fcmViYXNlbGluZShkcml2
ZXIsIHRlc3RfaW5wdXQpCi0gICAgICAgIHJldHVybiBzZWxmLl9ydW5fY29tcGFyZV90ZXN0KGRy
aXZlciwgdGVzdF9pbnB1dCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9ydW5fcmViYXNlbGlu
ZSgpCisgICAgICAgIHJldHVybiBzZWxmLl9ydW5fY29tcGFyZV90ZXN0KCkKIAotICAgIGRlZiBf
cnVuX2NvbXBhcmVfdGVzdChzZWxmLCBkcml2ZXIsIHRlc3RfaW5wdXQpOgotICAgICAgICBkcml2
ZXJfb3V0cHV0ID0gc2VsZi5fZHJpdmVyLnJ1bl90ZXN0KHNlbGYuX2RyaXZlcl9pbnB1dCh0ZXN0
X2lucHV0KSkKKyAgICBkZWYgX3J1bl9jb21wYXJlX3Rlc3Qoc2VsZik6CisgICAgICAgIGRyaXZl
cl9vdXRwdXQgPSBzZWxmLl9kcml2ZXIucnVuX3Rlc3Qoc2VsZi5fZHJpdmVyX2lucHV0KCkpCiAg
ICAgICAgIHJldHVybiBzZWxmLl9wcm9jZXNzX291dHB1dChkcml2ZXJfb3V0cHV0KQogCi0gICAg
ZGVmIF9ydW5fcmViYXNlbGluZShzZWxmLCBkcml2ZXIsIHRlc3RfaW5wdXQpOgotICAgICAgICBk
cml2ZXJfb3V0cHV0ID0gc2VsZi5fZHJpdmVyLnJ1bl90ZXN0KHNlbGYuX2RyaXZlcl9pbnB1dCh0
ZXN0X2lucHV0KSkKKyAgICBkZWYgX3J1bl9yZWJhc2VsaW5lKHNlbGYpOgorICAgICAgICBkcml2
ZXJfb3V0cHV0ID0gc2VsZi5fZHJpdmVyLnJ1bl90ZXN0KHNlbGYuX2RyaXZlcl9pbnB1dCgpKQog
ICAgICAgICBmYWlsdXJlcyA9IHNlbGYuX2hhbmRsZV9lcnJvcihkcml2ZXJfb3V0cHV0KQogICAg
ICAgICAjIEZJWE1FOiBJdCB0aGUgdGVzdCBjcmFzaGVkIG9yIHRpbWVkIG91dCwgaXQgbWlnaHQg
YmUgYmV0dHRlciB0byBhdm9pZAogICAgICAgICAjIHRvIHdyaXRlIG5ldyBiYXNlbGluZXMuCkBA
IC0yNTksMTAgKzE2MCw2IEBAIGNsYXNzIFNpbmdsZVRlc3RSdW5uZXI6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlcl9vdXRw
dXQuZXJyb3IpKQogICAgICAgICByZXR1cm4gZmFpbHVyZXMKIAotICAgIGRlZiBfcnVuX3Rlc3Qo
c2VsZik6Ci0gICAgICAgIGRyaXZlcl9vdXRwdXQgPSBzZWxmLl9kcml2ZXIucnVuX3Rlc3Qoc2Vs
Zi5fZHJpdmVyX2lucHV0KCkpCi0gICAgICAgIHJldHVybiBzZWxmLl9wcm9jZXNzX291dHB1dChk
cml2ZXJfb3V0cHV0KQotCiAgICAgZGVmIF9wcm9jZXNzX291dHB1dChzZWxmLCBkcml2ZXJfb3V0
cHV0KToKICAgICAgICAgIiIiUmVjZWl2ZXMgdGhlIG91dHB1dCBmcm9tIGEgRHVtcFJlbmRlclRy
ZWUgcHJvY2Vzcywgc3ViamVjdHMgaXQgdG8gYQogICAgICAgICBudW1iZXIgb2YgdGVzdHMsIGFu
ZCByZXR1cm5zIGEgbGlzdCBvZiBmYWlsdXJlIHR5cGVzIHRoZSB0ZXN0IHByb2R1Y2VkLgpAQCAt
Mjk0LDI5ICsxOTEsMyBAQCBjbGFzcyBTaW5nbGVUZXN0UnVubmVyOgogICAgICAgICB0b3RhbF90
aW1lX2Zvcl9hbGxfZGlmZnMgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X2RpZmZfdGltZQogICAgICAg
ICByZXR1cm4gVGVzdFJlc3VsdChzZWxmLl9maWxlbmFtZSwgZmFpbHVyZXMsIGRyaXZlcl9vdXRw
dXQudGVzdF90aW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbF90aW1lX2Zvcl9h
bGxfZGlmZnMsIHRpbWVfZm9yX2RpZmZzKQotCi0gICAgZGVmIHN0YXJ0X3NlcnZlcnNfd2l0aF9s
b2NrKHNlbGYpOgotICAgICAgICBfbG9nLmRlYnVnKCdBY3F1aXJpbmcgaHR0cCBsb2NrIC4uLicp
Ci0gICAgICAgIHNlbGYuX3BvcnQuYWNxdWlyZV9odHRwX2xvY2soKQotICAgICAgICBfbG9nLmRl
YnVnKCdTdGFydGluZyBIVFRQIHNlcnZlciAuLi4nKQotICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0
X2h0dHBfc2VydmVyKCkKLSAgICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRpbmcgV2ViU29ja2V0IHNl
cnZlciAuLi4nKQotICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQot
ICAgICAgICBzZWxmLmhhc19odHRwX2xvY2sgPSBUcnVlCi0KLSAgICBkZWYgc3RvcF9zZXJ2ZXJz
X3dpdGhfbG9jayhzZWxmKToKLSAgICAgICAgIiIiU3RvcCB0aGUgc2VydmVycyBhbmQgcmVsZWFz
ZSBodHRwIGxvY2suIiIiCi0gICAgICAgIGlmIHNlbGYuaGFzX2h0dHBfbG9jazoKLSAgICAgICAg
ICAgIF9sb2cuZGVidWcoJ1N0b3BwaW5nIEhUVFAgc2VydmVyIC4uLicpCi0gICAgICAgICAgICBz
ZWxmLl9wb3J0LnN0b3BfaHR0cF9zZXJ2ZXIoKQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnU3Rv
cHBpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQotICAgICAgICAgICAgc2VsZi5fcG9ydC5zdG9w
X3dlYnNvY2tldF9zZXJ2ZXIoKQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygnUmVsZWFzaW5nIHNl
cnZlciBsb2NrIC4uLicpCi0gICAgICAgICAgICBzZWxmLl9wb3J0LnJlbGVhc2VfaHR0cF9sb2Nr
KCkKLSAgICAgICAgICAgIHNlbGYuaGFzX2h0dHBfbG9jayA9IEZhbHNlCi0KLSAgICBkZWYga2ls
bF9kdW1wX3JlbmRlcl90cmVlKHNlbGYpOgotICAgICAgICAiIiJLaWxsIHRoZSBEdW1wUmVuZGVy
VHJlZSBwcm9jZXNzIGlmIGl0J3MgcnVubmluZy4iIiIKLSAgICAgICAgaWYgc2VsZi5fZHJpdmVy
OgotICAgICAgICAgICAgc2VsZi5fZHJpdmVyLnN0b3AoKQotICAgICAgICAgICAgc2VsZi5fZHJp
dmVyID0gTm9uZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyX21peGluLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvbGF5b3V0X3BhY2thZ2Uvd29ya2VyX21peGluLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjIwYmE0ZDQxMDkzYWVlZGFkYmVmNWZmZDk5NDA2YjA5Y2M1NjJlY2IKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS93
b3JrZXJfbWl4aW4ucHkKQEAgLTAsMCArMSwyMjIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgbG9nZ2luZworaW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKKwor
ZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMudGVzdF90eXBlcyBpbXBvcnQgdGV4dF9kaWZmCitm
cm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy50ZXN0X3R5cGVzIGltcG9ydCBpbWFnZV9kaWZmCisK
K2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGltcG9ydCBzaW5nbGVf
dGVzdF9ydW5uZXIKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLmxheW91dF9wYWNrYWdlIGlt
cG9ydCB0ZXN0X3Jlc3VsdHMKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQor
CisKK2NsYXNzIFdvcmtlck1peGluKG9iamVjdCk6CisgICAgIiIiVGhpcyBjbGFzcyBob2xkcyBs
b2dpYyBjb21tb24gdG8gV29ya2VyIGFuZCBUZXN0U2hlbGxUaHJlYWQgdGhhdAorICAgIGRvZXNu
J3QgZGlyZWN0bHkgaGF2ZSB0byBkbyB3aXRoIHJ1bm5pbmcgdGhlIHRlc3RzICh3aGljaCBpcwor
ICAgIFNpbmdsZVRlc3RSdW5uZXIncyByZXNwb25zaWJpbGl0eS4gVGhpcyBjbGFzcyBjYW5ub3Qg
c3RhbmQgb24gaXRzIG93bi4iIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGFz
c2VydCBGYWxzZSwgIldvcmtlck1peGluIGNhbid0IGJlIGRpcmVjdGx5IGluc3RhbnRpYXRlZCIK
KworICAgIGRlZiBzYWZlX2luaXQoc2VsZiwgcG9ydCk6CisgICAgICAgICIiIlRoaXMgbWV0aG9k
IHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIGl0IGlzIGlzIHNhZmUgZm9yIHRoZSBtaXhpbgor
ICAgICAgICB0byBjcmVhdGUgc3RhdGUgdGhhdCBjYW4ndCBiZSBQaWNrbGVkLgorCisgICAgICAg
IFRoaXMgcm91dGluZSBleGlzdHMgc28gdGhhdCB0aGUgbWl4aW4gY2FuIGJlIGNyZWF0ZWQgYW5k
IHRoZW4gbWFyc2hhbGVkCisgICAgICAgIGFjcm9zcyBpbnRvIGEgY2hpbGQgcHJvY2Vzcy4iIiIK
KyAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5fZmlsZXN5c3RlbSA9IHBv
cnQuX2ZpbGVzeXN0ZW0KKyAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisgICAgICAgIHNl
bGYuX2JhdGNoX3NpemUgPSBzZWxmLl9vcHRpb25zLmJhdGNoX3NpemUKKyAgICAgICAgc2VsZi5f
dGVzdF90eXBlcyA9IFtdCisgICAgICAgIHNlbGYuX2RyaXZlciA9IE5vbmUKKyAgICAgICAgZm9y
IGNscyBpbiBzZWxmLl9nZXRfdGVzdF90eXBlX2NsYXNzZXMoKToKKyAgICAgICAgICAgIHNlbGYu
X3Rlc3RfdHlwZXMuYXBwZW5kKGNscyhzZWxmLl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnkpKQorICAg
ICAgICB0ZXN0c19ydW5fZmlsZW5hbWUgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fb3B0
aW9ucy5yZXN1bHRzX2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJ0ZXN0c19ydW4lZC50eHQiICUgc2VsZi5fd29ya2VyX251bWJl
cikKKyAgICAgICAgc2VsZi5fdGVzdHNfcnVuX2ZpbGUgPSBzZWxmLl9maWxlc3lzdGVtLm9wZW5f
dGV4dF9maWxlX2Zvcl93cml0aW5nKHRlc3RzX3J1bl9maWxlbmFtZSkKKworICAgICAgICAjIEZJ
WE1FOiBpdCdzIGdvb2Z5IHRoYXQgd2UgaGF2ZSB0byB0cmFjayB0aGlzIGF0IGFsbCwgYnV0IGl0
J3MgZHVlIHRvCisgICAgICAgICMgdGhlIGF3a3dhcmQgbG9naWMgaW4gVGVzdFNoZWxsVGhyZWFk
Ll9ydW4oKS4gV2hlbiB3ZSByZW1vdmUgdGhhdAorICAgICAgICAjIGZpbGUsIHdlIHNob3VsZCBy
ZXdyaXRlIHRoaXMgY29kZSBzbyB0aGF0IGNhbGxlciBrZWVwcyB0cmFjayBvZiB3aGV0aGVyCisg
ICAgICAgICMgdGhlIGxvY2sgaXMgaGVsZC4KKyAgICAgICAgc2VsZi5faGFzX2h0dHBfbG9jayA9
IEZhbHNlCisKKyAgICBkZWYgX2dldF90ZXN0X3R5cGVfY2xhc3NlcyhzZWxmKToKKyAgICAgICAg
Y2xhc3NlcyA9IFt0ZXh0X2RpZmYuVGVzdFRleHREaWZmXQorICAgICAgICBpZiBzZWxmLl9vcHRp
b25zLnBpeGVsX3Rlc3RzOgorICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoaW1hZ2VfZGlmZi5J
bWFnZURpZmYpCisgICAgICAgIHJldHVybiBjbGFzc2VzCisKKyAgICBkZWYgY2xlYW51cChzZWxm
KToKKyAgICAgICAgaWYgc2VsZi5fZHJpdmVyOgorICAgICAgICAgICAgc2VsZi5raWxsX2RyaXZl
cigpCisgICAgICAgIGlmIHNlbGYuX2hhc19odHRwX2xvY2s6CisgICAgICAgICAgICBzZWxmLnN0
b3Bfc2VydmVyc193aXRoX2xvY2soKQorICAgICAgICBpZiBzZWxmLl90ZXN0c19ydW5fZmlsZToK
KyAgICAgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLmNsb3NlKCkKKyAgICAgICAgICAgIHNl
bGYuX3Rlc3RzX3J1bl9maWxlID0gTm9uZQorCisgICAgZGVmIHRpbWVvdXQoc2VsZiwgdGVzdF9p
bnB1dCk6CisgICAgICAgICIiIkNvbXB1dGUgdGhlIGFwcHJvcHJpYXRlIHRpbWVvdXQgdmFsdWUg
Zm9yIGEgdGVzdC4iIiIKKyAgICAgICAgIyBUaGUgRHVtcFJlbmRlclRyZWUgd2F0Y2hkb2cgdXNl
cyAyLjV4IHRoZSB0aW1lb3V0OyB3ZSB3YW50IHRvIGJlCisgICAgICAgICMgbGFyZ2VyIHRoYW4g
dGhhdC4gV2UgYWxzbyBhZGQgYSBsaXR0bGUgbW9yZSBwYWRkaW5nIGlmIHdlJ3JlCisgICAgICAg
ICMgcnVubmluZyB0ZXN0cyBpbiBhIHNlcGFyYXRlIHRocmVhZC4KKyAgICAgICAgIworICAgICAg
ICAjIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGNvbnZlcnQgdGhlIHRlc3QgdGltZW91dCBmcm9tIGEK
KyAgICAgICAgIyBzdHJpbmcgdmFsdWUgaW4gbWlsbGlzZWNvbmRzIHRvIGEgZmxvYXQgZm9yIFB5
dGhvbi4KKyAgICAgICAgZHJpdmVyX3RpbWVvdXRfc2VjID0gMy4wICogZmxvYXQodGVzdF9pbnB1
dC50aW1lb3V0KSAvIDEwMDAuMAorICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5ydW5fc2lu
Z2x5OgorICAgICAgICAgICAgcmV0dXJuIGRyaXZlcl90aW1lb3V0X3NlYworCisgICAgICAgIHRo
cmVhZF9wYWRkaW5nX3NlYyA9IDEuMAorICAgICAgICB0aHJlYWRfdGltZW91dF9zZWMgPSBkcml2
ZXJfdGltZW91dF9zZWMgKyB0aHJlYWRfcGFkZGluZ19zZWMKKyAgICAgICAgcmV0dXJuIHRocmVh
ZF90aW1lb3V0X3NlYworCisgICAgZGVmIHN0YXJ0X3NlcnZlcnNfd2l0aF9sb2NrKHNlbGYpOgor
ICAgICAgICBfbG9nLmRlYnVnKCdBY3F1aXJpbmcgaHR0cCBsb2NrIC4uLicpCisgICAgICAgIHNl
bGYuX3BvcnQuYWNxdWlyZV9odHRwX2xvY2soKQorICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGlu
ZyBIVFRQIHNlcnZlciAuLi4nKQorICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X2h0dHBfc2VydmVy
KCkKKyAgICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRpbmcgV2ViU29ja2V0IHNlcnZlciAuLi4nKQor
ICAgICAgICBzZWxmLl9wb3J0LnN0YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQorICAgICAgICBzZWxm
Ll9oYXNfaHR0cF9sb2NrID0gVHJ1ZQorCisgICAgZGVmIHN0b3Bfc2VydmVyc193aXRoX2xvY2so
c2VsZik6CisgICAgICAgIGlmIHNlbGYuX2hhc19odHRwX2xvY2s6CisgICAgICAgICAgICBfbG9n
LmRlYnVnKCdTdG9wcGluZyBIVFRQIHNlcnZlciAuLi4nKQorICAgICAgICAgICAgc2VsZi5fcG9y
dC5zdG9wX2h0dHBfc2VydmVyKCkKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ1N0b3BwaW5nIFdl
YlNvY2tldCBzZXJ2ZXIgLi4uJykKKyAgICAgICAgICAgIHNlbGYuX3BvcnQuc3RvcF93ZWJzb2Nr
ZXRfc2VydmVyKCkKKyAgICAgICAgICAgIF9sb2cuZGVidWcoJ1JlbGVhc2luZyBzZXJ2ZXIgbG9j
ayAuLi4nKQorICAgICAgICAgICAgc2VsZi5fcG9ydC5yZWxlYXNlX2h0dHBfbG9jaygpCisgICAg
ICAgICAgICBzZWxmLmhhc19odHRwX2xvY2sgPSBGYWxzZQorCisgICAgZGVmIGtpbGxfZHJpdmVy
KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9kcml2ZXI6CisgICAgICAgICAgICBzZWxmLl9kcml2
ZXIuc3RvcCgpCisgICAgICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCisKKyAgICBkZWYgcnVu
X3Rlc3Rfd2l0aF90aW1lb3V0KHNlbGYsIHRlc3RfaW5wdXQsIHRpbWVvdXQpOgorICAgICAgICBp
ZiBzZWxmLl9vcHRpb25zLnJ1bl9zaW5nbHk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcnVu
X3Rlc3RfaW5fYW5vdGhlcl90aHJlYWQodGVzdF9pbnB1dCwgdGltZW91dCkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9ydW5fdGVzdF9pbl90aGlzX3RocmVhZCh0ZXN0
X2lucHV0KQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgY2xlYW5fdXBfYWZ0ZXJf
dGVzdChzZWxmLCB0ZXN0X2lucHV0LCByZXN1bHQpOgorICAgICAgICBzZWxmLl9iYXRjaF9jb3Vu
dCArPSAxCisgICAgICAgIHNlbGYuX3Rlc3RzX3J1bl9maWxlLndyaXRlKHRlc3RfaW5wdXQuZmls
ZW5hbWUgKyAiXG4iKQorICAgICAgICB0ZXN0X25hbWUgPSBzZWxmLl9wb3J0LnJlbGF0aXZlX3Rl
c3RfZmlsZW5hbWUodGVzdF9pbnB1dC5maWxlbmFtZSkKKworICAgICAgICBpZiByZXN1bHQuZmFp
bHVyZXM6CisgICAgICAgICAgICAjIENoZWNrIGFuZCBraWxsIER1bXBSZW5kZXJUcmVlIGlmIHdl
IG5lZWQgdG8uCisgICAgICAgICAgICBpZiBhbnkoW2Yuc2hvdWxkX2tpbGxfZHVtcF9yZW5kZXJf
dHJlZSgpIGZvciBmIGluIHJlc3VsdC5mYWlsdXJlc10pOgorICAgICAgICAgICAgICAgIHNlbGYu
a2lsbF9kcml2ZXIoKQorICAgICAgICAgICAgICAgICMgUmVzZXQgdGhlIGJhdGNoIGNvdW50IHNp
bmNlIHRoZSBzaGVsbCBqdXN0IGJvdW5jZWQuCisgICAgICAgICAgICAgICAgc2VsZi5fYmF0Y2hf
Y291bnQgPSAwCisKKyAgICAgICAgICAgICMgUHJpbnQgdGhlIGVycm9yIG1lc3NhZ2UocykuCisg
ICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyAlcyBmYWlsZWQ6IiAlIChzZWxmLl9uYW1lLCB0ZXN0
X25hbWUpKQorICAgICAgICAgICAgZm9yIGYgaW4gcmVzdWx0LmZhaWx1cmVzOgorICAgICAgICAg
ICAgICAgIF9sb2cuZGVidWcoIiVzICAlcyIgJSAoc2VsZi5fbmFtZSwgZi5tZXNzYWdlKCkpKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgJXMgcGFzc2VkIiAlIChz
ZWxmLl9uYW1lLCB0ZXN0X25hbWUpKQorCisgICAgICAgIGlmIHNlbGYuX2JhdGNoX3NpemUgPiAw
IGFuZCBzZWxmLl9iYXRjaF9jb3VudCA+PSBzZWxmLl9iYXRjaF9zaXplOgorICAgICAgICAgICAg
IyBCb3VuY2UgdGhlIHNoZWxsIGFuZCByZXNldCBjb3VudC4KKyAgICAgICAgICAgIHNlbGYua2ls
bF9kcml2ZXIoKQorICAgICAgICAgICAgc2VsZi5fYmF0Y2hfY291bnQgPSAwCisKKyAgICBkZWYg
X3J1bl90ZXN0X2luX2Fub3RoZXJfdGhyZWFkKHNlbGYsIHRlc3RfaW5wdXQsIHRocmVhZF90aW1l
b3V0X3NlYyk6CisgICAgICAgICIiIlJ1biBhIHRlc3QgaW4gYSBzZXBhcmF0ZSB0aHJlYWQsIGVu
Zm9yY2luZyBhIGhhcmQgdGltZSBsaW1pdC4KKworICAgICAgICBTaW5jZSB3ZSBjYW4gb25seSBk
ZXRlY3QgdGhlIHRlcm1pbmF0aW9uIG9mIGEgdGhyZWFkLCBub3QgYW55IGludGVybmFsCisgICAg
ICAgIHN0YXRlIG9yIHByb2dyZXNzLCB3ZSBjYW4gb25seSBydW4gcGVyLXRlc3QgdGltZW91dHMg
d2hlbiBydW5uaW5nIHRlc3QKKyAgICAgICAgZmlsZXMgc2luZ2x5LgorCisgICAgICAgIEFyZ3M6
CisgICAgICAgICAgdGVzdF9pbnB1dDogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRlc3QgZmlsZW5h
bWUgYW5kIHRpbWVvdXQKKyAgICAgICAgICB0aHJlYWRfdGltZW91dF9zZWM6IHRpbWUgdG8gd2Fp
dCBiZWZvcmUga2lsbGluZyB0aGUgZHJpdmVyIHByb2Nlc3MuCisgICAgICAgIFJldHVybnM6Cisg
ICAgICAgICAgQSBUZXN0UmVzdWx0CisgICAgICAgICIiIgorICAgICAgICB3b3JrZXIgPSBzZWxm
CisgICAgICAgIHJlc3VsdCA9IE5vbmUKKworICAgICAgICBkcml2ZXIgPSB3b3JrZXIuX3BvcnQu
Y3JlYXRlX2RyaXZlcih3b3JrZXIuX3dvcmtlcl9udW1iZXIpCisgICAgICAgIGRyaXZlci5zdGFy
dCgpCisKKyAgICAgICAgY2xhc3MgU2luZ2xlVGVzdFRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToK
KyAgICAgICAgICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gd29y
a2VyLl9ydW5fc2luZ2xlX3Rlc3QoZHJpdmVyLCB0ZXN0X2lucHV0KQorCisgICAgICAgIHRocmVh
ZCA9IFNpbmdsZVRlc3RUaHJlYWQoKQorICAgICAgICB0aHJlYWQuc3RhcnQoKQorICAgICAgICB0
aHJlYWQuam9pbih0aHJlYWRfdGltZW91dF9zZWMpCisgICAgICAgIGlmIHRocmVhZC5pc0FsaXZl
KCk6CisgICAgICAgICAgICAjIElmIGpvaW4oKSByZXR1cm5lZCB3aXRoIHRoZSB0aHJlYWQgc3Rp
bGwgcnVubmluZywgdGhlCisgICAgICAgICAgICAjIER1bXBSZW5kZXJUcmVlIGlzIGNvbXBsZXRl
bHkgaHVuZyBhbmQgdGhlcmUncyBub3RoaW5nCisgICAgICAgICAgICAjIG1vcmUgd2UgY2FuIGRv
IHdpdGggaXQuICBXZSBoYXZlIHRvIGtpbGwgYWxsIHRoZQorICAgICAgICAgICAgIyBEdW1wUmVu
ZGVyVHJlZXMgdG8gZnJlZSBpdCB1cC4gSWYgd2UncmUgcnVubmluZyBtb3JlIHRoYW4KKyAgICAg
ICAgICAgICMgb25lIER1bXBSZW5kZXJUcmVlIHRocmVhZCwgd2UnbGwgZW5kIHVwIGtpbGxpbmcg
dGhlIG90aGVyCisgICAgICAgICAgICAjIER1bXBSZW5kZXJUcmVlcyB0b28sIGludHJvZHVjaW5n
IHNwdXJpb3VzIGNyYXNoZXMuIFdlIGFjY2VwdAorICAgICAgICAgICAgIyB0aGF0IHRyYWRlb2Zm
IGluIG9yZGVyIHRvIGF2b2lkIGxvc2luZyB0aGUgcmVzdCBvZiB0aGlzCisgICAgICAgICAgICAj
IHRocmVhZCdzIHJlc3VsdHMuCisgICAgICAgICAgICBfbG9nLmVycm9yKCdUZXN0IHRocmVhZCBo
dW5nOiBraWxsaW5nIGFsbCBEdW1wUmVuZGVyVHJlZXMnKQorCisgICAgICAgIGRyaXZlci5zdG9w
KCkKKworICAgICAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICAgICAgcmVzdWx0ID0gdGVzdF9y
ZXN1bHRzLlRlc3RSZXN1bHQodGVzdF9pbnB1dC5maWxlbmFtZSwgZmFpbHVyZXM9W10sCisgICAg
ICAgICAgICAgICAgdGVzdF9ydW5fdGltZT0wLCB0b3RhbF90aW1lX2Zvcl9hbGxfZGlmZnM9MCwg
dGltZV9mb3JfZGlmZnM9e30pCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfcnVu
X3Rlc3RfaW5fdGhpc190aHJlYWQoc2VsZiwgdGVzdF9pbnB1dCk6CisgICAgICAgICIiIlJ1biBh
IHNpbmdsZSB0ZXN0IGZpbGUgdXNpbmcgYSBzaGFyZWQgRHVtcFJlbmRlclRyZWUgcHJvY2Vzcy4K
KworICAgICAgICBBcmdzOgorICAgICAgICAgIHRlc3RfaW5wdXQ6IE9iamVjdCBjb250YWluaW5n
IHRoZSB0ZXN0IGZpbGVuYW1lLCB1cmkgYW5kIHRpbWVvdXQKKworICAgICAgICBSZXR1cm5zOiBh
IFRlc3RSZXN1bHQgb2JqZWN0LgorICAgICAgICAiIiIKKyAgICAgICAgIyBwb2xsKCkgaXMgbm90
IHRocmVhZHNhZmUgYW5kIGNhbiB0aHJvdyBPU0Vycm9yIGR1ZSB0bzoKKyAgICAgICAgIyBodHRw
Oi8vYnVncy5weXRob24ub3JnL2lzc3VlMTczMTcxNworICAgICAgICBpZiBub3Qgc2VsZi5fZHJp
dmVyIG9yIHNlbGYuX2RyaXZlci5wb2xsKCkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxm
Ll9kcml2ZXIgPSBzZWxmLl9wb3J0LmNyZWF0ZV9kcml2ZXIoc2VsZi5fd29ya2VyX251bWJlcikK
KyAgICAgICAgICAgIHNlbGYuX2RyaXZlci5zdGFydCgpCisgICAgICAgIHJldHVybiBzZWxmLl9y
dW5fc2luZ2xlX3Rlc3Qoc2VsZi5fZHJpdmVyLCB0ZXN0X2lucHV0KQorCisgICAgZGVmIF9ydW5f
c2luZ2xlX3Rlc3Qoc2VsZiwgZHJpdmVyLCB0ZXN0X2lucHV0KToKKyAgICAgICAgcmV0dXJuIHNp
bmdsZV90ZXN0X3J1bm5lci5ydW5fc2luZ2xlX3Rlc3Qoc2VsZi5fcG9ydCwgc2VsZi5fb3B0aW9u
cywKKyAgICAgICAgICAgIHRlc3RfaW5wdXQsIGRyaXZlciwgc2VsZi5fbmFtZSwgc2VsZi5fdGVz
dF90eXBlcykK
</data>
<flag name="review"
          id="73864"
          type_id="1"
          status="+"
          setter="mihaip"
    />
          </attachment>
      

    </bug>

</bugzilla>