<?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>47465</bug_id>
          
          <creation_ts>2010-10-09 23:13:27 -0700</creation_ts>
          <short_desc>new-run-webkit-tests should bail out when all the threads are wedged</short_desc>
          <delta_ts>2010-11-04 13:51:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>292259</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-09 23:13:27 -0700</bug_when>
    <thetext>new-run-webkit-tests should bail out when all the threads are wedged</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292260</commentid>
    <comment_count>1</comment_count>
      <attachid>70388</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-09 23:16:21 -0700</bug_when>
    <thetext>Created attachment 70388
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292856</commentid>
    <comment_count>2</comment_count>
      <attachid>70388</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-11 21:24:24 -0700</bug_when>
    <thetext>Comment on attachment 70388
Patch

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

I really like the idea of this change.  I&apos;ll need to stare at it in more detail to make sure I understand/agree-with the details of it though. :)

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:659
&gt; +        # give the other threads a chance to start up.
&gt; +        time.sleep(0.01)

This seems wrong (or at least racy)?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:688
&gt; +                            living_threads = living_threads + 1

Does python not have a ++ or +=?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:701
&gt; +                _log.critical(&quot;all remaining threads are wedged, bailing out\n&quot;)

Seems this should have a capital and a period, no?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292861</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-11 22:15:17 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 70388 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=70388&amp;action=review
&gt; 
&gt; I really like the idea of this change.  I&apos;ll need to stare at it in more detail to make sure I understand/agree-with the details of it though. :)
&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:659
&gt; &gt; +        # give the other threads a chance to start up.
&gt; &gt; +        time.sleep(0.01)
&gt; 
&gt; This seems wrong (or at least racy)?
&gt; 

Yes, it is racy. Without the sleep(), it&apos;s possible for this function to get called before any of the other threads&apos; run() methods have been invoked. So, testing them for isAlive() will return False and we&apos;ll think we&apos;re done.

Perhaps a better mechanism is to have a condition variable that is set by the threads to indicate that they&apos;ve started ... I&apos;ll try adding that.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:688
&gt; &gt; +                            living_threads = living_threads + 1
&gt; 
&gt; Does python not have a ++ or +=?
&gt;

No ++; for some reason my brain failed me yesterday and I was thinking there wasn&apos;t a +=, either, but there is, so I&apos;ll add it.

 &gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:701
&gt; &gt; +                _log.critical(&quot;all remaining threads are wedged, bailing out\n&quot;)
&gt; 
&gt; Seems this should have a capital and a period, no?

Will fix.

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293171</commentid>
    <comment_count>4</comment_count>
      <attachid>70388</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-12 16:22:45 -0700</bug_when>
    <thetext>Comment on attachment 70388
Patch

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

I think this is generally a great patch, just I&apos;d like to see one more round. :)

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:653
&gt; +        return (thread_timings, test_timings, individual_test_timings)

Eventually this probably needs to be a class.  Tuples rarely stay tuples for long. :)  (Obviously not related to this patch, just noting.)

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:661
&gt; +        last_t = time.time()

It&apos;s slightly unfrotunate this variable doesn&apos;t have units in its name.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:666
&gt; +            living_threads = 1
&gt; +            while living_threads:
&gt; +                living_threads = 0

This feels like maybe a do while?  Does python even have such?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:668
&gt; +                min_timeout = last_t + 600

Lack of units in the variable name makes &quot;600&quot; harder to read.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:681
&gt; +                        if next_timeout and next_timeout &lt; min_timeout:
&gt; +                            min_timeout = next_timeout

Isn&apos;t this just a min function?  Or does min() not handle None as you&apos;d want it to?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:683
&gt; +                            if not thread in wedged_threads:

&quot;foo not in bar&quot; reads slightly nicer to my eyes than &quot;not foo in bar&quot;

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:691
&gt; +                if t &gt; last_t + 10:

I&apos;m confused by what this does.  Possibly due to variable naming.  Not sure.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:700
&gt; +            if len(wedged_threads):

if wedged_threads: should do the same with 4 fewer chars.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:709
&gt; +        except Exception, e:
&gt; +            self._exception = e

Do we not want to cancel threads in the non-keyboard case?  Maybe we should wrap this whole thing (possibly by using a helper function) in a separate try block to do the self._exception setting and the inner one would handle the keyboard stuff?  Maybe that&apos;s a separate patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293178</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-12 16:39:08 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 70388 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=70388&amp;action=review
&gt; 
&gt; I think this is generally a great patch, just I&apos;d like to see one more round. :)
&gt; 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:653
&gt; &gt; +        return (thread_timings, test_timings, individual_test_timings)
&gt; 
&gt; Eventually this probably needs to be a class.  Tuples rarely stay tuples for long. :)  (Obviously not related to this patch, just noting.)
&gt; 

Yes.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:661
&gt; &gt; +        last_t = time.time()
&gt; 
&gt; It&apos;s slightly unfrotunate this variable doesn&apos;t have units in its name.
&gt;

I&apos;ll add something.
 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:666
&gt; &gt; +            living_threads = 1
&gt; &gt; +            while living_threads:
&gt; &gt; +                living_threads = 0
&gt; 
&gt; This feels like maybe a do while?  Does python even have such?
&gt;

It is a do while, but Python doesn&apos;t have a do-while :(
 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:668
&gt; &gt; +                min_timeout = last_t + 600
&gt; 
&gt; Lack of units in the variable name makes &quot;600&quot; harder to read.
&gt;

See above :)
 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:681
&gt; &gt; +                        if next_timeout and next_timeout &lt; min_timeout:
&gt; &gt; +                            min_timeout = next_timeout
&gt; 
&gt; Isn&apos;t this just a min function?  Or does min() not handle None as you&apos;d want it to?
&gt;

It&apos;s min() as long as min != 0 (or None), i.e., min_timeout must be greater than zero. I could have:

if next_timeout:
  min_timeout = min(min_timeout, next_timeout)
 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:683
&gt; &gt; +                            if not thread in wedged_threads:
&gt; 
&gt; &quot;foo not in bar&quot; reads slightly nicer to my eyes than &quot;not foo in bar&quot;
&gt;

Sure.
 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:691
&gt; &gt; +                if t &gt; last_t + 10:
&gt; 
&gt; I&apos;m confused by what this does.  Possibly due to variable naming.  Not sure.
&gt;

This just makes sure we don&apos;t log this message more than once every ten seconds. Perhaps I&apos;m confusing you by using last_t for both this and the initial value of min_timeout. I will rewrite.
 
&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:700
&gt; &gt; +            if len(wedged_threads):
&gt; 
&gt; if wedged_threads: should do the same with 4 fewer chars.
&gt; 

Fair enough.

&gt; &gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:709
&gt; &gt; +        except Exception, e:
&gt; &gt; +            self._exception = e
&gt; 
&gt; Do we not want to cancel threads in the non-keyboard case?  Maybe we should wrap this whole thing (possibly by using a helper function) in a separate try block to do the self._exception setting and the inner one would handle the keyboard stuff?  Maybe that&apos;s a separate patch?

KeyboardInterrupted is a &quot;normal&quot; occurrence, and things are generally happy in python land. The other Exceptions indicate that something has gone wrong, most likely we have wedged threads. In which case I&apos;m leery about trying to do anything other than getting out as quickly as possible. I think (but am not positive) that I tested trying to cancel threads in this case and got deadlocks because the thread.cancel() wedged. I can re-test to confirm.

Note that I don&apos;t want to spend too much time on trying to make these code paths flawless. I&apos;d rather be working on the real fix so that the threads don&apos;t get wedged ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294932</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-15 14:49:31 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; It&apos;s min() as long as min != 0 (or None), i.e., min_timeout must be greater than zero. I could have:
&gt; 
&gt; if next_timeout:
&gt;   min_timeout = min(min_timeout, next_timeout)

SGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297205</commentid>
    <comment_count>7</comment_count>
      <attachid>71382</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-20 19:15:30 -0700</bug_when>
    <thetext>Created attachment 71382
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298236</commentid>
    <comment_count>8</comment_count>
      <attachid>71382</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-22 16:04:33 -0700</bug_when>
    <thetext>Comment on attachment 71382
Patch

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

I need to finish resurrecting the EWS fleet.  Will look more later.

&gt; WebKitTools/Scripts/new-run-webkit-tests:38
&gt; +        res = run_webkit_tests.main()

:)  I&apos;m not sure &quot;res&quot; saves you enough typing to be worth it.  exit_code would be best imo.

&gt; WebKitTools/Scripts/new-run-webkit-tests:41
&gt; +        res = signal.SIGINT + 128

Odd.  isn&apos;t there a function to do this +128 for us?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298240</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-10-22 16:09:23 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; WebKitTools/Scripts/new-run-webkit-tests:38
&gt; &gt; +        res = run_webkit_tests.main()
&gt; 
&gt; :)  I&apos;m not sure &quot;res&quot; saves you enough typing to be worth it.  exit_code would be best imo.
&gt;

Will do.
 
&gt; &gt; WebKitTools/Scripts/new-run-webkit-tests:41
&gt; &gt; +        res = signal.SIGINT + 128
&gt; 
&gt; Odd.  isn&apos;t there a function to do this +128 for us?

Not that I&apos;m aware of.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303076</commentid>
    <comment_count>10</comment_count>
      <attachid>71382</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-01 16:53:24 -0700</bug_when>
    <thetext>Comment on attachment 71382
Patch

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

I&apos;m failing to understand what this is trying to do (perhaps it&apos;s trying to do too much?)  Perhaps I should come down and read this in person sitting next to you.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:247
&gt; +    def __init__(self, worker_number, runner, port, options,
&gt; +                 filename_list_queue, result_queue, test_types, test_args):

If we&apos;re going to have a back-pointer to runner, should more of this list just be pulled off of runner?

Even if we just pull it off in the __init__ and cache it locally, that seems cleaner than passing each value to the constructor.  donno.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:253
&gt; +          runner: handle to TestRunner (master thread) used to notify of
&gt; +              thread startup/shutdown

Does this use a specific delegate protocol?  Often we use such for easier testing/api-containment.  You can see examples in CommitQueueTask, QueueEngine, etc.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:274
&gt; +        self.setName(&quot;Worker-%d&quot; % (worker_number + 1))

Seems the owner of this thread could just do this?  Why does the thread set its own name?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:325
&gt; +            self._runner.notify_thread_start(self)

I wouldnt&apos; have used notify in the name.  But it&apos;s OK.  I probably would have just called it thread_started/thread_stopped.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:647
&gt; +        self._cv = threading.Condition()

What does _cv stand for?  It&apos;s not clear from that name what the variable is doing.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:648
&gt; +        self._cv.acquire()

with_statement?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:688
&gt; +        self._cv.acquire()

If this is a lock, then with_statement would be safer here.  I&apos;m not sure what _cv is.

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:1461
&gt; +def _run_with_printer(port, options, printer, num_workers, args):

The changes in this function are all just changes in indent, right?

&gt; WebKitTools/Scripts/webkitpy/layout_tests/run_webkit_tests_unittest.py:36
&gt; +import pdb

leftover.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303223</commentid>
    <comment_count>11</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-01 22:33:32 -0700</bug_when>
    <thetext>Well, the &quot;good&quot; news is that this patch may be irrelevant; it&apos;s starting to look like the rewritten code I have to do multi-process NRWT actually works, and most of this code goes away.

If that doesn&apos;t pan out, I&apos;ll come back to this and we can review the design in more detail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304850</commentid>
    <comment_count>12</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2010-11-04 13:51:27 -0700</bug_when>
    <thetext>Closing this as WONTFIX for now.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70388</attachid>
            <date>2010-10-09 23:16:21 -0700</date>
            <delta_ts>2010-10-20 19:15:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47465-20101009231620.patch</filename>
            <type>text/plain</type>
            <size>12396</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAwYmRlYjgwMWI5MzIzNzQ4NTJmZjgxYWQ1M2M2Y2VhY2Y5Y2FhNjZkLi4xMDMwMThh
