<?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>77225</bug_id>
          
          <creation_ts>2012-01-27 08:54:52 -0800</creation_ts>
          <short_desc>noteGrainOn needs more tests</short_desc>
          <delta_ts>2012-02-02 18:41:10 -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>Web Audio</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>76659</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Raymond Toy">rtoy</reporter>
          <assigned_to name="Raymond Toy">rtoy</assigned_to>
          <cc>crogers</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>544111</commentid>
    <comment_count>0</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-27 08:54:52 -0800</bug_when>
    <thetext>Bug 76659 adds a timing test for noteGrainOn, but only tests the case where the offset is 0 and the duration is fixed.  That test also does not test that the output is correct, except for the position of the signal.

Additional tests need to be written to cover the case where the offset and duration change.  We also need to test whether the correct part of the signal is produced.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545369</commentid>
    <comment_count>1</comment_count>
      <attachid>124590</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-30 13:35:49 -0800</bug_when>
    <thetext>Created attachment 124590
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545398</commentid>
    <comment_count>2</comment_count>
      <attachid>124597</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-30 14:05:59 -0800</bug_when>
    <thetext>Created attachment 124597
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545400</commentid>
    <comment_count>3</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-30 14:06:34 -0800</bug_when>
    <thetext>Forgot to add expected results for the new test to the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546480</commentid>
    <comment_count>4</comment_count>
      <attachid>124597</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-31 14:08:49 -0800</bug_when>
    <thetext>Comment on attachment 124597
Patch

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

Great test! I have a few nit comments:

&gt; LayoutTests/webaudio/note-grain-on-play.html:14
&gt; +      description(&quot;Test noteGrainOn.&quot;);

Can we have a *slightly* more detailed description of the test here -- could even be as simple as:

&quot;Test noteGrainOn offset rendering.&quot;

&gt; LayoutTests/webaudio/note-grain-on-play.html:17
&gt; +      // Various sections of the ramp are played out at different

&quot;played out&quot; -&gt; &quot;rendered with noteGrainOn()&quot;

&gt; LayoutTests/webaudio/note-grain-on-play.html:25
&gt; +      var trueGrainOffset = [];

can we call this either &quot;trueGrainOffsetTime&quot; or &quot;grainOffsetTime&quot;

&gt; LayoutTests/webaudio/note-grain-on-play.html:30
&gt; +          var rampOffset = timeToSampleFrame(trueGrainOffset[rampNumber], sampleRate);

&quot;rampOffset&quot; -&gt; &quot;rampOffsetFrame&quot;

&gt; LayoutTests/webaudio/note-grain-on-play.html:31
&gt; +          var rampLength = endFrame - startFrame;

rampLength -&gt; rampFrameLength

&gt; LayoutTests/webaudio/note-grain-on-play.html:72
&gt; +          // section of our ramp signal.

It seems like this comment really belongs just inside the loop, but we want a comment here describing that we&apos;re looping through each of the rendered grains, one at a time...

&gt; LayoutTests/webaudio/note-grain-on-play.html:76
&gt; +                  testFailed(&quot;Ramp &quot; + k + &quot; incorrect.  Expected &quot; + result.expected + &quot; but received &quot; + result.actual + &quot; at sample frame &quot; + result.frame);

I&apos;m wondering if &quot;Grain&quot; might be a better word than &quot;Ramp&quot;, since I think of the &quot;ramp&quot; as being the entire &quot;linearRampBuffer&quot;, while the &quot;grain&quot; is a single rendering of a portion of the ramp.  It&apos;s true that a sub-section of the ramp is itself a ramp, but that doesn&apos;t seem helpful in trying to distinguish the concepts.

So: &quot;verifyRamp&quot; -&gt; &quot;verifyGrain&quot;, and other uses of word ramp...

&gt; LayoutTests/webaudio/note-grain-on-play.html:108
&gt; +          linearRampBuffer = createSignalBuffer(context, function (k) { return k + 1; });    

nit: no space after function -- should be &quot;function(k)&quot;

Also, please add comment explaining that we use &quot;k + 1&quot; instead of &quot;k&quot; so that the ramp starts at a non-zero value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546586</commentid>
    <comment_count>5</comment_count>
      <attachid>124838</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-31 15:55:27 -0800</bug_when>
    <thetext>Created attachment 124838
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546592</commentid>
    <comment_count>6</comment_count>
      <attachid>124597</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-31 15:59:39 -0800</bug_when>
    <thetext>Comment on attachment 124597
Patch

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

&gt;&gt; LayoutTests/webaudio/note-grain-on-play.html:14
&gt;&gt; +      description(&quot;Test noteGrainOn.&quot;);
&gt; 
&gt; Can we have a *slightly* more detailed description of the test here -- could even be as simple as:
&gt; 
&gt; &quot;Test noteGrainOn offset rendering.&quot;

Oops.  Better description added.

&gt;&gt; LayoutTests/webaudio/note-grain-on-play.html:17
&gt;&gt; +      // Various sections of the ramp are played out at different
&gt; 
&gt; &quot;played out&quot; -&gt; &quot;rendered with noteGrainOn()&quot;

Done.

&gt;&gt; LayoutTests/webaudio/note-grain-on-play.html:25
&gt;&gt; +      var trueGrainOffset = [];
&gt; 
&gt; can we call this either &quot;trueGrainOffsetTime&quot; or &quot;grainOffsetTime&quot;

Done.

&gt;&gt; LayoutTests/webaudio/note-grain-on-play.html:30
&gt;&gt; +          var rampOffset = timeToSampleFrame(trueGrainOffset[rampNumber], sampleRate);
&gt; 
&gt; &quot;rampOffset&quot; -&gt; &quot;rampOffsetFrame&quot;

Done.

&gt;&gt; LayoutTests/webaudio/note-grain-on-play.html:31
&gt;&gt; +          var rampLength = endFrame - startFrame;
&gt; 
&gt; rampLength -&gt; rampFrameLength

Done.

I&apos;ve also made similar changes in other places to make it clear if we&apos;re doing time or frames.

&gt;&gt; LayoutTests/webaudio/note-grain-on-play.html:72
&gt;&gt; +          // section of our ramp signal.
&gt; 
&gt; It seems like this comment really belongs just inside the loop, but we want a comment here describing that we&apos;re looping through each of the rendered grains, one at a time...

Done.

&gt;&gt; LayoutTests/webaudio/note-grain-on-play.html:76
&gt;&gt; +                  testFailed(&quot;Ramp &quot; + k + &quot; incorrect.  Expected &quot; + result.expected + &quot; but received &quot; + result.actual + &quot; at sample frame &quot; + result.frame);
&gt; 
&gt; I&apos;m wondering if &quot;Grain&quot; might be a better word than &quot;Ramp&quot;, since I think of the &quot;ramp&quot; as being the entire &quot;linearRampBuffer&quot;, while the &quot;grain&quot; is a single rendering of a portion of the ramp.  It&apos;s true that a sub-section of the ramp is itself a ramp, but that doesn&apos;t seem helpful in trying to distinguish the concepts.
&gt; 
&gt; So: &quot;verifyRamp&quot; -&gt; &quot;verifyGrain&quot;, and other uses of word ramp...

Yes, I agree.  I think I&apos;ve made this change everywhere.

&gt;&gt; LayoutTests/webaudio/note-grain-on-play.html:108
&gt;&gt; +          linearRampBuffer = createSignalBuffer(context, function (k) { return k + 1; });    
&gt; 
&gt; nit: no space after function -- should be &quot;function(k)&quot;
&gt; 
&gt; Also, please add comment explaining that we use &quot;k + 1&quot; instead of &quot;k&quot; so that the ramp starts at a non-zero value.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546676</commentid>
    <comment_count>7</comment_count>
      <attachid>124838</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-31 17:25:14 -0800</bug_when>
    <thetext>Comment on attachment 124838
Patch

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

&gt; LayoutTests/webaudio/note-grain-on-play-expected.txt:7
&gt; +PASS All 100 pulses ended at the correct time.

Lines 5:7 use the word &quot;pulse&quot; but line 8 uses &quot;grain&quot; -- it seems like &quot;grain&quot; should be used everywhere since it&apos;s no longer a square pulse

&gt; LayoutTests/webaudio/note-grain-on-play.html:18
&gt; +      // out at different times, and we verify that the actual output

nit: can remove the word &quot;out&quot;

&gt; LayoutTests/webaudio/note-grain-on-play.html:19
&gt; +      // matches our expectations.

&quot;verify that the actual output matches our expectations&quot; is pretty generic and vague.  It could be used to describe any test.  Can we have a sentence that&apos;s much more explicit?