ZGExNmY5M2FhMzFkZmM1ZDY1MDU0ODQ5M2I5NTQ1NjY1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAK
KzIwMTAtMTAtMDkgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlIG5ldy1ydW4t
d2Via2l0LXRlc3RzIHRvIGJhaWwgb3V0IHdoZW4gYWxsIHRoZSB0aHJlYWRzIGFyZQorICAgICAg
ICB3ZWRnZWQ7IHRoZSBwcmV2aW91cyBiZWhhdmlvdXIgd291bGQgbG9vcCBmb3JldmVyIHByaW50
aW5nCisgICAgICAgIHRocmVhZCBzdGFja3MgdW50aWwgdGhlIGJ1aWxkYm90IChvciB0aGUgdXNl
cikgYWJvcnRlZCB0aGUKKyAgICAgICAgcHJvY2Vzcy4KKworICAgICAgICBXZSBub3cgdHJ5IHRv
IGJhaWwgb3V0LCBidXQgdGhpcyB3b24ndCBuZWNlc3NhcmlseSB3b3JrIGJlY2F1c2UKKyAgICAg
ICAgc29tZSBwbGF0Zm9ybXMgd29uJ3QgZXhpdCBpZiB0aGVyZSBhcmUgc3RpbGwgbGl2ZSB0aHJl
YWRzLiBBdAorICAgICAgICBsZWFzdCB3ZSdsbCBzdG9wIG91dHB1dHRpbmcgdGhpbmdzIGFuZCBs
b2cgZXJyb3JzLCBzbyBpdCdsbCBiZQorICAgICAgICBlYXNpZXIgdG8gZmlndXJlIG91dCB3aHkg
dGhlIHRlc3Qgd2FzIGFib3J0ZWQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ3NDY1CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHk6CisKIDIwMTAtMTAtMDcg
IERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4IGNmNjM3ZWU2MWJl
MzA0YzkxNDFkZWNiYzJjZWM4OWU3NTkyOWQ5ZDkuLjdjNWU3OGZmNDgzNTQ1ZDM0Yzc2YzNhYmE0
ZWUxY2ViNGFjNThlNmUgMTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtMjc0LDYgKzI3
NCw5IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZSA9IFF1
ZXVlLlF1ZXVlKCkKICAgICAgICAgc2VsZi5fcmV0cnlpbmcgPSBGYWxzZQogCisgICAgICAgICMg
QW55IGV4Y2VwdGlvbiByYWlzZWQgZHVyaW5nIHRoZSBtYWluIHJ1bgorICAgICAgICBzZWxmLl9l
eGNlcHRpb24gPSBOb25lCisKICAgICBkZWYgY29sbGVjdF90ZXN0cyhzZWxmLCBhcmdzLCBsYXN0
X3VuZXhwZWN0ZWRfcmVzdWx0cyk6CiAgICAgICAgICIiIkZpbmQgYWxsIHRoZSBmaWxlcyB0byB0
ZXN0LgogCkBAIC02MjEsMTYgKzYyNCwxNiBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgIGRlZiBf
cnVuX3Rlc3RzKHNlbGYsIGZpbGVfbGlzdCwgcmVzdWx0X3N1bW1hcnkpOgogICAgICAgICAiIiJS
dW5zIHRoZSB0ZXN0cyBpbiB0aGUgZmlsZV9saXN0LgogCi0gICAgICAgIFJldHVybjogQSB0dXBs
ZSAoa2V5Ym9hcmRfaW50ZXJydXB0ZWQsIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCisg
ICAgICAgIEFyZ3M6CisgICAgICAgICAgICByZXN1bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3Qg
dG8gcG9wdWxhdGUgd2l0aCB0aGUgcmVzdWx0cworICAgICAgICBSZXR1cm46IEEgdHVwbGUgKHRo
cmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCiAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3Rf
dGltaW5ncykKLSAgICAgICAgICAgIGtleWJvYXJkX2ludGVycnVwdGVkIGlzIHdoZXRoZXIgc29t
ZW9uZSB0eXBlZCBDdHJsXkMKICAgICAgICAgICAgIHRocmVhZF90aW1pbmdzIGlzIGEgbGlzdCBv
ZiBkaWN0cyB3aXRoIHRoZSB0b3RhbCBydW50aW1lCiAgICAgICAgICAgICAgIG9mIGVhY2ggdGhy
ZWFkIHdpdGggJ25hbWUnLCAnbnVtX3Rlc3RzJywgJ3RvdGFsX3RpbWUnIHByb3BlcnRpZXMKICAg
ICAgICAgICAgIHRlc3RfdGltaW5ncyBpcyBhIGxpc3Qgb2YgdGltaW5ncyBmb3IgZWFjaCBzaGFy
ZGVkIHN1YmRpcmVjdG9yeQogICAgICAgICAgICAgICBvZiB0aGUgZm9ybSBbdGltZSwgZGlyZWN0
b3J5X25hbWUsIG51bV90ZXN0c10KICAgICAgICAgICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdz
IGlzIGEgbGlzdCBvZiBydW4gdGltZXMgZm9yIGVhY2ggdGVzdAogICAgICAgICAgICAgICBpbiB0
aGUgZm9ybSB7ZmlsZW5hbWU6ZmlsZW5hbWUsIHRlc3RfcnVuX3RpbWU6dGVzdF9ydW5fdGltZX0K
LSAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBzdW1tYXJ5IG9iamVjdCB0byBwb3B1bGF0ZSB3
aXRoIHRoZSByZXN1bHRzCiAgICAgICAgICIiIgogICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQg
dXNlIHdlYmtpdHB5LnRvb2wuZ3JhbW1hci5wbHVyYWxpemUgaGVyZS4KICAgICAgICAgcGx1cmFs
ID0gIiIKQEAgLTY0MiwyMiArNjQ1LDI3IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
X3N1bW1hcnkpCiAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCJTdGFydGluZyB0
ZXN0aW5nIC4uLiIpCiAKLSAgICAgICAga2V5Ym9hcmRfaW50ZXJydXB0ZWQgPSBzZWxmLl93YWl0
X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaCh0aHJlYWRzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5KQor
ICAgICAgICBzZWxmLl93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaCh0aHJlYWRzLCByZXN1bHRf
c3VtbWFyeSkKKwogICAgICAgICAodGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywgaW5kaXZp
ZHVhbF90ZXN0X3RpbWluZ3MpID0gXAogICAgICAgICAgICAgc2VsZi5fY29sbGVjdF90aW1pbmdf
aW5mbyh0aHJlYWRzKQogCi0gICAgICAgIHJldHVybiAoa2V5Ym9hcmRfaW50ZXJydXB0ZWQsIHRo
cmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCi0gICAgICAgICAgICAgICAgaW5kaXZpZHVhbF90
ZXN0X3RpbWluZ3MpCisgICAgICAgIHJldHVybiAodGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5n
cywgaW5kaXZpZHVhbF90ZXN0X3RpbWluZ3MpCiAKICAgICBkZWYgX3dhaXRfZm9yX3RocmVhZHNf
dG9fZmluaXNoKHNlbGYsIHRocmVhZHMsIHJlc3VsdF9zdW1tYXJ5KToKLSAgICAgICAga2V5Ym9h
cmRfaW50ZXJydXB0ZWQgPSBGYWxzZQorICAgICAgICB3ZWRnZWRfdGhyZWFkcyA9IFtdCisKKyAg
ICAgICAgIyBnaXZlIHRoZSBvdGhlciB0aHJlYWRzIGEgY2hhbmNlIHRvIHN0YXJ0IHVwLgorICAg
ICAgICB0aW1lLnNsZWVwKDAuMDEpCisKKyAgICAgICAgbGFzdF90ID0gdGltZS50aW1lKCkKICAg
ICAgICAgdHJ5OgogICAgICAgICAgICAgIyBMb29wIHRocm91Z2ggYWxsIHRoZSB0aHJlYWRzIHdh
aXRpbmcgZm9yIHRoZW0gdG8gZmluaXNoLgotICAgICAgICAgICAgc29tZV90aHJlYWRfaXNfYWxp
dmUgPSBUcnVlCi0gICAgICAgICAgICB3aGlsZSBzb21lX3RocmVhZF9pc19hbGl2ZToKLSAgICAg
ICAgICAgICAgICBzb21lX3RocmVhZF9pc19hbGl2ZSA9IEZhbHNlCisgICAgICAgICAgICBsaXZp
bmdfdGhyZWFkcyA9IDEKKyAgICAgICAgICAgIHdoaWxlIGxpdmluZ190aHJlYWRzOgorICAgICAg
ICAgICAgICAgIGxpdmluZ190aHJlYWRzID0gMAogICAgICAgICAgICAgICAgIHQgPSB0aW1lLnRp
bWUoKQorICAgICAgICAgICAgICAgIG1pbl90aW1lb3V0ID0gbGFzdF90ICsgNjAwCiAgICAgICAg
ICAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgogICAgICAgICAgICAgICAgICAgICBleGNl
cHRpb25faW5mbyA9IHRocmVhZC5leGNlcHRpb25faW5mbygpCiAgICAgICAgICAgICAgICAgICAg
IGlmIGV4Y2VwdGlvbl9pbmZvIGlzIG5vdCBOb25lOgpAQCAtNjY4LDIzICs2NzYsMzcgQEAgY2xh
c3MgVGVzdFJ1bm5lcjoKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbl9p
bmZvWzBdLCBleGNlcHRpb25faW5mb1sxXSwgZXhjZXB0aW9uX2luZm9bMl0KIAogICAgICAgICAg
ICAgICAgICAgICBpZiB0aHJlYWQuaXNBbGl2ZSgpOgotICAgICAgICAgICAgICAgICAgICAgICAg
c29tZV90aHJlYWRfaXNfYWxpdmUgPSBUcnVlCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0
X3RpbWVvdXQgPSB0aHJlYWQubmV4dF90aW1lb3V0KCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIG5leHRfdGltZW91dCBhbmQgbmV4dF90aW1lb3V0IDwgbWluX3RpbWVvdXQ6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWluX3RpbWVvdXQgPSBuZXh0X3RpbWVvdXQKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChuZXh0X3RpbWVvdXQgYW5kIHQgPiBuZXh0X3RpbWVvdXQpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9sb2dfd2VkZ2VkX3RocmVhZCh0aHJlYWQpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHRocmVhZCBpbiB3ZWRnZWRfdGhyZWFk
czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2xvZ193ZWRnZWRfdGhyZWFkKHRo
cmVhZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VkZ2VkX3RocmVhZHMuYXBw
ZW5kKHRocmVhZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQuY2xlYXJfbmV4
dF90aW1lb3V0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgbmV4dF90aW1lb3V0Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdmluZ190aHJlYWRzID0gbGl2aW5nX3RocmVh
ZHMgKyAxCiAKICAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9zdW1tYXJ5KHJlc3VsdF9zdW1t
YXJ5KQorICAgICAgICAgICAgICAgIGlmIHQgPiBsYXN0X3QgKyAxMDoKKyAgICAgICAgICAgICAg
ICAgICAgX2xvZy5kZWJ1Zygid2FpdGluZyBmb3IgdGhyZWFkcyB0byBmaW5pc2gsICIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiYWxpdmUgPSAlcywgdCA9ICVzLCBtaW5fdGltZW91
dCA9ICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpdmluZ190aHJlYWRz
LCB0LCBtaW5fdGltZW91dCkpCisgICAgICAgICAgICAgICAgICAgIGxhc3RfdCA9IHQKIAotICAg
ICAgICAgICAgICAgIGlmIHNvbWVfdGhyZWFkX2lzX2FsaXZlOgorICAgICAgICAgICAgICAgIGlm
IGxpdmluZ190aHJlYWRzOgogICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCiAK
LSAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAga2V5Ym9hcmRf
aW50ZXJydXB0ZWQgPSBUcnVlCisgICAgICAgICAgICBpZiBsZW4od2VkZ2VkX3RocmVhZHMpOgor
ICAgICAgICAgICAgICAgIF9sb2cuY3JpdGljYWwoImFsbCByZW1haW5pbmcgdGhyZWFkcyBhcmUg
d2VkZ2VkLCBiYWlsaW5nIG91dFxuIikKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25F
cnJvcigidGhyZWFkcyBhcmUgd2VkZ2VkIikKKworICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRl
cnJ1cHQsIGU6CisgICAgICAgICAgICBzZWxmLl9leGNlcHRpb24gPSBlCiAgICAgICAgICAgICBm
b3IgdGhyZWFkIGluIHRocmVhZHM6CiAgICAgICAgICAgICAgICAgdGhyZWFkLmNhbmNlbCgpCi0K
LSAgICAgICAgcmV0dXJuIGtleWJvYXJkX2ludGVycnVwdGVkCisgICAgICAgIGV4Y2VwdCBFeGNl
cHRpb24sIGU6CisgICAgICAgICAgICBzZWxmLl9leGNlcHRpb24gPSBlCiAKICAgICBkZWYgX2Nv
bGxlY3RfdGltaW5nX2luZm8oc2VsZiwgdGhyZWFkcyk6CiAgICAgICAgIHRlc3RfdGltaW5ncyA9
IHt9CkBAIC03NjYsOCArNzg4LDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICBzdGFy
dF90aW1lID0gdGltZS50aW1lKCkKIAotICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCwgdGhy
ZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywgXAotICAgICAgICAgICAgaW5kaXZpZHVhbF90ZXN0
X3RpbWluZ3MgPSAoCisgICAgICAgIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsIGluZGl2
aWR1YWxfdGVzdF90aW1pbmdzID0gKAogICAgICAgICAgICAgc2VsZi5fcnVuX3Rlc3RzKHNlbGYu
X3Rlc3RfZmlsZXNfbGlzdCwgcmVzdWx0X3N1bW1hcnkpKQogCiAgICAgICAgICMgV2UgZXhjbHVk
ZSB0aGUgY3Jhc2hlcyBmcm9tIHRoZSBsaXN0IG9mIHJlc3VsdHMgdG8gcmV0cnksIGJlY2F1c2UK
QEAgLTc3NSw3ICs3OTYsNyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBmYWlsdXJlcyA9
IHNlbGYuX2dldF9mYWlsdXJlcyhyZXN1bHRfc3VtbWFyeSwgaW5jbHVkZV9jcmFzaGVzPUZhbHNl
KQogICAgICAgICByZXRyeV9zdW1tYXJ5ID0gcmVzdWx0X3N1bW1hcnkKICAgICAgICAgd2hpbGUg
KGxlbihmYWlsdXJlcykgYW5kIHNlbGYuX29wdGlvbnMucmV0cnlfZmFpbHVyZXMgYW5kCi0gICAg
ICAgICAgICBub3Qgc2VsZi5fcmV0cnlpbmcgYW5kIG5vdCBrZXlib2FyZF9pbnRlcnJ1cHRlZCk6
CisgICAgICAgICAgICBub3Qgc2VsZi5fcmV0cnlpbmcgYW5kIG5vdCBzZWxmLl9leGNlcHRpb24p
OgogICAgICAgICAgICAgX2xvZy5pbmZvKCcnKQogICAgICAgICAgICAgX2xvZy5pbmZvKCJSZXRy
eWluZyAlZCB1bmV4cGVjdGVkIGZhaWx1cmUocykgLi4uIiAlIGxlbihmYWlsdXJlcykpCiAgICAg
ICAgICAgICBfbG9nLmluZm8oJycpCkBAIC04MjAsMTIgKzg0MSwxMyBAQCBjbGFzcyBUZXN0UnVu
bmVyOgogCiAgICAgICAgICMgTm93IHRoYXQgd2UndmUgY29tcGxldGVkIGFsbCB0aGUgcHJvY2Vz
c2luZyB3ZSBjYW4sIHdlIHJlLXJhaXNlCiAgICAgICAgICMgYSBLZXlib2FyZEludGVycnVwdCBp
ZiBuZWNlc3Nhcnkgc28gdGhlIGNhbGxlciBjYW4gaGFuZGxlIGl0LgotICAgICAgICBpZiBrZXli
b2FyZF9pbnRlcnJ1cHRlZDoKLSAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0Cisg
ICAgICAgIGlmIHNlbGYuX2V4Y2VwdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuX2V4Y2Vw
dGlvbgogCiAgICAgICAgICMgSWdub3JlIGZsYWt5IGZhaWx1cmVzIGFuZCB1bmV4cGVjdGVkIHBh
c3NlcyBzbyB3ZSBkb24ndCB0dXJuIHRoZQogICAgICAgICAjIGJvdCByZWQgZm9yIHRob3NlLgot
ICAgICAgICByZXR1cm4gdW5leHBlY3RlZF9yZXN1bHRzWydudW1fcmVncmVzc2lvbnMnXQorICAg
ICAgICByZXR1cm4gKHVuZXhwZWN0ZWRfcmVzdWx0c1snbnVtX3JlZ3Jlc3Npb25zJ10gKworICAg
ICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnJlbWFpbmluZykKIAogICAgIGRlZiBjbGVhbl91
cF9ydW4oc2VsZik6CiAgICAgICAgICIiIlJlc3RvcmVzIHRoZSBzeXN0ZW0gYWZ0ZXIgd2UncmUg
ZG9uZSBydW5uaW5nIHRlc3RzLiIiIgpAQCAtMTQxNCwxMCArMTQzNiwxNSBAQCBkZWYgcnVuKHBv
cnQsIG9wdGlvbnMsIGFyZ3MsIHJlZ3VsYXJfb3V0cHV0PXN5cy5zdGRlcnIsCiAKICAgICAgICAg
cmVzdWx0X3N1bW1hcnkgPSB0ZXN0X3J1bm5lci5zZXRfdXBfcnVuKCkKICAgICAgICAgaWYgcmVz
dWx0X3N1bW1hcnk6Ci0gICAgICAgICAgICBudW1fdW5leHBlY3RlZF9yZXN1bHRzID0gdGVzdF9y
dW5uZXIucnVuKHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICAgICAgdGVzdF9ydW5uZXIuY2xlYW5f
dXBfcnVuKCkKLSAgICAgICAgICAgIF9sb2cuZGVidWcoIlRlc3RpbmcgY29tcGxldGVkLCBFeGl0
IHN0YXR1czogJWQiICUKLSAgICAgICAgICAgICAgICAgICAgICAgbnVtX3VuZXhwZWN0ZWRfcmVz
dWx0cykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBudW1fdW5leHBlY3RlZF9y
ZXN1bHRzID0gdGVzdF9ydW5uZXIucnVuKHJlc3VsdF9zdW1tYXJ5KQorICAgICAgICAgICAgICAg
IHRlc3RfcnVubmVyLmNsZWFuX3VwX3J1bigpCisgICAgICAgICAgICAgICAgX2xvZy5kZWJ1Zygi
VGVzdGluZyBjb21wbGV0ZWQsIEV4aXQgc3RhdHVzOiAlZCIgJQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnVtX3VuZXhwZWN0ZWRfcmVzdWx0cykKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAg
ICAgICAgICAgICAgICBfbG9nLmluZm8oIlRlc3RpbmcgZmFpbGVkLCBFeGl0IHN0YXR1czogJWQi
ICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMpCisg
ICAgICAgICAgICAgICAgcmFpc2UKICAgICBmaW5hbGx5OgogICAgICAgICBwcmludGVyLmNsZWFu
dXAoKQogCkBAIC0xNzMwLDMgKzE3NTcsNSBAQCBpZiAnX19tYWluX18nID09IF9fbmFtZV9fOgog
ICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAgIyB0aGlzIG1pcnJvcnMgd2hh
dCB0aGUgc2hlbGwgbm9ybWFsbHkgZG9lcwogICAgICAgICBzeXMuZXhpdChzaWduYWwuU0lHSU5U
ICsgMTI4KQorICAgIGV4Y2VwdDoKKyAgICAgICAgc3lzLmV4aXQoMjU1KQpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0
c191bml0dGVzdC5weSBiL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKaW5kZXggMTFiNzdkYmU0NzQyZmU2ZjkzMTNm
MTEyYzkwNzVjYWYxZWFmNzBmYy4uY2VjMzc1NTViNWExOGNkYTQ3NTE5YWMyZGI4ZGExNzUyOWRj
NmM3NSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcnVuX3dlYmtpdF90ZXN0c191bml0dGVzdC5weQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CkBAIC0x
NDgsMTcgKzE0OCwxOCBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAg
ICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCiAKICAgICBkZWYgdGVzdF9odW5nX3Ro
cmVhZChzZWxmKToKLSAgICAgICAgcmVzLCBvdXQsIGVyciwgdXNlciA9IGxvZ2dpbmdfcnVuKFsn
LS1ydW4tc2luZ2x5JywgJy0tdGltZS1vdXQtbXM9NTAnLAorICAgICAgICByZXMsIG91dCwgZXJy
LCB1c2VyID0gbG9nZ2luZ19ydW4oWyctLXJ1bi1zaW5nbHknLAorICAgICAgICAnLS10aW1lLW91
dC1tcz01MCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFp
bHVyZXMvZXhwZWN0ZWQvaGFuZy5odG1sJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXN0c19pbmNsdWRlZD1UcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKHJlcywgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdXQuZW1wdHkoKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQu
ZW1wdHkoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIuZW1wdHkoKSkKIAogICAgIGRl
ZiB0ZXN0X2tleWJvYXJkX2ludGVycnVwdChzZWxmKToKICAgICAgICAgIyBOb3RlIHRoYXQgdGhp
cyBhbHNvIHRlc3RzIHJ1bm5pbmcgYSB0ZXN0IG1hcmtlZCBhcyBTS0lQIGlmCiAgICAgICAgICMg
eW91IHNwZWNpZnkgaXQgZXhwbGljaXRseS4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5
Ym9hcmRJbnRlcnJ1cHQsIHBhc3NpbmdfcnVuLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhL
ZXlib2FyZEludGVycnVwdCwgbG9nZ2luZ19ydW4sCiAgICAgICAgICAgICBbJ2ZhaWx1cmVzL2V4
cGVjdGVkL2tleWJvYXJkLmh0bWwnXSwgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkKIAogICAgIGRlZiB0
ZXN0X2xhc3RfcmVzdWx0cyhzZWxmKToKQEAgLTIwNiw3ICsyMDcsOCBAQCBjbGFzcyBNYWluVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1
bihbJy0tcnVuLXBhcnQnLCAnMToyJ10pKQogCiAgICAgZGVmIHRlc3RfcnVuX3NpbmdseShzZWxm
KToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1ydW4tc2luZ2x5J10p
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFzc2luZ19ydW4oWyctLXJ1bi1zaW5nbHknLCAn
cGFzc2VzJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c19pbmNs
dWRlZD1UcnVlKSkKIAogICAgIGRlZiB0ZXN0X3NpbmdsZV9maWxlKHNlbGYpOgogICAgICAgICAj
IEZJWE1FOiB2ZXJpZnkgIyBvZiB0ZXN0cyBydW4KQEAgLTQ2Miw2ICs0NjQsNyBAQCBjbGFzcyBU
ZXN0SGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgogY2xhc3MgV2FpdEZvclRocmVhZHNUb0Zpbmlz
aFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGNsYXNzIE1vY2tUZXN0UnVubmVyKHJ1bl93
ZWJraXRfdGVzdHMuVGVzdFJ1bm5lcik6CiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAg
ICAgICAgICAgIHNlbGYuX2V4Y2VwdGlvbiA9IE5vbmUKICAgICAgICAgICAgIHBhc3MKIAogICAg
ICAgICBkZWYgX19kZWxfXyhzZWxmKToKQEAgLTQ3OSwyNSArNDgyLDI3IEBAIGNsYXNzIFdhaXRG
b3JUaHJlYWRzVG9GaW5pc2hUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgc3RhcnRl
ZF9tc2cgPSBzdGFydGluZ19xdWV1ZS5nZXQoKQogICAgICAgICBzdG9wcGluZ19xdWV1ZS5wdXQo
bXNnKQogICAgICAgICB0aHJlYWRzID0gW2NoaWxkX3RocmVhZF0KLSAgICAgICAgcmV0dXJuIHJ1
bm5lci5fd2FpdF9mb3JfdGhyZWFkc190b19maW5pc2godGhyZWFkcywgTm9uZSkKKyAgICAgICAg
cnVubmVyLl93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaCh0aHJlYWRzLCBOb25lKQorICAgICAg
ICByZXR1cm4gcnVubmVyLl9leGNlcHRpb24KIAogICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgot
ICAgICAgICBpbnRlcnJ1cHRlZCA9IHNlbGYucnVuX29uZV90aHJlYWQoJycpCi0gICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2UoaW50ZXJydXB0ZWQpCisgICAgICAgIGV4Y2VwdGlvbiA9IHNlbGYucnVu
X29uZV90aHJlYWQoJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjZXB0aW9uLCBOb25l
KQogCiAgICAgZGVmIHRlc3RfaW50ZXJydXB0KHNlbGYpOgotICAgICAgICBpbnRlcnJ1cHRlZCA9
IHNlbGYucnVuX29uZV90aHJlYWQoJ0tleWJvYXJkSW50ZXJydXB0JykKLSAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKGludGVycnVwdGVkKQorICAgICAgICBleGNlcHRpb24gPSBzZWxmLnJ1bl9vbmVf
dGhyZWFkKCdLZXlib2FyZEludGVycnVwdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2lu
c3RhbmNlKGV4Y2VwdGlvbiwgS2V5Ym9hcmRJbnRlcnJ1cHQpKQogCiAgICAgZGVmIHRlc3RfdGlt
ZW91dChzZWxmKToKICAgICAgICAgb2MgPSBvdXRwdXRjYXB0dXJlLk91dHB1dENhcHR1cmUoKQog
ICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCi0gICAgICAgIGludGVycnVwdGVkID0gc2VsZi5y
dW5fb25lX3RocmVhZCgnVGltZW91dCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW50ZXJy
dXB0ZWQpCisgICAgICAgIGV4Y2VwdGlvbiA9IHNlbGYucnVuX29uZV90aHJlYWQoJ1RpbWVvdXQn
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShleGNlcHRpb24sIEFzc2VydGlv
bkVycm9yKSkKICAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQogCiAgICAgZGVmIHRlc3RfZXhj
ZXB0aW9uKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxm
LnJ1bl9vbmVfdGhyZWFkLCAnRXhjZXB0aW9uJykKKyAgICAgICAgZXhjZXB0aW9uID0gc2VsZi5y
dW5fb25lX3RocmVhZCgnRXhjZXB0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5z
dGFuY2UoZXhjZXB0aW9uLCBFeGNlcHRpb24pKQogCiAKIGNsYXNzIFN0YW5kYWxvbmVGdW5jdGlv
bnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71382</attachid>
            <date>2010-10-20 19:15:30 -0700</date>
            <delta_ts>2010-11-01 16:53:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-47465-20101020191529.patch</filename>
            <type>text/plain</type>
            <size>33688</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA1MDBiNzdkN2Y2NmE3ZDUwYTdiMGE2NGI0YzViMmU1YjY3ZDRhZjMyLi42YWI4ZDZh
YjgyM2M1MmUxNjEzOGI0ODVjZWJhYzBlMjRkMmY1N2U0IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAK
KzIwMTAtMTAtMDkgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hhbmdlIG5ldy1ydW4t
d2Via2l0LXRlc3RzIHRvIGJhaWwgb3V0IHdoZW4gYWxsIHRoZSB0aHJlYWRzIGFyZQorICAgICAg
ICB3ZWRnZWQ7IHRoZSBwcmV2aW91cyBiZWhhdmlvdXIgd291bGQgbG9vcCBmb3JldmVyIHByaW50
aW5nCisgICAgICAgIHRocmVhZCBzdGFja3MgdW50aWwgdGhlIGJ1aWxkYm90IChvciB0aGUgdXNl
cikgYWJvcnRlZCB0aGUKKyAgICAgICAgcHJvY2Vzcy4KKworICAgICAgICBUaGlzIGNoYW5nZSBh
bHNvIHNpZ25pZmljYW50bHkgY2xlYW5zIHVwIHRoZSB3YXkgd2Ugc3Bhd24gdGhyZWFkcworICAg
ICAgICBhbmQgd2FpdCBmb3IgdGhlbSB0byBzdGFydCBhbmQgc3RvcCAoaW4KKyAgICAgICAgVGVz
dFJ1bm5lci5faW5zdGFudGlhdGVfZHVtcF9yZW5kZXJfdHJlZV90aHJlYWRzIGFuZAorICAgICAg
ICBUZXN0UnVubmVyLl93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaCkuIFRoZSBjb2RlIGlzIG5v
dyBzYWZlIGFnYWluc3QKKyAgICAgICAgcmFjZXMgYW5kIGVhc2llciB0byBmb2xsb3cuCisKKyAg
ICAgICAgQmFpbGluZyBvdXQgd29uJ3QgYWx3YXlzIHdvcmsgYmVjYXVzZSBzb21lIHBsYXRmb3Jt
cyB3b24ndCBleGl0IGlmCisgICAgICAgIHRoZXJlIGFyZSBzdGlsbCBsaXZlIHRocmVhZHMuIEF0
IGxlYXN0IHdlJ2xsIHN0b3Agb3V0cHV0dGluZyB0aGluZ3MgYW5kCisgICAgICAgIGxvZyBlcnJv
cnMsIHNvIGl0J2xsIGJlIGVhc2llciB0byBmaWd1cmUgb3V0IHdoeSB0aGUgdGVzdCB3YXMgYWJv
cnRlZC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDc0NjUKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJr
aXRfdGVzdHMucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVu
X3dlYmtpdF90ZXN0c191bml0dGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90aHJlYWQucHkucHk6CisKIDIw
MTAtMTAtMTggIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL25ldy1y
dW4td2Via2l0LXRlc3RzIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9uZXctcnVuLXdlYmtpdC10ZXN0
cwppbmRleCA5ZmNhY2FhOWQ4NDFiMDFmMTY0Nzg3NjlhYWQ2ODFmYmNjZGI1NDRkLi5hZDRiNTcy
NmYzMzk1NzhmNGVhNDlkODczNTU2Njk1MzMyNTllYmZhIDEwMDc1NQotLS0gYS9XZWJLaXRUb29s
cy9TY3JpcHRzL25ldy1ydW4td2Via2l0LXRlc3RzCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMv
bmV3LXJ1bi13ZWJraXQtdGVzdHMKQEAgLTM1LDcgKzM1LDEwIEBAIGltcG9ydCB3ZWJraXRweS5s
YXlvdXRfdGVzdHMucnVuX3dlYmtpdF90ZXN0cyBhcyBydW5fd2Via2l0X3Rlc3RzCiAKIGlmIF9f
bmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdHJ5OgotICAgICAgICBzeXMuZXhpdChydW5fd2Vi
a2l0X3Rlc3RzLm1haW4oKSkKKyAgICAgICAgcmVzID0gcnVuX3dlYmtpdF90ZXN0cy5tYWluKCkK
ICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgICMgdGhpcyBtaXJyb3JzIHdo
YXQgdGhlIHNoZWxsIG5vcm1hbGx5IGRvZXMKLSAgICAgICAgc3lzLmV4aXQoc2lnbmFsLlNJR0lO
VCArIDEyOCkKKyAgICAgICAgIyBUaGlzIG1pcnJvcnMgd2hhdCB0aGUgc2hlbGwgbm9ybWFsbHkg
ZG9lcy4KKyAgICAgICAgcmVzID0gc2lnbmFsLlNJR0lOVCArIDEyOAorICAgIGV4Y2VwdCBydW5f
d2Via2l0X3Rlc3RzLldlZGdlZEV4Y2VwdGlvbjoKKyAgICAgICAgcmVzID0gMjU1CisgICAgc3lz
LmV4aXQocmVzKQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvbGF5b3V0X3BhY2thZ2UvZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQucHkgYi9XZWJL
aXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1w
X3JlbmRlcl90cmVlX3RocmVhZC5weQppbmRleCBlMGZkMWI2YmJkNmVlODk1NTQyYmYyODAzZTE2
ZDhiNzkwZDI2NzM4Li5mOTEyZjRhY2M4YTE3MDU3MmZiMjRjZTliMThlZjc1MTZiOGNiNDg4IDEw
MDY0NAotLS0gYS9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlv
dXRfcGFja2FnZS9kdW1wX3JlbmRlcl90cmVlX3RocmVhZC5weQorKysgYi9XZWJLaXRUb29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9sYXlvdXRfcGFja2FnZS9kdW1wX3JlbmRlcl90
cmVlX3RocmVhZC5weQpAQCAtNjUsMTIgKzY1LDEyIEBAIGRlZiBmaW5kX3RocmVhZF9zdGFjayhp
ZCk6CiAgICAgcmV0dXJuIE5vbmUKIAogCi1kZWYgbG9nX3N0YWNrKHN0YWNrKToKLSAgICAiIiJM
b2cgYSBzdGFjayB0cmFjZSB0byBsb2cuZXJyb3IoKS4iIiIKK2RlZiBsb2dfc3RhY2soc3RhY2ss
IGxvZ2dlcik6CisgICAgIiIiTG9ncyBhIHN0YWNrIHRyYWNlIHRvIHRoZSBzcGVjaWZpZWQgY2Fs
bGJhY2suIiIiCiAgICAgZm9yIGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUgaW4gdHJhY2Vi
YWNrLmV4dHJhY3Rfc3RhY2soc3RhY2spOgotICAgICAgICBfbG9nLmVycm9yKCdGaWxlOiAiJXMi
LCBsaW5lICVkLCBpbiAlcycgJSAoZmlsZW5hbWUsIGxpbmVubywgbmFtZSkpCisgICAgICAgIGxv
Z2dlcignRmlsZTogIiVzIiwgbGluZSAlZCwgaW4gJXMnICUgKGZpbGVuYW1lLCBsaW5lbm8sIG5h
bWUpKQogICAgICAgICBpZiBsaW5lOgotICAgICAgICAgICAgX2xvZy5lcnJvcignICAlcycgJSBs
aW5lLnN0cmlwKCkpCisgICAgICAgICAgICBsb2dnZXIoJyAgJXMnICUgbGluZS5zdHJpcCgpKQog
CiAKIGRlZiBfcHJvY2Vzc19vdXRwdXQocG9ydCwgb3B0aW9ucywgdGVzdF9pbmZvLCB0ZXN0X3R5
cGVzLCB0ZXN0X2FyZ3MsCkBAIC0yMjYsMTAgKzIyNiw2IEBAIGNsYXNzIFdhdGNoYWJsZVRocmVh
ZCh0aHJlYWRpbmcuVGhyZWFkKToKICAgICAgICAgIiIiU2V0IGEgZmxhZyB0ZWxsaW5nIHRoaXMg
dGhyZWFkIHRvIHF1aXQuIiIiCiAgICAgICAgIHNlbGYuX2NhbmNlbGVkID0gVHJ1ZQogCi0gICAg
ZGVmIGNsZWFyX25leHRfdGltZW91dChzZWxmKToKLSAgICAgICAgIiIiTWFyayBhIGZsYWcgdGVs
bGluZyB0aGlzIHRocmVhZCB0byBzdG9wIHNldHRpbmcgdGltZW91dHMuIiIiCi0gICAgICAgIHNl
bGYuX3RpbWVvdXQgPSAwCi0KICAgICBkZWYgZXhjZXB0aW9uX2luZm8oc2VsZik6CiAgICAgICAg
ICIiIklmIHJ1bigpIHRlcm1pbmF0ZWQgb24gYW4gdW5jYXVnaHQgZXhjZXB0aW9uLCByZXR1cm4g
aXQgaGVyZQogICAgICAgICAoKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spIHR1cGxlKS4KQEAgLTI0
NywxMSArMjQzLDE0IEBAIGNsYXNzIFdhdGNoYWJsZVRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToK
IAogCiBjbGFzcyBUZXN0U2hlbGxUaHJlYWQoV2F0Y2hhYmxlVGhyZWFkKToKLSAgICBkZWYgX19p
bml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucywgZmlsZW5hbWVfbGlzdF9xdWV1ZSwgcmVzdWx0X3F1
ZXVlLAotICAgICAgICAgICAgICAgICB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MpOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCB3b3JrZXJfbnVtYmVyLCBydW5uZXIsIHBvcnQsIG9wdGlvbnMsCisgICAg
ICAgICAgICAgICAgIGZpbGVuYW1lX2xpc3RfcXVldWUsIHJlc3VsdF9xdWV1ZSwgdGVzdF90eXBl
cywgdGVzdF9hcmdzKToKICAgICAgICAgIiIiSW5pdGlhbGl6ZSBhbGwgdGhlIGxvY2FsIHN0YXRl
IGZvciB0aGlzIER1bXBSZW5kZXJUcmVlIHRocmVhZC4KIAogICAgICAgICBBcmdzOgorICAgICAg
ICAgIHdvcmtlcl9udW1iZXI6IChmcm9tIDAuLm9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKQorICAg
ICAgICAgIHJ1bm5lcjogaGFuZGxlIHRvIFRlc3RSdW5uZXIgKG1hc3RlciB0aHJlYWQpIHVzZWQg
dG8gbm90aWZ5IG9mCisgICAgICAgICAgICAgIHRocmVhZCBzdGFydHVwL3NodXRkb3duCiAgICAg
ICAgICAgcG9ydDogaW50ZXJmYWNlIHRvIHBvcnQtc3BlY2lmaWMgaG9va3MKICAgICAgICAgICBv
cHRpb25zOiBjb21tYW5kIGxpbmUgb3B0aW9ucyBhcmd1bWVudCBmcm9tIG9wdHBhcnNlCiAgICAg
ICAgICAgZmlsZW5hbWVfbGlzdF9xdWV1ZTogQSB0aHJlYWQgc2FmZSBRdWV1ZSBjbGFzcyB0aGF0
IGNvbnRhaW5zIGxpc3RzCkBAIC0yNjQsMTMgKzI2MywxNiBAQCBjbGFzcyBUZXN0U2hlbGxUaHJl
YWQoV2F0Y2hhYmxlVGhyZWFkKToKIAogICAgICAgICAiIiIKICAgICAgICAgV2F0Y2hhYmxlVGhy
ZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX3J1bm5lciA9IHJ1bm5lcgogICAgICAg
ICBzZWxmLl9wb3J0ID0gcG9ydAogICAgICAgICBzZWxmLl9vcHRpb25zID0gb3B0aW9ucwogICAg
ICAgICBzZWxmLl9maWxlbmFtZV9saXN0X3F1ZXVlID0gZmlsZW5hbWVfbGlzdF9xdWV1ZQogICAg
ICAgICBzZWxmLl9yZXN1bHRfcXVldWUgPSByZXN1bHRfcXVldWUKLSAgICAgICAgc2VsZi5fZmls
ZW5hbWVfbGlzdCA9IFtdCiAgICAgICAgIHNlbGYuX3Rlc3RfdHlwZXMgPSB0ZXN0X3R5cGVzCiAg
ICAgICAgIHNlbGYuX3Rlc3RfYXJncyA9IHRlc3RfYXJncworCisgICAgICAgIHNlbGYuc2V0TmFt
ZSgiV29ya2VyLSVkIiAlICh3b3JrZXJfbnVtYmVyICsgMSkpCisgICAgICAgIHNlbGYuX2ZpbGVu
YW1lX2xpc3QgPSBbXQogICAgICAgICBzZWxmLl9kcml2ZXIgPSBOb25lCiAgICAgICAgIHNlbGYu
X3Rlc3RfZ3JvdXBfdGltaW5nX3N0YXRzID0ge30KICAgICAgICAgc2VsZi5fdGVzdF9yZXN1bHRz
ID0gW10KQEAgLTMyMCwxOCArMzIyLDIxIEBAIGNsYXNzIFRlc3RTaGVsbFRocmVhZChXYXRjaGFi
bGVUaHJlYWQpOgogICAgICAgICBzZWxmLl9zdGFydF90aW1lID0gdGltZS50aW1lKCkKICAgICAg
ICAgc2VsZi5fbnVtX3Rlc3RzID0gMAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBfbG9nLmRl
YnVnKCclcyBzdGFydGluZycgJSAoc2VsZi5nZXROYW1lKCkpKQorICAgICAgICAgICAgc2VsZi5f
cnVubmVyLm5vdGlmeV90aHJlYWRfc3RhcnQoc2VsZikKICAgICAgICAgICAgIHNlbGYuX3J1bih0
ZXN0X3J1bm5lcj1Ob25lLCByZXN1bHRfc3VtbWFyeT1Ob25lKQotICAgICAgICAgICAgX2xvZy5k
ZWJ1ZygnJXMgZG9uZSAoJWQgdGVzdHMpJyAlIChzZWxmLmdldE5hbWUoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5nZXRfbnVtX3Rlc3RzKCkpKQorICAgICAgICAgICAgc2VsZi5fcnVu
bmVyLm5vdGlmeV90aHJlYWRfc3RvcChzZWxmLAorICAgICAgICAgICAgICAgIEZhbHNlLCAiZG9u
ZSAoJWQgdGVzdHMpIiAlIHNlbGYuZ2V0X251bV90ZXN0cygpKQogICAgICAgICBleGNlcHQgS2V5
Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgICAgICBzZWxmLl9leGNlcHRpb25faW5mbyA9IHN5cy5l
eGNfaW5mbygpCi0gICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBpbnRlcnJ1cHRlZCIgJSBzZWxm
LmdldE5hbWUoKSkKKyAgICAgICAgICAgIHNlbGYuX3J1bm5lci5ub3RpZnlfdGhyZWFkX3N0b3Ao
c2VsZiwgRmFsc2UsICJpbnRlcnJ1cHRlZCIpCiAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAg
ICMgU2F2ZSB0aGUgZXhjZXB0aW9uIGZvciBvdXIgY2FsbGVyIHRvIHNlZS4KLSAgICAgICAgICAg
IHNlbGYuX2V4Y2VwdGlvbl9pbmZvID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgICMgTG9n
IHRoZSBleGNlcHRpb24gYW5kIHRoZW4gc2F2ZSBpdCBmb3IgdGhlIFRlc3RSdW5uZXIgdG8gZmlu
ZC4KICAgICAgICAgICAgIHNlbGYuX3N0b3BfdGltZSA9IHRpbWUudGltZSgpCi0gICAgICAgICAg
ICBfbG9nLmVycm9yKCclcyBkeWluZywgZXhjZXB0aW9uIHJhaXNlZCcgJSBzZWxmLmdldE5hbWUo
KSkKKyAgICAgICAgICAgIGV4YyA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICBmb3IgcyBp
biB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbihleGNbMF0sIGV4Y1sxXSwgZXhjWzJdKToKKyAg
ICAgICAgICAgICAgICBfbG9nLmVycm9yKHMucnN0cmlwKCkpCisgICAgICAgICAgICBzZWxmLl9l
eGNlcHRpb25faW5mbyA9IGV4YworICAgICAgICAgICAgc2VsZi5fcnVubmVyLm5vdGlmeV90aHJl
YWRfc3RvcChzZWxmLCBUcnVlLCAiZXhjZXB0aW9uIHJhaXNlZCIpCiAKICAgICAgICAgc2VsZi5f
c3RvcF90aW1lID0gdGltZS50aW1lKCkKIApAQCAtNDkzLDExICs0OTgsMTMgQEAgY2xhc3MgVGVz
dFNoZWxsVGhyZWFkKFdhdGNoYWJsZVRocmVhZCk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAg
IHJlc3VsdCA9IHdvcmtlci5nZXRfdGVzdF9yZXN1bHQoKQogICAgICAgICBleGNlcHQgQXR0cmli
dXRlRXJyb3IsIGU6Ci0gICAgICAgICAgICAjIFRoaXMgZ2V0cyByYWlzZWQgaWYgdGhlIHdvcmtl
ciB0aHJlYWQgaGFzIGFscmVhZHkgZXhpdGVkLgorICAgICAgICAgICAgIyBUaGlzIGdldHMgcmFp
c2VkIGlmIHRoZSB3b3JrZXIgdGhyZWFkIGhhcyBhbHJlYWR5IGV4aXRlZCwKKyAgICAgICAgICAg
ICMgd2hpY2ggaGFwcGVucyB3aGVuIHdlIGtpbGwgaXQgYWZ0ZXIgYSB0ZXN0IHRpbWVzIG91dC4K
ICAgICAgICAgICAgIGZhaWx1cmVzID0gW10KICAgICAgICAgICAgIF9sb2cuZXJyb3IoJ0Nhbm5v
dCBnZXQgcmVzdWx0cyBvZiB0ZXN0OiAlcycgJQogICAgICAgICAgICAgICAgICAgICAgICB0ZXN0
X2luZm8uZmlsZW5hbWUpCi0gICAgICAgICAgICByZXN1bHQgPSBUZXN0UmVzdWx0KHRlc3RfaW5m
by5maWxlbmFtZSwgZmFpbHVyZXM9W10sCisgICAgICAgICAgICByZXN1bHQgPSBUZXN0UmVzdWx0
KHRlc3RfaW5mby5maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFp
bHVyZXM9W3Rlc3RfZmFpbHVyZXMuRmFpbHVyZVRpbWVvdXQoKV0sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRlc3RfcnVuX3RpbWU9MCwgdG90YWxfdGltZV9mb3JfYWxsX2RpZmZz
PTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVfZm9yX2RpZmZzPTApCiAK
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHMucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4IDljYzc4OTVmM2FhOGUzOGE3YTYxMzM4MTk4
MDYyYTY1ZjIzYzZjOTQuLjU5MDI0YTYyOWYzNGI5N2VlMmRhMzg4ZjZkYTM2YjdhMGNjOThkZGQg
MTAwNzU1Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHMucHkKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtNjEsNiArNjEsNyBAQCBpbXBvcnQgcmUK
IGltcG9ydCBzaHV0aWwKIGltcG9ydCBzaWduYWwKIGltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRp
bmcKIGltcG9ydCB0aW1lCiBpbXBvcnQgdHJhY2ViYWNrCiAKQEAgLTc2LDYgKzc3LDcgQEAgZnJv
bSB0ZXN0X3R5cGVzIGltcG9ydCB0ZXN0X3R5cGVfYmFzZQogCiBmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0gaW1wb3J0IHVzZXIKIGZyb20gd2Via2l0cHkudGhpcmRwYXJ0eSBpbXBvcnQgc2lt
cGxlanNvbgorZnJvbSB3ZWJraXRweS50b29sIGltcG9ydCBncmFtbWFyCiAKIGltcG9ydCBwb3J0
CiAKQEAgLTIzNSw2ICsyMzcsMTAgQEAgZGVmIHN1bW1hcml6ZV91bmV4cGVjdGVkX3Jlc3VsdHMo
cG9ydF9vYmosIGV4cGVjdGF0aW9ucywgcmVzdWx0X3N1bW1hcnksCiAgICAgcmV0dXJuIHJlc3Vs
dHMKIAogCitjbGFzcyBXZWRnZWRFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKwog
Y2xhc3MgVGVzdFJ1bm5lcjoKICAgICAiIiJBIGNsYXNzIGZvciBtYW5hZ2luZyBydW5uaW5nIGEg
c2VyaWVzIG9mIHRlc3RzIG9uIGEgc2VyaWVzIG9mIGxheW91dAogICAgIHRlc3QgZmlsZXMuIiIi
CkBAIC0yNDcsMTcgKzI1MywxOSBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICMgaW4gRHVtcFJl
bmRlclRyZWUuCiAgICAgREVGQVVMVF9URVNUX1RJTUVPVVRfTVMgPSA2ICogMTAwMAogCi0gICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMsIHByaW50ZXIpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBwb3J0LCBvcHRpb25zLCBwcmludGVyLCBudW1fd29ya2Vycyk6CiAgICAgICAg
ICIiIkluaXRpYWxpemUgdGVzdCBydW5uZXIgZGF0YSBzdHJ1Y3R1cmVzLgogCiAgICAgICAgIEFy
Z3M6CiAgICAgICAgICAgcG9ydDogYW4gb2JqZWN0IGltcGxlbWVudGluZyBwb3J0LXNwZWNpZmlj
CiAgICAgICAgICAgb3B0aW9uczogYSBkaWN0aW9uYXJ5IG9mIGNvbW1hbmQgbGluZSBvcHRpb25z
CiAgICAgICAgICAgcHJpbnRlcjogYSBQcmludGVyIG9iamVjdCB0byByZWNvcmQgdXBkYXRlcyB0
by4KKyAgICAgICAgICBudW1fd29ya2VyczogbnVtYmVyIG9mIGNoaWxkIHRocmVhZHMvd29ya2Vy
cyB0byB1c2UKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAg
IHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCiAgICAgICAgIHNlbGYuX3ByaW50ZXIgPSBwcmludGVy
CisgICAgICAgIHNlbGYuX251bV93b3JrZXJzID0gbnVtX3dvcmtlcnMKIAogICAgICAgICAjIGRp
c2FibGUgd3NzIHNlcnZlci4gbmVlZCB0byBpbnN0YWxsIHB5T3BlblNTTCBvbiBidWlsZGJvdHMu
CiAgICAgICAgICMgc2VsZi5fd2Vic29ja2V0X3NlY3VyZV9zZXJ2ZXIgPSB3ZWJzb2NrZXRfc2Vy
dmVyLlB5V2ViU29ja2V0KApAQCAtMjc0LDYgKzI4Miw5IEBAIGNsYXNzIFRlc3RSdW5uZXI6CiAg
ICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZSA9IFF1ZXVlLlF1ZXVlKCkKICAgICAgICAgc2VsZi5f
cmV0cnlpbmcgPSBGYWxzZQogCisgICAgICAgICMgQW55IGV4Y2VwdGlvbiByYWlzZWQgZHVyaW5n
IHRoZSBtYWluIHJ1bgorICAgICAgICBzZWxmLl9leGNlcHRpb24gPSBOb25lCisKICAgICBkZWYg
Y29sbGVjdF90ZXN0cyhzZWxmLCBhcmdzLCBsYXN0X3VuZXhwZWN0ZWRfcmVzdWx0cyk6CiAgICAg
ICAgICIiIkZpbmQgYWxsIHRoZSBmaWxlcyB0byB0ZXN0LgogCkBAIC01NjUsMTMgKzU3NiwxMyBA
QCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICAgICAgZmlsZW5hbWVfcXVldWUucHV0KGl0ZW0p
CiAgICAgICAgIHJldHVybiBmaWxlbmFtZV9xdWV1ZQogCi0gICAgZGVmIF9nZXRfdGVzdF9hcmdz
KHNlbGYsIGluZGV4KToKKyAgICBkZWYgX2dldF90ZXN0X2FyZ3Moc2VsZiwgd29ya2VyX251bWJl
cik6CiAgICAgICAgICIiIlJldHVybnMgdGhlIHR1cGxlIG9mIGFyZ3VtZW50cyBmb3IgdGVzdHMg
YW5kIGZvciBEdW1wUmVuZGVyVHJlZS4iIiIKICAgICAgICAgdGVzdF9hcmdzID0gdGVzdF90eXBl
X2Jhc2UuVGVzdEFyZ3VtZW50cygpCiAgICAgICAgIHRlc3RfYXJncy5wbmdfcGF0aCA9IE5vbmUK
ICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0czoKICAgICAgICAgICAgIHBuZ19w
YXRoID0gb3MucGF0aC5qb2luKHNlbGYuX29wdGlvbnMucmVzdWx0c19kaXJlY3RvcnksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG5nX3Jlc3VsdCVzLnBuZyIgJSBpbmRl
eCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwbmdfcmVzdWx0JXMucG5n
IiAlIHdvcmtlcl9udW1iZXIpCiAgICAgICAgICAgICB0ZXN0X2FyZ3MucG5nX3BhdGggPSBwbmdf
cGF0aAogICAgICAgICB0ZXN0X2FyZ3MubmV3X2Jhc2VsaW5lID0gc2VsZi5fb3B0aW9ucy5uZXdf
YmFzZWxpbmUKICAgICAgICAgdGVzdF9hcmdzLnJlc2V0X3Jlc3VsdHMgPSBzZWxmLl9vcHRpb25z
LnJlc2V0X3Jlc3VsdHMKQEAgLTU4NCwxMDcgKzU5NSwxNjUgQEAgY2xhc3MgVGVzdFJ1bm5lcjoK
ICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICByZXR1cm4gRmFsc2UKIAotICAg
IGRlZiBfaW5zdGFudGlhdGVfZHVtcF9yZW5kZXJfdHJlZV90aHJlYWRzKHNlbGYsIHRlc3RfZmls
ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
X3N1bW1hcnkpOgotICAgICAgICAiIiJJbnN0YW50aXRhdGVzIGFuZCBzdGFydHMgdGhlIFRlc3RT
aGVsbFRocmVhZChzKS4KLQotICAgICAgICBSZXR1cm46Ci0gICAgICAgICAgVGhlIGxpc3Qgb2Yg
dGhyZWFkcy4KLSAgICAgICAgIiIiCi0gICAgICAgIGZpbGVuYW1lX3F1ZXVlID0gc2VsZi5fZ2V0
X3Rlc3RfZmlsZV9xdWV1ZSh0ZXN0X2ZpbGVzKQotCi0gICAgICAgICMgSW5zdGFudGlhdGUgVGVz
dFNoZWxsVGhyZWFkcyBhbmQgc3RhcnQgdGhlbS4KLSAgICAgICAgdGhyZWFkcyA9IFtdCi0gICAg
ICAgIGZvciBpIGluIHhyYW5nZShpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpKToK
LSAgICAgICAgICAgICMgQ3JlYXRlIHNlcGFyYXRlIFRlc3RUeXBlcyBpbnN0YW5jZXMgZm9yIGVh
Y2ggdGhyZWFkLgotICAgICAgICAgICAgdGVzdF90eXBlcyA9IFtdCi0gICAgICAgICAgICBmb3Ig
dGVzdF90eXBlIGluIHNlbGYuX3Rlc3RfdHlwZXM6Ci0gICAgICAgICAgICAgICAgdGVzdF90eXBl
cy5hcHBlbmQodGVzdF90eXBlKHNlbGYuX3BvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KSkKLQotICAgICAgICAg
ICAgdGVzdF9hcmdzID0gc2VsZi5fZ2V0X3Rlc3RfYXJncyhpKQotICAgICAgICAgICAgdGhyZWFk
ID0gZHVtcF9yZW5kZXJfdHJlZV90aHJlYWQuVGVzdFNoZWxsVGhyZWFkKHNlbGYuX3BvcnQsCi0g
ICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucywgZmlsZW5hbWVfcXVldWUsIHNlbGYuX3Jlc3Vs
dF9xdWV1ZSwKLSAgICAgICAgICAgICAgICB0ZXN0X3R5cGVzLCB0ZXN0X2FyZ3MpCi0gICAgICAg
ICAgICBpZiBzZWxmLl9pc19zaW5nbGVfdGhyZWFkZWQoKToKLSAgICAgICAgICAgICAgICB0aHJl
YWQucnVuX2luX21haW5fdGhyZWFkKHNlbGYsIHJlc3VsdF9zdW1tYXJ5KQotICAgICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgICAgICB0aHJlYWQuc3RhcnQoKQotICAgICAgICAgICAgdGhyZWFk
cy5hcHBlbmQodGhyZWFkKQotCi0gICAgICAgIHJldHVybiB0aHJlYWRzCi0KICAgICBkZWYgX2lz
X3NpbmdsZV90aHJlYWRlZChzZWxmKToKICAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHdlIHNo
b3VsZCBydW4gYWxsIHRoZSB0ZXN0cyBpbiB0aGUgbWFpbiB0aHJlYWQuIiIiCi0gICAgICAgIHJl
dHVybiBpbnQoc2VsZi5fb3B0aW9ucy5jaGlsZF9wcm9jZXNzZXMpID09IDEKKyAgICAgICAgcmV0
dXJuIHNlbGYuX251bV93b3JrZXJzID09IDEKIAogICAgIGRlZiBfcnVuX3Rlc3RzKHNlbGYsIGZp
bGVfbGlzdCwgcmVzdWx0X3N1bW1hcnkpOgogICAgICAgICAiIiJSdW5zIHRoZSB0ZXN0cyBpbiB0
aGUgZmlsZV9saXN0LgogCi0gICAgICAgIFJldHVybjogQSB0dXBsZSAoa2V5Ym9hcmRfaW50ZXJy
dXB0ZWQsIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCisgICAgICAgIEFyZ3M6CisgICAg
ICAgICAgICBmaWxlX2xpc3Q6IGxpc3Qgb2YgdGVzdHMgdG8gcnVuCisgICAgICAgICAgICByZXN1
bHRfc3VtbWFyeTogc3VtbWFyeSBvYmplY3QgdG8gcG9wdWxhdGUgd2l0aCB0aGUgcmVzdWx0cwor
ICAgICAgICBSZXR1cm46IEEgdHVwbGUgKHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsCiAg
ICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGltaW5ncykKLSAgICAgICAgICAgIGtleWJvYXJk
X2ludGVycnVwdGVkIGlzIHdoZXRoZXIgc29tZW9uZSB0eXBlZCBDdHJsXkMKICAgICAgICAgICAg
IHRocmVhZF90aW1pbmdzIGlzIGEgbGlzdCBvZiBkaWN0cyB3aXRoIHRoZSB0b3RhbCBydW50aW1l
CiAgICAgICAgICAgICAgIG9mIGVhY2ggdGhyZWFkIHdpdGggJ25hbWUnLCAnbnVtX3Rlc3RzJywg
J3RvdGFsX3RpbWUnIHByb3BlcnRpZXMKICAgICAgICAgICAgIHRlc3RfdGltaW5ncyBpcyBhIGxp
c3Qgb2YgdGltaW5ncyBmb3IgZWFjaCBzaGFyZGVkIHN1YmRpcmVjdG9yeQogICAgICAgICAgICAg
ICBvZiB0aGUgZm9ybSBbdGltZSwgZGlyZWN0b3J5X25hbWUsIG51bV90ZXN0c10KICAgICAgICAg
ICAgIGluZGl2aWR1YWxfdGVzdF90aW1pbmdzIGlzIGEgbGlzdCBvZiBydW4gdGltZXMgZm9yIGVh
Y2ggdGVzdAogICAgICAgICAgICAgICBpbiB0aGUgZm9ybSB7ZmlsZW5hbWU6ZmlsZW5hbWUsIHRl
c3RfcnVuX3RpbWU6dGVzdF9ydW5fdGltZX0KLSAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5OiBz
dW1tYXJ5IG9iamVjdCB0byBwb3B1bGF0ZSB3aXRoIHRoZSByZXN1bHRzCiAgICAgICAgICIiIgot
ICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgdXNlIHdlYmtpdHB5LnRvb2wuZ3JhbW1hci5wbHVy
YWxpemUgaGVyZS4KLSAgICAgICAgcGx1cmFsID0gIiIKLSAgICAgICAgaWYgbm90IHNlbGYuX2lz
X3NpbmdsZV90aHJlYWRlZCgpOgotICAgICAgICAgICAgcGx1cmFsID0gInMiCi0gICAgICAgIHNl
bGYuX3ByaW50ZXIucHJpbnRfdXBkYXRlKCdTdGFydGluZyAlcyVzIC4uLicgJQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fcG9ydC5kcml2ZXJfbmFtZSgpLCBwbHVy
YWwpKQotICAgICAgICB0aHJlYWRzID0gc2VsZi5faW5zdGFudGlhdGVfZHVtcF9yZW5kZXJfdHJl
ZV90aHJlYWRzKGZpbGVfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfc3VtbWFyeSkKLSAgICAgICAgc2VsZi5f
cHJpbnRlci5wcmludF91cGRhdGUoIlN0YXJ0aW5nIHRlc3RpbmcgLi4uIikKLQotICAgICAgICBr
ZXlib2FyZF9pbnRlcnJ1cHRlZCA9IHNlbGYuX3dhaXRfZm9yX3RocmVhZHNfdG9fZmluaXNoKHRo
cmVhZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0X3N1bW1hcnkpCisgICAgICAgIHNlbGYuX3ByaW50ZXIucHJp
bnRfdXBkYXRlKCdTdGFydGluZyAlcyAuLi4nICUKKyAgICAgICAgICAgIGdyYW1tYXIucGx1cmFs
aXplKHNlbGYuX3BvcnQuZHJpdmVyX25hbWUoKSwgc2VsZi5fbnVtX3dvcmtlcnMpKQorCisgICAg
ICAgIGZpbGVuYW1lX3F1ZXVlID0gc2VsZi5fZ2V0X3Rlc3RfZmlsZV9xdWV1ZShmaWxlX2xpc3Qp
CisgICAgICAgIGlmIHNlbGYuX2lzX3NpbmdsZV90aHJlYWRlZCgpOgorICAgICAgICAgICAgdGhy
ZWFkcyA9IHNlbGYuX3J1bl90ZXN0c19pbl9vbmVfdGhyZWFkKGZpbGVuYW1lX3F1ZXVlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9z
dW1tYXJ5KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGhyZWFkcyA9IHNlbGYuX3J1bl90
ZXN0c19pbl9tdWx0aXBsZV90aHJlYWRzKGZpbGVuYW1lX3F1ZXVlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5
KQorCiAgICAgICAgICh0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLCBpbmRpdmlkdWFsX3Rl
c3RfdGltaW5ncykgPSBcCiAgICAgICAgICAgICBzZWxmLl9jb2xsZWN0X3RpbWluZ19pbmZvKHRo
cmVhZHMpCiAKLSAgICAgICAgcmV0dXJuIChrZXlib2FyZF9pbnRlcnJ1cHRlZCwgdGhyZWFkX3Rp
bWluZ3MsIHRlc3RfdGltaW5ncywKLSAgICAgICAgICAgICAgICBpbmRpdmlkdWFsX3Rlc3RfdGlt
aW5ncykKKyAgICAgICAgcmV0dXJuICh0aHJlYWRfdGltaW5ncywgdGVzdF90aW1pbmdzLCBpbmRp
dmlkdWFsX3Rlc3RfdGltaW5ncykKKworICAgIGRlZiBfcnVuX3Rlc3RzX2luX29uZV90aHJlYWQo
c2VsZiwgZmlsZV9saXN0LCByZXN1bHRfc3VtbWFyeSk6CisgICAgICAgIHRocmVhZCA9IHNlbGYu
X2luc3RhbnRpYXRlX3RocmVhZCgxLCBmaWxlX2xpc3QpCisgICAgICAgIHRocmVhZHMgPSBbdGhy
ZWFkXQorICAgICAgICB0aHJlYWQucnVuX2luX21haW5fdGhyZWFkKHNlbGYsIHJlc3VsdF9zdW1t
YXJ5KQorICAgICAgICByZXR1cm4gdGhyZWFkcworCisgICAgZGVmIF9ydW5fdGVzdHNfaW5fbXVs
dGlwbGVfdGhyZWFkcyhzZWxmLCBmaWxlbmFtZV9xdWV1ZSwgcmVzdWx0X3N1bW1hcnkpOgorICAg
ICAgICAjIFRoaXMgcm91dGluZSBzcGF3bnMgbXVsdGlwbGUgdGhyZWFkcyBhbmQgc3luY2hyb25p
emVzIHdpdGgKKyAgICAgICAgIyB0aGVtIHVzaW5nIGEgY29uZGl0aW9uIHZhcmlhYmxlIHNvIHRo
YXQgd2Uga25vdyB3aGVuIHRoZXkndmUKKyAgICAgICAgIyBhbGwgc3RhcnRlZCB1cCBhbmQgd2Ug
Y2FuIHN0YXJ0IG1vbml0b3JpbmcgdGhlaXIgcHJvZ3Jlc3MuCisgICAgICAgICMgKFRoZSB0aHJl
YWRzIG5vdGlmeSB0aGUgY29uZGl0aW9uIHZhcmlhYmxlIGluCisgICAgICAgICMgVGVzdFNoZWxs
VGhyZWFkLl9jb3ZlcmVkIHJ1bigpIHVzaW5nCisgICAgICAgICMgVGVzdFJ1bm5lci5ub3RpZnlf
dGhyZWFkX3N0YXJ0KCkpLgorICAgICAgICBzZWxmLl9wcmludGVyLnByaW50X3VwZGF0ZSgiV2Fp
dGluZyBmb3Igd29ya2VycyB0byBzdGFydCB1cCAuLi4iKQorICAgICAgICBzZWxmLl9jdiA9IHRo
cmVhZGluZy5Db25kaXRpb24oKQorICAgICAgICBzZWxmLl9jdi5hY3F1aXJlKCkKKyAgICAgICAg
c2VsZi5fbm90X3N0YXJ0ZWQgPSBzZWxmLl9udW1fd29ya2VycworCisgICAgICAgIHRocmVhZHMg
PSBbXQorICAgICAgICBmb3Igd29ya2VyX251bWJlciBpbiB4cmFuZ2Uoc2VsZi5fbnVtX3dvcmtl
cnMpOgorICAgICAgICAgICAgdGhyZWFkID0gc2VsZi5faW5zdGFudGlhdGVfdGhyZWFkKHdvcmtl
cl9udW1iZXIsIGZpbGVuYW1lX3F1ZXVlKQorICAgICAgICAgICAgdGhyZWFkLnN0YXJ0KCkKKyAg
ICAgICAgICAgIHRocmVhZHMuYXBwZW5kKHRocmVhZCkKKworICAgICAgICBzZWxmLl9jdi53YWl0
KCkKKyAgICAgICAgX2xvZy5kZWJ1ZygiV29ya2VycyBzdGFydGVkLCB3YWl0aW5nIGZvciB0aGVt
IHRvIGZpbmlzaC4iKQorICAgICAgICBzZWxmLl9jdi5yZWxlYXNlKCkKIAotICAgIGRlZiBfd2Fp
dF9mb3JfdGhyZWFkc190b19maW5pc2goc2VsZiwgdGhyZWFkcywgcmVzdWx0X3N1bW1hcnkpOgot
ICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCA9IEZhbHNlCiAgICAgICAgIHRyeToKLSAgICAg
ICAgICAgICMgTG9vcCB0aHJvdWdoIGFsbCB0aGUgdGhyZWFkcyB3YWl0aW5nIGZvciB0aGVtIHRv
IGZpbmlzaC4KLSAgICAgICAgICAgIHNvbWVfdGhyZWFkX2lzX2FsaXZlID0gVHJ1ZQotICAgICAg
ICAgICAgd2hpbGUgc29tZV90aHJlYWRfaXNfYWxpdmU6Ci0gICAgICAgICAgICAgICAgc29tZV90
aHJlYWRfaXNfYWxpdmUgPSBGYWxzZQotICAgICAgICAgICAgICAgIHQgPSB0aW1lLnRpbWUoKQot
ICAgICAgICAgICAgICAgIGZvciB0aHJlYWQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgICAgICAg
ICAgZXhjZXB0aW9uX2luZm8gPSB0aHJlYWQuZXhjZXB0aW9uX2luZm8oKQotICAgICAgICAgICAg
ICAgICAgICBpZiBleGNlcHRpb25faW5mbyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAg
ICAgICAgICMgUmUtcmFpc2UgdGhlIHRocmVhZCdzIGV4Y2VwdGlvbiBoZXJlIHRvIG1ha2UgaXQK
LSAgICAgICAgICAgICAgICAgICAgICAgICMgY2xlYXIgdGhhdCB0ZXN0aW5nIHdhcyBhYm9ydGVk
LiBPdGhlcndpc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSB0ZXN0cyB0aGF0IGRp
ZCBub3QgcnVuIHdvdWxkIGJlIGFzc3VtZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICMgdG8g
aGF2ZSBwYXNzZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBleGNlcHRpb25faW5m
b1swXSwgZXhjZXB0aW9uX2luZm9bMV0sIGV4Y2VwdGlvbl9pbmZvWzJdCi0KLSAgICAgICAgICAg
ICAgICAgICAgaWYgdGhyZWFkLmlzQWxpdmUoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNv
bWVfdGhyZWFkX2lzX2FsaXZlID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF90
aW1lb3V0ID0gdGhyZWFkLm5leHRfdGltZW91dCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobmV4dF90aW1lb3V0IGFuZCB0ID4gbmV4dF90aW1lb3V0KToKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfbG9nX3dlZGdlZF90aHJlYWQodGhyZWFkKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRocmVhZC5jbGVhcl9uZXh0X3RpbWVvdXQoKQotCi0gICAgICAgICAgICAgICAg
c2VsZi51cGRhdGVfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKLQotICAgICAgICAgICAgICAgIGlm
IHNvbWVfdGhyZWFkX2lzX2FsaXZlOgotICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAu
MDEpCi0KLSAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAga2V5
Ym9hcmRfaW50ZXJydXB0ZWQgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl90aHJl
YWRzX3RvX2ZpbmlzaCh0aHJlYWRzLCByZXN1bHRfc3VtbWFyeSkKKyAgICAgICAgZXhjZXB0IEtl
eWJvYXJkSW50ZXJydXB0LCBlOgorICAgICAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gZQogICAg
ICAgICAgICAgZm9yIHRocmVhZCBpbiB0aHJlYWRzOgogICAgICAgICAgICAgICAgIHRocmVhZC5j
YW5jZWwoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uLCBlOgorICAgICAgICAgICAgc2VsZi5f
ZXhjZXB0aW9uID0gZQogCi0gICAgICAgIHJldHVybiBrZXlib2FyZF9pbnRlcnJ1cHRlZAorICAg
ICAgICByZXR1cm4gdGhyZWFkcworCisgICAgZGVmIF9pbnN0YW50aWF0ZV90aHJlYWQoc2VsZiwg
d29ya2VyX251bWJlciwgZmlsZW5hbWVfcXVldWUpOgorICAgICAgICAiIiJJbnN0YW50aWF0ZXMg
YSBzaW5nbGUgdGhyZWFkLiIiIgorICAgICAgICAjIENyZWF0ZSBzZXBhcmF0ZSBUZXN0VHlwZXMg
aW5zdGFuY2VzIGZvciBlYWNoIHRocmVhZC4KKworICAgICAgICB0ZXN0X3R5cGVzID0gW10KKyAg
ICAgICAgZm9yIHRlc3RfdHlwZSBpbiBzZWxmLl90ZXN0X3R5cGVzOgorICAgICAgICAgICAgdGVz
dF90eXBlcy5hcHBlbmQodGVzdF90eXBlKHNlbGYuX3BvcnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9vcHRpb25zLnJlc3VsdHNfZGlyZWN0b3J5KSkKKworICAgICAgICB0
ZXN0X2FyZ3MgPSBzZWxmLl9nZXRfdGVzdF9hcmdzKHdvcmtlcl9udW1iZXIpCisgICAgICAgIHJl
dHVybiBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5UZXN0U2hlbGxUaHJlYWQod29ya2VyX251bWJl
ciwgc2VsZiwKKyAgICAgICAgICAgIHNlbGYuX3BvcnQsIHNlbGYuX29wdGlvbnMsIGZpbGVuYW1l
X3F1ZXVlLCBzZWxmLl9yZXN1bHRfcXVldWUsCisgICAgICAgICAgICB0ZXN0X3R5cGVzLCB0ZXN0
X2FyZ3MpCisKKyAgICBkZWYgbm90aWZ5X3RocmVhZF9zdGFydChzZWxmLCB0aHJlYWQpOgorICAg
ICAgICBfbG9nLmRlYnVnKCclcyBzdGFydGVkJyAlICh0aHJlYWQuZ2V0TmFtZSgpKSkKKyAgICAg
ICAgc2VsZi5fY3YuYWNxdWlyZSgpCisgICAgICAgIHNlbGYuX25vdF9zdGFydGVkIC09IDEKKyAg
ICAgICAgaWYgc2VsZi5fbm90X3N0YXJ0ZWQgPT0gMDoKKyAgICAgICAgICAgIF9sb2cuZGVidWco
Ik5vdGlmeWluZyBtYWluIHRocmVhZCB0aGF0IGFsbCB3b3JrZXJzIGhhdmUgc3RhcnRlZCIpCisg
ICAgICAgICAgICBzZWxmLl9jdi5ub3RpZnkoKQorICAgICAgICBzZWxmLl9jdi5yZWxlYXNlKCkK
KworICAgIGRlZiBub3RpZnlfdGhyZWFkX3N0b3Aoc2VsZiwgdGhyZWFkLCBpc19lcnJvciwgbXNn
KToKKyAgICAgICAgaWYgaXNfZXJyb3I6CisgICAgICAgICAgICBfbG9nLmVycm9yKCIlcyBkeWlu
ZzogJXMiICUgKHRocmVhZC5nZXROYW1lKCksIG1zZykpCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICBfbG9nLmRlYnVnKCIlcyBkb25lOiAlcyIgJSAodGhyZWFkLmdldE5hbWUoKSwgbXNnKSkK
KworICAgIGRlZiBfd2FpdF9mb3JfdGhyZWFkc190b19maW5pc2goc2VsZiwgdGhyZWFkcywgcmVz
dWx0X3N1bW1hcnkpOgorICAgICAgICAjIExvb3AgdGhyb3VnaCBhbGwgdGhlIHRocmVhZHMgd2Fp
dGluZyBmb3IgdGhlbSB0byBmaW5pc2guCisgICAgICAgIHdlZGdlZF90aHJlYWRzID0gW10KKyAg
ICAgICAgd29ya2luZ190aHJlYWRzID0gdGhyZWFkc1s6XQorICAgICAgICBsYXN0X2xvZ190aW1l
ID0gdGltZS50aW1lKCkKKyAgICAgICAgV0FJVElOR19NRVNTQUdFX0lOVEVSVkFMID0gMTAuMCAg
IyBzZWNvbmRzCisgICAgICAgIHdoaWxlIHdvcmtpbmdfdGhyZWFkczoKKyAgICAgICAgICAgIHRo
cmVhZHNfdG9fY2hlY2sgPSB3b3JraW5nX3RocmVhZHMKKyAgICAgICAgICAgIHdvcmtpbmdfdGhy
ZWFkcyA9IFtdCisgICAgICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgZm9y
IHRocmVhZCBpbiB0aHJlYWRzX3RvX2NoZWNrOgorICAgICAgICAgICAgICAgIGV4Y2VwdGlvbl9p
bmZvID0gdGhyZWFkLmV4Y2VwdGlvbl9pbmZvKCkKKyAgICAgICAgICAgICAgICBpZiBleGNlcHRp
b25faW5mbyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgIyBSZS1yYWlzZSB0aGUg
dGhyZWFkJ3MgZXhjZXB0aW9uIGhlcmUgdG8gbWFrZSBpdAorICAgICAgICAgICAgICAgICAgICAj
IGNsZWFyIHRoYXQgdGVzdGluZyB3YXMgYWJvcnRlZC4gT3RoZXJ3aXNlLAorICAgICAgICAgICAg
ICAgICAgICAjIHRoZSB0ZXN0cyB0aGF0IGRpZCBub3QgcnVuIHdvdWxkIGJlIGFzc3VtZWQKKyAg
ICAgICAgICAgICAgICAgICAgIyB0byBoYXZlIHBhc3NlZC4KKyAgICAgICAgICAgICAgICAgICAg
cmFpc2UgZXhjZXB0aW9uX2luZm9bMF0sIGV4Y2VwdGlvbl9pbmZvWzFdLCBleGNlcHRpb25faW5m
b1syXQorCisgICAgICAgICAgICAgICAgaWYgbm90IHRocmVhZC5pc0FsaXZlKCk6CisgICAgICAg
ICAgICAgICAgICAgICMgVGhyZWFkIGV4aXRlZCBub3JtYWxseS4gU2tpcCBpdC4KKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIG5leHRfdGltZW91dCA9IHRo
cmVhZC5uZXh0X3RpbWVvdXQoKQorICAgICAgICAgICAgICAgIGlmIG5leHRfdGltZW91dCBhbmQg
bmV4dF90aW1lb3V0IDwgbm93OgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQodGhyZWFkIG5v
dCBpbiB3ZWRnZWRfdGhyZWFkcykKKyAgICAgICAgICAgICAgICAgICAgX2xvZ193ZWRnZWRfdGhy
ZWFkKHRocmVhZCkKKyAgICAgICAgICAgICAgICAgICAgd2VkZ2VkX3RocmVhZHMuYXBwZW5kKHRo
cmVhZCkKKyAgICAgICAgICAgICAgICAgICAgIyBGb3JjZSBhICJ3YWl0aW5nIiBtZXNzYWdlIHRv
IGJlIGxvZ2dlZC4KKyAgICAgICAgICAgICAgICAgICAgbGFzdF9sb2dfdGltZSA9IG5vdyAtIFdB
SVRJTkdfTUVTU0FHRV9JTlRFUlZBTAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgICAgIHdvcmtpbmdfdGhyZWFkcy5hcHBlbmQodGhyZWFkKQorCisgICAgICAgICAgICBp
ZiB3b3JraW5nX3RocmVhZHM6CisgICAgICAgICAgICAgICAgaWYgbm93ID49IGxhc3RfbG9nX3Rp
bWUgKyBXQUlUSU5HX01FU1NBR0VfSU5URVJWQUw6CisgICAgICAgICAgICAgICAgICAgIG5leHRf
cG90ZW50aWFsX3RpbWVvdXQgPSBtaW4oW3QubmV4dF90aW1lb3V0KCkgZm9yIHQgaW4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JraW5nX3Ro
cmVhZHNdKQorICAgICAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoIiIpCisgICAgICAgICAg
ICAgICAgICAgIF9sb2cud2FybmluZygiV2FpdGluZyBmb3IgJXMgdG8gZmluaXNoLCAiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmV4dCBwb3RlbnRpYWwgdGltZW91dCBp
biAlMy4xZiBzZWNvbmRzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
Z3JhbW1hci5wbHVyYWxpemUoInRocmVhZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHdvcmtpbmdfdGhyZWFkcykpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9wb3RlbnRpYWxfdGltZW91dCAtIG5v
dykpCisgICAgICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygiIikKKyAgICAgICAgICAgICAg
ICAgICAgbGFzdF9sb2dfdGltZSA9IG5vdworICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4w
MSkKKworICAgICAgICAgICAgc2VsZi51cGRhdGVfc3VtbWFyeShyZXN1bHRfc3VtbWFyeSkKKwor
ICAgICAgICBpZiB3ZWRnZWRfdGhyZWFkczoKKyAgICAgICAgICAgIGlmIGxlbih3ZWRnZWRfdGhy
ZWFkcykgPT0gMToKKyAgICAgICAgICAgICAgICBfbG9nLmNyaXRpY2FsKCJUaGUgbGFzdCB0aHJl
YWQgaXMgd2VkZ2VkLCBiYWlsaW5nIG91dFxuIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgX2xvZy5jcml0aWNhbCgiVGhlIGxhc3QgJWQgdGhyZWFkcyBhcmUgd2VkZ2VkLCBi
YWlsaW5nIG91dFxuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4od2VkZ2Vk
X3RocmVhZHMpKQorICAgICAgICAgICAgcmFpc2UgV2VkZ2VkRXhjZXB0aW9uCiAKICAgICBkZWYg
X2NvbGxlY3RfdGltaW5nX2luZm8oc2VsZiwgdGhyZWFkcyk6CiAgICAgICAgIHRlc3RfdGltaW5n
cyA9IHt9CkBAIC03NzIsOCArODQxLDcgQEAgY2xhc3MgVGVzdFJ1bm5lcjoKIAogICAgICAgICBz
dGFydF90aW1lID0gdGltZS50aW1lKCkKIAotICAgICAgICBrZXlib2FyZF9pbnRlcnJ1cHRlZCwg
dGhyZWFkX3RpbWluZ3MsIHRlc3RfdGltaW5ncywgXAotICAgICAgICAgICAgaW5kaXZpZHVhbF90
ZXN0X3RpbWluZ3MgPSAoCisgICAgICAgIHRocmVhZF90aW1pbmdzLCB0ZXN0X3RpbWluZ3MsIGlu
ZGl2aWR1YWxfdGVzdF90aW1pbmdzID0gKAogICAgICAgICAgICAgc2VsZi5fcnVuX3Rlc3RzKHNl
bGYuX3Rlc3RfZmlsZXNfbGlzdCwgcmVzdWx0X3N1bW1hcnkpKQogCiAgICAgICAgICMgV2UgZXhj
bHVkZSB0aGUgY3Jhc2hlcyBmcm9tIHRoZSBsaXN0IG9mIHJlc3VsdHMgdG8gcmV0cnksIGJlY2F1
c2UKQEAgLTc4MSw3ICs4NDksNyBAQCBjbGFzcyBUZXN0UnVubmVyOgogICAgICAgICBmYWlsdXJl
cyA9IHNlbGYuX2dldF9mYWlsdXJlcyhyZXN1bHRfc3VtbWFyeSwgaW5jbHVkZV9jcmFzaGVzPUZh
bHNlKQogICAgICAgICByZXRyeV9zdW1tYXJ5ID0gcmVzdWx0X3N1bW1hcnkKICAgICAgICAgd2hp
bGUgKGxlbihmYWlsdXJlcykgYW5kIHNlbGYuX29wdGlvbnMucmV0cnlfZmFpbHVyZXMgYW5kCi0g
ICAgICAgICAgICBub3Qgc2VsZi5fcmV0cnlpbmcgYW5kIG5vdCBrZXlib2FyZF9pbnRlcnJ1cHRl
ZCk6CisgICAgICAgICAgICBub3Qgc2VsZi5fcmV0cnlpbmcgYW5kIG5vdCBzZWxmLl9leGNlcHRp
b24pOgogICAgICAgICAgICAgX2xvZy5pbmZvKCcnKQogICAgICAgICAgICAgX2xvZy5pbmZvKCJS
ZXRyeWluZyAlZCB1bmV4cGVjdGVkIGZhaWx1cmUocykgLi4uIiAlIGxlbihmYWlsdXJlcykpCiAg
ICAgICAgICAgICBfbG9nLmluZm8oJycpCkBAIC04MjYsMTIgKzg5NCwxMyBAQCBjbGFzcyBUZXN0
UnVubmVyOgogCiAgICAgICAgICMgTm93IHRoYXQgd2UndmUgY29tcGxldGVkIGFsbCB0aGUgcHJv
Y2Vzc2luZyB3ZSBjYW4sIHdlIHJlLXJhaXNlCiAgICAgICAgICMgYSBLZXlib2FyZEludGVycnVw
dCBpZiBuZWNlc3Nhcnkgc28gdGhlIGNhbGxlciBjYW4gaGFuZGxlIGl0LgotICAgICAgICBpZiBr
ZXlib2FyZF9pbnRlcnJ1cHRlZDoKLSAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0
CisgICAgICAgIGlmIHNlbGYuX2V4Y2VwdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuX2V4
Y2VwdGlvbgogCiAgICAgICAgICMgSWdub3JlIGZsYWt5IGZhaWx1cmVzIGFuZCB1bmV4cGVjdGVk
IHBhc3NlcyBzbyB3ZSBkb24ndCB0dXJuIHRoZQogICAgICAgICAjIGJvdCByZWQgZm9yIHRob3Nl
LgotICAgICAgICByZXR1cm4gdW5leHBlY3RlZF9yZXN1bHRzWydudW1fcmVncmVzc2lvbnMnXQor
ICAgICAgICByZXR1cm4gKHVuZXhwZWN0ZWRfcmVzdWx0c1snbnVtX3JlZ3Jlc3Npb25zJ10gKwor
ICAgICAgICAgICAgICAgIHJlc3VsdF9zdW1tYXJ5LnJlbWFpbmluZykKIAogICAgIGRlZiBjbGVh
bl91cF9ydW4oc2VsZik6CiAgICAgICAgICIiIlJlc3RvcmVzIHRoZSBzeXN0ZW0gYWZ0ZXIgd2Un
cmUgZG9uZSBydW5uaW5nIHRlc3RzLiIiIgpAQCAtOTk0LDkgKzEwNjMsOCBAQCBjbGFzcyBUZXN0
UnVubmVyOgogICAgICAgICBpZiBzZWxmLl9pc19zaW5nbGVfdGhyZWFkZWQoKToKICAgICAgICAg
ICAgIHAucHJpbnRfY29uZmlnKCJSdW5uaW5nIG9uZSAlcyIgJSBzZWxmLl9wb3J0LmRyaXZlcl9u
YW1lKCkpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwLnByaW50X2NvbmZpZygiUnVubmlu
ZyAlcyAlc3MgaW4gcGFyYWxsZWwiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxm
Ll9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9wb3J0LmRyaXZlcl9uYW1lKCkpKQorICAgICAgICAgICAgcC5wcmludF9jb25maWcoIlJ1
bm5pbmcgJWQgJXNzIGluIHBhcmFsbGVsIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAo
c2VsZi5fbnVtX3dvcmtlcnMsIHNlbGYuX3BvcnQuZHJpdmVyX25hbWUoKSkpCiAgICAgICAgIHAu
cHJpbnRfY29uZmlnKCIiKQogCiAgICAgZGVmIF9wcmludF9leHBlY3RlZF9yZXN1bHRzX29mX3R5
cGUoc2VsZiwgcmVzdWx0X3N1bW1hcnksCkBAIC0xMDUyLDcgKzExMjAsNyBAQCBjbGFzcyBUZXN0
UnVubmVyOgogICAgICAgICAgICAgICAgICAgKHRbJ25hbWUnXSwgdFsnbnVtX3Rlc3RzJ10sIHRb
J3RvdGFsX3RpbWUnXSkpCiAgICAgICAgICAgICBjdW1sX3RpbWUgKz0gdFsndG90YWxfdGltZSdd
CiAgICAgICAgIHNlbGYuX3ByaW50ZXIucHJpbnRfdGltaW5nKCIgICAlNi4yZiBjdW11bGF0aXZl
LCAlNi4yZiBvcHRpbWFsIiAlCi0gICAgICAgICAgICAgIChjdW1sX3RpbWUsIGN1bWxfdGltZSAv
IGludChzZWxmLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcykpKQorICAgICAgICAgICAgKGN1bWxf
dGltZSwgY3VtbF90aW1lIC8gc2VsZi5fbnVtX3dvcmtlcnMpKQogICAgICAgICBzZWxmLl9wcmlu
dGVyLnByaW50X3RpbWluZygiIikKIAogICAgICAgICBzZWxmLl9wcmludF9hZ2dyZWdhdGVfdGVz
dF9zdGF0aXN0aWNzKGluZGl2aWR1YWxfdGVzdF90aW1pbmdzKQpAQCAtMTM3OSw1NiArMTQ0Nyw2
OSBAQCBkZWYgcnVuKHBvcnQsIG9wdGlvbnMsIGFyZ3MsIHJlZ3VsYXJfb3V0cHV0PXN5cy5zdGRl
cnIsCiAKICAgICAiIiIKICAgICBfc2V0X3VwX2Rlcml2ZWRfb3B0aW9ucyhwb3J0LCBvcHRpb25z
KQorICAgIG51bV93b3JrZXJzID0gaW50KG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKQogCiAgICAg
cHJpbnRlciA9IHByaW50aW5nLlByaW50ZXIocG9ydCwgb3B0aW9ucywgcmVndWxhcl9vdXRwdXQs
IGJ1aWxkYm90X291dHB1dCwKLSAgICAgICAgaW50KG9wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzKSwg
b3B0aW9ucy5leHBlcmltZW50YWxfZnVsbHlfcGFyYWxsZWwpCisgICAgICAgIG51bV93b3JrZXJz
LCBvcHRpb25zLmV4cGVyaW1lbnRhbF9mdWxseV9wYXJhbGxlbCkKKworICAgIHRyeToKKyAgICAg
ICAgcmV0dXJuIF9ydW5fd2l0aF9wcmludGVyKHBvcnQsIG9wdGlvbnMsIHByaW50ZXIsIG51bV93
b3JrZXJzLCBhcmdzKQorICAgIGZpbmFsbHk6CisgICAgICAgIHByaW50ZXIuY2xlYW51cCgpCisK
KworZGVmIF9ydW5fd2l0aF9wcmludGVyKHBvcnQsIG9wdGlvbnMsIHByaW50ZXIsIG51bV93b3Jr
ZXJzLCBhcmdzKToKICAgICBpZiBvcHRpb25zLmhlbHBfcHJpbnRpbmc6CiAgICAgICAgIHByaW50
ZXIuaGVscF9wcmludGluZygpCi0gICAgICAgIHByaW50ZXIuY2xlYW51cCgpCiAgICAgICAgIHJl
dHVybiAwCiAKICAgICBsYXN0X3VuZXhwZWN0ZWRfcmVzdWx0cyA9IF9nYXRoZXJfdW5leHBlY3Rl
ZF9yZXN1bHRzKG9wdGlvbnMpCiAgICAgaWYgb3B0aW9ucy5wcmludF9sYXN0X2ZhaWx1cmVzOgog
ICAgICAgICBwcmludGVyLndyaXRlKCJcbiIuam9pbihsYXN0X3VuZXhwZWN0ZWRfcmVzdWx0cykg
KyAiXG4iKQotICAgICAgICBwcmludGVyLmNsZWFudXAoKQogICAgICAgICByZXR1cm4gMAogCi0g
ICAgIyBXZSB3cmFwIGFueSBwYXJ0cyBvZiB0aGUgcnVuIHRoYXQgYXJlIHNsb3cgb3IgbGlrZWx5
IHRvIHJhaXNlIGV4Y2VwdGlvbnMKLSAgICAjIGluIGEgdHJ5L2ZpbmFsbHkgdG8gZW5zdXJlIHRo
YXQgd2UgY2xlYW4gdXAgdGhlIGxvZ2dpbmcgY29uZmlndXJhdGlvbi4KICAgICBudW1fdW5leHBl
Y3RlZF9yZXN1bHRzID0gLTEKLSAgICB0cnk6Ci0gICAgICAgIHRlc3RfcnVubmVyID0gVGVzdFJ1
bm5lcihwb3J0LCBvcHRpb25zLCBwcmludGVyKQotICAgICAgICB0ZXN0X3J1bm5lci5fcHJpbnRf
Y29uZmlnKCkKKyAgICB0ZXN0X3J1bm5lciA9IFRlc3RSdW5uZXIocG9ydCwgb3B0aW9ucywgcHJp
bnRlciwgbnVtX3dvcmtlcnMpCisgICAgdGVzdF9ydW5uZXIuX3ByaW50X2NvbmZpZygpCiAKLSAg
ICAgICAgcHJpbnRlci5wcmludF91cGRhdGUoIkNvbGxlY3RpbmcgdGVzdHMgLi4uIikKLSAgICAg
ICAgdHJ5OgotICAgICAgICAgICAgdGVzdF9ydW5uZXIuY29sbGVjdF90ZXN0cyhhcmdzLCBsYXN0
X3VuZXhwZWN0ZWRfcmVzdWx0cykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6Ci0gICAgICAg
ICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
LTEKLSAgICAgICAgICAgIHJhaXNlCisgICAgcHJpbnRlci5wcmludF91cGRhdGUoIkNvbGxlY3Rp
bmcgdGVzdHMgLi4uIikKKyAgICB0cnk6CisgICAgICAgIHRlc3RfcnVubmVyLmNvbGxlY3RfdGVz
dHMoYXJncywgbGFzdF91bmV4cGVjdGVkX3Jlc3VsdHMpCisgICAgZXhjZXB0IElPRXJyb3IsIGU6
CisgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgcmV0dXJu
IC0xCisgICAgICAgIHJhaXNlCiAKLSAgICAgICAgcHJpbnRlci5wcmludF91cGRhdGUoIlBhcnNp
bmcgZXhwZWN0YXRpb25zIC4uLiIpCi0gICAgICAgIGlmIG9wdGlvbnMubGludF90ZXN0X2ZpbGVz
OgotICAgICAgICAgICAgcmV0dXJuIHRlc3RfcnVubmVyLmxpbnQoKQotICAgICAgICB0ZXN0X3J1
bm5lci5wYXJzZV9leHBlY3RhdGlvbnMocG9ydC50ZXN0X3BsYXRmb3JtX25hbWUoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29uZmlndXJhdGlvbiA9
PSAnRGVidWcnKQorICAgIHByaW50ZXIucHJpbnRfdXBkYXRlKCJQYXJzaW5nIGV4cGVjdGF0aW9u
cyAuLi4iKQorICAgIGlmIG9wdGlvbnMubGludF90ZXN0X2ZpbGVzOgorICAgICAgICByZXR1cm4g
dGVzdF9ydW5uZXIubGludCgpCisgICAgdGVzdF9ydW5uZXIucGFyc2VfZXhwZWN0YXRpb25zKHBv
cnQudGVzdF9wbGF0Zm9ybV9uYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvcHRpb25zLmNvbmZpZ3VyYXRpb24gPT0gJ0RlYnVnJykKIAotICAgICAgICBwcmludGVy
LnByaW50X3VwZGF0ZSgiQ2hlY2tpbmcgYnVpbGQgLi4uIikKLSAgICAgICAgaWYgbm90IHBvcnQu
Y2hlY2tfYnVpbGQodGVzdF9ydW5uZXIubmVlZHNfaHR0cCgpKToKLSAgICAgICAgICAgIF9sb2cu
ZXJyb3IoIkJ1aWxkIGNoZWNrIGZhaWxlZCIpCi0gICAgICAgICAgICByZXR1cm4gLTEKKyAgICBw
cmludGVyLnByaW50X3VwZGF0ZSgiQ2hlY2tpbmcgYnVpbGQgLi4uIikKKyAgICBpZiBub3QgcG9y
dC5jaGVja19idWlsZCh0ZXN0X3J1bm5lci5uZWVkc19odHRwKCkpOgorICAgICAgICBfbG9nLmVy
cm9yKCJCdWlsZCBjaGVjayBmYWlsZWQiKQorICAgICAgICByZXR1cm4gLTEKIAotICAgICAgICBy
ZXN1bHRfc3VtbWFyeSA9IHRlc3RfcnVubmVyLnNldF91cF9ydW4oKQotICAgICAgICBpZiByZXN1
bHRfc3VtbWFyeToKLSAgICAgICAgICAgIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMgPSB0ZXN0X3J1
bm5lci5ydW4ocmVzdWx0X3N1bW1hcnkpCi0gICAgICAgICAgICB0ZXN0X3J1bm5lci5jbGVhbl91
cF9ydW4oKQotICAgICAgICAgICAgX2xvZy5kZWJ1ZygiVGVzdGluZyBjb21wbGV0ZWQsIEV4aXQg
c3RhdHVzOiAlZCIgJQotICAgICAgICAgICAgICAgICAgICAgICBudW1fdW5leHBlY3RlZF9yZXN1
bHRzKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIHByaW50ZXIuY2xlYW51cCgpCisgICAgcmVzdWx0
X3N1bW1hcnkgPSB0ZXN0X3J1bm5lci5zZXRfdXBfcnVuKCkKKyAgICBpZiBub3QgcmVzdWx0X3N1
bW1hcnk6CisgICAgICAgIHJldHVybiAtMQogCi0gICAgcmV0dXJuIG51bV91bmV4cGVjdGVkX3Jl
c3VsdHMKKyAgICB0cnk6CisgICAgICAgIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMgPSB0ZXN0X3J1
bm5lci5ydW4ocmVzdWx0X3N1bW1hcnkpCisgICAgICAgIHRlc3RfcnVubmVyLmNsZWFuX3VwX3J1
bigpCisgICAgICAgIF9sb2cuZGVidWcoIlRlc3RpbmcgY29tcGxldGVkLCBFeGl0IHN0YXR1czog
JWQiICUKKyAgICAgICAgICAgICAgICAgICAgbnVtX3VuZXhwZWN0ZWRfcmVzdWx0cykKKyAgICAg
ICAgcmV0dXJuIG51bV91bmV4cGVjdGVkX3Jlc3VsdHMKKyAgICBleGNlcHQgS2V5Ym9hcmRJbnRl
cnJ1cHQ6CisgICAgICAgIF9sb2cuaW5mbygiVGVzdGluZyBpbnRlcnJ1cHRlZCIpCisgICAgICAg
IHJhaXNlCisgICAgZXhjZXB0IFdlZGdlZEV4Y2VwdGlvbjoKKyAgICAgICAgX2xvZy5lcnJvcigi
VGVzdGluZyB3ZWRnZWQiKQorICAgICAgICByYWlzZQorICAgIGV4Y2VwdDoKKyAgICAgICAgX2xv
Zy5lcnJvcigiVGVzdGluZyBmYWlsZWQsIHVuZXhwZWN0ZWQgZXhjZXB0aW9uIHJhaXNlZCIpCisg
ICAgICAgIHJhaXNlCiAKIAogZGVmIF9zZXRfdXBfZGVyaXZlZF9vcHRpb25zKHBvcnRfb2JqLCBv
cHRpb25zKToKQEAgLTE3MjAsOCArMTgwMSw4IEBAIGRlZiBfbG9nX3dlZGdlZF90aHJlYWQodGhy
ZWFkKToKICAgICBzdGFjayA9IGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLmZpbmRfdGhyZWFkX3N0
YWNrKGlkKQogICAgIGFzc2VydChzdGFjayBpcyBub3QgTm9uZSkKICAgICBfbG9nLmVycm9yKCIi
KQotICAgIF9sb2cuZXJyb3IoInRocmVhZCAlcyAoJWQpIGlzIHdlZGdlZCIgJSAodGhyZWFkLmdl
dE5hbWUoKSwgaWQpKQotICAgIGR1bXBfcmVuZGVyX3RyZWVfdGhyZWFkLmxvZ19zdGFjayhzdGFj
aykKKyAgICBfbG9nLmVycm9yKCIlcyBpcyB3ZWRnZWQiICUgdGhyZWFkLmdldE5hbWUoKSkKKyAg
ICBkdW1wX3JlbmRlcl90cmVlX3RocmVhZC5sb2dfc3RhY2soc3RhY2ssIF9sb2cuZGVidWcpCiAg
ICAgX2xvZy5lcnJvcigiIikKIAogCkBAIC0xNzMwLDkgKzE4MTEsNyBAQCBkZWYgbWFpbigpOgog
ICAgIHBvcnRfb2JqID0gcG9ydC5nZXQob3B0aW9ucy5wbGF0Zm9ybSwgb3B0aW9ucykKICAgICBy
ZXR1cm4gcnVuKHBvcnRfb2JqLCBvcHRpb25zLCBhcmdzKQogCi1pZiAnX19tYWluX18nID09IF9f
bmFtZV9fOgotICAgIHRyeToKLSAgICAgICAgc3lzLmV4aXQobWFpbigpKQotICAgIGV4Y2VwdCBL
ZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgIyB0aGlzIG1pcnJvcnMgd2hhdCB0aGUgc2hlbGwg
bm9ybWFsbHkgZG9lcwotICAgICAgICBzeXMuZXhpdChzaWduYWwuU0lHSU5UICsgMTI4KQorIyBG
SVhNRTogVGhlcmUncyBubyAiaWYgX19uYW1lID09ICdfX21haW5fXyc6IiBibG9jayBoZXJlIGJl
Y2F1c2UgdGhlIGNvZGUKKyMgd29uJ3QgcnVuIGNvcnJlY3RseSBpZiBub3QgcnVuIGZyb20gdGhl
IG5ldy1ydW4td2Via2l0LXRlc3RzIHNjcmlwdAorIyBkdWUgdG8gbWlzbWF0Y2hlcyBvbiBjbGFz
cyBuYW1lcyBpbiBsYXlvdXRfcGFja2FnZS90ZXN0X2ZhaWx1cmVzLnB5IC4KKyMgKEFsc28sIHRo
aXMgYXZvaWRzIHNvbWUgY29kZSBkdXBsaWNhdGlvbiBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nKS4K
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1
bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkgYi9XZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX3VuaXR0ZXN0LnB5CmluZGV4IGE3MTZjZWM4
YzZiNmIxNTI5ZmNiNTJiNDMxZDExNzJiY2NlZDAzMTMuLjFhNmYwYjM5NTgzZjMwNjk1MjU2Zjcx
ZTE2MGYwM2MxNjRhNjA0NTkgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfdW5pdHRlc3QucHkKKysrIGIvV2ViS2l0
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c191bml0
dGVzdC5weQpAQCAtMzMsNiArMzMsNyBAQAogaW1wb3J0IGNvZGVjcwogaW1wb3J0IGxvZ2dpbmcK
IGltcG9ydCBvcworaW1wb3J0IHBkYgogaW1wb3J0IFF1ZXVlCiBpbXBvcnQgc2h1dGlsCiBpbXBv
cnQgc3lzCkBAIC0xNDgsMTcgKzE0OSwxOCBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0
Q2FzZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5KCkpCiAKICAgICBkZWYg
dGVzdF9odW5nX3RocmVhZChzZWxmKToKLSAgICAgICAgcmVzLCBvdXQsIGVyciwgdXNlciA9IGxv
Z2dpbmdfcnVuKFsnLS1ydW4tc2luZ2x5JywgJy0tdGltZS1vdXQtbXM9NTAnLAorICAgICAgICBy
ZXMsIG91dCwgZXJyLCB1c2VyID0gbG9nZ2luZ19ydW4oWyctLXJ1bi1zaW5nbHknLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLXRpbWUtb3V0LW1zPTUwJywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWlsdXJlcy9leHBl
Y3RlZC9oYW5nLmh0bWwnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRlc3RzX2luY2x1ZGVkPVRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAw
KQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG91dC5lbXB0eSgpKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUob3V0LmVtcHR5KCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLmVtcHR5
KCkpCiAKICAgICBkZWYgdGVzdF9rZXlib2FyZF9pbnRlcnJ1cHQoc2VsZik6CiAgICAgICAgICMg
Tm90ZSB0aGF0IHRoaXMgYWxzbyB0ZXN0cyBydW5uaW5nIGEgdGVzdCBtYXJrZWQgYXMgU0tJUCBp
ZgogICAgICAgICAjIHlvdSBzcGVjaWZ5IGl0IGV4cGxpY2l0bHkuCi0gICAgICAgIHNlbGYuYXNz
ZXJ0UmFpc2VzKEtleWJvYXJkSW50ZXJydXB0LCBwYXNzaW5nX3J1biwKKyAgICAgICAgc2VsZi5h
c3NlcnRSYWlzZXMoS2V5Ym9hcmRJbnRlcnJ1cHQsIGxvZ2dpbmdfcnVuLAogICAgICAgICAgICAg
WydmYWlsdXJlcy9leHBlY3RlZC9rZXlib2FyZC5odG1sJ10sIHRlc3RzX2luY2x1ZGVkPVRydWUp
CiAKICAgICBkZWYgdGVzdF9sYXN0X3Jlc3VsdHMoc2VsZik6CkBAIC0yMDYsNyArMjA4LDggQEAg
Y2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmFzc2VydFRy
dWUocGFzc2luZ19ydW4oWyctLXJ1bi1wYXJ0JywgJzE6MiddKSkKIAogICAgIGRlZiB0ZXN0X3J1
bl9zaW5nbHkoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzaW5nX3J1bihbJy0t
cnVuLXNpbmdseSddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhc3NpbmdfcnVuKFsnLS1y
dW4tc2luZ2x5JywgJ3Bhc3NlcyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGVzdHNfaW5jbHVkZWQ9VHJ1ZSkpCiAKICAgICBkZWYgdGVzdF9zaW5nbGVfZmlsZShzZWxm
KToKICAgICAgICAgIyBGSVhNRTogdmVyaWZ5ICMgb2YgdGVzdHMgcnVuCkBAIC0zMzcsNyArMzQw
LDggQEAgY2xhc3MgVGVzdFJ1bm5lclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBt
b2NrX3BvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSA9IGxhbWJkYSBuYW1lOiBuYW1lCiAgICAg
ICAgIG1vY2tfcG9ydC5maWxlbmFtZV90b191cmkgPSBsYW1iZGEgbmFtZTogbmFtZQogCi0gICAg
ICAgIHJ1bm5lciA9IHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lcihwb3J0PW1vY2tfcG9ydCwg
b3B0aW9ucz1Nb2NrKCksIHByaW50ZXI9TW9jaygpKQorICAgICAgICBydW5uZXIgPSBydW5fd2Vi
a2l0X3Rlc3RzLlRlc3RSdW5uZXIocG9ydD1tb2NrX3BvcnQsIG9wdGlvbnM9TW9jaygpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRlcj1Nb2NrKCks
IG51bV93b3JrZXJzPTEpCiAgICAgICAgIGV4cGVjdGVkX2h0bWwgPSB1IiIiPGh0bWw+CiAgIDxo
ZWFkPgogICAgIDx0aXRsZT5MYXlvdXQgVGVzdCBSZXN1bHRzICh0aW1lKTwvdGl0bGU+CkBAIC0z
NjMsNyArMzY3LDggQEAgY2xhc3MgVGVzdFJ1bm5lclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgog
ICAgIGRlZiB0ZXN0X2dldF90ZXN0X2ZpbGVfcXVldWUoc2VsZik6CiAgICAgICAgICMgVGVzdCB0
aGF0IF9nZXRfdGVzdF9maWxlX3F1ZXVlIGluIHJ1bl93ZWJraXRfdGVzdHMuVGVzdFJ1bm5lciBy
ZWFsbHkKICAgICAgICAgIyBwdXQgdGhlIGh0dHAgdGVzdHMgZmlyc3QgaW4gdGhlIHF1ZXVlLgot
ICAgICAgICBydW5uZXIgPSBUZXN0UnVubmVyV3JhcHBlcihwb3J0PU1vY2soKSwgb3B0aW9ucz1N
b2NrKCksIHByaW50ZXI9TW9jaygpKQorICAgICAgICBydW5uZXIgPSBUZXN0UnVubmVyV3JhcHBl
cihwb3J0PU1vY2soKSwgb3B0aW9ucz1Nb2NrKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByaW50ZXI9TW9jaygpLCBudW1fd29ya2Vycz0xKQogICAgICAgICBydW5uZXIu
X29wdGlvbnMuZXhwZXJpbWVudGFsX2Z1bGx5X3BhcmFsbGVsID0gRmFsc2UKIAogICAgICAgICB0
ZXN0X2xpc3QgPSBbCkBAIC0zODUsOSArMzkwLDkgQEAgY2xhc3MgVGVzdFJ1bm5lclRlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICdMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0
dHByZXF1ZXN0L3N1cHBvcnRlZC14bWwtY29udGVudC10eXBlcy5odG1sJywKICAgICAgICAgXSkK
IAotICAgICAgICBydW5uZXIuX29wdGlvbnMuY2hpbGRfcHJvY2Vzc2VzID0gMQogICAgICAgICB0
ZXN0X3F1ZXVlX2Zvcl9zaW5nbGVfdGhyZWFkID0gcnVubmVyLl9nZXRfdGVzdF9maWxlX3F1ZXVl
KHRlc3RfbGlzdCkKLSAgICAgICAgcnVubmVyLl9vcHRpb25zLmNoaWxkX3Byb2Nlc3NlcyA9IDIK
KworICAgICAgICBydW5uZXIuX251bV93b3JrZXJzID0gMgogICAgICAgICB0ZXN0X3F1ZXVlX2Zv
cl9tdWx0aV90aHJlYWQgPSBydW5uZXIuX2dldF90ZXN0X2ZpbGVfcXVldWUodGVzdF9saXN0KQog
CiAgICAgICAgIHNpbmdsZV90aHJlYWRfcmVzdWx0cyA9IHNlbGYucXVldWVfdG9fbGlzdCh0ZXN0
X3F1ZXVlX2Zvcl9zaW5nbGVfdGhyZWFkKQpAQCAtNDY1LDYgKzQ3MCw3IEBAIGNsYXNzIFRlc3RI
YW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CiBjbGFzcyBXYWl0Rm9yVGhyZWFkc1RvRmluaXNoVGVz
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgY2xhc3MgTW9ja1Rlc3RSdW5uZXIocnVuX3dlYmtp
dF90ZXN0cy5UZXN0UnVubmVyKToKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAg
ICAgICAgc2VsZi5fZXhjZXB0aW9uID0gTm9uZQogICAgICAgICAgICAgcGFzcwogCiAgICAgICAg
IGRlZiBfX2RlbF9fKHNlbGYpOgpAQCAtNDgyLDI2ICs0ODgsMjYgQEAgY2xhc3MgV2FpdEZvclRo
cmVhZHNUb0ZpbmlzaFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzdGFydGVkX21z
ZyA9IHN0YXJ0aW5nX3F1ZXVlLmdldCgpCiAgICAgICAgIHN0b3BwaW5nX3F1ZXVlLnB1dChtc2cp
CiAgICAgICAgIHRocmVhZHMgPSBbY2hpbGRfdGhyZWFkXQotICAgICAgICByZXR1cm4gcnVubmVy
Ll93YWl0X2Zvcl90aHJlYWRzX3RvX2ZpbmlzaCh0aHJlYWRzLCBOb25lKQorICAgICAgICBydW5u
ZXIuX3dhaXRfZm9yX3RocmVhZHNfdG9fZmluaXNoKHRocmVhZHMsIE5vbmUpCiAKICAgICBkZWYg
dGVzdF9iYXNpYyhzZWxmKToKLSAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhy
ZWFkKCcnKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGludGVycnVwdGVkKQorICAgICAgICAj
IFRlc3RzIHRoYXQgbm8gZXhjZXB0aW9uIGlzIHJhaXNlZC4KKyAgICAgICAgc2VsZi5ydW5fb25l
X3RocmVhZCgnJykKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uLCBzZWxmLnJ1bl9vbmVfdGhyZWFkLCAnRXhjZXB0aW9u
JykKIAogICAgIGRlZiB0ZXN0X2ludGVycnVwdChzZWxmKToKLSAgICAgICAgaW50ZXJydXB0ZWQg
PSBzZWxmLnJ1bl9vbmVfdGhyZWFkKCdLZXlib2FyZEludGVycnVwdCcpCi0gICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShpbnRlcnJ1cHRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5Ym9h
cmRJbnRlcnJ1cHQsIHNlbGYucnVuX29uZV90aHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICdLZXlib2FyZEludGVycnVwdCcpCiAKICAgICBkZWYgdGVzdF90aW1lb3V0KHNlbGYpOgog
ICAgICAgICBvYyA9IG91dHB1dGNhcHR1cmUuT3V0cHV0Q2FwdHVyZSgpCiAgICAgICAgIG9jLmNh
cHR1cmVfb3V0cHV0KCkKLSAgICAgICAgaW50ZXJydXB0ZWQgPSBzZWxmLnJ1bl9vbmVfdGhyZWFk
KCdUaW1lb3V0JykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnRlcnJ1cHRlZCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRSYWlzZXMocnVuX3dlYmtpdF90ZXN0cy5XZWRnZWRFeGNlcHRpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucnVuX29uZV90aHJlYWQsICdUaW1lb3V0JykK
ICAgICAgICAgb2MucmVzdG9yZV9vdXRwdXQoKQogCi0gICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNl
bGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnJ1bl9vbmVf
dGhyZWFkLCAnRXhjZXB0aW9uJykKLQogCiBjbGFzcyBTdGFuZGFsb25lRnVuY3Rpb25zVGVzdCh1
bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfbG9nX3dlZGdlZF90aHJlYWQoc2VsZik6
Cg==
</data>
<flag name="review"
          id="61418"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>