&gt; LayoutTests/webaudio/note-grain-on-play.html:29
&gt; +      function verifyGrain(renderedData, startFrame, endFrame, rampNumber) {

rampNumber -&gt; grainIndex (or grainNumber)

&gt; LayoutTests/webaudio/note-grain-on-play.html:30
&gt; +          var rampOffsetFrame = timeToSampleFrame(grainOffsetTime[rampNumber], sampleRate);

rampOffsetFrame -&gt; grainOffsetFrame

&gt; LayoutTests/webaudio/note-grain-on-play.html:31
&gt; +          var rampFrameLength = endFrame - startFrame;

rampFrameLength -&gt; grainFrameLength

&gt; LayoutTests/webaudio/note-grain-on-play.html:64
&gt; +          var startEndFrames = findStartAndEndSamples(renderedData);

naming nit: findStartAndEndSamples -&gt; findStartEndFrames

(down below you have a function called &quot;verifyStartEndFrames&quot; without an &quot;And&quot;)

either both should have &quot;And&quot; or neither</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547162</commentid>
    <comment_count>8</comment_count>
      <attachid>124963</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-01 10:12:50 -0800</bug_when>
    <thetext>Created attachment 124963
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547163</commentid>
    <comment_count>9</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-01 10:13:52 -0800</bug_when>
    <thetext>I think I&apos;ve addressed all of the review comments and updated accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548044</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-02 12:11:55 -0800</bug_when>
    <thetext>Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548295</commentid>
    <comment_count>11</comment_count>
      <attachid>124963</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-02-02 17:51:52 -0800</bug_when>
    <thetext>Comment on attachment 124963
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548334</commentid>
    <comment_count>12</comment_count>
      <attachid>124963</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-02 18:41:05 -0800</bug_when>
    <thetext>Comment on attachment 124963
Patch

Clearing flags on attachment: 124963

Committed r106612: &lt;http://trac.webkit.org/changeset/106612&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548335</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-02 18:41:10 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124590</attachid>
            <date>2012-01-30 13:35:49 -0800</date>
            <delta_ts>2012-01-30 14:05:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77225-20120130133548.patch</filename>
            <type>text/plain</type>
            <size>21232</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MjE1CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMTViOGE4MGU0YzAyZDQxZmQ2N2Rj
Mjc0M2E1YTZjNGNhODZjNmYyMC4uNDMyYzRiMWQ4ZTE3MWY1NDdlYWYxMWM3YzAxMmZiMWEwNzIz
YzMzOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAxLTMwICBSYXltb25kIFRveSAgPHJ0
b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBub3RlR3JhaW5PbiBuZWVkcyBtb3JlIHRlc3RzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzIyNQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2ViYXVkaW8v
bm90ZS1ncmFpbi1vbi1wbGF5Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL25vdGUt
Z3JhaW4tb24tdGltaW5nLmh0bWw6IFJlZmFjdG9yZWQgdG8gdXNlIG5ldworICAgICAgICBmdW5j
dGlvbnMgaW4gbm90ZS1ncmFpbi1vbi10ZXN0aW5nLmpzLgorICAgICAgICAqIHdlYmF1ZGlvL3Jl
c291cmNlcy9hdWRpby10ZXN0aW5nLmpzOgorICAgICAgICAoZ3JhaW5MZW5ndGhJblNhbXBsZUZy
YW1lcyk6ICBVdGlsaXR5IHRvIGNvbXB1dGUgbGVuZ3RoIG9mIGEgZ3JhaW4KKyAgICAgICAgaW4g
c2FtcGxlcy4KKyAgICAgICAgKiB3ZWJhdWRpby9yZXNvdXJjZXMvbm90ZS1ncmFpbi1vbi10ZXN0
aW5nLmpzOiBBZGRlZC4KKyAgICAgICAgKGNyZWF0ZVNpZ25hbEJ1ZmZlcik6CisgICAgICAgIChm
aW5kU3RhcnRBbmRFbmRTYW1wbGVzKToKKyAgICAgICAgKHBsYXlOb3RlKToKKyAgICAgICAgKHBs
YXlBbGxOb3Rlcyk6CisgICAgICAgICh2ZXJpZnlTdGFydEVuZFRpbWVzKTogQ29tbW9uIGZ1bmN0
aW9ucyBmb3Igbm90ZS1ncmFpbi1vbi1wbGF5IGFuZAorICAgICAgICBub3RlLWdyYWluLW9uLXRp
bWluZyB0ZXN0cyB0byB1c2UuCisKIDIwMTItMDEtMjkgIFl1em8gRnVqaXNoaW1hICA8eXV6b0Bn
b29nbGUuY29tPgogCiAgICAgICAgIFtDaHJvbWl1bV0gVW5yZXZpZXdlZCB0ZXN0IGV4cGVjdGF0
aW9uIGNoYW5nZS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL25vdGUtZ3JhaW4t
b24tcGxheS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vbm90ZS1ncmFpbi1vbi1wbGF5Lmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uY2Y2ZGI4Njc1ZmU5YTljZTk0N2VmZjNmY2Q5MmRkZGY2ZjFkMTgxMAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL25vdGUtZ3JhaW4tb24tcGxh
eS5odG1sCkBAIC0wLDAgKzEsMTI1IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8v
RFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorICA8aGVhZD4KKyAgICA8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvbm90ZS1ncmFpbi1vbi10ZXN0aW5nLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorICA8L2hlYWQ+CisKKyAgPGJvZHk+CisgICAgPGRpdiBpZD0iZGVzY3JpcHRpb24i
PjwvZGl2PgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCisgICAgPHNjcmlwdD4KKyAg
ICAgIGRlc2NyaXB0aW9uKCJUZXN0IG5vdGVHcmFpbk9uLiIpOworCisgICAgICAvLyBUbyB0ZXN0
IG5vdGVHcmFpbk9uLCBhIHNpbmdsZSByYW1wIHNpZ25hbCBpcyBjcmVhdGVkLgorICAgICAgLy8g
VmFyaW91cyBzZWN0aW9ucyBvZiB0aGUgcmFtcCBhcmUgcGxheWVkIG91dCBhdCBkaWZmZXJlbnQK
KyAgICAgIC8vIHRpbWVzLCBhbmQgd2UgdmVyaWZ5IHRoYXQgdGhlIGFjdHVhbCBvdXRwdXQgbWF0
Y2hlcyBvdXIKKyAgICAgIC8vIGV4cGVjdGF0aW9ucy4KKworICAgICAgCisgICAgICB2YXIgbGlu
ZWFyUmFtcEJ1ZmZlcjsKKworICAgICAgLy8gQXJyYXkgb2YgdGhlIGdyYWluIG9mZnNldCB1c2Vk
IGZvciBlYWNoIHJhbXAgcGxheWVkLgorICAgICAgdmFyIHRydWVHcmFpbk9mZnNldCA9IFtdOwor
CisgICAgICAvLyBWZXJpZnkgdGhlIHJlY2VpdmVkIHNpZ25hbCBpcyBhIHJhbXAgZnJvbSB0aGUg
Y29ycmVjdCBzZWN0aW9uCisgICAgICAvLyBvZiBvdXIgcmFtcCBzaWduYWwuCisgICAgICBmdW5j
dGlvbiB2ZXJpZnlSYW1wKHJlbmRlcmVkRGF0YSwgc3RhcnRGcmFtZSwgZW5kRnJhbWUsIHJhbXBO
dW1iZXIpIHsKKyAgICAgICAgICB2YXIgcmFtcE9mZnNldCA9IHRpbWVUb1NhbXBsZUZyYW1lKHRy
dWVHcmFpbk9mZnNldFtyYW1wTnVtYmVyXSwgc2FtcGxlUmF0ZSk7CisgICAgICAgICAgdmFyIHJh
bXBMZW5ndGggPSBlbmRGcmFtZSAtIHN0YXJ0RnJhbWU7CisgICAgICAgICAgdmFyIHJhbXAgPSBs
aW5lYXJSYW1wQnVmZmVyLmdldENoYW5uZWxEYXRhKDApOworICAgICAgICAgIHZhciBpc0NvcnJl
Y3QgPSB0cnVlOworCisgICAgICAgICAgdmFyIGV4cGVjdGVkOworICAgICAgICAgIHZhciBhY3R1
YWw7CisgICAgICAgICAgdmFyIGZyYW1lOworICAgICAgCisgICAgICAgICAgZm9yICh2YXIgayA9
IDA7IGsgPCByYW1wTGVuZ3RoOyArK2spIHsKKyAgICAgICAgICAgICAgaWYgKHJlbmRlcmVkRGF0
YVtzdGFydEZyYW1lICsga10gIT0gcmFtcFtyYW1wT2Zmc2V0ICsga10pIHsKKyAgICAgICAgICAg
ICAgICAgIGV4cGVjdGVkID0gcmFtcFtyYW1wT2Zmc2V0ICsga107CisgICAgICAgICAgICAgICAg
ICBhY3R1YWwgPSByZW5kZXJlZERhdGFbc3RhcnRGcmFtZSArIGtdOworICAgICAgICAgICAgICAg
ICAgZnJhbWUgPSBzdGFydEZyYW1lICsgazsKKyAgICAgICAgICAgICAgICAgIGlzQ29ycmVjdCA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICB9CisgICAgICAgICAgcmV0dXJuIHsgdmVyaWZpZWQ6IGlzQ29ycmVjdCwKKyAgICAgICAg
ICAgICAgICAgICBleHBlY3RlZCA6IGV4cGVjdGVkICwKKyAgICAgICAgICAgICAgICAgICBhY3R1
YWwgOiBhY3R1YWwsCisgICAgICAgICAgICAgICAgICAgZnJhbWUgOiBmcmFtZSB9OworICAgICAg
fQorICAgICAgCisgICAgICBmdW5jdGlvbiBjaGVja1Jlc3VsdChldmVudCkgeworICAgICAgICAg
IHZhciBidWZmZXIgPSBldmVudC5yZW5kZXJlZEJ1ZmZlcjsKKyAgICAgICAgICByZW5kZXJlZERh
dGEgPSBidWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7CisgICAgICAgICAgdmFyIG5TYW1wbGVzID0g
cmVuZGVyZWREYXRhLmxlbmd0aDsKKworICAgICAgICAgIHZhciBzdWNjZXNzID0gdHJ1ZTsKKwor
ICAgICAgICAgIC8vIE51bWJlciBvZiByYW1wcyB0aGF0IHdlIGZvdW5kIHRoYXQgaGF2ZSBpbmNv
cnJlY3QgZGF0YS4KKyAgICAgICAgICB2YXIgaW52YWxpZFJhbXBEYXRhQ291bnQgPSAwOworICAg
ICAgCisgICAgICAgICAgdmFyIHN0YXJ0RW5kVGltZXMgPSBmaW5kU3RhcnRBbmRFbmRTYW1wbGVz
KHJlbmRlcmVkRGF0YSk7CisKKyAgICAgICAgICAvLyBWZXJpZnkgdGhlIHN0YXJ0IGFuZCBzdG9w
IHRpbWVzLiAgTm90IHN0cmljdGx5IG5lZWRlZCBmb3IKKyAgICAgICAgICAvLyB0aGlzIHRlc3Qs
IGJ1dCBpdCdzIHVzZWZ1bCB0byBrbm93IHRoYXQgaWYgdGhlIHJhbXAgZGF0YQorICAgICAgICAg
IC8vIGFwcGVhcnMgdG8gYmUgaW5jb3JyZWN0LgorICAgICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNz
ICYmIHZlcmlmeVN0YXJ0RW5kVGltZXMoc3RhcnRFbmRUaW1lcyk7CisKKyAgICAgICAgICAvLyBW
ZXJpZnkgdGhhdCB0aGUgcmVuZGVyZWQgZGF0YSBtYXRjaGVzIHRoZSBleHBlY3RlZAorICAgICAg
ICAgIC8vIHNlY3Rpb24gb2Ygb3VyIHJhbXAgc2lnbmFsLgorICAgICAgICAgIGZvciAodmFyIGsg
PSAwOyBrIDwgc3RhcnRFbmRUaW1lcy5zdGFydC5sZW5ndGg7ICsraykgeworICAgICAgICAgICAg
ICB2YXIgcmVzdWx0ID0gdmVyaWZ5UmFtcChyZW5kZXJlZERhdGEsIHN0YXJ0RW5kVGltZXMuc3Rh
cnRba10sIHN0YXJ0RW5kVGltZXMuZW5kW2tdLCBrKTsKKyAgICAgICAgICAgICAgaWYgKCFyZXN1
bHQudmVyaWZpZWQpIHsKKyAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIlJhbXAgIiArIGsg
KyAiIGluY29ycmVjdC4gIEV4cGVjdGVkICIgKyByZXN1bHQuZXhwZWN0ZWQgKyAiIGJ1dCByZWNl
aXZlZCAiICsgcmVzdWx0LmFjdHVhbCArICIgYXQgc2FtcGxlIGZyYW1lICIgKyByZXN1bHQuZnJh
bWUpOworICAgICAgICAgICAgICAgICAgKytpbnZhbGlkUmFtcERhdGFDb3VudDsKKyAgICAgICAg
ICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0K
KyAgICAgICAgICAKKyAgICAgICAgICBpZiAoIWludmFsaWRSYW1wRGF0YUNvdW50KSB7CisgICAg
ICAgICAgICAgIHRlc3RQYXNzZWQoIkFsbCAiICsgbnVtYmVyT2ZUZXN0cyArICIgcmFtcHMgY29u
dGFpbmVkIHRoZSBjb3JyZWN0IGRhdGEuIik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgdGVzdEZhaWxlZChpbnZhbGlkUmFtcERhdGFDb3VudCArICIgcmFtcHMgb3V0IG9mICIg
KyBudW1iZXJPZlRlc3RzICsgIiBkaWQgbm90IGNvbnRhaW4gdGhlIGV4cGVjdGVkIGRhdGEuIik7
CisgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAKKyAg
ICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAgICB0ZXN0UGFzc2VkKCJub3RlR3Jh
aW5PbiB0aW1pbmcgdGVzdHMgcGFzc2VkLiIpOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgIHRlc3RGYWlsZWQoIm5vdGVHcmFpbk9uIHRpbWluZyB0ZXN0cyBmYWlsZWQuIik7Cisg
ICAgICAgICAgfQorCisgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICB9CisKKyAgICAg
IGZ1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikgeworICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
KyAgICAgICAgICB9CisKKyAgICAgICAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisK
KyAgICAgICAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBjb250ZXh0LgorICAgICAgICAgIGNv
bnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJUaW1l
LCBzYW1wbGVSYXRlKTsKKyAgICAgICAgICBsaW5lYXJSYW1wQnVmZmVyID0gY3JlYXRlU2lnbmFs
QnVmZmVyKGNvbnRleHQsIGZ1bmN0aW9uIChrKSB7IHJldHVybiBrICsgMTsgfSk7ICAgIAorCisg
ICAgICAgICAgdmFyIG5vdGVJbmZvID0gcGxheUFsbE5vdGVzKGNvbnRleHQsIGxpbmVhclJhbXBC
dWZmZXIsIG51bWJlck9mVGVzdHMpOworCisgICAgICAgICAgdHJ1ZUdyYWluT2Zmc2V0ID0gbm90
ZUluZm8uZ3JhaW5PZmZzZXRzOworCisgICAgICAgICAgY29udGV4dC5vbmNvbXBsZXRlID0gY2hl
Y2tSZXN1bHQ7CisgICAgICAgICAgY29udGV4dC5zdGFydFJlbmRlcmluZygpOworICAgICAgfQor
ICAgICAgCisgICAgICBydW5UZXN0KCk7CisgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OworCisgICAgPC9zY3JpcHQ+CisKKyAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vbm90ZS1ncmFpbi1vbi10aW1pbmcuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL25vdGUtZ3JhaW4tb24tdGltaW5nLmh0bWwKaW5kZXggZjMzYWYw
OWI1YjBkM2E1MTk4NWI2MTcyODFjNWZmM2I2Y2NlNTU2ZS4uMzFlZThhMzY2ZmUwOGQzNDk2MzU5
OTk4N2E4NDNmMjNiMTkyZGM3ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vbm90
ZS1ncmFpbi1vbi10aW1pbmcuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9ub3RlLWdy
YWluLW9uLXRpbWluZy5odG1sCkBAIC0yLDYgKzIsNyBAQAogPGh0bWw+CiAgIDxoZWFkPgogICAg
IDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9InJlc291cmNlcy9ub3RlLWdyYWluLW9uLXRlc3RpbmcuanMiPjwvc2NyaXB0
PgogICAgIDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+CiAgIDwvaGVhZD4KIApAQCAtMTIsMTQ4ICsxMywxOSBAQAogICAgIDxzY3JpcHQ+
CiAgICAgICBkZXNjcmlwdGlvbigiVGVzdCB0aW1pbmcgb2Ygbm90ZUdyYWluT24uIik7CiAKLSAg
ICAgIHZhciBzYW1wbGVSYXRlID0gNDQxMDAuMDsKLQotICAgICAgLy8gSFJURiBleHRyYSBmcmFt
ZXMuICBUaGlzIGlzIGEgbWFnaWMgY29uc3RhbnQgY3VycmVudGx5IGluCi0gICAgICAvLyBBdWRp
b0J1ZmZlclNvdXJjZU5vZGU6OnByb2Nlc3MgdGhhdCBhbHdheXMgZXh0ZW5kcyB0aGUKLSAgICAg
IC8vIGR1cmF0aW9uIGJ5IHRoaXMgbnVtYmVyIG9mIHNhbXBsZXMuICBTZWUgYnVnIDc3MjI0Ci0g
ICAgICAvLyAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MjI0KS4K
LSAgICAgIHZhciBleHRyYUZyYW1lc0hSVEYgPSA1MTI7Ci0gICAgICAKLSAgICAgIC8vIEhvdyBt
YW55IHNxdWFyZSBwdWxzZXMgdG8gcGxheS4KLSAgICAgIHZhciBudW1iZXJPZlRlc3RzID0gMTAw
OwotCi0gICAgICAvLyBEdXJhdGlvbiBvZiB0aGUgc3F1YXJlIHB1bHNlIHRvIGJlIHBsYXllZAot
ICAgICAgdmFyIGR1cmF0aW9uID0gMC4wMTsKLQotICAgICAgLy8gVGltZSBzdGVwIGJldHdlZW4g
dGhlIHN0YXJ0IG9mIGVhY2ggc3F1YXJlIHB1bHNlLiAgV2UgbmVlZCB0bwotICAgICAgLy8gYWRk
IGEgbGl0dGxlIGJpdCBvZiBzaWxlbmNlIHNvIHdlIGNhbiBkZXRlY3QgcHVsc2UgYm91bmRhcmll
cwotICAgICAgLy8gYW5kIGFsc28gYWNjb3VudCBmb3IgdGhlIGV4dHJhIGZyYW1lcyBmb3IgSFJU
Ri4KLSAgICAgIHZhciB0aW1lU3RlcCA9IGR1cmF0aW9uICsgLjAwNSArIGV4dHJhRnJhbWVzSFJU
RiAvIHNhbXBsZVJhdGU7Ci0KLSAgICAgIC8vIFRpbWUgc3RlcCBiZXR3ZWVuIHRoZSBncmFpbiBz
dGFydCBmb3IgZWFjaCBzcXVhcmUgcHVsc2UuCi0gICAgICB2YXIgZ3JhaW5PZmZzZXRTdGVwID0g
MC4wMDU7Ci0KLSAgICAgIC8vIEhvdyBsb25nIHRvIHJlbmRlciB0byBjb3ZlciBhbGwgb2YgdGhl
IHB1bHNlcy4KLSAgICAgIHZhciByZW5kZXJUaW1lID0gKG51bWJlck9mVGVzdHMgKyAxKSAqIHRp
bWVTdGVwOwotCi0gICAgICB2YXIgY29udGV4dDsKICAgICAgIHZhciBzcXVhcmVQdWxzZUJ1ZmZl
cjsKLSAgICAgIHZhciByZW5kZXJlZERhdGE7Ci0KLSAgICAgIGZ1bmN0aW9uIGNyZWF0ZVNxdWFy
ZVB1bHNlKGNvbnRleHQpIHsKLSAgICAgICAgICAvLyBDcmVhdGUgYSBzcXVhcmUgcHVsc2UgdGhh
dCBpcyBsb25nIGVub3VnaCBzbyB0aGF0IGFsbCB0aGUKLSAgICAgICAgICAvLyBwb3NzaWJsZSBn
cmFpbiBvZmZzZXRzIHN0aWxsIHJlc3VsdHMgaW4gYSBzcXVhcmUgcHVsc2Ugb2YKLSAgICAgICAg
ICAvLyBvZiB0aGUgcmVxdWVzdGVkIGR1cmF0aW9uLiAgKFRoZSBleHRyYSAxIGlzIGZvciBhbnkK
LSAgICAgICAgICAvLyByb3VuZC1vZmYuKSAKLQotICAgICAgICAgIHZhciBwdWxzZUxlbmd0aCA9
IE1hdGguZmxvb3IoMSArIGV4dHJhRnJhbWVzSFJURiArIHNhbXBsZVJhdGUgKiAobnVtYmVyT2ZU
ZXN0cyAqIGdyYWluT2Zmc2V0U3RlcCArIGR1cmF0aW9uKSk7CiAKLSAgICAgICAgICBzcXVhcmVQ
dWxzZUJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlQnVmZmVyKDIsIHB1bHNlTGVuZ3RoLCBzYW1wbGVS
YXRlKTsKLSAgICAgICAgICB2YXIgZGF0YSA9IHNxdWFyZVB1bHNlQnVmZmVyLmdldENoYW5uZWxE
YXRhKDApOwotICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcHVsc2VMZW5ndGg7ICsraykg
ewotICAgICAgICAgICAgICBkYXRhW2tdID0gMTsKLSAgICAgICAgICB9Ci0gICAgICB9Ci0KLSAg
ICAgIGZ1bmN0aW9uIHRydWVHcmFpbkxlbmd0aChncmFpbk9mZnNldCwgZHVyYXRpb24pIHsKLSAg
ICAgICAgICB2YXIgc3RhcnRGcmFtZSA9IHRpbWVUb1NhbXBsZUZyYW1lKGdyYWluT2Zmc2V0LCBz
YW1wbGVSYXRlKTsKLSAgICAgICAgICB2YXIgZW5kRnJhbWUgPSB0aW1lVG9TYW1wbGVGcmFtZShn
cmFpbk9mZnNldCArIGR1cmF0aW9uLCBzYW1wbGVSYXRlKTsKLQotICAgICAgICAgIHJldHVybiBl
bmRGcmFtZSAtIHN0YXJ0RnJhbWU7Ci0gICAgICB9Ci0gICAgICAKICAgICAgIGZ1bmN0aW9uIGNo
ZWNrUmVzdWx0KGV2ZW50KSB7CiAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGV2ZW50LnJlbmRlcmVk
QnVmZmVyOwogICAgICAgICAgIHJlbmRlcmVkRGF0YSA9IGJ1ZmZlci5nZXRDaGFubmVsRGF0YSgw
KTsKICAgICAgICAgICB2YXIgblNhbXBsZXMgPSByZW5kZXJlZERhdGEubGVuZ3RoOwogCiAgICAg
ICAgICAgdmFyIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgIHZhciBlcnJvckNvdW50U3RhcnQg
PSAwOwotICAgICAgICAgIHZhciBlcnJvckNvdW50RW5kID0gMDsKICAgICAgIAotICAgICAgICAg
IHZhciBzdGFydFRpbWUgPSBbXTsKLSAgICAgICAgICB2YXIgZW5kVGltZSA9IFtdOwotICAgICAg
ICAgIHZhciBsb29rRm9yU3RhcnQgPSB0cnVlOwotICAgICAgCi0gICAgICAgICAgLy8gTG9vayB0
aHJvdWdoIHRoZSByZW5kZXJlZCBkYXRhIHRvIGZpbmQgdGhlIHN0YXJ0IGFuZCBzdG9wCi0gICAg
ICAgICAgLy8gdGltZXMgb2YgZWFjaCBwdWxzZS4KLSAgICAgICAgICBmb3IgKHZhciBrID0gMDsg
ayA8IG5TYW1wbGVzOyArK2spIHsKLSAgICAgICAgICAgICAgaWYgKGxvb2tGb3JTdGFydCkgewot
ICAgICAgICAgICAgICAgICAgLy8gRmluZCBhIG5vbi16ZXJvIHBvaW50IGFuZCByZWNvcmQgaXQu
ICBXZSdyZSBub3QKLSAgICAgICAgICAgICAgICAgIC8vIGNvbmNlcm5lZCB3aXRoIHRoZSB2YWx1
ZSBpbiB0aGlzIHRlc3QsIG9ubHkgdGhhdAotICAgICAgICAgICAgICAgICAgLy8gdGhlIHB1bHNl
IHN0YXJ0ZWQgaGVyZS4gIE90aGVyIHRlc3RzIHNob3VsZCBjb3ZlcgotICAgICAgICAgICAgICAg
ICAgLy8gdGhpcyBjYXNlLgotICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmVkRGF0YVtrXSA+
IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICBzdGFydFRpbWUucHVzaChrKTsKLSAgICAgICAg
ICAgICAgICAgICAgICBsb29rRm9yU3RhcnQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgIC8vIEZpbmQgYSB6ZXJv
IGFuZCByZWNvcmQgaXQuCi0gICAgICAgICAgICAgICAgICBpZiAocmVuZGVyZWREYXRhW2tdID09
IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICBlbmRUaW1lLnB1c2goayk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgbG9va0ZvclN0YXJ0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgfQotICAgICAgICAgIH0KKyAgICAgICAgICB2YXIgc3RhcnRFbmRUaW1lcyA9
IGZpbmRTdGFydEFuZEVuZFNhbXBsZXMocmVuZGVyZWREYXRhKTsKIAotICAgICAgICAgIGlmIChz
dGFydFRpbWUubGVuZ3RoICE9IGVuZFRpbWUubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgIHRlc3RG
YWlsZWQoIkNvdWxkIG5vdCBmaW5kIHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIGEgc3F1YXJlIHB1
bHNlLiIpOwotICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgICAgfQotCi0g
ICAgICAgICAgaWYgKHN0YXJ0VGltZS5sZW5ndGggPT0gbnVtYmVyT2ZUZXN0cyAmJiBlbmRUaW1l
Lmxlbmd0aCA9PSBudW1iZXJPZlRlc3RzKSB7Ci0gICAgICAgICAgICAgIHRlc3RQYXNzZWQoIkZv
dW5kIGFsbCAiICsgbnVtYmVyT2ZUZXN0cyArICIgcHVsc2VzLiIpOwotICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgIHRlc3RGYWlsZWQoIkRpZCBub3QgZmluZCBhbGwgIiArIG51bWJl
ck9mVGVzdHMgKyAiIHB1bHNlcy4iKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvLyBFeGFt
aW5lIHRoZSBzdGFydCBhbmQgc3RvcCB0aW1lcyB0byBzZWUgaWYgdGhleSBtYXRjaCBvdXIKLSAg
ICAgICAgICAvLyBleHBlY3RhdGlvbnMuCi0gICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBz
dGFydFRpbWUubGVuZ3RoOyArK2spIHsKLSAgICAgICAgICAgICAgdmFyIGV4cGVjdGVkU3RhcnQg
PSB0aW1lVG9TYW1wbGVGcmFtZShrICogdGltZVN0ZXAsIHNhbXBsZVJhdGUpOwotICAgICAgICAg
ICAgICAvLyBUaGUgZW5kIHBvaW50IGlzIHRoZSBkdXJhdGlvbiwgcGx1cyB0aGUgZXh0cmEgZnJh
bWVzCi0gICAgICAgICAgICAgIC8vIGZvciBIUlRGLgotICAgICAgICAgICAgICB2YXIgZXhwZWN0
ZWRFbmQgPSBleHRyYUZyYW1lc0hSVEYgKyBleHBlY3RlZFN0YXJ0ICsgdHJ1ZUdyYWluTGVuZ3Ro
KGsgKiBncmFpbk9mZnNldFN0ZXAsIGR1cmF0aW9uKTsKLQotICAgICAgICAgICAgICBpZiAoc3Rh
cnRUaW1lW2tdICE9IGV4cGVjdGVkU3RhcnQpIHsKLSAgICAgICAgICAgICAgICAgIHRlc3RGYWls
ZWQoIlB1bHNlICIgKyBrICsgIiBzdGFydGVkIGF0ICIgKyBzdGFydFRpbWVba10gKyAiIGJ1dCBl
eHBlY3RlZCBhdCAiICsgZXhwZWN0ZWRTdGFydCk7Ci0gICAgICAgICAgICAgICAgICArK2Vycm9y
Q291bnRTdGFydDsKLSAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgIGlmIChlbmRUaW1lW2tdICE9IGV4cGVjdGVkRW5kKSB7
Ci0gICAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJQdWxzZSAiICsgayArICIgZW5kZWQgYXQg
IiArIGVuZFRpbWVba10gKyAiIGJ1dCBleHBlY3RlZCBhdCAiICsgZXhwZWN0ZWRFbmQpOwotICAg
ICAgICAgICAgICAgICAgKytlcnJvckNvdW50RW5kOwotICAgICAgICAgICAgICAgICAgc3VjY2Vz
cyA9IGZhbHNlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYg
KCFlcnJvckNvdW50U3RhcnQpIHsKLSAgICAgICAgICAgICAgaWYgKHN0YXJ0VGltZS5sZW5ndGgg
PT0gbnVtYmVyT2ZUZXN0cykgewotICAgICAgICAgICAgICAgICAgdGVzdFBhc3NlZCgiQWxsICIg
KyBudW1iZXJPZlRlc3RzICsgIiBzcXVhcmUgcHVsc2VzIHN0YXJ0ZWQgYXQgdGhlIGNvcnJlY3Qg
dGltZS4iKTsKLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgIHRlc3RG
YWlsZWQoIkFsbCBwdWxzZXMgc3RhcnRlZCBhdCB0aGUgY29ycmVjdCB0aW1lLCBidXQgb25seSAi
ICsgc3RhcnRUaW1lLmxlbmd0aCArICIgcHVsc2VzIGZvdW5kLiIpOwotICAgICAgICAgICAgICAg
ICAgc3VjY2VzcyA9IGZhbHNlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgdGVzdEZhaWxlZChlcnJvckNvdW50U3RhcnQgKyAiIG91dCBvZiAiICsg
bnVtYmVyT2ZUZXN0cyArICIgc3F1YXJlIHB1bHNlcyBzdGFydGVkIGF0IHRoZSB3cm9uZyB0aW1l
LiIpOwotICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgICAgfQorICAgICAg
ICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIHZlcmlmeVN0YXJ0RW5kVGltZXMoc3RhcnRFbmRUaW1l
cyk7CiAKLSAgICAgICAgICBpZiAoIWVycm9yQ291bnRFbmQpIHsKLSAgICAgICAgICAgICAgaWYg
KGVuZFRpbWUubGVuZ3RoID09IG51bWJlck9mVGVzdHMpIHsKLSAgICAgICAgICAgICAgICAgIHRl
c3RQYXNzZWQoIkFsbCAiICsgbnVtYmVyT2ZUZXN0cyArICIgc3F1YXJlIHB1bHNlcyBlbmRlZCBh
dCB0aGUgY29ycmVjdCB0aW1lLiIpOwotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgdGVzdEZhaWxlZCgiQWxsIHB1bHNlcyBlbmRlZCBhdCB0aGUgY29ycmVjdCB0aW1l
LCBidXQgb25seSAiICsgZW5kVGltZS5sZW5ndGggKyAiIHB1bHNlcyBmb3VuZC4iKTsKLSAgICAg
ICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgIHRlc3RGYWlsZWQoZXJyb3JDb3VudEVuZCArICIgb3V0
IG9mICIgKyBudW1iZXJPZlRlc3RzICsgIiBzcXVhcmUgcHVsc2VzIGVuZGVkIGF0IHRoZSB3cm9u
ZyB0aW1lLiIpOwotICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgICAgfQot
Ci0gICAgICAKICAgICAgICAgICBpZiAoc3VjY2VzcykgewogICAgICAgICAgICAgICB0ZXN0UGFz
c2VkKCJub3RlR3JhaW5PbiB0aW1pbmcgdGVzdHMgcGFzc2VkLiIpOwogICAgICAgICAgIH0gZWxz
ZSB7CkBAIC0xNjMsMTYgKzM1LDYgQEAKICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKICAgICAg
IH0KIAotICAgICAgZnVuY3Rpb24gcGxheU5vdGUodGltZSwgZ3JhaW5PZmZzZXQsIGR1cmF0aW9u
KSB7Ci0gICAgICAgICAgdmFyIGJ1ZmZlclNvdXJjZSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291
cmNlKCk7Ci0gICAgICAgICAgYnVmZmVyU291cmNlLmJ1ZmZlciA9IHNxdWFyZVB1bHNlQnVmZmVy
OwotICAgICAgICAgIGJ1ZmZlclNvdXJjZS5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pOwot
ICAgICAgICAgIC8vIFdlJ3JlIG9ubHkgdGVzdGluZyB0aGF0IHRoZSBzb3VyY2Ugc3RhcnRzIGFu
ZCBlbmRzIGF0IGEKLSAgICAgICAgICAvLyBwYXJ0aWN1bGFyIHRpbWUuICBTZWUgYnVnIDc3MjI1
Ci0gICAgICAgICAgLy8gKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NzIyNSkuCi0gICAgICAgICAgYnVmZmVyU291cmNlLm5vdGVHcmFpbk9uKHRpbWUsIGdyYWluT2Zm
c2V0LCBkdXJhdGlvbik7Ci0gICAgICB9Ci0KICAgICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CiAg
ICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewogICAgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CkBAIC0xODMsMTIgKzQ1LDEwIEBA
CiAKICAgICAgICAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBjb250ZXh0LgogICAgICAgICAg
IGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJU
aW1lLCBzYW1wbGVSYXRlKTsKLSAgICAgICAgICBjcmVhdGVTcXVhcmVQdWxzZShjb250ZXh0KTsg
ICAgCiAKLSAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mVGVzdHM7ICsraSkg
ewotICAgICAgICAgICAgICB2YXIgdGltZU9mZnNldCA9IHRpbWVTdGVwICogaTsKLSAgICAgICAg
ICAgICAgcGxheU5vdGUodGltZU9mZnNldCwgaSAqIGdyYWluT2Zmc2V0U3RlcCwgZHVyYXRpb24p
OwotICAgICAgICAgIH0KKyAgICAgICAgICBzcXVhcmVQdWxzZUJ1ZmZlciA9IGNyZWF0ZVNpZ25h
bEJ1ZmZlcihjb250ZXh0LCBmdW5jdGlvbiAoaykgeyByZXR1cm4gMSB9KTsgICAgCisKKyAgICAg
ICAgICBwbGF5QWxsTm90ZXMoY29udGV4dCwgc3F1YXJlUHVsc2VCdWZmZXIsIG51bWJlck9mVGVz
dHMpOwogCiAgICAgICAgICAgY29udGV4dC5vbmNvbXBsZXRlID0gY2hlY2tSZXN1bHQ7CiAgICAg
ICAgICAgY29udGV4dC5zdGFydFJlbmRlcmluZygpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vcmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMgYi9MYXlvdXRUZXN0cy93ZWJhdWRp
by9yZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcwppbmRleCBjNDI4YWUwMTRlMGEwYTI3ZTE2Njhj
ZmIyZGIwOWUzZWE3ODc5NzUzLi43Yzc2NjZjMWFkMWRjMzc4MmFiMGY3ZTJhMGFiZTk1Njk5ZGJi
MjZiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW8tdGVz
dGluZy5qcworKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW8tdGVzdGlu
Zy5qcwpAQCAtMTI1LDMgKzEyNSwxMSBAQCBmdW5jdGlvbiB0aW1lVG9TYW1wbGVGcmFtZSh0aW1l
LCBzYW1wbGVSYXRlKSB7CiAgICAgcmV0dXJuIE1hdGguZmxvb3IoMC41ICsgdGltZSAqIHNhbXBs
ZVJhdGUpOwogfQogCisvLyBDb21wdXRlIHRoZSBudW1iZXIgb2Ygc2FtcGxlIGZyYW1lcyBjb25z
dW1lZCBieSBub3RlR3JhaW5PbiB3aXRoCisvLyB0aGUgc3BlY2lmaWVkIHxncmFpbk9mZnNldHws
IHxkdXJhdGlvbnwsIGFuZCB8c2FtcGxlUmF0ZXwuCitmdW5jdGlvbiBncmFpbkxlbmd0aEluU2Ft
cGxlRnJhbWVzKGdyYWluT2Zmc2V0LCBkdXJhdGlvbiwgc2FtcGxlUmF0ZSkgeworICAgIHZhciBz
dGFydEZyYW1lID0gdGltZVRvU2FtcGxlRnJhbWUoZ3JhaW5PZmZzZXQsIHNhbXBsZVJhdGUpOwor
ICAgIHZhciBlbmRGcmFtZSA9IHRpbWVUb1NhbXBsZUZyYW1lKGdyYWluT2Zmc2V0ICsgZHVyYXRp
b24sIHNhbXBsZVJhdGUpOworCisgICAgcmV0dXJuIGVuZEZyYW1lIC0gc3RhcnRGcmFtZTsKK30K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9ub3RlLWdyYWluLW9u
LXRlc3RpbmcuanMgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvbm90ZS1ncmFpbi1v
bi10ZXN0aW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjliYTYwOWNmMjZlNzM5N2U0MWU5ODZmNTRkYmI2Mzk1
NzMzNzgxZWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJj
ZXMvbm90ZS1ncmFpbi1vbi10ZXN0aW5nLmpzCkBAIC0wLDAgKzEsMTc1IEBACit2YXIgc2FtcGxl
UmF0ZSA9IDQ0MTAwLjA7CisKKy8vIEhSVEYgZXh0cmEgZnJhbWVzLiAgVGhpcyBpcyBhIG1hZ2lj
IGNvbnN0YW50IGN1cnJlbnRseSBpbgorLy8gQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpwcm9jZXNz
IHRoYXQgYWx3YXlzIGV4dGVuZHMgdGhlCisvLyBkdXJhdGlvbiBieSB0aGlzIG51bWJlciBvZiBz
YW1wbGVzLiAgU2VlIGJ1ZyA3NzIyNAorLy8gKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03NzIyNCkuCit2YXIgZXh0cmFGcmFtZXNIUlRGID0gNTEyOworCisvLyBIb3cg
bWFueSBwdWxzZXMgdG8gcGxheS4KK3ZhciBudW1iZXJPZlRlc3RzID0gMTAwOworCisvLyBEdXJh
dGlvbiBvZiBlYWNoIHB1bHNlIHRvIGJlIHBsYXllZAordmFyIGR1cmF0aW9uID0gMC4wMTsKKwor
Ly8gVGltZSBzdGVwIGJldHdlZW4gdGhlIHN0YXJ0IG9mIGVhY2ggcHVsc2UuICBXZSBuZWVkIHRv
IGFkZCBhIGxpdHRsZQorLy8gYml0IG9mIHNpbGVuY2Ugc28gd2UgY2FuIGRldGVjdCBwdWxzZSBi
b3VuZGFyaWVzIGFuZCBhbHNvIGFjY291bnQKKy8vIGZvciB0aGUgZXh0cmEgZnJhbWVzIGZvciBI
UlRGLgordmFyIHRpbWVTdGVwID0gZHVyYXRpb24gKyAuMDA1ICsgZXh0cmFGcmFtZXNIUlRGIC8g
c2FtcGxlUmF0ZTsKKworLy8gVGltZSBzdGVwIGJldHdlZW4gdGhlIGdyYWluIHN0YXJ0IGZvciBl
YWNoIHB1bHNlLgordmFyIGdyYWluT2Zmc2V0U3RlcCA9IDAuMDAxOworCisvLyBIb3cgbG9uZyB0
byByZW5kZXIgdG8gY292ZXIgYWxsIG9mIHRoZSBwdWxzZXMuCit2YXIgcmVuZGVyVGltZSA9IChu
dW1iZXJPZlRlc3RzICsgMSkgKiB0aW1lU3RlcDsKKwordmFyIGNvbnRleHQ7Cit2YXIgcmVuZGVy
ZWREYXRhOworCisvLyBDcmVhdGUgYSBidWZmZXIgY29udGFpbmluZyB0aGUgZGF0YSB0aGF0IHdl
IHdhbnQuICBUaGUgZnVuY3Rpb24gZgorLy8gcmV0dXJucyB0aGUgZGVzaXJlZCB2YWx1ZSBhdCBz
YW1wbGUgZnJhbWUgay4KK2Z1bmN0aW9uIGNyZWF0ZVNpZ25hbEJ1ZmZlcihjb250ZXh0LCBmKSB7
CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlIGJ1ZmZlciBoYXMgZW5vdWdoIGRhdGEgZm9yIGFsbCBv
ZiB0aGUgcG9zc2libGUKKyAgICAvLyBncmFpbiBvZmZzZXRzIGFuZCBkdXJhdGlvbnMuICBOZWVk
IHRvIGluY2x1ZGUgdGhlIGV4dHJhIGZyYW1lcworICAgIC8vIGZvciBIUlRGLiAgVGhlIGFkZGl0
aW9uYWwgMSBpcyBmb3IgYW55IHJvdW5kLW9mZiBlcnJvcnMuCisgICAgdmFyIHNpZ25hbExlbmd0
aCA9IE1hdGguZmxvb3IoMSArIGV4dHJhRnJhbWVzSFJURiArIHNhbXBsZVJhdGUgKiAobnVtYmVy
T2ZUZXN0cyAqIGdyYWluT2Zmc2V0U3RlcCArIGR1cmF0aW9uKSk7CisKKyAgICB2YXIgYnVmZmVy
ID0gY29udGV4dC5jcmVhdGVCdWZmZXIoMiwgc2lnbmFsTGVuZ3RoLCBzYW1wbGVSYXRlKTsKKyAg
ICB2YXIgZGF0YSA9IGJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKKworICAgIGZvciAodmFyIGsg
PSAwOyBrIDwgc2lnbmFsTGVuZ3RoOyArK2spIHsKKyAgICAgICAgZGF0YVtrXSA9IGYoayk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworLy8gRnJvbSB0aGUgZGF0YSBhcnJheSwg
ZmluZCB0aGUgc3RhcnQgYW5kIGVuZCBzYW1wbGUgZnJhbWUgZm9yIGVhY2gKKy8vIHB1bHNlLiAg
VGhpcyBkZXBlbmRzIG9uIHRoZSBkYXRhIGhhdmluZyAwJ3MgYmV0d2VlbiBwdWxzZXMsIGFuZAor
Ly8gdGhhdCB0aGUgcHVsc2UgaXMgYWx3YXlzIHN0cmljdGx5IG5vbi16ZXJvLgorZnVuY3Rpb24g
ZmluZFN0YXJ0QW5kRW5kU2FtcGxlcyhkYXRhKSB7CisgICAgdmFyIG5TYW1wbGVzID0gZGF0YS5s
ZW5ndGg7CisKKyAgICB2YXIgc3RhcnRUaW1lID0gW107CisgICAgdmFyIGVuZFRpbWUgPSBbXTsK
KyAgICB2YXIgbG9va0ZvclN0YXJ0ID0gdHJ1ZTsKKyAgICAgIAorICAgIC8vIExvb2sgdGhyb3Vn
aCB0aGUgcmVuZGVyZWQgZGF0YSB0byBmaW5kIHRoZSBzdGFydCBhbmQgc3RvcAorICAgIC8vIHRp
bWVzIG9mIGVhY2ggcHVsc2UuCisgICAgZm9yICh2YXIgayA9IDA7IGsgPCBuU2FtcGxlczsgKytr
KSB7CisgICAgICAgIGlmIChsb29rRm9yU3RhcnQpIHsKKyAgICAgICAgICAgIC8vIEZpbmQgYSBu
b24temVybyBwb2ludCBhbmQgcmVjb3JkIHRoZSBzdGFydC4gIFdlJ3JlIG5vdAorICAgICAgICAg
ICAgLy8gY29uY2VybmVkIHdpdGggdGhlIHZhbHVlIGluIHRoaXMgdGVzdCwgb25seSB0aGF0IHRo
ZQorICAgICAgICAgICAgLy8gcHVsc2Ugc3RhcnRlZCBoZXJlLgorICAgICAgICAgICAgaWYgKHJl
bmRlcmVkRGF0YVtrXSkgeworICAgICAgICAgICAgICAgIHN0YXJ0VGltZS5wdXNoKGspOworICAg
ICAgICAgICAgICAgIGxvb2tGb3JTdGFydCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRmluZCBhIHplcm8gYW5kIHJlY29yZCB0aGUgZW5k
IG9mIHRoZSBwdWxzZS4KKyAgICAgICAgICAgIGlmICghcmVuZGVyZWREYXRhW2tdKSB7CisgICAg
ICAgICAgICAgICAgZW5kVGltZS5wdXNoKGspOworICAgICAgICAgICAgICAgIGxvb2tGb3JTdGFy
dCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
e3N0YXJ0IDogc3RhcnRUaW1lLCBlbmQgOiBlbmRUaW1lfTsKK30KKworZnVuY3Rpb24gcGxheU5v
dGUoY29udGV4dCwgc291cmNlLCB0aW1lLCBvZmZzZXQsIGR1cmF0aW9uKSB7CisgICAgdmFyIGJ1
ZmZlclNvdXJjZSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7CisKKyAgICBidWZmZXJT
b3VyY2UuYnVmZmVyID0gc291cmNlOworICAgIGJ1ZmZlclNvdXJjZS5jb25uZWN0KGNvbnRleHQu
ZGVzdGluYXRpb24pOworICAgIGJ1ZmZlclNvdXJjZS5ub3RlR3JhaW5Pbih0aW1lLCBvZmZzZXQs
IGR1cmF0aW9uKTsKK30KKworZnVuY3Rpb24gcGxheUFsbE5vdGVzKGNvbnRleHQsIHNvdXJjZSwg
bnVtYmVyT2ZOb3RlcykgeworICAgIHZhciBzdGFydEZyYW1lcyA9IG5ldyBBcnJheShudW1iZXJP
Zk5vdGVzKTsKKyAgICB2YXIgb2Zmc2V0cyA9IG5ldyBBcnJheShudW1iZXJPZk5vdGVzKTsKKwor
ICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbnVtYmVyT2ZOb3RlczsgKytrKSB7CisgICAgICAgIHZh
ciB0aW1lT2Zmc2V0ID0gayAqIHRpbWVTdGVwOworICAgICAgICB2YXIgZ3JhaW5PZmZzZXQgPSBr
ICogZ3JhaW5PZmZzZXRTdGVwOworCisgICAgICAgIHBsYXlOb3RlKGNvbnRleHQsIHNvdXJjZSwg
dGltZU9mZnNldCwgZ3JhaW5PZmZzZXQsIGR1cmF0aW9uKTsKKyAgICAgICAgc3RhcnRGcmFtZXNb
a10gPSB0aW1lT2Zmc2V0OworICAgICAgICBvZmZzZXRzW2tdID0gZ3JhaW5PZmZzZXQ7CisgICAg
fQorCisgICAgcmV0dXJuIHsgc3RhcnRGcmFtZXMgOiBzdGFydEZyYW1lcywgZ3JhaW5PZmZzZXRz
IDogb2Zmc2V0cyB9OworfQorCitmdW5jdGlvbiB2ZXJpZnlTdGFydEVuZFRpbWVzKHN0YXJ0RW5k
VGltZXMpIHsKKyAgICB2YXIgc3RhcnRUaW1lID0gc3RhcnRFbmRUaW1lcy5zdGFydDsKKyAgICB2
YXIgZW5kVGltZSA9IHN0YXJ0RW5kVGltZXMuZW5kOworICAgICAgCisgICAgdmFyIHN1Y2Nlc3Mg
PSB0cnVlOworCisgICAgLy8gQ291bnQgb2YgaG93IG1hbnkgcHVsc2VzIHN0YXJ0ZWQgYXQgdGhl
IGluY29ycmVjdCB0aW1lLgorICAgIHZhciBlcnJvckNvdW50U3RhcnQgPSAwOworCisgICAgLy8g
Q291bnQgb2YgaG93IG1hbnkgcHVsc2VzIGVuZGVkIGF0IHRoZSBpbmNvcnJlY3QgdGltZS4KKyAg
ICB2YXIgZXJyb3JDb3VudEVuZCA9IDA7CisKKyAgICBpZiAoc3RhcnRUaW1lLmxlbmd0aCAhPSBl
bmRUaW1lLmxlbmd0aCkgeworICAgICAgICB0ZXN0RmFpbGVkKCJDb3VsZCBub3QgZmluZCB0aGUg
YmVnaW5uaW5nIG9yIGVuZCBvZiBhIHNxdWFyZSBwdWxzZS4iKTsKKyAgICAgICAgc3VjY2VzcyA9
IGZhbHNlOworICAgIH0KKworICAgIGlmIChzdGFydFRpbWUubGVuZ3RoID09IG51bWJlck9mVGVz
dHMgJiYgZW5kVGltZS5sZW5ndGggPT0gbnVtYmVyT2ZUZXN0cykgeworICAgICAgICB0ZXN0UGFz
c2VkKCJGb3VuZCBhbGwgIiArIG51bWJlck9mVGVzdHMgKyAiIHB1bHNlcy4iKTsKKyAgICB9IGVs
c2UgeworICAgICAgICB0ZXN0RmFpbGVkKCJEaWQgbm90IGZpbmQgYWxsICIgKyBudW1iZXJPZlRl
c3RzICsgIiBwdWxzZXMuIik7CisgICAgfQorCisgICAgLy8gRXhhbWluZSB0aGUgc3RhcnQgYW5k
IHN0b3AgdGltZXMgdG8gc2VlIGlmIHRoZXkgbWF0Y2ggb3VyCisgICAgLy8gZXhwZWN0YXRpb25z
LgorICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3RhcnRUaW1lLmxlbmd0aDsgKytrKSB7CisgICAg
ICAgIHZhciBleHBlY3RlZFN0YXJ0ID0gdGltZVRvU2FtcGxlRnJhbWUoayAqIHRpbWVTdGVwLCBz
YW1wbGVSYXRlKTsKKyAgICAgICAgLy8gVGhlIGVuZCBwb2ludCBpcyB0aGUgZHVyYXRpb24sIHBs
dXMgdGhlIGV4dHJhIGZyYW1lcworICAgICAgICAvLyBmb3IgSFJURi4KKyAgICAgICAgdmFyIGV4
cGVjdGVkRW5kID0gZXh0cmFGcmFtZXNIUlRGICsgZXhwZWN0ZWRTdGFydCArIGdyYWluTGVuZ3Ro
SW5TYW1wbGVGcmFtZXMoayAqIGdyYWluT2Zmc2V0U3RlcCwgZHVyYXRpb24sIHNhbXBsZVJhdGUp
OworCisgICAgICAgIGlmIChzdGFydFRpbWVba10gIT0gZXhwZWN0ZWRTdGFydCkgeworICAgICAg
ICAgICAgdGVzdEZhaWxlZCgiUHVsc2UgIiArIGsgKyAiIHN0YXJ0ZWQgYXQgIiArIHN0YXJ0VGlt
ZVtrXSArICIgYnV0IGV4cGVjdGVkIGF0ICIgKyBleHBlY3RlZFN0YXJ0KTsKKyAgICAgICAgICAg
ICsrZXJyb3JDb3VudFN0YXJ0OworICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGVuZFRpbWVba10gIT0gZXhwZWN0ZWRFbmQpIHsKKyAgICAgICAg
ICAgIHRlc3RGYWlsZWQoIlB1bHNlICIgKyBrICsgIiBlbmRlZCBhdCAiICsgZW5kVGltZVtrXSAr
ICIgYnV0IGV4cGVjdGVkIGF0ICIgKyBleHBlY3RlZEVuZCk7CisgICAgICAgICAgICArK2Vycm9y
Q291bnRFbmQ7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBDaGVjayB0aGF0IGFsbCB0aGUgcHVsc2VzIHN0YXJ0ZWQgb3IgZW5kZWQgYXQg
dGhlIGNvcnJlY3QgdGltZS4KKyAgICBpZiAoIWVycm9yQ291bnRTdGFydCkgeworICAgICAgICBp
ZiAoc3RhcnRUaW1lLmxlbmd0aCA9PSBudW1iZXJPZlRlc3RzKSB7CisgICAgICAgICAgICB0ZXN0
UGFzc2VkKCJBbGwgIiArIG51bWJlck9mVGVzdHMgKyAiIHNxdWFyZSBwdWxzZXMgc3RhcnRlZCBh
dCB0aGUgY29ycmVjdCB0aW1lLiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVz
dEZhaWxlZCgiQWxsIHB1bHNlcyBzdGFydGVkIGF0IHRoZSBjb3JyZWN0IHRpbWUsIGJ1dCBvbmx5
ICIgKyBzdGFydFRpbWUubGVuZ3RoICsgIiBwdWxzZXMgZm91bmQuIik7CisgICAgICAgICAgICBz
dWNjZXNzID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0RmFp
bGVkKGVycm9yQ291bnRTdGFydCArICIgb3V0IG9mICIgKyBudW1iZXJPZlRlc3RzICsgIiBzcXVh
cmUgcHVsc2VzIHN0YXJ0ZWQgYXQgdGhlIHdyb25nIHRpbWUuIik7CisgICAgICAgIHN1Y2Nlc3Mg
PSBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWVycm9yQ291bnRFbmQpIHsKKyAgICAgICAgaWYg
KGVuZFRpbWUubGVuZ3RoID09IG51bWJlck9mVGVzdHMpIHsKKyAgICAgICAgICAgIHRlc3RQYXNz
ZWQoIkFsbCAiICsgbnVtYmVyT2ZUZXN0cyArICIgc3F1YXJlIHB1bHNlcyBlbmRlZCBhdCB0aGUg
Y29ycmVjdCB0aW1lLiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxl
ZCgiQWxsIHB1bHNlcyBlbmRlZCBhdCB0aGUgY29ycmVjdCB0aW1lLCBidXQgb25seSAiICsgZW5k
VGltZS5sZW5ndGggKyAiIHB1bHNlcyBmb3VuZC4iKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQoZXJyb3JD
b3VudEVuZCArICIgb3V0IG9mICIgKyBudW1iZXJPZlRlc3RzICsgIiBzcXVhcmUgcHVsc2VzIGVu
ZGVkIGF0IHRoZSB3cm9uZyB0aW1lLiIpOworICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAg
fQorCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124597</attachid>
            <date>2012-01-30 14:05:59 -0800</date>
            <delta_ts>2012-01-31 15:59:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77225-20120130140557.patch</filename>
            <type>text/plain</type>
            <size>22793</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MjE1CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMTViOGE4MGU0YzAyZDQxZmQ2N2Rj
Mjc0M2E1YTZjNGNhODZjNmYyMC4uMmZjYTFlODg4YjliNWVjN2ViMWE1YjU3ZTk1YjViNzZiMjZl
MTExNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTAxLTMwICBSYXltb25kIFRveSAgPHJ0
b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBub3RlR3JhaW5PbiBuZWVkcyBtb3JlIHRlc3RzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzIyNQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2ViYXVkaW8v
bm90ZS1ncmFpbi1vbi1wbGF5Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL25vdGUt
Z3JhaW4tb24tcGxheS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL25v
dGUtZ3JhaW4tb24tdGltaW5nLmh0bWw6IFJlZmFjdG9yZWQgdG8gdXNlIG5ldworICAgICAgICBm
dW5jdGlvbnMgaW4gbm90ZS1ncmFpbi1vbi10ZXN0aW5nLmpzLgorICAgICAgICAqIHdlYmF1ZGlv
L25vdGUtZ3JhaW4tb24tdGltaW5nLWV4cGVjdGVkLnR4dDogVXBkYXRlZC4KKyAgICAgICAgKiB3
ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qczoKKyAgICAgICAgKGdyYWluTGVuZ3Ro
SW5TYW1wbGVGcmFtZXMpOiAgVXRpbGl0eSB0byBjb21wdXRlIGxlbmd0aCBvZiBhIGdyYWluCisg
ICAgICAgIGluIHNhbXBsZXMuCisgICAgICAgICogd2ViYXVkaW8vcmVzb3VyY2VzL25vdGUtZ3Jh
aW4tb24tdGVzdGluZy5qczogQWRkZWQuCisgICAgICAgIChjcmVhdGVTaWduYWxCdWZmZXIpOgor
ICAgICAgICAoZmluZFN0YXJ0QW5kRW5kU2FtcGxlcyk6CisgICAgICAgIChwbGF5Tm90ZSk6Cisg
ICAgICAgIChwbGF5QWxsTm90ZXMpOgorICAgICAgICAodmVyaWZ5U3RhcnRFbmRUaW1lcyk6IENv
bW1vbiBmdW5jdGlvbnMgZm9yIG5vdGUtZ3JhaW4tb24tcGxheSBhbmQKKyAgICAgICAgbm90ZS1n
cmFpbi1vbi10aW1pbmcgdGVzdHMgdG8gdXNlLgorCiAyMDEyLTAxLTI5ICBZdXpvIEZ1amlzaGlt
YSAgPHl1em9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBbQ2hyb21pdW1dIFVucmV2aWV3ZWQgdGVz
dCBleHBlY3RhdGlvbiBjaGFuZ2UuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9u
b3RlLWdyYWluLW9uLXBsYXktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vbm90
ZS1ncmFpbi1vbi1wbGF5LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYzkxMWY5NmUxNGQ2Yzlm
OGIxN2QwMDNjZGYwNmVjNjA0NTA4MjZmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vbm90ZS1ncmFpbi1vbi1wbGF5LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEzIEBA
CitUZXN0IG5vdGVHcmFpbk9uLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1Mg
Rm91bmQgYWxsIDEwMCBwdWxzZXMuCitQQVNTIEFsbCAxMDAgcHVsc2VzIHN0YXJ0ZWQgYXQgdGhl
IGNvcnJlY3QgdGltZS4KK1BBU1MgQWxsIDEwMCBwdWxzZXMgZW5kZWQgYXQgdGhlIGNvcnJlY3Qg
dGltZS4KK1BBU1MgQWxsIDEwMCByYW1wcyBjb250YWluZWQgdGhlIGNvcnJlY3QgZGF0YS4KK1BB
U1Mgbm90ZUdyYWluT24gZGF0YSB0ZXN0cyBwYXNzZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vbm90ZS1ncmFpbi1vbi1wbGF5Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9ub3Rl
LWdyYWluLW9uLXBsYXkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZjY1MDczMWM1OWU3MGQyNzc1NWQzMGVl
NzRiZjkyNjc3NjI5MzY1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8v
bm90ZS1ncmFpbi1vbi1wbGF5Lmh0bWwKQEAgLTAsMCArMSwxMjUgQEAKKzwhRE9DVFlQRSBIVE1M
IFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+
CisgIDxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9ub3RlLWdyYWluLW9uLXRlc3Rp
bmcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgIDwvaGVhZD4KKworICA8Ym9keT4KKyAgICA8ZGl2
IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisK
KyAgICA8c2NyaXB0PgorICAgICAgZGVzY3JpcHRpb24oIlRlc3Qgbm90ZUdyYWluT24uIik7CisK
KyAgICAgIC8vIFRvIHRlc3Qgbm90ZUdyYWluT24sIGEgc2luZ2xlIHJhbXAgc2lnbmFsIGlzIGNy
ZWF0ZWQuCisgICAgICAvLyBWYXJpb3VzIHNlY3Rpb25zIG9mIHRoZSByYW1wIGFyZSBwbGF5ZWQg
b3V0IGF0IGRpZmZlcmVudAorICAgICAgLy8gdGltZXMsIGFuZCB3ZSB2ZXJpZnkgdGhhdCB0aGUg
YWN0dWFsIG91dHB1dCBtYXRjaGVzIG91cgorICAgICAgLy8gZXhwZWN0YXRpb25zLgorCisgICAg
ICAKKyAgICAgIHZhciBsaW5lYXJSYW1wQnVmZmVyOworCisgICAgICAvLyBBcnJheSBvZiB0aGUg
Z3JhaW4gb2Zmc2V0IHVzZWQgZm9yIGVhY2ggcmFtcCBwbGF5ZWQuCisgICAgICB2YXIgdHJ1ZUdy
YWluT2Zmc2V0ID0gW107CisKKyAgICAgIC8vIFZlcmlmeSB0aGUgcmVjZWl2ZWQgc2lnbmFsIGlz
IGEgcmFtcCBmcm9tIHRoZSBjb3JyZWN0IHNlY3Rpb24KKyAgICAgIC8vIG9mIG91ciByYW1wIHNp
Z25hbC4KKyAgICAgIGZ1bmN0aW9uIHZlcmlmeVJhbXAocmVuZGVyZWREYXRhLCBzdGFydEZyYW1l
LCBlbmRGcmFtZSwgcmFtcE51bWJlcikgeworICAgICAgICAgIHZhciByYW1wT2Zmc2V0ID0gdGlt
ZVRvU2FtcGxlRnJhbWUodHJ1ZUdyYWluT2Zmc2V0W3JhbXBOdW1iZXJdLCBzYW1wbGVSYXRlKTsK
KyAgICAgICAgICB2YXIgcmFtcExlbmd0aCA9IGVuZEZyYW1lIC0gc3RhcnRGcmFtZTsKKyAgICAg
ICAgICB2YXIgcmFtcCA9IGxpbmVhclJhbXBCdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7CisgICAg
ICAgICAgdmFyIGlzQ29ycmVjdCA9IHRydWU7CisKKyAgICAgICAgICB2YXIgZXhwZWN0ZWQ7Cisg
ICAgICAgICAgdmFyIGFjdHVhbDsKKyAgICAgICAgICB2YXIgZnJhbWU7CisgICAgICAKKyAgICAg
ICAgICBmb3IgKHZhciBrID0gMDsgayA8IHJhbXBMZW5ndGg7ICsraykgeworICAgICAgICAgICAg
ICBpZiAocmVuZGVyZWREYXRhW3N0YXJ0RnJhbWUgKyBrXSAhPSByYW1wW3JhbXBPZmZzZXQgKyBr
XSkgeworICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSByYW1wW3JhbXBPZmZzZXQgKyBrXTsK
KyAgICAgICAgICAgICAgICAgIGFjdHVhbCA9IHJlbmRlcmVkRGF0YVtzdGFydEZyYW1lICsga107
CisgICAgICAgICAgICAgICAgICBmcmFtZSA9IHN0YXJ0RnJhbWUgKyBrOworICAgICAgICAgICAg
ICAgICAgaXNDb3JyZWN0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4geyB2ZXJpZmllZDogaXND
b3JyZWN0LAorICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkIDogZXhwZWN0ZWQgLAorICAgICAg
ICAgICAgICAgICAgIGFjdHVhbCA6IGFjdHVhbCwKKyAgICAgICAgICAgICAgICAgICBmcmFtZSA6
IGZyYW1lIH07CisgICAgICB9CisgICAgICAKKyAgICAgIGZ1bmN0aW9uIGNoZWNrUmVzdWx0KGV2
ZW50KSB7CisgICAgICAgICAgdmFyIGJ1ZmZlciA9IGV2ZW50LnJlbmRlcmVkQnVmZmVyOworICAg
ICAgICAgIHJlbmRlcmVkRGF0YSA9IGJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKKyAgICAgICAg
ICB2YXIgblNhbXBsZXMgPSByZW5kZXJlZERhdGEubGVuZ3RoOworCisgICAgICAgICAgdmFyIHN1
Y2Nlc3MgPSB0cnVlOworCisgICAgICAgICAgLy8gTnVtYmVyIG9mIHJhbXBzIHRoYXQgd2UgZm91
bmQgdGhhdCBoYXZlIGluY29ycmVjdCBkYXRhLgorICAgICAgICAgIHZhciBpbnZhbGlkUmFtcERh
dGFDb3VudCA9IDA7CisgICAgICAKKyAgICAgICAgICB2YXIgc3RhcnRFbmRUaW1lcyA9IGZpbmRT
dGFydEFuZEVuZFNhbXBsZXMocmVuZGVyZWREYXRhKTsKKworICAgICAgICAgIC8vIFZlcmlmeSB0
aGUgc3RhcnQgYW5kIHN0b3AgdGltZXMuICBOb3Qgc3RyaWN0bHkgbmVlZGVkIGZvcgorICAgICAg
ICAgIC8vIHRoaXMgdGVzdCwgYnV0IGl0J3MgdXNlZnVsIHRvIGtub3cgdGhhdCBpZiB0aGUgcmFt
cCBkYXRhCisgICAgICAgICAgLy8gYXBwZWFycyB0byBiZSBpbmNvcnJlY3QuCisgICAgICAgICAg
c3VjY2VzcyA9IHN1Y2Nlc3MgJiYgdmVyaWZ5U3RhcnRFbmRUaW1lcyhzdGFydEVuZFRpbWVzKTsK
KworICAgICAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSByZW5kZXJlZCBkYXRhIG1hdGNoZXMgdGhl
IGV4cGVjdGVkCisgICAgICAgICAgLy8gc2VjdGlvbiBvZiBvdXIgcmFtcCBzaWduYWwuCisgICAg
ICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzdGFydEVuZFRpbWVzLnN0YXJ0Lmxlbmd0aDsgKytr
KSB7CisgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB2ZXJpZnlSYW1wKHJlbmRlcmVkRGF0YSwg
c3RhcnRFbmRUaW1lcy5zdGFydFtrXSwgc3RhcnRFbmRUaW1lcy5lbmRba10sIGspOworICAgICAg
ICAgICAgICBpZiAoIXJlc3VsdC52ZXJpZmllZCkgeworICAgICAgICAgICAgICAgICAgdGVzdEZh
aWxlZCgiUmFtcCAiICsgayArICIgaW5jb3JyZWN0LiAgRXhwZWN0ZWQgIiArIHJlc3VsdC5leHBl
Y3RlZCArICIgYnV0IHJlY2VpdmVkICIgKyByZXN1bHQuYWN0dWFsICsgIiBhdCBzYW1wbGUgZnJh
bWUgIiArIHJlc3VsdC5mcmFtZSk7CisgICAgICAgICAgICAgICAgICArK2ludmFsaWRSYW1wRGF0
YUNvdW50OworICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICAgICAg
ICB9CisgICAgICAgICAgfQorICAgICAgICAgIAorICAgICAgICAgIGlmICghaW52YWxpZFJhbXBE
YXRhQ291bnQpIHsKKyAgICAgICAgICAgICAgdGVzdFBhc3NlZCgiQWxsICIgKyBudW1iZXJPZlRl
c3RzICsgIiByYW1wcyBjb250YWluZWQgdGhlIGNvcnJlY3QgZGF0YS4iKTsKKyAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICB0ZXN0RmFpbGVkKGludmFsaWRSYW1wRGF0YUNvdW50ICsg
IiByYW1wcyBvdXQgb2YgIiArIG51bWJlck9mVGVzdHMgKyAiIGRpZCBub3QgY29udGFpbiB0aGUg
ZXhwZWN0ZWQgZGF0YS4iKTsKKyAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAg
ICAgIH0KKyAgICAgIAorICAgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICAgIHRl
c3RQYXNzZWQoIm5vdGVHcmFpbk9uIGRhdGEgdGVzdHMgcGFzc2VkLiIpOworICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIm5vdGVHcmFpbk9uIGRhdGEgdGVzdHMg
ZmFpbGVkLiIpOworICAgICAgICAgIH0KKworICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAg
ICAgfQorCisgICAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0
VW50aWxEb25lKCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgd2luZG93LmpzVGVzdElzQXN5
bmMgPSB0cnVlOworCisgICAgICAgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dC4K
KyAgICAgICAgICBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1wbGVSYXRl
ICogcmVuZGVyVGltZSwgc2FtcGxlUmF0ZSk7CisgICAgICAgICAgbGluZWFyUmFtcEJ1ZmZlciA9
IGNyZWF0ZVNpZ25hbEJ1ZmZlcihjb250ZXh0LCBmdW5jdGlvbiAoaykgeyByZXR1cm4gayArIDE7
IH0pOyAgICAKKworICAgICAgICAgIHZhciBub3RlSW5mbyA9IHBsYXlBbGxOb3Rlcyhjb250ZXh0
LCBsaW5lYXJSYW1wQnVmZmVyLCBudW1iZXJPZlRlc3RzKTsKKworICAgICAgICAgIHRydWVHcmFp
bk9mZnNldCA9IG5vdGVJbmZvLmdyYWluT2Zmc2V0czsKKworICAgICAgICAgIGNvbnRleHQub25j
b21wbGV0ZSA9IGNoZWNrUmVzdWx0OworICAgICAgICAgIGNvbnRleHQuc3RhcnRSZW5kZXJpbmco
KTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgcnVuVGVzdCgpOworICAgICAgc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gdHJ1ZTsKKworICAgIDwvc2NyaXB0PgorCisgICAgPHNjcmlwdCBzcmM9Ii4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisgIDwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL25vdGUtZ3JhaW4tb24tdGlt
aW5nLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL25vdGUtZ3JhaW4tb24tdGlt
aW5nLWV4cGVjdGVkLnR4dAppbmRleCBjNTI0ZjgyOTZiZDczMjgyNmJjYTc5YzZkYzJjZTA0NDU1
ZDcxMzdlLi5jOGU5OTBiMzY3NTcxN2Y2MzVmMjJhZTY1MmFkNTU3OWY4NGRmMjE3IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9ub3RlLWdyYWluLW9uLXRpbWluZy1leHBlY3RlZC50
eHQKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vbm90ZS1ncmFpbi1vbi10aW1pbmctZXhwZWN0
ZWQudHh0CkBAIC0zLDggKzMsOCBAQCBUZXN0IHRpbWluZyBvZiBub3RlR3JhaW5Pbi4KIE9uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KIAogUEFTUyBGb3VuZCBhbGwgMTAwIHB1bHNlcy4KLVBBU1Mg
QWxsIDEwMCBzcXVhcmUgcHVsc2VzIHN0YXJ0ZWQgYXQgdGhlIGNvcnJlY3QgdGltZS4KLVBBU1Mg
QWxsIDEwMCBzcXVhcmUgcHVsc2VzIGVuZGVkIGF0IHRoZSBjb3JyZWN0IHRpbWUuCitQQVNTIEFs
bCAxMDAgcHVsc2VzIHN0YXJ0ZWQgYXQgdGhlIGNvcnJlY3QgdGltZS4KK1BBU1MgQWxsIDEwMCBw
dWxzZXMgZW5kZWQgYXQgdGhlIGNvcnJlY3QgdGltZS4KIFBBU1Mgbm90ZUdyYWluT24gdGltaW5n
IHRlc3RzIHBhc3NlZC4KIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vbm90ZS1ncmFpbi1vbi10aW1pbmcuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL25vdGUtZ3JhaW4tb24tdGltaW5nLmh0bWwKaW5kZXggZjMzYWYw
OWI1YjBkM2E1MTk4NWI2MTcyODFjNWZmM2I2Y2NlNTU2ZS4uMzFlZThhMzY2ZmUwOGQzNDk2MzU5
OTk4N2E4NDNmMjNiMTkyZGM3ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vbm90
ZS1ncmFpbi1vbi10aW1pbmcuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9ub3RlLWdy
YWluLW9uLXRpbWluZy5odG1sCkBAIC0yLDYgKzIsNyBAQAogPGh0bWw+CiAgIDxoZWFkPgogICAg
IDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9InJlc291cmNlcy9ub3RlLWdyYWluLW9uLXRlc3RpbmcuanMiPjwvc2NyaXB0
PgogICAgIDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+CiAgIDwvaGVhZD4KIApAQCAtMTIsMTQ4ICsxMywxOSBAQAogICAgIDxzY3JpcHQ+
CiAgICAgICBkZXNjcmlwdGlvbigiVGVzdCB0aW1pbmcgb2Ygbm90ZUdyYWluT24uIik7CiAKLSAg
ICAgIHZhciBzYW1wbGVSYXRlID0gNDQxMDAuMDsKLQotICAgICAgLy8gSFJURiBleHRyYSBmcmFt
ZXMuICBUaGlzIGlzIGEgbWFnaWMgY29uc3RhbnQgY3VycmVudGx5IGluCi0gICAgICAvLyBBdWRp
b0J1ZmZlclNvdXJjZU5vZGU6OnByb2Nlc3MgdGhhdCBhbHdheXMgZXh0ZW5kcyB0aGUKLSAgICAg
IC8vIGR1cmF0aW9uIGJ5IHRoaXMgbnVtYmVyIG9mIHNhbXBsZXMuICBTZWUgYnVnIDc3MjI0Ci0g
ICAgICAvLyAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MjI0KS4K
LSAgICAgIHZhciBleHRyYUZyYW1lc0hSVEYgPSA1MTI7Ci0gICAgICAKLSAgICAgIC8vIEhvdyBt
YW55IHNxdWFyZSBwdWxzZXMgdG8gcGxheS4KLSAgICAgIHZhciBudW1iZXJPZlRlc3RzID0gMTAw
OwotCi0gICAgICAvLyBEdXJhdGlvbiBvZiB0aGUgc3F1YXJlIHB1bHNlIHRvIGJlIHBsYXllZAot
ICAgICAgdmFyIGR1cmF0aW9uID0gMC4wMTsKLQotICAgICAgLy8gVGltZSBzdGVwIGJldHdlZW4g
dGhlIHN0YXJ0IG9mIGVhY2ggc3F1YXJlIHB1bHNlLiAgV2UgbmVlZCB0bwotICAgICAgLy8gYWRk
IGEgbGl0dGxlIGJpdCBvZiBzaWxlbmNlIHNvIHdlIGNhbiBkZXRlY3QgcHVsc2UgYm91bmRhcmll
cwotICAgICAgLy8gYW5kIGFsc28gYWNjb3VudCBmb3IgdGhlIGV4dHJhIGZyYW1lcyBmb3IgSFJU
Ri4KLSAgICAgIHZhciB0aW1lU3RlcCA9IGR1cmF0aW9uICsgLjAwNSArIGV4dHJhRnJhbWVzSFJU
RiAvIHNhbXBsZVJhdGU7Ci0KLSAgICAgIC8vIFRpbWUgc3RlcCBiZXR3ZWVuIHRoZSBncmFpbiBz
dGFydCBmb3IgZWFjaCBzcXVhcmUgcHVsc2UuCi0gICAgICB2YXIgZ3JhaW5PZmZzZXRTdGVwID0g
MC4wMDU7Ci0KLSAgICAgIC8vIEhvdyBsb25nIHRvIHJlbmRlciB0byBjb3ZlciBhbGwgb2YgdGhl
IHB1bHNlcy4KLSAgICAgIHZhciByZW5kZXJUaW1lID0gKG51bWJlck9mVGVzdHMgKyAxKSAqIHRp
bWVTdGVwOwotCi0gICAgICB2YXIgY29udGV4dDsKICAgICAgIHZhciBzcXVhcmVQdWxzZUJ1ZmZl
cjsKLSAgICAgIHZhciByZW5kZXJlZERhdGE7Ci0KLSAgICAgIGZ1bmN0aW9uIGNyZWF0ZVNxdWFy
ZVB1bHNlKGNvbnRleHQpIHsKLSAgICAgICAgICAvLyBDcmVhdGUgYSBzcXVhcmUgcHVsc2UgdGhh
dCBpcyBsb25nIGVub3VnaCBzbyB0aGF0IGFsbCB0aGUKLSAgICAgICAgICAvLyBwb3NzaWJsZSBn
cmFpbiBvZmZzZXRzIHN0aWxsIHJlc3VsdHMgaW4gYSBzcXVhcmUgcHVsc2Ugb2YKLSAgICAgICAg
ICAvLyBvZiB0aGUgcmVxdWVzdGVkIGR1cmF0aW9uLiAgKFRoZSBleHRyYSAxIGlzIGZvciBhbnkK
LSAgICAgICAgICAvLyByb3VuZC1vZmYuKSAKLQotICAgICAgICAgIHZhciBwdWxzZUxlbmd0aCA9
IE1hdGguZmxvb3IoMSArIGV4dHJhRnJhbWVzSFJURiArIHNhbXBsZVJhdGUgKiAobnVtYmVyT2ZU
ZXN0cyAqIGdyYWluT2Zmc2V0U3RlcCArIGR1cmF0aW9uKSk7CiAKLSAgICAgICAgICBzcXVhcmVQ
dWxzZUJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlQnVmZmVyKDIsIHB1bHNlTGVuZ3RoLCBzYW1wbGVS
YXRlKTsKLSAgICAgICAgICB2YXIgZGF0YSA9IHNxdWFyZVB1bHNlQnVmZmVyLmdldENoYW5uZWxE
YXRhKDApOwotICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcHVsc2VMZW5ndGg7ICsraykg
ewotICAgICAgICAgICAgICBkYXRhW2tdID0gMTsKLSAgICAgICAgICB9Ci0gICAgICB9Ci0KLSAg
ICAgIGZ1bmN0aW9uIHRydWVHcmFpbkxlbmd0aChncmFpbk9mZnNldCwgZHVyYXRpb24pIHsKLSAg
ICAgICAgICB2YXIgc3RhcnRGcmFtZSA9IHRpbWVUb1NhbXBsZUZyYW1lKGdyYWluT2Zmc2V0LCBz
YW1wbGVSYXRlKTsKLSAgICAgICAgICB2YXIgZW5kRnJhbWUgPSB0aW1lVG9TYW1wbGVGcmFtZShn
cmFpbk9mZnNldCArIGR1cmF0aW9uLCBzYW1wbGVSYXRlKTsKLQotICAgICAgICAgIHJldHVybiBl
bmRGcmFtZSAtIHN0YXJ0RnJhbWU7Ci0gICAgICB9Ci0gICAgICAKICAgICAgIGZ1bmN0aW9uIGNo
ZWNrUmVzdWx0KGV2ZW50KSB7CiAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGV2ZW50LnJlbmRlcmVk
QnVmZmVyOwogICAgICAgICAgIHJlbmRlcmVkRGF0YSA9IGJ1ZmZlci5nZXRDaGFubmVsRGF0YSgw
KTsKICAgICAgICAgICB2YXIgblNhbXBsZXMgPSByZW5kZXJlZERhdGEubGVuZ3RoOwogCiAgICAg
ICAgICAgdmFyIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgICAgIHZhciBlcnJvckNvdW50U3RhcnQg
PSAwOwotICAgICAgICAgIHZhciBlcnJvckNvdW50RW5kID0gMDsKICAgICAgIAotICAgICAgICAg
IHZhciBzdGFydFRpbWUgPSBbXTsKLSAgICAgICAgICB2YXIgZW5kVGltZSA9IFtdOwotICAgICAg
ICAgIHZhciBsb29rRm9yU3RhcnQgPSB0cnVlOwotICAgICAgCi0gICAgICAgICAgLy8gTG9vayB0
aHJvdWdoIHRoZSByZW5kZXJlZCBkYXRhIHRvIGZpbmQgdGhlIHN0YXJ0IGFuZCBzdG9wCi0gICAg
ICAgICAgLy8gdGltZXMgb2YgZWFjaCBwdWxzZS4KLSAgICAgICAgICBmb3IgKHZhciBrID0gMDsg
ayA8IG5TYW1wbGVzOyArK2spIHsKLSAgICAgICAgICAgICAgaWYgKGxvb2tGb3JTdGFydCkgewot
ICAgICAgICAgICAgICAgICAgLy8gRmluZCBhIG5vbi16ZXJvIHBvaW50IGFuZCByZWNvcmQgaXQu
ICBXZSdyZSBub3QKLSAgICAgICAgICAgICAgICAgIC8vIGNvbmNlcm5lZCB3aXRoIHRoZSB2YWx1
ZSBpbiB0aGlzIHRlc3QsIG9ubHkgdGhhdAotICAgICAgICAgICAgICAgICAgLy8gdGhlIHB1bHNl
IHN0YXJ0ZWQgaGVyZS4gIE90aGVyIHRlc3RzIHNob3VsZCBjb3ZlcgotICAgICAgICAgICAgICAg
ICAgLy8gdGhpcyBjYXNlLgotICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmVkRGF0YVtrXSA+
IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICBzdGFydFRpbWUucHVzaChrKTsKLSAgICAgICAg
ICAgICAgICAgICAgICBsb29rRm9yU3RhcnQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgIC8vIEZpbmQgYSB6ZXJv
IGFuZCByZWNvcmQgaXQuCi0gICAgICAgICAgICAgICAgICBpZiAocmVuZGVyZWREYXRhW2tdID09
IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICBlbmRUaW1lLnB1c2goayk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgbG9va0ZvclN0YXJ0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgfQotICAgICAgICAgIH0KKyAgICAgICAgICB2YXIgc3RhcnRFbmRUaW1lcyA9
IGZpbmRTdGFydEFuZEVuZFNhbXBsZXMocmVuZGVyZWREYXRhKTsKIAotICAgICAgICAgIGlmIChz
dGFydFRpbWUubGVuZ3RoICE9IGVuZFRpbWUubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgIHRlc3RG
YWlsZWQoIkNvdWxkIG5vdCBmaW5kIHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIGEgc3F1YXJlIHB1
bHNlLiIpOwotICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgICAgfQotCi0g
ICAgICAgICAgaWYgKHN0YXJ0VGltZS5sZW5ndGggPT0gbnVtYmVyT2ZUZXN0cyAmJiBlbmRUaW1l
Lmxlbmd0aCA9PSBudW1iZXJPZlRlc3RzKSB7Ci0gICAgICAgICAgICAgIHRlc3RQYXNzZWQoIkZv
dW5kIGFsbCAiICsgbnVtYmVyT2ZUZXN0cyArICIgcHVsc2VzLiIpOwotICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgIHRlc3RGYWlsZWQoIkRpZCBub3QgZmluZCBhbGwgIiArIG51bWJl
ck9mVGVzdHMgKyAiIHB1bHNlcy4iKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvLyBFeGFt
aW5lIHRoZSBzdGFydCBhbmQgc3RvcCB0aW1lcyB0byBzZWUgaWYgdGhleSBtYXRjaCBvdXIKLSAg
ICAgICAgICAvLyBleHBlY3RhdGlvbnMuCi0gICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBz
dGFydFRpbWUubGVuZ3RoOyArK2spIHsKLSAgICAgICAgICAgICAgdmFyIGV4cGVjdGVkU3RhcnQg
PSB0aW1lVG9TYW1wbGVGcmFtZShrICogdGltZVN0ZXAsIHNhbXBsZVJhdGUpOwotICAgICAgICAg
ICAgICAvLyBUaGUgZW5kIHBvaW50IGlzIHRoZSBkdXJhdGlvbiwgcGx1cyB0aGUgZXh0cmEgZnJh
bWVzCi0gICAgICAgICAgICAgIC8vIGZvciBIUlRGLgotICAgICAgICAgICAgICB2YXIgZXhwZWN0
ZWRFbmQgPSBleHRyYUZyYW1lc0hSVEYgKyBleHBlY3RlZFN0YXJ0ICsgdHJ1ZUdyYWluTGVuZ3Ro
KGsgKiBncmFpbk9mZnNldFN0ZXAsIGR1cmF0aW9uKTsKLQotICAgICAgICAgICAgICBpZiAoc3Rh
cnRUaW1lW2tdICE9IGV4cGVjdGVkU3RhcnQpIHsKLSAgICAgICAgICAgICAgICAgIHRlc3RGYWls
ZWQoIlB1bHNlICIgKyBrICsgIiBzdGFydGVkIGF0ICIgKyBzdGFydFRpbWVba10gKyAiIGJ1dCBl
eHBlY3RlZCBhdCAiICsgZXhwZWN0ZWRTdGFydCk7Ci0gICAgICAgICAgICAgICAgICArK2Vycm9y
Q291bnRTdGFydDsKLSAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgIGlmIChlbmRUaW1lW2tdICE9IGV4cGVjdGVkRW5kKSB7
Ci0gICAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJQdWxzZSAiICsgayArICIgZW5kZWQgYXQg
IiArIGVuZFRpbWVba10gKyAiIGJ1dCBleHBlY3RlZCBhdCAiICsgZXhwZWN0ZWRFbmQpOwotICAg
ICAgICAgICAgICAgICAgKytlcnJvckNvdW50RW5kOwotICAgICAgICAgICAgICAgICAgc3VjY2Vz
cyA9IGZhbHNlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYg
KCFlcnJvckNvdW50U3RhcnQpIHsKLSAgICAgICAgICAgICAgaWYgKHN0YXJ0VGltZS5sZW5ndGgg
PT0gbnVtYmVyT2ZUZXN0cykgewotICAgICAgICAgICAgICAgICAgdGVzdFBhc3NlZCgiQWxsICIg
KyBudW1iZXJPZlRlc3RzICsgIiBzcXVhcmUgcHVsc2VzIHN0YXJ0ZWQgYXQgdGhlIGNvcnJlY3Qg
dGltZS4iKTsKLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgIHRlc3RG
YWlsZWQoIkFsbCBwdWxzZXMgc3RhcnRlZCBhdCB0aGUgY29ycmVjdCB0aW1lLCBidXQgb25seSAi
ICsgc3RhcnRUaW1lLmxlbmd0aCArICIgcHVsc2VzIGZvdW5kLiIpOwotICAgICAgICAgICAgICAg
ICAgc3VjY2VzcyA9IGZhbHNlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgdGVzdEZhaWxlZChlcnJvckNvdW50U3RhcnQgKyAiIG91dCBvZiAiICsg
bnVtYmVyT2ZUZXN0cyArICIgc3F1YXJlIHB1bHNlcyBzdGFydGVkIGF0IHRoZSB3cm9uZyB0aW1l
LiIpOwotICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgICAgfQorICAgICAg
ICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIHZlcmlmeVN0YXJ0RW5kVGltZXMoc3RhcnRFbmRUaW1l
cyk7CiAKLSAgICAgICAgICBpZiAoIWVycm9yQ291bnRFbmQpIHsKLSAgICAgICAgICAgICAgaWYg
KGVuZFRpbWUubGVuZ3RoID09IG51bWJlck9mVGVzdHMpIHsKLSAgICAgICAgICAgICAgICAgIHRl
c3RQYXNzZWQoIkFsbCAiICsgbnVtYmVyT2ZUZXN0cyArICIgc3F1YXJlIHB1bHNlcyBlbmRlZCBh
dCB0aGUgY29ycmVjdCB0aW1lLiIpOwotICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgdGVzdEZhaWxlZCgiQWxsIHB1bHNlcyBlbmRlZCBhdCB0aGUgY29ycmVjdCB0aW1l
LCBidXQgb25seSAiICsgZW5kVGltZS5sZW5ndGggKyAiIHB1bHNlcyBmb3VuZC4iKTsKLSAgICAg
ICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgIHRlc3RGYWlsZWQoZXJyb3JDb3VudEVuZCArICIgb3V0
IG9mICIgKyBudW1iZXJPZlRlc3RzICsgIiBzcXVhcmUgcHVsc2VzIGVuZGVkIGF0IHRoZSB3cm9u
ZyB0aW1lLiIpOwotICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgICAgfQot
Ci0gICAgICAKICAgICAgICAgICBpZiAoc3VjY2VzcykgewogICAgICAgICAgICAgICB0ZXN0UGFz
c2VkKCJub3RlR3JhaW5PbiB0aW1pbmcgdGVzdHMgcGFzc2VkLiIpOwogICAgICAgICAgIH0gZWxz
ZSB7CkBAIC0xNjMsMTYgKzM1LDYgQEAKICAgICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKICAgICAg
IH0KIAotICAgICAgZnVuY3Rpb24gcGxheU5vdGUodGltZSwgZ3JhaW5PZmZzZXQsIGR1cmF0aW9u
KSB7Ci0gICAgICAgICAgdmFyIGJ1ZmZlclNvdXJjZSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291
cmNlKCk7Ci0gICAgICAgICAgYnVmZmVyU291cmNlLmJ1ZmZlciA9IHNxdWFyZVB1bHNlQnVmZmVy
OwotICAgICAgICAgIGJ1ZmZlclNvdXJjZS5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pOwot
ICAgICAgICAgIC8vIFdlJ3JlIG9ubHkgdGVzdGluZyB0aGF0IHRoZSBzb3VyY2Ugc3RhcnRzIGFu
ZCBlbmRzIGF0IGEKLSAgICAgICAgICAvLyBwYXJ0aWN1bGFyIHRpbWUuICBTZWUgYnVnIDc3MjI1
Ci0gICAgICAgICAgLy8gKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
NzIyNSkuCi0gICAgICAgICAgYnVmZmVyU291cmNlLm5vdGVHcmFpbk9uKHRpbWUsIGdyYWluT2Zm
c2V0LCBkdXJhdGlvbik7Ci0gICAgICB9Ci0KICAgICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CiAg
ICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewogICAgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CkBAIC0xODMsMTIgKzQ1LDEwIEBA
CiAKICAgICAgICAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBjb250ZXh0LgogICAgICAgICAg
IGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJU
aW1lLCBzYW1wbGVSYXRlKTsKLSAgICAgICAgICBjcmVhdGVTcXVhcmVQdWxzZShjb250ZXh0KTsg
ICAgCiAKLSAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bWJlck9mVGVzdHM7ICsraSkg
ewotICAgICAgICAgICAgICB2YXIgdGltZU9mZnNldCA9IHRpbWVTdGVwICogaTsKLSAgICAgICAg
ICAgICAgcGxheU5vdGUodGltZU9mZnNldCwgaSAqIGdyYWluT2Zmc2V0U3RlcCwgZHVyYXRpb24p
OwotICAgICAgICAgIH0KKyAgICAgICAgICBzcXVhcmVQdWxzZUJ1ZmZlciA9IGNyZWF0ZVNpZ25h
bEJ1ZmZlcihjb250ZXh0LCBmdW5jdGlvbiAoaykgeyByZXR1cm4gMSB9KTsgICAgCisKKyAgICAg
ICAgICBwbGF5QWxsTm90ZXMoY29udGV4dCwgc3F1YXJlUHVsc2VCdWZmZXIsIG51bWJlck9mVGVz
dHMpOwogCiAgICAgICAgICAgY29udGV4dC5vbmNvbXBsZXRlID0gY2hlY2tSZXN1bHQ7CiAgICAg
ICAgICAgY29udGV4dC5zdGFydFJlbmRlcmluZygpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vcmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMgYi9MYXlvdXRUZXN0cy93ZWJhdWRp
by9yZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcwppbmRleCBjNDI4YWUwMTRlMGEwYTI3ZTE2Njhj
ZmIyZGIwOWUzZWE3ODc5NzUzLi43Yzc2NjZjMWFkMWRjMzc4MmFiMGY3ZTJhMGFiZTk1Njk5ZGJi
MjZiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW8tdGVz
dGluZy5qcworKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW8tdGVzdGlu
Zy5qcwpAQCAtMTI1LDMgKzEyNSwxMSBAQCBmdW5jdGlvbiB0aW1lVG9TYW1wbGVGcmFtZSh0aW1l
LCBzYW1wbGVSYXRlKSB7CiAgICAgcmV0dXJuIE1hdGguZmxvb3IoMC41ICsgdGltZSAqIHNhbXBs
ZVJhdGUpOwogfQogCisvLyBDb21wdXRlIHRoZSBudW1iZXIgb2Ygc2FtcGxlIGZyYW1lcyBjb25z
dW1lZCBieSBub3RlR3JhaW5PbiB3aXRoCisvLyB0aGUgc3BlY2lmaWVkIHxncmFpbk9mZnNldHws
IHxkdXJhdGlvbnwsIGFuZCB8c2FtcGxlUmF0ZXwuCitmdW5jdGlvbiBncmFpbkxlbmd0aEluU2Ft
cGxlRnJhbWVzKGdyYWluT2Zmc2V0LCBkdXJhdGlvbiwgc2FtcGxlUmF0ZSkgeworICAgIHZhciBz
dGFydEZyYW1lID0gdGltZVRvU2FtcGxlRnJhbWUoZ3JhaW5PZmZzZXQsIHNhbXBsZVJhdGUpOwor
ICAgIHZhciBlbmRGcmFtZSA9IHRpbWVUb1NhbXBsZUZyYW1lKGdyYWluT2Zmc2V0ICsgZHVyYXRp
b24sIHNhbXBsZVJhdGUpOworCisgICAgcmV0dXJuIGVuZEZyYW1lIC0gc3RhcnRGcmFtZTsKK30K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9ub3RlLWdyYWluLW9u
LXRlc3RpbmcuanMgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvbm90ZS1ncmFpbi1v
bi10ZXN0aW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2ZjdhOWRlY2MzZmFkNDA1OTFjZWI2ODQxODk2MWIy
NjQxYTA0NjYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJj
ZXMvbm90ZS1ncmFpbi1vbi10ZXN0aW5nLmpzCkBAIC0wLDAgKzEsMTc1IEBACit2YXIgc2FtcGxl
UmF0ZSA9IDQ0MTAwLjA7CisKKy8vIEhSVEYgZXh0cmEgZnJhbWVzLiAgVGhpcyBpcyBhIG1hZ2lj
IGNvbnN0YW50IGN1cnJlbnRseSBpbgorLy8gQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpwcm9jZXNz
IHRoYXQgYWx3YXlzIGV4dGVuZHMgdGhlCisvLyBkdXJhdGlvbiBieSB0aGlzIG51bWJlciBvZiBz
YW1wbGVzLiAgU2VlIGJ1ZyA3NzIyNAorLy8gKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03NzIyNCkuCit2YXIgZXh0cmFGcmFtZXNIUlRGID0gNTEyOworCisvLyBIb3cg
bWFueSBwdWxzZXMgdG8gcGxheS4KK3ZhciBudW1iZXJPZlRlc3RzID0gMTAwOworCisvLyBEdXJh
dGlvbiBvZiBlYWNoIHB1bHNlIHRvIGJlIHBsYXllZAordmFyIGR1cmF0aW9uID0gMC4wMTsKKwor
Ly8gVGltZSBzdGVwIGJldHdlZW4gdGhlIHN0YXJ0IG9mIGVhY2ggcHVsc2UuICBXZSBuZWVkIHRv
IGFkZCBhIGxpdHRsZQorLy8gYml0IG9mIHNpbGVuY2Ugc28gd2UgY2FuIGRldGVjdCBwdWxzZSBi
b3VuZGFyaWVzIGFuZCBhbHNvIGFjY291bnQKKy8vIGZvciB0aGUgZXh0cmEgZnJhbWVzIGZvciBI
UlRGLgordmFyIHRpbWVTdGVwID0gZHVyYXRpb24gKyAuMDA1ICsgZXh0cmFGcmFtZXNIUlRGIC8g
c2FtcGxlUmF0ZTsKKworLy8gVGltZSBzdGVwIGJldHdlZW4gdGhlIGdyYWluIHN0YXJ0IGZvciBl
YWNoIHB1bHNlLgordmFyIGdyYWluT2Zmc2V0U3RlcCA9IDAuMDAxOworCisvLyBIb3cgbG9uZyB0
byByZW5kZXIgdG8gY292ZXIgYWxsIG9mIHRoZSBwdWxzZXMuCit2YXIgcmVuZGVyVGltZSA9IChu
dW1iZXJPZlRlc3RzICsgMSkgKiB0aW1lU3RlcDsKKwordmFyIGNvbnRleHQ7Cit2YXIgcmVuZGVy
ZWREYXRhOworCisvLyBDcmVhdGUgYSBidWZmZXIgY29udGFpbmluZyB0aGUgZGF0YSB0aGF0IHdl
IHdhbnQuICBUaGUgZnVuY3Rpb24gZgorLy8gcmV0dXJucyB0aGUgZGVzaXJlZCB2YWx1ZSBhdCBz
YW1wbGUgZnJhbWUgay4KK2Z1bmN0aW9uIGNyZWF0ZVNpZ25hbEJ1ZmZlcihjb250ZXh0LCBmKSB7
CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlIGJ1ZmZlciBoYXMgZW5vdWdoIGRhdGEgZm9yIGFsbCBv
ZiB0aGUgcG9zc2libGUKKyAgICAvLyBncmFpbiBvZmZzZXRzIGFuZCBkdXJhdGlvbnMuICBOZWVk
IHRvIGluY2x1ZGUgdGhlIGV4dHJhIGZyYW1lcworICAgIC8vIGZvciBIUlRGLiAgVGhlIGFkZGl0
aW9uYWwgMSBpcyBmb3IgYW55IHJvdW5kLW9mZiBlcnJvcnMuCisgICAgdmFyIHNpZ25hbExlbmd0
aCA9IE1hdGguZmxvb3IoMSArIGV4dHJhRnJhbWVzSFJURiArIHNhbXBsZVJhdGUgKiAobnVtYmVy
T2ZUZXN0cyAqIGdyYWluT2Zmc2V0U3RlcCArIGR1cmF0aW9uKSk7CisKKyAgICB2YXIgYnVmZmVy
ID0gY29udGV4dC5jcmVhdGVCdWZmZXIoMiwgc2lnbmFsTGVuZ3RoLCBzYW1wbGVSYXRlKTsKKyAg
ICB2YXIgZGF0YSA9IGJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKKworICAgIGZvciAodmFyIGsg
PSAwOyBrIDwgc2lnbmFsTGVuZ3RoOyArK2spIHsKKyAgICAgICAgZGF0YVtrXSA9IGYoayk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworLy8gRnJvbSB0aGUgZGF0YSBhcnJheSwg
ZmluZCB0aGUgc3RhcnQgYW5kIGVuZCBzYW1wbGUgZnJhbWUgZm9yIGVhY2gKKy8vIHB1bHNlLiAg
VGhpcyBkZXBlbmRzIG9uIHRoZSBkYXRhIGhhdmluZyAwJ3MgYmV0d2VlbiBwdWxzZXMsIGFuZAor
Ly8gdGhhdCB0aGUgcHVsc2UgaXMgYWx3YXlzIHN0cmljdGx5IG5vbi16ZXJvLgorZnVuY3Rpb24g
ZmluZFN0YXJ0QW5kRW5kU2FtcGxlcyhkYXRhKSB7CisgICAgdmFyIG5TYW1wbGVzID0gZGF0YS5s
ZW5ndGg7CisKKyAgICB2YXIgc3RhcnRUaW1lID0gW107CisgICAgdmFyIGVuZFRpbWUgPSBbXTsK
KyAgICB2YXIgbG9va0ZvclN0YXJ0ID0gdHJ1ZTsKKyAgICAgIAorICAgIC8vIExvb2sgdGhyb3Vn
aCB0aGUgcmVuZGVyZWQgZGF0YSB0byBmaW5kIHRoZSBzdGFydCBhbmQgc3RvcAorICAgIC8vIHRp
bWVzIG9mIGVhY2ggcHVsc2UuCisgICAgZm9yICh2YXIgayA9IDA7IGsgPCBuU2FtcGxlczsgKytr
KSB7CisgICAgICAgIGlmIChsb29rRm9yU3RhcnQpIHsKKyAgICAgICAgICAgIC8vIEZpbmQgYSBu
b24temVybyBwb2ludCBhbmQgcmVjb3JkIHRoZSBzdGFydC4gIFdlJ3JlIG5vdAorICAgICAgICAg
ICAgLy8gY29uY2VybmVkIHdpdGggdGhlIHZhbHVlIGluIHRoaXMgdGVzdCwgb25seSB0aGF0IHRo
ZQorICAgICAgICAgICAgLy8gcHVsc2Ugc3RhcnRlZCBoZXJlLgorICAgICAgICAgICAgaWYgKHJl
bmRlcmVkRGF0YVtrXSkgeworICAgICAgICAgICAgICAgIHN0YXJ0VGltZS5wdXNoKGspOworICAg
ICAgICAgICAgICAgIGxvb2tGb3JTdGFydCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gRmluZCBhIHplcm8gYW5kIHJlY29yZCB0aGUgZW5k
IG9mIHRoZSBwdWxzZS4KKyAgICAgICAgICAgIGlmICghcmVuZGVyZWREYXRhW2tdKSB7CisgICAg
ICAgICAgICAgICAgZW5kVGltZS5wdXNoKGspOworICAgICAgICAgICAgICAgIGxvb2tGb3JTdGFy
dCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
e3N0YXJ0IDogc3RhcnRUaW1lLCBlbmQgOiBlbmRUaW1lfTsKK30KKworZnVuY3Rpb24gcGxheU5v
dGUoY29udGV4dCwgc291cmNlLCB0aW1lLCBvZmZzZXQsIGR1cmF0aW9uKSB7CisgICAgdmFyIGJ1
ZmZlclNvdXJjZSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7CisKKyAgICBidWZmZXJT
b3VyY2UuYnVmZmVyID0gc291cmNlOworICAgIGJ1ZmZlclNvdXJjZS5jb25uZWN0KGNvbnRleHQu
ZGVzdGluYXRpb24pOworICAgIGJ1ZmZlclNvdXJjZS5ub3RlR3JhaW5Pbih0aW1lLCBvZmZzZXQs
IGR1cmF0aW9uKTsKK30KKworZnVuY3Rpb24gcGxheUFsbE5vdGVzKGNvbnRleHQsIHNvdXJjZSwg
bnVtYmVyT2ZOb3RlcykgeworICAgIHZhciBzdGFydEZyYW1lcyA9IG5ldyBBcnJheShudW1iZXJP
Zk5vdGVzKTsKKyAgICB2YXIgb2Zmc2V0cyA9IG5ldyBBcnJheShudW1iZXJPZk5vdGVzKTsKKwor
ICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbnVtYmVyT2ZOb3RlczsgKytrKSB7CisgICAgICAgIHZh
ciB0aW1lT2Zmc2V0ID0gayAqIHRpbWVTdGVwOworICAgICAgICB2YXIgZ3JhaW5PZmZzZXQgPSBr
ICogZ3JhaW5PZmZzZXRTdGVwOworCisgICAgICAgIHBsYXlOb3RlKGNvbnRleHQsIHNvdXJjZSwg
dGltZU9mZnNldCwgZ3JhaW5PZmZzZXQsIGR1cmF0aW9uKTsKKyAgICAgICAgc3RhcnRGcmFtZXNb
a10gPSB0aW1lT2Zmc2V0OworICAgICAgICBvZmZzZXRzW2tdID0gZ3JhaW5PZmZzZXQ7CisgICAg
fQorCisgICAgcmV0dXJuIHsgc3RhcnRGcmFtZXMgOiBzdGFydEZyYW1lcywgZ3JhaW5PZmZzZXRz
IDogb2Zmc2V0cyB9OworfQorCitmdW5jdGlvbiB2ZXJpZnlTdGFydEVuZFRpbWVzKHN0YXJ0RW5k
VGltZXMpIHsKKyAgICB2YXIgc3RhcnRUaW1lID0gc3RhcnRFbmRUaW1lcy5zdGFydDsKKyAgICB2
YXIgZW5kVGltZSA9IHN0YXJ0RW5kVGltZXMuZW5kOworICAgICAgCisgICAgdmFyIHN1Y2Nlc3Mg
PSB0cnVlOworCisgICAgLy8gQ291bnQgb2YgaG93IG1hbnkgcHVsc2VzIHN0YXJ0ZWQgYXQgdGhl
IGluY29ycmVjdCB0aW1lLgorICAgIHZhciBlcnJvckNvdW50U3RhcnQgPSAwOworCisgICAgLy8g
Q291bnQgb2YgaG93IG1hbnkgcHVsc2VzIGVuZGVkIGF0IHRoZSBpbmNvcnJlY3QgdGltZS4KKyAg
ICB2YXIgZXJyb3JDb3VudEVuZCA9IDA7CisKKyAgICBpZiAoc3RhcnRUaW1lLmxlbmd0aCAhPSBl
bmRUaW1lLmxlbmd0aCkgeworICAgICAgICB0ZXN0RmFpbGVkKCJDb3VsZCBub3QgZmluZCB0aGUg
YmVnaW5uaW5nIG9yIGVuZCBvZiBhIHB1bHNlLiIpOworICAgICAgICBzdWNjZXNzID0gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKHN0YXJ0VGltZS5sZW5ndGggPT0gbnVtYmVyT2ZUZXN0cyAmJiBl
bmRUaW1lLmxlbmd0aCA9PSBudW1iZXJPZlRlc3RzKSB7CisgICAgICAgIHRlc3RQYXNzZWQoIkZv
dW5kIGFsbCAiICsgbnVtYmVyT2ZUZXN0cyArICIgcHVsc2VzLiIpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHRlc3RGYWlsZWQoIkRpZCBub3QgZmluZCBhbGwgIiArIG51bWJlck9mVGVzdHMgKyAi
IHB1bHNlcy4iKTsKKyAgICB9CisKKyAgICAvLyBFeGFtaW5lIHRoZSBzdGFydCBhbmQgc3RvcCB0
aW1lcyB0byBzZWUgaWYgdGhleSBtYXRjaCBvdXIKKyAgICAvLyBleHBlY3RhdGlvbnMuCisgICAg
Zm9yICh2YXIgayA9IDA7IGsgPCBzdGFydFRpbWUubGVuZ3RoOyArK2spIHsKKyAgICAgICAgdmFy
IGV4cGVjdGVkU3RhcnQgPSB0aW1lVG9TYW1wbGVGcmFtZShrICogdGltZVN0ZXAsIHNhbXBsZVJh
dGUpOworICAgICAgICAvLyBUaGUgZW5kIHBvaW50IGlzIHRoZSBkdXJhdGlvbiwgcGx1cyB0aGUg
ZXh0cmEgZnJhbWVzCisgICAgICAgIC8vIGZvciBIUlRGLgorICAgICAgICB2YXIgZXhwZWN0ZWRF
bmQgPSBleHRyYUZyYW1lc0hSVEYgKyBleHBlY3RlZFN0YXJ0ICsgZ3JhaW5MZW5ndGhJblNhbXBs
ZUZyYW1lcyhrICogZ3JhaW5PZmZzZXRTdGVwLCBkdXJhdGlvbiwgc2FtcGxlUmF0ZSk7CisKKyAg
ICAgICAgaWYgKHN0YXJ0VGltZVtrXSAhPSBleHBlY3RlZFN0YXJ0KSB7CisgICAgICAgICAgICB0
ZXN0RmFpbGVkKCJQdWxzZSAiICsgayArICIgc3RhcnRlZCBhdCAiICsgc3RhcnRUaW1lW2tdICsg
IiBidXQgZXhwZWN0ZWQgYXQgIiArIGV4cGVjdGVkU3RhcnQpOworICAgICAgICAgICAgKytlcnJv
ckNvdW50U3RhcnQ7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoZW5kVGltZVtrXSAhPSBleHBlY3RlZEVuZCkgeworICAgICAgICAgICAgdGVz
dEZhaWxlZCgiUHVsc2UgIiArIGsgKyAiIGVuZGVkIGF0ICIgKyBlbmRUaW1lW2tdICsgIiBidXQg
ZXhwZWN0ZWQgYXQgIiArIGV4cGVjdGVkRW5kKTsKKyAgICAgICAgICAgICsrZXJyb3JDb3VudEVu
ZDsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIENoZWNrIHRoYXQgYWxsIHRoZSBwdWxzZXMgc3RhcnRlZCBvciBlbmRlZCBhdCB0aGUgY29y
cmVjdCB0aW1lLgorICAgIGlmICghZXJyb3JDb3VudFN0YXJ0KSB7CisgICAgICAgIGlmIChzdGFy
dFRpbWUubGVuZ3RoID09IG51bWJlck9mVGVzdHMpIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQo
IkFsbCAiICsgbnVtYmVyT2ZUZXN0cyArICIgcHVsc2VzIHN0YXJ0ZWQgYXQgdGhlIGNvcnJlY3Qg
dGltZS4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkFsbCBw
dWxzZXMgc3RhcnRlZCBhdCB0aGUgY29ycmVjdCB0aW1lLCBidXQgb25seSAiICsgc3RhcnRUaW1l
Lmxlbmd0aCArICIgcHVsc2VzIGZvdW5kLiIpOworICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNl
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZChlcnJvckNvdW50
U3RhcnQgKyAiIG91dCBvZiAiICsgbnVtYmVyT2ZUZXN0cyArICIgcHVsc2VzIHN0YXJ0ZWQgYXQg
dGhlIHdyb25nIHRpbWUuIik7CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICB9CisKKyAg
ICBpZiAoIWVycm9yQ291bnRFbmQpIHsKKyAgICAgICAgaWYgKGVuZFRpbWUubGVuZ3RoID09IG51
bWJlck9mVGVzdHMpIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIkFsbCAiICsgbnVtYmVyT2ZU
ZXN0cyArICIgcHVsc2VzIGVuZGVkIGF0IHRoZSBjb3JyZWN0IHRpbWUuIik7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJBbGwgcHVsc2VzIGVuZGVkIGF0IHRoZSBj
b3JyZWN0IHRpbWUsIGJ1dCBvbmx5ICIgKyBlbmRUaW1lLmxlbmd0aCArICIgcHVsc2VzIGZvdW5k
LiIpOworICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgdGVzdEZhaWxlZChlcnJvckNvdW50RW5kICsgIiBvdXQgb2YgIiArIG51bWJl
ck9mVGVzdHMgKyAiIHB1bHNlcyBlbmRlZCBhdCB0aGUgd3JvbmcgdGltZS4iKTsKKyAgICAgICAg
c3VjY2VzcyA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBzdWNjZXNzOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124838</attachid>
            <date>2012-01-31 15:55:27 -0800</date>
            <delta_ts>2012-02-01 10:12:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77225-20120131155526.patch</filename>
            <type>text/plain</type>
            <size>23658</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MjE1CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMTViOGE4MGU0YzAyZDQxZmQ2N2Rj
Mjc0M2E1YTZjNGNhODZjNmYyMC4uMmZjYTFlODg4YjliNWVjN2ViMWE1YjU3ZTk1YjViNzZiMjZl
MTExNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTAxLTMwICBSYXltb25kIFRveSAgPHJ0
b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBub3RlR3JhaW5PbiBuZWVkcyBtb3JlIHRlc3RzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzIyNQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2ViYXVkaW8v
bm90ZS1ncmFpbi1vbi1wbGF5Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL25vdGUt
Z3JhaW4tb24tcGxheS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL25v
dGUtZ3JhaW4tb24tdGltaW5nLmh0bWw6IFJlZmFjdG9yZWQgdG8gdXNlIG5ldworICAgICAgICBm
dW5jdGlvbnMgaW4gbm90ZS1ncmFpbi1vbi10ZXN0aW5nLmpzLgorICAgICAgICAqIHdlYmF1ZGlv
L25vdGUtZ3JhaW4tb24tdGltaW5nLWV4cGVjdGVkLnR4dDogVXBkYXRlZC4KKyAgICAgICAgKiB3
ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qczoKKyAgICAgICAgKGdyYWluTGVuZ3Ro
SW5TYW1wbGVGcmFtZXMpOiAgVXRpbGl0eSB0byBjb21wdXRlIGxlbmd0aCBvZiBhIGdyYWluCisg
ICAgICAgIGluIHNhbXBsZXMuCisgICAgICAgICogd2ViYXVkaW8vcmVzb3VyY2VzL25vdGUtZ3Jh
aW4tb24tdGVzdGluZy5qczogQWRkZWQuCisgICAgICAgIChjcmVhdGVTaWduYWxCdWZmZXIpOgor
ICAgICAgICAoZmluZFN0YXJ0QW5kRW5kU2FtcGxlcyk6CisgICAgICAgIChwbGF5Tm90ZSk6Cisg
ICAgICAgIChwbGF5QWxsTm90ZXMpOgorICAgICAgICAodmVyaWZ5U3RhcnRFbmRUaW1lcyk6IENv
bW1vbiBmdW5jdGlvbnMgZm9yIG5vdGUtZ3JhaW4tb24tcGxheSBhbmQKKyAgICAgICAgbm90ZS1n
cmFpbi1vbi10aW1pbmcgdGVzdHMgdG8gdXNlLgorCiAyMDEyLTAxLTI5ICBZdXpvIEZ1amlzaGlt
YSAgPHl1em9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBbQ2hyb21pdW1dIFVucmV2aWV3ZWQgdGVz
dCBleHBlY3RhdGlvbiBjaGFuZ2UuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9u
b3RlLWdyYWluLW9uLXBsYXktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vbm90
ZS1ncmFpbi1vbi1wbGF5LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OWY1OTMwYzhhOTY1ZTAy
MGYyZThiYjc4Nzc0M2M0NDY5OWJhOGE4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vbm90ZS1ncmFpbi1vbi1wbGF5LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEzIEBA
CitUZXN0IG5vdGVHcmFpbk9uIG9mZnNldCByZW5kZXJpbmcuCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworUEFTUyBGb3VuZCBhbGwgMTAwIHB1bHNlcy4KK1BBU1MgQWxsIDEwMCBwdWxz
ZXMgc3RhcnRlZCBhdCB0aGUgY29ycmVjdCB0aW1lLgorUEFTUyBBbGwgMTAwIHB1bHNlcyBlbmRl
ZCBhdCB0aGUgY29ycmVjdCB0aW1lLgorUEFTUyBBbGwgMTAwIGdyYWlucyBjb250YWluZWQgdGhl
IGNvcnJlY3QgZGF0YS4KK1BBU1Mgbm90ZUdyYWluT24gZGF0YSB0ZXN0cyBwYXNzZWQuCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vbm90ZS1ncmFpbi1vbi1wbGF5Lmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9ub3RlLWdyYWluLW9uLXBsYXkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMjBmYmE4
YmMwZDZlZGE2ZGRjOTQ0OGNhOTc3ZGM4OWE0MjI4M2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vbm90ZS1ncmFpbi1vbi1wbGF5Lmh0bWwKQEAgLTAsMCArMSwxMzUg
QEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRp
b25hbC8vRU4iPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
YXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9u
b3RlLWdyYWluLW9uLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgIDwvaGVhZD4KKwor
ICA8Ym9keT4KKyAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+CisgICAgPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+CisKKyAgICA8c2NyaXB0PgorICAgICAgZGVzY3JpcHRpb24oIlRlc3Qg
bm90ZUdyYWluT24gb2Zmc2V0IHJlbmRlcmluZy4iKTsKKworICAgICAgLy8gVG8gdGVzdCBub3Rl
R3JhaW5PbiwgYSBzaW5nbGUgcmFtcCBzaWduYWwgaXMgY3JlYXRlZC4KKyAgICAgIC8vIFZhcmlv
dXMgc2VjdGlvbnMgb2YgdGhlIHJhbXAgYXJlIHJlbmRlcmVkIGJ5IG5vdGVHcmFpbk9uKCkKKyAg
ICAgIC8vIG91dCBhdCBkaWZmZXJlbnQgdGltZXMsIGFuZCB3ZSB2ZXJpZnkgdGhhdCB0aGUgYWN0
dWFsIG91dHB1dAorICAgICAgLy8gbWF0Y2hlcyBvdXIgZXhwZWN0YXRpb25zLgorCisgICAgICAK
KyAgICAgIHZhciBsaW5lYXJSYW1wQnVmZmVyOworCisgICAgICAvLyBBcnJheSBvZiB0aGUgZ3Jh
aW4gb2Zmc2V0IHVzZWQgZm9yIGVhY2ggcmFtcCBwbGF5ZWQuCisgICAgICB2YXIgZ3JhaW5PZmZz
ZXRUaW1lID0gW107CisKKyAgICAgIC8vIFZlcmlmeSB0aGUgcmVjZWl2ZWQgc2lnbmFsIGlzIGEg
cmFtcCBmcm9tIHRoZSBjb3JyZWN0IHNlY3Rpb24KKyAgICAgIC8vIG9mIG91ciByYW1wIHNpZ25h
bC4KKyAgICAgIGZ1bmN0aW9uIHZlcmlmeUdyYWluKHJlbmRlcmVkRGF0YSwgc3RhcnRGcmFtZSwg
ZW5kRnJhbWUsIHJhbXBOdW1iZXIpIHsKKyAgICAgICAgICB2YXIgcmFtcE9mZnNldEZyYW1lID0g
dGltZVRvU2FtcGxlRnJhbWUoZ3JhaW5PZmZzZXRUaW1lW3JhbXBOdW1iZXJdLCBzYW1wbGVSYXRl
KTsKKyAgICAgICAgICB2YXIgcmFtcEZyYW1lTGVuZ3RoID0gZW5kRnJhbWUgLSBzdGFydEZyYW1l
OworICAgICAgICAgIHZhciByYW1wID0gbGluZWFyUmFtcEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgw
KTsKKyAgICAgICAgICB2YXIgaXNDb3JyZWN0ID0gdHJ1ZTsKKworICAgICAgICAgIHZhciBleHBl
Y3RlZDsKKyAgICAgICAgICB2YXIgYWN0dWFsOworICAgICAgICAgIHZhciBmcmFtZTsKKyAgICAg
IAorICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcmFtcEZyYW1lTGVuZ3RoOyArK2spIHsK
KyAgICAgICAgICAgICAgaWYgKHJlbmRlcmVkRGF0YVtzdGFydEZyYW1lICsga10gIT0gcmFtcFty
YW1wT2Zmc2V0RnJhbWUgKyBrXSkgeworICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSByYW1w
W3JhbXBPZmZzZXRGcmFtZSArIGtdOworICAgICAgICAgICAgICAgICAgYWN0dWFsID0gcmVuZGVy
ZWREYXRhW3N0YXJ0RnJhbWUgKyBrXTsKKyAgICAgICAgICAgICAgICAgIGZyYW1lID0gc3RhcnRG
cmFtZSArIGs7CisgICAgICAgICAgICAgICAgICBpc0NvcnJlY3QgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAg
IHJldHVybiB7IHZlcmlmaWVkOiBpc0NvcnJlY3QsCisgICAgICAgICAgICAgICAgICAgZXhwZWN0
ZWQgOiBleHBlY3RlZCAsCisgICAgICAgICAgICAgICAgICAgYWN0dWFsIDogYWN0dWFsLAorICAg
ICAgICAgICAgICAgICAgIGZyYW1lIDogZnJhbWUgfTsKKyAgICAgIH0KKyAgICAgIAorICAgICAg
ZnVuY3Rpb24gY2hlY2tSZXN1bHQoZXZlbnQpIHsKKyAgICAgICAgICB2YXIgYnVmZmVyID0gZXZl
bnQucmVuZGVyZWRCdWZmZXI7CisgICAgICAgICAgcmVuZGVyZWREYXRhID0gYnVmZmVyLmdldENo
YW5uZWxEYXRhKDApOworICAgICAgICAgIHZhciBuU2FtcGxlcyA9IHJlbmRlcmVkRGF0YS5sZW5n
dGg7CisKKyAgICAgICAgICB2YXIgc3VjY2VzcyA9IHRydWU7CisKKyAgICAgICAgICAvLyBOdW1i
ZXIgb2YgZ3JhaW5zIHRoYXQgd2UgZm91bmQgdGhhdCBoYXZlIGluY29ycmVjdCBkYXRhLgorICAg
ICAgICAgIHZhciBpbnZhbGlkR3JhaW5EYXRhQ291bnQgPSAwOworICAgICAgCisgICAgICAgICAg
dmFyIHN0YXJ0RW5kRnJhbWVzID0gZmluZFN0YXJ0QW5kRW5kU2FtcGxlcyhyZW5kZXJlZERhdGEp
OworCisgICAgICAgICAgLy8gVmVyaWZ5IHRoZSBzdGFydCBhbmQgc3RvcCB0aW1lcy4gIE5vdCBz
dHJpY3RseSBuZWVkZWQgZm9yCisgICAgICAgICAgLy8gdGhpcyB0ZXN0LCBidXQgaXQncyB1c2Vm
dWwgdG8ga25vdyB0aGF0IGlmIHRoZSByYW1wIGRhdGEKKyAgICAgICAgICAvLyBhcHBlYXJzIHRv
IGJlIGluY29ycmVjdC4KKyAgICAgICAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiB2ZXJpZnlTdGFy
dEVuZEZyYW1lcyhzdGFydEVuZEZyYW1lcyk7CisKKyAgICAgICAgICAvLyBMb29wIHRocm91Z2gg
ZWFjaCBvZiB0aGUgcmVuZGVyZWQgZ3JhaW5zIGFuZCBjaGVjayB0aGF0CisgICAgICAgICAgLy8g
ZWFjaCBncmFpbiBjb250YWlucyBvdXIgZXhwZWN0ZWQgcmFtcC4KKyAgICAgICAgICBmb3IgKHZh
ciBrID0gMDsgayA8IHN0YXJ0RW5kRnJhbWVzLnN0YXJ0Lmxlbmd0aDsgKytrKSB7CisgICAgICAg
ICAgICAgIC8vIFZlcmlmeSB0aGF0IHRoZSByZW5kZXJlZCBkYXRhIG1hdGNoZXMgdGhlIGV4cGVj
dGVkCisgICAgICAgICAgICAgIC8vIHNlY3Rpb24gb2Ygb3VyIHJhbXAgc2lnbmFsLgorICAgICAg
ICAgICAgICB2YXIgcmVzdWx0ID0gdmVyaWZ5R3JhaW4ocmVuZGVyZWREYXRhLCBzdGFydEVuZEZy
YW1lcy5zdGFydFtrXSwgc3RhcnRFbmRGcmFtZXMuZW5kW2tdLCBrKTsKKworICAgICAgICAgICAg
ICBpZiAoIXJlc3VsdC52ZXJpZmllZCkgeworICAgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgi
R3JhaW4gIiArIGsgKyAiIGluY29ycmVjdC4gIEV4cGVjdGVkICIgKyByZXN1bHQuZXhwZWN0ZWQg
KyAiIGJ1dCByZWNlaXZlZCAiICsgcmVzdWx0LmFjdHVhbCArICIgYXQgc2FtcGxlIGZyYW1lICIg
KyByZXN1bHQuZnJhbWUpOworICAgICAgICAgICAgICAgICAgKytpbnZhbGlkR3JhaW5EYXRhQ291
bnQ7CisgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgICAgICAgIH0K
KyAgICAgICAgICB9CisgICAgICAgICAgCisgICAgICAgICAgaWYgKCFpbnZhbGlkR3JhaW5EYXRh
Q291bnQpIHsKKyAgICAgICAgICAgICAgdGVzdFBhc3NlZCgiQWxsICIgKyBudW1iZXJPZlRlc3Rz
ICsgIiBncmFpbnMgY29udGFpbmVkIHRoZSBjb3JyZWN0IGRhdGEuIik7CisgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgdGVzdEZhaWxlZChpbnZhbGlkR3JhaW5EYXRhQ291bnQgKyAi
IGdyYWlucyBvdXQgb2YgIiArIG51bWJlck9mVGVzdHMgKyAiIGRpZCBub3QgY29udGFpbiB0aGUg
ZXhwZWN0ZWQgZGF0YS4iKTsKKyAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAg
ICAgIH0KKyAgICAgIAorICAgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICAgIHRl
c3RQYXNzZWQoIm5vdGVHcmFpbk9uIGRhdGEgdGVzdHMgcGFzc2VkLiIpOworICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIm5vdGVHcmFpbk9uIGRhdGEgdGVzdHMg
ZmFpbGVkLiIpOworICAgICAgICAgIH0KKworICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAg
ICAgfQorCisgICAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0
VW50aWxEb25lKCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgd2luZG93LmpzVGVzdElzQXN5
bmMgPSB0cnVlOworCisgICAgICAgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dC4K
KyAgICAgICAgICBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1wbGVSYXRl
ICogcmVuZGVyVGltZSwgc2FtcGxlUmF0ZSk7CisKKyAgICAgICAgICAvLyBDcmVhdGUgYSBsaW5l
YXIgcmFtcCBmb3IgdGVzdGluZyBub3RlR3JhaW5Pbi4KKyAgICAgICAgICBsaW5lYXJSYW1wQnVm
ZmVyID0gY3JlYXRlU2lnbmFsQnVmZmVyKGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihrKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2FudCB0aGUgcmFtcCB0byBz
dGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHdpdGggMSwgbm90IDAuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGsgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7ICAgIAorCisgICAgICAgICAgdmFyIG5vdGVJbmZvID0g
cGxheUFsbEdyYWlucyhjb250ZXh0LCBsaW5lYXJSYW1wQnVmZmVyLCBudW1iZXJPZlRlc3RzKTsK
KworICAgICAgICAgIGdyYWluT2Zmc2V0VGltZSA9IG5vdGVJbmZvLmdyYWluT2Zmc2V0VGltZXM7
CisKKyAgICAgICAgICBjb250ZXh0Lm9uY29tcGxldGUgPSBjaGVja1Jlc3VsdDsKKyAgICAgICAg
ICBjb250ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7CisgICAgICB9CisgICAgICAKKyAgICAgIHJ1blRl
c3QoKTsKKyAgICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKyAgICA8L3NjcmlwdD4K
KworICAgIDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJhdWRpby9ub3RlLWdyYWluLW9uLXRpbWluZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93
ZWJhdWRpby9ub3RlLWdyYWluLW9uLXRpbWluZy1leHBlY3RlZC50eHQKaW5kZXggYzUyNGY4Mjk2
YmQ3MzI4MjZiY2E3OWM2ZGMyY2UwNDQ1NWQ3MTM3ZS4uYzhlOTkwYjM2NzU3MTdmNjM1ZjIyYWU2
NTJhZDU1NzlmODRkZjIxNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vbm90ZS1n
cmFpbi1vbi10aW1pbmctZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL25v
dGUtZ3JhaW4tb24tdGltaW5nLWV4cGVjdGVkLnR4dApAQCAtMyw4ICszLDggQEAgVGVzdCB0aW1p
bmcgb2Ygbm90ZUdyYWluT24uCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIFBBU1MgRm91
bmQgYWxsIDEwMCBwdWxzZXMuCi1QQVNTIEFsbCAxMDAgc3F1YXJlIHB1bHNlcyBzdGFydGVkIGF0
IHRoZSBjb3JyZWN0IHRpbWUuCi1QQVNTIEFsbCAxMDAgc3F1YXJlIHB1bHNlcyBlbmRlZCBhdCB0
aGUgY29ycmVjdCB0aW1lLgorUEFTUyBBbGwgMTAwIHB1bHNlcyBzdGFydGVkIGF0IHRoZSBjb3Jy
ZWN0IHRpbWUuCitQQVNTIEFsbCAxMDAgcHVsc2VzIGVuZGVkIGF0IHRoZSBjb3JyZWN0IHRpbWUu
CiBQQVNTIG5vdGVHcmFpbk9uIHRpbWluZyB0ZXN0cyBwYXNzZWQuCiBQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL25vdGUt
Z3JhaW4tb24tdGltaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9ub3RlLWdyYWluLW9u
LXRpbWluZy5odG1sCmluZGV4IGYzM2FmMDliNWIwZDNhNTE5ODViNjE3MjgxYzVmZjNiNmNjZTU1
NmUuLjY2ZDg0YmNhMDc0YzFkNGI0NTkzZjYyYmFjMGYwYjg0ZjEzMDlmMTcgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3dlYmF1ZGlvL25vdGUtZ3JhaW4tb24tdGltaW5nLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vbm90ZS1ncmFpbi1vbi10aW1pbmcuaHRtbApAQCAtMiw2ICsyLDcg
QEAKIDxodG1sPgogICA8aGVhZD4KICAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRl
c3RpbmcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvbm90ZS1ncmFp
bi1vbi10ZXN0aW5nLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgogICA8L2hlYWQ+CiAKQEAgLTEyLDE0
OCArMTMsMTkgQEAKICAgICA8c2NyaXB0PgogICAgICAgZGVzY3JpcHRpb24oIlRlc3QgdGltaW5n
IG9mIG5vdGVHcmFpbk9uLiIpOwogCi0gICAgICB2YXIgc2FtcGxlUmF0ZSA9IDQ0MTAwLjA7Ci0K
LSAgICAgIC8vIEhSVEYgZXh0cmEgZnJhbWVzLiAgVGhpcyBpcyBhIG1hZ2ljIGNvbnN0YW50IGN1
cnJlbnRseSBpbgotICAgICAgLy8gQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpwcm9jZXNzIHRoYXQg
YWx3YXlzIGV4dGVuZHMgdGhlCi0gICAgICAvLyBkdXJhdGlvbiBieSB0aGlzIG51bWJlciBvZiBz
YW1wbGVzLiAgU2VlIGJ1ZyA3NzIyNAotICAgICAgLy8gKGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03NzIyNCkuCi0gICAgICB2YXIgZXh0cmFGcmFtZXNIUlRGID0gNTEy
OwotICAgICAgCi0gICAgICAvLyBIb3cgbWFueSBzcXVhcmUgcHVsc2VzIHRvIHBsYXkuCi0gICAg
ICB2YXIgbnVtYmVyT2ZUZXN0cyA9IDEwMDsKLQotICAgICAgLy8gRHVyYXRpb24gb2YgdGhlIHNx
dWFyZSBwdWxzZSB0byBiZSBwbGF5ZWQKLSAgICAgIHZhciBkdXJhdGlvbiA9IDAuMDE7Ci0KLSAg
ICAgIC8vIFRpbWUgc3RlcCBiZXR3ZWVuIHRoZSBzdGFydCBvZiBlYWNoIHNxdWFyZSBwdWxzZS4g
IFdlIG5lZWQgdG8KLSAgICAgIC8vIGFkZCBhIGxpdHRsZSBiaXQgb2Ygc2lsZW5jZSBzbyB3ZSBj
YW4gZGV0ZWN0IHB1bHNlIGJvdW5kYXJpZXMKLSAgICAgIC8vIGFuZCBhbHNvIGFjY291bnQgZm9y
IHRoZSBleHRyYSBmcmFtZXMgZm9yIEhSVEYuCi0gICAgICB2YXIgdGltZVN0ZXAgPSBkdXJhdGlv
biArIC4wMDUgKyBleHRyYUZyYW1lc0hSVEYgLyBzYW1wbGVSYXRlOwotCi0gICAgICAvLyBUaW1l
IHN0ZXAgYmV0d2VlbiB0aGUgZ3JhaW4gc3RhcnQgZm9yIGVhY2ggc3F1YXJlIHB1bHNlLgotICAg
ICAgdmFyIGdyYWluT2Zmc2V0U3RlcCA9IDAuMDA1OwotCi0gICAgICAvLyBIb3cgbG9uZyB0byBy
ZW5kZXIgdG8gY292ZXIgYWxsIG9mIHRoZSBwdWxzZXMuCi0gICAgICB2YXIgcmVuZGVyVGltZSA9
IChudW1iZXJPZlRlc3RzICsgMSkgKiB0aW1lU3RlcDsKLQotICAgICAgdmFyIGNvbnRleHQ7CiAg
ICAgICB2YXIgc3F1YXJlUHVsc2VCdWZmZXI7Ci0gICAgICB2YXIgcmVuZGVyZWREYXRhOwotCi0g
ICAgICBmdW5jdGlvbiBjcmVhdGVTcXVhcmVQdWxzZShjb250ZXh0KSB7Ci0gICAgICAgICAgLy8g
Q3JlYXRlIGEgc3F1YXJlIHB1bHNlIHRoYXQgaXMgbG9uZyBlbm91Z2ggc28gdGhhdCBhbGwgdGhl
Ci0gICAgICAgICAgLy8gcG9zc2libGUgZ3JhaW4gb2Zmc2V0cyBzdGlsbCByZXN1bHRzIGluIGEg
c3F1YXJlIHB1bHNlIG9mCi0gICAgICAgICAgLy8gb2YgdGhlIHJlcXVlc3RlZCBkdXJhdGlvbi4g
IChUaGUgZXh0cmEgMSBpcyBmb3IgYW55Ci0gICAgICAgICAgLy8gcm91bmQtb2ZmLikgCi0KLSAg
ICAgICAgICB2YXIgcHVsc2VMZW5ndGggPSBNYXRoLmZsb29yKDEgKyBleHRyYUZyYW1lc0hSVEYg
KyBzYW1wbGVSYXRlICogKG51bWJlck9mVGVzdHMgKiBncmFpbk9mZnNldFN0ZXAgKyBkdXJhdGlv
bikpOwogCi0gICAgICAgICAgc3F1YXJlUHVsc2VCdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZl
cigyLCBwdWxzZUxlbmd0aCwgc2FtcGxlUmF0ZSk7Ci0gICAgICAgICAgdmFyIGRhdGEgPSBzcXVh
cmVQdWxzZUJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKLSAgICAgICAgICBmb3IgKHZhciBrID0g
MDsgayA8IHB1bHNlTGVuZ3RoOyArK2spIHsKLSAgICAgICAgICAgICAgZGF0YVtrXSA9IDE7Ci0g
ICAgICAgICAgfQotICAgICAgfQotCi0gICAgICBmdW5jdGlvbiB0cnVlR3JhaW5MZW5ndGgoZ3Jh
aW5PZmZzZXQsIGR1cmF0aW9uKSB7Ci0gICAgICAgICAgdmFyIHN0YXJ0RnJhbWUgPSB0aW1lVG9T
YW1wbGVGcmFtZShncmFpbk9mZnNldCwgc2FtcGxlUmF0ZSk7Ci0gICAgICAgICAgdmFyIGVuZEZy
YW1lID0gdGltZVRvU2FtcGxlRnJhbWUoZ3JhaW5PZmZzZXQgKyBkdXJhdGlvbiwgc2FtcGxlUmF0
ZSk7Ci0KLSAgICAgICAgICByZXR1cm4gZW5kRnJhbWUgLSBzdGFydEZyYW1lOwotICAgICAgfQot
ICAgICAgCiAgICAgICBmdW5jdGlvbiBjaGVja1Jlc3VsdChldmVudCkgewogICAgICAgICAgIHZh
ciBidWZmZXIgPSBldmVudC5yZW5kZXJlZEJ1ZmZlcjsKICAgICAgICAgICByZW5kZXJlZERhdGEg
PSBidWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7CiAgICAgICAgICAgdmFyIG5TYW1wbGVzID0gcmVu
ZGVyZWREYXRhLmxlbmd0aDsKIAogICAgICAgICAgIHZhciBzdWNjZXNzID0gdHJ1ZTsKLSAgICAg
ICAgICB2YXIgZXJyb3JDb3VudFN0YXJ0ID0gMDsKLSAgICAgICAgICB2YXIgZXJyb3JDb3VudEVu
ZCA9IDA7CiAgICAgICAKLSAgICAgICAgICB2YXIgc3RhcnRUaW1lID0gW107Ci0gICAgICAgICAg
dmFyIGVuZFRpbWUgPSBbXTsKLSAgICAgICAgICB2YXIgbG9va0ZvclN0YXJ0ID0gdHJ1ZTsKLSAg
ICAgIAotICAgICAgICAgIC8vIExvb2sgdGhyb3VnaCB0aGUgcmVuZGVyZWQgZGF0YSB0byBmaW5k
IHRoZSBzdGFydCBhbmQgc3RvcAotICAgICAgICAgIC8vIHRpbWVzIG9mIGVhY2ggcHVsc2UuCi0g
ICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBuU2FtcGxlczsgKytrKSB7Ci0gICAgICAgICAg
ICAgIGlmIChsb29rRm9yU3RhcnQpIHsKLSAgICAgICAgICAgICAgICAgIC8vIEZpbmQgYSBub24t
emVybyBwb2ludCBhbmQgcmVjb3JkIGl0LiAgV2UncmUgbm90Ci0gICAgICAgICAgICAgICAgICAv
LyBjb25jZXJuZWQgd2l0aCB0aGUgdmFsdWUgaW4gdGhpcyB0ZXN0LCBvbmx5IHRoYXQKLSAgICAg
ICAgICAgICAgICAgIC8vIHRoZSBwdWxzZSBzdGFydGVkIGhlcmUuICBPdGhlciB0ZXN0cyBzaG91
bGQgY292ZXIKLSAgICAgICAgICAgICAgICAgIC8vIHRoaXMgY2FzZS4KLSAgICAgICAgICAgICAg
ICAgIGlmIChyZW5kZXJlZERhdGFba10gPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgc3Rh
cnRUaW1lLnB1c2goayk7Ci0gICAgICAgICAgICAgICAgICAgICAgbG9va0ZvclN0YXJ0ID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAvLyBGaW5kIGEgemVybyBhbmQgcmVjb3JkIGl0LgotICAgICAgICAgICAgICAg
ICAgaWYgKHJlbmRlcmVkRGF0YVtrXSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgZW5k
VGltZS5wdXNoKGspOwotICAgICAgICAgICAgICAgICAgICAgIGxvb2tGb3JTdGFydCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9CisgICAg
ICAgICAgdmFyIHN0YXJ0RW5kRnJhbWVzID0gZmluZFN0YXJ0QW5kRW5kU2FtcGxlcyhyZW5kZXJl
ZERhdGEpOwogCi0gICAgICAgICAgaWYgKHN0YXJ0VGltZS5sZW5ndGggIT0gZW5kVGltZS5sZW5n
dGgpIHsKLSAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiQ291bGQgbm90IGZpbmQgdGhlIGJlZ2lu
bmluZyBvciBlbmQgb2YgYSBzcXVhcmUgcHVsc2UuIik7Ci0gICAgICAgICAgICAgIHN1Y2Nlc3Mg
PSBmYWxzZTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAoc3RhcnRUaW1lLmxlbmd0aCA9
PSBudW1iZXJPZlRlc3RzICYmIGVuZFRpbWUubGVuZ3RoID09IG51bWJlck9mVGVzdHMpIHsKLSAg
ICAgICAgICAgICAgdGVzdFBhc3NlZCgiRm91bmQgYWxsICIgKyBudW1iZXJPZlRlc3RzICsgIiBw
dWxzZXMuIik7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgdGVzdEZhaWxlZCgi
RGlkIG5vdCBmaW5kIGFsbCAiICsgbnVtYmVyT2ZUZXN0cyArICIgcHVsc2VzLiIpOwotICAgICAg
ICAgIH0KLQotICAgICAgICAgIC8vIEV4YW1pbmUgdGhlIHN0YXJ0IGFuZCBzdG9wIHRpbWVzIHRv
IHNlZSBpZiB0aGV5IG1hdGNoIG91cgotICAgICAgICAgIC8vIGV4cGVjdGF0aW9ucy4KLSAgICAg
ICAgICBmb3IgKHZhciBrID0gMDsgayA8IHN0YXJ0VGltZS5sZW5ndGg7ICsraykgewotICAgICAg
ICAgICAgICB2YXIgZXhwZWN0ZWRTdGFydCA9IHRpbWVUb1NhbXBsZUZyYW1lKGsgKiB0aW1lU3Rl
cCwgc2FtcGxlUmF0ZSk7Ci0gICAgICAgICAgICAgIC8vIFRoZSBlbmQgcG9pbnQgaXMgdGhlIGR1
cmF0aW9uLCBwbHVzIHRoZSBleHRyYSBmcmFtZXMKLSAgICAgICAgICAgICAgLy8gZm9yIEhSVEYu
Ci0gICAgICAgICAgICAgIHZhciBleHBlY3RlZEVuZCA9IGV4dHJhRnJhbWVzSFJURiArIGV4cGVj
dGVkU3RhcnQgKyB0cnVlR3JhaW5MZW5ndGgoayAqIGdyYWluT2Zmc2V0U3RlcCwgZHVyYXRpb24p
OwotCi0gICAgICAgICAgICAgIGlmIChzdGFydFRpbWVba10gIT0gZXhwZWN0ZWRTdGFydCkgewot
ICAgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiUHVsc2UgIiArIGsgKyAiIHN0YXJ0ZWQgYXQg
IiArIHN0YXJ0VGltZVtrXSArICIgYnV0IGV4cGVjdGVkIGF0ICIgKyBleHBlY3RlZFN0YXJ0KTsK
LSAgICAgICAgICAgICAgICAgICsrZXJyb3JDb3VudFN0YXJ0OwotICAgICAgICAgICAgICAgICAg
c3VjY2VzcyA9IGZhbHNlOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgaWYgKGVu
ZFRpbWVba10gIT0gZXhwZWN0ZWRFbmQpIHsKLSAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQo
IlB1bHNlICIgKyBrICsgIiBlbmRlZCBhdCAiICsgZW5kVGltZVtrXSArICIgYnV0IGV4cGVjdGVk
IGF0ICIgKyBleHBlY3RlZEVuZCk7Ci0gICAgICAgICAgICAgICAgICArK2Vycm9yQ291bnRFbmQ7
Ci0gICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgICAgICAgIH0KLSAg
ICAgICAgICB9Ci0KLSAgICAgICAgICBpZiAoIWVycm9yQ291bnRTdGFydCkgewotICAgICAgICAg
ICAgICBpZiAoc3RhcnRUaW1lLmxlbmd0aCA9PSBudW1iZXJPZlRlc3RzKSB7Ci0gICAgICAgICAg
ICAgICAgICB0ZXN0UGFzc2VkKCJBbGwgIiArIG51bWJlck9mVGVzdHMgKyAiIHNxdWFyZSBwdWxz
ZXMgc3RhcnRlZCBhdCB0aGUgY29ycmVjdCB0aW1lLiIpOwotICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiQWxsIHB1bHNlcyBzdGFydGVkIGF0IHRo
ZSBjb3JyZWN0IHRpbWUsIGJ1dCBvbmx5ICIgKyBzdGFydFRpbWUubGVuZ3RoICsgIiBwdWxzZXMg
Zm91bmQuIik7Ci0gICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgICAg
ICAgIH0KLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICB0ZXN0RmFpbGVkKGVycm9y
Q291bnRTdGFydCArICIgb3V0IG9mICIgKyBudW1iZXJPZlRlc3RzICsgIiBzcXVhcmUgcHVsc2Vz
IHN0YXJ0ZWQgYXQgdGhlIHdyb25nIHRpbWUuIik7Ci0gICAgICAgICAgICAgIHN1Y2Nlc3MgPSBm
YWxzZTsKLSAgICAgICAgICB9CisgICAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgJiYgdmVyaWZ5
U3RhcnRFbmRGcmFtZXMoc3RhcnRFbmRGcmFtZXMpOwogCi0gICAgICAgICAgaWYgKCFlcnJvckNv
dW50RW5kKSB7Ci0gICAgICAgICAgICAgIGlmIChlbmRUaW1lLmxlbmd0aCA9PSBudW1iZXJPZlRl
c3RzKSB7Ci0gICAgICAgICAgICAgICAgICB0ZXN0UGFzc2VkKCJBbGwgIiArIG51bWJlck9mVGVz
dHMgKyAiIHNxdWFyZSBwdWxzZXMgZW5kZWQgYXQgdGhlIGNvcnJlY3QgdGltZS4iKTsKLSAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIkFsbCBwdWxz
ZXMgZW5kZWQgYXQgdGhlIGNvcnJlY3QgdGltZSwgYnV0IG9ubHkgIiArIGVuZFRpbWUubGVuZ3Ro
ICsgIiBwdWxzZXMgZm91bmQuIik7Ci0gICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7
Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICB0ZXN0
RmFpbGVkKGVycm9yQ291bnRFbmQgKyAiIG91dCBvZiAiICsgbnVtYmVyT2ZUZXN0cyArICIgc3F1
YXJlIHB1bHNlcyBlbmRlZCBhdCB0aGUgd3JvbmcgdGltZS4iKTsKLSAgICAgICAgICAgICAgc3Vj
Y2VzcyA9IGZhbHNlOwotICAgICAgICAgIH0KLQotICAgICAgCiAgICAgICAgICAgaWYgKHN1Y2Nl
c3MpIHsKICAgICAgICAgICAgICAgdGVzdFBhc3NlZCgibm90ZUdyYWluT24gdGltaW5nIHRlc3Rz
IHBhc3NlZC4iKTsKICAgICAgICAgICB9IGVsc2UgewpAQCAtMTYzLDE2ICszNSw2IEBACiAgICAg
ICAgICAgZmluaXNoSlNUZXN0KCk7CiAgICAgICB9CiAKLSAgICAgIGZ1bmN0aW9uIHBsYXlOb3Rl
KHRpbWUsIGdyYWluT2Zmc2V0LCBkdXJhdGlvbikgewotICAgICAgICAgIHZhciBidWZmZXJTb3Vy
Y2UgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOwotICAgICAgICAgIGJ1ZmZlclNvdXJj
ZS5idWZmZXIgPSBzcXVhcmVQdWxzZUJ1ZmZlcjsKLSAgICAgICAgICBidWZmZXJTb3VyY2UuY29u
bmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKTsKLSAgICAgICAgICAvLyBXZSdyZSBvbmx5IHRlc3Rp
bmcgdGhhdCB0aGUgc291cmNlIHN0YXJ0cyBhbmQgZW5kcyBhdCBhCi0gICAgICAgICAgLy8gcGFy
dGljdWxhciB0aW1lLiAgU2VlIGJ1ZyA3NzIyNQotICAgICAgICAgIC8vIChodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcyMjUpLgotICAgICAgICAgIGJ1ZmZlclNvdXJj
ZS5ub3RlR3JhaW5Pbih0aW1lLCBncmFpbk9mZnNldCwgZHVyYXRpb24pOwotICAgICAgfQotCiAg
ICAgICBmdW5jdGlvbiBydW5UZXN0KCkgewogICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsKICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOwpAQCAtMTgzLDEyICs0NSwxMCBAQAogCiAgICAgICAgICAgLy8gQ3JlYXRlIG9mZmxp
bmUgYXVkaW8gY29udGV4dC4KICAgICAgICAgICBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29u
dGV4dCgyLCBzYW1wbGVSYXRlICogcmVuZGVyVGltZSwgc2FtcGxlUmF0ZSk7Ci0gICAgICAgICAg
Y3JlYXRlU3F1YXJlUHVsc2UoY29udGV4dCk7ICAgIAogCi0gICAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBudW1iZXJPZlRlc3RzOyArK2kpIHsKLSAgICAgICAgICAgICAgdmFyIHRpbWVPZmZz
ZXQgPSB0aW1lU3RlcCAqIGk7Ci0gICAgICAgICAgICAgIHBsYXlOb3RlKHRpbWVPZmZzZXQsIGkg
KiBncmFpbk9mZnNldFN0ZXAsIGR1cmF0aW9uKTsKLSAgICAgICAgICB9CisgICAgICAgICAgc3F1
YXJlUHVsc2VCdWZmZXIgPSBjcmVhdGVTaWduYWxCdWZmZXIoY29udGV4dCwgZnVuY3Rpb24gKGsp
IHsgcmV0dXJuIDEgfSk7ICAgIAorCisgICAgICAgICAgcGxheUFsbEdyYWlucyhjb250ZXh0LCBz
cXVhcmVQdWxzZUJ1ZmZlciwgbnVtYmVyT2ZUZXN0cyk7CiAKICAgICAgICAgICBjb250ZXh0Lm9u
Y29tcGxldGUgPSBjaGVja1Jlc3VsdDsKICAgICAgICAgICBjb250ZXh0LnN0YXJ0UmVuZGVyaW5n
KCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW8tdGVz
dGluZy5qcyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9hdWRpby10ZXN0aW5nLmpz
CmluZGV4IGM0MjhhZTAxNGUwYTBhMjdlMTY2OGNmYjJkYjA5ZTNlYTc4Nzk3NTMuLjdjNzY2NmMx
YWQxZGMzNzgyYWIwZjdlMmEwYWJlOTU2OTlkYmIyNmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3dlYmF1ZGlvL3Jlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzCisrKyBiL0xheW91dFRlc3RzL3dl
YmF1ZGlvL3Jlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzCkBAIC0xMjUsMyArMTI1LDExIEBAIGZ1
bmN0aW9uIHRpbWVUb1NhbXBsZUZyYW1lKHRpbWUsIHNhbXBsZVJhdGUpIHsKICAgICByZXR1cm4g
TWF0aC5mbG9vcigwLjUgKyB0aW1lICogc2FtcGxlUmF0ZSk7CiB9CiAKKy8vIENvbXB1dGUgdGhl
IG51bWJlciBvZiBzYW1wbGUgZnJhbWVzIGNvbnN1bWVkIGJ5IG5vdGVHcmFpbk9uIHdpdGgKKy8v
IHRoZSBzcGVjaWZpZWQgfGdyYWluT2Zmc2V0fCwgfGR1cmF0aW9ufCwgYW5kIHxzYW1wbGVSYXRl
fC4KK2Z1bmN0aW9uIGdyYWluTGVuZ3RoSW5TYW1wbGVGcmFtZXMoZ3JhaW5PZmZzZXQsIGR1cmF0
aW9uLCBzYW1wbGVSYXRlKSB7CisgICAgdmFyIHN0YXJ0RnJhbWUgPSB0aW1lVG9TYW1wbGVGcmFt
ZShncmFpbk9mZnNldCwgc2FtcGxlUmF0ZSk7CisgICAgdmFyIGVuZEZyYW1lID0gdGltZVRvU2Ft
cGxlRnJhbWUoZ3JhaW5PZmZzZXQgKyBkdXJhdGlvbiwgc2FtcGxlUmF0ZSk7CisKKyAgICByZXR1
cm4gZW5kRnJhbWUgLSBzdGFydEZyYW1lOworfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vcmVzb3VyY2VzL25vdGUtZ3JhaW4tb24tdGVzdGluZy5qcyBiL0xheW91dFRlc3RzL3dl
YmF1ZGlvL3Jlc291cmNlcy9ub3RlLWdyYWluLW9uLXRlc3RpbmcuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDkx
ZDUyYWVhMzg0ZDA1MjlkNDE3YjRhZjg5MjZhMTYyNmIzNzY5ZAotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9ub3RlLWdyYWluLW9uLXRlc3RpbmcuanMK
QEAgLTAsMCArMSwxNzkgQEAKK3ZhciBzYW1wbGVSYXRlID0gNDQxMDAuMDsKKworLy8gSFJURiBl
eHRyYSBmcmFtZXMuICBUaGlzIGlzIGEgbWFnaWMgY29uc3RhbnQgY3VycmVudGx5IGluCisvLyBB
dWRpb0J1ZmZlclNvdXJjZU5vZGU6OnByb2Nlc3MgdGhhdCBhbHdheXMgZXh0ZW5kcyB0aGUKKy8v
IGR1cmF0aW9uIGJ5IHRoaXMgbnVtYmVyIG9mIHNhbXBsZXMuICBTZWUgYnVnIDc3MjI0CisvLyAo
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MjI0KS4KK3ZhciBleHRy
YUZyYW1lc0hSVEYgPSA1MTI7CisKKy8vIEhvdyBtYW55IHB1bHNlcyB0byBwbGF5LgordmFyIG51
bWJlck9mVGVzdHMgPSAxMDA7CisKKy8vIER1cmF0aW9uIG9mIGVhY2ggcHVsc2UgdG8gYmUgcGxh
eWVkCit2YXIgZHVyYXRpb24gPSAwLjAxOworCisvLyBUaW1lIHN0ZXAgYmV0d2VlbiB0aGUgc3Rh
cnQgb2YgZWFjaCBwdWxzZS4gIFdlIG5lZWQgdG8gYWRkIGEgbGl0dGxlCisvLyBiaXQgb2Ygc2ls
ZW5jZSBzbyB3ZSBjYW4gZGV0ZWN0IHB1bHNlIGJvdW5kYXJpZXMgYW5kIGFsc28gYWNjb3VudAor
Ly8gZm9yIHRoZSBleHRyYSBmcmFtZXMgZm9yIEhSVEYuCit2YXIgdGltZVN0ZXAgPSBkdXJhdGlv
biArIC4wMDUgKyBleHRyYUZyYW1lc0hSVEYgLyBzYW1wbGVSYXRlOworCisvLyBUaW1lIHN0ZXAg
YmV0d2VlbiB0aGUgZ3JhaW4gc3RhcnQgZm9yIGVhY2ggcHVsc2UuCit2YXIgZ3JhaW5PZmZzZXRT
dGVwID0gMC4wMDE7CisKKy8vIEhvdyBsb25nIHRvIHJlbmRlciB0byBjb3ZlciBhbGwgb2YgdGhl
IHB1bHNlcy4KK3ZhciByZW5kZXJUaW1lID0gKG51bWJlck9mVGVzdHMgKyAxKSAqIHRpbWVTdGVw
OworCit2YXIgY29udGV4dDsKK3ZhciByZW5kZXJlZERhdGE7CisKKy8vIENyZWF0ZSBhIGJ1ZmZl
ciBjb250YWluaW5nIHRoZSBkYXRhIHRoYXQgd2Ugd2FudC4gIFRoZSBmdW5jdGlvbiBmCisvLyBy
ZXR1cm5zIHRoZSBkZXNpcmVkIHZhbHVlIGF0IHNhbXBsZSBmcmFtZSBrLgorZnVuY3Rpb24gY3Jl
YXRlU2lnbmFsQnVmZmVyKGNvbnRleHQsIGYpIHsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgYnVm
ZmVyIGhhcyBlbm91Z2ggZGF0YSBmb3IgYWxsIG9mIHRoZSBwb3NzaWJsZQorICAgIC8vIGdyYWlu
IG9mZnNldHMgYW5kIGR1cmF0aW9ucy4gIE5lZWQgdG8gaW5jbHVkZSB0aGUgZXh0cmEgZnJhbWVz
CisgICAgLy8gZm9yIEhSVEYuICBUaGUgYWRkaXRpb25hbCAxIGlzIGZvciBhbnkgcm91bmQtb2Zm
IGVycm9ycy4KKyAgICB2YXIgc2lnbmFsTGVuZ3RoID0gTWF0aC5mbG9vcigxICsgZXh0cmFGcmFt
ZXNIUlRGICsgc2FtcGxlUmF0ZSAqIChudW1iZXJPZlRlc3RzICogZ3JhaW5PZmZzZXRTdGVwICsg
ZHVyYXRpb24pKTsKKworICAgIHZhciBidWZmZXIgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlcigyLCBz
aWduYWxMZW5ndGgsIHNhbXBsZVJhdGUpOworICAgIHZhciBkYXRhID0gYnVmZmVyLmdldENoYW5u
ZWxEYXRhKDApOworCisgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzaWduYWxMZW5ndGg7ICsraykg
eworICAgICAgICBkYXRhW2tdID0gZihrKTsKKyAgICB9CisKKyAgICByZXR1cm4gYnVmZmVyOwor
fQorCisvLyBGcm9tIHRoZSBkYXRhIGFycmF5LCBmaW5kIHRoZSBzdGFydCBhbmQgZW5kIHNhbXBs
ZSBmcmFtZSBmb3IgZWFjaAorLy8gcHVsc2UuICBUaGlzIGRlcGVuZHMgb24gdGhlIGRhdGEgaGF2
aW5nIDAncyBiZXR3ZWVuIHB1bHNlcywgYW5kCisvLyB0aGF0IHRoZSBwdWxzZSBpcyBhbHdheXMg
c3RyaWN0bHkgbm9uLXplcm8uCitmdW5jdGlvbiBmaW5kU3RhcnRBbmRFbmRTYW1wbGVzKGRhdGEp
IHsKKyAgICB2YXIgblNhbXBsZXMgPSBkYXRhLmxlbmd0aDsKKworICAgIHZhciBzdGFydFRpbWUg
PSBbXTsKKyAgICB2YXIgZW5kVGltZSA9IFtdOworICAgIHZhciBsb29rRm9yU3RhcnQgPSB0cnVl
OworICAgICAgCisgICAgLy8gTG9vayB0aHJvdWdoIHRoZSByZW5kZXJlZCBkYXRhIHRvIGZpbmQg
dGhlIHN0YXJ0IGFuZCBzdG9wCisgICAgLy8gdGltZXMgb2YgZWFjaCBwdWxzZS4KKyAgICBmb3Ig
KHZhciBrID0gMDsgayA8IG5TYW1wbGVzOyArK2spIHsKKyAgICAgICAgaWYgKGxvb2tGb3JTdGFy
dCkgeworICAgICAgICAgICAgLy8gRmluZCBhIG5vbi16ZXJvIHBvaW50IGFuZCByZWNvcmQgdGhl
IHN0YXJ0LiAgV2UncmUgbm90CisgICAgICAgICAgICAvLyBjb25jZXJuZWQgd2l0aCB0aGUgdmFs
dWUgaW4gdGhpcyB0ZXN0LCBvbmx5IHRoYXQgdGhlCisgICAgICAgICAgICAvLyBwdWxzZSBzdGFy
dGVkIGhlcmUuCisgICAgICAgICAgICBpZiAocmVuZGVyZWREYXRhW2tdKSB7CisgICAgICAgICAg
ICAgICAgc3RhcnRUaW1lLnB1c2goayk7CisgICAgICAgICAgICAgICAgbG9va0ZvclN0YXJ0ID0g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBG
aW5kIGEgemVybyBhbmQgcmVjb3JkIHRoZSBlbmQgb2YgdGhlIHB1bHNlLgorICAgICAgICAgICAg
aWYgKCFyZW5kZXJlZERhdGFba10pIHsKKyAgICAgICAgICAgICAgICBlbmRUaW1lLnB1c2goayk7
CisgICAgICAgICAgICAgICAgbG9va0ZvclN0YXJ0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7c3RhcnQgOiBzdGFydFRpbWUsIGVuZCA6IGVu
ZFRpbWV9OworfQorCitmdW5jdGlvbiBwbGF5R3JhaW4oY29udGV4dCwgc291cmNlLCB0aW1lLCBv
ZmZzZXQsIGR1cmF0aW9uKSB7CisgICAgdmFyIGJ1ZmZlclNvdXJjZSA9IGNvbnRleHQuY3JlYXRl
QnVmZmVyU291cmNlKCk7CisKKyAgICBidWZmZXJTb3VyY2UuYnVmZmVyID0gc291cmNlOworICAg
IGJ1ZmZlclNvdXJjZS5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pOworICAgIGJ1ZmZlclNv
dXJjZS5ub3RlR3JhaW5Pbih0aW1lLCBvZmZzZXQsIGR1cmF0aW9uKTsKK30KKworLy8gUGxheSBv
dXQgYWxsIGdyYWlucy4gIFJldHVybnMgYSBvYmplY3QgY29udGFpbmluZyB0d28gYXJyYXlzLCBv
bmUKKy8vIGZvciB0aGUgc3RhcnQgdGltZSBhbmQgb25lIGZvciB0aGUgZ3JhaW4gb2Zmc2V0IHRp
bWUuCitmdW5jdGlvbiBwbGF5QWxsR3JhaW5zKGNvbnRleHQsIHNvdXJjZSwgbnVtYmVyT2ZOb3Rl
cykgeworICAgIHZhciBzdGFydFRpbWVzID0gbmV3IEFycmF5KG51bWJlck9mTm90ZXMpOworICAg
IHZhciBvZmZzZXRzID0gbmV3IEFycmF5KG51bWJlck9mTm90ZXMpOworCisgICAgZm9yICh2YXIg
ayA9IDA7IGsgPCBudW1iZXJPZk5vdGVzOyArK2spIHsKKyAgICAgICAgdmFyIHRpbWVPZmZzZXQg
PSBrICogdGltZVN0ZXA7CisgICAgICAgIHZhciBncmFpbk9mZnNldCA9IGsgKiBncmFpbk9mZnNl
dFN0ZXA7CisKKyAgICAgICAgcGxheUdyYWluKGNvbnRleHQsIHNvdXJjZSwgdGltZU9mZnNldCwg
Z3JhaW5PZmZzZXQsIGR1cmF0aW9uKTsKKyAgICAgICAgc3RhcnRUaW1lc1trXSA9IHRpbWVPZmZz
ZXQ7CisgICAgICAgIG9mZnNldHNba10gPSBncmFpbk9mZnNldDsKKyAgICB9CisKKyAgICByZXR1
cm4geyBzdGFydFRpbWVzIDogc3RhcnRUaW1lcywgZ3JhaW5PZmZzZXRUaW1lcyA6IG9mZnNldHMg
fTsKK30KKworLy8gVmVyaWZ5IHRoYXQgdGhlIHN0YXJ0IGFuZCBlbmQgZnJhbWVzIGZvciBlYWNo
IHB1bHNlIG1hdGNoIG91cgorLy8gZXhwZWN0ZWQgc3RhcnQgYW5kIGVuZCBmcmFtZXMuCitmdW5j
dGlvbiB2ZXJpZnlTdGFydEVuZEZyYW1lcyhzdGFydEVuZEZyYW1lcykgeworICAgIHZhciBzdGFy
dEZyYW1lcyA9IHN0YXJ0RW5kRnJhbWVzLnN0YXJ0OworICAgIHZhciBlbmRGcmFtZXMgPSBzdGFy
dEVuZEZyYW1lcy5lbmQ7CisgICAgICAKKyAgICB2YXIgc3VjY2VzcyA9IHRydWU7CisKKyAgICAv
LyBDb3VudCBvZiBob3cgbWFueSBwdWxzZXMgc3RhcnRlZCBhdCB0aGUgaW5jb3JyZWN0IHRpbWUu
CisgICAgdmFyIGVycm9yQ291bnRTdGFydCA9IDA7CisKKyAgICAvLyBDb3VudCBvZiBob3cgbWFu
eSBwdWxzZXMgZW5kZWQgYXQgdGhlIGluY29ycmVjdCB0aW1lLgorICAgIHZhciBlcnJvckNvdW50
RW5kID0gMDsKKworICAgIGlmIChzdGFydEZyYW1lcy5sZW5ndGggIT0gZW5kRnJhbWVzLmxlbmd0
aCkgeworICAgICAgICB0ZXN0RmFpbGVkKCJDb3VsZCBub3QgZmluZCB0aGUgYmVnaW5uaW5nIG9y
IGVuZCBvZiBhIHB1bHNlLiIpOworICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKHN0YXJ0RnJhbWVzLmxlbmd0aCA9PSBudW1iZXJPZlRlc3RzICYmIGVuZEZyYW1lcy5s
ZW5ndGggPT0gbnVtYmVyT2ZUZXN0cykgeworICAgICAgICB0ZXN0UGFzc2VkKCJGb3VuZCBhbGwg
IiArIG51bWJlck9mVGVzdHMgKyAiIHB1bHNlcy4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0
ZXN0RmFpbGVkKCJEaWQgbm90IGZpbmQgYWxsICIgKyBudW1iZXJPZlRlc3RzICsgIiBwdWxzZXMu
Iik7CisgICAgfQorCisgICAgLy8gRXhhbWluZSB0aGUgc3RhcnQgYW5kIHN0b3AgdGltZXMgdG8g
c2VlIGlmIHRoZXkgbWF0Y2ggb3VyCisgICAgLy8gZXhwZWN0YXRpb25zLgorICAgIGZvciAodmFy
IGsgPSAwOyBrIDwgc3RhcnRGcmFtZXMubGVuZ3RoOyArK2spIHsKKyAgICAgICAgdmFyIGV4cGVj
dGVkU3RhcnQgPSB0aW1lVG9TYW1wbGVGcmFtZShrICogdGltZVN0ZXAsIHNhbXBsZVJhdGUpOwor
ICAgICAgICAvLyBUaGUgZW5kIHBvaW50IGlzIHRoZSBkdXJhdGlvbiwgcGx1cyB0aGUgZXh0cmEg
ZnJhbWVzCisgICAgICAgIC8vIGZvciBIUlRGLgorICAgICAgICB2YXIgZXhwZWN0ZWRFbmQgPSBl
eHRyYUZyYW1lc0hSVEYgKyBleHBlY3RlZFN0YXJ0ICsgZ3JhaW5MZW5ndGhJblNhbXBsZUZyYW1l
cyhrICogZ3JhaW5PZmZzZXRTdGVwLCBkdXJhdGlvbiwgc2FtcGxlUmF0ZSk7CisKKyAgICAgICAg
aWYgKHN0YXJ0RnJhbWVzW2tdICE9IGV4cGVjdGVkU3RhcnQpIHsKKyAgICAgICAgICAgIHRlc3RG
YWlsZWQoIlB1bHNlICIgKyBrICsgIiBzdGFydGVkIGF0ICIgKyBzdGFydEZyYW1lc1trXSArICIg
YnV0IGV4cGVjdGVkIGF0ICIgKyBleHBlY3RlZFN0YXJ0KTsKKyAgICAgICAgICAgICsrZXJyb3JD
b3VudFN0YXJ0OworICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGVuZEZyYW1lc1trXSAhPSBleHBlY3RlZEVuZCkgeworICAgICAgICAgICAgdGVz
dEZhaWxlZCgiUHVsc2UgIiArIGsgKyAiIGVuZGVkIGF0ICIgKyBlbmRGcmFtZXNba10gKyAiIGJ1
dCBleHBlY3RlZCBhdCAiICsgZXhwZWN0ZWRFbmQpOworICAgICAgICAgICAgKytlcnJvckNvdW50
RW5kOworICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gQ2hlY2sgdGhhdCBhbGwgdGhlIHB1bHNlcyBzdGFydGVkIG9yIGVuZGVkIGF0IHRoZSBj
b3JyZWN0IHRpbWUuCisgICAgaWYgKCFlcnJvckNvdW50U3RhcnQpIHsKKyAgICAgICAgaWYgKHN0
YXJ0RnJhbWVzLmxlbmd0aCA9PSBudW1iZXJPZlRlc3RzKSB7CisgICAgICAgICAgICB0ZXN0UGFz
c2VkKCJBbGwgIiArIG51bWJlck9mVGVzdHMgKyAiIHB1bHNlcyBzdGFydGVkIGF0IHRoZSBjb3Jy
ZWN0IHRpbWUuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJB
bGwgcHVsc2VzIHN0YXJ0ZWQgYXQgdGhlIGNvcnJlY3QgdGltZSwgYnV0IG9ubHkgIiArIHN0YXJ0
RnJhbWVzLmxlbmd0aCArICIgcHVsc2VzIGZvdW5kLiIpOworICAgICAgICAgICAgc3VjY2VzcyA9
IGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZhaWxlZChlcnJv
ckNvdW50U3RhcnQgKyAiIG91dCBvZiAiICsgbnVtYmVyT2ZUZXN0cyArICIgcHVsc2VzIHN0YXJ0
ZWQgYXQgdGhlIHdyb25nIHRpbWUuIik7CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICB9
CisKKyAgICBpZiAoIWVycm9yQ291bnRFbmQpIHsKKyAgICAgICAgaWYgKGVuZEZyYW1lcy5sZW5n
dGggPT0gbnVtYmVyT2ZUZXN0cykgeworICAgICAgICAgICAgdGVzdFBhc3NlZCgiQWxsICIgKyBu
dW1iZXJPZlRlc3RzICsgIiBwdWxzZXMgZW5kZWQgYXQgdGhlIGNvcnJlY3QgdGltZS4iKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkFsbCBwdWxzZXMgZW5kZWQg
YXQgdGhlIGNvcnJlY3QgdGltZSwgYnV0IG9ubHkgIiArIGVuZEZyYW1lcy5sZW5ndGggKyAiIHB1
bHNlcyBmb3VuZC4iKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQoZXJyb3JDb3VudEVuZCArICIgb3V0IG9m
ICIgKyBudW1iZXJPZlRlc3RzICsgIiBwdWxzZXMgZW5kZWQgYXQgdGhlIHdyb25nIHRpbWUuIik7
CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gc3VjY2VzczsK
K30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124963</attachid>
            <date>2012-02-01 10:12:50 -0800</date>
            <delta_ts>2012-02-02 18:41:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77225-20120201101249.patch</filename>
            <type>text/plain</type>
            <size>23781</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MzQ0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggOTg1ZTVlMjg5MzQyMDEwMDY4NDgw
MDE1MDI0NWEwN2I2ZWUwNDRiNy4uNGVlMDE2ZTNlMzFjY2M4NTc1NTZhMjJmMWE4NjFhZmU5MTI3
ZTg3ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTAxLTMwICBSYXltb25kIFRveSAgPHJ0
b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBub3RlR3JhaW5PbiBuZWVkcyBtb3JlIHRlc3RzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzIyNQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2ViYXVkaW8v
bm90ZS1ncmFpbi1vbi1wbGF5Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL25vdGUt
Z3JhaW4tb24tcGxheS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL25v
dGUtZ3JhaW4tb24tdGltaW5nLmh0bWw6IFJlZmFjdG9yZWQgdG8gdXNlIG5ldworICAgICAgICBm
dW5jdGlvbnMgaW4gbm90ZS1ncmFpbi1vbi10ZXN0aW5nLmpzLgorICAgICAgICAqIHdlYmF1ZGlv
L25vdGUtZ3JhaW4tb24tdGltaW5nLWV4cGVjdGVkLnR4dDogVXBkYXRlZC4KKyAgICAgICAgKiB3
ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qczoKKyAgICAgICAgKGdyYWluTGVuZ3Ro
SW5TYW1wbGVGcmFtZXMpOiAgVXRpbGl0eSB0byBjb21wdXRlIGxlbmd0aCBvZiBhIGdyYWluCisg
ICAgICAgIGluIHNhbXBsZXMuCisgICAgICAgICogd2ViYXVkaW8vcmVzb3VyY2VzL25vdGUtZ3Jh
aW4tb24tdGVzdGluZy5qczogQWRkZWQuCisgICAgICAgIChjcmVhdGVTaWduYWxCdWZmZXIpOgor
ICAgICAgICAoZmluZFN0YXJ0QW5kRW5kU2FtcGxlcyk6CisgICAgICAgIChwbGF5R3JhaW4pOgor
ICAgICAgICAocGxheUFsbEdyYWlucyk6CisgICAgICAgICh2ZXJpZnlTdGFyQW5kdEVuZFRpbWVz
KTogQ29tbW9uIGZ1bmN0aW9ucyBmb3Igbm90ZS1ncmFpbi1vbi1wbGF5IGFuZAorICAgICAgICBu
b3RlLWdyYWluLW9uLXRpbWluZyB0ZXN0cyB0byB1c2UuCisKIDIwMTItMDEtMzEgIFl1em8gRnVq
aXNoaW1hICA8eXV6b0Bnb29nbGUuY29tPgogCiAgICAgICAgIFtDaHJvbWl1bV0gVW5yZXZpZXdl
ZCB0ZXN0IGV4cGVjdGF0aW9uIGNoYW5nZS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1
ZGlvL25vdGUtZ3JhaW4tb24tcGxheS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRp
by9ub3RlLWdyYWluLW9uLXBsYXktZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFlN2IxOTFkOGFh
YjY2Y2ZmNDdlYzVhM2RmNzgzNzVmOTY2NGJhOWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9ub3RlLWdyYWluLW9uLXBsYXktZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MTMgQEAKK1Rlc3Qgbm90ZUdyYWluT24gb2Zmc2V0IHJlbmRlcmluZy4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCitQQVNTIEZvdW5kIGFsbCAxMDAgZ3JhaW5zLgorUEFTUyBBbGwgMTAw
IGdyYWlucyBzdGFydGVkIGF0IHRoZSBjb3JyZWN0IHRpbWUuCitQQVNTIEFsbCAxMDAgZ3JhaW5z
IGVuZGVkIGF0IHRoZSBjb3JyZWN0IHRpbWUuCitQQVNTIEFsbCAxMDAgZ3JhaW5zIGNvbnRhaW5l
ZCB0aGUgY29ycmVjdCBkYXRhLgorUEFTUyBub3RlR3JhaW5PbiBvZmZzZXQgcmVuZGVyaW5nIHRl
c3RzIHBhc3NlZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9ub3RlLWdyYWluLW9uLXBs
YXkuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL25vdGUtZ3JhaW4tb24tcGxheS5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmU0YTZjNGE0MTExNjk5OTZiYjZiNzk0NGEyYmEzYmMwMjYxYWJhMTAKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9ub3RlLWdyYWluLW9uLXBsYXkuaHRt
bApAQCAtMCwwICsxLDEzNSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBI
VE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPHNjcmlw
dCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL25vdGUtZ3JhaW4tb24tdGVzdGluZy5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKyAgPC9oZWFkPgorCisgIDxib2R5PgorICAgIDxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rp
dj4KKyAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworICAgIDxzY3JpcHQ+CisgICAgICBk
ZXNjcmlwdGlvbigiVGVzdCBub3RlR3JhaW5PbiBvZmZzZXQgcmVuZGVyaW5nLiIpOworCisgICAg
ICAvLyBUbyB0ZXN0IG5vdGVHcmFpbk9uLCBhIHNpbmdsZSByYW1wIHNpZ25hbCBpcyBjcmVhdGVk
LgorICAgICAgLy8gVmFyaW91cyBzZWN0aW9ucyBvZiB0aGUgcmFtcCBhcmUgcmVuZGVyZWQgYnkg
bm90ZUdyYWluT24oKSBhdAorICAgICAgLy8gZGlmZmVyZW50IHRpbWVzLCBhbmQgd2UgdmVyaWZ5
IHRoYXQgdGhlIGFjdHVhbCBvdXRwdXQKKyAgICAgIC8vIGNvbnNpc3RzIG9mIHRoZSBjb3JyZWN0
IHNlY3Rpb24gb2YgdGhlIHJhbXAgYXQgdGhlIGNvcnJlY3QKKyAgICAgIC8vIHRpbWUuCisgICAg
ICAKKyAgICAgIHZhciBsaW5lYXJSYW1wQnVmZmVyOworCisgICAgICAvLyBBcnJheSBvZiB0aGUg
Z3JhaW4gb2Zmc2V0IHVzZWQgZm9yIGVhY2ggcmFtcCBwbGF5ZWQuCisgICAgICB2YXIgZ3JhaW5P
ZmZzZXRUaW1lID0gW107CisKKyAgICAgIC8vIFZlcmlmeSB0aGUgcmVjZWl2ZWQgc2lnbmFsIGlz
IGEgcmFtcCBmcm9tIHRoZSBjb3JyZWN0IHNlY3Rpb24KKyAgICAgIC8vIG9mIG91ciByYW1wIHNp
Z25hbC4KKyAgICAgIGZ1bmN0aW9uIHZlcmlmeUdyYWluKHJlbmRlcmVkRGF0YSwgc3RhcnRGcmFt
ZSwgZW5kRnJhbWUsIGdyYWluSW5kZXgpIHsKKyAgICAgICAgICB2YXIgZ3JhaW5PZmZzZXRGcmFt
ZSA9IHRpbWVUb1NhbXBsZUZyYW1lKGdyYWluT2Zmc2V0VGltZVtncmFpbkluZGV4XSwgc2FtcGxl
UmF0ZSk7CisgICAgICAgICAgdmFyIGdyYWluRnJhbWVMZW5ndGggPSBlbmRGcmFtZSAtIHN0YXJ0
RnJhbWU7CisgICAgICAgICAgdmFyIHJhbXAgPSBsaW5lYXJSYW1wQnVmZmVyLmdldENoYW5uZWxE
YXRhKDApOworICAgICAgICAgIHZhciBpc0NvcnJlY3QgPSB0cnVlOworCisgICAgICAgICAgdmFy
IGV4cGVjdGVkOworICAgICAgICAgIHZhciBhY3R1YWw7CisgICAgICAgICAgdmFyIGZyYW1lOwor
ICAgICAgCisgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBncmFpbkZyYW1lTGVuZ3RoOyAr
K2spIHsKKyAgICAgICAgICAgICAgaWYgKHJlbmRlcmVkRGF0YVtzdGFydEZyYW1lICsga10gIT0g
cmFtcFtncmFpbk9mZnNldEZyYW1lICsga10pIHsKKyAgICAgICAgICAgICAgICAgIGV4cGVjdGVk
ID0gcmFtcFtncmFpbk9mZnNldEZyYW1lICsga107CisgICAgICAgICAgICAgICAgICBhY3R1YWwg
PSByZW5kZXJlZERhdGFbc3RhcnRGcmFtZSArIGtdOworICAgICAgICAgICAgICAgICAgZnJhbWUg
PSBzdGFydEZyYW1lICsgazsKKyAgICAgICAgICAgICAgICAgIGlzQ29ycmVjdCA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9Cisg
ICAgICAgICAgcmV0dXJuIHsgdmVyaWZpZWQ6IGlzQ29ycmVjdCwKKyAgICAgICAgICAgICAgICAg
ICBleHBlY3RlZCA6IGV4cGVjdGVkICwKKyAgICAgICAgICAgICAgICAgICBhY3R1YWwgOiBhY3R1
YWwsCisgICAgICAgICAgICAgICAgICAgZnJhbWUgOiBmcmFtZSB9OworICAgICAgfQorICAgICAg
CisgICAgICBmdW5jdGlvbiBjaGVja1Jlc3VsdChldmVudCkgeworICAgICAgICAgIHZhciBidWZm
ZXIgPSBldmVudC5yZW5kZXJlZEJ1ZmZlcjsKKyAgICAgICAgICByZW5kZXJlZERhdGEgPSBidWZm
ZXIuZ2V0Q2hhbm5lbERhdGEoMCk7CisgICAgICAgICAgdmFyIG5TYW1wbGVzID0gcmVuZGVyZWRE
YXRhLmxlbmd0aDsKKworICAgICAgICAgIHZhciBzdWNjZXNzID0gdHJ1ZTsKKworICAgICAgICAg
IC8vIE51bWJlciBvZiBncmFpbnMgdGhhdCB3ZSBmb3VuZCB0aGF0IGhhdmUgaW5jb3JyZWN0IGRh
dGEuCisgICAgICAgICAgdmFyIGludmFsaWRHcmFpbkRhdGFDb3VudCA9IDA7CisgICAgICAKKyAg
ICAgICAgICB2YXIgc3RhcnRFbmRGcmFtZXMgPSBmaW5kU3RhcnRBbmRFbmRTYW1wbGVzKHJlbmRl
cmVkRGF0YSk7CisKKyAgICAgICAgICAvLyBWZXJpZnkgdGhlIHN0YXJ0IGFuZCBzdG9wIHRpbWVz
LiAgTm90IHN0cmljdGx5IG5lZWRlZCBmb3IKKyAgICAgICAgICAvLyB0aGlzIHRlc3QsIGJ1dCBp
dCdzIHVzZWZ1bCB0byBrbm93IHRoYXQgaWYgdGhlIHJhbXAgZGF0YQorICAgICAgICAgIC8vIGFw
cGVhcnMgdG8gYmUgaW5jb3JyZWN0LgorICAgICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIHZl
cmlmeVN0YXJ0QW5kRW5kRnJhbWVzKHN0YXJ0RW5kRnJhbWVzKTsKKworICAgICAgICAgIC8vIExv
b3AgdGhyb3VnaCBlYWNoIG9mIHRoZSByZW5kZXJlZCBncmFpbnMgYW5kIGNoZWNrIHRoYXQKKyAg
ICAgICAgICAvLyBlYWNoIGdyYWluIGNvbnRhaW5zIG91ciBleHBlY3RlZCByYW1wLgorICAgICAg
ICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc3RhcnRFbmRGcmFtZXMuc3RhcnQubGVuZ3RoOyArK2sp
IHsKKyAgICAgICAgICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHJlbmRlcmVkIGRhdGEgbWF0Y2hl
cyB0aGUgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgLy8gc2VjdGlvbiBvZiBvdXIgcmFtcCBzaWdu
YWwuCisgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB2ZXJpZnlHcmFpbihyZW5kZXJlZERhdGEs
IHN0YXJ0RW5kRnJhbWVzLnN0YXJ0W2tdLCBzdGFydEVuZEZyYW1lcy5lbmRba10sIGspOworCisg
ICAgICAgICAgICAgIGlmICghcmVzdWx0LnZlcmlmaWVkKSB7CisgICAgICAgICAgICAgICAgICB0
ZXN0RmFpbGVkKCJHcmFpbiAiICsgayArICIgaW5jb3JyZWN0LiAgRXhwZWN0ZWQgIiArIHJlc3Vs
dC5leHBlY3RlZCArICIgYnV0IHJlY2VpdmVkICIgKyByZXN1bHQuYWN0dWFsICsgIiBhdCBzYW1w
bGUgZnJhbWUgIiArIHJlc3VsdC5mcmFtZSk7CisgICAgICAgICAgICAgICAgICArK2ludmFsaWRH
cmFpbkRhdGFDb3VudDsKKyAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICAKKyAgICAgICAgICBpZiAoIWludmFs
aWRHcmFpbkRhdGFDb3VudCkgeworICAgICAgICAgICAgICB0ZXN0UGFzc2VkKCJBbGwgIiArIG51
bWJlck9mVGVzdHMgKyAiIGdyYWlucyBjb250YWluZWQgdGhlIGNvcnJlY3QgZGF0YS4iKTsKKyAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICB0ZXN0RmFpbGVkKGludmFsaWRHcmFpbkRh
dGFDb3VudCArICIgZ3JhaW5zIG91dCBvZiAiICsgbnVtYmVyT2ZUZXN0cyArICIgZGlkIG5vdCBj
b250YWluIHRoZSBleHBlY3RlZCBkYXRhLiIpOworICAgICAgICAgICAgICBzdWNjZXNzID0gZmFs
c2U7CisgICAgICAgICAgfQorICAgICAgCisgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAg
ICAgICAgICAgdGVzdFBhc3NlZCgibm90ZUdyYWluT24gb2Zmc2V0IHJlbmRlcmluZyB0ZXN0cyBw
YXNzZWQuIik7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgdGVzdEZhaWxlZCgi
bm90ZUdyYWluT24gb2Zmc2V0IHJlbmRlcmluZyB0ZXN0cyBmYWlsZWQuIik7CisgICAgICAgICAg
fQorCisgICAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgICB9CisKKyAgICAgIGZ1bmN0aW9u
IHJ1blRlc3QoKSB7CisgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
eworICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAg
ICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAg
ICB9CisKKyAgICAgICAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICAgICAg
ICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBjb250ZXh0LgorICAgICAgICAgIGNvbnRleHQgPSBu
ZXcgd2Via2l0QXVkaW9Db250ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJUaW1lLCBzYW1wbGVS
YXRlKTsKKworICAgICAgICAgIC8vIENyZWF0ZSBhIGxpbmVhciByYW1wIGZvciB0ZXN0aW5nIG5v
dGVHcmFpbk9uLgorICAgICAgICAgIGxpbmVhclJhbXBCdWZmZXIgPSBjcmVhdGVTaWduYWxCdWZm
ZXIoY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uKGspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBXYW50IHRoZSByYW1wIHRvIHN0YXJ0CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCAxLCBub3QgMC4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ayArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
KTsgICAgCisKKyAgICAgICAgICB2YXIgZ3JhaW5JbmZvID0gcGxheUFsbEdyYWlucyhjb250ZXh0
LCBsaW5lYXJSYW1wQnVmZmVyLCBudW1iZXJPZlRlc3RzKTsKKworICAgICAgICAgIGdyYWluT2Zm
c2V0VGltZSA9IGdyYWluSW5mby5ncmFpbk9mZnNldFRpbWVzOworCisgICAgICAgICAgY29udGV4
dC5vbmNvbXBsZXRlID0gY2hlY2tSZXN1bHQ7CisgICAgICAgICAgY29udGV4dC5zdGFydFJlbmRl
cmluZygpOworICAgICAgfQorICAgICAgCisgICAgICBydW5UZXN0KCk7CisgICAgICBzdWNjZXNz
ZnVsbHlQYXJzZWQgPSB0cnVlOworCisgICAgPC9zY3JpcHQ+CisKKyAgICA8c2NyaXB0IHNyYz0i
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKyAgPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vbm90ZS1ncmFpbi1v
bi10aW1pbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vbm90ZS1ncmFpbi1v
bi10aW1pbmctZXhwZWN0ZWQudHh0CmluZGV4IGM1MjRmODI5NmJkNzMyODI2YmNhNzljNmRjMmNl
MDQ0NTVkNzEzN2UuLjllMjFiMzQ0NjRiMzY1ZTU2ZDY4Nzg1YzRmYzZlZDgzZjg5MmE4OWIgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL25vdGUtZ3JhaW4tb24tdGltaW5nLWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9ub3RlLWdyYWluLW9uLXRpbWluZy1l
eHBlY3RlZC50eHQKQEAgLTIsOSArMiw5IEBAIFRlc3QgdGltaW5nIG9mIG5vdGVHcmFpbk9uLgog
CiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKLVBBU1MgRm91bmQgYWxsIDEwMCBwdWxzZXMu
Ci1QQVNTIEFsbCAxMDAgc3F1YXJlIHB1bHNlcyBzdGFydGVkIGF0IHRoZSBjb3JyZWN0IHRpbWUu
Ci1QQVNTIEFsbCAxMDAgc3F1YXJlIHB1bHNlcyBlbmRlZCBhdCB0aGUgY29ycmVjdCB0aW1lLgor
UEFTUyBGb3VuZCBhbGwgMTAwIGdyYWlucy4KK1BBU1MgQWxsIDEwMCBncmFpbnMgc3RhcnRlZCBh
dCB0aGUgY29ycmVjdCB0aW1lLgorUEFTUyBBbGwgMTAwIGdyYWlucyBlbmRlZCBhdCB0aGUgY29y
cmVjdCB0aW1lLgogUEFTUyBub3RlR3JhaW5PbiB0aW1pbmcgdGVzdHMgcGFzc2VkLgogUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJh
dWRpby9ub3RlLWdyYWluLW9uLXRpbWluZy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vbm90
ZS1ncmFpbi1vbi10aW1pbmcuaHRtbAppbmRleCBmMzNhZjA5YjViMGQzYTUxOTg1YjYxNzI4MWM1
ZmYzYjZjY2U1NTZlLi5lNmM5ODllOTk1Yjk0YzM2MzUzMWRlMjhiMWM0MjM4ZmY1Nzk0YjAzIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9ub3RlLWdyYWluLW9uLXRpbWluZy5odG1s
CisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL25vdGUtZ3JhaW4tb24tdGltaW5nLmh0bWwKQEAg
LTIsNiArMiw3IEBACiA8aHRtbD4KICAgPGhlYWQ+CiAgICAgPHNjcmlwdCBzcmM9InJlc291cmNl
cy9hdWRpby10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L25vdGUtZ3JhaW4tb24tdGVzdGluZy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ii4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KICAgPC9oZWFkPgog
CkBAIC0xMiwxNDggKzEzLDE5IEBACiAgICAgPHNjcmlwdD4KICAgICAgIGRlc2NyaXB0aW9uKCJU
ZXN0IHRpbWluZyBvZiBub3RlR3JhaW5Pbi4iKTsKIAotICAgICAgdmFyIHNhbXBsZVJhdGUgPSA0
NDEwMC4wOwotCi0gICAgICAvLyBIUlRGIGV4dHJhIGZyYW1lcy4gIFRoaXMgaXMgYSBtYWdpYyBj
b25zdGFudCBjdXJyZW50bHkgaW4KLSAgICAgIC8vIEF1ZGlvQnVmZmVyU291cmNlTm9kZTo6cHJv
Y2VzcyB0aGF0IGFsd2F5cyBleHRlbmRzIHRoZQotICAgICAgLy8gZHVyYXRpb24gYnkgdGhpcyBu
dW1iZXIgb2Ygc2FtcGxlcy4gIFNlZSBidWcgNzcyMjQKLSAgICAgIC8vIChodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcyMjQpLgotICAgICAgdmFyIGV4dHJhRnJhbWVz
SFJURiA9IDUxMjsKLSAgICAgIAotICAgICAgLy8gSG93IG1hbnkgc3F1YXJlIHB1bHNlcyB0byBw
bGF5LgotICAgICAgdmFyIG51bWJlck9mVGVzdHMgPSAxMDA7Ci0KLSAgICAgIC8vIER1cmF0aW9u
IG9mIHRoZSBzcXVhcmUgcHVsc2UgdG8gYmUgcGxheWVkCi0gICAgICB2YXIgZHVyYXRpb24gPSAw
LjAxOwotCi0gICAgICAvLyBUaW1lIHN0ZXAgYmV0d2VlbiB0aGUgc3RhcnQgb2YgZWFjaCBzcXVh
cmUgcHVsc2UuICBXZSBuZWVkIHRvCi0gICAgICAvLyBhZGQgYSBsaXR0bGUgYml0IG9mIHNpbGVu
Y2Ugc28gd2UgY2FuIGRldGVjdCBwdWxzZSBib3VuZGFyaWVzCi0gICAgICAvLyBhbmQgYWxzbyBh
Y2NvdW50IGZvciB0aGUgZXh0cmEgZnJhbWVzIGZvciBIUlRGLgotICAgICAgdmFyIHRpbWVTdGVw
ID0gZHVyYXRpb24gKyAuMDA1ICsgZXh0cmFGcmFtZXNIUlRGIC8gc2FtcGxlUmF0ZTsKLQotICAg
ICAgLy8gVGltZSBzdGVwIGJldHdlZW4gdGhlIGdyYWluIHN0YXJ0IGZvciBlYWNoIHNxdWFyZSBw
dWxzZS4KLSAgICAgIHZhciBncmFpbk9mZnNldFN0ZXAgPSAwLjAwNTsKLQotICAgICAgLy8gSG93
IGxvbmcgdG8gcmVuZGVyIHRvIGNvdmVyIGFsbCBvZiB0aGUgcHVsc2VzLgotICAgICAgdmFyIHJl
bmRlclRpbWUgPSAobnVtYmVyT2ZUZXN0cyArIDEpICogdGltZVN0ZXA7Ci0KLSAgICAgIHZhciBj
b250ZXh0OwogICAgICAgdmFyIHNxdWFyZVB1bHNlQnVmZmVyOwotICAgICAgdmFyIHJlbmRlcmVk
RGF0YTsKLQotICAgICAgZnVuY3Rpb24gY3JlYXRlU3F1YXJlUHVsc2UoY29udGV4dCkgewotICAg
ICAgICAgIC8vIENyZWF0ZSBhIHNxdWFyZSBwdWxzZSB0aGF0IGlzIGxvbmcgZW5vdWdoIHNvIHRo
YXQgYWxsIHRoZQotICAgICAgICAgIC8vIHBvc3NpYmxlIGdyYWluIG9mZnNldHMgc3RpbGwgcmVz
dWx0cyBpbiBhIHNxdWFyZSBwdWxzZSBvZgotICAgICAgICAgIC8vIG9mIHRoZSByZXF1ZXN0ZWQg
ZHVyYXRpb24uICAoVGhlIGV4dHJhIDEgaXMgZm9yIGFueQotICAgICAgICAgIC8vIHJvdW5kLW9m
Zi4pIAotCi0gICAgICAgICAgdmFyIHB1bHNlTGVuZ3RoID0gTWF0aC5mbG9vcigxICsgZXh0cmFG
cmFtZXNIUlRGICsgc2FtcGxlUmF0ZSAqIChudW1iZXJPZlRlc3RzICogZ3JhaW5PZmZzZXRTdGVw
ICsgZHVyYXRpb24pKTsKIAotICAgICAgICAgIHNxdWFyZVB1bHNlQnVmZmVyID0gY29udGV4dC5j
cmVhdGVCdWZmZXIoMiwgcHVsc2VMZW5ndGgsIHNhbXBsZVJhdGUpOwotICAgICAgICAgIHZhciBk
YXRhID0gc3F1YXJlUHVsc2VCdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7Ci0gICAgICAgICAgZm9y
ICh2YXIgayA9IDA7IGsgPCBwdWxzZUxlbmd0aDsgKytrKSB7Ci0gICAgICAgICAgICAgIGRhdGFb
a10gPSAxOwotICAgICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgZnVuY3Rpb24gdHJ1ZUdyYWlu
TGVuZ3RoKGdyYWluT2Zmc2V0LCBkdXJhdGlvbikgewotICAgICAgICAgIHZhciBzdGFydEZyYW1l
ID0gdGltZVRvU2FtcGxlRnJhbWUoZ3JhaW5PZmZzZXQsIHNhbXBsZVJhdGUpOwotICAgICAgICAg
IHZhciBlbmRGcmFtZSA9IHRpbWVUb1NhbXBsZUZyYW1lKGdyYWluT2Zmc2V0ICsgZHVyYXRpb24s
IHNhbXBsZVJhdGUpOwotCi0gICAgICAgICAgcmV0dXJuIGVuZEZyYW1lIC0gc3RhcnRGcmFtZTsK
LSAgICAgIH0KLSAgICAgIAogICAgICAgZnVuY3Rpb24gY2hlY2tSZXN1bHQoZXZlbnQpIHsKICAg
ICAgICAgICB2YXIgYnVmZmVyID0gZXZlbnQucmVuZGVyZWRCdWZmZXI7CiAgICAgICAgICAgcmVu
ZGVyZWREYXRhID0gYnVmZmVyLmdldENoYW5uZWxEYXRhKDApOwogICAgICAgICAgIHZhciBuU2Ft
cGxlcyA9IHJlbmRlcmVkRGF0YS5sZW5ndGg7CiAKICAgICAgICAgICB2YXIgc3VjY2VzcyA9IHRy
dWU7Ci0gICAgICAgICAgdmFyIGVycm9yQ291bnRTdGFydCA9IDA7Ci0gICAgICAgICAgdmFyIGVy
cm9yQ291bnRFbmQgPSAwOwogICAgICAgCi0gICAgICAgICAgdmFyIHN0YXJ0VGltZSA9IFtdOwot
ICAgICAgICAgIHZhciBlbmRUaW1lID0gW107Ci0gICAgICAgICAgdmFyIGxvb2tGb3JTdGFydCA9
IHRydWU7Ci0gICAgICAKLSAgICAgICAgICAvLyBMb29rIHRocm91Z2ggdGhlIHJlbmRlcmVkIGRh
dGEgdG8gZmluZCB0aGUgc3RhcnQgYW5kIHN0b3AKLSAgICAgICAgICAvLyB0aW1lcyBvZiBlYWNo
IHB1bHNlLgotICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgblNhbXBsZXM7ICsraykgewot
ICAgICAgICAgICAgICBpZiAobG9va0ZvclN0YXJ0KSB7Ci0gICAgICAgICAgICAgICAgICAvLyBG
aW5kIGEgbm9uLXplcm8gcG9pbnQgYW5kIHJlY29yZCBpdC4gIFdlJ3JlIG5vdAotICAgICAgICAg
ICAgICAgICAgLy8gY29uY2VybmVkIHdpdGggdGhlIHZhbHVlIGluIHRoaXMgdGVzdCwgb25seSB0
aGF0Ci0gICAgICAgICAgICAgICAgICAvLyB0aGUgcHVsc2Ugc3RhcnRlZCBoZXJlLiAgT3RoZXIg
dGVzdHMgc2hvdWxkIGNvdmVyCi0gICAgICAgICAgICAgICAgICAvLyB0aGlzIGNhc2UuCi0gICAg
ICAgICAgICAgICAgICBpZiAocmVuZGVyZWREYXRhW2tdID4gMCkgewotICAgICAgICAgICAgICAg
ICAgICAgIHN0YXJ0VGltZS5wdXNoKGspOwotICAgICAgICAgICAgICAgICAgICAgIGxvb2tGb3JT
dGFydCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgLy8gRmluZCBhIHplcm8gYW5kIHJlY29yZCBpdC4KLSAgICAg
ICAgICAgICAgICAgIGlmIChyZW5kZXJlZERhdGFba10gPT0gMCkgewotICAgICAgICAgICAgICAg
ICAgICAgIGVuZFRpbWUucHVzaChrKTsKLSAgICAgICAgICAgICAgICAgICAgICBsb29rRm9yU3Rh
cnQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgfQorICAgICAgICAgIHZhciBzdGFydEVuZEZyYW1lcyA9IGZpbmRTdGFydEFuZEVuZFNhbXBs
ZXMocmVuZGVyZWREYXRhKTsKIAotICAgICAgICAgIGlmIChzdGFydFRpbWUubGVuZ3RoICE9IGVu
ZFRpbWUubGVuZ3RoKSB7Ci0gICAgICAgICAgICAgIHRlc3RGYWlsZWQoIkNvdWxkIG5vdCBmaW5k
IHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIGEgc3F1YXJlIHB1bHNlLiIpOwotICAgICAgICAgICAg
ICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYgKHN0YXJ0VGlt
ZS5sZW5ndGggPT0gbnVtYmVyT2ZUZXN0cyAmJiBlbmRUaW1lLmxlbmd0aCA9PSBudW1iZXJPZlRl
c3RzKSB7Ci0gICAgICAgICAgICAgIHRlc3RQYXNzZWQoIkZvdW5kIGFsbCAiICsgbnVtYmVyT2ZU
ZXN0cyArICIgcHVsc2VzLiIpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIHRl
c3RGYWlsZWQoIkRpZCBub3QgZmluZCBhbGwgIiArIG51bWJlck9mVGVzdHMgKyAiIHB1bHNlcy4i
KTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICAvLyBFeGFtaW5lIHRoZSBzdGFydCBhbmQgc3Rv
cCB0aW1lcyB0byBzZWUgaWYgdGhleSBtYXRjaCBvdXIKLSAgICAgICAgICAvLyBleHBlY3RhdGlv
bnMuCi0gICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzdGFydFRpbWUubGVuZ3RoOyArK2sp
IHsKLSAgICAgICAgICAgICAgdmFyIGV4cGVjdGVkU3RhcnQgPSB0aW1lVG9TYW1wbGVGcmFtZShr
ICogdGltZVN0ZXAsIHNhbXBsZVJhdGUpOwotICAgICAgICAgICAgICAvLyBUaGUgZW5kIHBvaW50
IGlzIHRoZSBkdXJhdGlvbiwgcGx1cyB0aGUgZXh0cmEgZnJhbWVzCi0gICAgICAgICAgICAgIC8v
IGZvciBIUlRGLgotICAgICAgICAgICAgICB2YXIgZXhwZWN0ZWRFbmQgPSBleHRyYUZyYW1lc0hS
VEYgKyBleHBlY3RlZFN0YXJ0ICsgdHJ1ZUdyYWluTGVuZ3RoKGsgKiBncmFpbk9mZnNldFN0ZXAs
IGR1cmF0aW9uKTsKLQotICAgICAgICAgICAgICBpZiAoc3RhcnRUaW1lW2tdICE9IGV4cGVjdGVk
U3RhcnQpIHsKLSAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIlB1bHNlICIgKyBrICsgIiBz
dGFydGVkIGF0ICIgKyBzdGFydFRpbWVba10gKyAiIGJ1dCBleHBlY3RlZCBhdCAiICsgZXhwZWN0
ZWRTdGFydCk7Ci0gICAgICAgICAgICAgICAgICArK2Vycm9yQ291bnRTdGFydDsKLSAgICAgICAg
ICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgIGlmIChlbmRUaW1lW2tdICE9IGV4cGVjdGVkRW5kKSB7Ci0gICAgICAgICAgICAgICAgICB0
ZXN0RmFpbGVkKCJQdWxzZSAiICsgayArICIgZW5kZWQgYXQgIiArIGVuZFRpbWVba10gKyAiIGJ1
dCBleHBlY3RlZCBhdCAiICsgZXhwZWN0ZWRFbmQpOwotICAgICAgICAgICAgICAgICAgKytlcnJv
ckNvdW50RW5kOwotICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwotICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgaWYgKCFlcnJvckNvdW50U3RhcnQpIHsK
LSAgICAgICAgICAgICAgaWYgKHN0YXJ0VGltZS5sZW5ndGggPT0gbnVtYmVyT2ZUZXN0cykgewot
ICAgICAgICAgICAgICAgICAgdGVzdFBhc3NlZCgiQWxsICIgKyBudW1iZXJPZlRlc3RzICsgIiBz
cXVhcmUgcHVsc2VzIHN0YXJ0ZWQgYXQgdGhlIGNvcnJlY3QgdGltZS4iKTsKLSAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIkFsbCBwdWxzZXMgc3Rh
cnRlZCBhdCB0aGUgY29ycmVjdCB0aW1lLCBidXQgb25seSAiICsgc3RhcnRUaW1lLmxlbmd0aCAr
ICIgcHVsc2VzIGZvdW5kLiIpOwotICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwot
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgdGVzdEZh
aWxlZChlcnJvckNvdW50U3RhcnQgKyAiIG91dCBvZiAiICsgbnVtYmVyT2ZUZXN0cyArICIgc3F1
YXJlIHB1bHNlcyBzdGFydGVkIGF0IHRoZSB3cm9uZyB0aW1lLiIpOwotICAgICAgICAgICAgICBz
dWNjZXNzID0gZmFsc2U7Ci0gICAgICAgICAgfQorICAgICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNz
ICYmIHZlcmlmeVN0YXJ0QW5kRW5kRnJhbWVzKHN0YXJ0RW5kRnJhbWVzKTsKIAotICAgICAgICAg
IGlmICghZXJyb3JDb3VudEVuZCkgewotICAgICAgICAgICAgICBpZiAoZW5kVGltZS5sZW5ndGgg
PT0gbnVtYmVyT2ZUZXN0cykgewotICAgICAgICAgICAgICAgICAgdGVzdFBhc3NlZCgiQWxsICIg
KyBudW1iZXJPZlRlc3RzICsgIiBzcXVhcmUgcHVsc2VzIGVuZGVkIGF0IHRoZSBjb3JyZWN0IHRp
bWUuIik7Ci0gICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICB0ZXN0RmFp
bGVkKCJBbGwgcHVsc2VzIGVuZGVkIGF0IHRoZSBjb3JyZWN0IHRpbWUsIGJ1dCBvbmx5ICIgKyBl
bmRUaW1lLmxlbmd0aCArICIgcHVsc2VzIGZvdW5kLiIpOwotICAgICAgICAgICAgICAgICAgc3Vj
Y2VzcyA9IGZhbHNlOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgdGVzdEZhaWxlZChlcnJvckNvdW50RW5kICsgIiBvdXQgb2YgIiArIG51bWJlck9m
VGVzdHMgKyAiIHNxdWFyZSBwdWxzZXMgZW5kZWQgYXQgdGhlIHdyb25nIHRpbWUuIik7Ci0gICAg
ICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICAgICAgICB9Ci0KLSAgICAgIAogICAgICAg
ICAgIGlmIChzdWNjZXNzKSB7CiAgICAgICAgICAgICAgIHRlc3RQYXNzZWQoIm5vdGVHcmFpbk9u
IHRpbWluZyB0ZXN0cyBwYXNzZWQuIik7CiAgICAgICAgICAgfSBlbHNlIHsKQEAgLTE2MywxNiAr
MzUsNiBAQAogICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOwogICAgICAgfQogCi0gICAgICBmdW5j
dGlvbiBwbGF5Tm90ZSh0aW1lLCBncmFpbk9mZnNldCwgZHVyYXRpb24pIHsKLSAgICAgICAgICB2
YXIgYnVmZmVyU291cmNlID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTsKLSAgICAgICAg
ICBidWZmZXJTb3VyY2UuYnVmZmVyID0gc3F1YXJlUHVsc2VCdWZmZXI7Ci0gICAgICAgICAgYnVm
ZmVyU291cmNlLmNvbm5lY3QoY29udGV4dC5kZXN0aW5hdGlvbik7Ci0gICAgICAgICAgLy8gV2Un
cmUgb25seSB0ZXN0aW5nIHRoYXQgdGhlIHNvdXJjZSBzdGFydHMgYW5kIGVuZHMgYXQgYQotICAg
ICAgICAgIC8vIHBhcnRpY3VsYXIgdGltZS4gIFNlZSBidWcgNzcyMjUKLSAgICAgICAgICAvLyAo
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MjI1KS4KLSAgICAgICAg
ICBidWZmZXJTb3VyY2Uubm90ZUdyYWluT24odGltZSwgZ3JhaW5PZmZzZXQsIGR1cmF0aW9uKTsK
LSAgICAgIH0KLQogICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKICAgICAgICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKQEAgLTE4MywxMiArNDUsMTAgQEAKIAogICAgICAgICAgIC8v
IENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuCiAgICAgICAgICAgY29udGV4dCA9IG5ldyB3
ZWJraXRBdWRpb0NvbnRleHQoMiwgc2FtcGxlUmF0ZSAqIHJlbmRlclRpbWUsIHNhbXBsZVJhdGUp
OwotICAgICAgICAgIGNyZWF0ZVNxdWFyZVB1bHNlKGNvbnRleHQpOyAgICAKIAotICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbnVtYmVyT2ZUZXN0czsgKytpKSB7Ci0gICAgICAgICAgICAg
IHZhciB0aW1lT2Zmc2V0ID0gdGltZVN0ZXAgKiBpOwotICAgICAgICAgICAgICBwbGF5Tm90ZSh0
aW1lT2Zmc2V0LCBpICogZ3JhaW5PZmZzZXRTdGVwLCBkdXJhdGlvbik7Ci0gICAgICAgICAgfQor
ICAgICAgICAgIHNxdWFyZVB1bHNlQnVmZmVyID0gY3JlYXRlU2lnbmFsQnVmZmVyKGNvbnRleHQs
IGZ1bmN0aW9uIChrKSB7IHJldHVybiAxIH0pOyAgICAKKworICAgICAgICAgIHBsYXlBbGxHcmFp
bnMoY29udGV4dCwgc3F1YXJlUHVsc2VCdWZmZXIsIG51bWJlck9mVGVzdHMpOwogCiAgICAgICAg
ICAgY29udGV4dC5vbmNvbXBsZXRlID0gY2hlY2tSZXN1bHQ7CiAgICAgICAgICAgY29udGV4dC5z
dGFydFJlbmRlcmluZygpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3Vy
Y2VzL2F1ZGlvLXRlc3RpbmcuanMgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVk
aW8tdGVzdGluZy5qcwppbmRleCBjNDI4YWUwMTRlMGEwYTI3ZTE2NjhjZmIyZGIwOWUzZWE3ODc5
NzUzLi43Yzc2NjZjMWFkMWRjMzc4MmFiMGY3ZTJhMGFiZTk1Njk5ZGJiMjZiIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcworKysgYi9M
YXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcwpAQCAtMTI1LDMg
KzEyNSwxMSBAQCBmdW5jdGlvbiB0aW1lVG9TYW1wbGVGcmFtZSh0aW1lLCBzYW1wbGVSYXRlKSB7
CiAgICAgcmV0dXJuIE1hdGguZmxvb3IoMC41ICsgdGltZSAqIHNhbXBsZVJhdGUpOwogfQogCisv
LyBDb21wdXRlIHRoZSBudW1iZXIgb2Ygc2FtcGxlIGZyYW1lcyBjb25zdW1lZCBieSBub3RlR3Jh
aW5PbiB3aXRoCisvLyB0aGUgc3BlY2lmaWVkIHxncmFpbk9mZnNldHwsIHxkdXJhdGlvbnwsIGFu
ZCB8c2FtcGxlUmF0ZXwuCitmdW5jdGlvbiBncmFpbkxlbmd0aEluU2FtcGxlRnJhbWVzKGdyYWlu
T2Zmc2V0LCBkdXJhdGlvbiwgc2FtcGxlUmF0ZSkgeworICAgIHZhciBzdGFydEZyYW1lID0gdGlt
ZVRvU2FtcGxlRnJhbWUoZ3JhaW5PZmZzZXQsIHNhbXBsZVJhdGUpOworICAgIHZhciBlbmRGcmFt
ZSA9IHRpbWVUb1NhbXBsZUZyYW1lKGdyYWluT2Zmc2V0ICsgZHVyYXRpb24sIHNhbXBsZVJhdGUp
OworCisgICAgcmV0dXJuIGVuZEZyYW1lIC0gc3RhcnRGcmFtZTsKK30KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9ub3RlLWdyYWluLW9uLXRlc3RpbmcuanMgYi9M
YXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvbm90ZS1ncmFpbi1vbi10ZXN0aW5nLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQ1ZGQ3MmZjYWFkYjI4NDdkOWQyZTRiNThjYzFiNGMwNmJhNWNlOTkKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvbm90ZS1ncmFpbi1v
bi10ZXN0aW5nLmpzCkBAIC0wLDAgKzEsMTc5IEBACit2YXIgc2FtcGxlUmF0ZSA9IDQ0MTAwLjA7
CisKKy8vIEhSVEYgZXh0cmEgZnJhbWVzLiAgVGhpcyBpcyBhIG1hZ2ljIGNvbnN0YW50IGN1cnJl
bnRseSBpbgorLy8gQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpwcm9jZXNzIHRoYXQgYWx3YXlzIGV4
dGVuZHMgdGhlCisvLyBkdXJhdGlvbiBieSB0aGlzIG51bWJlciBvZiBzYW1wbGVzLiAgU2VlIGJ1
ZyA3NzIyNAorLy8gKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzIy
NCkuCit2YXIgZXh0cmFGcmFtZXNIUlRGID0gNTEyOworCisvLyBIb3cgbWFueSBncmFpbnMgdG8g
cGxheS4KK3ZhciBudW1iZXJPZlRlc3RzID0gMTAwOworCisvLyBEdXJhdGlvbiBvZiBlYWNoIGdy
YWluIHRvIGJlIHBsYXllZAordmFyIGR1cmF0aW9uID0gMC4wMTsKKworLy8gVGltZSBzdGVwIGJl
dHdlZW4gdGhlIHN0YXJ0IG9mIGVhY2ggZ3JhaW4uICBXZSBuZWVkIHRvIGFkZCBhIGxpdHRsZQor
Ly8gYml0IG9mIHNpbGVuY2Ugc28gd2UgY2FuIGRldGVjdCBncmFpbiBib3VuZGFyaWVzIGFuZCBh
bHNvIGFjY291bnQKKy8vIGZvciB0aGUgZXh0cmEgZnJhbWVzIGZvciBIUlRGLgordmFyIHRpbWVT
dGVwID0gZHVyYXRpb24gKyAuMDA1ICsgZXh0cmFGcmFtZXNIUlRGIC8gc2FtcGxlUmF0ZTsKKwor
Ly8gVGltZSBzdGVwIGJldHdlZW4gdGhlIHN0YXJ0IGZvciBlYWNoIGdyYWluLgordmFyIGdyYWlu
T2Zmc2V0U3RlcCA9IDAuMDAxOworCisvLyBIb3cgbG9uZyB0byByZW5kZXIgdG8gY292ZXIgYWxs
IG9mIHRoZSBncmFpbnMuCit2YXIgcmVuZGVyVGltZSA9IChudW1iZXJPZlRlc3RzICsgMSkgKiB0
aW1lU3RlcDsKKwordmFyIGNvbnRleHQ7Cit2YXIgcmVuZGVyZWREYXRhOworCisvLyBDcmVhdGUg
YSBidWZmZXIgY29udGFpbmluZyB0aGUgZGF0YSB0aGF0IHdlIHdhbnQuICBUaGUgZnVuY3Rpb24g
ZgorLy8gcmV0dXJucyB0aGUgZGVzaXJlZCB2YWx1ZSBhdCBzYW1wbGUgZnJhbWUgay4KK2Z1bmN0
aW9uIGNyZWF0ZVNpZ25hbEJ1ZmZlcihjb250ZXh0LCBmKSB7CisKKyAgICAvLyBNYWtlIHN1cmUg
dGhlIGJ1ZmZlciBoYXMgZW5vdWdoIGRhdGEgZm9yIGFsbCBvZiB0aGUgcG9zc2libGUKKyAgICAv
LyBncmFpbiBvZmZzZXRzIGFuZCBkdXJhdGlvbnMuICBOZWVkIHRvIGluY2x1ZGUgdGhlIGV4dHJh
IGZyYW1lcworICAgIC8vIGZvciBIUlRGLiAgVGhlIGFkZGl0aW9uYWwgMSBpcyBmb3IgYW55IHJv
dW5kLW9mZiBlcnJvcnMuCisgICAgdmFyIHNpZ25hbExlbmd0aCA9IE1hdGguZmxvb3IoMSArIGV4
dHJhRnJhbWVzSFJURiArIHNhbXBsZVJhdGUgKiAobnVtYmVyT2ZUZXN0cyAqIGdyYWluT2Zmc2V0
U3RlcCArIGR1cmF0aW9uKSk7CisKKyAgICB2YXIgYnVmZmVyID0gY29udGV4dC5jcmVhdGVCdWZm
ZXIoMiwgc2lnbmFsTGVuZ3RoLCBzYW1wbGVSYXRlKTsKKyAgICB2YXIgZGF0YSA9IGJ1ZmZlci5n
ZXRDaGFubmVsRGF0YSgwKTsKKworICAgIGZvciAodmFyIGsgPSAwOyBrIDwgc2lnbmFsTGVuZ3Ro
OyArK2spIHsKKyAgICAgICAgZGF0YVtrXSA9IGYoayk7CisgICAgfQorCisgICAgcmV0dXJuIGJ1
ZmZlcjsKK30KKworLy8gRnJvbSB0aGUgZGF0YSBhcnJheSwgZmluZCB0aGUgc3RhcnQgYW5kIGVu
ZCBzYW1wbGUgZnJhbWUgZm9yIGVhY2gKKy8vIGdyYWluLiAgVGhpcyBkZXBlbmRzIG9uIHRoZSBk
YXRhIGhhdmluZyAwJ3MgYmV0d2VlbiBncmFpbiwgYW5kCisvLyB0aGF0IHRoZSBncmFpbiBpcyBh
bHdheXMgc3RyaWN0bHkgbm9uLXplcm8uCitmdW5jdGlvbiBmaW5kU3RhcnRBbmRFbmRTYW1wbGVz
KGRhdGEpIHsKKyAgICB2YXIgblNhbXBsZXMgPSBkYXRhLmxlbmd0aDsKKworICAgIHZhciBzdGFy
dFRpbWUgPSBbXTsKKyAgICB2YXIgZW5kVGltZSA9IFtdOworICAgIHZhciBsb29rRm9yU3RhcnQg
PSB0cnVlOworICAgICAgCisgICAgLy8gTG9vayB0aHJvdWdoIHRoZSByZW5kZXJlZCBkYXRhIHRv
IGZpbmQgdGhlIHN0YXJ0IGFuZCBzdG9wCisgICAgLy8gdGltZXMgb2YgZWFjaCBncmFpbi4KKyAg
ICBmb3IgKHZhciBrID0gMDsgayA8IG5TYW1wbGVzOyArK2spIHsKKyAgICAgICAgaWYgKGxvb2tG
b3JTdGFydCkgeworICAgICAgICAgICAgLy8gRmluZCBhIG5vbi16ZXJvIHBvaW50IGFuZCByZWNv
cmQgdGhlIHN0YXJ0LiAgV2UncmUgbm90CisgICAgICAgICAgICAvLyBjb25jZXJuZWQgd2l0aCB0
aGUgdmFsdWUgaW4gdGhpcyB0ZXN0LCBvbmx5IHRoYXQgdGhlCisgICAgICAgICAgICAvLyBncmFp
biBzdGFydGVkIGhlcmUuCisgICAgICAgICAgICBpZiAocmVuZGVyZWREYXRhW2tdKSB7CisgICAg
ICAgICAgICAgICAgc3RhcnRUaW1lLnB1c2goayk7CisgICAgICAgICAgICAgICAgbG9va0ZvclN0
YXJ0ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvLyBGaW5kIGEgemVybyBhbmQgcmVjb3JkIHRoZSBlbmQgb2YgdGhlIGdyYWluLgorICAgICAg
ICAgICAgaWYgKCFyZW5kZXJlZERhdGFba10pIHsKKyAgICAgICAgICAgICAgICBlbmRUaW1lLnB1
c2goayk7CisgICAgICAgICAgICAgICAgbG9va0ZvclN0YXJ0ID0gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB7c3RhcnQgOiBzdGFydFRpbWUsIGVu
ZCA6IGVuZFRpbWV9OworfQorCitmdW5jdGlvbiBwbGF5R3JhaW4oY29udGV4dCwgc291cmNlLCB0
aW1lLCBvZmZzZXQsIGR1cmF0aW9uKSB7CisgICAgdmFyIGJ1ZmZlclNvdXJjZSA9IGNvbnRleHQu
Y3JlYXRlQnVmZmVyU291cmNlKCk7CisKKyAgICBidWZmZXJTb3VyY2UuYnVmZmVyID0gc291cmNl
OworICAgIGJ1ZmZlclNvdXJjZS5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pOworICAgIGJ1
ZmZlclNvdXJjZS5ub3RlR3JhaW5Pbih0aW1lLCBvZmZzZXQsIGR1cmF0aW9uKTsKK30KKworLy8g
UGxheSBvdXQgYWxsIGdyYWlucy4gIFJldHVybnMgYSBvYmplY3QgY29udGFpbmluZyB0d28gYXJy
YXlzLCBvbmUKKy8vIGZvciB0aGUgc3RhcnQgdGltZSBhbmQgb25lIGZvciB0aGUgZ3JhaW4gb2Zm
c2V0IHRpbWUuCitmdW5jdGlvbiBwbGF5QWxsR3JhaW5zKGNvbnRleHQsIHNvdXJjZSwgbnVtYmVy
T2ZOb3RlcykgeworICAgIHZhciBzdGFydFRpbWVzID0gbmV3IEFycmF5KG51bWJlck9mTm90ZXMp
OworICAgIHZhciBvZmZzZXRzID0gbmV3IEFycmF5KG51bWJlck9mTm90ZXMpOworCisgICAgZm9y
ICh2YXIgayA9IDA7IGsgPCBudW1iZXJPZk5vdGVzOyArK2spIHsKKyAgICAgICAgdmFyIHRpbWVP
ZmZzZXQgPSBrICogdGltZVN0ZXA7CisgICAgICAgIHZhciBncmFpbk9mZnNldCA9IGsgKiBncmFp
bk9mZnNldFN0ZXA7CisKKyAgICAgICAgcGxheUdyYWluKGNvbnRleHQsIHNvdXJjZSwgdGltZU9m
ZnNldCwgZ3JhaW5PZmZzZXQsIGR1cmF0aW9uKTsKKyAgICAgICAgc3RhcnRUaW1lc1trXSA9IHRp
bWVPZmZzZXQ7CisgICAgICAgIG9mZnNldHNba10gPSBncmFpbk9mZnNldDsKKyAgICB9CisKKyAg
ICByZXR1cm4geyBzdGFydFRpbWVzIDogc3RhcnRUaW1lcywgZ3JhaW5PZmZzZXRUaW1lcyA6IG9m
ZnNldHMgfTsKK30KKworLy8gVmVyaWZ5IHRoYXQgdGhlIHN0YXJ0IGFuZCBlbmQgZnJhbWVzIGZv
ciBlYWNoIGdyYWluIG1hdGNoIG91cgorLy8gZXhwZWN0ZWQgc3RhcnQgYW5kIGVuZCBmcmFtZXMu
CitmdW5jdGlvbiB2ZXJpZnlTdGFydEFuZEVuZEZyYW1lcyhzdGFydEVuZEZyYW1lcykgeworICAg
IHZhciBzdGFydEZyYW1lcyA9IHN0YXJ0RW5kRnJhbWVzLnN0YXJ0OworICAgIHZhciBlbmRGcmFt
ZXMgPSBzdGFydEVuZEZyYW1lcy5lbmQ7CisgICAgICAKKyAgICB2YXIgc3VjY2VzcyA9IHRydWU7
CisKKyAgICAvLyBDb3VudCBvZiBob3cgbWFueSBncmFpbnMgc3RhcnRlZCBhdCB0aGUgaW5jb3Jy
ZWN0IHRpbWUuCisgICAgdmFyIGVycm9yQ291bnRTdGFydCA9IDA7CisKKyAgICAvLyBDb3VudCBv
ZiBob3cgbWFueSBncmFpbnMgZW5kZWQgYXQgdGhlIGluY29ycmVjdCB0aW1lLgorICAgIHZhciBl
cnJvckNvdW50RW5kID0gMDsKKworICAgIGlmIChzdGFydEZyYW1lcy5sZW5ndGggIT0gZW5kRnJh
bWVzLmxlbmd0aCkgeworICAgICAgICB0ZXN0RmFpbGVkKCJDb3VsZCBub3QgZmluZCB0aGUgYmVn
aW5uaW5nIG9yIGVuZCBvZiBhIGdyYWluLiIpOworICAgICAgICBzdWNjZXNzID0gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKHN0YXJ0RnJhbWVzLmxlbmd0aCA9PSBudW1iZXJPZlRlc3RzICYmIGVu
ZEZyYW1lcy5sZW5ndGggPT0gbnVtYmVyT2ZUZXN0cykgeworICAgICAgICB0ZXN0UGFzc2VkKCJG
b3VuZCBhbGwgIiArIG51bWJlck9mVGVzdHMgKyAiIGdyYWlucy4iKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICB0ZXN0RmFpbGVkKCJEaWQgbm90IGZpbmQgYWxsICIgKyBudW1iZXJPZlRlc3RzICsg
IiBncmFpbnMuIik7CisgICAgfQorCisgICAgLy8gRXhhbWluZSB0aGUgc3RhcnQgYW5kIHN0b3Ag
dGltZXMgdG8gc2VlIGlmIHRoZXkgbWF0Y2ggb3VyCisgICAgLy8gZXhwZWN0YXRpb25zLgorICAg
IGZvciAodmFyIGsgPSAwOyBrIDwgc3RhcnRGcmFtZXMubGVuZ3RoOyArK2spIHsKKyAgICAgICAg
dmFyIGV4cGVjdGVkU3RhcnQgPSB0aW1lVG9TYW1wbGVGcmFtZShrICogdGltZVN0ZXAsIHNhbXBs
ZVJhdGUpOworICAgICAgICAvLyBUaGUgZW5kIHBvaW50IGlzIHRoZSBkdXJhdGlvbiwgcGx1cyB0
aGUgZXh0cmEgZnJhbWVzCisgICAgICAgIC8vIGZvciBIUlRGLgorICAgICAgICB2YXIgZXhwZWN0
ZWRFbmQgPSBleHRyYUZyYW1lc0hSVEYgKyBleHBlY3RlZFN0YXJ0ICsgZ3JhaW5MZW5ndGhJblNh
bXBsZUZyYW1lcyhrICogZ3JhaW5PZmZzZXRTdGVwLCBkdXJhdGlvbiwgc2FtcGxlUmF0ZSk7CisK
KyAgICAgICAgaWYgKHN0YXJ0RnJhbWVzW2tdICE9IGV4cGVjdGVkU3RhcnQpIHsKKyAgICAgICAg
ICAgIHRlc3RGYWlsZWQoIlB1bHNlICIgKyBrICsgIiBzdGFydGVkIGF0ICIgKyBzdGFydEZyYW1l
c1trXSArICIgYnV0IGV4cGVjdGVkIGF0ICIgKyBleHBlY3RlZFN0YXJ0KTsKKyAgICAgICAgICAg
ICsrZXJyb3JDb3VudFN0YXJ0OworICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGVuZEZyYW1lc1trXSAhPSBleHBlY3RlZEVuZCkgeworICAgICAg
ICAgICAgdGVzdEZhaWxlZCgiUHVsc2UgIiArIGsgKyAiIGVuZGVkIGF0ICIgKyBlbmRGcmFtZXNb
a10gKyAiIGJ1dCBleHBlY3RlZCBhdCAiICsgZXhwZWN0ZWRFbmQpOworICAgICAgICAgICAgKytl
cnJvckNvdW50RW5kOworICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gQ2hlY2sgdGhhdCBhbGwgdGhlIGdyYWlucyBzdGFydGVkIG9yIGVuZGVk
IGF0IHRoZSBjb3JyZWN0IHRpbWUuCisgICAgaWYgKCFlcnJvckNvdW50U3RhcnQpIHsKKyAgICAg
ICAgaWYgKHN0YXJ0RnJhbWVzLmxlbmd0aCA9PSBudW1iZXJPZlRlc3RzKSB7CisgICAgICAgICAg
ICB0ZXN0UGFzc2VkKCJBbGwgIiArIG51bWJlck9mVGVzdHMgKyAiIGdyYWlucyBzdGFydGVkIGF0
IHRoZSBjb3JyZWN0IHRpbWUuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXN0
RmFpbGVkKCJBbGwgZ3JhaW5zIHN0YXJ0ZWQgYXQgdGhlIGNvcnJlY3QgdGltZSwgYnV0IG9ubHkg
IiArIHN0YXJ0RnJhbWVzLmxlbmd0aCArICIgZ3JhaW5zIGZvdW5kLiIpOworICAgICAgICAgICAg
c3VjY2VzcyA9IGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGVzdEZh
aWxlZChlcnJvckNvdW50U3RhcnQgKyAiIG91dCBvZiAiICsgbnVtYmVyT2ZUZXN0cyArICIgZ3Jh
aW5zIHN0YXJ0ZWQgYXQgdGhlIHdyb25nIHRpbWUuIik7CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAoIWVycm9yQ291bnRFbmQpIHsKKyAgICAgICAgaWYgKGVuZEZy
YW1lcy5sZW5ndGggPT0gbnVtYmVyT2ZUZXN0cykgeworICAgICAgICAgICAgdGVzdFBhc3NlZCgi
QWxsICIgKyBudW1iZXJPZlRlc3RzICsgIiBncmFpbnMgZW5kZWQgYXQgdGhlIGNvcnJlY3QgdGlt
ZS4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkFsbCBncmFp
bnMgZW5kZWQgYXQgdGhlIGNvcnJlY3QgdGltZSwgYnV0IG9ubHkgIiArIGVuZEZyYW1lcy5sZW5n
dGggKyAiIGdyYWlucyBmb3VuZC4iKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQoZXJyb3JDb3VudEVuZCAr
ICIgb3V0IG9mICIgKyBudW1iZXJPZlRlc3RzICsgIiBncmFpbnMgZW5kZWQgYXQgdGhlIHdyb25n
IHRpbWUuIik7CisgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
c3VjY2VzczsKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>