<?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>74273</bug_id>
          
          <creation_ts>2011-12-12 01:56:49 -0800</creation_ts>
          <short_desc>Constant values to set &quot;distanceModel&quot; are undefined</short_desc>
          <delta_ts>2012-02-02 12:47:05 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>76659</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter>davidgaleano</reporter>
          <assigned_to name="Raymond Toy">rtoy</assigned_to>
          <cc>abarth</cc>
    
    <cc>crogers</cc>
    
    <cc>dglazkov</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>519071</commentid>
    <comment_count>0</comment_count>
    <who name="">davidgaleano</who>
    <bug_when>2011-12-12 01:56:49 -0800</bug_when>
    <thetext>The constants required to set an specific distance model on an AudioPannerNode are not defined, there is a comment &quot;TODO: add constants&quot; on the specification document:

    https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#attributes-AudioPannerNode

Looking at the objects created at runtime there are no properties defined that could be used to set a required model. At the moment you have to look at the source code to figure out what values set which model.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519613</commentid>
    <comment_count>1</comment_count>
      <attachid>118890</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-12-12 15:50:17 -0800</bug_when>
    <thetext>Created attachment 118890
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519640</commentid>
    <comment_count>2</comment_count>
      <attachid>118890</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-12-12 16:08:57 -0800</bug_when>
    <thetext>Comment on attachment 118890
Patch

This patch requires tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519674</commentid>
    <comment_count>3</comment_count>
      <attachid>118890</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-12-12 16:43:41 -0800</bug_when>
    <thetext>Comment on attachment 118890
Patch

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

&gt; Source/WebCore/webaudio/AudioPannerNode.idl:39
&gt; +        const unsigned short EXPONENTIALDISTANCE = 2;

Can we add an &quot;_&quot; before &quot;DISTANCE&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520177</commentid>
    <comment_count>4</comment_count>
      <attachid>119037</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-12-13 10:46:52 -0800</bug_when>
    <thetext>Created attachment 119037
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520178</commentid>
    <comment_count>5</comment_count>
      <attachid>118890</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-12-13 10:48:03 -0800</bug_when>
    <thetext>Comment on attachment 118890
Patch

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

&gt;&gt; Source/WebCore/webaudio/AudioPannerNode.idl:39
&gt;&gt; +        const unsigned short EXPONENTIALDISTANCE = 2;
&gt; 
&gt; Can we add an &quot;_&quot; before &quot;DISTANCE&quot;?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520195</commentid>
    <comment_count>6</comment_count>
      <attachid>119037</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-13 11:07:28 -0800</bug_when>
    <thetext>Comment on attachment 119037
Patch

Attachment 119037 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10850436</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520263</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-12-13 11:57:46 -0800</bug_when>
    <thetext>Looks good to me.

I just checked the OpenAL names and it looks like we&apos;re somewhat consistent:


#define AL_DISTANCE_MODEL                         0xD000
#define AL_INVERSE_DISTANCE                       0xD001
#define AL_INVERSE_DISTANCE_CLAMPED               0xD002
#define AL_LINEAR_DISTANCE                        0xD003
#define AL_LINEAR_DISTANCE_CLAMPED                0xD004
#define AL_EXPONENT_DISTANCE                      0xD005
#define AL_EXPONENT_DISTANCE_CLAMPED              0xD006

By the way, it looks like the &quot;clamped&quot; versions need to be handled by a separate bool attribute called &quot;distanceClamped&quot; so we wouldn&apos;t define specific constants for them...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520264</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-12-13 11:58:28 -0800</bug_when>
    <thetext>Adam is right that we need tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522847</commentid>
    <comment_count>9</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-12-16 11:02:19 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Adam is right that we need tests

What should the tests test?  That the constants are correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522885</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-12-16 11:52:36 -0800</bug_when>
    <thetext>No, I think we need proper layout tests that each distance model is calculating the expected attenuation now that the distance models are being formally exposed as an API.  I can explain to you offline how we can effectively do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522937</commentid>
    <comment_count>11</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-12-16 12:37:18 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; No, I think we need proper layout tests that each distance model is calculating the expected attenuation now that the distance models are being formally exposed as an API.  I can explain to you offline how we can effectively do this.

The behavior of the existing code is unchanged by this patch, so I think that&apos;s outside the scope of this particular patch.  I do agree that tests need to be written, as a different bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522979</commentid>
    <comment_count>12</comment_count>
      <attachid>119037</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-12-16 13:21:33 -0800</bug_when>
    <thetext>Comment on attachment 119037
Patch

At a minimum, you need to write tests that check that these constants are exposed with the correct values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>522980</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-12-16 13:22:29 -0800</bug_when>
    <thetext>As a general rule, WebKit does not accept patches that change web-visible behavior without tests demonstrating that change.  Specifically, this patch makes some constants visible to JavaScript, so we need a test that demonstrates that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532516</commentid>
    <comment_count>14</comment_count>
      <attachid>121724</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-09 14:03:01 -0800</bug_when>
    <thetext>Created attachment 121724
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532518</commentid>
    <comment_count>15</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-09 14:03:59 -0800</bug_when>
    <thetext>Tests added, but the tests can&apos;t pass until bug 75767 is landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532661</commentid>
    <comment_count>16</comment_count>
      <attachid>121724</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-09 16:53:16 -0800</bug_when>
    <thetext>Comment on attachment 121724
Patch

Attachment 121724 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11113642

New failing tests:
webaudio/distance-inverse.html
webaudio/distance-linear.html
webaudio/distance-exponential.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532722</commentid>
    <comment_count>17</comment_count>
      <attachid>121724</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-09 17:40:06 -0800</bug_when>
    <thetext>Comment on attachment 121724
Patch

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

Nice tests!  Just a couple of comments to simplify + nits

&gt; Source/WebCore/webaudio/AudioPannerNode.idl:39
&gt; +        const unsigned short EXPONENTIAL_DISTANCE = 2;

We need a layout test specifically to test the &quot;distance-constants.html&quot; to test that the constant names match the expected number.

Something like:

// test that ... panner.LINEAR_DISTANCE == 0
// test that ... panner.INVERSE_DISTANCE == 1
// test that ... panner.EXPONENTIAL_DISTANCE == 2

&gt; LayoutTests/webaudio/distance-exponential.html:33
&gt; +      var time;

Lines 16:33 appear to be duplicated in all three .html test files.  Can we move these lines to the .js file as a simplification?

&gt; LayoutTests/webaudio/distance-exponential.html:53
&gt; +          context.oncomplete = checkDistanceResult(tempPanner.EXPONENTIAL_DISTANCE, threshold, false);

Indentation seems off here.

&gt; LayoutTests/webaudio/distance-exponential.html:55
&gt; +      }

Lines 43:54 appear to be duplicated in all three .html test *except* for the distance model constant.  This could be made a function in the .js file which takes the specific constant to test.
This will simplify the .html files quite a bit.

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:21
&gt; +  var gain = (1 - rolloff*(distance - panner.refDistance)/(panner.maxDistance - panner.refDistance));

WebKit style nit: spacing between * and / operators here and in similar places</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533129</commentid>
    <comment_count>18</comment_count>
      <attachid>121724</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-10 09:13:52 -0800</bug_when>
    <thetext>Comment on attachment 121724
Patch

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

&gt;&gt; Source/WebCore/webaudio/AudioPannerNode.idl:39
&gt;&gt; +        const unsigned short EXPONENTIAL_DISTANCE = 2;
&gt; 
&gt; We need a layout test specifically to test the &quot;distance-constants.html&quot; to test that the constant names match the expected number.
&gt; 
&gt; Something like:
&gt; 
&gt; // test that ... panner.LINEAR_DISTANCE == 0
&gt; // test that ... panner.INVERSE_DISTANCE == 1
&gt; // test that ... panner.EXPONENTIAL_DISTANCE == 2

These values are indirectly tested because each tests prints out the model constant as a number which is compared against the expected result.

Do you still want a separate test for that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533180</commentid>
    <comment_count>19</comment_count>
      <attachid>121867</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-10 10:38:43 -0800</bug_when>
    <thetext>Created attachment 121867
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533183</commentid>
    <comment_count>20</comment_count>
      <attachid>121724</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-10 10:41:04 -0800</bug_when>
    <thetext>Comment on attachment 121724
Patch

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

&gt;&gt;&gt; Source/WebCore/webaudio/AudioPannerNode.idl:39
&gt;&gt;&gt; +        const unsigned short EXPONENTIAL_DISTANCE = 2;
&gt;&gt; 
&gt;&gt; We need a layout test specifically to test the &quot;distance-constants.html&quot; to test that the constant names match the expected number.
&gt;&gt; 
&gt;&gt; Something like:
&gt;&gt; 
&gt;&gt; // test that ... panner.LINEAR_DISTANCE == 0
&gt;&gt; // test that ... panner.INVERSE_DISTANCE == 1
&gt;&gt; // test that ... panner.EXPONENTIAL_DISTANCE == 2
&gt; 
&gt; These values are indirectly tested because each tests prints out the model constant as a number which is compared against the expected result.
&gt; 
&gt; Do you still want a separate test for that?

Latest patch tests each constant now, instead of a separate test.

&gt;&gt; LayoutTests/webaudio/distance-exponential.html:33
&gt;&gt; +      var time;
&gt; 
&gt; Lines 16:33 appear to be duplicated in all three .html test files.  Can we move these lines to the .js file as a simplification?

Done.

&gt;&gt; LayoutTests/webaudio/distance-exponential.html:53
&gt;&gt; +          context.oncomplete = checkDistanceResult(tempPanner.EXPONENTIAL_DISTANCE, threshold, false);
&gt; 
&gt; Indentation seems off here.

Removed inadvertent tabs.

&gt;&gt; LayoutTests/webaudio/distance-exponential.html:55
&gt;&gt; +      }
&gt; 
&gt; Lines 43:54 appear to be duplicated in all three .html test *except* for the distance model constant.  This could be made a function in the .js file which takes the specific constant to test.
&gt; This will simplify the .html files quite a bit.

Done.

&gt;&gt; LayoutTests/webaudio/resources/distance-model-testing.js:21
&gt;&gt; +  var gain = (1 - rolloff*(distance - panner.refDistance)/(panner.maxDistance - panner.refDistance));
&gt; 
&gt; WebKit style nit: spacing between * and / operators here and in similar places

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533231</commentid>
    <comment_count>21</comment_count>
      <attachid>121867</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-10 11:28:11 -0800</bug_when>
    <thetext>Comment on attachment 121867
Patch

Attachment 121867 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11198136

New failing tests:
webaudio/distance-inverse.html
webaudio/distance-linear.html
webaudio/distance-exponential.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534226</commentid>
    <comment_count>22</comment_count>
      <attachid>122089</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-11 13:49:48 -0800</bug_when>
    <thetext>Created attachment 122089
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534227</commentid>
    <comment_count>23</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-11 13:51:14 -0800</bug_when>
    <thetext>Minor update to include audio-testing.js and to fix the expected results to include a line about having the right value for the constants.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534285</commentid>
    <comment_count>24</comment_count>
      <attachid>122089</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-11 14:49:57 -0800</bug_when>
    <thetext>Comment on attachment 122089
Patch

Attachment 122089 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11212172

New failing tests:
webaudio/distance-inverse.html
webaudio/distance-linear.html
webaudio/distance-exponential.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535004</commentid>
    <comment_count>25</comment_count>
      <attachid>122089</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-12 11:31:35 -0800</bug_when>
    <thetext>Comment on attachment 122089
Patch

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

&gt; LayoutTests/webaudio/distance-exponential.html:28
&gt; +          // Threshold experimentally determined.

Can you use a more descriptive variable name and comment than simply threshold.  What type of value is being compared, etc...

&gt; LayoutTests/webaudio/distance-inverse.html:29
&gt; +          var threshold = 1.3e-7;

Now that I look at this, let&apos;s just settle on a single threshold value for all three tests (I guess the largest of the values).  And then get rid of this code in all the .html files and remove the &quot;threshold&quot; parameter
to createTestAndRun()

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:3
&gt; +var renderLengthSeconds = 8;

Why do we need to render 8 seconds?  That seems like a really long time and wasteful.  For the convolution test, it makes more sense, but this could be fractions of a second, test could complete more quickly, use less memory, etc.

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:5
&gt; +var pulseLengthFrames = pulseLengthSeconds * sampleRate;

lines 4:5 look like they can be removed

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:21
&gt; +function createImpulseBuffer(context, sampleFrameLength) {

Seems like this function would be nice to put in audio-testing.js since it seems to be useful for several different tests.

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:35
&gt; +// spec, not the code.

Instead, can we say that the Web Audio spec follows the OpenAL formulas and provide a link?

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:54
&gt; +function inverseDistance(panner, x, y, z) {

nit: the order these functions are defined is different than the distanceModelFunction array below -- slightly confusing

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:72
&gt; +    impulse = createImpulseBuffer(context, pulseLengthFrames);

Why are we creating a separate impulse for each bufferSource?  Please create just one above the loop

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:88
&gt; +  for (var k = 0; k &lt; nodeCount; ++k) {

Please consolidate code from loop on line 70 into this loop.  There&apos;s no need to have two separate loops.  Then your comments 76:85 can move down to just above 89

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:93
&gt; +    // distance.

strange line wrapping - nearby line 94 is long enough to not wrap this comment

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:100
&gt; +  for (var k = 0; k &lt; nodeCount; ++k) {

Once again following my comment on line 88, please consolidate this third loop into the above loop

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:111
&gt; +    bufferSource[k].noteOn(time[k]);

Please just consolidate startSources() function into the above createGraph() function, and you can use the same loop above.

This will read more smoothly having a single loop will all of the graph connection, and the noteOn() one line after the next instead of split out into separate functions and loops

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:120
&gt; +  startSources();

As per comment above, please just consolidate startSources() into the createGraph() function

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:122
&gt; +  context.oncomplete = checkDistanceResult(distanceModel, expectedModel, threshold, false);

Please remove final argument (false) since we can simply comment out lines for the bug below

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:132
&gt; +function checkDistanceResult(model, expectedModel, threshold, debug) {

Please remove &quot;debug&quot; param

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:142
&gt; +      testPassed(&quot;Distance model value matched expected value.&quot;);

Please update text for failure case -- it&apos;s the same text as the passed case

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:151
&gt; +    // (For debugging.)

remove (for debugging) comment

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:154
&gt; +    // expected location.  (For debugging.)

remove (for debugging) comment

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:158
&gt; +    // so we can find where our impulses are.

&quot;impulses&quot; -&gt; &quot;distance-attenuated impulses&quot;

I&apos;d add a further comment here saying that we then check each of these values with the expected distance attenuation for that distance

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:163
&gt; +        expected *= equalPowerGain();

Please add comment explaining that this compensates for the &quot;center-panning&quot; value using the EQUALPOWERPANNING model

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:165
&gt; +        var error = Math.abs(renderedData[k] - expected)/Math.abs(expected);

nit: spacing with /

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:168
&gt; +        }

Let&apos;s get rid of this debug code for code we actually commit

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:170
&gt; +        if (k != Math.round(sampleRate * time[impulseCount])) {

I&apos;d add a comment before line 170, saying that we keep track of the exact sample-frame offsets compared with their expected locations

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:179
&gt; +      testPassed(&quot;Number of nodes is correct.&quot;);

Can we be a bit more specific what this test is, something like:

&apos;Number of impulses found matches number of panner nodes&quot;

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:196
&gt; +    // FIXME:  File a bug about this.

We actually have a specific bug for this now, so we can provide the exact link

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:198
&gt; +      console.log(timeErrors.length + &quot; timing errors found&quot;);

Please convert from console.log() format to testPassed/testFailed format, get rid of the &quot;debug&quot; parameter to this function and simply comment out these specific tests

Then once the bug is fixed, these lines can simply be uncommented and the expected results .txt files updated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535123</commentid>
    <comment_count>26</comment_count>
      <attachid>122089</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-12 13:44:21 -0800</bug_when>
    <thetext>Comment on attachment 122089
Patch

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

&gt;&gt; LayoutTests/webaudio/distance-inverse.html:29
&gt;&gt; +          var threshold = 1.3e-7;
&gt; 
&gt; Now that I look at this, let&apos;s just settle on a single threshold value for all three tests (I guess the largest of the values).  And then get rid of this code in all the .html files and remove the &quot;threshold&quot; parameter
&gt; to createTestAndRun()

They vary a bit (from 1.3e-7 to 2.3e-6).  Do you want to use just one?

&gt;&gt; LayoutTests/webaudio/resources/distance-model-testing.js:72
&gt;&gt; +    impulse = createImpulseBuffer(context, pulseLengthFrames);
&gt; 
&gt; Why are we creating a separate impulse for each bufferSource?  Please create just one above the loop

Is it possible to turn a single bufferSource on at multiple times?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535143</commentid>
    <comment_count>27</comment_count>
      <attachid>122089</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-12 14:08:47 -0800</bug_when>
    <thetext>Comment on attachment 122089
Patch

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

&gt;&gt;&gt; LayoutTests/webaudio/resources/distance-model-testing.js:72
&gt;&gt;&gt; +    impulse = createImpulseBuffer(context, pulseLengthFrames);
&gt;&gt; 
&gt;&gt; Why are we creating a separate impulse for each bufferSource?  Please create just one above the loop
&gt; 
&gt; Is it possible to turn a single bufferSource on at multiple times?

Sorry, I misread your comment.  Only one impulse is needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>535175</commentid>
    <comment_count>28</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-12 14:35:42 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 122089 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122089&amp;action=review
&gt; 
&gt; &gt;&gt; LayoutTests/webaudio/distance-inverse.html:29
&gt; &gt;&gt; +          var threshold = 1.3e-7;
&gt; &gt; 
&gt; &gt; Now that I look at this, let&apos;s just settle on a single threshold value for all three tests (I guess the largest of the values).  And then get rid of this code in all the .html files and remove the &quot;threshold&quot; parameter
&gt; &gt; to createTestAndRun()
&gt; 
&gt; They vary a bit (from 1.3e-7 to 2.3e-6).  Do you want to use just one?

Yes, I was hoping you could pick a threshold which is the least stringent of them all and go with that, and then just define that threshold inside the .js file instead of separately for each .html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536021</commentid>
    <comment_count>29</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-13 15:10:34 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #26)
&gt; &gt; (From update of attachment 122089 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122089&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt; LayoutTests/webaudio/distance-inverse.html:29
&gt; &gt; &gt;&gt; +          var threshold = 1.3e-7;
&gt; &gt; &gt; 
&gt; &gt; &gt; Now that I look at this, let&apos;s just settle on a single threshold value for all three tests (I guess the largest of the values).  And then get rid of this code in all the .html files and remove the &quot;threshold&quot; parameter
&gt; &gt; &gt; to createTestAndRun()
&gt; &gt; 
&gt; &gt; They vary a bit (from 1.3e-7 to 2.3e-6).  Do you want to use just one?
&gt; 
&gt; Yes, I was hoping you could pick a threshold which is the least stringent of them all and go with that, and then just define that threshold inside the .js file instead of separately for each .html

I&apos;ll update this once the bug 75767 has landed due to the change in audio-testing.js.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537371</commentid>
    <comment_count>30</comment_count>
      <attachid>122818</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-17 14:57:38 -0800</bug_when>
    <thetext>Created attachment 122818
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537376</commentid>
    <comment_count>31</comment_count>
      <attachid>122089</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-17 15:07:09 -0800</bug_when>
    <thetext>Comment on attachment 122089
Patch

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

&gt;&gt; LayoutTests/webaudio/distance-exponential.html:28
&gt;&gt; +          // Threshold experimentally determined.
&gt; 
&gt; Can you use a more descriptive variable name and comment than simply threshold.  What type of value is being compared, etc...

Done.

&gt;&gt;&gt;&gt;&gt; LayoutTests/webaudio/distance-inverse.html:29
&gt;&gt;&gt;&gt;&gt; +          var threshold = 1.3e-7;
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Now that I look at this, let&apos;s just settle on a single threshold value for all three tests (I guess the largest of the values).  And then get rid of this code in all the .html files and remove the &quot;threshold&quot; parameter
&gt;&gt;&gt;&gt; to createTestAndRun()
&gt;&gt;&gt; 
&gt;&gt;&gt; They vary a bit (from 1.3e-7 to 2.3e-6).  Do you want to use just one?
&gt;&gt; 
&gt;&gt; Yes, I was hoping you could pick a threshold which is the least stringent of them all and go with that, and then just define that threshold inside the .js file instead of separately for each .html
&gt; 
&gt; I&apos;ll update this once the bug 75767 has landed due to the change in audio-testing.js.

Done.

&gt;&gt; LayoutTests/webaudio/resources/distance-model-testing.js:3
&gt;&gt; +var renderLengthSeconds = 8;
&gt; 
&gt; Why do we need to render 8 seconds?  That seems like a really long time and wasteful.  For the convolution test, it makes more sense, but this could be fractions of a second, test could complete more quickly, use less memory, etc.

Too much copying and pasting from the convolution test.  The time is much smaller now.

&gt;&gt; LayoutTests/webaudio/resources/distance-model-testing.js:5
&gt;&gt; +var pulseLengthFrames = pulseLengthSeconds * sampleRate;
&gt; 
&gt; lines 4:5 look like they can be removed

Line 4 deleted, but 5 is used to set the length of the impulse.

&gt;&gt; LayoutTests/webaudio/resources/distance-model-testing.js:21
&gt;&gt; +function createImpulseBuffer(context, sampleFrameLength) {
&gt; 
&gt; Seems like this function would be nice to put in audio-testing.js since it seems to be useful for several different tests.

Already done in the equalpower panner test.

&gt;&gt; LayoutTests/webaudio/resources/distance-model-testing.js:35
&gt;&gt; +// spec, not the code.
&gt; 
&gt; Instead, can we say that the Web Audio spec follows the OpenAL formulas and provide a link?

Done.

&gt;&gt; LayoutTests/webaudio/resources/distance-model-testing.js:54
&gt;&gt; +function inverseDistance(panner, x, y, z) {
&gt; 
&gt; nit: the order these functions are defined is different than the distanceModelFunction array below -- slightly confusing

That was the order of the implementation of the tests.  Order is changed now.

&gt;&gt; LayoutTests/webaudio/resources/distance-model-testing.js:88
&gt;&gt; +  for (var k = 0; k &lt; nodeCount; ++k) {
&gt; 
&gt; Please consolidate code from loop on line 70 into this loop.  There&apos;s no need to have two separate loops.  Then your comments 76:85 can move down to just above 89

Done.

&gt;&gt; LayoutTests/webaudio/resources/distance-model-testing.js:93
&gt;&gt; +    // distance.
&gt; 
&gt; strange line wrapping - nearby line 94 is long enough to not wrap this comment

Fixed.

&gt;&gt; LayoutTests/webaudio/resources/distance-model-testing.js:100
&gt;&gt; +  for (var k = 0; k &lt; nodeCount; ++k) {
&gt; 
&gt; Once again following my comment on line 88, please consolidate this third loop into the above loop

Done.

&gt;&gt; LayoutTests/webaudio/resources/distance-model-testing.js:111
&gt;&gt; +    bufferSource[k].noteOn(time[k]);
&gt; 
&gt; Please just consolidate startSources() function into the above createGraph() function, and you can use the same loop above.
&gt; 
&gt; This will read more smoothly having a single loop will all of the graph connection, and the noteOn() one line after the next instead of split out into separate functions and loops

Done

&gt;&gt; LayoutTests/webaudio/resources/distance-model-testing.js:120
&gt;&gt; +  startSources();
&gt; 
&gt; As per comment above, please just consolidate startSources() into the createGraph() function

Done

&gt;&gt; LayoutTests/webaudio/resources/distance-model-testing.js:132
&gt;&gt; +function checkDistanceResult(model, expectedModel, threshold, debug) {
&gt; 
&gt; Please remove &quot;debug&quot; param

Done

&gt;&gt; LayoutTests/webaudio/resources/distance-model-testing.js:142
&gt;&gt; +      testPassed(&quot;Distance model value matched expected value.&quot;);
&gt; 
&gt; Please update text for failure case -- it&apos;s the same text as the passed case

Done.

&gt;&gt; LayoutTests/webaudio/resources/distance-model-testing.js:154
&gt;&gt; +    // expected location.  (For debugging.)
&gt; 
&gt; remove (for debugging) comment

Done.

&gt;&gt; LayoutTests/webaudio/resources/distance-model-testing.js:163
&gt;&gt; +        expected *= equalPowerGain();
&gt; 
&gt; Please add comment explaining that this compensates for the &quot;center-panning&quot; value using the EQUALPOWERPANNING model

Done.

&gt;&gt; LayoutTests/webaudio/resources/distance-model-testing.js:165
&gt;&gt; +        var error = Math.abs(renderedData[k] - expected)/Math.abs(expected);
&gt; 
&gt; nit: spacing with /

Fixed.

&gt;&gt; LayoutTests/webaudio/resources/distance-model-testing.js:168
&gt;&gt; +        }
&gt; 
&gt; Let&apos;s get rid of this debug code for code we actually commit

Removed.

&gt;&gt; LayoutTests/webaudio/resources/distance-model-testing.js:179
&gt;&gt; +      testPassed(&quot;Number of nodes is correct.&quot;);
&gt; 
&gt; Can we be a bit more specific what this test is, something like:
&gt; 
&gt; &apos;Number of impulses found matches number of panner nodes&quot;

Done.

&gt;&gt; LayoutTests/webaudio/resources/distance-model-testing.js:196
&gt;&gt; +    // FIXME:  File a bug about this.
&gt; 
&gt; We actually have a specific bug for this now, so we can provide the exact link

The noteOn bug has been commited so this comment and the following code has been updated appropriately.

&gt;&gt; LayoutTests/webaudio/resources/distance-model-testing.js:198
&gt;&gt; +      console.log(timeErrors.length + &quot; timing errors found&quot;);
&gt; 
&gt; Please convert from console.log() format to testPassed/testFailed format, get rid of the &quot;debug&quot; parameter to this function and simply comment out these specific tests
&gt; 
&gt; Then once the bug is fixed, these lines can simply be uncommented and the expected results .txt files updated

Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537412</commentid>
    <comment_count>32</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-17 15:54:25 -0800</bug_when>
    <thetext>Looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537563</commentid>
    <comment_count>33</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-17 19:13:44 -0800</bug_when>
    <thetext>(In reply to comment #32)
&gt; Looks good to me.

Unfortunately, the tests don&apos;t pass on Windows.  I have no idea why, but the expected values are way off.  but we know the panner is working because the panner demos sound just fine.  Yuck.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540604</commentid>
    <comment_count>34</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-23 09:23:37 -0800</bug_when>
    <thetext>Wait for bug 76659 to land before continuing with this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545527</commentid>
    <comment_count>35</comment_count>
      <attachid>121724</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-30 15:59:16 -0800</bug_when>
    <thetext>Comment on attachment 121724
Patch

Cleared review? from obsolete attachment 121724 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545529</commentid>
    <comment_count>36</comment_count>
      <attachid>122089</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-30 16:00:31 -0800</bug_when>
    <thetext>Comment on attachment 122089
Patch

Cleared review? from obsolete attachment 122089 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546169</commentid>
    <comment_count>37</comment_count>
      <attachid>124760</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-31 09:41:09 -0800</bug_when>
    <thetext>Created attachment 124760
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546171</commentid>
    <comment_count>38</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-31 09:43:10 -0800</bug_when>
    <thetext>Now that the fix for bug 76659 has landed, this test has been updated to use the new timeToSampleFrame function to get the correct expected sample frame for each impulse.   Manually ran tests on OSX and Windows, where they pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546172</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 09:44:38 -0800</bug_when>
    <thetext>Attachment 124760 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 9

Updating OpenSource
From git://git.webkit.org/WebKit
   a72c8a9..11be23e  master     -&gt; origin/master
Partial-rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc ...
Currently at 106364 = a72c8a9b2ed7c202860de7e4733e96d7f60cdc14
r106366 = 11be23e25c7011a2675e260f91a1b3cbfa7052f9
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Applying: Fix compilation errors on build-webkit --debug --no-workers on mac.
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging LayoutTests/ChangeLog
CONFLICT (content): Merge conflict in LayoutTests/ChangeLog
Auto-merging LayoutTests/platform/qt/Skipped
CONFLICT (content): Merge conflict in LayoutTests/platform/qt/Skipped
Auto-merging Source/WebCore/ChangeLog
CONFLICT (content): Merge conflict in Source/WebCore/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 Fix compilation errors on build-webkit --debug --no-workers on mac.

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546178</commentid>
    <comment_count>40</comment_count>
      <attachid>124763</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-31 09:54:30 -0800</bug_when>
    <thetext>Created attachment 124763
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546182</commentid>
    <comment_count>41</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 09:56:40 -0800</bug_when>
    <thetext>Attachment 124763 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 9

Updating OpenSource
First, rewinding head to replay your work on top of it...
Applying: Fix compilation errors on build-webkit --debug --no-workers on mac.
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging LayoutTests/ChangeLog
CONFLICT (content): Merge conflict in LayoutTests/ChangeLog
Auto-merging LayoutTests/platform/qt/Skipped
CONFLICT (content): Merge conflict in LayoutTests/platform/qt/Skipped
Auto-merging Source/WebCore/ChangeLog
CONFLICT (content): Merge conflict in Source/WebCore/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 Fix compilation errors on build-webkit --debug --no-workers on mac.

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546225</commentid>
    <comment_count>42</comment_count>
      <attachid>124774</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-31 10:52:23 -0800</bug_when>
    <thetext>Created attachment 124774
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546229</commentid>
    <comment_count>43</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 10:54:54 -0800</bug_when>
    <thetext>Attachment 124774 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 9

Updating OpenSource
First, rewinding head to replay your work on top of it...
Applying: Fix compilation errors on build-webkit --debug --no-workers on mac.
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging LayoutTests/ChangeLog
CONFLICT (content): Merge conflict in LayoutTests/ChangeLog
Auto-merging LayoutTests/platform/qt/Skipped
CONFLICT (content): Merge conflict in LayoutTests/platform/qt/Skipped
Auto-merging Source/WebCore/ChangeLog
CONFLICT (content): Merge conflict in Source/WebCore/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 Fix compilation errors on build-webkit --debug --no-workers on mac.

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546271</commentid>
    <comment_count>44</comment_count>
      <attachid>124778</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-31 11:14:51 -0800</bug_when>
    <thetext>Created attachment 124778
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546277</commentid>
    <comment_count>45</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-31 11:18:34 -0800</bug_when>
    <thetext>Attachment 124778 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/update-webkit&apos;]&quot; exit_code: 9

Updating OpenSource
First, rewinding head to replay your work on top of it...
Applying: Fix compilation errors on build-webkit --debug --no-workers on mac.
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging LayoutTests/ChangeLog
CONFLICT (content): Merge conflict in LayoutTests/ChangeLog
Auto-merging LayoutTests/platform/qt/Skipped
CONFLICT (content): Merge conflict in LayoutTests/platform/qt/Skipped
Auto-merging Source/WebCore/ChangeLog
CONFLICT (content): Merge conflict in Source/WebCore/ChangeLog
Failed to merge in the changes.
Patch failed at 0001 Fix compilation errors on build-webkit --debug --no-workers on mac.

When you have resolved this problem run &quot;git rebase --continue&quot;.
If you would prefer to skip this patch, instead run &quot;git rebase --skip&quot;.
To restore the original branch and stop rebasing run &quot;git rebase --abort&quot;.

rebase refs/remotes/origin/master: command returned error: 1

Died at Tools/Scripts/update-webkit line 164.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547389</commentid>
    <comment_count>46</comment_count>
      <attachid>125020</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-01 14:52:59 -0800</bug_when>
    <thetext>Created attachment 125020
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547448</commentid>
    <comment_count>47</comment_count>
      <attachid>125020</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-01 15:45:08 -0800</bug_when>
    <thetext>Comment on attachment 125020
Patch

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

&gt; LayoutTests/webaudio/resources/distance-model-testing.js:201
&gt; +        // following if it enable this test.

Please land 75996 first and remove the comments about these bugs (lines 199:201)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547462</commentid>
    <comment_count>48</comment_count>
      <attachid>125038</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-01 16:11:28 -0800</bug_when>
    <thetext>Created attachment 125038
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547474</commentid>
    <comment_count>49</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-01 16:28:03 -0800</bug_when>
    <thetext>Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547876</commentid>
    <comment_count>50</comment_count>
      <attachid>125038</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-02-02 08:24:10 -0800</bug_when>
    <thetext>Comment on attachment 125038
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547920</commentid>
    <comment_count>51</comment_count>
      <attachid>125038</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-02 09:20:51 -0800</bug_when>
    <thetext>Comment on attachment 125038
Patch

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548070</commentid>
    <comment_count>52</comment_count>
      <attachid>125038</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-02 12:46:57 -0800</bug_when>
    <thetext>Comment on attachment 125038
Patch

Clearing flags on attachment: 125038

Committed r106580: &lt;http://trac.webkit.org/changeset/106580&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548071</commentid>
    <comment_count>53</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-02 12:47:05 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118890</attachid>
            <date>2011-12-12 15:50:17 -0800</date>
            <delta_ts>2011-12-13 10:48:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74273-20111212155016.patch</filename>
            <type>text/plain</type>
            <size>1677</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyMzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2NmMmNiM2YzNDEzNGVm
OWUxNzYyYjBhNWQzZjZiMTZmZTE1MTE5YS4uNGY5NGU3MjU4NzI1ZWFkZDU3MzkxNzdhZGU4Zjk1
OTc4YTI1ODk5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTEyLTEyICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBDb25zdGFudCB2YWx1ZXMgdG8g
c2V0ICJkaXN0YW5jZU1vZGVsIiBhcmUgdW5kZWZpbmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDI3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzIG5lZWQgdG8gYmUgd3JpdHRlbiB0byB2ZXJp
ZnkgdGhlIGNvbnN0YW50cyBhbmQgY29ycmVzcG9uZGluZworICAgICAgICBmdW5jdGlvbmFsaXR5
LiAgVGhpcyBkb2Vzbid0IGNoYW5nZSBhbnkgQVBJLCBidXQganVzdCBleHBvc2VzIHRoZQorICAg
ICAgICBjb25zdGFudHMgdG8gamF2YXNjcmlwdC4KKworICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlv
UGFubmVyTm9kZS5pZGw6IEFkZCBjb25zdGFudHMgZm9yIHRoZSBkaXN0YW5jZQorICAgICAgICBt
b2RlbHMsIHdoaWNoIHdlcmUgcHJldmlvdXNseSB1bnNwZWNpZmllZC4KKwogMjAxMS0xMi0wOCAg
RXJpayBBcnZpZHNzb24gIDxhcnZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENvZGVHZW5lcmF0
b3JWODogRml4IGlzc3VlIHdpdGggb3ZlcmxvYWRlZCBzdGF0aWMgY29uZGl0aW9uYWwgbWV0aG9k
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlk
bCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwKaW5kZXggMmRi
MDkzZDdiNTAzYWExZTljYzQ1ZjY0YTcxN2EwYzE4NDRiYWRkNy4uYjBmZmVhYmEwY2RiZjVhOWMx
OGRmYzY5MjEwOWYzYjAyMTkxNzc3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9QYW5uZXJOb2RlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b1Bhbm5lck5vZGUuaWRsCkBAIC0zMyw2ICszMywxMSBAQCBtb2R1bGUgYXVkaW8gewogICAgICAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCBIUlRGID0gMTsKICAgICAgICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgU09VTkRGSUVMRCA9IDI7CiAKKyAgICAgICAgLy8gRGlzdGFuY2UgbW9kZWwKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTElORUFSRElTVEFOQ0UgPSAwOworICAgICAgICBjb25z
dCB1bnNpZ25lZCBzaG9ydCBJTlZFUlNFRElTVEFOQ0UgPSAxOworICAgICAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCBFWFBPTkVOVElBTERJU1RBTkNFID0gMjsKKwogICAgICAgICAvLyBEZWZhdWx0
IG1vZGVsIGZvciBzdGVyZW8gaXMgSFJURiAKICAgICAgICAgYXR0cmlidXRlIHVuc2lnbmVkIGxv
bmcgcGFubmluZ01vZGVsOyAvLyBGSVhNRTogdXNlIHVuc2lnbmVkIHNob3J0IHdoZW4gZ2x1ZSBn
ZW5lcmF0aW9uIHN1cHBvcnRzIGl0CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119037</attachid>
            <date>2011-12-13 10:46:52 -0800</date>
            <delta_ts>2012-01-09 14:02:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74273-20111213104651.patch</filename>
            <type>text/plain</type>
            <size>1661</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAyNTQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2IxZWZhMjM2Mjg2NjY1
OGUyOTc2MjJjYjkzZDRjYTI2MDAxYzc2Ni4uNDNiMTlhMjAxODBlNzhkM2IxYzFkMDY0YjdjYjU1
MDQxNTYwNDIyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTEyLTEzICBSYXlt
b25kIFRveSAgPHRveS5yYXltb25kQGdtYWlsLmNvbT4KKworICAgICAgICBDb25zdGFudCB2YWx1
ZXMgdG8gc2V0ICJkaXN0YW5jZU1vZGVsIiBhcmUgdW5kZWZpbmVkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDI3MworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzIG5lZWQgdG8gYmUgd3JpdHRlbiB0
byB2ZXJpZnkgdGhlIGNvbnN0YW50cyBhbmQgY29ycmVzcG9uZGluZworICAgICAgICBmdW5jdGlv
bmFsaXR5LiAgVGhpcyBkb2Vzbid0IGNoYW5nZSBhbnkgQVBJLCBidXQganVzdCBleHBvc2VzIHRo
ZQorICAgICAgICBjb25zdGFudHMgdG8gamF2YXNjcmlwdC4KKworICAgICAgICAqIHdlYmF1ZGlv
L0F1ZGlvUGFubmVyTm9kZS5pZGw6IEFkZCBjb25zdGFudHMgZm9yIHRoZSBkaXN0YW5jZQorICAg
ICAgICBtb2RlbHMsIHdoaWNoIHdlcmUgcHJldmlvdXNseSB1bnNwZWNpZmllZC4KKwogMjAxMS0x
Mi0xMSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZGQgS2lsbFJpbmdOb25lLmNwcCB0byBNYWMgYnVpbGQgc3lzdGVtCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaWRsIGIvU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbAppbmRleCAyZGIwOTNkN2I1MDNhYTFlOWNjNDVm
NjRhNzE3YTBjMTg0NGJhZGQ3Li41OTdhM2VhZGZiYWM5ZTc2YmE5ZGE3NDIzM2JlMTViOWQ3NDI1
NGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUu
aWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwKQEAg
LTMzLDYgKzMzLDExIEBAIG1vZHVsZSBhdWRpbyB7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IEhSVEYgPSAxOwogICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBTT1VOREZJRUxEID0g
MjsKIAorICAgICAgICAvLyBEaXN0YW5jZSBtb2RlbAorICAgICAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCBMSU5FQVJfRElTVEFOQ0UgPSAwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBJ
TlZFUlNFX0RJU1RBTkNFID0gMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgRVhQT05F
TlRJQUxfRElTVEFOQ0UgPSAyOworCiAgICAgICAgIC8vIERlZmF1bHQgbW9kZWwgZm9yIHN0ZXJl
byBpcyBIUlRGIAogICAgICAgICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBwYW5uaW5nTW9kZWw7
IC8vIEZJWE1FOiB1c2UgdW5zaWduZWQgc2hvcnQgd2hlbiBnbHVlIGdlbmVyYXRpb24gc3VwcG9y
dHMgaXQKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121724</attachid>
            <date>2012-01-09 14:03:01 -0800</date>
            <delta_ts>2012-01-30 15:59:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74273-20120109140300.patch</filename>
            <type>text/plain</type>
            <size>17993</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0MDM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTJiOTFlMjdlMTQwNTg4
ZTEzYjZmZmEwZDY2YTg4Y2RmZDZlMWZkNi4uMDA0MzA4YzljMjg2MmFmMDZhN2MyZDJlOGFkNDAx
MWYxMDVkYjY4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAxLTA5ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBDb25zdGFudCB2YWx1ZXMgdG8g
c2V0ICJkaXN0YW5jZU1vZGVsIiBhcmUgdW5kZWZpbmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDI3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiB3ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVu
dGlhbC5odG1sCisgICAgICAgICAgICAgICB3ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLmh0bWwK
KyAgICAgICAgICAgICAgIHdlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci5odG1sCisKKyAgICAgICAg
KiB3ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaDogRGVmaW5lIGVudW0gZm9yIHRoZSBuZXcgY29u
c3RhbnRzCisgICAgICAgIGZvciB0aGUgZGlzdGFuY2UgbW9kZWxzLgorICAgICAgICAqIHdlYmF1
ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGw6IERlZmluZSBtYXRjaGluZyBjb25zdGFudHMgZm9yIHRo
ZQorICAgICAgICBkaXN0YW5jZSBtb2RlbHMuCisKIDIwMTItMDEtMDQgIEFkYW0gUm9iZW4gIDxh
cm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBvbmUgYmlnIHByaW50ZiBjb21tYW5kIGlu
c3RlYWQgb2YgbWFueSBjaGFpbmVkIGVjaG8gY29tbWFuZHMgdG8gZ2VuZXJhdGUgaWRsX2ZpbGVz
LnRtcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2Rl
LmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaAppbmRleCA2ZWNl
YmVhYWUzMWNhN2RhYzM4NTc5ZjFkNWEwMzVkZTM3MjJjZjExLi40MGJlNzE3MDI4NjgxZTc4ODdh
OTQ4ZDhkYmRlY2QzZTJkOWI0MjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb1Bhbm5lck5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bh
bm5lck5vZGUuaApAQCAtNTMsNiArNTMsMTQgQEAgcHVibGljOgogICAgICAgICBTT1VOREZJRUxE
ID0gMiwKICAgICB9OwogCisgICAgLy8gVGhlc2UgbXVzdCBiZSBkZWZpbmVkIGFzIGluIHRoZSAu
aWRsIGZpbGUgYW5kIG11c3QgbWF0Y2ggdGhvc2UKKyAgICAvLyBpbiB0aGUgRGlzdGFuY2VFZmZl
Y3QgY2xhc3MuCisgICAgZW51bSB7CisgICAgICAgIExJTkVBUl9ESVNUQU5DRSA9IDAsCisgICAg
ICAgIElOVkVSU0VfRElTVEFOQ0UgPSAxLAorICAgICAgICBFWFBPTkVOVElBTF9ESVNUQU5DRSA9
IDIsCisgICAgfTsKKyAgICAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb1Bhbm5lck5vZGU+
IGNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCiAgICAgewog
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlvUGFubmVyTm9kZShjb250ZXh0LCBzYW1w
bGVSYXRlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5l
ck5vZGUuaWRsIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbApp
bmRleCAyZGIwOTNkN2I1MDNhYTFlOWNjNDVmNjRhNzE3YTBjMTg0NGJhZGQ3Li41OTdhM2VhZGZi
YWM5ZTc2YmE5ZGE3NDIzM2JlMTViOWQ3NDI1NGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwKQEAgLTMzLDYgKzMzLDExIEBAIG1vZHVsZSBhdWRpbyB7
CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEhSVEYgPSAxOwogICAgICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBTT1VOREZJRUxEID0gMjsKIAorICAgICAgICAvLyBEaXN0YW5jZSBtb2Rl
bAorICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBMSU5FQVJfRElTVEFOQ0UgPSAwOworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBJTlZFUlNFX0RJU1RBTkNFID0gMTsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgRVhQT05FTlRJQUxfRElTVEFOQ0UgPSAyOworCiAgICAgICAg
IC8vIERlZmF1bHQgbW9kZWwgZm9yIHN0ZXJlbyBpcyBIUlRGIAogICAgICAgICBhdHRyaWJ1dGUg
dW5zaWduZWQgbG9uZyBwYW5uaW5nTW9kZWw7IC8vIEZJWE1FOiB1c2UgdW5zaWduZWQgc2hvcnQg
d2hlbiBnbHVlIGdlbmVyYXRpb24gc3VwcG9ydHMgaXQKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDZhMjg5MjA0ZGRiOTZl
NzkzYTY1MzZmY2U1ZTk4MDllMmE1MGY3ZjMuLmI3MGI1NGM4MmEwMTFlZWJlNzQzNjkxNmEyNWU4
YTc2NmNmY2I4NDkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMi0wMS0wOSAgUmF5bW9uZCBU
b3kgIDxydG95QGdvb2dsZS5jb20+CisKKyAgICAgICAgQ29uc3RhbnQgdmFsdWVzIHRvIHNldCAi
ZGlzdGFuY2VNb2RlbCIgYXJlIHVuZGVmaW5lZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyNzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHdlYmF1ZGlvL2Rpc3RhbmNlLWV4cG9uZW50aWFsLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vZGlzdGFuY2UtZXhwb25lbnRpYWwu
aHRtbDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vZGlzdGFuY2UtaW52ZXJzZS1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL2Rpc3RhbmNlLWludmVyc2UuaHRtbDog
QWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vZGlzdGFuY2UtbGluZWFyLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vZGlzdGFuY2UtbGluZWFyLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHdlYmF1ZGlvL3Jlc291cmNlcy9kaXN0YW5jZS1tb2RlbC10ZXN0aW5nLmpzOiBB
ZGRlZC4KKyAgICAgICAgKGNyZWF0ZUltcHVsc2VCdWZmZXIpOgorICAgICAgICAobGluZWFyRGlz
dGFuY2UpOgorICAgICAgICAoZXhwb25lbnRpYWxEaXN0YW5jZSk6CisgICAgICAgIChpbnZlcnNl
RGlzdGFuY2UpOgorICAgICAgICAoY3JlYXRlR3JhcGgpOgorICAgICAgICAoc3RhcnRTb3VyY2Vz
KToKKyAgICAgICAgKGVxdWFsUG93ZXJHYWluKToKKyAgICAgICAgKGNoZWNrRGlzdGFuY2VSZXN1
bHQucmV0dXJuLnJlbmRlcmVkQnVmZmVyKToKKyAgICAgICAgKGNoZWNrRGlzdGFuY2VSZXN1bHQp
OgorCiAyMDEyLTAxLTA0ICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgTm90IHJldmlld2VkLiBVcGRhdGUgQ2hyb21pdW0gcG9ydCB0ZXN0IGV4cGVjdGF0aW9ucyBh
ZnRlciBTa2lhIHJvbGwuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5j
ZS1leHBvbmVudGlhbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5j
ZS1leHBvbmVudGlhbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjU3NWMzMmMxNjE4ZWViMzdk
MWEyOGZkNDNjOWY3ZDY2OWIyOTdhMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmF1ZGlvL2Rpc3RhbmNlLWV4cG9uZW50aWFsLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDExIEBA
CitUZXN0IGV4cG9uZW50aWFsIGRpc3RhbmNlIG1vZGVsIG9mIEF1ZGlvUGFubmVyTm9kZS4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIE51bWJlciBvZiBub2RlcyBpcyBjb3Jy
ZWN0LgorUEFTUyBEaXN0YW5jZSBnYWlucyBhcmUgY29ycmVjdC4KK1BBU1MgRGlzdGFuY2UgdGVz
dCBwYXNzZWQgZm9yIGRpc3RhbmNlIG1vZGVsIDIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRp
by9kaXN0YW5jZS1leHBvbmVudGlhbC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFu
Y2UtZXhwb25lbnRpYWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZjJiZDBkYmFhMDUwMDdmYWMxMmJmNmFi
MTM4YmQ3OTdiYjA1NDAxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8v
ZGlzdGFuY2UtZXhwb25lbnRpYWwuaHRtbApAQCAtMCwwICsxLDY0IEBACis8IURPQ1RZUEUgSFRN
TCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1s
PgorICA8aGVhZD4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+CisgICAgPHNjcmlwdCBzcmM9Ii4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL2Rpc3RhbmNlLW1vZGVsLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICA8L2hlYWQ+
CisKKyAgPGJvZHk+CisgICAgPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorICAgIDxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorCisgICAgPHNjcmlwdD4KKyAgICAgIGRlc2NyaXB0aW9uKCJU
ZXN0IGV4cG9uZW50aWFsIGRpc3RhbmNlIG1vZGVsIG9mIEF1ZGlvUGFubmVyTm9kZS4iKTsKKwor
ICAgICAgdmFyIHNhbXBsZVJhdGUgPSA0NDEwMC4wOworCisgICAgICB2YXIgcmVuZGVyTGVuZ3Ro
U2Vjb25kcyA9IDg7CisgICAgICB2YXIgcHVsc2VMZW5ndGhTZWNvbmRzID0gMTsKKyAgICAgIHZh
ciBwdWxzZUxlbmd0aEZyYW1lcyA9IHB1bHNlTGVuZ3RoU2Vjb25kcyAqIHNhbXBsZVJhdGU7CisK
KyAgICAgIC8vIEhvdyBtYW55IHBhbm5lciBub2RlcyB0byBjcmVhdGUgZm9yIHRoZSB0ZXN0Cisg
ICAgICB2YXIgbm9kZXNUb0NyZWF0ZSA9IDEwMDsKKworICAgICAgLy8gVGltZSBzdGVwIHdoZW4g
ZWFjaCBwYW5uZXIgbm9kZSBzdGFydHMuCisgICAgICB2YXIgdGltZVN0ZXAgPSAwLjA1OworCisg
ICAgICB2YXIgY29udGV4dDsKKyAgICAgIHZhciBpbXB1bHNlOworICAgICAgdmFyIGJ1ZmZlclNv
dXJjZTsKKyAgICAgIHZhciBwYW5uZXI7CisgICAgICB2YXIgcG9zaXRpb247CisgICAgICB2YXIg
dGltZTsKKyAgICAgIAorICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKwkgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKwkgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7CisJICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
CSAgfQorCisJICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisKKwkgIC8vIENyZWF0ZSBv
ZmZsaW5lIGF1ZGlvIGNvbnRleHQuCisJICBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4
dCgyLCBzYW1wbGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisKKyAg
ICAgICAgICAvLyBUZW1wIHBhbm5lciBub2RlIHNvIHdlIGNhbiBnZXQgdGhlIEVYUE9ORU5USUFM
X0RJU1RBTkNFIHZhbHVlLgorICAgICAgICAgIHZhciB0ZW1wUGFubmVyID0gY29udGV4dC5jcmVh
dGVQYW5uZXIoKTsKKyAgICAgICAgICBjcmVhdGVHcmFwaChjb250ZXh0LCB0ZW1wUGFubmVyLkVY
UE9ORU5USUFMX0RJU1RBTkNFLCBub2Rlc1RvQ3JlYXRlKTsKKyAgICAgICAgICBzdGFydFNvdXJj
ZXMoKTsKKworICAgICAgICAgIC8vIFRocmVzaG9sZCBleHBlcmltZW50YWxseSBkZXRlcm1pbmVk
LgorICAgICAgICAgIHZhciB0aHJlc2hvbGQgPSAxLjNlLTc7CisgICAgICAgICAgY29udGV4dC5v
bmNvbXBsZXRlID0gY2hlY2tEaXN0YW5jZVJlc3VsdCh0ZW1wUGFubmVyLkVYUE9ORU5USUFMX0RJ
U1RBTkNFLCB0aHJlc2hvbGQsIGZhbHNlKTsKKwkgIGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTsK
KyAgICAgIH0KKworICAgICAgcnVuVGVzdCgpOworICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKKworICAgIDwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtaW52ZXJzZS1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hYWU5Y2EwYTNlYjEwNjI2YzUwYTNiMTY3NjQ2YTdiNTA5NTA5YWJhCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtaW52ZXJzZS1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwxMSBAQAorVGVzdCBpbnZlcnNlIGRpc3RhbmNlIG1vZGVsIG9mIEF1
ZGlvUGFubmVyTm9kZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIE51bWJl
ciBvZiBub2RlcyBpcyBjb3JyZWN0LgorUEFTUyBEaXN0YW5jZSBnYWlucyBhcmUgY29ycmVjdC4K
K1BBU1MgRGlzdGFuY2UgdGVzdCBwYXNzZWQgZm9yIGRpc3RhbmNlIG1vZGVsIDEKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjMyN2ViNTUyZDgwYThk
ZjJlZWY4NjM0NDNmMDJlZDhmZjM1YmE4NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYmF1ZGlvL2Rpc3RhbmNlLWludmVyc2UuaHRtbApAQCAtMCwwICsxLDY0IEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4K
KzxodG1sPgorICA8aGVhZD4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+CisgICAgPHNjcmlwdCBzcmM9Ii4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL2Rpc3RhbmNlLW1vZGVsLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICA8
L2hlYWQ+CisKKyAgPGJvZHk+CisgICAgPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorICAg
IDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCisgICAgPHNjcmlwdD4KKyAgICAgIGRlc2NyaXB0
aW9uKCJUZXN0IGludmVyc2UgZGlzdGFuY2UgbW9kZWwgb2YgQXVkaW9QYW5uZXJOb2RlLiIpOwor
CisgICAgICB2YXIgc2FtcGxlUmF0ZSA9IDQ0MTAwLjA7CisKKyAgICAgIHZhciByZW5kZXJMZW5n
dGhTZWNvbmRzID0gODsKKyAgICAgIHZhciBwdWxzZUxlbmd0aFNlY29uZHMgPSAxOworICAgICAg
dmFyIHB1bHNlTGVuZ3RoRnJhbWVzID0gcHVsc2VMZW5ndGhTZWNvbmRzICogc2FtcGxlUmF0ZTsK
KworICAgICAgLy8gSG93IG1hbnkgcGFubmVyIG5vZGVzIHRvIGNyZWF0ZSBmb3IgdGhlIHRlc3QK
KyAgICAgIHZhciBub2Rlc1RvQ3JlYXRlID0gMTAwOworCisgICAgICAvLyBUaW1lIHN0ZXAgd2hl
biBlYWNoIHBhbm5lciBub2RlIHN0YXJ0cy4KKyAgICAgIHZhciB0aW1lU3RlcCA9IDAuMDU7CisK
KyAgICAgIHZhciBjb250ZXh0OworICAgICAgdmFyIGltcHVsc2U7CisgICAgICB2YXIgYnVmZmVy
U291cmNlOworICAgICAgdmFyIHBhbm5lcjsKKyAgICAgIHZhciBwb3NpdGlvbjsKKyAgICAgIHZh
ciB0aW1lOworICAgICAgCisgICAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworCSAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworCSAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBBc1RleHQoKTsKKwkgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
CisJICB9CisKKwkgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworCSAgLy8gQ3JlYXRl
IG9mZmxpbmUgYXVkaW8gY29udGV4dC4KKwkgIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250
ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsKKwor
ICAgICAgICAgIC8vIFRlbXAgcGFubmVyIG5vZGUgc28gd2UgY2FuIGdldCB0aGUgSU5WRVJTRV9E
SVNUQU5DRSB2YWx1ZS4KKyAgICAgICAgICB2YXIgdGVtcFBhbm5lciA9IGNvbnRleHQuY3JlYXRl
UGFubmVyKCk7CisgICAgICAgICAgY3JlYXRlR3JhcGgoY29udGV4dCwgdGVtcFBhbm5lci5JTlZF
UlNFX0RJU1RBTkNFLCBub2Rlc1RvQ3JlYXRlKTsKKyAgICAgICAgICBzdGFydFNvdXJjZXMoKTsK
KworICAgICAgICAgIC8vIFRocmVzaG9sZCBleHBlcmltZW50YWxseSBkZXRlcm1pbmVkLgorICAg
ICAgICAgIHZhciB0aHJlc2hvbGQgPSAxLjNlLTc7CisgICAgICAgICAgY29udGV4dC5vbmNvbXBs
ZXRlID0gY2hlY2tEaXN0YW5jZVJlc3VsdCh0ZW1wUGFubmVyLklOVkVSU0VfRElTVEFOQ0UsIHRo
cmVzaG9sZCwgZmFsc2UpOworCSAgY29udGV4dC5zdGFydFJlbmRlcmluZygpOworICAgICAgfQor
CisgICAgICBydW5UZXN0KCk7CisgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCisg
ICAgPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1saW5lYXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vZGlzdGFuY2UtbGluZWFyLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZmNm
NGI3MzJmNDBjMjBkOThmNDlmY2RjOTVlZjdlNzliM2FhNjIzCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtbGluZWFyLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDExIEBACitUZXN0IGxpbmVhciBkaXN0YW5jZSBtb2RlbCBvZiBBdWRpb1Bhbm5lck5vZGUu
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBOdW1iZXIgb2Ygbm9kZXMgaXMg
Y29ycmVjdC4KK1BBU1MgRGlzdGFuY2UgZ2FpbnMgYXJlIGNvcnJlY3QuCitQQVNTIERpc3RhbmNl
IHRlc3QgcGFzc2VkIGZvciBkaXN0YW5jZSBtb2RlbCAwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vZGlzdGFuY2UtbGluZWFyLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5j
ZS1saW5lYXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNTlhMWE1OTQ3ZmZkYzE1YThmYjhiMmJmYjFjMGQ5
ZDQ3Y2FmMTJhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFu
Y2UtbGluZWFyLmh0bWwKQEAgLTAsMCArMSw2NCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICIt
Ly9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKyAgPGhlYWQ+
CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXN0eWxlLmNzcyIvPgorICAgIDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9k
aXN0YW5jZS1tb2RlbC10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKyAgPC9oZWFkPgorCisgIDxib2R5
PgorICAgIDxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKyAgICA8ZGl2IGlkPSJjb25zb2xl
Ij48L2Rpdj4KKworICAgIDxzY3JpcHQ+CisgICAgICBkZXNjcmlwdGlvbigiVGVzdCBsaW5lYXIg
ZGlzdGFuY2UgbW9kZWwgb2YgQXVkaW9QYW5uZXJOb2RlLiIpOworCisgICAgICB2YXIgc2FtcGxl
UmF0ZSA9IDQ0MTAwLjA7CisKKyAgICAgIHZhciByZW5kZXJMZW5ndGhTZWNvbmRzID0gODsKKyAg
ICAgIHZhciBwdWxzZUxlbmd0aFNlY29uZHMgPSAxOworICAgICAgdmFyIHB1bHNlTGVuZ3RoRnJh
bWVzID0gcHVsc2VMZW5ndGhTZWNvbmRzICogc2FtcGxlUmF0ZTsKKworICAgICAgLy8gSG93IG1h
bnkgcGFubmVyIG5vZGVzIHRvIGNyZWF0ZSBmb3IgdGhlIHRlc3QKKyAgICAgIHZhciBub2Rlc1Rv
Q3JlYXRlID0gMTAwOworCisgICAgICAvLyBUaW1lIHN0ZXAgd2hlbiBlYWNoIHBhbm5lciBub2Rl
IHN0YXJ0cy4KKyAgICAgIHZhciB0aW1lU3RlcCA9IDAuMDU7CisKKyAgICAgIHZhciBjb250ZXh0
OworICAgICAgdmFyIGltcHVsc2U7CisgICAgICB2YXIgYnVmZmVyU291cmNlOworICAgICAgdmFy
IHBhbm5lcjsKKyAgICAgIHZhciBwb3NpdGlvbjsKKyAgICAgIHZhciB0aW1lOworICAgICAgCisg
ICAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworCSAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikgeworCSAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKwkgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisJICB9CisKKwkgIHdpbmRv
dy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworCSAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29u
dGV4dC4KKwkgIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDIsIHNhbXBsZVJhdGUg
KiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsKKworICAgICAgICAgIC8vIFRlbXAg
cGFubmVyIG5vZGUgc28gd2UgY2FuIGdldCB0aGUgTElORUFSX0RJU1RBTkNFIHZhbHVlLgorICAg
ICAgICAgIHZhciB0ZW1wUGFubmVyID0gY29udGV4dC5jcmVhdGVQYW5uZXIoKTsKKyAgICAgICAg
ICBjcmVhdGVHcmFwaChjb250ZXh0LCB0ZW1wUGFubmVyLkxJTkVBUl9ESVNUQU5DRSwgbm9kZXNU
b0NyZWF0ZSk7CisgICAgICAgICAgc3RhcnRTb3VyY2VzKCk7CisKKyAgICAgICAgICAvLyBUaHJl
c2hvbGQgZXhwZXJpbWVudGFsbHkgZGV0ZXJtaW5lZC4KKyAgICAgICAgICB2YXIgdGhyZXNob2xk
ID0gMi4zZS02OworICAgICAgICAgIGNvbnRleHQub25jb21wbGV0ZSA9IGNoZWNrRGlzdGFuY2VS
ZXN1bHQodGVtcFBhbm5lci5MSU5FQVJfRElTVEFOQ0UsIHRocmVzaG9sZCwgZmFsc2UpOworCSAg
Y29udGV4dC5zdGFydFJlbmRlcmluZygpOworICAgICAgfQorCisgICAgICBydW5UZXN0KCk7Cisg
ICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCisgICAgPC9zY3JpcHQ+CisKKzxzY3Jp
cHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
ICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNv
dXJjZXMvZGlzdGFuY2UtbW9kZWwtdGVzdGluZy5qcyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jl
c291cmNlcy9kaXN0YW5jZS1tb2RlbC10ZXN0aW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2NGE5ZTljY2Jl
NzhkODA3YmExNmIzNWZmNjNmZTdjMGU3ZDQ1OWYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvZGlzdGFuY2UtbW9kZWwtdGVzdGluZy5qcwpAQCAtMCww
ICsxLDE2MSBAQAorZnVuY3Rpb24gY3JlYXRlSW1wdWxzZUJ1ZmZlcihjb250ZXh0LCBzYW1wbGVG
cmFtZUxlbmd0aCkgeworICB2YXIgYXVkaW9CdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlcigx
LCAxMDAwLCBjb250ZXh0LnNhbXBsZVJhdGUpOworICB2YXIgbiA9IGF1ZGlvQnVmZmVyLmxlbmd0
aDsKKyAgdmFyIGRhdGEgPSBhdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKKworICBmb3Ig
KHZhciBrID0gMDsgayA8IG47ICsraykgeworICAgIGRhdGFba10gPSAwOworICB9CisgIGRhdGFb
MF0gPSAxOworCisgIHJldHVybiBhdWRpb0J1ZmZlcjsKK30KKworLy8gRm9yIHRoZSByZWNvcmQs
IHRoZXNlIGRpc3RhbmNlIGZvcm11bGFzIHdlcmUgdGFrZW4gZnJvbSB0aGUgT3BlbkFMCisvLyBz
cGVjLCBub3QgdGhlIGNvZGUuCitmdW5jdGlvbiBsaW5lYXJEaXN0YW5jZShwYW5uZXIsIHgsIHks
IHopIHsKKworICB2YXIgZGlzdGFuY2UgPSBNYXRoLnNxcnQoeCp4ICsgeSp5ICsgeip6KTsKKyAg
ZGlzdGFuY2UgPSBNYXRoLm1pbihkaXN0YW5jZSwgcGFubmVyLm1heERpc3RhbmNlKTsKKyAgdmFy
IHJvbGxvZmYgPSBwYW5uZXIucm9sbG9mZkZhY3RvcjsKKyAgdmFyIGdhaW4gPSAoMSAtIHJvbGxv
ZmYqKGRpc3RhbmNlIC0gcGFubmVyLnJlZkRpc3RhbmNlKS8ocGFubmVyLm1heERpc3RhbmNlIC0g
cGFubmVyLnJlZkRpc3RhbmNlKSk7CisKKyAgcmV0dXJuIGdhaW47Cit9CisKK2Z1bmN0aW9uIGV4
cG9uZW50aWFsRGlzdGFuY2UocGFubmVyLCB4LCB5LCB6KSB7CisgIHZhciBkaXN0YW5jZSA9IE1h
dGguc3FydCh4KnggKyB5KnkgKyB6KnopOworICBkaXN0YW5jZSA9IE1hdGgubWluKGRpc3RhbmNl
LCBwYW5uZXIubWF4RGlzdGFuY2UpOworICB2YXIgcm9sbG9mZiA9IHBhbm5lci5yb2xsb2ZmRmFj
dG9yOworICB2YXIgZ2FpbiA9IE1hdGgucG93KGRpc3RhbmNlL3Bhbm5lci5yZWZEaXN0YW5jZSwg
LXJvbGxvZmYpOworCisgIHJldHVybiBnYWluOworfQorCitmdW5jdGlvbiBpbnZlcnNlRGlzdGFu
Y2UocGFubmVyLCB4LCB5LCB6KSB7CisgIHZhciBkaXN0YW5jZSA9IE1hdGguc3FydCh4KnggKyB5
KnkgKyB6KnopOworICBkaXN0YW5jZSA9IE1hdGgubWluKGRpc3RhbmNlLCBwYW5uZXIubWF4RGlz
dGFuY2UpOworICB2YXIgcm9sbG9mZiA9IHBhbm5lci5yb2xsb2ZmRmFjdG9yOworICB2YXIgZ2Fp
biA9IHBhbm5lci5yZWZEaXN0YW5jZS8ocGFubmVyLnJlZkRpc3RhbmNlICsgcm9sbG9mZiAqIChk
aXN0YW5jZSAtIHBhbm5lci5yZWZEaXN0YW5jZSkpOworCisgIHJldHVybiBnYWluOworfQorCisv
LyBUaGlzIGFycmF5IG11c3QgYmUgYXJyYW5nZWQgaW4gdGhlIG51bWVyaWMgb3JkZXIgb2YgdGhl
IGRpc3RhbmNlCisvLyBtb2RlbCB2YWx1ZXMuCit2YXIgZGlzdGFuY2VNb2RlbEZ1bmN0aW9uID0g
W2xpbmVhckRpc3RhbmNlLCBpbnZlcnNlRGlzdGFuY2UsIGV4cG9uZW50aWFsRGlzdGFuY2VdOwor
CitmdW5jdGlvbiBjcmVhdGVHcmFwaChjb250ZXh0LCBkaXN0YW5jZU1vZGVsLCBub2RlQ291bnQp
IHsKKyAgLy8gQ3JlYXRlIGFsbCB0aGUgc291cmNlcywgd2hpY2ggYXJlIGltcHVsc2VzLgorICBi
dWZmZXJTb3VyY2UgPSBuZXcgQXJyYXkobm9kZUNvdW50KTsKKyAgZm9yICh2YXIgayA9IDA7IGsg
PCBub2RlQ291bnQ7ICsraykgeworICAgIGJ1ZmZlclNvdXJjZVtrXSA9IGNvbnRleHQuY3JlYXRl
QnVmZmVyU291cmNlKCk7CisgICAgaW1wdWxzZSA9IGNyZWF0ZUltcHVsc2VCdWZmZXIoY29udGV4
dCwgcHVsc2VMZW5ndGhGcmFtZXMpOworICAgIGJ1ZmZlclNvdXJjZVtrXS5idWZmZXIgPSBpbXB1
bHNlOworICB9CisKKyAgLy8gQ3JlYXRlIGFsbCB0aGUgcGFubmVycy4KKyAgLy8KKyAgLy8gV2Ug
TVVTVCB1c2UgdGhlIEVRVUFMUE9XRVIgcGFubmluZyBtb2RlbCBzbyB0aGF0IHdlIGNhbiBlYXNp
bHkKKyAgLy8gZmlndXJlIG91dCB0aGUgZ2FpbiBpbnRyb2R1Y2VkIGJ5IHRoZSBwYW5uZXIuCisg
IC8vCisgIC8vIFdlIHdhbnQgdG8gc3RheSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwYW5uaW5nIHJh
bmdlLCB3aGljaCBtZWFucworICAvLyB3ZSB3YW50IHRvIHN0YXkgb24gdGhlIHotYXhpcy4gIElm
IHdlIGRvbid0LCB0aGVuIHRoZSBlZmZlY3Qgb2YKKyAgLy8gcGFubmluZyBtb2RlbCB3aWxsIGJl
IG11Y2ggbW9yZSBjb21wbGljYXRlZC4gIFdlJ3JlIG5vdCB0ZXN0aW5nCisgIC8vIHRoZSBwYW5u
ZXIsIGJ1dCB0aGUgZGlzdGFuY2UgbW9kZWwsIHNvIHdlIHdhbnQgdGhlIHBhbm5lciBlZmZlY3QK
KyAgLy8gdG8gYmUgc2ltcGxlLgorICBwYW5uZXIgPSBuZXcgQXJyYXkobm9kZUNvdW50KTsKKyAg
cG9zaXRpb24gPSBuZXcgQXJyYXkobm9kZUNvdW50KTsKKyAgZm9yICh2YXIgayA9IDA7IGsgPCBu
b2RlQ291bnQ7ICsraykgeworICAgIHBhbm5lcltrXSA9IGNvbnRleHQuY3JlYXRlUGFubmVyKCk7
CisgICAgcGFubmVyW2tdLnBhbm5pbmdNb2RlbCA9IHBhbm5lci5FUVVBTFBPV0VSOworICAgIHBh
bm5lcltrXS5kaXN0YW5jZU1vZGVsID0gZGlzdGFuY2VNb2RlbDsKKyAgICAvLyBUaGUgZGlzdGFu
Y2UgaXMgdW5pZm9ybSBzcGFjaW5nIGJldHdlZW4gdGhlIG1heCBhbmQgcmVmCisgICAgLy8gZGlz
dGFuY2UuCisgICAgdmFyIGRpc3RhbmNlU3RlcCA9IChwYW5uZXJba10ubWF4RGlzdGFuY2UgLSBw
YW5uZXJba10ucmVmRGlzdGFuY2UpIC8gbm9kZUNvdW50OworICAgIHBvc2l0aW9uW2tdID0gZGlz
dGFuY2VTdGVwICogayArIHBhbm5lcltrXS5yZWZEaXN0YW5jZTsKKyAgICBwYW5uZXJba10uc2V0
UG9zaXRpb24oMCwgMCwgcG9zaXRpb25ba10pOworICB9CisKKyAgLy8gQ29ubmVjdCB0aGUgc291
cmNlcyBhbmQgcGFubmVycy4KKyAgZm9yICh2YXIgayA9IDA7IGsgPCBub2RlQ291bnQ7ICsraykg
eworICAgIGJ1ZmZlclNvdXJjZVtrXS5jb25uZWN0KHBhbm5lcltrXSk7CisgICAgcGFubmVyW2td
LmNvbm5lY3QoY29udGV4dC5kZXN0aW5hdGlvbik7CisgIH0KK30KKworZnVuY3Rpb24gc3RhcnRT
b3VyY2VzKCkgeworICAvLyBUdXJuIG9uIGVhY2ggc291cmNlIGF0IHVuaWZvcm0gaW50ZXJ2YWxz
LgorICB0aW1lID0gbmV3IEFycmF5KG5vZGVzVG9DcmVhdGUpOworICBmb3IgKHZhciBrID0gMDsg
ayA8IG5vZGVzVG9DcmVhdGU7ICsraykgeworICAgIHRpbWVba10gPSBrICogdGltZVN0ZXA7Cisg
ICAgYnVmZmVyU291cmNlW2tdLm5vdGVPbih0aW1lW2tdKTsKKyAgfQorfQorCisvLyBUaGUgZ2Fp
biBjYXVzZWQgYnkgdGhlIEVRVUFMUE9XRVIgcGFubmluZyBtb2RlbCwgaWYgd2Ugc3RheSBvbiB0
aGUKKy8vIHogYXhpcywgd2l0aCB0aGUgZGVmYXVsdCBvcmllbnRhdGlvbnMuCitmdW5jdGlvbiBl
cXVhbFBvd2VyR2FpbigpIHsKKyAgcmV0dXJuIE1hdGguU1FSVDFfMjsKK30KKworZnVuY3Rpb24g
Y2hlY2tEaXN0YW5jZVJlc3VsdChtb2RlbCwgdGhyZXNob2xkLCBkZWJ1ZykgeworICByZXR1cm4g
ZnVuY3Rpb24oZXZlbnQpIHsKKyAgICByZW5kZXJlZEJ1ZmZlciA9IGV2ZW50LnJlbmRlcmVkQnVm
ZmVyOworICAgIHJlbmRlcmVkRGF0YSA9IHJlbmRlcmVkQnVmZmVyLmdldENoYW5uZWxEYXRhKDAp
OworICAgIHZhciBzdWNjZXNzID0gdHJ1ZTsKKyAgICB2YXIgY291bnQgPSAwOworICAgIHZhciB0
aW1lQ291bnQgPSAwOworICAgIHZhciBtYXhFcnJvciA9IDA7CisgICAgdmFyIHRpbWVFcnJvcnMg
PSBuZXcgQXJyYXkoKTsKKworICAgIC8vIFN0ZXAgdGhyb3VnaCB0aGUgcmVuZGVyZWQgZGF0YSB0
byBmaW5kIGFsbCB0aGUgbm9uLXplcm8gcG9pbnRzCisgICAgLy8gc28gd2UgY2FuIGZpbmQgd2hl
cmUgb3VyIGltcHVsc2VzIGFyZS4KKyAgICBmb3IgKHZhciBrID0gMDsgayA8IHJlbmRlcmVkRGF0
YS5sZW5ndGg7ICsraykgeworICAgICAgaWYgKHJlbmRlcmVkRGF0YVtrXSAhPSAwKSB7CisgICAg
ICAgIHZhciBleHBlY3RlZCA9IGRpc3RhbmNlTW9kZWxGdW5jdGlvbltwYW5uZXJbY291bnRdLmRp
c3RhbmNlTW9kZWxdKHBhbm5lcltjb3VudF0sIDAsIDAsIHBvc2l0aW9uW2NvdW50XSk7CisgICAg
ICAgIGV4cGVjdGVkICo9IGVxdWFsUG93ZXJHYWluKCk7CisKKyAgICAgICAgdmFyIGVycm9yID0g
TWF0aC5hYnMocmVuZGVyZWREYXRhW2tdIC0gZXhwZWN0ZWQpL01hdGguYWJzKGV4cGVjdGVkKTsK
KyAgICAgICAgaWYgKGRlYnVnKSB7CisgICAgICAgICAgY29uc29sZS5sb2coayArICI6ICIgKyBy
ZW5kZXJlZERhdGFba10gKyAiIChleHBlY3RlZCAiICsgZXhwZWN0ZWQgKyAiLCByZWwgPSAiLCBl
cnJvciArICIpIik7CisgICAgICAgIH0KKyAgICAgICAgbWF4RXJyb3IgPSBNYXRoLm1heChtYXhF
cnJvciwgTWF0aC5hYnMoZXJyb3IpKTsKKyAgICAgICAgaWYgKGsgIT0gTWF0aC5yb3VuZChzYW1w
bGVSYXRlICogdGltZVtjb3VudF0pKSB7CisgICAgICAgICAgdGltZUVycm9yc1t0aW1lQ291bnRd
ID0geyBhY3R1YWwgOiBrLCBleHBlY3RlZCA6IE1hdGgucm91bmQoc2FtcGxlUmF0ZSAqIHRpbWVb
Y291bnRdKX07CisgICAgICAgICAgKyt0aW1lQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAgKytj
b3VudDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY291bnQgPT0gbm9kZXNUb0NyZWF0ZSkg
eworICAgICAgdGVzdFBhc3NlZCgiTnVtYmVyIG9mIG5vZGVzIGlzIGNvcnJlY3QuIik7CisgICAg
fSBlbHNlIHsKKyAgICAgIHRlc3RGYWlsZWQoIk51bWJlciBvZiBub2RlcyBpcyBpbmNvcnJlY3Qu
ICAoRm91bmQgIiArIGNvdW50ICsgIiBidXQgZXhwZWN0ZWQgIiArIG5vZGVzVG9DcmVhdGUgKyAi
KSIpOworICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChtYXhFcnJvciA8
PSB0aHJlc2hvbGQpIHsKKyAgICAgIHRlc3RQYXNzZWQoIkRpc3RhbmNlIGdhaW5zIGFyZSBjb3Jy
ZWN0LiIpOworICAgIH0gZWxzZSB7CisgICAgICB0ZXN0RmFpbGVkKCJEaXN0YW5jZSBnYWlucyBh
cmUgaW5jb3JyZWN0LiAgTWF4IHJlbCBlcnJvciA9ICIgKyBtYXhFcnJvciArICIgKHRocmVzaG9s
ZCA9ICIgKyB0aHJlc2hvbGQgKyAiKSIpOworICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgIH0K
KworICAgIGlmIChkZWJ1ZyAmJiB0aW1lRXJyb3JzLmxlbmd0aCA+IDApIHsKKyAgICAgIGNvbnNv
bGUubG9nKHRpbWVFcnJvcnMubGVuZ3RoICsgIiB0aW1pbmcgZXJyb3JzIGZvdW5kIik7CisgICAg
ICBmb3IgKHZhciBrID0gMDsgayA8IHRpbWVFcnJvcnMubGVuZ3RoOyArK2spIHsKKyAgICAgICAg
Y29uc29sZS5sb2coIlNhbXBsZSAiICsgdGltZUVycm9yc1trXS5hY3R1YWwgKyAiIGJ1dCBleHBl
Y3RlZCAiICsgdGltZUVycm9yc1trXS5leHBlY3RlZCk7CisgICAgICB9CisgICAgfQorCisgICAg
aWYgKHN1Y2Nlc3MpIHsKKyAgICAgIHRlc3RQYXNzZWQoIkRpc3RhbmNlIHRlc3QgcGFzc2VkIGZv
ciBkaXN0YW5jZSBtb2RlbCAiICsgbW9kZWwpOworICAgIH0gZWxzZSB7CisgICAgICB0ZXN0RmFp
bGVkKCJEaXN0YW5jZSB0ZXN0IGZhaWxlZCBmb3IgZGlzdGFuY2UgbW9kZWwgIiArIG1vZGVsKTsK
KyAgICB9CisKKyAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121867</attachid>
            <date>2012-01-10 10:38:43 -0800</date>
            <delta_ts>2012-01-11 13:49:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74273-20120110103842.patch</filename>
            <type>text/plain</type>
            <size>18022</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhMmI5MWUyN2UxNDA1ODhlMTNiNmZmYTBkNjZhODhjZGZkNmUxZmQ2Li4w
MDQzMDhjOWMyODYyYWYwNmE3YzJkMmU4YWQ0MDExZjEwNWRiNjhjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTkgQEAKKzIwMTItMDEtMDkgIFJheW1vbmQgVG95ICA8cnRveUBnb29nbGUuY29tPgor
CisgICAgICAgIENvbnN0YW50IHZhbHVlcyB0byBzZXQgImRpc3RhbmNlTW9kZWwiIGFyZSB1bmRl
ZmluZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0
MjczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVz
dHM6IHdlYmF1ZGlvL2Rpc3RhbmNlLWV4cG9uZW50aWFsLmh0bWwKKyAgICAgICAgICAgICAgIHdl
YmF1ZGlvL2Rpc3RhbmNlLWludmVyc2UuaHRtbAorICAgICAgICAgICAgICAgd2ViYXVkaW8vZGlz
dGFuY2UtbGluZWFyLmh0bWwKKworICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5o
OiBEZWZpbmUgZW51bSBmb3IgdGhlIG5ldyBjb25zdGFudHMKKyAgICAgICAgZm9yIHRoZSBkaXN0
YW5jZSBtb2RlbHMuCisgICAgICAgICogd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbDogRGVm
aW5lIG1hdGNoaW5nIGNvbnN0YW50cyBmb3IgdGhlCisgICAgICAgIGRpc3RhbmNlIG1vZGVscy4K
KwogMjAxMi0wMS0wNCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAg
VXNlIG9uZSBiaWcgcHJpbnRmIGNvbW1hbmQgaW5zdGVhZCBvZiBtYW55IGNoYWluZWQgZWNobyBj
b21tYW5kcyB0byBnZW5lcmF0ZSBpZGxfZmlsZXMudG1wCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0F1ZGlvUGFubmVyTm9kZS5oCmluZGV4IDZlY2ViZWFhZTMxY2E3ZGFjMzg1NzlmMWQ1YTAzNWRl
MzcyMmNmMTEuLjQwYmU3MTcwMjg2ODFlNzg4N2E5NDhkOGRiZGVjZDNlMmQ5YjQyNmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oCkBAIC01Myw2ICs1MywxNCBA
QCBwdWJsaWM6CiAgICAgICAgIFNPVU5ERklFTEQgPSAyLAogICAgIH07CiAKKyAgICAvLyBUaGVz
ZSBtdXN0IGJlIGRlZmluZWQgYXMgaW4gdGhlIC5pZGwgZmlsZSBhbmQgbXVzdCBtYXRjaCB0aG9z
ZQorICAgIC8vIGluIHRoZSBEaXN0YW5jZUVmZmVjdCBjbGFzcy4KKyAgICBlbnVtIHsKKyAgICAg
ICAgTElORUFSX0RJU1RBTkNFID0gMCwKKyAgICAgICAgSU5WRVJTRV9ESVNUQU5DRSA9IDEsCisg
ICAgICAgIEVYUE9ORU5USUFMX0RJU1RBTkNFID0gMiwKKyAgICB9OworICAgIAogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEF1ZGlvUGFubmVyTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCogY29udGV4
dCwgZmxvYXQgc2FtcGxlUmF0ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
QXVkaW9QYW5uZXJOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaWRsCmluZGV4IDJkYjA5M2Q3YjUwM2FhMWU5Y2M0NWY2
NGE3MTdhMGMxODQ0YmFkZDcuLjU5N2EzZWFkZmJhYzllNzZiYTlkYTc0MjMzYmUxNWI5ZDc0MjU0
ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5p
ZGwKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbApAQCAt
MzMsNiArMzMsMTEgQEAgbW9kdWxlIGF1ZGlvIHsKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hv
cnQgSFJURiA9IDE7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNPVU5ERklFTEQgPSAy
OwogCisgICAgICAgIC8vIERpc3RhbmNlIG1vZGVsCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IExJTkVBUl9ESVNUQU5DRSA9IDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IElO
VkVSU0VfRElTVEFOQ0UgPSAxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBFWFBPTkVO
VElBTF9ESVNUQU5DRSA9IDI7CisKICAgICAgICAgLy8gRGVmYXVsdCBtb2RlbCBmb3Igc3RlcmVv
IGlzIEhSVEYgCiAgICAgICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIHBhbm5pbmdNb2RlbDsg
Ly8gRklYTUU6IHVzZSB1bnNpZ25lZCBzaG9ydCB3aGVuIGdsdWUgZ2VuZXJhdGlvbiBzdXBwb3J0
cyBpdAogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggNmEyODkyMDRkZGI5NmU3OTNhNjUzNmZjZTVlOTgwOWUyYTUwZjdmMy4u
YjcwYjU0YzgyYTAxMWVlYmU3NDM2OTE2YTI1ZThhNzY2Y2ZjYjg0OSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI3IEBACisyMDEyLTAxLTA5ICBSYXltb25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAg
ICAgICBDb25zdGFudCB2YWx1ZXMgdG8gc2V0ICJkaXN0YW5jZU1vZGVsIiBhcmUgdW5kZWZpbmVk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDI3Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2ViYXVk
aW8vZGlzdGFuY2UtZXhwb25lbnRpYWwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3
ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVudGlhbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJh
dWRpby9kaXN0YW5jZS1pbnZlcnNlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2Vi
YXVkaW8vZGlzdGFuY2UtaW52ZXJzZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9k
aXN0YW5jZS1saW5lYXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9k
aXN0YW5jZS1saW5lYXIuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vcmVzb3VyY2Vz
L2Rpc3RhbmNlLW1vZGVsLXRlc3RpbmcuanM6IEFkZGVkLgorICAgICAgICAoY3JlYXRlSW1wdWxz
ZUJ1ZmZlcik6CisgICAgICAgIChsaW5lYXJEaXN0YW5jZSk6CisgICAgICAgIChleHBvbmVudGlh
bERpc3RhbmNlKToKKyAgICAgICAgKGludmVyc2VEaXN0YW5jZSk6CisgICAgICAgIChjcmVhdGVH
cmFwaCk6CisgICAgICAgIChzdGFydFNvdXJjZXMpOgorICAgICAgICAoZXF1YWxQb3dlckdhaW4p
OgorICAgICAgICAoY2hlY2tEaXN0YW5jZVJlc3VsdC5yZXR1cm4ucmVuZGVyZWRCdWZmZXIpOgor
ICAgICAgICAoY2hlY2tEaXN0YW5jZVJlc3VsdCk6CisKIDIwMTItMDEtMDQgIEFscGhhIExhbSAg
PGhjbGFtQGNocm9taXVtLm9yZz4KIAogICAgICAgICBOb3QgcmV2aWV3ZWQuIFVwZGF0ZSBDaHJv
bWl1bSBwb3J0IHRlc3QgZXhwZWN0YXRpb25zIGFmdGVyIFNraWEgcm9sbC4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWV4cG9uZW50aWFsLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWV4cG9uZW50aWFsLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yNTc1YzMyYzE2MThlZWIzN2QxYTI4ZmQ0M2M5ZjdkNjY5YjI5N2EzCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtZXhwb25lbnRpYWwt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1Rlc3QgZXhwb25lbnRpYWwgZGlzdGFuY2Ug
bW9kZWwgb2YgQXVkaW9QYW5uZXJOb2RlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
K1BBU1MgTnVtYmVyIG9mIG5vZGVzIGlzIGNvcnJlY3QuCitQQVNTIERpc3RhbmNlIGdhaW5zIGFy
ZSBjb3JyZWN0LgorUEFTUyBEaXN0YW5jZSB0ZXN0IHBhc3NlZCBmb3IgZGlzdGFuY2UgbW9kZWwg
MgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWV4cG9uZW50aWFsLmh0bWwg
Yi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVudGlhbC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjkyYzY1YmZkNGFjMDI3ZjBkM2M1NDgxODg4ZmZlNGY0Y2E3NjAyNDAKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVudGlhbC5odG1sCkBA
IC0wLDAgKzEsNDIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0
LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3Mi
Lz4KKyAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZGlzdGFuY2UtbW9kZWwtdGVz
dGluZy5qcyI+PC9zY3JpcHQ+CisgIDwvaGVhZD4KKworICA8Ym9keT4KKyAgICA8ZGl2IGlkPSJk
ZXNjcmlwdGlvbiI+PC9kaXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKyAgICA8
c2NyaXB0PgorICAgICAgZGVzY3JpcHRpb24oIlRlc3QgZXhwb25lbnRpYWwgZGlzdGFuY2UgbW9k
ZWwgb2YgQXVkaW9QYW5uZXJOb2RlLiIpOworCisgICAgICBmdW5jdGlvbiBydW5UZXN0KCkgewor
ICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgfQorCisgICAgICAg
ICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworCisgICAgICAgICAgLy8gQ3JlYXRlIG9m
ZmxpbmUgYXVkaW8gY29udGV4dC4KKyAgICAgICAgICBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlv
Q29udGV4dCgyLCBzYW1wbGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7
CisKKyAgICAgICAgICAvLyBUaHJlc2hvbGQgZXhwZXJpbWVudGFsbHkgZGV0ZXJtaW5lZC4KKyAg
ICAgICAgICB2YXIgdGhyZXNob2xkID0gMS4zZS03OworCisgICAgICAgICAgLy8gVGVtcCBwYW5u
ZXIgbm9kZSBzbyB3ZSBjYW4gZ2V0IHRoZSBFWFBPTkVOVElBTF9ESVNUQU5DRSB2YWx1ZS4KKyAg
ICAgICAgICB2YXIgdGVtcFBhbm5lciA9IGNvbnRleHQuY3JlYXRlUGFubmVyKCk7CisgICAgICAg
ICAgY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCB0ZW1wUGFubmVyLkVYUE9ORU5USUFMX0RJU1RB
TkNFLCAyLCB0aHJlc2hvbGQpOworICAgICAgfQorCisgICAgICBydW5UZXN0KCk7CisgICAgICBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCisgICAgPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3Jj
PSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorICA8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1p
bnZlcnNlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWludmVy
c2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhZTljYTBhM2ViMTA2MjZjNTBhM2IxNjc2NDZh
N2I1MDk1MDlhYmEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0
YW5jZS1pbnZlcnNlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDExIEBACitUZXN0IGludmVyc2Ug
ZGlzdGFuY2UgbW9kZWwgb2YgQXVkaW9QYW5uZXJOb2RlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKK1BBU1MgTnVtYmVyIG9mIG5vZGVzIGlzIGNvcnJlY3QuCitQQVNTIERpc3RhbmNl
IGdhaW5zIGFyZSBjb3JyZWN0LgorUEFTUyBEaXN0YW5jZSB0ZXN0IHBhc3NlZCBmb3IgZGlzdGFu
Y2UgbW9kZWwgMQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWludmVyc2Uu
aHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWludmVyc2UuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zMzU4YjJhNTMzNzJiNmYwYjA3YTY4OTUxYmVlZWQwMzU1NGE0YTIwCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtaW52ZXJzZS5odG1sCkBAIC0w
LDAgKzEsNDIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAx
IFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgaHJlZj0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4K
KyAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZGlzdGFuY2UtbW9kZWwtdGVzdGlu
Zy5qcyI+PC9zY3JpcHQ+CisgIDwvaGVhZD4KKworICA8Ym9keT4KKyAgICA8ZGl2IGlkPSJkZXNj
cmlwdGlvbiI+PC9kaXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKyAgICA8c2Ny
aXB0PgorICAgICAgZGVzY3JpcHRpb24oIlRlc3QgaW52ZXJzZSBkaXN0YW5jZSBtb2RlbCBvZiBB
dWRpb1Bhbm5lck5vZGUuIik7CisKKyAgICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgICAg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICB3aW5k
b3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICAgICAgICAvLyBDcmVhdGUgb2ZmbGluZSBh
dWRpbyBjb250ZXh0LgorICAgICAgICAgIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0
KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsKKworICAg
ICAgICAgIC8vIFRocmVzaG9sZCBleHBlcmltZW50YWxseSBkZXRlcm1pbmVkLgorICAgICAgICAg
IHZhciB0aHJlc2hvbGQgPSAxLjNlLTc7CisKKyAgICAgICAgICAvLyBUZW1wIHBhbm5lciBub2Rl
IHNvIHdlIGNhbiBnZXQgdGhlIElOVkVSU0VfRElTVEFOQ0UgdmFsdWUuCisgICAgICAgICAgdmFy
IHRlbXBQYW5uZXIgPSBjb250ZXh0LmNyZWF0ZVBhbm5lcigpOworICAgICAgICAgIGNyZWF0ZVRl
c3RBbmRSdW4oY29udGV4dCwgdGVtcFBhbm5lci5JTlZFUlNFX0RJU1RBTkNFLCAxLCB0aHJlc2hv
bGQpOworICAgICAgfQorCisgICAgICBydW5UZXN0KCk7CisgICAgICBzdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOworCisgICAgPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorICA8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1saW5lYXItZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtbGluZWFyLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45ZmNmNGI3MzJmNDBjMjBkOThmNDlmY2RjOTVlZjdlNzliM2FhNjIzCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtbGluZWFyLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDExIEBACitUZXN0IGxpbmVhciBkaXN0YW5jZSBtb2RlbCBvZiBB
dWRpb1Bhbm5lck5vZGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBOdW1i
ZXIgb2Ygbm9kZXMgaXMgY29ycmVjdC4KK1BBU1MgRGlzdGFuY2UgZ2FpbnMgYXJlIGNvcnJlY3Qu
CitQQVNTIERpc3RhbmNlIHRlc3QgcGFzc2VkIGZvciBkaXN0YW5jZSBtb2RlbCAwCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtbGluZWFyLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJhdWRpby9kaXN0YW5jZS1saW5lYXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NTkyNWI0ZTk2YmQxYmMx
MzY0N2Q1YzFhZGIyMGI3N2YxNjI2MmQyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vZGlzdGFuY2UtbGluZWFyLmh0bWwKQEAgLTAsMCArMSwzOSBAQAorPCFET0NUWVBF
IEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8
aHRtbD4KKyAgPGhlYWQ+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorICAgIDxzY3JpcHQgc3JjPSIuLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9InJlc291cmNlcy9kaXN0YW5jZS1tb2RlbC10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKyAgPC9o
ZWFkPgorCisgIDxib2R5PgorICAgIDxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKyAgICA8
ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworICAgIDxzY3JpcHQ+CisgICAgICBkZXNjcmlwdGlv
bigiVGVzdCBsaW5lYXIgZGlzdGFuY2UgbW9kZWwgb2YgQXVkaW9QYW5uZXJOb2RlLiIpOworCisg
ICAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOworICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25l
KCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVl
OworCisgICAgICAgICAgLy8gVGhyZXNob2xkIGV4cGVyaW1lbnRhbGx5IGRldGVybWluZWQuCisg
ICAgICAgICAgdmFyIHRocmVzaG9sZCA9IDIuM2UtNjsKKyAgICAgICAgICAvLyBDcmVhdGUgb2Zm
bGluZSBhdWRpbyBjb250ZXh0LgorICAgICAgICAgIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9D
b250ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsK
KyAgICAgICAgICB2YXIgcGFubmVyTW9kZWwgPSBjb250ZXh0LmNyZWF0ZVBhbm5lcigpOworICAg
ICAgICAgIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgcGFubmVyTW9kZWwuTElORUFSX0RJU1RB
TkNFLCAwLCB0aHJlc2hvbGQpOworICAgICAgfQorCisgICAgICBydW5UZXN0KCk7CisgICAgICBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCisgICAgPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3Jj
PSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorICA8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMv
ZGlzdGFuY2UtbW9kZWwtdGVzdGluZy5qcyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNl
cy9kaXN0YW5jZS1tb2RlbC10ZXN0aW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwZWMwYzRlZmM1ZGI0ODAz
OWE3ZmVkODdlNTEwYzc3ZTc1NjhiOWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJhdWRpby9yZXNvdXJjZXMvZGlzdGFuY2UtbW9kZWwtdGVzdGluZy5qcwpAQCAtMCwwICsxLDIx
MiBAQAordmFyIHNhbXBsZVJhdGUgPSA0NDEwMC4wOworCit2YXIgcmVuZGVyTGVuZ3RoU2Vjb25k
cyA9IDg7Cit2YXIgcHVsc2VMZW5ndGhTZWNvbmRzID0gMTsKK3ZhciBwdWxzZUxlbmd0aEZyYW1l
cyA9IHB1bHNlTGVuZ3RoU2Vjb25kcyAqIHNhbXBsZVJhdGU7CisKKy8vIEhvdyBtYW55IHBhbm5l
ciBub2RlcyB0byBjcmVhdGUgZm9yIHRoZSB0ZXN0Cit2YXIgbm9kZXNUb0NyZWF0ZSA9IDEwMDsK
KworLy8gVGltZSBzdGVwIHdoZW4gZWFjaCBwYW5uZXIgbm9kZSBzdGFydHMuCit2YXIgdGltZVN0
ZXAgPSAwLjA1OworCisvLyBHbG9iYWxzIHRvIG1ha2UgZGVidWdnaW5nIGEgbGl0dGxlIGVhc2ll
ci4KK3ZhciBjb250ZXh0OwordmFyIGltcHVsc2U7Cit2YXIgYnVmZmVyU291cmNlOwordmFyIHBh
bm5lcjsKK3ZhciBwb3NpdGlvbjsKK3ZhciB0aW1lOworICAgICAgCitmdW5jdGlvbiBjcmVhdGVJ
bXB1bHNlQnVmZmVyKGNvbnRleHQsIHNhbXBsZUZyYW1lTGVuZ3RoKSB7CisgIHZhciBhdWRpb0J1
ZmZlciA9IGNvbnRleHQuY3JlYXRlQnVmZmVyKDEsIHNhbXBsZUZyYW1lTGVuZ3RoLCBjb250ZXh0
LnNhbXBsZVJhdGUpOworICB2YXIgbiA9IGF1ZGlvQnVmZmVyLmxlbmd0aDsKKyAgdmFyIGRhdGEg
PSBhdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKKworICBmb3IgKHZhciBrID0gMDsgayA8
IG47ICsraykgeworICAgIGRhdGFba10gPSAwOworICB9CisgIGRhdGFbMF0gPSAxOworCisgIHJl
dHVybiBhdWRpb0J1ZmZlcjsKK30KKworLy8gRm9yIHRoZSByZWNvcmQsIHRoZXNlIGRpc3RhbmNl
IGZvcm11bGFzIHdlcmUgdGFrZW4gZnJvbSB0aGUgT3BlbkFMCisvLyBzcGVjLCBub3QgdGhlIGNv
ZGUuCitmdW5jdGlvbiBsaW5lYXJEaXN0YW5jZShwYW5uZXIsIHgsIHksIHopIHsKKyAgdmFyIGRp
c3RhbmNlID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeik7CisgIGRpc3RhbmNlID0g
TWF0aC5taW4oZGlzdGFuY2UsIHBhbm5lci5tYXhEaXN0YW5jZSk7CisgIHZhciByb2xsb2ZmID0g
cGFubmVyLnJvbGxvZmZGYWN0b3I7CisgIHZhciBnYWluID0gKDEgLSByb2xsb2ZmICogKGRpc3Rh
bmNlIC0gcGFubmVyLnJlZkRpc3RhbmNlKSAvIChwYW5uZXIubWF4RGlzdGFuY2UgLSBwYW5uZXIu
cmVmRGlzdGFuY2UpKTsKKworICByZXR1cm4gZ2FpbjsKK30KKworZnVuY3Rpb24gZXhwb25lbnRp
YWxEaXN0YW5jZShwYW5uZXIsIHgsIHksIHopIHsKKyAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0
KHggKiB4ICsgeSAqIHkgKyB6ICogeik7CisgIGRpc3RhbmNlID0gTWF0aC5taW4oZGlzdGFuY2Us
IHBhbm5lci5tYXhEaXN0YW5jZSk7CisgIHZhciByb2xsb2ZmID0gcGFubmVyLnJvbGxvZmZGYWN0
b3I7CisgIHZhciBnYWluID0gTWF0aC5wb3coZGlzdGFuY2UgLyBwYW5uZXIucmVmRGlzdGFuY2Us
IC1yb2xsb2ZmKTsKKworICByZXR1cm4gZ2FpbjsKK30KKworZnVuY3Rpb24gaW52ZXJzZURpc3Rh
bmNlKHBhbm5lciwgeCwgeSwgeikgeworICB2YXIgZGlzdGFuY2UgPSBNYXRoLnNxcnQoeCAqIHgg
KyB5ICogeSArIHogKiB6KTsKKyAgZGlzdGFuY2UgPSBNYXRoLm1pbihkaXN0YW5jZSwgcGFubmVy
Lm1heERpc3RhbmNlKTsKKyAgdmFyIHJvbGxvZmYgPSBwYW5uZXIucm9sbG9mZkZhY3RvcjsKKyAg
dmFyIGdhaW4gPSBwYW5uZXIucmVmRGlzdGFuY2UgLyAocGFubmVyLnJlZkRpc3RhbmNlICsgcm9s
bG9mZiAqIChkaXN0YW5jZSAtIHBhbm5lci5yZWZEaXN0YW5jZSkpOworCisgIHJldHVybiBnYWlu
OworfQorCisvLyBUaGlzIGFycmF5IG11c3QgYmUgYXJyYW5nZWQgaW4gdGhlIG51bWVyaWMgb3Jk
ZXIgb2YgdGhlIGRpc3RhbmNlCisvLyBtb2RlbCB2YWx1ZXMuCit2YXIgZGlzdGFuY2VNb2RlbEZ1
bmN0aW9uID0gW2xpbmVhckRpc3RhbmNlLCBpbnZlcnNlRGlzdGFuY2UsIGV4cG9uZW50aWFsRGlz
dGFuY2VdOworCitmdW5jdGlvbiBjcmVhdGVHcmFwaChjb250ZXh0LCBkaXN0YW5jZU1vZGVsLCBu
b2RlQ291bnQpIHsKKyAgLy8gQ3JlYXRlIGFsbCB0aGUgc291cmNlcywgd2hpY2ggYXJlIGltcHVs
c2VzLgorICBidWZmZXJTb3VyY2UgPSBuZXcgQXJyYXkobm9kZUNvdW50KTsKKyAgZm9yICh2YXIg
ayA9IDA7IGsgPCBub2RlQ291bnQ7ICsraykgeworICAgIGJ1ZmZlclNvdXJjZVtrXSA9IGNvbnRl
eHQuY3JlYXRlQnVmZmVyU291cmNlKCk7CisgICAgaW1wdWxzZSA9IGNyZWF0ZUltcHVsc2VCdWZm
ZXIoY29udGV4dCwgcHVsc2VMZW5ndGhGcmFtZXMpOworICAgIGJ1ZmZlclNvdXJjZVtrXS5idWZm
ZXIgPSBpbXB1bHNlOworICB9CisKKyAgLy8gQ3JlYXRlIGFsbCB0aGUgcGFubmVycy4KKyAgLy8K
KyAgLy8gV2UgTVVTVCB1c2UgdGhlIEVRVUFMUE9XRVIgcGFubmluZyBtb2RlbCBzbyB0aGF0IHdl
IGNhbiBlYXNpbHkKKyAgLy8gZmlndXJlIG91dCB0aGUgZ2FpbiBpbnRyb2R1Y2VkIGJ5IHRoZSBw
YW5uZXIuCisgIC8vCisgIC8vIFdlIHdhbnQgdG8gc3RheSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBw
YW5uaW5nIHJhbmdlLCB3aGljaCBtZWFucworICAvLyB3ZSB3YW50IHRvIHN0YXkgb24gdGhlIHot
YXhpcy4gIElmIHdlIGRvbid0LCB0aGVuIHRoZSBlZmZlY3Qgb2YKKyAgLy8gcGFubmluZyBtb2Rl
bCB3aWxsIGJlIG11Y2ggbW9yZSBjb21wbGljYXRlZC4gIFdlJ3JlIG5vdCB0ZXN0aW5nCisgIC8v
IHRoZSBwYW5uZXIsIGJ1dCB0aGUgZGlzdGFuY2UgbW9kZWwsIHNvIHdlIHdhbnQgdGhlIHBhbm5l
ciBlZmZlY3QKKyAgLy8gdG8gYmUgc2ltcGxlLgorICBwYW5uZXIgPSBuZXcgQXJyYXkobm9kZUNv
dW50KTsKKyAgcG9zaXRpb24gPSBuZXcgQXJyYXkobm9kZUNvdW50KTsKKyAgZm9yICh2YXIgayA9
IDA7IGsgPCBub2RlQ291bnQ7ICsraykgeworICAgIHBhbm5lcltrXSA9IGNvbnRleHQuY3JlYXRl
UGFubmVyKCk7CisgICAgcGFubmVyW2tdLnBhbm5pbmdNb2RlbCA9IHBhbm5lci5FUVVBTFBPV0VS
OworICAgIHBhbm5lcltrXS5kaXN0YW5jZU1vZGVsID0gZGlzdGFuY2VNb2RlbDsKKyAgICAvLyBU
aGUgZGlzdGFuY2UgaXMgdW5pZm9ybSBzcGFjaW5nIGJldHdlZW4gdGhlIG1heCBhbmQgcmVmCisg
ICAgLy8gZGlzdGFuY2UuCisgICAgdmFyIGRpc3RhbmNlU3RlcCA9IChwYW5uZXJba10ubWF4RGlz
dGFuY2UgLSBwYW5uZXJba10ucmVmRGlzdGFuY2UpIC8gbm9kZUNvdW50OworICAgIHBvc2l0aW9u
W2tdID0gZGlzdGFuY2VTdGVwICogayArIHBhbm5lcltrXS5yZWZEaXN0YW5jZTsKKyAgICBwYW5u
ZXJba10uc2V0UG9zaXRpb24oMCwgMCwgcG9zaXRpb25ba10pOworICB9CisKKyAgLy8gQ29ubmVj
dCB0aGUgc291cmNlcyBhbmQgcGFubmVycy4KKyAgZm9yICh2YXIgayA9IDA7IGsgPCBub2RlQ291
bnQ7ICsraykgeworICAgIGJ1ZmZlclNvdXJjZVtrXS5jb25uZWN0KHBhbm5lcltrXSk7CisgICAg
cGFubmVyW2tdLmNvbm5lY3QoY29udGV4dC5kZXN0aW5hdGlvbik7CisgIH0KK30KKworZnVuY3Rp
b24gc3RhcnRTb3VyY2VzKCkgeworICAvLyBUdXJuIG9uIGVhY2ggc291cmNlIGF0IHVuaWZvcm0g
aW50ZXJ2YWxzLgorICB0aW1lID0gbmV3IEFycmF5KG5vZGVzVG9DcmVhdGUpOworICBmb3IgKHZh
ciBrID0gMDsgayA8IG5vZGVzVG9DcmVhdGU7ICsraykgeworICAgIHRpbWVba10gPSBrICogdGlt
ZVN0ZXA7CisgICAgYnVmZmVyU291cmNlW2tdLm5vdGVPbih0aW1lW2tdKTsKKyAgfQorfQorCisv
LyBkaXN0YW5jZU1vZGVsIHNob3VsZCBiZSB0aGUgZGlzdGFuY2UgbW9kZWwgY29uc3RhbnQgbGlr
ZQorLy8gTElORUFSX0RJU1RBTkNFLCBJTlZFUlNFX0RJU1RBTkNFLCBhbmQgRVhQT05FTlRJQUxf
RElTVEFOQ0UuICBUaGUKKy8vIGV4cGVjdGVkTW9kZWwgaXMgdGhlIGV4cGVjdGVkIGFjdHVhbCBu
dW1lcmljIHZhbHVlIG9mIHRoZSBjb25zdGFudC4KK2Z1bmN0aW9uIGNyZWF0ZVRlc3RBbmRSdW4o
Y29udGV4dCwgZGlzdGFuY2VNb2RlbCwgZXhwZWN0ZWRNb2RlbCwgdGhyZXNob2xkKSB7CisgIGNy
ZWF0ZUdyYXBoKGNvbnRleHQsIGRpc3RhbmNlTW9kZWwsIG5vZGVzVG9DcmVhdGUpOworICBzdGFy
dFNvdXJjZXMoKTsKKworICBjb250ZXh0Lm9uY29tcGxldGUgPSBjaGVja0Rpc3RhbmNlUmVzdWx0
KGRpc3RhbmNlTW9kZWwsIGV4cGVjdGVkTW9kZWwsIHRocmVzaG9sZCwgZmFsc2UpOworICBjb250
ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7Cit9CisKKy8vIFRoZSBnYWluIGNhdXNlZCBieSB0aGUgRVFV
QUxQT1dFUiBwYW5uaW5nIG1vZGVsLCBpZiB3ZSBzdGF5IG9uIHRoZQorLy8geiBheGlzLCB3aXRo
IHRoZSBkZWZhdWx0IG9yaWVudGF0aW9ucy4KK2Z1bmN0aW9uIGVxdWFsUG93ZXJHYWluKCkgewor
ICByZXR1cm4gTWF0aC5TUVJUMV8yOworfQorCitmdW5jdGlvbiBjaGVja0Rpc3RhbmNlUmVzdWx0
KG1vZGVsLCBleHBlY3RlZE1vZGVsLCB0aHJlc2hvbGQsIGRlYnVnKSB7CisgIHJldHVybiBmdW5j
dGlvbihldmVudCkgeworICAgIHJlbmRlcmVkQnVmZmVyID0gZXZlbnQucmVuZGVyZWRCdWZmZXI7
CisgICAgcmVuZGVyZWREYXRhID0gcmVuZGVyZWRCdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7CisK
KyAgICB2YXIgc3VjY2VzcyA9IHRydWU7CisKKyAgICBpZiAobW9kZWwgPT0gZXhwZWN0ZWRNb2Rl
bCkgeworICAgICAgdGVzdFBhc3NlZCgiRGlzdGFuY2UgbW9kZWwgdmFsdWUgbWF0Y2hlZCBleHBl
Y3RlZCB2YWx1ZS4iKTsKKyAgICB9IGVsc2UgeworICAgICAgdGVzdFBhc3NlZCgiRGlzdGFuY2Ug
bW9kZWwgdmFsdWUgbWF0Y2hlZCBleHBlY3RlZCB2YWx1ZS4iKTsKKyAgICAgIHN1Y2Nlc3MgPSBm
YWxzZTsKKyAgICB9ICAgIAorCisgICAgLy8gTnVtYmVyIG9mIGltcHVsc2VzIHdlIGZvdW5kIGlu
IHRoZSByZW5kZXJlZCByZXN1bHQuCisgICAgdmFyIGltcHVsc2VDb3VudCA9IDA7CisgICAgLy8g
TWF4aW11bSByZWxhdGl2ZSBlcnJvciBpbiB0aGUgZ2FpbiBvZiB0aGUgaW1wdWxzZXMuCisgICAg
dmFyIG1heEVycm9yID0gMDsKKyAgICAvLyBOdW1iZXIgb2YgaW1wdWxzZXMgdGhhdCB3ZXJlIG5v
dCBhdCB0aGUgZXhwZWN0ZWQgbG9jYXRpb24uCisgICAgLy8gKEZvciBkZWJ1Z2dpbmcuKQorICAg
IHZhciB0aW1lRXJyb3JDb3VudCA9IDA7CisgICAgLy8gQXJyYXkgb2YgbG9jYXRpb25zIG9mIHRo
ZSBpbXB1bHNlcyB0aGF0IHdlcmUgbm90IGF0IHRoZQorICAgIC8vIGV4cGVjdGVkIGxvY2F0aW9u
LiAgKEZvciBkZWJ1Z2dpbmcuKQorICAgIHZhciB0aW1lRXJyb3JzID0gbmV3IEFycmF5KCk7CisK
KyAgICAvLyBTdGVwIHRocm91Z2ggdGhlIHJlbmRlcmVkIGRhdGEgdG8gZmluZCBhbGwgdGhlIG5v
bi16ZXJvIHBvaW50cworICAgIC8vIHNvIHdlIGNhbiBmaW5kIHdoZXJlIG91ciBpbXB1bHNlcyBh
cmUuCisgICAgZm9yICh2YXIgayA9IDA7IGsgPCByZW5kZXJlZERhdGEubGVuZ3RoOyArK2spIHsK
KyAgICAgIGlmIChyZW5kZXJlZERhdGFba10gIT0gMCkgeworICAgICAgICB2YXIgZGlzdGFuY2VG
dW5jdGlvbiA9IGRpc3RhbmNlTW9kZWxGdW5jdGlvbltwYW5uZXJbaW1wdWxzZUNvdW50XS5kaXN0
YW5jZU1vZGVsXTsKKyAgICAgICAgdmFyIGV4cGVjdGVkID0gZGlzdGFuY2VGdW5jdGlvbihwYW5u
ZXJbaW1wdWxzZUNvdW50XSwgMCwgMCwgcG9zaXRpb25baW1wdWxzZUNvdW50XSk7CisgICAgICAg
IGV4cGVjdGVkICo9IGVxdWFsUG93ZXJHYWluKCk7CisKKyAgICAgICAgdmFyIGVycm9yID0gTWF0
aC5hYnMocmVuZGVyZWREYXRhW2tdIC0gZXhwZWN0ZWQpL01hdGguYWJzKGV4cGVjdGVkKTsKKyAg
ICAgICAgaWYgKGRlYnVnKSB7CisgICAgICAgICAgY29uc29sZS5sb2coayArICI6ICIgKyByZW5k
ZXJlZERhdGFba10gKyAiIChleHBlY3RlZCAiICsgZXhwZWN0ZWQgKyAiLCByZWwgPSAiLCBlcnJv
ciArICIpIik7CisgICAgICAgIH0KKyAgICAgICAgbWF4RXJyb3IgPSBNYXRoLm1heChtYXhFcnJv
ciwgTWF0aC5hYnMoZXJyb3IpKTsKKyAgICAgICAgaWYgKGsgIT0gTWF0aC5yb3VuZChzYW1wbGVS
YXRlICogdGltZVtpbXB1bHNlQ291bnRdKSkgeworICAgICAgICAgIHRpbWVFcnJvcnNbdGltZUVy
cm9yQ291bnRdID0geyBhY3R1YWwgOiBrLCBleHBlY3RlZCA6IE1hdGgucm91bmQoc2FtcGxlUmF0
ZSAqIHRpbWVbaW1wdWxzZUNvdW50XSl9OworICAgICAgICAgICsrdGltZUVycm9yQ291bnQ7Cisg
ICAgICAgIH0KKyAgICAgICAgKytpbXB1bHNlQ291bnQ7CisgICAgICB9CisgICAgfQorCisgICAg
aWYgKGltcHVsc2VDb3VudCA9PSBub2Rlc1RvQ3JlYXRlKSB7CisgICAgICB0ZXN0UGFzc2VkKCJO
dW1iZXIgb2Ygbm9kZXMgaXMgY29ycmVjdC4iKTsKKyAgICB9IGVsc2UgeworICAgICAgdGVzdEZh
aWxlZCgiTnVtYmVyIG9mIG5vZGVzIGlzIGluY29ycmVjdC4gIChGb3VuZCAiICsgaW1wdWxzZUNv
dW50ICsgIiBidXQgZXhwZWN0ZWQgIiArIG5vZGVzVG9DcmVhdGUgKyAiKSIpOworICAgICAgc3Vj
Y2VzcyA9IGZhbHNlOworICAgIH0KKworICAgIGlmIChtYXhFcnJvciA8PSB0aHJlc2hvbGQpIHsK
KyAgICAgIHRlc3RQYXNzZWQoIkRpc3RhbmNlIGdhaW5zIGFyZSBjb3JyZWN0LiIpOworICAgIH0g
ZWxzZSB7CisgICAgICB0ZXN0RmFpbGVkKCJEaXN0YW5jZSBnYWlucyBhcmUgaW5jb3JyZWN0LiAg
TWF4IHJlbCBlcnJvciA9ICIgKyBtYXhFcnJvciArICIgKHRocmVzaG9sZCA9ICIgKyB0aHJlc2hv
bGQgKyAiKSIpOworICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgIH0KKworICAgIC8vIEZvciBk
ZWJ1Z2dpbmcuICBJdCBzZWVtcyBzb21lIGltcHVsc2VzIGRvbid0IHNob3cgdXAgYXQgZXhhY3Rs
eQorICAgIC8vIHRoZSBleHBlY3RlZCByZW5kZXJlZCBsb2NhdGlvbi4gIExvZyB0aGVzZSB0byB0
aGUgY29uc29sZSBpZgorICAgIC8vIGRlYnVnZ2luZyBpcyB0cnVlLgorICAgIC8vCisgICAgLy8g
RklYTUU6ICBGaWxlIGEgYnVnIGFib3V0IHRoaXMuCisgICAgaWYgKGRlYnVnICYmIHRpbWVFcnJv
cnMubGVuZ3RoID4gMCkgeworICAgICAgY29uc29sZS5sb2codGltZUVycm9ycy5sZW5ndGggKyAi
IHRpbWluZyBlcnJvcnMgZm91bmQiKTsKKyAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGltZUVy
cm9ycy5sZW5ndGg7ICsraykgeworICAgICAgICBjb25zb2xlLmxvZygiU2FtcGxlICIgKyB0aW1l
RXJyb3JzW2tdLmFjdHVhbCArICIgYnV0IGV4cGVjdGVkICIgKyB0aW1lRXJyb3JzW2tdLmV4cGVj
dGVkKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc3VjY2VzcykgeworICAgICAgdGVzdFBh
c3NlZCgiRGlzdGFuY2UgdGVzdCBwYXNzZWQgZm9yIGRpc3RhbmNlIG1vZGVsICIgKyBtb2RlbCk7
CisgICAgfSBlbHNlIHsKKyAgICAgIHRlc3RGYWlsZWQoIkRpc3RhbmNlIHRlc3QgZmFpbGVkIGZv
ciBkaXN0YW5jZSBtb2RlbCAiICsgbW9kZWwpOworICAgIH0KKworICAgIGZpbmlzaEpTVGVzdCgp
OworICB9Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122089</attachid>
            <date>2012-01-11 13:49:48 -0800</date>
            <delta_ts>2012-01-30 16:00:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74273-20120111134947.patch</filename>
            <type>text/plain</type>
            <size>18335</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2IzOGMyNzNlOWI2MTRl
MTYxYjJhZDNhZTUxZjUzNGEzYzgwM2E3OC4uOTBmZTM0OTE2MjNlMGI1MzFkODMxZmE5NWM2NTFk
OTNlMGY1N2RlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAxLTA5ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBDb25zdGFudCB2YWx1ZXMgdG8g
c2V0ICJkaXN0YW5jZU1vZGVsIiBhcmUgdW5kZWZpbmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDI3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiB3ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVu
dGlhbC5odG1sCisgICAgICAgICAgICAgICB3ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLmh0bWwK
KyAgICAgICAgICAgICAgIHdlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci5odG1sCisKKyAgICAgICAg
KiB3ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaDogRGVmaW5lIGVudW0gZm9yIHRoZSBuZXcgY29u
c3RhbnRzCisgICAgICAgIGZvciB0aGUgZGlzdGFuY2UgbW9kZWxzLgorICAgICAgICAqIHdlYmF1
ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGw6IERlZmluZSBtYXRjaGluZyBjb25zdGFudHMgZm9yIHRo
ZQorICAgICAgICBkaXN0YW5jZSBtb2RlbHMuCisKIDIwMTItMDEtMDkgIFJvYiBCdWlzICA8cmJ1
aXNAcmltLmNvbT4KIAogICAgICAgICBVcHN0cmVhbSBjaGFuZ2UgdG8gZGlzYWJsZSBpbnB1dFtj
b2xvcl0gY3NzIHJ1bGVzIGZvciBCbGFja0JlcnJ5IHBvcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9QYW5uZXJOb2RlLmgKaW5kZXggNmVjZWJlYWFlMzFjYTdkYWMzODU3OWYxZDVhMDM1
ZGUzNzIyY2YxMS4uNDBiZTcxNzAyODY4MWU3ODg3YTk0OGQ4ZGJkZWNkM2UyZDliNDI2ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmgKQEAgLTUzLDYgKzUzLDE0
IEBAIHB1YmxpYzoKICAgICAgICAgU09VTkRGSUVMRCA9IDIsCiAgICAgfTsKIAorICAgIC8vIFRo
ZXNlIG11c3QgYmUgZGVmaW5lZCBhcyBpbiB0aGUgLmlkbCBmaWxlIGFuZCBtdXN0IG1hdGNoIHRo
b3NlCisgICAgLy8gaW4gdGhlIERpc3RhbmNlRWZmZWN0IGNsYXNzLgorICAgIGVudW0geworICAg
ICAgICBMSU5FQVJfRElTVEFOQ0UgPSAwLAorICAgICAgICBJTlZFUlNFX0RJU1RBTkNFID0gMSwK
KyAgICAgICAgRVhQT05FTlRJQUxfRElTVEFOQ0UgPSAyLAorICAgIH07CisgICAgCiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8QXVkaW9QYW5uZXJOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiBjb250
ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBBdWRpb1Bhbm5lck5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwKaW5kZXggMmRiMDkzZDdiNTAzYWExZTljYzQ1
ZjY0YTcxN2EwYzE4NDRiYWRkNy4uNTk3YTNlYWRmYmFjOWU3NmJhOWRhNzQyMzNiZTE1YjlkNzQy
NTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2Rl
LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaWRsCkBA
IC0zMyw2ICszMywxMSBAQCBtb2R1bGUgYXVkaW8gewogICAgICAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCBIUlRGID0gMTsKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgU09VTkRGSUVMRCA9
IDI7CiAKKyAgICAgICAgLy8gRGlzdGFuY2UgbW9kZWwKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
c2hvcnQgTElORUFSX0RJU1RBTkNFID0gMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
SU5WRVJTRV9ESVNUQU5DRSA9IDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEVYUE9O
RU5USUFMX0RJU1RBTkNFID0gMjsKKwogICAgICAgICAvLyBEZWZhdWx0IG1vZGVsIGZvciBzdGVy
ZW8gaXMgSFJURiAKICAgICAgICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgcGFubmluZ01vZGVs
OyAvLyBGSVhNRTogdXNlIHVuc2lnbmVkIHNob3J0IHdoZW4gZ2x1ZSBnZW5lcmF0aW9uIHN1cHBv
cnRzIGl0CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwppbmRleCA0Yzg1OTVhY2Y2NGU3OGEwNzU2Nzk5MjI0ZWE4ODM1YmM5MTYwN2Iz
Li45M2ZlOTY0NzIzOTRiN2IyYWNjM2U1MDlmY2UwNDRiZmQ5YjFkODEzIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMjcgQEAKKzIwMTItMDEtMDkgIFJheW1vbmQgVG95ICA8cnRveUBnb29nbGUuY29tPgorCisg
ICAgICAgIENvbnN0YW50IHZhbHVlcyB0byBzZXQgImRpc3RhbmNlTW9kZWwiIGFyZSB1bmRlZmlu
ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0Mjcz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3ZWJh
dWRpby9kaXN0YW5jZS1leHBvbmVudGlhbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHdlYmF1ZGlvL2Rpc3RhbmNlLWV4cG9uZW50aWFsLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdl
YmF1ZGlvL2Rpc3RhbmNlLWludmVyc2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3
ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlv
L2Rpc3RhbmNlLWxpbmVhci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlv
L2Rpc3RhbmNlLWxpbmVhci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9yZXNvdXJj
ZXMvZGlzdGFuY2UtbW9kZWwtdGVzdGluZy5qczogQWRkZWQuCisgICAgICAgIChjcmVhdGVJbXB1
bHNlQnVmZmVyKToKKyAgICAgICAgKGxpbmVhckRpc3RhbmNlKToKKyAgICAgICAgKGV4cG9uZW50
aWFsRGlzdGFuY2UpOgorICAgICAgICAoaW52ZXJzZURpc3RhbmNlKToKKyAgICAgICAgKGNyZWF0
ZUdyYXBoKToKKyAgICAgICAgKHN0YXJ0U291cmNlcyk6CisgICAgICAgIChlcXVhbFBvd2VyR2Fp
bik6CisgICAgICAgIChjaGVja0Rpc3RhbmNlUmVzdWx0LnJldHVybi5yZW5kZXJlZEJ1ZmZlcik6
CisgICAgICAgIChjaGVja0Rpc3RhbmNlUmVzdWx0KToKKwogMjAxMi0wMS0wOSAgRG1pdHJ5IFRp
dG92ICA8ZGltaWNoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFVucmV2aWV3
ZWQgdXBkYXRlIGZvciB0ZXN0X2V4cGVjdGF0aW9ucy50eHQuCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVudGlhbC1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVudGlhbC1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZGU0MjUzNDAyYmYyNDNmNDVmYmM3ZTg5OWIwYjMxNjA2MDFkZjVkYwotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWV4cG9uZW50aWFsLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDEyIEBACitUZXN0IGV4cG9uZW50aWFsIGRpc3RhbmNlIG1vZGVsIG9m
IEF1ZGlvUGFubmVyTm9kZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIERp
c3RhbmNlIG1vZGVsIHZhbHVlIG1hdGNoZWQgZXhwZWN0ZWQgdmFsdWUuCitQQVNTIE51bWJlciBv
ZiBub2RlcyBpcyBjb3JyZWN0LgorUEFTUyBEaXN0YW5jZSBnYWlucyBhcmUgY29ycmVjdC4KK1BB
U1MgRGlzdGFuY2UgdGVzdCBwYXNzZWQgZm9yIGRpc3RhbmNlIG1vZGVsIDIKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVudGlhbC5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vZGlzdGFuY2UtZXhwb25lbnRpYWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZTk1MTM1OWFk
Y2ZjNTM1YWVmNzIzMDNkOGFiOWZlOGI5Y2E2YTNiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtZXhwb25lbnRpYWwuaHRtbApAQCAtMCwwICsxLDQzIEBA
Cis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9u
YWwvL0VOIj4KKzxodG1sPgorICA8aGVhZD4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+CisgICAgPHNjcmlw
dCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZGlzdGFuY2UtbW9kZWwtdGVzdGluZy5qcyI+PC9zY3Jp
cHQ+CisgIDwvaGVhZD4KKworICA8Ym9keT4KKyAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9k
aXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKyAgICA8c2NyaXB0PgorICAgICAg
ZGVzY3JpcHRpb24oIlRlc3QgZXhwb25lbnRpYWwgZGlzdGFuY2UgbW9kZWwgb2YgQXVkaW9QYW5u
ZXJOb2RlLiIpOworCisgICAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgd2luZG93LmpzVGVz
dElzQXN5bmMgPSB0cnVlOworCisgICAgICAgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29u
dGV4dC4KKyAgICAgICAgICBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1w
bGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisKKyAgICAgICAgICAv
LyBUaHJlc2hvbGQgZXhwZXJpbWVudGFsbHkgZGV0ZXJtaW5lZC4KKyAgICAgICAgICB2YXIgdGhy
ZXNob2xkID0gMS4zZS03OworCisgICAgICAgICAgLy8gVGVtcCBwYW5uZXIgbm9kZSBzbyB3ZSBj
YW4gZ2V0IHRoZSBFWFBPTkVOVElBTF9ESVNUQU5DRSB2YWx1ZS4KKyAgICAgICAgICB2YXIgdGVt
cFBhbm5lciA9IGNvbnRleHQuY3JlYXRlUGFubmVyKCk7CisgICAgICAgICAgY3JlYXRlVGVzdEFu
ZFJ1bihjb250ZXh0LCB0ZW1wUGFubmVyLkVYUE9ORU5USUFMX0RJU1RBTkNFLCAyLCB0aHJlc2hv
bGQpOworICAgICAgfQorCisgICAgICBydW5UZXN0KCk7CisgICAgICBzdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOworCisgICAgPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorICA8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWludmVyc2UtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmYwNTMyYmZlZDRkZGRiNDA1ZGI1MThkZjhlZmExMGUxODE2M2VmYTAKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBACitUZXN0IGludmVyc2UgZGlzdGFuY2UgbW9kZWwg
b2YgQXVkaW9QYW5uZXJOb2RlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1Mg
RGlzdGFuY2UgbW9kZWwgdmFsdWUgbWF0Y2hlZCBleHBlY3RlZCB2YWx1ZS4KK1BBU1MgTnVtYmVy
IG9mIG5vZGVzIGlzIGNvcnJlY3QuCitQQVNTIERpc3RhbmNlIGdhaW5zIGFyZSBjb3JyZWN0Lgor
UEFTUyBEaXN0YW5jZSB0ZXN0IHBhc3NlZCBmb3IgZGlzdGFuY2UgbW9kZWwgMQorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWludmVyc2UuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmF1ZGlvL2Rpc3RhbmNlLWludmVyc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NzQ3NzNjYjE5YTQ0NTRk
NzlmOTdjNjA1MjM2NDAyMjVhNDAwZWNjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vZGlzdGFuY2UtaW52ZXJzZS5odG1sCkBAIC0wLDAgKzEsNDMgQEAKKzwhRE9DVFlQ
RSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgor
PGh0bWw+CisgIDxoZWFkPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKyAgICA8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9InJlc291cmNlcy9kaXN0YW5jZS1tb2RlbC10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKyAgPC9o
ZWFkPgorCisgIDxib2R5PgorICAgIDxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKyAgICA8
ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworICAgIDxzY3JpcHQ+CisgICAgICBkZXNjcmlwdGlv
bigiVGVzdCBpbnZlcnNlIGRpc3RhbmNlIG1vZGVsIG9mIEF1ZGlvUGFubmVyTm9kZS4iKTsKKwor
ICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9u
ZSgpOworICAgICAgICAgIH0KKworICAgICAgICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1
ZTsKKworICAgICAgICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuCisgICAgICAg
ICAgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgc2FtcGxlUmF0ZSAqIHJlbmRl
ckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOworCisgICAgICAgICAgLy8gVGhyZXNob2xkIGV4
cGVyaW1lbnRhbGx5IGRldGVybWluZWQuCisgICAgICAgICAgdmFyIHRocmVzaG9sZCA9IDEuM2Ut
NzsKKworICAgICAgICAgIC8vIFRlbXAgcGFubmVyIG5vZGUgc28gd2UgY2FuIGdldCB0aGUgSU5W
RVJTRV9ESVNUQU5DRSB2YWx1ZS4KKyAgICAgICAgICB2YXIgdGVtcFBhbm5lciA9IGNvbnRleHQu
Y3JlYXRlUGFubmVyKCk7CisgICAgICAgICAgY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCB0ZW1w
UGFubmVyLklOVkVSU0VfRElTVEFOQ0UsIDEsIHRocmVzaG9sZCk7CisgICAgICB9CisKKyAgICAg
IHJ1blRlc3QoKTsKKyAgICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKyAgICA8L3Nj
cmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJh
dWRpby9kaXN0YW5jZS1saW5lYXItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjMjcxNzc2YTYz
YmRhNjI1NTBjZTkyZGUzYTQzYjVlZGNlYTk2ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1saW5lYXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIg
QEAKK1Rlc3QgbGluZWFyIGRpc3RhbmNlIG1vZGVsIG9mIEF1ZGlvUGFubmVyTm9kZS4KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIERpc3RhbmNlIG1vZGVsIHZhbHVlIG1hdGNo
ZWQgZXhwZWN0ZWQgdmFsdWUuCitQQVNTIE51bWJlciBvZiBub2RlcyBpcyBjb3JyZWN0LgorUEFT
UyBEaXN0YW5jZSBnYWlucyBhcmUgY29ycmVjdC4KK1BBU1MgRGlzdGFuY2UgdGVzdCBwYXNzZWQg
Zm9yIGRpc3RhbmNlIG1vZGVsIDAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5j
ZS1saW5lYXIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmQzNWUwNmE4MDUwZmYwNDVkZDg1MjgwMGVhNDExZTM1MmVkNWIzNTgKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1saW5lYXIuaHRt
bApAQCAtMCwwICsxLDQwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhU
TUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorICA8aGVhZD4KKyAgICA8bGluayBy
ZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIi8+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZGlzdGFuY2UtbW9kZWwt
dGVzdGluZy5qcyI+PC9zY3JpcHQ+CisgIDwvaGVhZD4KKworICA8Ym9keT4KKyAgICA8ZGl2IGlk
PSJkZXNjcmlwdGlvbiI+PC9kaXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKyAg
ICA8c2NyaXB0PgorICAgICAgZGVzY3JpcHRpb24oIlRlc3QgbGluZWFyIGRpc3RhbmNlIG1vZGVs
IG9mIEF1ZGlvUGFubmVyTm9kZS4iKTsKKworICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAg
ICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgIH0KKworICAgICAgICAg
IHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworICAgICAgICAgIC8vIFRocmVzaG9sZCBl
eHBlcmltZW50YWxseSBkZXRlcm1pbmVkLgorICAgICAgICAgIHZhciB0aHJlc2hvbGQgPSAyLjNl
LTY7CisgICAgICAgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dC4KKyAgICAgICAg
ICBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1wbGVSYXRlICogcmVuZGVy
TGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisgICAgICAgICAgdmFyIHBhbm5lck1vZGVsID0g
Y29udGV4dC5jcmVhdGVQYW5uZXIoKTsKKyAgICAgICAgICBjcmVhdGVUZXN0QW5kUnVuKGNvbnRl
eHQsIHBhbm5lck1vZGVsLkxJTkVBUl9ESVNUQU5DRSwgMCwgdGhyZXNob2xkKTsKKyAgICAgIH0K
KworICAgICAgcnVuVGVzdCgpOworICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKwor
ICAgIDwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2Rpc3RhbmNlLW1vZGVsLXRlc3RpbmcuanMgYi9M
YXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvZGlzdGFuY2UtbW9kZWwtdGVzdGluZy5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41MGVjMGM0ZWZjNWRiNDgwMzlhN2ZlZDg3ZTUxMGM3N2U3NTY4YjliCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2Rpc3RhbmNlLW1v
ZGVsLXRlc3RpbmcuanMKQEAgLTAsMCArMSwyMTIgQEAKK3ZhciBzYW1wbGVSYXRlID0gNDQxMDAu
MDsKKwordmFyIHJlbmRlckxlbmd0aFNlY29uZHMgPSA4OwordmFyIHB1bHNlTGVuZ3RoU2Vjb25k
cyA9IDE7Cit2YXIgcHVsc2VMZW5ndGhGcmFtZXMgPSBwdWxzZUxlbmd0aFNlY29uZHMgKiBzYW1w
bGVSYXRlOworCisvLyBIb3cgbWFueSBwYW5uZXIgbm9kZXMgdG8gY3JlYXRlIGZvciB0aGUgdGVz
dAordmFyIG5vZGVzVG9DcmVhdGUgPSAxMDA7CisKKy8vIFRpbWUgc3RlcCB3aGVuIGVhY2ggcGFu
bmVyIG5vZGUgc3RhcnRzLgordmFyIHRpbWVTdGVwID0gMC4wNTsKKworLy8gR2xvYmFscyB0byBt
YWtlIGRlYnVnZ2luZyBhIGxpdHRsZSBlYXNpZXIuCit2YXIgY29udGV4dDsKK3ZhciBpbXB1bHNl
OwordmFyIGJ1ZmZlclNvdXJjZTsKK3ZhciBwYW5uZXI7Cit2YXIgcG9zaXRpb247Cit2YXIgdGlt
ZTsKKyAgICAgIAorZnVuY3Rpb24gY3JlYXRlSW1wdWxzZUJ1ZmZlcihjb250ZXh0LCBzYW1wbGVG
cmFtZUxlbmd0aCkgeworICB2YXIgYXVkaW9CdWZmZXIgPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlcigx
LCBzYW1wbGVGcmFtZUxlbmd0aCwgY29udGV4dC5zYW1wbGVSYXRlKTsKKyAgdmFyIG4gPSBhdWRp
b0J1ZmZlci5sZW5ndGg7CisgIHZhciBkYXRhID0gYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEo
MCk7CisKKyAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyArK2spIHsKKyAgICBkYXRhW2tdID0gMDsK
KyAgfQorICBkYXRhWzBdID0gMTsKKworICByZXR1cm4gYXVkaW9CdWZmZXI7Cit9CisKKy8vIEZv
ciB0aGUgcmVjb3JkLCB0aGVzZSBkaXN0YW5jZSBmb3JtdWxhcyB3ZXJlIHRha2VuIGZyb20gdGhl
IE9wZW5BTAorLy8gc3BlYywgbm90IHRoZSBjb2RlLgorZnVuY3Rpb24gbGluZWFyRGlzdGFuY2Uo
cGFubmVyLCB4LCB5LCB6KSB7CisgIHZhciBkaXN0YW5jZSA9IE1hdGguc3FydCh4ICogeCArIHkg
KiB5ICsgeiAqIHopOworICBkaXN0YW5jZSA9IE1hdGgubWluKGRpc3RhbmNlLCBwYW5uZXIubWF4
RGlzdGFuY2UpOworICB2YXIgcm9sbG9mZiA9IHBhbm5lci5yb2xsb2ZmRmFjdG9yOworICB2YXIg
Z2FpbiA9ICgxIC0gcm9sbG9mZiAqIChkaXN0YW5jZSAtIHBhbm5lci5yZWZEaXN0YW5jZSkgLyAo
cGFubmVyLm1heERpc3RhbmNlIC0gcGFubmVyLnJlZkRpc3RhbmNlKSk7CisKKyAgcmV0dXJuIGdh
aW47Cit9CisKK2Z1bmN0aW9uIGV4cG9uZW50aWFsRGlzdGFuY2UocGFubmVyLCB4LCB5LCB6KSB7
CisgIHZhciBkaXN0YW5jZSA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopOworICBk
aXN0YW5jZSA9IE1hdGgubWluKGRpc3RhbmNlLCBwYW5uZXIubWF4RGlzdGFuY2UpOworICB2YXIg
cm9sbG9mZiA9IHBhbm5lci5yb2xsb2ZmRmFjdG9yOworICB2YXIgZ2FpbiA9IE1hdGgucG93KGRp
c3RhbmNlIC8gcGFubmVyLnJlZkRpc3RhbmNlLCAtcm9sbG9mZik7CisKKyAgcmV0dXJuIGdhaW47
Cit9CisKK2Z1bmN0aW9uIGludmVyc2VEaXN0YW5jZShwYW5uZXIsIHgsIHksIHopIHsKKyAgdmFy
IGRpc3RhbmNlID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeik7CisgIGRpc3RhbmNl
ID0gTWF0aC5taW4oZGlzdGFuY2UsIHBhbm5lci5tYXhEaXN0YW5jZSk7CisgIHZhciByb2xsb2Zm
ID0gcGFubmVyLnJvbGxvZmZGYWN0b3I7CisgIHZhciBnYWluID0gcGFubmVyLnJlZkRpc3RhbmNl
IC8gKHBhbm5lci5yZWZEaXN0YW5jZSArIHJvbGxvZmYgKiAoZGlzdGFuY2UgLSBwYW5uZXIucmVm
RGlzdGFuY2UpKTsKKworICByZXR1cm4gZ2FpbjsKK30KKworLy8gVGhpcyBhcnJheSBtdXN0IGJl
IGFycmFuZ2VkIGluIHRoZSBudW1lcmljIG9yZGVyIG9mIHRoZSBkaXN0YW5jZQorLy8gbW9kZWwg
dmFsdWVzLgordmFyIGRpc3RhbmNlTW9kZWxGdW5jdGlvbiA9IFtsaW5lYXJEaXN0YW5jZSwgaW52
ZXJzZURpc3RhbmNlLCBleHBvbmVudGlhbERpc3RhbmNlXTsKKworZnVuY3Rpb24gY3JlYXRlR3Jh
cGgoY29udGV4dCwgZGlzdGFuY2VNb2RlbCwgbm9kZUNvdW50KSB7CisgIC8vIENyZWF0ZSBhbGwg
dGhlIHNvdXJjZXMsIHdoaWNoIGFyZSBpbXB1bHNlcy4KKyAgYnVmZmVyU291cmNlID0gbmV3IEFy
cmF5KG5vZGVDb3VudCk7CisgIGZvciAodmFyIGsgPSAwOyBrIDwgbm9kZUNvdW50OyArK2spIHsK
KyAgICBidWZmZXJTb3VyY2Vba10gPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOworICAg
IGltcHVsc2UgPSBjcmVhdGVJbXB1bHNlQnVmZmVyKGNvbnRleHQsIHB1bHNlTGVuZ3RoRnJhbWVz
KTsKKyAgICBidWZmZXJTb3VyY2Vba10uYnVmZmVyID0gaW1wdWxzZTsKKyAgfQorCisgIC8vIENy
ZWF0ZSBhbGwgdGhlIHBhbm5lcnMuCisgIC8vCisgIC8vIFdlIE1VU1QgdXNlIHRoZSBFUVVBTFBP
V0VSIHBhbm5pbmcgbW9kZWwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5CisgIC8vIGZpZ3VyZSBvdXQg
dGhlIGdhaW4gaW50cm9kdWNlZCBieSB0aGUgcGFubmVyLgorICAvLworICAvLyBXZSB3YW50IHRv
IHN0YXkgaW4gdGhlIG1pZGRsZSBvZiB0aGUgcGFubmluZyByYW5nZSwgd2hpY2ggbWVhbnMKKyAg
Ly8gd2Ugd2FudCB0byBzdGF5IG9uIHRoZSB6LWF4aXMuICBJZiB3ZSBkb24ndCwgdGhlbiB0aGUg
ZWZmZWN0IG9mCisgIC8vIHBhbm5pbmcgbW9kZWwgd2lsbCBiZSBtdWNoIG1vcmUgY29tcGxpY2F0
ZWQuICBXZSdyZSBub3QgdGVzdGluZworICAvLyB0aGUgcGFubmVyLCBidXQgdGhlIGRpc3RhbmNl
IG1vZGVsLCBzbyB3ZSB3YW50IHRoZSBwYW5uZXIgZWZmZWN0CisgIC8vIHRvIGJlIHNpbXBsZS4K
KyAgcGFubmVyID0gbmV3IEFycmF5KG5vZGVDb3VudCk7CisgIHBvc2l0aW9uID0gbmV3IEFycmF5
KG5vZGVDb3VudCk7CisgIGZvciAodmFyIGsgPSAwOyBrIDwgbm9kZUNvdW50OyArK2spIHsKKyAg
ICBwYW5uZXJba10gPSBjb250ZXh0LmNyZWF0ZVBhbm5lcigpOworICAgIHBhbm5lcltrXS5wYW5u
aW5nTW9kZWwgPSBwYW5uZXIuRVFVQUxQT1dFUjsKKyAgICBwYW5uZXJba10uZGlzdGFuY2VNb2Rl
bCA9IGRpc3RhbmNlTW9kZWw7CisgICAgLy8gVGhlIGRpc3RhbmNlIGlzIHVuaWZvcm0gc3BhY2lu
ZyBiZXR3ZWVuIHRoZSBtYXggYW5kIHJlZgorICAgIC8vIGRpc3RhbmNlLgorICAgIHZhciBkaXN0
YW5jZVN0ZXAgPSAocGFubmVyW2tdLm1heERpc3RhbmNlIC0gcGFubmVyW2tdLnJlZkRpc3RhbmNl
KSAvIG5vZGVDb3VudDsKKyAgICBwb3NpdGlvbltrXSA9IGRpc3RhbmNlU3RlcCAqIGsgKyBwYW5u
ZXJba10ucmVmRGlzdGFuY2U7CisgICAgcGFubmVyW2tdLnNldFBvc2l0aW9uKDAsIDAsIHBvc2l0
aW9uW2tdKTsKKyAgfQorCisgIC8vIENvbm5lY3QgdGhlIHNvdXJjZXMgYW5kIHBhbm5lcnMuCisg
IGZvciAodmFyIGsgPSAwOyBrIDwgbm9kZUNvdW50OyArK2spIHsKKyAgICBidWZmZXJTb3VyY2Vb
a10uY29ubmVjdChwYW5uZXJba10pOworICAgIHBhbm5lcltrXS5jb25uZWN0KGNvbnRleHQuZGVz
dGluYXRpb24pOworICB9Cit9CisKK2Z1bmN0aW9uIHN0YXJ0U291cmNlcygpIHsKKyAgLy8gVHVy
biBvbiBlYWNoIHNvdXJjZSBhdCB1bmlmb3JtIGludGVydmFscy4KKyAgdGltZSA9IG5ldyBBcnJh
eShub2Rlc1RvQ3JlYXRlKTsKKyAgZm9yICh2YXIgayA9IDA7IGsgPCBub2Rlc1RvQ3JlYXRlOyAr
K2spIHsKKyAgICB0aW1lW2tdID0gayAqIHRpbWVTdGVwOworICAgIGJ1ZmZlclNvdXJjZVtrXS5u
b3RlT24odGltZVtrXSk7CisgIH0KK30KKworLy8gZGlzdGFuY2VNb2RlbCBzaG91bGQgYmUgdGhl
IGRpc3RhbmNlIG1vZGVsIGNvbnN0YW50IGxpa2UKKy8vIExJTkVBUl9ESVNUQU5DRSwgSU5WRVJT
RV9ESVNUQU5DRSwgYW5kIEVYUE9ORU5USUFMX0RJU1RBTkNFLiAgVGhlCisvLyBleHBlY3RlZE1v
ZGVsIGlzIHRoZSBleHBlY3RlZCBhY3R1YWwgbnVtZXJpYyB2YWx1ZSBvZiB0aGUgY29uc3RhbnQu
CitmdW5jdGlvbiBjcmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsIGRpc3RhbmNlTW9kZWwsIGV4cGVj
dGVkTW9kZWwsIHRocmVzaG9sZCkgeworICBjcmVhdGVHcmFwaChjb250ZXh0LCBkaXN0YW5jZU1v
ZGVsLCBub2Rlc1RvQ3JlYXRlKTsKKyAgc3RhcnRTb3VyY2VzKCk7CisKKyAgY29udGV4dC5vbmNv
bXBsZXRlID0gY2hlY2tEaXN0YW5jZVJlc3VsdChkaXN0YW5jZU1vZGVsLCBleHBlY3RlZE1vZGVs
LCB0aHJlc2hvbGQsIGZhbHNlKTsKKyAgY29udGV4dC5zdGFydFJlbmRlcmluZygpOworfQorCisv
LyBUaGUgZ2FpbiBjYXVzZWQgYnkgdGhlIEVRVUFMUE9XRVIgcGFubmluZyBtb2RlbCwgaWYgd2Ug
c3RheSBvbiB0aGUKKy8vIHogYXhpcywgd2l0aCB0aGUgZGVmYXVsdCBvcmllbnRhdGlvbnMuCitm
dW5jdGlvbiBlcXVhbFBvd2VyR2FpbigpIHsKKyAgcmV0dXJuIE1hdGguU1FSVDFfMjsKK30KKwor
ZnVuY3Rpb24gY2hlY2tEaXN0YW5jZVJlc3VsdChtb2RlbCwgZXhwZWN0ZWRNb2RlbCwgdGhyZXNo
b2xkLCBkZWJ1ZykgeworICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICByZW5kZXJlZEJ1
ZmZlciA9IGV2ZW50LnJlbmRlcmVkQnVmZmVyOworICAgIHJlbmRlcmVkRGF0YSA9IHJlbmRlcmVk
QnVmZmVyLmdldENoYW5uZWxEYXRhKDApOworCisgICAgdmFyIHN1Y2Nlc3MgPSB0cnVlOworCisg
ICAgaWYgKG1vZGVsID09IGV4cGVjdGVkTW9kZWwpIHsKKyAgICAgIHRlc3RQYXNzZWQoIkRpc3Rh
bmNlIG1vZGVsIHZhbHVlIG1hdGNoZWQgZXhwZWN0ZWQgdmFsdWUuIik7CisgICAgfSBlbHNlIHsK
KyAgICAgIHRlc3RQYXNzZWQoIkRpc3RhbmNlIG1vZGVsIHZhbHVlIG1hdGNoZWQgZXhwZWN0ZWQg
dmFsdWUuIik7CisgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgfSAgICAKKworICAgIC8vIE51
bWJlciBvZiBpbXB1bHNlcyB3ZSBmb3VuZCBpbiB0aGUgcmVuZGVyZWQgcmVzdWx0LgorICAgIHZh
ciBpbXB1bHNlQ291bnQgPSAwOworICAgIC8vIE1heGltdW0gcmVsYXRpdmUgZXJyb3IgaW4gdGhl
IGdhaW4gb2YgdGhlIGltcHVsc2VzLgorICAgIHZhciBtYXhFcnJvciA9IDA7CisgICAgLy8gTnVt
YmVyIG9mIGltcHVsc2VzIHRoYXQgd2VyZSBub3QgYXQgdGhlIGV4cGVjdGVkIGxvY2F0aW9uLgor
ICAgIC8vIChGb3IgZGVidWdnaW5nLikKKyAgICB2YXIgdGltZUVycm9yQ291bnQgPSAwOworICAg
IC8vIEFycmF5IG9mIGxvY2F0aW9ucyBvZiB0aGUgaW1wdWxzZXMgdGhhdCB3ZXJlIG5vdCBhdCB0
aGUKKyAgICAvLyBleHBlY3RlZCBsb2NhdGlvbi4gIChGb3IgZGVidWdnaW5nLikKKyAgICB2YXIg
dGltZUVycm9ycyA9IG5ldyBBcnJheSgpOworCisgICAgLy8gU3RlcCB0aHJvdWdoIHRoZSByZW5k
ZXJlZCBkYXRhIHRvIGZpbmQgYWxsIHRoZSBub24temVybyBwb2ludHMKKyAgICAvLyBzbyB3ZSBj
YW4gZmluZCB3aGVyZSBvdXIgaW1wdWxzZXMgYXJlLgorICAgIGZvciAodmFyIGsgPSAwOyBrIDwg
cmVuZGVyZWREYXRhLmxlbmd0aDsgKytrKSB7CisgICAgICBpZiAocmVuZGVyZWREYXRhW2tdICE9
IDApIHsKKyAgICAgICAgdmFyIGRpc3RhbmNlRnVuY3Rpb24gPSBkaXN0YW5jZU1vZGVsRnVuY3Rp
b25bcGFubmVyW2ltcHVsc2VDb3VudF0uZGlzdGFuY2VNb2RlbF07CisgICAgICAgIHZhciBleHBl
Y3RlZCA9IGRpc3RhbmNlRnVuY3Rpb24ocGFubmVyW2ltcHVsc2VDb3VudF0sIDAsIDAsIHBvc2l0
aW9uW2ltcHVsc2VDb3VudF0pOworICAgICAgICBleHBlY3RlZCAqPSBlcXVhbFBvd2VyR2Fpbigp
OworCisgICAgICAgIHZhciBlcnJvciA9IE1hdGguYWJzKHJlbmRlcmVkRGF0YVtrXSAtIGV4cGVj
dGVkKS9NYXRoLmFicyhleHBlY3RlZCk7CisgICAgICAgIGlmIChkZWJ1ZykgeworICAgICAgICAg
IGNvbnNvbGUubG9nKGsgKyAiOiAiICsgcmVuZGVyZWREYXRhW2tdICsgIiAoZXhwZWN0ZWQgIiAr
IGV4cGVjdGVkICsgIiwgcmVsID0gIiwgZXJyb3IgKyAiKSIpOworICAgICAgICB9CisgICAgICAg
IG1heEVycm9yID0gTWF0aC5tYXgobWF4RXJyb3IsIE1hdGguYWJzKGVycm9yKSk7CisgICAgICAg
IGlmIChrICE9IE1hdGgucm91bmQoc2FtcGxlUmF0ZSAqIHRpbWVbaW1wdWxzZUNvdW50XSkpIHsK
KyAgICAgICAgICB0aW1lRXJyb3JzW3RpbWVFcnJvckNvdW50XSA9IHsgYWN0dWFsIDogaywgZXhw
ZWN0ZWQgOiBNYXRoLnJvdW5kKHNhbXBsZVJhdGUgKiB0aW1lW2ltcHVsc2VDb3VudF0pfTsKKyAg
ICAgICAgICArK3RpbWVFcnJvckNvdW50OworICAgICAgICB9CisgICAgICAgICsraW1wdWxzZUNv
dW50OworICAgICAgfQorICAgIH0KKworICAgIGlmIChpbXB1bHNlQ291bnQgPT0gbm9kZXNUb0Ny
ZWF0ZSkgeworICAgICAgdGVzdFBhc3NlZCgiTnVtYmVyIG9mIG5vZGVzIGlzIGNvcnJlY3QuIik7
CisgICAgfSBlbHNlIHsKKyAgICAgIHRlc3RGYWlsZWQoIk51bWJlciBvZiBub2RlcyBpcyBpbmNv
cnJlY3QuICAoRm91bmQgIiArIGltcHVsc2VDb3VudCArICIgYnV0IGV4cGVjdGVkICIgKyBub2Rl
c1RvQ3JlYXRlICsgIikiKTsKKyAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICB9CisKKyAgICBp
ZiAobWF4RXJyb3IgPD0gdGhyZXNob2xkKSB7CisgICAgICB0ZXN0UGFzc2VkKCJEaXN0YW5jZSBn
YWlucyBhcmUgY29ycmVjdC4iKTsKKyAgICB9IGVsc2UgeworICAgICAgdGVzdEZhaWxlZCgiRGlz
dGFuY2UgZ2FpbnMgYXJlIGluY29ycmVjdC4gIE1heCByZWwgZXJyb3IgPSAiICsgbWF4RXJyb3Ig
KyAiICh0aHJlc2hvbGQgPSAiICsgdGhyZXNob2xkICsgIikiKTsKKyAgICAgIHN1Y2Nlc3MgPSBm
YWxzZTsKKyAgICB9CisKKyAgICAvLyBGb3IgZGVidWdnaW5nLiAgSXQgc2VlbXMgc29tZSBpbXB1
bHNlcyBkb24ndCBzaG93IHVwIGF0IGV4YWN0bHkKKyAgICAvLyB0aGUgZXhwZWN0ZWQgcmVuZGVy
ZWQgbG9jYXRpb24uICBMb2cgdGhlc2UgdG8gdGhlIGNvbnNvbGUgaWYKKyAgICAvLyBkZWJ1Z2dp
bmcgaXMgdHJ1ZS4KKyAgICAvLworICAgIC8vIEZJWE1FOiAgRmlsZSBhIGJ1ZyBhYm91dCB0aGlz
LgorICAgIGlmIChkZWJ1ZyAmJiB0aW1lRXJyb3JzLmxlbmd0aCA+IDApIHsKKyAgICAgIGNvbnNv
bGUubG9nKHRpbWVFcnJvcnMubGVuZ3RoICsgIiB0aW1pbmcgZXJyb3JzIGZvdW5kIik7CisgICAg
ICBmb3IgKHZhciBrID0gMDsgayA8IHRpbWVFcnJvcnMubGVuZ3RoOyArK2spIHsKKyAgICAgICAg
Y29uc29sZS5sb2coIlNhbXBsZSAiICsgdGltZUVycm9yc1trXS5hY3R1YWwgKyAiIGJ1dCBleHBl
Y3RlZCAiICsgdGltZUVycm9yc1trXS5leHBlY3RlZCk7CisgICAgICB9CisgICAgfQorCisgICAg
aWYgKHN1Y2Nlc3MpIHsKKyAgICAgIHRlc3RQYXNzZWQoIkRpc3RhbmNlIHRlc3QgcGFzc2VkIGZv
ciBkaXN0YW5jZSBtb2RlbCAiICsgbW9kZWwpOworICAgIH0gZWxzZSB7CisgICAgICB0ZXN0RmFp
bGVkKCJEaXN0YW5jZSB0ZXN0IGZhaWxlZCBmb3IgZGlzdGFuY2UgbW9kZWwgIiArIG1vZGVsKTsK
KyAgICB9CisKKyAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122818</attachid>
            <date>2012-01-17 14:57:38 -0800</date>
            <delta_ts>2012-01-31 09:41:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74273-20120117145702.patch</filename>
            <type>text/plain</type>
            <size>19065</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MTI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2M4NTIxOWFmMWZjZWZj
Y2UwOTY0M2MzNzVhNGYwYzFmMGM3ZGNiNC4uZTg4NGVjZTA3OTQ2MjQ2ZThjNzhiNmJjM2JhYzll
ZDliZTNlMjVmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAxLTA5ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBDb25zdGFudCB2YWx1ZXMgdG8g
c2V0ICJkaXN0YW5jZU1vZGVsIiBhcmUgdW5kZWZpbmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDI3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiB3ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVu
dGlhbC5odG1sCisgICAgICAgICAgICAgICB3ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLmh0bWwK
KyAgICAgICAgICAgICAgIHdlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci5odG1sCisKKyAgICAgICAg
KiB3ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaDogRGVmaW5lIGVudW0gZm9yIHRoZSBuZXcgY29u
c3RhbnRzCisgICAgICAgIGZvciB0aGUgZGlzdGFuY2UgbW9kZWxzLgorICAgICAgICAqIHdlYmF1
ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGw6IERlZmluZSBtYXRjaGluZyBjb25zdGFudHMgZm9yIHRo
ZQorICAgICAgICBkaXN0YW5jZSBtb2RlbHMuCisKIDIwMTItMDEtMTYgIEhhamltZSBNb3JyaXRh
ICA8bW9ycml0YUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0ludGVybmFsc10gbWVtYmVyIHZh
cmFpYmxlcyBzaG91bGQgZm9sbG93IG5hbWluZyBjb252ZW50aW9uLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaAppbmRleCA5OGQyNzc0M2U0MTE3OTQzYjI2ODc4ZTY3
ZWNkNzFlMzk2NGJkYzRhLi40NDU5N2U4ODMwMzE0NjE1MWQ0ZmVmYTY2Njc1ZDc5Njk2OWU1OGNm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaApAQCAtNTMsNiAr
NTMsMTQgQEAgcHVibGljOgogICAgICAgICBTT1VOREZJRUxEID0gMiwKICAgICB9OwogCisgICAg
Ly8gVGhlc2UgbXVzdCBiZSBkZWZpbmVkIGFzIGluIHRoZSAuaWRsIGZpbGUgYW5kIG11c3QgbWF0
Y2ggdGhvc2UKKyAgICAvLyBpbiB0aGUgRGlzdGFuY2VFZmZlY3QgY2xhc3MuCisgICAgZW51bSB7
CisgICAgICAgIExJTkVBUl9ESVNUQU5DRSA9IDAsCisgICAgICAgIElOVkVSU0VfRElTVEFOQ0Ug
PSAxLAorICAgICAgICBFWFBPTkVOVElBTF9ESVNUQU5DRSA9IDIsCisgICAgfTsKKyAgICAKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxBdWRpb1Bhbm5lck5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQq
IGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEF1ZGlvUGFubmVyTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaWRsIGIvU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbAppbmRleCAyZGIwOTNkN2I1MDNhYTFl
OWNjNDVmNjRhNzE3YTBjMTg0NGJhZGQ3Li41OTdhM2VhZGZiYWM5ZTc2YmE5ZGE3NDIzM2JlMTVi
OWQ3NDI1NGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5l
ck5vZGUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5p
ZGwKQEAgLTMzLDYgKzMzLDExIEBAIG1vZHVsZSBhdWRpbyB7CiAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IEhSVEYgPSAxOwogICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBTT1VOREZJ
RUxEID0gMjsKIAorICAgICAgICAvLyBEaXN0YW5jZSBtb2RlbAorICAgICAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCBMSU5FQVJfRElTVEFOQ0UgPSAwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCBJTlZFUlNFX0RJU1RBTkNFID0gMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQg
RVhQT05FTlRJQUxfRElTVEFOQ0UgPSAyOworCiAgICAgICAgIC8vIERlZmF1bHQgbW9kZWwgZm9y
IHN0ZXJlbyBpcyBIUlRGIAogICAgICAgICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBwYW5uaW5n
TW9kZWw7IC8vIEZJWE1FOiB1c2UgdW5zaWduZWQgc2hvcnQgd2hlbiBnbHVlIGdlbmVyYXRpb24g
c3VwcG9ydHMgaXQKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDQ0YTViYmY1M2E5N2QyYzg1MDRjYmFmOWY0OGQ0YjUxY2Q5
NThmMzUuLmNiOTk1ODllZTZjM2I0NTFlNmFlZDUzNDg2OTczZjQ4MjRiYzBjOWUgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyNyBAQAorMjAxMi0wMS0wOSAgUmF5bW9uZCBUb3kgIDxydG95QGdvb2dsZS5jb20+
CisKKyAgICAgICAgQ29uc3RhbnQgdmFsdWVzIHRvIHNldCAiZGlzdGFuY2VNb2RlbCIgYXJlIHVu
ZGVmaW5lZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzQyNzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHdlYmF1ZGlvL2Rpc3RhbmNlLWV4cG9uZW50aWFsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogd2ViYXVkaW8vZGlzdGFuY2UtZXhwb25lbnRpYWwuaHRtbDogQWRkZWQuCisgICAgICAg
ICogd2ViYXVkaW8vZGlzdGFuY2UtaW52ZXJzZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHdlYmF1ZGlvL2Rpc3RhbmNlLWludmVyc2UuaHRtbDogQWRkZWQuCisgICAgICAgICogd2Vi
YXVkaW8vZGlzdGFuY2UtbGluZWFyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2Vi
YXVkaW8vZGlzdGFuY2UtbGluZWFyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL3Jl
c291cmNlcy9kaXN0YW5jZS1tb2RlbC10ZXN0aW5nLmpzOiBBZGRlZC4KKyAgICAgICAgKGNyZWF0
ZUltcHVsc2VCdWZmZXIpOgorICAgICAgICAobGluZWFyRGlzdGFuY2UpOgorICAgICAgICAoZXhw
b25lbnRpYWxEaXN0YW5jZSk6CisgICAgICAgIChpbnZlcnNlRGlzdGFuY2UpOgorICAgICAgICAo
Y3JlYXRlR3JhcGgpOgorICAgICAgICAoc3RhcnRTb3VyY2VzKToKKyAgICAgICAgKGVxdWFsUG93
ZXJHYWluKToKKyAgICAgICAgKGNoZWNrRGlzdGFuY2VSZXN1bHQucmV0dXJuLnJlbmRlcmVkQnVm
ZmVyKToKKyAgICAgICAgKGNoZWNrRGlzdGFuY2VSZXN1bHQpOgorCiAyMDEyLTAxLTE2ICBSb2xh
bmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2
aWV3ZWQ6bW9yZSBDaHJvbWl1bSBMaW51eCByZWJhc2VsaW5pbmcKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWV4cG9uZW50aWFsLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWV4cG9uZW50aWFsLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40OTAyZTM4YTIyMmM0ZWUxODQzYTEwMjM1MjMyOGU0NDhmZTY3YzA5Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtZXhwb25lbnRpYWwtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1Rlc3QgZXhwb25lbnRpYWwgZGlzdGFuY2UgbW9kZWwg
b2YgQXVkaW9QYW5uZXJOb2RlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1Mg
RGlzdGFuY2UgbW9kZWwgdmFsdWUgbWF0Y2hlZCBleHBlY3RlZCB2YWx1ZS4KK1BBU1MgTnVtYmVy
IG9mIGltcHVsc2VzIGZvdW5kIG1hdGNoZXMgbnVtYmVyIG9mIHBhbm5lciBub2Rlcy4KK1BBU1Mg
RGlzdGFuY2UgZ2FpbnMgYXJlIGNvcnJlY3QuCitQQVNTIERpc3RhbmNlIHRlc3QgcGFzc2VkIGZv
ciBkaXN0YW5jZSBtb2RlbCAyCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2Ut
ZXhwb25lbnRpYWwuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWV4cG9uZW50
aWFsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjZhZmMwZTNhNGEyMmRkYmZhZWY2ZWMzZjcwMDYxMzYzOGUw
OTFjMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWV4
cG9uZW50aWFsLmh0bWwKQEAgLTAsMCArMSw0MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICIt
Ly9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKyAgPGhlYWQ+
CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXN0eWxlLmNzcyIvPgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVz
dGluZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Rp
c3RhbmNlLW1vZGVsLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICA8L2hlYWQ+CisKKyAgPGJvZHk+
CisgICAgPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorICAgIDxkaXYgaWQ9ImNvbnNvbGUi
PjwvZGl2PgorCisgICAgPHNjcmlwdD4KKyAgICAgIGRlc2NyaXB0aW9uKCJUZXN0IGV4cG9uZW50
aWFsIGRpc3RhbmNlIG1vZGVsIG9mIEF1ZGlvUGFubmVyTm9kZS4iKTsKKworICAgICAgZnVuY3Rp
b24gcnVuVGVzdCgpIHsKKyAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KSB7CisgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAg
ICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAg
ICAgIH0KKworICAgICAgICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworICAgICAg
ICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuCisgICAgICAgICAgY29udGV4dCA9
IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgc2FtcGxlUmF0ZSAqIHJlbmRlckxlbmd0aFNlY29u
ZHMsIHNhbXBsZVJhdGUpOworCisgICAgICAgICAgLy8gVGVtcCBwYW5uZXIgbm9kZSBzbyB3ZSBj
YW4gZ2V0IHRoZSBFWFBPTkVOVElBTF9ESVNUQU5DRSB2YWx1ZS4KKyAgICAgICAgICB2YXIgdGVt
cFBhbm5lciA9IGNvbnRleHQuY3JlYXRlUGFubmVyKCk7CisgICAgICAgICAgY3JlYXRlVGVzdEFu
ZFJ1bihjb250ZXh0LCB0ZW1wUGFubmVyLkVYUE9ORU5USUFMX0RJU1RBTkNFLCAyKTsKKyAgICAg
IH0KKworICAgICAgcnVuVGVzdCgpOworICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
KworICAgIDwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtaW52ZXJzZS1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42NWE5NDkyNDRmYjI5Zjg3MmZkZTUxOWMzZjhhZDc0MzFlNDM3ODhlCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtaW52ZXJzZS1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwxMiBAQAorVGVzdCBpbnZlcnNlIGRpc3RhbmNlIG1vZGVsIG9mIEF1ZGlvUGFu
bmVyTm9kZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIERpc3RhbmNlIG1v
ZGVsIHZhbHVlIG1hdGNoZWQgZXhwZWN0ZWQgdmFsdWUuCitQQVNTIE51bWJlciBvZiBpbXB1bHNl
cyBmb3VuZCBtYXRjaGVzIG51bWJlciBvZiBwYW5uZXIgbm9kZXMuCitQQVNTIERpc3RhbmNlIGdh
aW5zIGFyZSBjb3JyZWN0LgorUEFTUyBEaXN0YW5jZSB0ZXN0IHBhc3NlZCBmb3IgZGlzdGFuY2Ug
bW9kZWwgMQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWludmVyc2UuaHRt
bCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWludmVyc2UuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lNTc3MTc0NmYwMTEyOTdhMDZjMDc4OGI3ODdmZWZiZThmYThmZGM5Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtaW52ZXJzZS5odG1sCkBAIC0wLDAg
KzEsNDAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRy
YW5zaXRpb25hbC8vRU4iPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgaHJlZj0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKyAg
ICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9kaXN0YW5jZS1tb2RlbC10ZXN0aW5nLmpz
Ij48L3NjcmlwdD4KKyAgPC9oZWFkPgorCisgIDxib2R5PgorICAgIDxkaXYgaWQ9ImRlc2NyaXB0
aW9uIj48L2Rpdj4KKyAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworICAgIDxzY3JpcHQ+
CisgICAgICBkZXNjcmlwdGlvbigiVGVzdCBpbnZlcnNlIGRpc3RhbmNlIG1vZGVsIG9mIEF1ZGlv
UGFubmVyTm9kZS4iKTsKKworICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAgICAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgIH0KKworICAgICAgICAgIHdpbmRvdy5q
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworICAgICAgICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlv
IGNvbnRleHQuCisgICAgICAgICAgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwg
c2FtcGxlUmF0ZSAqIHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOworCisgICAgICAg
ICAgLy8gVGVtcCBwYW5uZXIgbm9kZSBzbyB3ZSBjYW4gZ2V0IHRoZSBJTlZFUlNFX0RJU1RBTkNF
IHZhbHVlLgorICAgICAgICAgIHZhciB0ZW1wUGFubmVyID0gY29udGV4dC5jcmVhdGVQYW5uZXIo
KTsKKyAgICAgICAgICBjcmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsIHRlbXBQYW5uZXIuSU5WRVJT
RV9ESVNUQU5DRSwgMSk7CisgICAgICB9CisKKyAgICAgIHJ1blRlc3QoKTsKKyAgICAgIHN1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7CisKKyAgICA8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisgIDwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVh
ci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1saW5lYXItZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5ZDI4YTkxNTE2NjlkOTY1N2Y2YjQ1ZDhmNjgyZDRiMDdm
ZGY5ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1s
aW5lYXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1Rlc3QgbGluZWFyIGRpc3RhbmNl
IG1vZGVsIG9mIEF1ZGlvUGFubmVyTm9kZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CitQQVNTIERpc3RhbmNlIG1vZGVsIHZhbHVlIG1hdGNoZWQgZXhwZWN0ZWQgdmFsdWUuCitQQVNT
IE51bWJlciBvZiBpbXB1bHNlcyBmb3VuZCBtYXRjaGVzIG51bWJlciBvZiBwYW5uZXIgbm9kZXMu
CitQQVNTIERpc3RhbmNlIGdhaW5zIGFyZSBjb3JyZWN0LgorUEFTUyBEaXN0YW5jZSB0ZXN0IHBh
c3NlZCBmb3IgZGlzdGFuY2UgbW9kZWwgMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rp
c3RhbmNlLWxpbmVhci5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtbGluZWFy
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjAyNTU2MzQ4NWNmNTU2YWRlNjFkM2Y0N2IzZmJhOTgyMzY5ODRi
ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVh
ci5odG1sCkBAIC0wLDAgKzEsNDAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9E
VEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1z
dHlsZS5jc3MiLz4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9kaXN0YW5jZS1t
b2RlbC10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKyAgPC9oZWFkPgorCisgIDxib2R5PgorICAgIDxk
aXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKyAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KworICAgIDxzY3JpcHQ+CisgICAgICBkZXNjcmlwdGlvbigiVGVzdCBsaW5lYXIgZGlzdGFuY2Ug
bW9kZWwgb2YgQXVkaW9QYW5uZXJOb2RlLiIpOworCisgICAgICBmdW5jdGlvbiBydW5UZXN0KCkg
eworICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgfQorCisgICAg
ICAgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworCisgICAgICAgICAgLy8gQ3JlYXRl
IG9mZmxpbmUgYXVkaW8gY29udGV4dC4KKyAgICAgICAgICBjb250ZXh0ID0gbmV3IHdlYmtpdEF1
ZGlvQ29udGV4dCgyLCBzYW1wbGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0
ZSk7CisKKyAgICAgICAgICAvLyBDcmVhdGUgdGVtcCBwYW5uZXIgdG8gZ2V0IExJTkVBUl9ESVNU
QU5DRSB2YWx1ZSBmb3IgdGVzdGluZy4KKyAgICAgICAgICB2YXIgcGFubmVyTW9kZWwgPSBjb250
ZXh0LmNyZWF0ZVBhbm5lcigpOworICAgICAgICAgIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwg
cGFubmVyTW9kZWwuTElORUFSX0RJU1RBTkNFLCAwKTsKKyAgICAgIH0KKworICAgICAgcnVuVGVz
dCgpOworICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworICAgIDwvc2NyaXB0Pgor
Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vcmVzb3VyY2VzL2Rpc3RhbmNlLW1vZGVsLXRlc3RpbmcuanMgYi9MYXlvdXRUZXN0cy93ZWJh
dWRpby9yZXNvdXJjZXMvZGlzdGFuY2UtbW9kZWwtdGVzdGluZy5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MWUx
MGQ3NjkyMjhkYTFmODkyZDYxODc3OTBkNjI3YTY5YTZlYmIzCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2Rpc3RhbmNlLW1vZGVsLXRlc3RpbmcuanMK
QEAgLTAsMCArMSwyMTUgQEAKK3ZhciBzYW1wbGVSYXRlID0gNDQxMDAuMDsKKworLy8gSG93IG1h
bnkgcGFubmVyIG5vZGVzIHRvIGNyZWF0ZSBmb3IgdGhlIHRlc3QuCit2YXIgbm9kZXNUb0NyZWF0
ZSA9IDEwMDsKKworLy8gVGltZSBzdGVwIHdoZW4gZWFjaCBwYW5uZXIgbm9kZSBzdGFydHMuCit2
YXIgdGltZVN0ZXAgPSAwLjAwMTsKKworLy8gTWFrZSBzdXJlIHdlIHJlbmRlciBsb25nIGVub3Vn
aCB0byBnZXQgYWxsIG9mIG91ciBub2Rlcy4KK3ZhciByZW5kZXJMZW5ndGhTZWNvbmRzID0gdGlt
ZVN0ZXAgKiAobm9kZXNUb0NyZWF0ZSArIDEpOworCisvLyBMZW5ndGggb2YgYW4gaW1wdWxzZSBz
aWduYWwuCit2YXIgcHVsc2VMZW5ndGhGcmFtZXMgPSBNYXRoLnJvdW5kKHRpbWVTdGVwICogc2Ft
cGxlUmF0ZSk7CisKKy8vIEdsb2JhbHMgdG8gbWFrZSBkZWJ1Z2dpbmcgYSBsaXR0bGUgZWFzaWVy
LgordmFyIGNvbnRleHQ7Cit2YXIgaW1wdWxzZTsKK3ZhciBidWZmZXJTb3VyY2U7Cit2YXIgcGFu
bmVyOwordmFyIHBvc2l0aW9uOwordmFyIHRpbWU7CisgICAgICAKKy8vIEZvciB0aGUgcmVjb3Jk
LCB0aGVzZSBkaXN0YW5jZSBmb3JtdWxhcyB3ZXJlIHRha2VuIGZyb20gdGhlIE9wZW5BTAorLy8g
c3BlYworLy8gKGh0dHA6Ly9jb25uZWN0LmNyZWF0aXZlbGFicy5jb20vb3BlbmFsL0RvY3VtZW50
YXRpb24vT3BlbkFMJTIwMS4xJTIwU3BlY2lmaWNhdGlvbi5wZGYpLAorLy8gbm90IHRoZSBjb2Rl
LiAgVGhlIFdlYiBBdWRpbyBzcGVjIGZvbGxvd3MgdGhlIE9wZW5BTCBmb3JtdWxhcy4KKworZnVu
Y3Rpb24gbGluZWFyRGlzdGFuY2UocGFubmVyLCB4LCB5LCB6KSB7CisgICAgdmFyIGRpc3RhbmNl
ID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICogeik7CisgICAgZGlzdGFuY2UgPSBNYXRo
Lm1pbihkaXN0YW5jZSwgcGFubmVyLm1heERpc3RhbmNlKTsKKyAgICB2YXIgcm9sbG9mZiA9IHBh
bm5lci5yb2xsb2ZmRmFjdG9yOworICAgIHZhciBnYWluID0gKDEgLSByb2xsb2ZmICogKGRpc3Rh
bmNlIC0gcGFubmVyLnJlZkRpc3RhbmNlKSAvIChwYW5uZXIubWF4RGlzdGFuY2UgLSBwYW5uZXIu
cmVmRGlzdGFuY2UpKTsKKworICAgIHJldHVybiBnYWluOworfQorCitmdW5jdGlvbiBpbnZlcnNl
RGlzdGFuY2UocGFubmVyLCB4LCB5LCB6KSB7CisgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0
KHggKiB4ICsgeSAqIHkgKyB6ICogeik7CisgICAgZGlzdGFuY2UgPSBNYXRoLm1pbihkaXN0YW5j
ZSwgcGFubmVyLm1heERpc3RhbmNlKTsKKyAgICB2YXIgcm9sbG9mZiA9IHBhbm5lci5yb2xsb2Zm
RmFjdG9yOworICAgIHZhciBnYWluID0gcGFubmVyLnJlZkRpc3RhbmNlIC8gKHBhbm5lci5yZWZE
aXN0YW5jZSArIHJvbGxvZmYgKiAoZGlzdGFuY2UgLSBwYW5uZXIucmVmRGlzdGFuY2UpKTsKKwor
ICAgIHJldHVybiBnYWluOworfQorCitmdW5jdGlvbiBleHBvbmVudGlhbERpc3RhbmNlKHBhbm5l
ciwgeCwgeSwgeikgeworICAgIHZhciBkaXN0YW5jZSA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5
ICsgeiAqIHopOworICAgIGRpc3RhbmNlID0gTWF0aC5taW4oZGlzdGFuY2UsIHBhbm5lci5tYXhE
aXN0YW5jZSk7CisgICAgdmFyIHJvbGxvZmYgPSBwYW5uZXIucm9sbG9mZkZhY3RvcjsKKyAgICB2
YXIgZ2FpbiA9IE1hdGgucG93KGRpc3RhbmNlIC8gcGFubmVyLnJlZkRpc3RhbmNlLCAtcm9sbG9m
Zik7CisKKyAgICByZXR1cm4gZ2FpbjsKK30KKworLy8gVGhpcyBhcnJheSBtdXN0IGJlIGFycmFu
Z2VkIGluIHRoZSBudW1lcmljIG9yZGVyIG9mIHRoZSBkaXN0YW5jZQorLy8gbW9kZWwgdmFsdWVz
LgordmFyIGRpc3RhbmNlTW9kZWxGdW5jdGlvbiA9IFtsaW5lYXJEaXN0YW5jZSwgaW52ZXJzZURp
c3RhbmNlLCBleHBvbmVudGlhbERpc3RhbmNlXTsKKworZnVuY3Rpb24gY3JlYXRlR3JhcGgoY29u
dGV4dCwgZGlzdGFuY2VNb2RlbCwgbm9kZUNvdW50KSB7CisgICAgYnVmZmVyU291cmNlID0gbmV3
IEFycmF5KG5vZGVDb3VudCk7CisgICAgcGFubmVyID0gbmV3IEFycmF5KG5vZGVDb3VudCk7Cisg
ICAgcG9zaXRpb24gPSBuZXcgQXJyYXkobm9kZUNvdW50KTsKKyAgICB0aW1lID0gbmV3IEFycmF5
KG5vZGVzVG9DcmVhdGUpOworCisgICAgaW1wdWxzZSA9IGNyZWF0ZUltcHVsc2VCdWZmZXIoY29u
dGV4dCwgcHVsc2VMZW5ndGhGcmFtZXMpOworCisgICAgLy8gQ3JlYXRlIGFsbCB0aGUgc291cmNl
cyBhbmQgcGFubmVycy4KKyAgICAvLworICAgIC8vIFdlIE1VU1QgdXNlIHRoZSBFUVVBTFBPV0VS
IHBhbm5pbmcgbW9kZWwgc28gdGhhdCB3ZSBjYW4gZWFzaWx5CisgICAgLy8gZmlndXJlIG91dCB0
aGUgZ2FpbiBpbnRyb2R1Y2VkIGJ5IHRoZSBwYW5uZXIuCisgICAgLy8KKyAgICAvLyBXZSB3YW50
IHRvIHN0YXkgaW4gdGhlIG1pZGRsZSBvZiB0aGUgcGFubmluZyByYW5nZSwgd2hpY2ggbWVhbnMK
KyAgICAvLyB3ZSB3YW50IHRvIHN0YXkgb24gdGhlIHotYXhpcy4gIElmIHdlIGRvbid0LCB0aGVu
IHRoZSBlZmZlY3Qgb2YKKyAgICAvLyBwYW5uaW5nIG1vZGVsIHdpbGwgYmUgbXVjaCBtb3JlIGNv
bXBsaWNhdGVkLiAgV2UncmUgbm90IHRlc3RpbmcKKyAgICAvLyB0aGUgcGFubmVyLCBidXQgdGhl
IGRpc3RhbmNlIG1vZGVsLCBzbyB3ZSB3YW50IHRoZSBwYW5uZXIgZWZmZWN0CisgICAgLy8gdG8g
YmUgc2ltcGxlLgorICAgIC8vCisgICAgLy8gVGhlIHBhbm5lcnMgYXJlIHBsYWNlZCBhdCBhIHVu
aWZvcm0gaW50ZXJ2YWxzIGJldHdlZW4gdGhlIHBhbm5lcgorICAgIC8vIHJlZmVyZW5jZSBkaXN0
YW5jZSBhbmQgdGhlIHBhbm5lciBtYXggZGlzdGFuY2UuICBUaGUgc291cmNlIGlzCisgICAgLy8g
YWxzbyBzdGFydGVkIGF0IHJlZ3VsYXIgaW50ZXJ2YWxzLgorICAgIGZvciAodmFyIGsgPSAwOyBr
IDwgbm9kZUNvdW50OyArK2spIHsKKyAgICAgICAgYnVmZmVyU291cmNlW2tdID0gY29udGV4dC5j
cmVhdGVCdWZmZXJTb3VyY2UoKTsKKyAgICAgICAgYnVmZmVyU291cmNlW2tdLmJ1ZmZlciA9IGlt
cHVsc2U7CisKKyAgICAgICAgcGFubmVyW2tdID0gY29udGV4dC5jcmVhdGVQYW5uZXIoKTsKKyAg
ICAgICAgcGFubmVyW2tdLnBhbm5pbmdNb2RlbCA9IHBhbm5lci5FUVVBTFBPV0VSOworICAgICAg
ICBwYW5uZXJba10uZGlzdGFuY2VNb2RlbCA9IGRpc3RhbmNlTW9kZWw7CisKKyAgICAgICAgdmFy
IGRpc3RhbmNlU3RlcCA9IChwYW5uZXJba10ubWF4RGlzdGFuY2UgLSBwYW5uZXJba10ucmVmRGlz
dGFuY2UpIC8gbm9kZUNvdW50OworICAgICAgICBwb3NpdGlvbltrXSA9IGRpc3RhbmNlU3RlcCAq
IGsgKyBwYW5uZXJba10ucmVmRGlzdGFuY2U7CisgICAgICAgIHBhbm5lcltrXS5zZXRQb3NpdGlv
bigwLCAwLCBwb3NpdGlvbltrXSk7CisKKyAgICAgICAgYnVmZmVyU291cmNlW2tdLmNvbm5lY3Qo
cGFubmVyW2tdKTsKKyAgICAgICAgcGFubmVyW2tdLmNvbm5lY3QoY29udGV4dC5kZXN0aW5hdGlv
bik7CisKKyAgICAgICAgdGltZVtrXSA9IGsgKiB0aW1lU3RlcDsKKyAgICAgICAgYnVmZmVyU291
cmNlW2tdLm5vdGVPbih0aW1lW2tdKTsKKyAgICB9Cit9CisKKy8vIGRpc3RhbmNlTW9kZWwgc2hv
dWxkIGJlIHRoZSBkaXN0YW5jZSBtb2RlbCBjb25zdGFudCBsaWtlCisvLyBMSU5FQVJfRElTVEFO
Q0UsIElOVkVSU0VfRElTVEFOQ0UsIGFuZCBFWFBPTkVOVElBTF9ESVNUQU5DRS4gIFRoZQorLy8g
ZXhwZWN0ZWRNb2RlbCBpcyB0aGUgZXhwZWN0ZWQgYWN0dWFsIG51bWVyaWMgdmFsdWUgb2YgdGhl
IGNvbnN0YW50LgorZnVuY3Rpb24gY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCBkaXN0YW5jZU1v
ZGVsLCBleHBlY3RlZE1vZGVsKSB7CisgICAgLy8gVG8gdGVzdCB0aGUgZGlzdGFuY2UgbW9kZWxz
LCB3ZSBjcmVhdGUgYSBudW1iZXIgb2YgcGFubmVycyBhdAorICAgIC8vIHVuaWZvcm1seSBzcGFj
ZWQgaW50ZXJ2YWxzIG9uIHRoZSB6LWF4aXMuICBFYWNoIG9mIHRoZXNlIGFyZQorICAgIC8vIHN0
YXJ0ZWQgYXQgZXF1YWxseSBzcGFjZWQgdGltZSBpbnRlcnZhbHMuICBBZnRlciByZW5kZXJpbmcg
dGhlCisgICAgLy8gc2lnbmFscywgd2UgZXhhbWluZSB3aGVyZSBlYWNoIGltcHVsc2UgaXMgbG9j
YXRlZCBhbmQgdGhlCisgICAgLy8gYXR0ZW51YXRpb24gb2YgdGhlIGltcHVsc2UuICBUaGUgYXR0
ZW51YXRpb24gaXMgY29tcGFyZWQKKyAgICAvLyBhZ2FpbnN0IG91ciBleHBlY3RlZCBhdHRlbnVh
dGlvbi4KKworICAgIGNyZWF0ZUdyYXBoKGNvbnRleHQsIGRpc3RhbmNlTW9kZWwsIG5vZGVzVG9D
cmVhdGUpOworCisgICAgY29udGV4dC5vbmNvbXBsZXRlID0gY2hlY2tEaXN0YW5jZVJlc3VsdChk
aXN0YW5jZU1vZGVsLCBleHBlY3RlZE1vZGVsKTsKKyAgICBjb250ZXh0LnN0YXJ0UmVuZGVyaW5n
KCk7Cit9CisKKy8vIFRoZSBnYWluIGNhdXNlZCBieSB0aGUgRVFVQUxQT1dFUiBwYW5uaW5nIG1v
ZGVsLCBpZiB3ZSBzdGF5IG9uIHRoZQorLy8geiBheGlzLCB3aXRoIHRoZSBkZWZhdWx0IG9yaWVu
dGF0aW9ucy4KK2Z1bmN0aW9uIGVxdWFsUG93ZXJHYWluKCkgeworICAgIHJldHVybiBNYXRoLlNR
UlQxXzI7Cit9CisKK2Z1bmN0aW9uIGNoZWNrRGlzdGFuY2VSZXN1bHQobW9kZWwsIGV4cGVjdGVk
TW9kZWwpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgcmVuZGVyZWRC
dWZmZXIgPSBldmVudC5yZW5kZXJlZEJ1ZmZlcjsKKyAgICAgICAgcmVuZGVyZWREYXRhID0gcmVu
ZGVyZWRCdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7CisKKyAgICAgICAgLy8gVGhlIG1heCBhbGxv
d2VkIGVycm9yIGJldHdlZW4gdGhlIGFjdHVhbCBnYWluIGFuZCB0aGUgZXhwZWN0ZWQKKyAgICAg
ICAgLy8gdmFsdWUuICBUaGlzIGlzIGRldGVybWluZWQgZXhwZXJpbWVudGFsbHkuICBTZXQgdG8g
MCB0byBzZWUgd2hhdAorICAgICAgICAvLyB0aGUgYWN0dWFsIGVycm9ycyBhcmUuCisgICAgICAg
IHZhciBtYXhBbGxvd2VkRXJyb3IgPSAyLjNlLTY7CisgICAKKyAgICAgICAgdmFyIHN1Y2Nlc3Mg
PSB0cnVlOworCisgICAgICAgIC8vIE51bWJlciBvZiBpbXB1bHNlcyB3ZSBmb3VuZCBpbiB0aGUg
cmVuZGVyZWQgcmVzdWx0LgorICAgICAgICB2YXIgaW1wdWxzZUNvdW50ID0gMDsKKworICAgICAg
ICAvLyBNYXhpbXVtIHJlbGF0aXZlIGVycm9yIGluIHRoZSBnYWluIG9mIHRoZSBpbXB1bHNlcy4K
KyAgICAgICAgdmFyIG1heEVycm9yID0gMDsKKworICAgICAgICAvLyBOdW1iZXIgb2YgaW1wdWxz
ZXMgdGhhdCB3ZXJlIG5vdCBhdCB0aGUgZXhwZWN0ZWQgbG9jYXRpb24uCisgICAgICAgIHZhciB0
aW1lRXJyb3JDb3VudCA9IDA7CisKKyAgICAgICAgLy8gQXJyYXkgb2YgbG9jYXRpb25zIG9mIHRo
ZSBpbXB1bHNlcyB0aGF0IHdlcmUgbm90IGF0IHRoZQorICAgICAgICAvLyBleHBlY3RlZCBsb2Nh
dGlvbi4KKyAgICAgICAgdmFyIHRpbWVFcnJvcnMgPSBuZXcgQXJyYXkoKTsKKworICAgICAgICAv
LyBTdGVwIHRocm91Z2ggdGhlIHJlbmRlcmVkIGRhdGEgdG8gZmluZCBhbGwgdGhlIG5vbi16ZXJv
IHBvaW50cworICAgICAgICAvLyBzbyB3ZSBjYW4gZmluZCB3aGVyZSBvdXIgZGlzdGFuY2UtYXR0
ZW51YXRlZCBpbXB1bHNlcyBhcmUuCisgICAgICAgIC8vIFRoZXNlIGFyZSB0ZXN0ZWQgYWdhaW5z
dCB0aGUgZXhwZWN0ZWQgYXR0ZW51YXRpb25zIGF0IHRoYXQKKyAgICAgICAgLy8gZGlzdGFuY2Uu
CisgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcmVuZGVyZWREYXRhLmxlbmd0aDsgKytrKSB7
CisgICAgICAgICAgICBpZiAocmVuZGVyZWREYXRhW2tdICE9IDApIHsKKyAgICAgICAgICAgICAg
ICB2YXIgZGlzdGFuY2VGdW5jdGlvbiA9IGRpc3RhbmNlTW9kZWxGdW5jdGlvbltwYW5uZXJbaW1w
dWxzZUNvdW50XS5kaXN0YW5jZU1vZGVsXTsKKyAgICAgICAgICAgICAgICB2YXIgZXhwZWN0ZWQg
PSBkaXN0YW5jZUZ1bmN0aW9uKHBhbm5lcltpbXB1bHNlQ291bnRdLCAwLCAwLCBwb3NpdGlvbltp
bXB1bHNlQ291bnRdKTsKKworICAgICAgICAgICAgICAgIC8vIEFkanVzdCBmb3IgdGhlIGNlbnRl
ci1wYW5uaW5nIG9mIHRoZSBFUVVBTFBPV0VSIHBhbm5pbmcKKyAgICAgICAgICAgICAgICAvLyBt
b2RlbCB0aGF0IHdlJ3JlIHVzaW5nLgorICAgICAgICAgICAgICAgIGV4cGVjdGVkICo9IGVxdWFs
UG93ZXJHYWluKCk7CisKKyAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBNYXRoLmFicyhyZW5k
ZXJlZERhdGFba10gLSBleHBlY3RlZCkgLyBNYXRoLmFicyhleHBlY3RlZCk7CisKKyAgICAgICAg
ICAgICAgICBtYXhFcnJvciA9IE1hdGgubWF4KG1heEVycm9yLCBNYXRoLmFicyhlcnJvcikpOwor
CisgICAgICAgICAgICAgICAgLy8gS2VlcCB0cmFjayBvZiBhbnkgaW1wdWxzZXMgdGhhdCBhcmVu
J3Qgd2hlcmUgd2UgZXhwZWN0IHRoZW0KKyAgICAgICAgICAgICAgICAvLyB0byBiZS4KKyAgICAg
ICAgICAgICAgICBpZiAoayAhPSBNYXRoLmZsb29yKHNhbXBsZVJhdGUgKiB0aW1lW2ltcHVsc2VD
b3VudF0pKSB7CisgICAgICAgICAgICAgICAgICAgIHRpbWVFcnJvcnNbdGltZUVycm9yQ291bnRd
ID0geyBhY3R1YWwgOiBrLCBleHBlY3RlZCA6IE1hdGguZmxvb3Ioc2FtcGxlUmF0ZSAqIHRpbWVb
aW1wdWxzZUNvdW50XSl9OworICAgICAgICAgICAgICAgICAgICArK3RpbWVFcnJvckNvdW50Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK2ltcHVsc2VDb3VudDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChtb2RlbCA9PSBleHBlY3RlZE1vZGVs
KSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJEaXN0YW5jZSBtb2RlbCB2YWx1ZSBtYXRjaGVk
IGV4cGVjdGVkIHZhbHVlLiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdEZh
aWxlZCgiRGlzdGFuY2UgbW9kZWwgdmFsdWUgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgdmFsdWUu
Iik7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIH0gICAgCisKKyAgICAg
ICAgaWYgKGltcHVsc2VDb3VudCA9PSBub2Rlc1RvQ3JlYXRlKSB7CisgICAgICAgICAgICB0ZXN0
UGFzc2VkKCJOdW1iZXIgb2YgaW1wdWxzZXMgZm91bmQgbWF0Y2hlcyBudW1iZXIgb2YgcGFubmVy
IG5vZGVzLiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiTnVt
YmVyIG9mIGltcHVsc2VzIGlzIGluY29ycmVjdC4gIEZvdW5kICIgKyBpbXB1bHNlQ291bnQgKyAi
IGJ1dCBleHBlY3RlZCAiICsgbm9kZXNUb0NyZWF0ZSArICIuIik7CisgICAgICAgICAgICBzdWNj
ZXNzID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAobWF4RXJyb3IgPD0gbWF4QWxs
b3dlZEVycm9yKSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJEaXN0YW5jZSBnYWlucyBhcmUg
Y29ycmVjdC4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkRp
c3RhbmNlIGdhaW5zIGFyZSBpbmNvcnJlY3QuICBNYXggcmVsIGVycm9yID0gIiArIG1heEVycm9y
ICsgIiAobWF4QWxsb3dlZEVycm9yID0gIiArIG1heEFsbG93ZWRFcnJvciArICIpIik7CisgICAg
ICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBQcmludCBv
dXQgaW5mb3JtYXRpb24gb24gdGhlIGltcHVsc2VzIHRoYXQgb2NjdXJyZWQgYXQgYW4KKyAgICAg
ICAgLy8gZXhwZWN0ZWQgcGxhY2UuCisgICAgICAgIGlmICh0aW1lRXJyb3JzLmxlbmd0aCA+IDAp
IHsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQo
dGltZUVycm9ycy5sZW5ndGggKyAiIHRpbWluZyBlcnJvcnMgZm91bmQiKTsKKyAgICAgICAgICAg
IGZvciAodmFyIGsgPSAwOyBrIDwgdGltZUVycm9ycy5sZW5ndGg7ICsraykgeworICAgICAgICAg
ICAgICAgIHRlc3RGYWlsZWQoIlNhbXBsZSAiICsgdGltZUVycm9yc1trXS5hY3R1YWwgKyAiIGJ1
dCBleHBlY3RlZCAiICsgdGltZUVycm9yc1trXS5leHBlY3RlZCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAgdGVzdFBhc3Nl
ZCgiRGlzdGFuY2UgdGVzdCBwYXNzZWQgZm9yIGRpc3RhbmNlIG1vZGVsICIgKyBtb2RlbCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJEaXN0YW5jZSB0ZXN0IGZh
aWxlZCBmb3IgZGlzdGFuY2UgbW9kZWwgIiArIG1vZGVsKTsKKyAgICAgICAgfQorCisgICAgICAg
IGZpbmlzaEpTVGVzdCgpOworICAgIH0KK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124760</attachid>
            <date>2012-01-31 09:41:09 -0800</date>
            <delta_ts>2012-01-31 09:54:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74273-20120131094107.patch</filename>
            <type>text/plain</type>
            <size>19098</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MjE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzJlMzc5NGYwYjNiYzBh
ZjUwZWQ0ZDEwMzVlYjJlZWQ3ZmZiNGQ3Ny4uMmQ4Nzk5MDY2ZDYxZWQyZWY2NGQ4Y2U4ZWEyNTE2
ZTEwODIxZjRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAxLTA5ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBDb25zdGFudCB2YWx1ZXMgdG8g
c2V0ICJkaXN0YW5jZU1vZGVsIiBhcmUgdW5kZWZpbmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDI3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiB3ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVu
dGlhbC5odG1sCisgICAgICAgICAgICAgICB3ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLmh0bWwK
KyAgICAgICAgICAgICAgIHdlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci5odG1sCisKKyAgICAgICAg
KiB3ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaDogRGVmaW5lIGVudW0gZm9yIHRoZSBuZXcgY29u
c3RhbnRzCisgICAgICAgIGZvciB0aGUgZGlzdGFuY2UgbW9kZWxzLgorICAgICAgICAqIHdlYmF1
ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGw6IERlZmluZSBtYXRjaGluZyBjb25zdGFudHMgZm9yIHRo
ZQorICAgICAgICBkaXN0YW5jZSBtb2RlbHMuCisKIDIwMTItMDEtMjkgIERhbGUgQ3VydGlzICA8
ZGFsZWN1cnRpc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUHJlcGFyZSBXZWJDb3JlLmd5cCBm
b3IgZmZtcGVnIHNvdXJjZSB0cmFuc2l0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b1Bhbm5lck5vZGUuaAppbmRleCA5OGQyNzc0M2U0MTE3OTQzYjI2ODc4ZTY3ZWNkNzFlMzk2NGJk
YzRhLi40NDU5N2U4ODMwMzE0NjE1MWQ0ZmVmYTY2Njc1ZDc5Njk2OWU1OGNmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaApAQCAtNTMsNiArNTMsMTQgQEAgcHVi
bGljOgogICAgICAgICBTT1VOREZJRUxEID0gMiwKICAgICB9OwogCisgICAgLy8gVGhlc2UgbXVz
dCBiZSBkZWZpbmVkIGFzIGluIHRoZSAuaWRsIGZpbGUgYW5kIG11c3QgbWF0Y2ggdGhvc2UKKyAg
ICAvLyBpbiB0aGUgRGlzdGFuY2VFZmZlY3QgY2xhc3MuCisgICAgZW51bSB7CisgICAgICAgIExJ
TkVBUl9ESVNUQU5DRSA9IDAsCisgICAgICAgIElOVkVSU0VfRElTVEFOQ0UgPSAxLAorICAgICAg
ICBFWFBPTkVOVElBTF9ESVNUQU5DRSA9IDIsCisgICAgfTsKKyAgICAKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxBdWRpb1Bhbm5lck5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQqIGNvbnRleHQsIGZs
b2F0IHNhbXBsZVJhdGUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF1ZGlv
UGFubmVyTm9kZShjb250ZXh0LCBzYW1wbGVSYXRlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaWRsIGIvU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQXVkaW9QYW5uZXJOb2RlLmlkbAppbmRleCAyZGIwOTNkN2I1MDNhYTFlOWNjNDVmNjRhNzE3
YTBjMTg0NGJhZGQ3Li41OTdhM2VhZGZiYWM5ZTc2YmE5ZGE3NDIzM2JlMTViOWQ3NDI1NGVlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaWRsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwKQEAgLTMzLDYg
KzMzLDExIEBAIG1vZHVsZSBhdWRpbyB7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEhS
VEYgPSAxOwogICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBTT1VOREZJRUxEID0gMjsKIAor
ICAgICAgICAvLyBEaXN0YW5jZSBtb2RlbAorICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBM
SU5FQVJfRElTVEFOQ0UgPSAwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBJTlZFUlNF
X0RJU1RBTkNFID0gMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgRVhQT05FTlRJQUxf
RElTVEFOQ0UgPSAyOworCiAgICAgICAgIC8vIERlZmF1bHQgbW9kZWwgZm9yIHN0ZXJlbyBpcyBI
UlRGIAogICAgICAgICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBwYW5uaW5nTW9kZWw7IC8vIEZJ
WE1FOiB1c2UgdW5zaWduZWQgc2hvcnQgd2hlbiBnbHVlIGdlbmVyYXRpb24gc3VwcG9ydHMgaXQK
IApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDE1YjhhODBlNGMwMmQ0MWZkNjdkYzI3NDNhNWE2YzRjYTg2YzZmMjAuLjg4ZmMy
MDg2NWY2NTBhYjg2OGJkYzgwYTc2OThiN2ViNmY0MmY5MDUgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBA
QAorMjAxMi0wMS0wOSAgUmF5bW9uZCBUb3kgIDxydG95QGdvb2dsZS5jb20+CisKKyAgICAgICAg
Q29uc3RhbnQgdmFsdWVzIHRvIHNldCAiZGlzdGFuY2VNb2RlbCIgYXJlIHVuZGVmaW5lZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQyNzMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdlYmF1ZGlvL2Rp
c3RhbmNlLWV4cG9uZW50aWFsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViYXVk
aW8vZGlzdGFuY2UtZXhwb25lbnRpYWwuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8v
ZGlzdGFuY2UtaW52ZXJzZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlv
L2Rpc3RhbmNlLWludmVyc2UuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vZGlzdGFu
Y2UtbGluZWFyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vZGlzdGFu
Y2UtbGluZWFyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL3Jlc291cmNlcy9kaXN0
YW5jZS1tb2RlbC10ZXN0aW5nLmpzOiBBZGRlZC4KKyAgICAgICAgKGNyZWF0ZUltcHVsc2VCdWZm
ZXIpOgorICAgICAgICAobGluZWFyRGlzdGFuY2UpOgorICAgICAgICAoZXhwb25lbnRpYWxEaXN0
YW5jZSk6CisgICAgICAgIChpbnZlcnNlRGlzdGFuY2UpOgorICAgICAgICAoY3JlYXRlR3JhcGgp
OgorICAgICAgICAoc3RhcnRTb3VyY2VzKToKKyAgICAgICAgKGVxdWFsUG93ZXJHYWluKToKKyAg
ICAgICAgKGNoZWNrRGlzdGFuY2VSZXN1bHQucmV0dXJuLnJlbmRlcmVkQnVmZmVyKToKKyAgICAg
ICAgKGNoZWNrRGlzdGFuY2VSZXN1bHQpOgorCiAyMDEyLTAxLTI5ICBZdXpvIEZ1amlzaGltYSAg
PHl1em9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBbQ2hyb21pdW1dIFVucmV2aWV3ZWQgdGVzdCBl
eHBlY3RhdGlvbiBjaGFuZ2UuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0
YW5jZS1leHBvbmVudGlhbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0
YW5jZS1leHBvbmVudGlhbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDkwMmUzOGEyMjJjNGVl
MTg0M2ExMDIzNTIzMjhlNDQ4ZmU2N2MwOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYmF1ZGlvL2Rpc3RhbmNlLWV4cG9uZW50aWFsLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEy
IEBACitUZXN0IGV4cG9uZW50aWFsIGRpc3RhbmNlIG1vZGVsIG9mIEF1ZGlvUGFubmVyTm9kZS4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIERpc3RhbmNlIG1vZGVsIHZhbHVl
IG1hdGNoZWQgZXhwZWN0ZWQgdmFsdWUuCitQQVNTIE51bWJlciBvZiBpbXB1bHNlcyBmb3VuZCBt
YXRjaGVzIG51bWJlciBvZiBwYW5uZXIgbm9kZXMuCitQQVNTIERpc3RhbmNlIGdhaW5zIGFyZSBj
b3JyZWN0LgorUEFTUyBEaXN0YW5jZSB0ZXN0IHBhc3NlZCBmb3IgZGlzdGFuY2UgbW9kZWwgMgor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWV4cG9uZW50aWFsLmh0bWwgYi9M
YXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVudGlhbC5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmI2YWZjMGUzYTRhMjJkZGJmYWVmNmVjM2Y3MDA2MTM2MzhlMDkxYzMKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVudGlhbC5odG1sCkBAIC0w
LDAgKzEsNDAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAx
IFRyYW5zaXRpb25hbC8vRU4iPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgaHJlZj0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4K
KyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9kaXN0YW5jZS1tb2RlbC10ZXN0aW5n
LmpzIj48L3NjcmlwdD4KKyAgPC9oZWFkPgorCisgIDxib2R5PgorICAgIDxkaXYgaWQ9ImRlc2Ny
aXB0aW9uIj48L2Rpdj4KKyAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworICAgIDxzY3Jp
cHQ+CisgICAgICBkZXNjcmlwdGlvbigiVGVzdCBleHBvbmVudGlhbCBkaXN0YW5jZSBtb2RlbCBv
ZiBBdWRpb1Bhbm5lck5vZGUuIik7CisKKyAgICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAg
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICB3
aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICAgICAgICAvLyBDcmVhdGUgb2ZmbGlu
ZSBhdWRpbyBjb250ZXh0LgorICAgICAgICAgIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250
ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsKKwor
ICAgICAgICAgIC8vIFRlbXAgcGFubmVyIG5vZGUgc28gd2UgY2FuIGdldCB0aGUgRVhQT05FTlRJ
QUxfRElTVEFOQ0UgdmFsdWUuCisgICAgICAgICAgdmFyIHRlbXBQYW5uZXIgPSBjb250ZXh0LmNy
ZWF0ZVBhbm5lcigpOworICAgICAgICAgIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgdGVtcFBh
bm5lci5FWFBPTkVOVElBTF9ESVNUQU5DRSwgMik7CisgICAgICB9CisKKyAgICAgIHJ1blRlc3Qo
KTsKKyAgICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKyAgICA8L3NjcmlwdD4KKwor
PHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlv
L2Rpc3RhbmNlLWludmVyc2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlz
dGFuY2UtaW52ZXJzZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjVhOTQ5MjQ0ZmIyOWY4NzJm
ZGU1MTljM2Y4YWQ3NDMxZTQzNzg4ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmF1ZGlvL2Rpc3RhbmNlLWludmVyc2UtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1Rl
c3QgaW52ZXJzZSBkaXN0YW5jZSBtb2RlbCBvZiBBdWRpb1Bhbm5lck5vZGUuCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBEaXN0YW5jZSBtb2RlbCB2YWx1ZSBtYXRjaGVkIGV4
cGVjdGVkIHZhbHVlLgorUEFTUyBOdW1iZXIgb2YgaW1wdWxzZXMgZm91bmQgbWF0Y2hlcyBudW1i
ZXIgb2YgcGFubmVyIG5vZGVzLgorUEFTUyBEaXN0YW5jZSBnYWlucyBhcmUgY29ycmVjdC4KK1BB
U1MgRGlzdGFuY2UgdGVzdCBwYXNzZWQgZm9yIGRpc3RhbmNlIG1vZGVsIDEKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJh
dWRpby9kaXN0YW5jZS1pbnZlcnNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTU3NzE3NDZmMDExMjk3YTA2
YzA3ODhiNzg3ZmVmYmU4ZmE4ZmRjOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmF1ZGlvL2Rpc3RhbmNlLWludmVyc2UuaHRtbApAQCAtMCwwICsxLDQwIEBACis8IURPQ1RZUEUg
SFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxo
dG1sPgorICA8aGVhZD4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+CisgICAgPHNjcmlwdCBzcmM9InJlc291
cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvZGlzdGFuY2UtbW9kZWwtdGVzdGluZy5qcyI+PC9zY3JpcHQ+CisgIDwvaGVh
ZD4KKworICA8Ym9keT4KKyAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+CisgICAgPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+CisKKyAgICA8c2NyaXB0PgorICAgICAgZGVzY3JpcHRpb24o
IlRlc3QgaW52ZXJzZSBkaXN0YW5jZSBtb2RlbCBvZiBBdWRpb1Bhbm5lck5vZGUuIik7CisKKyAg
ICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikgeworICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUo
KTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7
CisKKyAgICAgICAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBjb250ZXh0LgorICAgICAgICAg
IGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJM
ZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsKKworICAgICAgICAgIC8vIFRlbXAgcGFubmVyIG5v
ZGUgc28gd2UgY2FuIGdldCB0aGUgSU5WRVJTRV9ESVNUQU5DRSB2YWx1ZS4KKyAgICAgICAgICB2
YXIgdGVtcFBhbm5lciA9IGNvbnRleHQuY3JlYXRlUGFubmVyKCk7CisgICAgICAgICAgY3JlYXRl
VGVzdEFuZFJ1bihjb250ZXh0LCB0ZW1wUGFubmVyLklOVkVSU0VfRElTVEFOQ0UsIDEpOworICAg
ICAgfQorCisgICAgICBydW5UZXN0KCk7CisgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OworCisgICAgPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1saW5lYXItZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtbGluZWFyLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jOWQyOGE5MTUxNjY5ZDk2NTdmNmI0NWQ4ZjY4MmQ0YjA3ZmRmOWY0Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtbGluZWFyLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDEyIEBACitUZXN0IGxpbmVhciBkaXN0YW5jZSBtb2RlbCBvZiBBdWRpb1Bhbm5l
ck5vZGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBEaXN0YW5jZSBtb2Rl
bCB2YWx1ZSBtYXRjaGVkIGV4cGVjdGVkIHZhbHVlLgorUEFTUyBOdW1iZXIgb2YgaW1wdWxzZXMg
Zm91bmQgbWF0Y2hlcyBudW1iZXIgb2YgcGFubmVyIG5vZGVzLgorUEFTUyBEaXN0YW5jZSBnYWlu
cyBhcmUgY29ycmVjdC4KK1BBU1MgRGlzdGFuY2UgdGVzdCBwYXNzZWQgZm9yIGRpc3RhbmNlIG1v
ZGVsIDAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1saW5lYXIuaHRtbCBi
L0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIw
MjU1NjM0ODVjZjU1NmFkZTYxZDNmNDdiM2ZiYTk4MjM2OTg0YmUKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1saW5lYXIuaHRtbApAQCAtMCwwICsxLDQw
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0
aW9uYWwvL0VOIj4KKzxodG1sPgorICA8aGVhZD4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQi
IGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+CisgICAgPHNj
cmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKyAgICA8c2Ny
aXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZGlzdGFuY2UtbW9kZWwtdGVzdGluZy5qcyI+PC9z
Y3JpcHQ+CisgIDwvaGVhZD4KKworICA8Ym9keT4KKyAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+
PC9kaXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKyAgICA8c2NyaXB0PgorICAg
ICAgZGVzY3JpcHRpb24oIlRlc3QgbGluZWFyIGRpc3RhbmNlIG1vZGVsIG9mIEF1ZGlvUGFubmVy
Tm9kZS4iKTsKKworICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAgICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOworICAgICAgICAgIH0KKworICAgICAgICAgIHdpbmRvdy5qc1Rlc3RJ
c0FzeW5jID0gdHJ1ZTsKKworICAgICAgICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRl
eHQuCisgICAgICAgICAgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgc2FtcGxl
UmF0ZSAqIHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOworCisgICAgICAgICAgLy8g
Q3JlYXRlIHRlbXAgcGFubmVyIHRvIGdldCBMSU5FQVJfRElTVEFOQ0UgdmFsdWUgZm9yIHRlc3Rp
bmcuCisgICAgICAgICAgdmFyIHBhbm5lck1vZGVsID0gY29udGV4dC5jcmVhdGVQYW5uZXIoKTsK
KyAgICAgICAgICBjcmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsIHBhbm5lck1vZGVsLkxJTkVBUl9E
SVNUQU5DRSwgMCk7CisgICAgICB9CisKKyAgICAgIHJ1blRlc3QoKTsKKyAgICAgIHN1Y2Nlc3Nm
dWxseVBhcnNlZCA9IHRydWU7CisKKyAgICA8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisgIDwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9kaXN0YW5j
ZS1tb2RlbC10ZXN0aW5nLmpzIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2Rpc3Rh
bmNlLW1vZGVsLXRlc3RpbmcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmNmYjMwODQ0ZjQzZWM4MDllNjJiODIy
NGZkNWMyM2ExMmUzMmYwMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlv
L3Jlc291cmNlcy9kaXN0YW5jZS1tb2RlbC10ZXN0aW5nLmpzCkBAIC0wLDAgKzEsMjE2IEBACit2
YXIgc2FtcGxlUmF0ZSA9IDQ0MTAwLjA7CisKKy8vIEhvdyBtYW55IHBhbm5lciBub2RlcyB0byBj
cmVhdGUgZm9yIHRoZSB0ZXN0LgordmFyIG5vZGVzVG9DcmVhdGUgPSAxMDA7CisKKy8vIFRpbWUg
c3RlcCB3aGVuIGVhY2ggcGFubmVyIG5vZGUgc3RhcnRzLgordmFyIHRpbWVTdGVwID0gMC4wMDE7
CisKKy8vIE1ha2Ugc3VyZSB3ZSByZW5kZXIgbG9uZyBlbm91Z2ggdG8gZ2V0IGFsbCBvZiBvdXIg
bm9kZXMuCit2YXIgcmVuZGVyTGVuZ3RoU2Vjb25kcyA9IHRpbWVTdGVwICogKG5vZGVzVG9DcmVh
dGUgKyAxKTsKKworLy8gTGVuZ3RoIG9mIGFuIGltcHVsc2Ugc2lnbmFsLgordmFyIHB1bHNlTGVu
Z3RoRnJhbWVzID0gTWF0aC5yb3VuZCh0aW1lU3RlcCAqIHNhbXBsZVJhdGUpOworCisvLyBHbG9i
YWxzIHRvIG1ha2UgZGVidWdnaW5nIGEgbGl0dGxlIGVhc2llci4KK3ZhciBjb250ZXh0OwordmFy
IGltcHVsc2U7Cit2YXIgYnVmZmVyU291cmNlOwordmFyIHBhbm5lcjsKK3ZhciBwb3NpdGlvbjsK
K3ZhciB0aW1lOworICAgICAgCisvLyBGb3IgdGhlIHJlY29yZCwgdGhlc2UgZGlzdGFuY2UgZm9y
bXVsYXMgd2VyZSB0YWtlbiBmcm9tIHRoZSBPcGVuQUwKKy8vIHNwZWMKKy8vIChodHRwOi8vY29u
bmVjdC5jcmVhdGl2ZWxhYnMuY29tL29wZW5hbC9Eb2N1bWVudGF0aW9uL09wZW5BTCUyMDEuMSUy
MFNwZWNpZmljYXRpb24ucGRmKSwKKy8vIG5vdCB0aGUgY29kZS4gIFRoZSBXZWIgQXVkaW8gc3Bl
YyBmb2xsb3dzIHRoZSBPcGVuQUwgZm9ybXVsYXMuCisKK2Z1bmN0aW9uIGxpbmVhckRpc3RhbmNl
KHBhbm5lciwgeCwgeSwgeikgeworICAgIHZhciBkaXN0YW5jZSA9IE1hdGguc3FydCh4ICogeCAr
IHkgKiB5ICsgeiAqIHopOworICAgIGRpc3RhbmNlID0gTWF0aC5taW4oZGlzdGFuY2UsIHBhbm5l
ci5tYXhEaXN0YW5jZSk7CisgICAgdmFyIHJvbGxvZmYgPSBwYW5uZXIucm9sbG9mZkZhY3RvcjsK
KyAgICB2YXIgZ2FpbiA9ICgxIC0gcm9sbG9mZiAqIChkaXN0YW5jZSAtIHBhbm5lci5yZWZEaXN0
YW5jZSkgLyAocGFubmVyLm1heERpc3RhbmNlIC0gcGFubmVyLnJlZkRpc3RhbmNlKSk7CisKKyAg
ICByZXR1cm4gZ2FpbjsKK30KKworZnVuY3Rpb24gaW52ZXJzZURpc3RhbmNlKHBhbm5lciwgeCwg
eSwgeikgeworICAgIHZhciBkaXN0YW5jZSA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAq
IHopOworICAgIGRpc3RhbmNlID0gTWF0aC5taW4oZGlzdGFuY2UsIHBhbm5lci5tYXhEaXN0YW5j
ZSk7CisgICAgdmFyIHJvbGxvZmYgPSBwYW5uZXIucm9sbG9mZkZhY3RvcjsKKyAgICB2YXIgZ2Fp
biA9IHBhbm5lci5yZWZEaXN0YW5jZSAvIChwYW5uZXIucmVmRGlzdGFuY2UgKyByb2xsb2ZmICog
KGRpc3RhbmNlIC0gcGFubmVyLnJlZkRpc3RhbmNlKSk7CisKKyAgICByZXR1cm4gZ2FpbjsKK30K
KworZnVuY3Rpb24gZXhwb25lbnRpYWxEaXN0YW5jZShwYW5uZXIsIHgsIHksIHopIHsKKyAgICB2
YXIgZGlzdGFuY2UgPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KTsKKyAgICBkaXN0
YW5jZSA9IE1hdGgubWluKGRpc3RhbmNlLCBwYW5uZXIubWF4RGlzdGFuY2UpOworICAgIHZhciBy
b2xsb2ZmID0gcGFubmVyLnJvbGxvZmZGYWN0b3I7CisgICAgdmFyIGdhaW4gPSBNYXRoLnBvdyhk
aXN0YW5jZSAvIHBhbm5lci5yZWZEaXN0YW5jZSwgLXJvbGxvZmYpOworCisgICAgcmV0dXJuIGdh
aW47Cit9CisKKy8vIFRoaXMgYXJyYXkgbXVzdCBiZSBhcnJhbmdlZCBpbiB0aGUgbnVtZXJpYyBv
cmRlciBvZiB0aGUgZGlzdGFuY2UKKy8vIG1vZGVsIHZhbHVlcy4KK3ZhciBkaXN0YW5jZU1vZGVs
RnVuY3Rpb24gPSBbbGluZWFyRGlzdGFuY2UsIGludmVyc2VEaXN0YW5jZSwgZXhwb25lbnRpYWxE
aXN0YW5jZV07CisKK2Z1bmN0aW9uIGNyZWF0ZUdyYXBoKGNvbnRleHQsIGRpc3RhbmNlTW9kZWws
IG5vZGVDb3VudCkgeworICAgIGJ1ZmZlclNvdXJjZSA9IG5ldyBBcnJheShub2RlQ291bnQpOwor
ICAgIHBhbm5lciA9IG5ldyBBcnJheShub2RlQ291bnQpOworICAgIHBvc2l0aW9uID0gbmV3IEFy
cmF5KG5vZGVDb3VudCk7CisgICAgdGltZSA9IG5ldyBBcnJheShub2Rlc1RvQ3JlYXRlKTsKKwor
ICAgIGltcHVsc2UgPSBjcmVhdGVJbXB1bHNlQnVmZmVyKGNvbnRleHQsIHB1bHNlTGVuZ3RoRnJh
bWVzKTsKKworICAgIC8vIENyZWF0ZSBhbGwgdGhlIHNvdXJjZXMgYW5kIHBhbm5lcnMuCisgICAg
Ly8KKyAgICAvLyBXZSBNVVNUIHVzZSB0aGUgRVFVQUxQT1dFUiBwYW5uaW5nIG1vZGVsIHNvIHRo
YXQgd2UgY2FuIGVhc2lseQorICAgIC8vIGZpZ3VyZSBvdXQgdGhlIGdhaW4gaW50cm9kdWNlZCBi
eSB0aGUgcGFubmVyLgorICAgIC8vCisgICAgLy8gV2Ugd2FudCB0byBzdGF5IGluIHRoZSBtaWRk
bGUgb2YgdGhlIHBhbm5pbmcgcmFuZ2UsIHdoaWNoIG1lYW5zCisgICAgLy8gd2Ugd2FudCB0byBz
dGF5IG9uIHRoZSB6LWF4aXMuICBJZiB3ZSBkb24ndCwgdGhlbiB0aGUgZWZmZWN0IG9mCisgICAg
Ly8gcGFubmluZyBtb2RlbCB3aWxsIGJlIG11Y2ggbW9yZSBjb21wbGljYXRlZC4gIFdlJ3JlIG5v
dCB0ZXN0aW5nCisgICAgLy8gdGhlIHBhbm5lciwgYnV0IHRoZSBkaXN0YW5jZSBtb2RlbCwgc28g
d2Ugd2FudCB0aGUgcGFubmVyIGVmZmVjdAorICAgIC8vIHRvIGJlIHNpbXBsZS4KKyAgICAvLwor
ICAgIC8vIFRoZSBwYW5uZXJzIGFyZSBwbGFjZWQgYXQgYSB1bmlmb3JtIGludGVydmFscyBiZXR3
ZWVuIHRoZSBwYW5uZXIKKyAgICAvLyByZWZlcmVuY2UgZGlzdGFuY2UgYW5kIHRoZSBwYW5uZXIg
bWF4IGRpc3RhbmNlLiAgVGhlIHNvdXJjZSBpcworICAgIC8vIGFsc28gc3RhcnRlZCBhdCByZWd1
bGFyIGludGVydmFscy4KKyAgICBmb3IgKHZhciBrID0gMDsgayA8IG5vZGVDb3VudDsgKytrKSB7
CisgICAgICAgIGJ1ZmZlclNvdXJjZVtrXSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7
CisgICAgICAgIGJ1ZmZlclNvdXJjZVtrXS5idWZmZXIgPSBpbXB1bHNlOworCisgICAgICAgIHBh
bm5lcltrXSA9IGNvbnRleHQuY3JlYXRlUGFubmVyKCk7CisgICAgICAgIHBhbm5lcltrXS5wYW5u
aW5nTW9kZWwgPSBwYW5uZXIuRVFVQUxQT1dFUjsKKyAgICAgICAgcGFubmVyW2tdLmRpc3RhbmNl
TW9kZWwgPSBkaXN0YW5jZU1vZGVsOworCisgICAgICAgIHZhciBkaXN0YW5jZVN0ZXAgPSAocGFu
bmVyW2tdLm1heERpc3RhbmNlIC0gcGFubmVyW2tdLnJlZkRpc3RhbmNlKSAvIG5vZGVDb3VudDsK
KyAgICAgICAgcG9zaXRpb25ba10gPSBkaXN0YW5jZVN0ZXAgKiBrICsgcGFubmVyW2tdLnJlZkRp
c3RhbmNlOworICAgICAgICBwYW5uZXJba10uc2V0UG9zaXRpb24oMCwgMCwgcG9zaXRpb25ba10p
OworCisgICAgICAgIGJ1ZmZlclNvdXJjZVtrXS5jb25uZWN0KHBhbm5lcltrXSk7CisgICAgICAg
IHBhbm5lcltrXS5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pOworCisgICAgICAgIHRpbWVb
a10gPSBrICogdGltZVN0ZXA7CisgICAgICAgIGJ1ZmZlclNvdXJjZVtrXS5ub3RlT24odGltZVtr
XSk7CisgICAgfQorfQorCisvLyBkaXN0YW5jZU1vZGVsIHNob3VsZCBiZSB0aGUgZGlzdGFuY2Ug
bW9kZWwgY29uc3RhbnQgbGlrZQorLy8gTElORUFSX0RJU1RBTkNFLCBJTlZFUlNFX0RJU1RBTkNF
LCBhbmQgRVhQT05FTlRJQUxfRElTVEFOQ0UuICBUaGUKKy8vIGV4cGVjdGVkTW9kZWwgaXMgdGhl
IGV4cGVjdGVkIGFjdHVhbCBudW1lcmljIHZhbHVlIG9mIHRoZSBjb25zdGFudC4KK2Z1bmN0aW9u
IGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgZGlzdGFuY2VNb2RlbCwgZXhwZWN0ZWRNb2RlbCkg
eworICAgIC8vIFRvIHRlc3QgdGhlIGRpc3RhbmNlIG1vZGVscywgd2UgY3JlYXRlIGEgbnVtYmVy
IG9mIHBhbm5lcnMgYXQKKyAgICAvLyB1bmlmb3JtbHkgc3BhY2VkIGludGVydmFscyBvbiB0aGUg
ei1heGlzLiAgRWFjaCBvZiB0aGVzZSBhcmUKKyAgICAvLyBzdGFydGVkIGF0IGVxdWFsbHkgc3Bh
Y2VkIHRpbWUgaW50ZXJ2YWxzLiAgQWZ0ZXIgcmVuZGVyaW5nIHRoZQorICAgIC8vIHNpZ25hbHMs
IHdlIGV4YW1pbmUgd2hlcmUgZWFjaCBpbXB1bHNlIGlzIGxvY2F0ZWQgYW5kIHRoZQorICAgIC8v
IGF0dGVudWF0aW9uIG9mIHRoZSBpbXB1bHNlLiAgVGhlIGF0dGVudWF0aW9uIGlzIGNvbXBhcmVk
CisgICAgLy8gYWdhaW5zdCBvdXIgZXhwZWN0ZWQgYXR0ZW51YXRpb24uCisKKyAgICBjcmVhdGVH
cmFwaChjb250ZXh0LCBkaXN0YW5jZU1vZGVsLCBub2Rlc1RvQ3JlYXRlKTsKKworICAgIGNvbnRl
eHQub25jb21wbGV0ZSA9IGNoZWNrRGlzdGFuY2VSZXN1bHQoZGlzdGFuY2VNb2RlbCwgZXhwZWN0
ZWRNb2RlbCk7CisgICAgY29udGV4dC5zdGFydFJlbmRlcmluZygpOworfQorCisvLyBUaGUgZ2Fp
biBjYXVzZWQgYnkgdGhlIEVRVUFMUE9XRVIgcGFubmluZyBtb2RlbCwgaWYgd2Ugc3RheSBvbiB0
aGUKKy8vIHogYXhpcywgd2l0aCB0aGUgZGVmYXVsdCBvcmllbnRhdGlvbnMuCitmdW5jdGlvbiBl
cXVhbFBvd2VyR2FpbigpIHsKKyAgICByZXR1cm4gTWF0aC5TUVJUMV8yOworfQorCitmdW5jdGlv
biBjaGVja0Rpc3RhbmNlUmVzdWx0KG1vZGVsLCBleHBlY3RlZE1vZGVsKSB7CisgICAgcmV0dXJu
IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHJlbmRlcmVkQnVmZmVyID0gZXZlbnQucmVuZGVy
ZWRCdWZmZXI7CisgICAgICAgIHJlbmRlcmVkRGF0YSA9IHJlbmRlcmVkQnVmZmVyLmdldENoYW5u
ZWxEYXRhKDApOworCisgICAgICAgIC8vIFRoZSBtYXggYWxsb3dlZCBlcnJvciBiZXR3ZWVuIHRo
ZSBhY3R1YWwgZ2FpbiBhbmQgdGhlIGV4cGVjdGVkCisgICAgICAgIC8vIHZhbHVlLiAgVGhpcyBp
cyBkZXRlcm1pbmVkIGV4cGVyaW1lbnRhbGx5LiAgU2V0IHRvIDAgdG8gc2VlIHdoYXQKKyAgICAg
ICAgLy8gdGhlIGFjdHVhbCBlcnJvcnMgYXJlLgorICAgICAgICB2YXIgbWF4QWxsb3dlZEVycm9y
ID0gMi4zZS02OworICAgCisgICAgICAgIHZhciBzdWNjZXNzID0gdHJ1ZTsKKworICAgICAgICAv
LyBOdW1iZXIgb2YgaW1wdWxzZXMgd2UgZm91bmQgaW4gdGhlIHJlbmRlcmVkIHJlc3VsdC4KKyAg
ICAgICAgdmFyIGltcHVsc2VDb3VudCA9IDA7CisKKyAgICAgICAgLy8gTWF4aW11bSByZWxhdGl2
ZSBlcnJvciBpbiB0aGUgZ2FpbiBvZiB0aGUgaW1wdWxzZXMuCisgICAgICAgIHZhciBtYXhFcnJv
ciA9IDA7CisKKyAgICAgICAgLy8gTnVtYmVyIG9mIGltcHVsc2VzIHRoYXQgd2VyZSBub3QgYXQg
dGhlIGV4cGVjdGVkIGxvY2F0aW9uLgorICAgICAgICB2YXIgdGltZUVycm9yQ291bnQgPSAwOwor
CisgICAgICAgIC8vIEFycmF5IG9mIGxvY2F0aW9ucyBvZiB0aGUgaW1wdWxzZXMgdGhhdCB3ZXJl
IG5vdCBhdCB0aGUKKyAgICAgICAgLy8gZXhwZWN0ZWQgbG9jYXRpb24uCisgICAgICAgIHZhciB0
aW1lRXJyb3JzID0gbmV3IEFycmF5KCk7CisKKyAgICAgICAgLy8gU3RlcCB0aHJvdWdoIHRoZSBy
ZW5kZXJlZCBkYXRhIHRvIGZpbmQgYWxsIHRoZSBub24temVybyBwb2ludHMKKyAgICAgICAgLy8g
c28gd2UgY2FuIGZpbmQgd2hlcmUgb3VyIGRpc3RhbmNlLWF0dGVudWF0ZWQgaW1wdWxzZXMgYXJl
LgorICAgICAgICAvLyBUaGVzZSBhcmUgdGVzdGVkIGFnYWluc3QgdGhlIGV4cGVjdGVkIGF0dGVu
dWF0aW9ucyBhdCB0aGF0CisgICAgICAgIC8vIGRpc3RhbmNlLgorICAgICAgICBmb3IgKHZhciBr
ID0gMDsgayA8IHJlbmRlcmVkRGF0YS5sZW5ndGg7ICsraykgeworICAgICAgICAgICAgaWYgKHJl
bmRlcmVkRGF0YVtrXSAhPSAwKSB7CisgICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlRnVuY3Rp
b24gPSBkaXN0YW5jZU1vZGVsRnVuY3Rpb25bcGFubmVyW2ltcHVsc2VDb3VudF0uZGlzdGFuY2VN
b2RlbF07CisgICAgICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gZGlzdGFuY2VGdW5jdGlvbihw
YW5uZXJbaW1wdWxzZUNvdW50XSwgMCwgMCwgcG9zaXRpb25baW1wdWxzZUNvdW50XSk7CisKKyAg
ICAgICAgICAgICAgICAvLyBBZGp1c3QgZm9yIHRoZSBjZW50ZXItcGFubmluZyBvZiB0aGUgRVFV
QUxQT1dFUiBwYW5uaW5nCisgICAgICAgICAgICAgICAgLy8gbW9kZWwgdGhhdCB3ZSdyZSB1c2lu
Zy4KKyAgICAgICAgICAgICAgICBleHBlY3RlZCAqPSBlcXVhbFBvd2VyR2FpbigpOworCisgICAg
ICAgICAgICAgICAgdmFyIGVycm9yID0gTWF0aC5hYnMocmVuZGVyZWREYXRhW2tdIC0gZXhwZWN0
ZWQpIC8gTWF0aC5hYnMoZXhwZWN0ZWQpOworCisgICAgICAgICAgICAgICAgbWF4RXJyb3IgPSBN
YXRoLm1heChtYXhFcnJvciwgTWF0aC5hYnMoZXJyb3IpKTsKKworICAgICAgICAgICAgICAgIC8v
IEtlZXAgdHJhY2sgb2YgYW55IGltcHVsc2VzIHRoYXQgYXJlbid0IHdoZXJlIHdlIGV4cGVjdCB0
aGVtCisgICAgICAgICAgICAgICAgLy8gdG8gYmUuCisgICAgICAgICAgICAgICAgdmFyIGV4cGVj
dGVkRnJhbWUgPSB0aW1lVG9TYW1wbGVGcmFtZSh0aW1lW2ltcHVsc2VDb3VudF0sIHNhbXBsZVJh
dGUpOworICAgICAgICAgICAgICAgIGlmIChrICE9IGV4cGVjdGVkRnJhbWUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGltZUVycm9yc1t0aW1lRXJyb3JDb3VudF0gPSB7IGFjdHVhbCA6IGssIGV4
cGVjdGVkIDogZXhwZWN0ZWRGcmFtZX07CisgICAgICAgICAgICAgICAgICAgICsrdGltZUVycm9y
Q291bnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICsraW1wdWxzZUNvdW50
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKG1vZGVsID09IGV4cGVj
dGVkTW9kZWwpIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIkRpc3RhbmNlIG1vZGVsIHZhbHVl
IG1hdGNoZWQgZXhwZWN0ZWQgdmFsdWUuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICB0ZXN0RmFpbGVkKCJEaXN0YW5jZSBtb2RlbCB2YWx1ZSBkb2VzIG5vdCBtYXRjaCBleHBlY3Rl
ZCB2YWx1ZS4iKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgfSAgICAK
KworICAgICAgICBpZiAoaW1wdWxzZUNvdW50ID09IG5vZGVzVG9DcmVhdGUpIHsKKyAgICAgICAg
ICAgIHRlc3RQYXNzZWQoIk51bWJlciBvZiBpbXB1bHNlcyBmb3VuZCBtYXRjaGVzIG51bWJlciBv
ZiBwYW5uZXIgbm9kZXMuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXN0RmFp
bGVkKCJOdW1iZXIgb2YgaW1wdWxzZXMgaXMgaW5jb3JyZWN0LiAgRm91bmQgIiArIGltcHVsc2VD
b3VudCArICIgYnV0IGV4cGVjdGVkICIgKyBub2Rlc1RvQ3JlYXRlICsgIi4iKTsKKyAgICAgICAg
ICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtYXhFcnJvciA8
PSBtYXhBbGxvd2VkRXJyb3IpIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIkRpc3RhbmNlIGdh
aW5zIGFyZSBjb3JyZWN0LiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdEZh
aWxlZCgiRGlzdGFuY2UgZ2FpbnMgYXJlIGluY29ycmVjdC4gIE1heCByZWwgZXJyb3IgPSAiICsg
bWF4RXJyb3IgKyAiIChtYXhBbGxvd2VkRXJyb3IgPSAiICsgbWF4QWxsb3dlZEVycm9yICsgIiki
KTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IFByaW50IG91dCBpbmZvcm1hdGlvbiBvbiB0aGUgaW1wdWxzZXMgdGhhdCBvY2N1cnJlZCBhdCBh
bgorICAgICAgICAvLyB1bmV4cGVjdGVkIHBsYWNlLgorICAgICAgICBpZiAodGltZUVycm9ycy5s
ZW5ndGggPiAwKSB7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgICAgICB0
ZXN0RmFpbGVkKHRpbWVFcnJvcnMubGVuZ3RoICsgIiB0aW1pbmcgZXJyb3JzIGZvdW5kIik7Cisg
ICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRpbWVFcnJvcnMubGVuZ3RoOyArK2spIHsK
KyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJGb3VuZCBpbXB1bHNlIGF0IHNhbXBsZSBmcmFt
ZSAiICsgdGltZUVycm9yc1trXS5hY3R1YWwgKyAiIGJ1dCBleHBlY3RlZCAiICsgdGltZUVycm9y
c1trXS5leHBlY3RlZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
c3VjY2VzcykgeworICAgICAgICAgICAgdGVzdFBhc3NlZCgiRGlzdGFuY2UgdGVzdCBwYXNzZWQg
Zm9yIGRpc3RhbmNlIG1vZGVsICIgKyBtb2RlbCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB0ZXN0RmFpbGVkKCJEaXN0YW5jZSB0ZXN0IGZhaWxlZCBmb3IgZGlzdGFuY2UgbW9kZWwg
IiArIG1vZGVsKTsKKyAgICAgICAgfQorCisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0K
K30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124763</attachid>
            <date>2012-01-31 09:54:30 -0800</date>
            <delta_ts>2012-01-31 10:52:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74273-20120131095429.patch</filename>
            <type>text/plain</type>
            <size>19114</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTU5ODEzZTYzNjhlYmJk
YjVmMmIyZWY5NjNjYzVjYzI1NmNlNmYxZi4uNDY5ODA0Y2YxMWVlNWEzMTEzNjZlNTcxOGE2MmFl
MTAyMzdiOThmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAxLTA5ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBDb25zdGFudCB2YWx1ZXMgdG8g
c2V0ICJkaXN0YW5jZU1vZGVsIiBhcmUgdW5kZWZpbmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDI3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiB3ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVu
dGlhbC5odG1sCisgICAgICAgICAgICAgICB3ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLmh0bWwK
KyAgICAgICAgICAgICAgIHdlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci5odG1sCisKKyAgICAgICAg
KiB3ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaDogRGVmaW5lIGVudW0gZm9yIHRoZSBuZXcgY29u
c3RhbnRzCisgICAgICAgIGZvciB0aGUgZGlzdGFuY2UgbW9kZWxzLgorICAgICAgICAqIHdlYmF1
ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGw6IERlZmluZSBtYXRjaGluZyBjb25zdGFudHMgZm9yIHRo
ZQorICAgICAgICBkaXN0YW5jZSBtb2RlbHMuCisKIDIwMTItMDEtMzEgIFBhYmxvIEZsb3VyZXQg
IDxwYWJsb2ZAbW90b3JvbGEuY29tPgogCiAgICAgICAgIEZpeCBjb21waWxhdGlvbiBlcnJvcnMg
b24gYnVpbGQtd2Via2l0IC0tZGVidWcgLS1uby13b3JrZXJzIG9uIG1hYy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oIGIvU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmgKaW5kZXggOThkMjc3NDNlNDExNzk0M2IyNjg3
OGU2N2VjZDcxZTM5NjRiZGM0YS4uNDQ1OTdlODgzMDMxNDYxNTFkNGZlZmE2NjY3NWQ3OTY5Njll
NThjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2Rl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmgKQEAgLTUz
LDYgKzUzLDE0IEBAIHB1YmxpYzoKICAgICAgICAgU09VTkRGSUVMRCA9IDIsCiAgICAgfTsKIAor
ICAgIC8vIFRoZXNlIG11c3QgYmUgZGVmaW5lZCBhcyBpbiB0aGUgLmlkbCBmaWxlIGFuZCBtdXN0
IG1hdGNoIHRob3NlCisgICAgLy8gaW4gdGhlIERpc3RhbmNlRWZmZWN0IGNsYXNzLgorICAgIGVu
dW0geworICAgICAgICBMSU5FQVJfRElTVEFOQ0UgPSAwLAorICAgICAgICBJTlZFUlNFX0RJU1RB
TkNFID0gMSwKKyAgICAgICAgRVhQT05FTlRJQUxfRElTVEFOQ0UgPSAyLAorICAgIH07CisgICAg
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QXVkaW9QYW5uZXJOb2RlPiBjcmVhdGUoQXVkaW9Db250
ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBBdWRpb1Bhbm5lck5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwKaW5kZXggMmRiMDkzZDdiNTAz
YWExZTljYzQ1ZjY0YTcxN2EwYzE4NDRiYWRkNy4uNTk3YTNlYWRmYmFjOWU3NmJhOWRhNzQyMzNi
ZTE1YjlkNzQyNTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Q
YW5uZXJOb2RlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5v
ZGUuaWRsCkBAIC0zMyw2ICszMywxMSBAQCBtb2R1bGUgYXVkaW8gewogICAgICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBIUlRGID0gMTsKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgU09V
TkRGSUVMRCA9IDI7CiAKKyAgICAgICAgLy8gRGlzdGFuY2UgbW9kZWwKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgTElORUFSX0RJU1RBTkNFID0gMDsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgSU5WRVJTRV9ESVNUQU5DRSA9IDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IEVYUE9ORU5USUFMX0RJU1RBTkNFID0gMjsKKwogICAgICAgICAvLyBEZWZhdWx0IG1vZGVs
IGZvciBzdGVyZW8gaXMgSFJURiAKICAgICAgICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgcGFu
bmluZ01vZGVsOyAvLyBGSVhNRTogdXNlIHVuc2lnbmVkIHNob3J0IHdoZW4gZ2x1ZSBnZW5lcmF0
aW9uIHN1cHBvcnRzIGl0CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA5ODVlNWUyODkzNDIwMTAwNjg0ODAwMTUwMjQ1YTA3
YjZlZTA0NGI3Li44MWNiOTUxMTgwNzc5NTQzM2Q2OGE2YTQyMWQxMzNkNTk0YWMzMjMzIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjcgQEAKKzIwMTItMDEtMDkgIFJheW1vbmQgVG95ICA8cnRveUBnb29nbGUu
Y29tPgorCisgICAgICAgIENvbnN0YW50IHZhbHVlcyB0byBzZXQgImRpc3RhbmNlTW9kZWwiIGFy
ZSB1bmRlZmluZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc0MjczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiB3ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVudGlhbC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHdlYmF1ZGlvL2Rpc3RhbmNlLWV4cG9uZW50aWFsLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHdlYmF1ZGlvL2Rpc3RhbmNlLWludmVyc2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiB3ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHdlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHdlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRp
by9yZXNvdXJjZXMvZGlzdGFuY2UtbW9kZWwtdGVzdGluZy5qczogQWRkZWQuCisgICAgICAgIChj
cmVhdGVJbXB1bHNlQnVmZmVyKToKKyAgICAgICAgKGxpbmVhckRpc3RhbmNlKToKKyAgICAgICAg
KGV4cG9uZW50aWFsRGlzdGFuY2UpOgorICAgICAgICAoaW52ZXJzZURpc3RhbmNlKToKKyAgICAg
ICAgKGNyZWF0ZUdyYXBoKToKKyAgICAgICAgKHN0YXJ0U291cmNlcyk6CisgICAgICAgIChlcXVh
bFBvd2VyR2Fpbik6CisgICAgICAgIChjaGVja0Rpc3RhbmNlUmVzdWx0LnJldHVybi5yZW5kZXJl
ZEJ1ZmZlcik6CisgICAgICAgIChjaGVja0Rpc3RhbmNlUmVzdWx0KToKKwogMjAxMi0wMS0zMSAg
WXV6byBGdWppc2hpbWEgIDx5dXpvQGdvb2dsZS5jb20+CiAKICAgICAgICAgW0Nocm9taXVtXSBV
bnJldmlld2VkIHRlc3QgZXhwZWN0YXRpb24gY2hhbmdlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vZGlzdGFuY2UtZXhwb25lbnRpYWwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vZGlzdGFuY2UtZXhwb25lbnRpYWwtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjQ5MDJlMzhhMjIyYzRlZTE4NDNhMTAyMzUyMzI4ZTQ0OGZlNjdjMDkKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVudGlhbC1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwxMiBAQAorVGVzdCBleHBvbmVudGlhbCBkaXN0YW5jZSBtb2RlbCBvZiBB
dWRpb1Bhbm5lck5vZGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBEaXN0
YW5jZSBtb2RlbCB2YWx1ZSBtYXRjaGVkIGV4cGVjdGVkIHZhbHVlLgorUEFTUyBOdW1iZXIgb2Yg
aW1wdWxzZXMgZm91bmQgbWF0Y2hlcyBudW1iZXIgb2YgcGFubmVyIG5vZGVzLgorUEFTUyBEaXN0
YW5jZSBnYWlucyBhcmUgY29ycmVjdC4KK1BBU1MgRGlzdGFuY2UgdGVzdCBwYXNzZWQgZm9yIGRp
c3RhbmNlIG1vZGVsIDIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1leHBv
bmVudGlhbC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtZXhwb25lbnRpYWwu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iNmFmYzBlM2E0YTIyZGRiZmFlZjZlYzNmNzAwNjEzNjM4ZTA5MWMz
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtZXhwb25l
bnRpYWwuaHRtbApAQCAtMCwwICsxLDQwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1cz
Qy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorICA8aGVhZD4KKyAg
ICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3Qtc3R5bGUuY3NzIi8+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5n
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZGlzdGFu
Y2UtbW9kZWwtdGVzdGluZy5qcyI+PC9zY3JpcHQ+CisgIDwvaGVhZD4KKworICA8Ym9keT4KKyAg
ICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+CisKKyAgICA8c2NyaXB0PgorICAgICAgZGVzY3JpcHRpb24oIlRlc3QgZXhwb25lbnRpYWwg
ZGlzdGFuY2UgbW9kZWwgb2YgQXVkaW9QYW5uZXJOb2RlLiIpOworCisgICAgICBmdW5jdGlvbiBy
dW5UZXN0KCkgeworICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAg
fQorCisgICAgICAgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworCisgICAgICAgICAg
Ly8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dC4KKyAgICAgICAgICBjb250ZXh0ID0gbmV3
IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1wbGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vjb25kcywg
c2FtcGxlUmF0ZSk7CisKKyAgICAgICAgICAvLyBUZW1wIHBhbm5lciBub2RlIHNvIHdlIGNhbiBn
ZXQgdGhlIEVYUE9ORU5USUFMX0RJU1RBTkNFIHZhbHVlLgorICAgICAgICAgIHZhciB0ZW1wUGFu
bmVyID0gY29udGV4dC5jcmVhdGVQYW5uZXIoKTsKKyAgICAgICAgICBjcmVhdGVUZXN0QW5kUnVu
KGNvbnRleHQsIHRlbXBQYW5uZXIuRVhQT05FTlRJQUxfRElTVEFOQ0UsIDIpOworICAgICAgfQor
CisgICAgICBydW5UZXN0KCk7CisgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCisg
ICAgPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWludmVyc2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1
YTk0OTI0NGZiMjlmODcyZmRlNTE5YzNmOGFkNzQzMWU0Mzc4OGUKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDEyIEBACitUZXN0IGludmVyc2UgZGlzdGFuY2UgbW9kZWwgb2YgQXVkaW9QYW5uZXJO
b2RlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgRGlzdGFuY2UgbW9kZWwg
dmFsdWUgbWF0Y2hlZCBleHBlY3RlZCB2YWx1ZS4KK1BBU1MgTnVtYmVyIG9mIGltcHVsc2VzIGZv
dW5kIG1hdGNoZXMgbnVtYmVyIG9mIHBhbm5lciBub2Rlcy4KK1BBU1MgRGlzdGFuY2UgZ2FpbnMg
YXJlIGNvcnJlY3QuCitQQVNTIERpc3RhbmNlIHRlc3QgcGFzc2VkIGZvciBkaXN0YW5jZSBtb2Rl
bCAxCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtaW52ZXJzZS5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtaW52ZXJzZS5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU1
NzcxNzQ2ZjAxMTI5N2EwNmMwNzg4Yjc4N2ZlZmJlOGZhOGZkYzkKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLmh0bWwKQEAgLTAsMCArMSw0
MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNp
dGlvbmFsLy9FTiI+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorICAgIDxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Rpc3RhbmNlLW1vZGVsLXRlc3RpbmcuanMiPjwv
c2NyaXB0PgorICA8L2hlYWQ+CisKKyAgPGJvZHk+CisgICAgPGRpdiBpZD0iZGVzY3JpcHRpb24i
PjwvZGl2PgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCisgICAgPHNjcmlwdD4KKyAg
ICAgIGRlc2NyaXB0aW9uKCJUZXN0IGludmVyc2UgZGlzdGFuY2UgbW9kZWwgb2YgQXVkaW9QYW5u
ZXJOb2RlLiIpOworCisgICAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgd2luZG93LmpzVGVz
dElzQXN5bmMgPSB0cnVlOworCisgICAgICAgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29u
dGV4dC4KKyAgICAgICAgICBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1w
bGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisKKyAgICAgICAgICAv
LyBUZW1wIHBhbm5lciBub2RlIHNvIHdlIGNhbiBnZXQgdGhlIElOVkVSU0VfRElTVEFOQ0UgdmFs
dWUuCisgICAgICAgICAgdmFyIHRlbXBQYW5uZXIgPSBjb250ZXh0LmNyZWF0ZVBhbm5lcigpOwor
ICAgICAgICAgIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgdGVtcFBhbm5lci5JTlZFUlNFX0RJ
U1RBTkNFLCAxKTsKKyAgICAgIH0KKworICAgICAgcnVuVGVzdCgpOworICAgICAgc3VjY2Vzc2Z1
bGx5UGFyc2VkID0gdHJ1ZTsKKworICAgIDwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKyAgPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtbGluZWFyLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzlkMjhhOTE1MTY2OWQ5NjU3ZjZiNDVkOGY2ODJkNGIwN2ZkZjlm
NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVh
ci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMiBAQAorVGVzdCBsaW5lYXIgZGlzdGFuY2UgbW9k
ZWwgb2YgQXVkaW9QYW5uZXJOb2RlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BB
U1MgRGlzdGFuY2UgbW9kZWwgdmFsdWUgbWF0Y2hlZCBleHBlY3RlZCB2YWx1ZS4KK1BBU1MgTnVt
YmVyIG9mIGltcHVsc2VzIGZvdW5kIG1hdGNoZXMgbnVtYmVyIG9mIHBhbm5lciBub2Rlcy4KK1BB
U1MgRGlzdGFuY2UgZ2FpbnMgYXJlIGNvcnJlY3QuCitQQVNTIERpc3RhbmNlIHRlc3QgcGFzc2Vk
IGZvciBkaXN0YW5jZSBtb2RlbCAwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFu
Y2UtbGluZWFyLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1saW5lYXIuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iMDI1NTYzNDg1Y2Y1NTZhZGU2MWQzZjQ3YjNmYmE5ODIzNjk4NGJlCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtbGluZWFyLmh0
bWwKQEAgLTAsMCArMSw0MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBI
VE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxl
LmNzcyIvPgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Rpc3RhbmNlLW1vZGVs
LXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICA8L2hlYWQ+CisKKyAgPGJvZHk+CisgICAgPGRpdiBp
ZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCisg
ICAgPHNjcmlwdD4KKyAgICAgIGRlc2NyaXB0aW9uKCJUZXN0IGxpbmVhciBkaXN0YW5jZSBtb2Rl
bCBvZiBBdWRpb1Bhbm5lck5vZGUuIik7CisKKyAgICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7Cisg
ICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICB9CisKKyAgICAgICAg
ICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICAgICAgICAvLyBDcmVhdGUgb2Zm
bGluZSBhdWRpbyBjb250ZXh0LgorICAgICAgICAgIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9D
b250ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsK
KworICAgICAgICAgIC8vIENyZWF0ZSB0ZW1wIHBhbm5lciB0byBnZXQgTElORUFSX0RJU1RBTkNF
IHZhbHVlIGZvciB0ZXN0aW5nLgorICAgICAgICAgIHZhciBwYW5uZXJNb2RlbCA9IGNvbnRleHQu
Y3JlYXRlUGFubmVyKCk7CisgICAgICAgICAgY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCBwYW5u
ZXJNb2RlbC5MSU5FQVJfRElTVEFOQ0UsIDApOworICAgICAgfQorCisgICAgICBydW5UZXN0KCk7
CisgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCisgICAgPC9zY3JpcHQ+CisKKzxz
Y3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9y
ZXNvdXJjZXMvZGlzdGFuY2UtbW9kZWwtdGVzdGluZy5qcyBiL0xheW91dFRlc3RzL3dlYmF1ZGlv
L3Jlc291cmNlcy9kaXN0YW5jZS1tb2RlbC10ZXN0aW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjZmIzMDg0
NGY0M2VjODA5ZTYyYjgyMjRmZDVjMjNhMTJlMzJmMDEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvZGlzdGFuY2UtbW9kZWwtdGVzdGluZy5qcwpAQCAt
MCwwICsxLDIxNiBAQAordmFyIHNhbXBsZVJhdGUgPSA0NDEwMC4wOworCisvLyBIb3cgbWFueSBw
YW5uZXIgbm9kZXMgdG8gY3JlYXRlIGZvciB0aGUgdGVzdC4KK3ZhciBub2Rlc1RvQ3JlYXRlID0g
MTAwOworCisvLyBUaW1lIHN0ZXAgd2hlbiBlYWNoIHBhbm5lciBub2RlIHN0YXJ0cy4KK3ZhciB0
aW1lU3RlcCA9IDAuMDAxOworCisvLyBNYWtlIHN1cmUgd2UgcmVuZGVyIGxvbmcgZW5vdWdoIHRv
IGdldCBhbGwgb2Ygb3VyIG5vZGVzLgordmFyIHJlbmRlckxlbmd0aFNlY29uZHMgPSB0aW1lU3Rl
cCAqIChub2Rlc1RvQ3JlYXRlICsgMSk7CisKKy8vIExlbmd0aCBvZiBhbiBpbXB1bHNlIHNpZ25h
bC4KK3ZhciBwdWxzZUxlbmd0aEZyYW1lcyA9IE1hdGgucm91bmQodGltZVN0ZXAgKiBzYW1wbGVS
YXRlKTsKKworLy8gR2xvYmFscyB0byBtYWtlIGRlYnVnZ2luZyBhIGxpdHRsZSBlYXNpZXIuCit2
YXIgY29udGV4dDsKK3ZhciBpbXB1bHNlOwordmFyIGJ1ZmZlclNvdXJjZTsKK3ZhciBwYW5uZXI7
Cit2YXIgcG9zaXRpb247Cit2YXIgdGltZTsKKyAgICAgIAorLy8gRm9yIHRoZSByZWNvcmQsIHRo
ZXNlIGRpc3RhbmNlIGZvcm11bGFzIHdlcmUgdGFrZW4gZnJvbSB0aGUgT3BlbkFMCisvLyBzcGVj
CisvLyAoaHR0cDovL2Nvbm5lY3QuY3JlYXRpdmVsYWJzLmNvbS9vcGVuYWwvRG9jdW1lbnRhdGlv
bi9PcGVuQUwlMjAxLjElMjBTcGVjaWZpY2F0aW9uLnBkZiksCisvLyBub3QgdGhlIGNvZGUuICBU
aGUgV2ViIEF1ZGlvIHNwZWMgZm9sbG93cyB0aGUgT3BlbkFMIGZvcm11bGFzLgorCitmdW5jdGlv
biBsaW5lYXJEaXN0YW5jZShwYW5uZXIsIHgsIHksIHopIHsKKyAgICB2YXIgZGlzdGFuY2UgPSBN
YXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KTsKKyAgICBkaXN0YW5jZSA9IE1hdGgubWlu
KGRpc3RhbmNlLCBwYW5uZXIubWF4RGlzdGFuY2UpOworICAgIHZhciByb2xsb2ZmID0gcGFubmVy
LnJvbGxvZmZGYWN0b3I7CisgICAgdmFyIGdhaW4gPSAoMSAtIHJvbGxvZmYgKiAoZGlzdGFuY2Ug
LSBwYW5uZXIucmVmRGlzdGFuY2UpIC8gKHBhbm5lci5tYXhEaXN0YW5jZSAtIHBhbm5lci5yZWZE
aXN0YW5jZSkpOworCisgICAgcmV0dXJuIGdhaW47Cit9CisKK2Z1bmN0aW9uIGludmVyc2VEaXN0
YW5jZShwYW5uZXIsIHgsIHksIHopIHsKKyAgICB2YXIgZGlzdGFuY2UgPSBNYXRoLnNxcnQoeCAq
IHggKyB5ICogeSArIHogKiB6KTsKKyAgICBkaXN0YW5jZSA9IE1hdGgubWluKGRpc3RhbmNlLCBw
YW5uZXIubWF4RGlzdGFuY2UpOworICAgIHZhciByb2xsb2ZmID0gcGFubmVyLnJvbGxvZmZGYWN0
b3I7CisgICAgdmFyIGdhaW4gPSBwYW5uZXIucmVmRGlzdGFuY2UgLyAocGFubmVyLnJlZkRpc3Rh
bmNlICsgcm9sbG9mZiAqIChkaXN0YW5jZSAtIHBhbm5lci5yZWZEaXN0YW5jZSkpOworCisgICAg
cmV0dXJuIGdhaW47Cit9CisKK2Z1bmN0aW9uIGV4cG9uZW50aWFsRGlzdGFuY2UocGFubmVyLCB4
LCB5LCB6KSB7CisgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6
ICogeik7CisgICAgZGlzdGFuY2UgPSBNYXRoLm1pbihkaXN0YW5jZSwgcGFubmVyLm1heERpc3Rh
bmNlKTsKKyAgICB2YXIgcm9sbG9mZiA9IHBhbm5lci5yb2xsb2ZmRmFjdG9yOworICAgIHZhciBn
YWluID0gTWF0aC5wb3coZGlzdGFuY2UgLyBwYW5uZXIucmVmRGlzdGFuY2UsIC1yb2xsb2ZmKTsK
KworICAgIHJldHVybiBnYWluOworfQorCisvLyBUaGlzIGFycmF5IG11c3QgYmUgYXJyYW5nZWQg
aW4gdGhlIG51bWVyaWMgb3JkZXIgb2YgdGhlIGRpc3RhbmNlCisvLyBtb2RlbCB2YWx1ZXMuCit2
YXIgZGlzdGFuY2VNb2RlbEZ1bmN0aW9uID0gW2xpbmVhckRpc3RhbmNlLCBpbnZlcnNlRGlzdGFu
Y2UsIGV4cG9uZW50aWFsRGlzdGFuY2VdOworCitmdW5jdGlvbiBjcmVhdGVHcmFwaChjb250ZXh0
LCBkaXN0YW5jZU1vZGVsLCBub2RlQ291bnQpIHsKKyAgICBidWZmZXJTb3VyY2UgPSBuZXcgQXJy
YXkobm9kZUNvdW50KTsKKyAgICBwYW5uZXIgPSBuZXcgQXJyYXkobm9kZUNvdW50KTsKKyAgICBw
b3NpdGlvbiA9IG5ldyBBcnJheShub2RlQ291bnQpOworICAgIHRpbWUgPSBuZXcgQXJyYXkobm9k
ZXNUb0NyZWF0ZSk7CisKKyAgICBpbXB1bHNlID0gY3JlYXRlSW1wdWxzZUJ1ZmZlcihjb250ZXh0
LCBwdWxzZUxlbmd0aEZyYW1lcyk7CisKKyAgICAvLyBDcmVhdGUgYWxsIHRoZSBzb3VyY2VzIGFu
ZCBwYW5uZXJzLgorICAgIC8vCisgICAgLy8gV2UgTVVTVCB1c2UgdGhlIEVRVUFMUE9XRVIgcGFu
bmluZyBtb2RlbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkKKyAgICAvLyBmaWd1cmUgb3V0IHRoZSBn
YWluIGludHJvZHVjZWQgYnkgdGhlIHBhbm5lci4KKyAgICAvLworICAgIC8vIFdlIHdhbnQgdG8g
c3RheSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwYW5uaW5nIHJhbmdlLCB3aGljaCBtZWFucworICAg
IC8vIHdlIHdhbnQgdG8gc3RheSBvbiB0aGUgei1heGlzLiAgSWYgd2UgZG9uJ3QsIHRoZW4gdGhl
IGVmZmVjdCBvZgorICAgIC8vIHBhbm5pbmcgbW9kZWwgd2lsbCBiZSBtdWNoIG1vcmUgY29tcGxp
Y2F0ZWQuICBXZSdyZSBub3QgdGVzdGluZworICAgIC8vIHRoZSBwYW5uZXIsIGJ1dCB0aGUgZGlz
dGFuY2UgbW9kZWwsIHNvIHdlIHdhbnQgdGhlIHBhbm5lciBlZmZlY3QKKyAgICAvLyB0byBiZSBz
aW1wbGUuCisgICAgLy8KKyAgICAvLyBUaGUgcGFubmVycyBhcmUgcGxhY2VkIGF0IGEgdW5pZm9y
bSBpbnRlcnZhbHMgYmV0d2VlbiB0aGUgcGFubmVyCisgICAgLy8gcmVmZXJlbmNlIGRpc3RhbmNl
IGFuZCB0aGUgcGFubmVyIG1heCBkaXN0YW5jZS4gIFRoZSBzb3VyY2UgaXMKKyAgICAvLyBhbHNv
IHN0YXJ0ZWQgYXQgcmVndWxhciBpbnRlcnZhbHMuCisgICAgZm9yICh2YXIgayA9IDA7IGsgPCBu
b2RlQ291bnQ7ICsraykgeworICAgICAgICBidWZmZXJTb3VyY2Vba10gPSBjb250ZXh0LmNyZWF0
ZUJ1ZmZlclNvdXJjZSgpOworICAgICAgICBidWZmZXJTb3VyY2Vba10uYnVmZmVyID0gaW1wdWxz
ZTsKKworICAgICAgICBwYW5uZXJba10gPSBjb250ZXh0LmNyZWF0ZVBhbm5lcigpOworICAgICAg
ICBwYW5uZXJba10ucGFubmluZ01vZGVsID0gcGFubmVyLkVRVUFMUE9XRVI7CisgICAgICAgIHBh
bm5lcltrXS5kaXN0YW5jZU1vZGVsID0gZGlzdGFuY2VNb2RlbDsKKworICAgICAgICB2YXIgZGlz
dGFuY2VTdGVwID0gKHBhbm5lcltrXS5tYXhEaXN0YW5jZSAtIHBhbm5lcltrXS5yZWZEaXN0YW5j
ZSkgLyBub2RlQ291bnQ7CisgICAgICAgIHBvc2l0aW9uW2tdID0gZGlzdGFuY2VTdGVwICogayAr
IHBhbm5lcltrXS5yZWZEaXN0YW5jZTsKKyAgICAgICAgcGFubmVyW2tdLnNldFBvc2l0aW9uKDAs
IDAsIHBvc2l0aW9uW2tdKTsKKworICAgICAgICBidWZmZXJTb3VyY2Vba10uY29ubmVjdChwYW5u
ZXJba10pOworICAgICAgICBwYW5uZXJba10uY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKTsK
KworICAgICAgICB0aW1lW2tdID0gayAqIHRpbWVTdGVwOworICAgICAgICBidWZmZXJTb3VyY2Vb
a10ubm90ZU9uKHRpbWVba10pOworICAgIH0KK30KKworLy8gZGlzdGFuY2VNb2RlbCBzaG91bGQg
YmUgdGhlIGRpc3RhbmNlIG1vZGVsIGNvbnN0YW50IGxpa2UKKy8vIExJTkVBUl9ESVNUQU5DRSwg
SU5WRVJTRV9ESVNUQU5DRSwgYW5kIEVYUE9ORU5USUFMX0RJU1RBTkNFLiAgVGhlCisvLyBleHBl
Y3RlZE1vZGVsIGlzIHRoZSBleHBlY3RlZCBhY3R1YWwgbnVtZXJpYyB2YWx1ZSBvZiB0aGUgY29u
c3RhbnQuCitmdW5jdGlvbiBjcmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsIGRpc3RhbmNlTW9kZWws
IGV4cGVjdGVkTW9kZWwpIHsKKyAgICAvLyBUbyB0ZXN0IHRoZSBkaXN0YW5jZSBtb2RlbHMsIHdl
IGNyZWF0ZSBhIG51bWJlciBvZiBwYW5uZXJzIGF0CisgICAgLy8gdW5pZm9ybWx5IHNwYWNlZCBp
bnRlcnZhbHMgb24gdGhlIHotYXhpcy4gIEVhY2ggb2YgdGhlc2UgYXJlCisgICAgLy8gc3RhcnRl
ZCBhdCBlcXVhbGx5IHNwYWNlZCB0aW1lIGludGVydmFscy4gIEFmdGVyIHJlbmRlcmluZyB0aGUK
KyAgICAvLyBzaWduYWxzLCB3ZSBleGFtaW5lIHdoZXJlIGVhY2ggaW1wdWxzZSBpcyBsb2NhdGVk
IGFuZCB0aGUKKyAgICAvLyBhdHRlbnVhdGlvbiBvZiB0aGUgaW1wdWxzZS4gIFRoZSBhdHRlbnVh
dGlvbiBpcyBjb21wYXJlZAorICAgIC8vIGFnYWluc3Qgb3VyIGV4cGVjdGVkIGF0dGVudWF0aW9u
LgorCisgICAgY3JlYXRlR3JhcGgoY29udGV4dCwgZGlzdGFuY2VNb2RlbCwgbm9kZXNUb0NyZWF0
ZSk7CisKKyAgICBjb250ZXh0Lm9uY29tcGxldGUgPSBjaGVja0Rpc3RhbmNlUmVzdWx0KGRpc3Rh
bmNlTW9kZWwsIGV4cGVjdGVkTW9kZWwpOworICAgIGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTsK
K30KKworLy8gVGhlIGdhaW4gY2F1c2VkIGJ5IHRoZSBFUVVBTFBPV0VSIHBhbm5pbmcgbW9kZWws
IGlmIHdlIHN0YXkgb24gdGhlCisvLyB6IGF4aXMsIHdpdGggdGhlIGRlZmF1bHQgb3JpZW50YXRp
b25zLgorZnVuY3Rpb24gZXF1YWxQb3dlckdhaW4oKSB7CisgICAgcmV0dXJuIE1hdGguU1FSVDFf
MjsKK30KKworZnVuY3Rpb24gY2hlY2tEaXN0YW5jZVJlc3VsdChtb2RlbCwgZXhwZWN0ZWRNb2Rl
bCkgeworICAgIHJldHVybiBmdW5jdGlvbihldmVudCkgeworICAgICAgICByZW5kZXJlZEJ1ZmZl
ciA9IGV2ZW50LnJlbmRlcmVkQnVmZmVyOworICAgICAgICByZW5kZXJlZERhdGEgPSByZW5kZXJl
ZEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKKworICAgICAgICAvLyBUaGUgbWF4IGFsbG93ZWQg
ZXJyb3IgYmV0d2VlbiB0aGUgYWN0dWFsIGdhaW4gYW5kIHRoZSBleHBlY3RlZAorICAgICAgICAv
LyB2YWx1ZS4gIFRoaXMgaXMgZGV0ZXJtaW5lZCBleHBlcmltZW50YWxseS4gIFNldCB0byAwIHRv
IHNlZSB3aGF0CisgICAgICAgIC8vIHRoZSBhY3R1YWwgZXJyb3JzIGFyZS4KKyAgICAgICAgdmFy
IG1heEFsbG93ZWRFcnJvciA9IDIuM2UtNjsKKyAgIAorICAgICAgICB2YXIgc3VjY2VzcyA9IHRy
dWU7CisKKyAgICAgICAgLy8gTnVtYmVyIG9mIGltcHVsc2VzIHdlIGZvdW5kIGluIHRoZSByZW5k
ZXJlZCByZXN1bHQuCisgICAgICAgIHZhciBpbXB1bHNlQ291bnQgPSAwOworCisgICAgICAgIC8v
IE1heGltdW0gcmVsYXRpdmUgZXJyb3IgaW4gdGhlIGdhaW4gb2YgdGhlIGltcHVsc2VzLgorICAg
ICAgICB2YXIgbWF4RXJyb3IgPSAwOworCisgICAgICAgIC8vIE51bWJlciBvZiBpbXB1bHNlcyB0
aGF0IHdlcmUgbm90IGF0IHRoZSBleHBlY3RlZCBsb2NhdGlvbi4KKyAgICAgICAgdmFyIHRpbWVF
cnJvckNvdW50ID0gMDsKKworICAgICAgICAvLyBBcnJheSBvZiBsb2NhdGlvbnMgb2YgdGhlIGlt
cHVsc2VzIHRoYXQgd2VyZSBub3QgYXQgdGhlCisgICAgICAgIC8vIGV4cGVjdGVkIGxvY2F0aW9u
LgorICAgICAgICB2YXIgdGltZUVycm9ycyA9IG5ldyBBcnJheSgpOworCisgICAgICAgIC8vIFN0
ZXAgdGhyb3VnaCB0aGUgcmVuZGVyZWQgZGF0YSB0byBmaW5kIGFsbCB0aGUgbm9uLXplcm8gcG9p
bnRzCisgICAgICAgIC8vIHNvIHdlIGNhbiBmaW5kIHdoZXJlIG91ciBkaXN0YW5jZS1hdHRlbnVh
dGVkIGltcHVsc2VzIGFyZS4KKyAgICAgICAgLy8gVGhlc2UgYXJlIHRlc3RlZCBhZ2FpbnN0IHRo
ZSBleHBlY3RlZCBhdHRlbnVhdGlvbnMgYXQgdGhhdAorICAgICAgICAvLyBkaXN0YW5jZS4KKyAg
ICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCByZW5kZXJlZERhdGEubGVuZ3RoOyArK2spIHsKKyAg
ICAgICAgICAgIGlmIChyZW5kZXJlZERhdGFba10gIT0gMCkgeworICAgICAgICAgICAgICAgIHZh
ciBkaXN0YW5jZUZ1bmN0aW9uID0gZGlzdGFuY2VNb2RlbEZ1bmN0aW9uW3Bhbm5lcltpbXB1bHNl
Q291bnRdLmRpc3RhbmNlTW9kZWxdOworICAgICAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IGRp
c3RhbmNlRnVuY3Rpb24ocGFubmVyW2ltcHVsc2VDb3VudF0sIDAsIDAsIHBvc2l0aW9uW2ltcHVs
c2VDb3VudF0pOworCisgICAgICAgICAgICAgICAgLy8gQWRqdXN0IGZvciB0aGUgY2VudGVyLXBh
bm5pbmcgb2YgdGhlIEVRVUFMUE9XRVIgcGFubmluZworICAgICAgICAgICAgICAgIC8vIG1vZGVs
IHRoYXQgd2UncmUgdXNpbmcuCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgKj0gZXF1YWxQb3dl
ckdhaW4oKTsKKworICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IE1hdGguYWJzKHJlbmRlcmVk
RGF0YVtrXSAtIGV4cGVjdGVkKSAvIE1hdGguYWJzKGV4cGVjdGVkKTsKKworICAgICAgICAgICAg
ICAgIG1heEVycm9yID0gTWF0aC5tYXgobWF4RXJyb3IsIE1hdGguYWJzKGVycm9yKSk7CisKKyAg
ICAgICAgICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIGFueSBpbXB1bHNlcyB0aGF0IGFyZW4ndCB3
aGVyZSB3ZSBleHBlY3QgdGhlbQorICAgICAgICAgICAgICAgIC8vIHRvIGJlLgorICAgICAgICAg
ICAgICAgIHZhciBleHBlY3RlZEZyYW1lID0gdGltZVRvU2FtcGxlRnJhbWUodGltZVtpbXB1bHNl
Q291bnRdLCBzYW1wbGVSYXRlKTsKKyAgICAgICAgICAgICAgICBpZiAoayAhPSBleHBlY3RlZEZy
YW1lKSB7CisgICAgICAgICAgICAgICAgICAgIHRpbWVFcnJvcnNbdGltZUVycm9yQ291bnRdID0g
eyBhY3R1YWwgOiBrLCBleHBlY3RlZCA6IGV4cGVjdGVkRnJhbWV9OworICAgICAgICAgICAgICAg
ICAgICArK3RpbWVFcnJvckNvdW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICArK2ltcHVsc2VDb3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlm
IChtb2RlbCA9PSBleHBlY3RlZE1vZGVsKSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJEaXN0
YW5jZSBtb2RlbCB2YWx1ZSBtYXRjaGVkIGV4cGVjdGVkIHZhbHVlLiIpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiRGlzdGFuY2UgbW9kZWwgdmFsdWUgZG9lcyBu
b3QgbWF0Y2ggZXhwZWN0ZWQgdmFsdWUuIik7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7
CisgICAgICAgIH0gICAgCisKKyAgICAgICAgaWYgKGltcHVsc2VDb3VudCA9PSBub2Rlc1RvQ3Jl
YXRlKSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJOdW1iZXIgb2YgaW1wdWxzZXMgZm91bmQg
bWF0Y2hlcyBudW1iZXIgb2YgcGFubmVyIG5vZGVzLiIpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgdGVzdEZhaWxlZCgiTnVtYmVyIG9mIGltcHVsc2VzIGlzIGluY29ycmVjdC4gIEZv
dW5kICIgKyBpbXB1bHNlQ291bnQgKyAiIGJ1dCBleHBlY3RlZCAiICsgbm9kZXNUb0NyZWF0ZSAr
ICIuIik7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobWF4RXJyb3IgPD0gbWF4QWxsb3dlZEVycm9yKSB7CisgICAgICAgICAgICB0ZXN0UGFz
c2VkKCJEaXN0YW5jZSBnYWlucyBhcmUgY29ycmVjdC4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHRlc3RGYWlsZWQoIkRpc3RhbmNlIGdhaW5zIGFyZSBpbmNvcnJlY3QuICBNYXgg
cmVsIGVycm9yID0gIiArIG1heEVycm9yICsgIiAobWF4QWxsb3dlZEVycm9yID0gIiArIG1heEFs
bG93ZWRFcnJvciArICIpIik7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICAvLyBQcmludCBvdXQgaW5mb3JtYXRpb24gb24gdGhlIGltcHVsc2VzIHRo
YXQgb2NjdXJyZWQgYXQgYW4KKyAgICAgICAgLy8gdW5leHBlY3RlZCBwbGFjZS4KKyAgICAgICAg
aWYgKHRpbWVFcnJvcnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNl
OworICAgICAgICAgICAgdGVzdEZhaWxlZCh0aW1lRXJyb3JzLmxlbmd0aCArICIgdGltaW5nIGVy
cm9ycyBmb3VuZCIpOworICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aW1lRXJyb3Jz
Lmxlbmd0aDsgKytrKSB7CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiRm91bmQgaW1wdWxz
ZSBhdCBzYW1wbGUgZnJhbWUgIiArIHRpbWVFcnJvcnNba10uYWN0dWFsICsgIiBidXQgZXhwZWN0
ZWQgIiArIHRpbWVFcnJvcnNba10uZXhwZWN0ZWQpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIkRpc3Rh
bmNlIHRlc3QgcGFzc2VkIGZvciBkaXN0YW5jZSBtb2RlbCAiICsgbW9kZWwpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiRGlzdGFuY2UgdGVzdCBmYWlsZWQgZm9y
IGRpc3RhbmNlIG1vZGVsICIgKyBtb2RlbCk7CisgICAgICAgIH0KKworICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsKKyAgICB9Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124774</attachid>
            <date>2012-01-31 10:52:23 -0800</date>
            <delta_ts>2012-01-31 11:14:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74273-20120131105222.patch</filename>
            <type>text/plain</type>
            <size>18185</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
UGFubmVyTm9kZS5oCmluZGV4IDk4ZDI3NzQzZTQxMTc5NDNiMjY4NzhlNjdlY2Q3MWUzOTY0YmRj
NGEuLjQ0NTk3ZTg4MzAzMTQ2MTUxZDRmZWZhNjY2NzVkNzk2OTY5ZTU4Y2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oCkBAIC01Myw2ICs1MywxNCBAQCBwdWJs
aWM6CiAgICAgICAgIFNPVU5ERklFTEQgPSAyLAogICAgIH07CiAKKyAgICAvLyBUaGVzZSBtdXN0
IGJlIGRlZmluZWQgYXMgaW4gdGhlIC5pZGwgZmlsZSBhbmQgbXVzdCBtYXRjaCB0aG9zZQorICAg
IC8vIGluIHRoZSBEaXN0YW5jZUVmZmVjdCBjbGFzcy4KKyAgICBlbnVtIHsKKyAgICAgICAgTElO
RUFSX0RJU1RBTkNFID0gMCwKKyAgICAgICAgSU5WRVJTRV9ESVNUQU5DRSA9IDEsCisgICAgICAg
IEVYUE9ORU5USUFMX0RJU1RBTkNFID0gMiwKKyAgICB9OworICAgIAogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEF1ZGlvUGFubmVyTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCogY29udGV4dCwgZmxv
YXQgc2FtcGxlUmF0ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXVkaW9Q
YW5uZXJOb2RlKGNvbnRleHQsIHNhbXBsZVJhdGUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9BdWRpb1Bhbm5lck5vZGUuaWRsCmluZGV4IDJkYjA5M2Q3YjUwM2FhMWU5Y2M0NWY2NGE3MTdh
MGMxODQ0YmFkZDcuLjU5N2EzZWFkZmJhYzllNzZiYTlkYTc0MjMzYmUxNWI5ZDc0MjU0ZWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwKKysr
IGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbApAQCAtMzMsNiAr
MzMsMTEgQEAgbW9kdWxlIGF1ZGlvIHsKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgSFJU
RiA9IDE7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFNPVU5ERklFTEQgPSAyOwogCisg
ICAgICAgIC8vIERpc3RhbmNlIG1vZGVsCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IExJ
TkVBUl9ESVNUQU5DRSA9IDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IElOVkVSU0Vf
RElTVEFOQ0UgPSAxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBFWFBPTkVOVElBTF9E
SVNUQU5DRSA9IDI7CisKICAgICAgICAgLy8gRGVmYXVsdCBtb2RlbCBmb3Igc3RlcmVvIGlzIEhS
VEYgCiAgICAgICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIHBhbm5pbmdNb2RlbDsgLy8gRklY
TUU6IHVzZSB1bnNpZ25lZCBzaG9ydCB3aGVuIGdsdWUgZ2VuZXJhdGlvbiBzdXBwb3J0cyBpdAog
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggOTg1ZTVlMjg5MzQyMDEwMDY4NDgwMDE1MDI0NWEwN2I2ZWUwNDRiNy4uODFjYjk1
MTE4MDc3OTU0MzNkNjhhNmE0MjFkMTMzZDU5NGFjMzIzMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBA
CisyMDEyLTAxLTA5ICBSYXltb25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBD
b25zdGFudCB2YWx1ZXMgdG8gc2V0ICJkaXN0YW5jZU1vZGVsIiBhcmUgdW5kZWZpbmVkCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDI3MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2ViYXVkaW8vZGlz
dGFuY2UtZXhwb25lbnRpYWwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRp
by9kaXN0YW5jZS1leHBvbmVudGlhbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9k
aXN0YW5jZS1pbnZlcnNlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8v
ZGlzdGFuY2UtaW52ZXJzZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9kaXN0YW5j
ZS1saW5lYXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9kaXN0YW5j
ZS1saW5lYXIuaHRtbDogQWRkZWQuCisgICAgICAgICogd2ViYXVkaW8vcmVzb3VyY2VzL2Rpc3Rh
bmNlLW1vZGVsLXRlc3RpbmcuanM6IEFkZGVkLgorICAgICAgICAoY3JlYXRlSW1wdWxzZUJ1ZmZl
cik6CisgICAgICAgIChsaW5lYXJEaXN0YW5jZSk6CisgICAgICAgIChleHBvbmVudGlhbERpc3Rh
bmNlKToKKyAgICAgICAgKGludmVyc2VEaXN0YW5jZSk6CisgICAgICAgIChjcmVhdGVHcmFwaCk6
CisgICAgICAgIChzdGFydFNvdXJjZXMpOgorICAgICAgICAoZXF1YWxQb3dlckdhaW4pOgorICAg
ICAgICAoY2hlY2tEaXN0YW5jZVJlc3VsdC5yZXR1cm4ucmVuZGVyZWRCdWZmZXIpOgorICAgICAg
ICAoY2hlY2tEaXN0YW5jZVJlc3VsdCk6CisKIDIwMTItMDEtMzEgIFl1em8gRnVqaXNoaW1hICA8
eXV6b0Bnb29nbGUuY29tPgogCiAgICAgICAgIFtDaHJvbWl1bV0gVW5yZXZpZXdlZCB0ZXN0IGV4
cGVjdGF0aW9uIGNoYW5nZS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3Rh
bmNlLWV4cG9uZW50aWFsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3Rh
bmNlLWV4cG9uZW50aWFsLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OTAyZTM4YTIyMmM0ZWUx
ODQzYTEwMjM1MjMyOGU0NDhmZTY3YzA5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vZGlzdGFuY2UtZXhwb25lbnRpYWwtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIg
QEAKK1Rlc3QgZXhwb25lbnRpYWwgZGlzdGFuY2UgbW9kZWwgb2YgQXVkaW9QYW5uZXJOb2RlLgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgRGlzdGFuY2UgbW9kZWwgdmFsdWUg
bWF0Y2hlZCBleHBlY3RlZCB2YWx1ZS4KK1BBU1MgTnVtYmVyIG9mIGltcHVsc2VzIGZvdW5kIG1h
dGNoZXMgbnVtYmVyIG9mIHBhbm5lciBub2Rlcy4KK1BBU1MgRGlzdGFuY2UgZ2FpbnMgYXJlIGNv
cnJlY3QuCitQQVNTIERpc3RhbmNlIHRlc3QgcGFzc2VkIGZvciBkaXN0YW5jZSBtb2RlbCAyCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtZXhwb25lbnRpYWwuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWV4cG9uZW50aWFsLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YjZhZmMwZTNhNGEyMmRkYmZhZWY2ZWMzZjcwMDYxMzYzOGUwOTFjMwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWV4cG9uZW50aWFsLmh0bWwKQEAgLTAs
MCArMSw0MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEg
VHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgor
ICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Rpc3RhbmNlLW1vZGVsLXRlc3Rpbmcu
anMiPjwvc2NyaXB0PgorICA8L2hlYWQ+CisKKyAgPGJvZHk+CisgICAgPGRpdiBpZD0iZGVzY3Jp
cHRpb24iPjwvZGl2PgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCisgICAgPHNjcmlw
dD4KKyAgICAgIGRlc2NyaXB0aW9uKCJUZXN0IGV4cG9uZW50aWFsIGRpc3RhbmNlIG1vZGVsIG9m
IEF1ZGlvUGFubmVyTm9kZS4iKTsKKworICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAg
ICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgIH0KKworICAgICAgICAgIHdp
bmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworICAgICAgICAgIC8vIENyZWF0ZSBvZmZsaW5l
IGF1ZGlvIGNvbnRleHQuCisgICAgICAgICAgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRl
eHQoMiwgc2FtcGxlUmF0ZSAqIHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOworCisg
ICAgICAgICAgLy8gVGVtcCBwYW5uZXIgbm9kZSBzbyB3ZSBjYW4gZ2V0IHRoZSBFWFBPTkVOVElB
TF9ESVNUQU5DRSB2YWx1ZS4KKyAgICAgICAgICB2YXIgdGVtcFBhbm5lciA9IGNvbnRleHQuY3Jl
YXRlUGFubmVyKCk7CisgICAgICAgICAgY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCB0ZW1wUGFu
bmVyLkVYUE9ORU5USUFMX0RJU1RBTkNFLCAyKTsKKyAgICAgIH0KKworICAgICAgcnVuVGVzdCgp
OworICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworICAgIDwvc2NyaXB0PgorCis8
c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8v
ZGlzdGFuY2UtaW52ZXJzZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0
YW5jZS1pbnZlcnNlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NWE5NDkyNDRmYjI5Zjg3MmZk
ZTUxOWMzZjhhZDc0MzFlNDM3ODhlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vZGlzdGFuY2UtaW52ZXJzZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMiBAQAorVGVz
dCBpbnZlcnNlIGRpc3RhbmNlIG1vZGVsIG9mIEF1ZGlvUGFubmVyTm9kZS4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCitQQVNTIERpc3RhbmNlIG1vZGVsIHZhbHVlIG1hdGNoZWQgZXhw
ZWN0ZWQgdmFsdWUuCitQQVNTIE51bWJlciBvZiBpbXB1bHNlcyBmb3VuZCBtYXRjaGVzIG51bWJl
ciBvZiBwYW5uZXIgbm9kZXMuCitQQVNTIERpc3RhbmNlIGdhaW5zIGFyZSBjb3JyZWN0LgorUEFT
UyBEaXN0YW5jZSB0ZXN0IHBhc3NlZCBmb3IgZGlzdGFuY2UgbW9kZWwgMQorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWludmVyc2UuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1
ZGlvL2Rpc3RhbmNlLWludmVyc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNTc3MTc0NmYwMTEyOTdhMDZj
MDc4OGI3ODdmZWZiZThmYThmZGM5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vZGlzdGFuY2UtaW52ZXJzZS5odG1sCkBAIC0wLDAgKzEsNDAgQEAKKzwhRE9DVFlQRSBI
VE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgorPGh0
bWw+CisgIDxoZWFkPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9
InJlc291cmNlcy9kaXN0YW5jZS1tb2RlbC10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKyAgPC9oZWFk
PgorCisgIDxib2R5PgorICAgIDxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKyAgICA8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKworICAgIDxzY3JpcHQ+CisgICAgICBkZXNjcmlwdGlvbigi
VGVzdCBpbnZlcnNlIGRpc3RhbmNlIG1vZGVsIG9mIEF1ZGlvUGFubmVyTm9kZS4iKTsKKworICAg
ICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSB7CisgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKyAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OworICAgICAgICAgIH0KKworICAgICAgICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsK
KworICAgICAgICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuCisgICAgICAgICAg
Y29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgc2FtcGxlUmF0ZSAqIHJlbmRlckxl
bmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOworCisgICAgICAgICAgLy8gVGVtcCBwYW5uZXIgbm9k
ZSBzbyB3ZSBjYW4gZ2V0IHRoZSBJTlZFUlNFX0RJU1RBTkNFIHZhbHVlLgorICAgICAgICAgIHZh
ciB0ZW1wUGFubmVyID0gY29udGV4dC5jcmVhdGVQYW5uZXIoKTsKKyAgICAgICAgICBjcmVhdGVU
ZXN0QW5kUnVuKGNvbnRleHQsIHRlbXBQYW5uZXIuSU5WRVJTRV9ESVNUQU5DRSwgMSk7CisgICAg
ICB9CisKKyAgICAgIHJ1blRlc3QoKTsKKyAgICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7
CisKKyAgICA8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1saW5lYXItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmM5ZDI4YTkxNTE2NjlkOTY1N2Y2YjQ1ZDhmNjgyZDRiMDdmZGY5ZjQKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1saW5lYXItZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMTIgQEAKK1Rlc3QgbGluZWFyIGRpc3RhbmNlIG1vZGVsIG9mIEF1ZGlvUGFubmVy
Tm9kZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIERpc3RhbmNlIG1vZGVs
IHZhbHVlIG1hdGNoZWQgZXhwZWN0ZWQgdmFsdWUuCitQQVNTIE51bWJlciBvZiBpbXB1bHNlcyBm
b3VuZCBtYXRjaGVzIG51bWJlciBvZiBwYW5uZXIgbm9kZXMuCitQQVNTIERpc3RhbmNlIGdhaW5z
IGFyZSBjb3JyZWN0LgorUEFTUyBEaXN0YW5jZSB0ZXN0IHBhc3NlZCBmb3IgZGlzdGFuY2UgbW9k
ZWwgMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtbGluZWFyLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjAy
NTU2MzQ4NWNmNTU2YWRlNjFkM2Y0N2IzZmJhOTgyMzY5ODRiZQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci5odG1sCkBAIC0wLDAgKzEsNDAg
QEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRp
b25hbC8vRU4iPgorPGh0bWw+CisgIDxoZWFkPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKyAgICA8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICAgIDxzY3Jp
cHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9kaXN0YW5jZS1tb2RlbC10ZXN0aW5nLmpzIj48L3Nj
cmlwdD4KKyAgPC9oZWFkPgorCisgIDxib2R5PgorICAgIDxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48
L2Rpdj4KKyAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworICAgIDxzY3JpcHQ+CisgICAg
ICBkZXNjcmlwdGlvbigiVGVzdCBsaW5lYXIgZGlzdGFuY2UgbW9kZWwgb2YgQXVkaW9QYW5uZXJO
b2RlLiIpOworCisgICAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgd2luZG93LmpzVGVzdElz
QXN5bmMgPSB0cnVlOworCisgICAgICAgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4
dC4KKyAgICAgICAgICBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1wbGVS
YXRlICogcmVuZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisKKyAgICAgICAgICAvLyBD
cmVhdGUgdGVtcCBwYW5uZXIgdG8gZ2V0IExJTkVBUl9ESVNUQU5DRSB2YWx1ZSBmb3IgdGVzdGlu
Zy4KKyAgICAgICAgICB2YXIgcGFubmVyTW9kZWwgPSBjb250ZXh0LmNyZWF0ZVBhbm5lcigpOwor
ICAgICAgICAgIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgcGFubmVyTW9kZWwuTElORUFSX0RJ
U1RBTkNFLCAwKTsKKyAgICAgIH0KKworICAgICAgcnVuVGVzdCgpOworICAgICAgc3VjY2Vzc2Z1
bGx5UGFyc2VkID0gdHJ1ZTsKKworICAgIDwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKyAgPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2Rpc3RhbmNl
LW1vZGVsLXRlc3RpbmcuanMgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvZGlzdGFu
Y2UtbW9kZWwtdGVzdGluZy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iY2ZiMzA4NDRmNDNlYzgwOWU2MmI4MjI0
ZmQ1YzIzYTEyZTMyZjAxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8v
cmVzb3VyY2VzL2Rpc3RhbmNlLW1vZGVsLXRlc3RpbmcuanMKQEAgLTAsMCArMSwyMTYgQEAKK3Zh
ciBzYW1wbGVSYXRlID0gNDQxMDAuMDsKKworLy8gSG93IG1hbnkgcGFubmVyIG5vZGVzIHRvIGNy
ZWF0ZSBmb3IgdGhlIHRlc3QuCit2YXIgbm9kZXNUb0NyZWF0ZSA9IDEwMDsKKworLy8gVGltZSBz
dGVwIHdoZW4gZWFjaCBwYW5uZXIgbm9kZSBzdGFydHMuCit2YXIgdGltZVN0ZXAgPSAwLjAwMTsK
KworLy8gTWFrZSBzdXJlIHdlIHJlbmRlciBsb25nIGVub3VnaCB0byBnZXQgYWxsIG9mIG91ciBu
b2Rlcy4KK3ZhciByZW5kZXJMZW5ndGhTZWNvbmRzID0gdGltZVN0ZXAgKiAobm9kZXNUb0NyZWF0
ZSArIDEpOworCisvLyBMZW5ndGggb2YgYW4gaW1wdWxzZSBzaWduYWwuCit2YXIgcHVsc2VMZW5n
dGhGcmFtZXMgPSBNYXRoLnJvdW5kKHRpbWVTdGVwICogc2FtcGxlUmF0ZSk7CisKKy8vIEdsb2Jh
bHMgdG8gbWFrZSBkZWJ1Z2dpbmcgYSBsaXR0bGUgZWFzaWVyLgordmFyIGNvbnRleHQ7Cit2YXIg
aW1wdWxzZTsKK3ZhciBidWZmZXJTb3VyY2U7Cit2YXIgcGFubmVyOwordmFyIHBvc2l0aW9uOwor
dmFyIHRpbWU7CisgICAgICAKKy8vIEZvciB0aGUgcmVjb3JkLCB0aGVzZSBkaXN0YW5jZSBmb3Jt
dWxhcyB3ZXJlIHRha2VuIGZyb20gdGhlIE9wZW5BTAorLy8gc3BlYworLy8gKGh0dHA6Ly9jb25u
ZWN0LmNyZWF0aXZlbGFicy5jb20vb3BlbmFsL0RvY3VtZW50YXRpb24vT3BlbkFMJTIwMS4xJTIw
U3BlY2lmaWNhdGlvbi5wZGYpLAorLy8gbm90IHRoZSBjb2RlLiAgVGhlIFdlYiBBdWRpbyBzcGVj
IGZvbGxvd3MgdGhlIE9wZW5BTCBmb3JtdWxhcy4KKworZnVuY3Rpb24gbGluZWFyRGlzdGFuY2Uo
cGFubmVyLCB4LCB5LCB6KSB7CisgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0KHggKiB4ICsg
eSAqIHkgKyB6ICogeik7CisgICAgZGlzdGFuY2UgPSBNYXRoLm1pbihkaXN0YW5jZSwgcGFubmVy
Lm1heERpc3RhbmNlKTsKKyAgICB2YXIgcm9sbG9mZiA9IHBhbm5lci5yb2xsb2ZmRmFjdG9yOwor
ICAgIHZhciBnYWluID0gKDEgLSByb2xsb2ZmICogKGRpc3RhbmNlIC0gcGFubmVyLnJlZkRpc3Rh
bmNlKSAvIChwYW5uZXIubWF4RGlzdGFuY2UgLSBwYW5uZXIucmVmRGlzdGFuY2UpKTsKKworICAg
IHJldHVybiBnYWluOworfQorCitmdW5jdGlvbiBpbnZlcnNlRGlzdGFuY2UocGFubmVyLCB4LCB5
LCB6KSB7CisgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6ICog
eik7CisgICAgZGlzdGFuY2UgPSBNYXRoLm1pbihkaXN0YW5jZSwgcGFubmVyLm1heERpc3RhbmNl
KTsKKyAgICB2YXIgcm9sbG9mZiA9IHBhbm5lci5yb2xsb2ZmRmFjdG9yOworICAgIHZhciBnYWlu
ID0gcGFubmVyLnJlZkRpc3RhbmNlIC8gKHBhbm5lci5yZWZEaXN0YW5jZSArIHJvbGxvZmYgKiAo
ZGlzdGFuY2UgLSBwYW5uZXIucmVmRGlzdGFuY2UpKTsKKworICAgIHJldHVybiBnYWluOworfQor
CitmdW5jdGlvbiBleHBvbmVudGlhbERpc3RhbmNlKHBhbm5lciwgeCwgeSwgeikgeworICAgIHZh
ciBkaXN0YW5jZSA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopOworICAgIGRpc3Rh
bmNlID0gTWF0aC5taW4oZGlzdGFuY2UsIHBhbm5lci5tYXhEaXN0YW5jZSk7CisgICAgdmFyIHJv
bGxvZmYgPSBwYW5uZXIucm9sbG9mZkZhY3RvcjsKKyAgICB2YXIgZ2FpbiA9IE1hdGgucG93KGRp
c3RhbmNlIC8gcGFubmVyLnJlZkRpc3RhbmNlLCAtcm9sbG9mZik7CisKKyAgICByZXR1cm4gZ2Fp
bjsKK30KKworLy8gVGhpcyBhcnJheSBtdXN0IGJlIGFycmFuZ2VkIGluIHRoZSBudW1lcmljIG9y
ZGVyIG9mIHRoZSBkaXN0YW5jZQorLy8gbW9kZWwgdmFsdWVzLgordmFyIGRpc3RhbmNlTW9kZWxG
dW5jdGlvbiA9IFtsaW5lYXJEaXN0YW5jZSwgaW52ZXJzZURpc3RhbmNlLCBleHBvbmVudGlhbERp
c3RhbmNlXTsKKworZnVuY3Rpb24gY3JlYXRlR3JhcGgoY29udGV4dCwgZGlzdGFuY2VNb2RlbCwg
bm9kZUNvdW50KSB7CisgICAgYnVmZmVyU291cmNlID0gbmV3IEFycmF5KG5vZGVDb3VudCk7Cisg
ICAgcGFubmVyID0gbmV3IEFycmF5KG5vZGVDb3VudCk7CisgICAgcG9zaXRpb24gPSBuZXcgQXJy
YXkobm9kZUNvdW50KTsKKyAgICB0aW1lID0gbmV3IEFycmF5KG5vZGVzVG9DcmVhdGUpOworCisg
ICAgaW1wdWxzZSA9IGNyZWF0ZUltcHVsc2VCdWZmZXIoY29udGV4dCwgcHVsc2VMZW5ndGhGcmFt
ZXMpOworCisgICAgLy8gQ3JlYXRlIGFsbCB0aGUgc291cmNlcyBhbmQgcGFubmVycy4KKyAgICAv
LworICAgIC8vIFdlIE1VU1QgdXNlIHRoZSBFUVVBTFBPV0VSIHBhbm5pbmcgbW9kZWwgc28gdGhh
dCB3ZSBjYW4gZWFzaWx5CisgICAgLy8gZmlndXJlIG91dCB0aGUgZ2FpbiBpbnRyb2R1Y2VkIGJ5
IHRoZSBwYW5uZXIuCisgICAgLy8KKyAgICAvLyBXZSB3YW50IHRvIHN0YXkgaW4gdGhlIG1pZGRs
ZSBvZiB0aGUgcGFubmluZyByYW5nZSwgd2hpY2ggbWVhbnMKKyAgICAvLyB3ZSB3YW50IHRvIHN0
YXkgb24gdGhlIHotYXhpcy4gIElmIHdlIGRvbid0LCB0aGVuIHRoZSBlZmZlY3Qgb2YKKyAgICAv
LyBwYW5uaW5nIG1vZGVsIHdpbGwgYmUgbXVjaCBtb3JlIGNvbXBsaWNhdGVkLiAgV2UncmUgbm90
IHRlc3RpbmcKKyAgICAvLyB0aGUgcGFubmVyLCBidXQgdGhlIGRpc3RhbmNlIG1vZGVsLCBzbyB3
ZSB3YW50IHRoZSBwYW5uZXIgZWZmZWN0CisgICAgLy8gdG8gYmUgc2ltcGxlLgorICAgIC8vCisg
ICAgLy8gVGhlIHBhbm5lcnMgYXJlIHBsYWNlZCBhdCBhIHVuaWZvcm0gaW50ZXJ2YWxzIGJldHdl
ZW4gdGhlIHBhbm5lcgorICAgIC8vIHJlZmVyZW5jZSBkaXN0YW5jZSBhbmQgdGhlIHBhbm5lciBt
YXggZGlzdGFuY2UuICBUaGUgc291cmNlIGlzCisgICAgLy8gYWxzbyBzdGFydGVkIGF0IHJlZ3Vs
YXIgaW50ZXJ2YWxzLgorICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbm9kZUNvdW50OyArK2spIHsK
KyAgICAgICAgYnVmZmVyU291cmNlW2tdID0gY29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTsK
KyAgICAgICAgYnVmZmVyU291cmNlW2tdLmJ1ZmZlciA9IGltcHVsc2U7CisKKyAgICAgICAgcGFu
bmVyW2tdID0gY29udGV4dC5jcmVhdGVQYW5uZXIoKTsKKyAgICAgICAgcGFubmVyW2tdLnBhbm5p
bmdNb2RlbCA9IHBhbm5lci5FUVVBTFBPV0VSOworICAgICAgICBwYW5uZXJba10uZGlzdGFuY2VN
b2RlbCA9IGRpc3RhbmNlTW9kZWw7CisKKyAgICAgICAgdmFyIGRpc3RhbmNlU3RlcCA9IChwYW5u
ZXJba10ubWF4RGlzdGFuY2UgLSBwYW5uZXJba10ucmVmRGlzdGFuY2UpIC8gbm9kZUNvdW50Owor
ICAgICAgICBwb3NpdGlvbltrXSA9IGRpc3RhbmNlU3RlcCAqIGsgKyBwYW5uZXJba10ucmVmRGlz
dGFuY2U7CisgICAgICAgIHBhbm5lcltrXS5zZXRQb3NpdGlvbigwLCAwLCBwb3NpdGlvbltrXSk7
CisKKyAgICAgICAgYnVmZmVyU291cmNlW2tdLmNvbm5lY3QocGFubmVyW2tdKTsKKyAgICAgICAg
cGFubmVyW2tdLmNvbm5lY3QoY29udGV4dC5kZXN0aW5hdGlvbik7CisKKyAgICAgICAgdGltZVtr
XSA9IGsgKiB0aW1lU3RlcDsKKyAgICAgICAgYnVmZmVyU291cmNlW2tdLm5vdGVPbih0aW1lW2td
KTsKKyAgICB9Cit9CisKKy8vIGRpc3RhbmNlTW9kZWwgc2hvdWxkIGJlIHRoZSBkaXN0YW5jZSBt
b2RlbCBjb25zdGFudCBsaWtlCisvLyBMSU5FQVJfRElTVEFOQ0UsIElOVkVSU0VfRElTVEFOQ0Us
IGFuZCBFWFBPTkVOVElBTF9ESVNUQU5DRS4gIFRoZQorLy8gZXhwZWN0ZWRNb2RlbCBpcyB0aGUg
ZXhwZWN0ZWQgYWN0dWFsIG51bWVyaWMgdmFsdWUgb2YgdGhlIGNvbnN0YW50LgorZnVuY3Rpb24g
Y3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCBkaXN0YW5jZU1vZGVsLCBleHBlY3RlZE1vZGVsKSB7
CisgICAgLy8gVG8gdGVzdCB0aGUgZGlzdGFuY2UgbW9kZWxzLCB3ZSBjcmVhdGUgYSBudW1iZXIg
b2YgcGFubmVycyBhdAorICAgIC8vIHVuaWZvcm1seSBzcGFjZWQgaW50ZXJ2YWxzIG9uIHRoZSB6
LWF4aXMuICBFYWNoIG9mIHRoZXNlIGFyZQorICAgIC8vIHN0YXJ0ZWQgYXQgZXF1YWxseSBzcGFj
ZWQgdGltZSBpbnRlcnZhbHMuICBBZnRlciByZW5kZXJpbmcgdGhlCisgICAgLy8gc2lnbmFscywg
d2UgZXhhbWluZSB3aGVyZSBlYWNoIGltcHVsc2UgaXMgbG9jYXRlZCBhbmQgdGhlCisgICAgLy8g
YXR0ZW51YXRpb24gb2YgdGhlIGltcHVsc2UuICBUaGUgYXR0ZW51YXRpb24gaXMgY29tcGFyZWQK
KyAgICAvLyBhZ2FpbnN0IG91ciBleHBlY3RlZCBhdHRlbnVhdGlvbi4KKworICAgIGNyZWF0ZUdy
YXBoKGNvbnRleHQsIGRpc3RhbmNlTW9kZWwsIG5vZGVzVG9DcmVhdGUpOworCisgICAgY29udGV4
dC5vbmNvbXBsZXRlID0gY2hlY2tEaXN0YW5jZVJlc3VsdChkaXN0YW5jZU1vZGVsLCBleHBlY3Rl
ZE1vZGVsKTsKKyAgICBjb250ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7Cit9CisKKy8vIFRoZSBnYWlu
IGNhdXNlZCBieSB0aGUgRVFVQUxQT1dFUiBwYW5uaW5nIG1vZGVsLCBpZiB3ZSBzdGF5IG9uIHRo
ZQorLy8geiBheGlzLCB3aXRoIHRoZSBkZWZhdWx0IG9yaWVudGF0aW9ucy4KK2Z1bmN0aW9uIGVx
dWFsUG93ZXJHYWluKCkgeworICAgIHJldHVybiBNYXRoLlNRUlQxXzI7Cit9CisKK2Z1bmN0aW9u
IGNoZWNrRGlzdGFuY2VSZXN1bHQobW9kZWwsIGV4cGVjdGVkTW9kZWwpIHsKKyAgICByZXR1cm4g
ZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgcmVuZGVyZWRCdWZmZXIgPSBldmVudC5yZW5kZXJl
ZEJ1ZmZlcjsKKyAgICAgICAgcmVuZGVyZWREYXRhID0gcmVuZGVyZWRCdWZmZXIuZ2V0Q2hhbm5l
bERhdGEoMCk7CisKKyAgICAgICAgLy8gVGhlIG1heCBhbGxvd2VkIGVycm9yIGJldHdlZW4gdGhl
IGFjdHVhbCBnYWluIGFuZCB0aGUgZXhwZWN0ZWQKKyAgICAgICAgLy8gdmFsdWUuICBUaGlzIGlz
IGRldGVybWluZWQgZXhwZXJpbWVudGFsbHkuICBTZXQgdG8gMCB0byBzZWUgd2hhdAorICAgICAg
ICAvLyB0aGUgYWN0dWFsIGVycm9ycyBhcmUuCisgICAgICAgIHZhciBtYXhBbGxvd2VkRXJyb3Ig
PSAyLjNlLTY7CisgICAKKyAgICAgICAgdmFyIHN1Y2Nlc3MgPSB0cnVlOworCisgICAgICAgIC8v
IE51bWJlciBvZiBpbXB1bHNlcyB3ZSBmb3VuZCBpbiB0aGUgcmVuZGVyZWQgcmVzdWx0LgorICAg
ICAgICB2YXIgaW1wdWxzZUNvdW50ID0gMDsKKworICAgICAgICAvLyBNYXhpbXVtIHJlbGF0aXZl
IGVycm9yIGluIHRoZSBnYWluIG9mIHRoZSBpbXB1bHNlcy4KKyAgICAgICAgdmFyIG1heEVycm9y
ID0gMDsKKworICAgICAgICAvLyBOdW1iZXIgb2YgaW1wdWxzZXMgdGhhdCB3ZXJlIG5vdCBhdCB0
aGUgZXhwZWN0ZWQgbG9jYXRpb24uCisgICAgICAgIHZhciB0aW1lRXJyb3JDb3VudCA9IDA7CisK
KyAgICAgICAgLy8gQXJyYXkgb2YgbG9jYXRpb25zIG9mIHRoZSBpbXB1bHNlcyB0aGF0IHdlcmUg
bm90IGF0IHRoZQorICAgICAgICAvLyBleHBlY3RlZCBsb2NhdGlvbi4KKyAgICAgICAgdmFyIHRp
bWVFcnJvcnMgPSBuZXcgQXJyYXkoKTsKKworICAgICAgICAvLyBTdGVwIHRocm91Z2ggdGhlIHJl
bmRlcmVkIGRhdGEgdG8gZmluZCBhbGwgdGhlIG5vbi16ZXJvIHBvaW50cworICAgICAgICAvLyBz
byB3ZSBjYW4gZmluZCB3aGVyZSBvdXIgZGlzdGFuY2UtYXR0ZW51YXRlZCBpbXB1bHNlcyBhcmUu
CisgICAgICAgIC8vIFRoZXNlIGFyZSB0ZXN0ZWQgYWdhaW5zdCB0aGUgZXhwZWN0ZWQgYXR0ZW51
YXRpb25zIGF0IHRoYXQKKyAgICAgICAgLy8gZGlzdGFuY2UuCisgICAgICAgIGZvciAodmFyIGsg
PSAwOyBrIDwgcmVuZGVyZWREYXRhLmxlbmd0aDsgKytrKSB7CisgICAgICAgICAgICBpZiAocmVu
ZGVyZWREYXRhW2tdICE9IDApIHsKKyAgICAgICAgICAgICAgICB2YXIgZGlzdGFuY2VGdW5jdGlv
biA9IGRpc3RhbmNlTW9kZWxGdW5jdGlvbltwYW5uZXJbaW1wdWxzZUNvdW50XS5kaXN0YW5jZU1v
ZGVsXTsKKyAgICAgICAgICAgICAgICB2YXIgZXhwZWN0ZWQgPSBkaXN0YW5jZUZ1bmN0aW9uKHBh
bm5lcltpbXB1bHNlQ291bnRdLCAwLCAwLCBwb3NpdGlvbltpbXB1bHNlQ291bnRdKTsKKworICAg
ICAgICAgICAgICAgIC8vIEFkanVzdCBmb3IgdGhlIGNlbnRlci1wYW5uaW5nIG9mIHRoZSBFUVVB
TFBPV0VSIHBhbm5pbmcKKyAgICAgICAgICAgICAgICAvLyBtb2RlbCB0aGF0IHdlJ3JlIHVzaW5n
LgorICAgICAgICAgICAgICAgIGV4cGVjdGVkICo9IGVxdWFsUG93ZXJHYWluKCk7CisKKyAgICAg
ICAgICAgICAgICB2YXIgZXJyb3IgPSBNYXRoLmFicyhyZW5kZXJlZERhdGFba10gLSBleHBlY3Rl
ZCkgLyBNYXRoLmFicyhleHBlY3RlZCk7CisKKyAgICAgICAgICAgICAgICBtYXhFcnJvciA9IE1h
dGgubWF4KG1heEVycm9yLCBNYXRoLmFicyhlcnJvcikpOworCisgICAgICAgICAgICAgICAgLy8g
S2VlcCB0cmFjayBvZiBhbnkgaW1wdWxzZXMgdGhhdCBhcmVuJ3Qgd2hlcmUgd2UgZXhwZWN0IHRo
ZW0KKyAgICAgICAgICAgICAgICAvLyB0byBiZS4KKyAgICAgICAgICAgICAgICB2YXIgZXhwZWN0
ZWRGcmFtZSA9IHRpbWVUb1NhbXBsZUZyYW1lKHRpbWVbaW1wdWxzZUNvdW50XSwgc2FtcGxlUmF0
ZSk7CisgICAgICAgICAgICAgICAgaWYgKGsgIT0gZXhwZWN0ZWRGcmFtZSkgeworICAgICAgICAg
ICAgICAgICAgICB0aW1lRXJyb3JzW3RpbWVFcnJvckNvdW50XSA9IHsgYWN0dWFsIDogaywgZXhw
ZWN0ZWQgOiBleHBlY3RlZEZyYW1lfTsKKyAgICAgICAgICAgICAgICAgICAgKyt0aW1lRXJyb3JD
b3VudDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytpbXB1bHNlQ291bnQ7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobW9kZWwgPT0gZXhwZWN0
ZWRNb2RlbCkgeworICAgICAgICAgICAgdGVzdFBhc3NlZCgiRGlzdGFuY2UgbW9kZWwgdmFsdWUg
bWF0Y2hlZCBleHBlY3RlZCB2YWx1ZS4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IHRlc3RGYWlsZWQoIkRpc3RhbmNlIG1vZGVsIHZhbHVlIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVk
IHZhbHVlLiIpOworICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICB9ICAgIAor
CisgICAgICAgIGlmIChpbXB1bHNlQ291bnQgPT0gbm9kZXNUb0NyZWF0ZSkgeworICAgICAgICAg
ICAgdGVzdFBhc3NlZCgiTnVtYmVyIG9mIGltcHVsc2VzIGZvdW5kIG1hdGNoZXMgbnVtYmVyIG9m
IHBhbm5lciBub2Rlcy4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RGYWls
ZWQoIk51bWJlciBvZiBpbXB1bHNlcyBpcyBpbmNvcnJlY3QuICBGb3VuZCAiICsgaW1wdWxzZUNv
dW50ICsgIiBidXQgZXhwZWN0ZWQgIiArIG5vZGVzVG9DcmVhdGUgKyAiLiIpOworICAgICAgICAg
ICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1heEVycm9yIDw9
IG1heEFsbG93ZWRFcnJvcikgeworICAgICAgICAgICAgdGVzdFBhc3NlZCgiRGlzdGFuY2UgZ2Fp
bnMgYXJlIGNvcnJlY3QuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXN0RmFp
bGVkKCJEaXN0YW5jZSBnYWlucyBhcmUgaW5jb3JyZWN0LiAgTWF4IHJlbCBlcnJvciA9ICIgKyBt
YXhFcnJvciArICIgKG1heEFsbG93ZWRFcnJvciA9ICIgKyBtYXhBbGxvd2VkRXJyb3IgKyAiKSIp
OworICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLy8g
UHJpbnQgb3V0IGluZm9ybWF0aW9uIG9uIHRoZSBpbXB1bHNlcyB0aGF0IG9jY3VycmVkIGF0IGFu
CisgICAgICAgIC8vIHVuZXhwZWN0ZWQgcGxhY2UuCisgICAgICAgIGlmICh0aW1lRXJyb3JzLmxl
bmd0aCA+IDApIHsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIHRl
c3RGYWlsZWQodGltZUVycm9ycy5sZW5ndGggKyAiIHRpbWluZyBlcnJvcnMgZm91bmQiKTsKKyAg
ICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgdGltZUVycm9ycy5sZW5ndGg7ICsraykgewor
ICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIkZvdW5kIGltcHVsc2UgYXQgc2FtcGxlIGZyYW1l
ICIgKyB0aW1lRXJyb3JzW2tdLmFjdHVhbCArICIgYnV0IGV4cGVjdGVkICIgKyB0aW1lRXJyb3Jz
W2tdLmV4cGVjdGVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
dWNjZXNzKSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJEaXN0YW5jZSB0ZXN0IHBhc3NlZCBm
b3IgZGlzdGFuY2UgbW9kZWwgIiArIG1vZGVsKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHRlc3RGYWlsZWQoIkRpc3RhbmNlIHRlc3QgZmFpbGVkIGZvciBkaXN0YW5jZSBtb2RlbCAi
ICsgbW9kZWwpOworICAgICAgICB9CisKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfQor
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124778</attachid>
            <date>2012-01-31 11:14:51 -0800</date>
            <delta_ts>2012-02-01 14:52:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74273-20120131111450.patch</filename>
            <type>text/plain</type>
            <size>19114</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTU5ODEzZTYzNjhlYmJk
YjVmMmIyZWY5NjNjYzVjYzI1NmNlNmYxZi4uNDY5ODA0Y2YxMWVlNWEzMTEzNjZlNTcxOGE2MmFl
MTAyMzdiOThmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAxLTA5ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBDb25zdGFudCB2YWx1ZXMgdG8g
c2V0ICJkaXN0YW5jZU1vZGVsIiBhcmUgdW5kZWZpbmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDI3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiB3ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVu
dGlhbC5odG1sCisgICAgICAgICAgICAgICB3ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLmh0bWwK
KyAgICAgICAgICAgICAgIHdlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci5odG1sCisKKyAgICAgICAg
KiB3ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaDogRGVmaW5lIGVudW0gZm9yIHRoZSBuZXcgY29u
c3RhbnRzCisgICAgICAgIGZvciB0aGUgZGlzdGFuY2UgbW9kZWxzLgorICAgICAgICAqIHdlYmF1
ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGw6IERlZmluZSBtYXRjaGluZyBjb25zdGFudHMgZm9yIHRo
ZQorICAgICAgICBkaXN0YW5jZSBtb2RlbHMuCisKIDIwMTItMDEtMzEgIFBhYmxvIEZsb3VyZXQg
IDxwYWJsb2ZAbW90b3JvbGEuY29tPgogCiAgICAgICAgIEZpeCBjb21waWxhdGlvbiBlcnJvcnMg
b24gYnVpbGQtd2Via2l0IC0tZGVidWcgLS1uby13b3JrZXJzIG9uIG1hYy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oIGIvU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmgKaW5kZXggOThkMjc3NDNlNDExNzk0M2IyNjg3
OGU2N2VjZDcxZTM5NjRiZGM0YS4uNDQ1OTdlODgzMDMxNDYxNTFkNGZlZmE2NjY3NWQ3OTY5Njll
NThjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2Rl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmgKQEAgLTUz
LDYgKzUzLDE0IEBAIHB1YmxpYzoKICAgICAgICAgU09VTkRGSUVMRCA9IDIsCiAgICAgfTsKIAor
ICAgIC8vIFRoZXNlIG11c3QgYmUgZGVmaW5lZCBhcyBpbiB0aGUgLmlkbCBmaWxlIGFuZCBtdXN0
IG1hdGNoIHRob3NlCisgICAgLy8gaW4gdGhlIERpc3RhbmNlRWZmZWN0IGNsYXNzLgorICAgIGVu
dW0geworICAgICAgICBMSU5FQVJfRElTVEFOQ0UgPSAwLAorICAgICAgICBJTlZFUlNFX0RJU1RB
TkNFID0gMSwKKyAgICAgICAgRVhQT05FTlRJQUxfRElTVEFOQ0UgPSAyLAorICAgIH07CisgICAg
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QXVkaW9QYW5uZXJOb2RlPiBjcmVhdGUoQXVkaW9Db250
ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBBdWRpb1Bhbm5lck5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwKaW5kZXggMmRiMDkzZDdiNTAz
YWExZTljYzQ1ZjY0YTcxN2EwYzE4NDRiYWRkNy4uNTk3YTNlYWRmYmFjOWU3NmJhOWRhNzQyMzNi
ZTE1YjlkNzQyNTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Q
YW5uZXJOb2RlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5v
ZGUuaWRsCkBAIC0zMyw2ICszMywxMSBAQCBtb2R1bGUgYXVkaW8gewogICAgICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBIUlRGID0gMTsKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgU09V
TkRGSUVMRCA9IDI7CiAKKyAgICAgICAgLy8gRGlzdGFuY2UgbW9kZWwKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgTElORUFSX0RJU1RBTkNFID0gMDsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgSU5WRVJTRV9ESVNUQU5DRSA9IDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IEVYUE9ORU5USUFMX0RJU1RBTkNFID0gMjsKKwogICAgICAgICAvLyBEZWZhdWx0IG1vZGVs
IGZvciBzdGVyZW8gaXMgSFJURiAKICAgICAgICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgcGFu
bmluZ01vZGVsOyAvLyBGSVhNRTogdXNlIHVuc2lnbmVkIHNob3J0IHdoZW4gZ2x1ZSBnZW5lcmF0
aW9uIHN1cHBvcnRzIGl0CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA5ODVlNWUyODkzNDIwMTAwNjg0ODAwMTUwMjQ1YTA3
YjZlZTA0NGI3Li42MWEyZDc2MjEzOWIwNjU5OWZlODk1NTYzYWVhZTFiMTYzMDM2ZTY0IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjcgQEAKKzIwMTItMDEtMzEgIFJheW1vbmQgVG95ICA8cnRveUBnb29nbGUu
Y29tPgorCisgICAgICAgIENvbnN0YW50IHZhbHVlcyB0byBzZXQgImRpc3RhbmNlTW9kZWwiIGFy
ZSB1bmRlZmluZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc0MjczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiB3ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVudGlhbC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHdlYmF1ZGlvL2Rpc3RhbmNlLWV4cG9uZW50aWFsLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHdlYmF1ZGlvL2Rpc3RhbmNlLWludmVyc2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiB3ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHdlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHdlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRp
by9yZXNvdXJjZXMvZGlzdGFuY2UtbW9kZWwtdGVzdGluZy5qczogQWRkZWQuCisgICAgICAgIChj
cmVhdGVJbXB1bHNlQnVmZmVyKToKKyAgICAgICAgKGxpbmVhckRpc3RhbmNlKToKKyAgICAgICAg
KGV4cG9uZW50aWFsRGlzdGFuY2UpOgorICAgICAgICAoaW52ZXJzZURpc3RhbmNlKToKKyAgICAg
ICAgKGNyZWF0ZUdyYXBoKToKKyAgICAgICAgKHN0YXJ0U291cmNlcyk6CisgICAgICAgIChlcXVh
bFBvd2VyR2Fpbik6CisgICAgICAgIChjaGVja0Rpc3RhbmNlUmVzdWx0LnJldHVybi5yZW5kZXJl
ZEJ1ZmZlcik6CisgICAgICAgIChjaGVja0Rpc3RhbmNlUmVzdWx0KToKKwogMjAxMi0wMS0zMSAg
WXV6byBGdWppc2hpbWEgIDx5dXpvQGdvb2dsZS5jb20+CiAKICAgICAgICAgW0Nocm9taXVtXSBV
bnJldmlld2VkIHRlc3QgZXhwZWN0YXRpb24gY2hhbmdlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vZGlzdGFuY2UtZXhwb25lbnRpYWwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vZGlzdGFuY2UtZXhwb25lbnRpYWwtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjQ5MDJlMzhhMjIyYzRlZTE4NDNhMTAyMzUyMzI4ZTQ0OGZlNjdjMDkKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVudGlhbC1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwxMiBAQAorVGVzdCBleHBvbmVudGlhbCBkaXN0YW5jZSBtb2RlbCBvZiBB
dWRpb1Bhbm5lck5vZGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBEaXN0
YW5jZSBtb2RlbCB2YWx1ZSBtYXRjaGVkIGV4cGVjdGVkIHZhbHVlLgorUEFTUyBOdW1iZXIgb2Yg
aW1wdWxzZXMgZm91bmQgbWF0Y2hlcyBudW1iZXIgb2YgcGFubmVyIG5vZGVzLgorUEFTUyBEaXN0
YW5jZSBnYWlucyBhcmUgY29ycmVjdC4KK1BBU1MgRGlzdGFuY2UgdGVzdCBwYXNzZWQgZm9yIGRp
c3RhbmNlIG1vZGVsIDIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1leHBv
bmVudGlhbC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtZXhwb25lbnRpYWwu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iNmFmYzBlM2E0YTIyZGRiZmFlZjZlYzNmNzAwNjEzNjM4ZTA5MWMz
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtZXhwb25l
bnRpYWwuaHRtbApAQCAtMCwwICsxLDQwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1cz
Qy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorICA8aGVhZD4KKyAg
ICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3Qtc3R5bGUuY3NzIi8+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5n
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZGlzdGFu
Y2UtbW9kZWwtdGVzdGluZy5qcyI+PC9zY3JpcHQ+CisgIDwvaGVhZD4KKworICA8Ym9keT4KKyAg
ICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+CisKKyAgICA8c2NyaXB0PgorICAgICAgZGVzY3JpcHRpb24oIlRlc3QgZXhwb25lbnRpYWwg
ZGlzdGFuY2UgbW9kZWwgb2YgQXVkaW9QYW5uZXJOb2RlLiIpOworCisgICAgICBmdW5jdGlvbiBy
dW5UZXN0KCkgeworICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAg
fQorCisgICAgICAgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworCisgICAgICAgICAg
Ly8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dC4KKyAgICAgICAgICBjb250ZXh0ID0gbmV3
IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1wbGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vjb25kcywg
c2FtcGxlUmF0ZSk7CisKKyAgICAgICAgICAvLyBUZW1wIHBhbm5lciBub2RlIHNvIHdlIGNhbiBn
ZXQgdGhlIEVYUE9ORU5USUFMX0RJU1RBTkNFIHZhbHVlLgorICAgICAgICAgIHZhciB0ZW1wUGFu
bmVyID0gY29udGV4dC5jcmVhdGVQYW5uZXIoKTsKKyAgICAgICAgICBjcmVhdGVUZXN0QW5kUnVu
KGNvbnRleHQsIHRlbXBQYW5uZXIuRVhQT05FTlRJQUxfRElTVEFOQ0UsIDIpOworICAgICAgfQor
CisgICAgICBydW5UZXN0KCk7CisgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCisg
ICAgPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWludmVyc2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1
YTk0OTI0NGZiMjlmODcyZmRlNTE5YzNmOGFkNzQzMWU0Mzc4OGUKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDEyIEBACitUZXN0IGludmVyc2UgZGlzdGFuY2UgbW9kZWwgb2YgQXVkaW9QYW5uZXJO
b2RlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgRGlzdGFuY2UgbW9kZWwg
dmFsdWUgbWF0Y2hlZCBleHBlY3RlZCB2YWx1ZS4KK1BBU1MgTnVtYmVyIG9mIGltcHVsc2VzIGZv
dW5kIG1hdGNoZXMgbnVtYmVyIG9mIHBhbm5lciBub2Rlcy4KK1BBU1MgRGlzdGFuY2UgZ2FpbnMg
YXJlIGNvcnJlY3QuCitQQVNTIERpc3RhbmNlIHRlc3QgcGFzc2VkIGZvciBkaXN0YW5jZSBtb2Rl
bCAxCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtaW52ZXJzZS5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtaW52ZXJzZS5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU1
NzcxNzQ2ZjAxMTI5N2EwNmMwNzg4Yjc4N2ZlZmJlOGZhOGZkYzkKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLmh0bWwKQEAgLTAsMCArMSw0
MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNp
dGlvbmFsLy9FTiI+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorICAgIDxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Rpc3RhbmNlLW1vZGVsLXRlc3RpbmcuanMiPjwv
c2NyaXB0PgorICA8L2hlYWQ+CisKKyAgPGJvZHk+CisgICAgPGRpdiBpZD0iZGVzY3JpcHRpb24i
PjwvZGl2PgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCisgICAgPHNjcmlwdD4KKyAg
ICAgIGRlc2NyaXB0aW9uKCJUZXN0IGludmVyc2UgZGlzdGFuY2UgbW9kZWwgb2YgQXVkaW9QYW5u
ZXJOb2RlLiIpOworCisgICAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgd2luZG93LmpzVGVz
dElzQXN5bmMgPSB0cnVlOworCisgICAgICAgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29u
dGV4dC4KKyAgICAgICAgICBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1w
bGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisKKyAgICAgICAgICAv
LyBUZW1wIHBhbm5lciBub2RlIHNvIHdlIGNhbiBnZXQgdGhlIElOVkVSU0VfRElTVEFOQ0UgdmFs
dWUuCisgICAgICAgICAgdmFyIHRlbXBQYW5uZXIgPSBjb250ZXh0LmNyZWF0ZVBhbm5lcigpOwor
ICAgICAgICAgIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgdGVtcFBhbm5lci5JTlZFUlNFX0RJ
U1RBTkNFLCAxKTsKKyAgICAgIH0KKworICAgICAgcnVuVGVzdCgpOworICAgICAgc3VjY2Vzc2Z1
bGx5UGFyc2VkID0gdHJ1ZTsKKworICAgIDwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKyAgPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtbGluZWFyLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzlkMjhhOTE1MTY2OWQ5NjU3ZjZiNDVkOGY2ODJkNGIwN2ZkZjlm
NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVh
ci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMiBAQAorVGVzdCBsaW5lYXIgZGlzdGFuY2UgbW9k
ZWwgb2YgQXVkaW9QYW5uZXJOb2RlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BB
U1MgRGlzdGFuY2UgbW9kZWwgdmFsdWUgbWF0Y2hlZCBleHBlY3RlZCB2YWx1ZS4KK1BBU1MgTnVt
YmVyIG9mIGltcHVsc2VzIGZvdW5kIG1hdGNoZXMgbnVtYmVyIG9mIHBhbm5lciBub2Rlcy4KK1BB
U1MgRGlzdGFuY2UgZ2FpbnMgYXJlIGNvcnJlY3QuCitQQVNTIERpc3RhbmNlIHRlc3QgcGFzc2Vk
IGZvciBkaXN0YW5jZSBtb2RlbCAwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFu
Y2UtbGluZWFyLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1saW5lYXIuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iMDI1NTYzNDg1Y2Y1NTZhZGU2MWQzZjQ3YjNmYmE5ODIzNjk4NGJlCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtbGluZWFyLmh0
bWwKQEAgLTAsMCArMSw0MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBI
VE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxl
LmNzcyIvPgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Rpc3RhbmNlLW1vZGVs
LXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICA8L2hlYWQ+CisKKyAgPGJvZHk+CisgICAgPGRpdiBp
ZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCisg
ICAgPHNjcmlwdD4KKyAgICAgIGRlc2NyaXB0aW9uKCJUZXN0IGxpbmVhciBkaXN0YW5jZSBtb2Rl
bCBvZiBBdWRpb1Bhbm5lck5vZGUuIik7CisKKyAgICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7Cisg
ICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICB9CisKKyAgICAgICAg
ICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICAgICAgICAvLyBDcmVhdGUgb2Zm
bGluZSBhdWRpbyBjb250ZXh0LgorICAgICAgICAgIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9D
b250ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsK
KworICAgICAgICAgIC8vIENyZWF0ZSB0ZW1wIHBhbm5lciB0byBnZXQgTElORUFSX0RJU1RBTkNF
IHZhbHVlIGZvciB0ZXN0aW5nLgorICAgICAgICAgIHZhciBwYW5uZXJNb2RlbCA9IGNvbnRleHQu
Y3JlYXRlUGFubmVyKCk7CisgICAgICAgICAgY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCBwYW5u
ZXJNb2RlbC5MSU5FQVJfRElTVEFOQ0UsIDApOworICAgICAgfQorCisgICAgICBydW5UZXN0KCk7
CisgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCisgICAgPC9zY3JpcHQ+CisKKzxz
Y3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9y
ZXNvdXJjZXMvZGlzdGFuY2UtbW9kZWwtdGVzdGluZy5qcyBiL0xheW91dFRlc3RzL3dlYmF1ZGlv
L3Jlc291cmNlcy9kaXN0YW5jZS1tb2RlbC10ZXN0aW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjZmIzMDg0
NGY0M2VjODA5ZTYyYjgyMjRmZDVjMjNhMTJlMzJmMDEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvZGlzdGFuY2UtbW9kZWwtdGVzdGluZy5qcwpAQCAt
MCwwICsxLDIxNiBAQAordmFyIHNhbXBsZVJhdGUgPSA0NDEwMC4wOworCisvLyBIb3cgbWFueSBw
YW5uZXIgbm9kZXMgdG8gY3JlYXRlIGZvciB0aGUgdGVzdC4KK3ZhciBub2Rlc1RvQ3JlYXRlID0g
MTAwOworCisvLyBUaW1lIHN0ZXAgd2hlbiBlYWNoIHBhbm5lciBub2RlIHN0YXJ0cy4KK3ZhciB0
aW1lU3RlcCA9IDAuMDAxOworCisvLyBNYWtlIHN1cmUgd2UgcmVuZGVyIGxvbmcgZW5vdWdoIHRv
IGdldCBhbGwgb2Ygb3VyIG5vZGVzLgordmFyIHJlbmRlckxlbmd0aFNlY29uZHMgPSB0aW1lU3Rl
cCAqIChub2Rlc1RvQ3JlYXRlICsgMSk7CisKKy8vIExlbmd0aCBvZiBhbiBpbXB1bHNlIHNpZ25h
bC4KK3ZhciBwdWxzZUxlbmd0aEZyYW1lcyA9IE1hdGgucm91bmQodGltZVN0ZXAgKiBzYW1wbGVS
YXRlKTsKKworLy8gR2xvYmFscyB0byBtYWtlIGRlYnVnZ2luZyBhIGxpdHRsZSBlYXNpZXIuCit2
YXIgY29udGV4dDsKK3ZhciBpbXB1bHNlOwordmFyIGJ1ZmZlclNvdXJjZTsKK3ZhciBwYW5uZXI7
Cit2YXIgcG9zaXRpb247Cit2YXIgdGltZTsKKyAgICAgIAorLy8gRm9yIHRoZSByZWNvcmQsIHRo
ZXNlIGRpc3RhbmNlIGZvcm11bGFzIHdlcmUgdGFrZW4gZnJvbSB0aGUgT3BlbkFMCisvLyBzcGVj
CisvLyAoaHR0cDovL2Nvbm5lY3QuY3JlYXRpdmVsYWJzLmNvbS9vcGVuYWwvRG9jdW1lbnRhdGlv
bi9PcGVuQUwlMjAxLjElMjBTcGVjaWZpY2F0aW9uLnBkZiksCisvLyBub3QgdGhlIGNvZGUuICBU
aGUgV2ViIEF1ZGlvIHNwZWMgZm9sbG93cyB0aGUgT3BlbkFMIGZvcm11bGFzLgorCitmdW5jdGlv
biBsaW5lYXJEaXN0YW5jZShwYW5uZXIsIHgsIHksIHopIHsKKyAgICB2YXIgZGlzdGFuY2UgPSBN
YXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KTsKKyAgICBkaXN0YW5jZSA9IE1hdGgubWlu
KGRpc3RhbmNlLCBwYW5uZXIubWF4RGlzdGFuY2UpOworICAgIHZhciByb2xsb2ZmID0gcGFubmVy
LnJvbGxvZmZGYWN0b3I7CisgICAgdmFyIGdhaW4gPSAoMSAtIHJvbGxvZmYgKiAoZGlzdGFuY2Ug
LSBwYW5uZXIucmVmRGlzdGFuY2UpIC8gKHBhbm5lci5tYXhEaXN0YW5jZSAtIHBhbm5lci5yZWZE
aXN0YW5jZSkpOworCisgICAgcmV0dXJuIGdhaW47Cit9CisKK2Z1bmN0aW9uIGludmVyc2VEaXN0
YW5jZShwYW5uZXIsIHgsIHksIHopIHsKKyAgICB2YXIgZGlzdGFuY2UgPSBNYXRoLnNxcnQoeCAq
IHggKyB5ICogeSArIHogKiB6KTsKKyAgICBkaXN0YW5jZSA9IE1hdGgubWluKGRpc3RhbmNlLCBw
YW5uZXIubWF4RGlzdGFuY2UpOworICAgIHZhciByb2xsb2ZmID0gcGFubmVyLnJvbGxvZmZGYWN0
b3I7CisgICAgdmFyIGdhaW4gPSBwYW5uZXIucmVmRGlzdGFuY2UgLyAocGFubmVyLnJlZkRpc3Rh
bmNlICsgcm9sbG9mZiAqIChkaXN0YW5jZSAtIHBhbm5lci5yZWZEaXN0YW5jZSkpOworCisgICAg
cmV0dXJuIGdhaW47Cit9CisKK2Z1bmN0aW9uIGV4cG9uZW50aWFsRGlzdGFuY2UocGFubmVyLCB4
LCB5LCB6KSB7CisgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6
ICogeik7CisgICAgZGlzdGFuY2UgPSBNYXRoLm1pbihkaXN0YW5jZSwgcGFubmVyLm1heERpc3Rh
bmNlKTsKKyAgICB2YXIgcm9sbG9mZiA9IHBhbm5lci5yb2xsb2ZmRmFjdG9yOworICAgIHZhciBn
YWluID0gTWF0aC5wb3coZGlzdGFuY2UgLyBwYW5uZXIucmVmRGlzdGFuY2UsIC1yb2xsb2ZmKTsK
KworICAgIHJldHVybiBnYWluOworfQorCisvLyBUaGlzIGFycmF5IG11c3QgYmUgYXJyYW5nZWQg
aW4gdGhlIG51bWVyaWMgb3JkZXIgb2YgdGhlIGRpc3RhbmNlCisvLyBtb2RlbCB2YWx1ZXMuCit2
YXIgZGlzdGFuY2VNb2RlbEZ1bmN0aW9uID0gW2xpbmVhckRpc3RhbmNlLCBpbnZlcnNlRGlzdGFu
Y2UsIGV4cG9uZW50aWFsRGlzdGFuY2VdOworCitmdW5jdGlvbiBjcmVhdGVHcmFwaChjb250ZXh0
LCBkaXN0YW5jZU1vZGVsLCBub2RlQ291bnQpIHsKKyAgICBidWZmZXJTb3VyY2UgPSBuZXcgQXJy
YXkobm9kZUNvdW50KTsKKyAgICBwYW5uZXIgPSBuZXcgQXJyYXkobm9kZUNvdW50KTsKKyAgICBw
b3NpdGlvbiA9IG5ldyBBcnJheShub2RlQ291bnQpOworICAgIHRpbWUgPSBuZXcgQXJyYXkobm9k
ZXNUb0NyZWF0ZSk7CisKKyAgICBpbXB1bHNlID0gY3JlYXRlSW1wdWxzZUJ1ZmZlcihjb250ZXh0
LCBwdWxzZUxlbmd0aEZyYW1lcyk7CisKKyAgICAvLyBDcmVhdGUgYWxsIHRoZSBzb3VyY2VzIGFu
ZCBwYW5uZXJzLgorICAgIC8vCisgICAgLy8gV2UgTVVTVCB1c2UgdGhlIEVRVUFMUE9XRVIgcGFu
bmluZyBtb2RlbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkKKyAgICAvLyBmaWd1cmUgb3V0IHRoZSBn
YWluIGludHJvZHVjZWQgYnkgdGhlIHBhbm5lci4KKyAgICAvLworICAgIC8vIFdlIHdhbnQgdG8g
c3RheSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwYW5uaW5nIHJhbmdlLCB3aGljaCBtZWFucworICAg
IC8vIHdlIHdhbnQgdG8gc3RheSBvbiB0aGUgei1heGlzLiAgSWYgd2UgZG9uJ3QsIHRoZW4gdGhl
IGVmZmVjdCBvZgorICAgIC8vIHBhbm5pbmcgbW9kZWwgd2lsbCBiZSBtdWNoIG1vcmUgY29tcGxp
Y2F0ZWQuICBXZSdyZSBub3QgdGVzdGluZworICAgIC8vIHRoZSBwYW5uZXIsIGJ1dCB0aGUgZGlz
dGFuY2UgbW9kZWwsIHNvIHdlIHdhbnQgdGhlIHBhbm5lciBlZmZlY3QKKyAgICAvLyB0byBiZSBz
aW1wbGUuCisgICAgLy8KKyAgICAvLyBUaGUgcGFubmVycyBhcmUgcGxhY2VkIGF0IGEgdW5pZm9y
bSBpbnRlcnZhbHMgYmV0d2VlbiB0aGUgcGFubmVyCisgICAgLy8gcmVmZXJlbmNlIGRpc3RhbmNl
IGFuZCB0aGUgcGFubmVyIG1heCBkaXN0YW5jZS4gIFRoZSBzb3VyY2UgaXMKKyAgICAvLyBhbHNv
IHN0YXJ0ZWQgYXQgcmVndWxhciBpbnRlcnZhbHMuCisgICAgZm9yICh2YXIgayA9IDA7IGsgPCBu
b2RlQ291bnQ7ICsraykgeworICAgICAgICBidWZmZXJTb3VyY2Vba10gPSBjb250ZXh0LmNyZWF0
ZUJ1ZmZlclNvdXJjZSgpOworICAgICAgICBidWZmZXJTb3VyY2Vba10uYnVmZmVyID0gaW1wdWxz
ZTsKKworICAgICAgICBwYW5uZXJba10gPSBjb250ZXh0LmNyZWF0ZVBhbm5lcigpOworICAgICAg
ICBwYW5uZXJba10ucGFubmluZ01vZGVsID0gcGFubmVyLkVRVUFMUE9XRVI7CisgICAgICAgIHBh
bm5lcltrXS5kaXN0YW5jZU1vZGVsID0gZGlzdGFuY2VNb2RlbDsKKworICAgICAgICB2YXIgZGlz
dGFuY2VTdGVwID0gKHBhbm5lcltrXS5tYXhEaXN0YW5jZSAtIHBhbm5lcltrXS5yZWZEaXN0YW5j
ZSkgLyBub2RlQ291bnQ7CisgICAgICAgIHBvc2l0aW9uW2tdID0gZGlzdGFuY2VTdGVwICogayAr
IHBhbm5lcltrXS5yZWZEaXN0YW5jZTsKKyAgICAgICAgcGFubmVyW2tdLnNldFBvc2l0aW9uKDAs
IDAsIHBvc2l0aW9uW2tdKTsKKworICAgICAgICBidWZmZXJTb3VyY2Vba10uY29ubmVjdChwYW5u
ZXJba10pOworICAgICAgICBwYW5uZXJba10uY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKTsK
KworICAgICAgICB0aW1lW2tdID0gayAqIHRpbWVTdGVwOworICAgICAgICBidWZmZXJTb3VyY2Vb
a10ubm90ZU9uKHRpbWVba10pOworICAgIH0KK30KKworLy8gZGlzdGFuY2VNb2RlbCBzaG91bGQg
YmUgdGhlIGRpc3RhbmNlIG1vZGVsIGNvbnN0YW50IGxpa2UKKy8vIExJTkVBUl9ESVNUQU5DRSwg
SU5WRVJTRV9ESVNUQU5DRSwgYW5kIEVYUE9ORU5USUFMX0RJU1RBTkNFLiAgVGhlCisvLyBleHBl
Y3RlZE1vZGVsIGlzIHRoZSBleHBlY3RlZCBhY3R1YWwgbnVtZXJpYyB2YWx1ZSBvZiB0aGUgY29u
c3RhbnQuCitmdW5jdGlvbiBjcmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsIGRpc3RhbmNlTW9kZWws
IGV4cGVjdGVkTW9kZWwpIHsKKyAgICAvLyBUbyB0ZXN0IHRoZSBkaXN0YW5jZSBtb2RlbHMsIHdl
IGNyZWF0ZSBhIG51bWJlciBvZiBwYW5uZXJzIGF0CisgICAgLy8gdW5pZm9ybWx5IHNwYWNlZCBp
bnRlcnZhbHMgb24gdGhlIHotYXhpcy4gIEVhY2ggb2YgdGhlc2UgYXJlCisgICAgLy8gc3RhcnRl
ZCBhdCBlcXVhbGx5IHNwYWNlZCB0aW1lIGludGVydmFscy4gIEFmdGVyIHJlbmRlcmluZyB0aGUK
KyAgICAvLyBzaWduYWxzLCB3ZSBleGFtaW5lIHdoZXJlIGVhY2ggaW1wdWxzZSBpcyBsb2NhdGVk
IGFuZCB0aGUKKyAgICAvLyBhdHRlbnVhdGlvbiBvZiB0aGUgaW1wdWxzZS4gIFRoZSBhdHRlbnVh
dGlvbiBpcyBjb21wYXJlZAorICAgIC8vIGFnYWluc3Qgb3VyIGV4cGVjdGVkIGF0dGVudWF0aW9u
LgorCisgICAgY3JlYXRlR3JhcGgoY29udGV4dCwgZGlzdGFuY2VNb2RlbCwgbm9kZXNUb0NyZWF0
ZSk7CisKKyAgICBjb250ZXh0Lm9uY29tcGxldGUgPSBjaGVja0Rpc3RhbmNlUmVzdWx0KGRpc3Rh
bmNlTW9kZWwsIGV4cGVjdGVkTW9kZWwpOworICAgIGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTsK
K30KKworLy8gVGhlIGdhaW4gY2F1c2VkIGJ5IHRoZSBFUVVBTFBPV0VSIHBhbm5pbmcgbW9kZWws
IGlmIHdlIHN0YXkgb24gdGhlCisvLyB6IGF4aXMsIHdpdGggdGhlIGRlZmF1bHQgb3JpZW50YXRp
b25zLgorZnVuY3Rpb24gZXF1YWxQb3dlckdhaW4oKSB7CisgICAgcmV0dXJuIE1hdGguU1FSVDFf
MjsKK30KKworZnVuY3Rpb24gY2hlY2tEaXN0YW5jZVJlc3VsdChtb2RlbCwgZXhwZWN0ZWRNb2Rl
bCkgeworICAgIHJldHVybiBmdW5jdGlvbihldmVudCkgeworICAgICAgICByZW5kZXJlZEJ1ZmZl
ciA9IGV2ZW50LnJlbmRlcmVkQnVmZmVyOworICAgICAgICByZW5kZXJlZERhdGEgPSByZW5kZXJl
ZEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKKworICAgICAgICAvLyBUaGUgbWF4IGFsbG93ZWQg
ZXJyb3IgYmV0d2VlbiB0aGUgYWN0dWFsIGdhaW4gYW5kIHRoZSBleHBlY3RlZAorICAgICAgICAv
LyB2YWx1ZS4gIFRoaXMgaXMgZGV0ZXJtaW5lZCBleHBlcmltZW50YWxseS4gIFNldCB0byAwIHRv
IHNlZSB3aGF0CisgICAgICAgIC8vIHRoZSBhY3R1YWwgZXJyb3JzIGFyZS4KKyAgICAgICAgdmFy
IG1heEFsbG93ZWRFcnJvciA9IDIuM2UtNjsKKyAgIAorICAgICAgICB2YXIgc3VjY2VzcyA9IHRy
dWU7CisKKyAgICAgICAgLy8gTnVtYmVyIG9mIGltcHVsc2VzIHdlIGZvdW5kIGluIHRoZSByZW5k
ZXJlZCByZXN1bHQuCisgICAgICAgIHZhciBpbXB1bHNlQ291bnQgPSAwOworCisgICAgICAgIC8v
IE1heGltdW0gcmVsYXRpdmUgZXJyb3IgaW4gdGhlIGdhaW4gb2YgdGhlIGltcHVsc2VzLgorICAg
ICAgICB2YXIgbWF4RXJyb3IgPSAwOworCisgICAgICAgIC8vIE51bWJlciBvZiBpbXB1bHNlcyB0
aGF0IHdlcmUgbm90IGF0IHRoZSBleHBlY3RlZCBsb2NhdGlvbi4KKyAgICAgICAgdmFyIHRpbWVF
cnJvckNvdW50ID0gMDsKKworICAgICAgICAvLyBBcnJheSBvZiBsb2NhdGlvbnMgb2YgdGhlIGlt
cHVsc2VzIHRoYXQgd2VyZSBub3QgYXQgdGhlCisgICAgICAgIC8vIGV4cGVjdGVkIGxvY2F0aW9u
LgorICAgICAgICB2YXIgdGltZUVycm9ycyA9IG5ldyBBcnJheSgpOworCisgICAgICAgIC8vIFN0
ZXAgdGhyb3VnaCB0aGUgcmVuZGVyZWQgZGF0YSB0byBmaW5kIGFsbCB0aGUgbm9uLXplcm8gcG9p
bnRzCisgICAgICAgIC8vIHNvIHdlIGNhbiBmaW5kIHdoZXJlIG91ciBkaXN0YW5jZS1hdHRlbnVh
dGVkIGltcHVsc2VzIGFyZS4KKyAgICAgICAgLy8gVGhlc2UgYXJlIHRlc3RlZCBhZ2FpbnN0IHRo
ZSBleHBlY3RlZCBhdHRlbnVhdGlvbnMgYXQgdGhhdAorICAgICAgICAvLyBkaXN0YW5jZS4KKyAg
ICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCByZW5kZXJlZERhdGEubGVuZ3RoOyArK2spIHsKKyAg
ICAgICAgICAgIGlmIChyZW5kZXJlZERhdGFba10gIT0gMCkgeworICAgICAgICAgICAgICAgIHZh
ciBkaXN0YW5jZUZ1bmN0aW9uID0gZGlzdGFuY2VNb2RlbEZ1bmN0aW9uW3Bhbm5lcltpbXB1bHNl
Q291bnRdLmRpc3RhbmNlTW9kZWxdOworICAgICAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IGRp
c3RhbmNlRnVuY3Rpb24ocGFubmVyW2ltcHVsc2VDb3VudF0sIDAsIDAsIHBvc2l0aW9uW2ltcHVs
c2VDb3VudF0pOworCisgICAgICAgICAgICAgICAgLy8gQWRqdXN0IGZvciB0aGUgY2VudGVyLXBh
bm5pbmcgb2YgdGhlIEVRVUFMUE9XRVIgcGFubmluZworICAgICAgICAgICAgICAgIC8vIG1vZGVs
IHRoYXQgd2UncmUgdXNpbmcuCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgKj0gZXF1YWxQb3dl
ckdhaW4oKTsKKworICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IE1hdGguYWJzKHJlbmRlcmVk
RGF0YVtrXSAtIGV4cGVjdGVkKSAvIE1hdGguYWJzKGV4cGVjdGVkKTsKKworICAgICAgICAgICAg
ICAgIG1heEVycm9yID0gTWF0aC5tYXgobWF4RXJyb3IsIE1hdGguYWJzKGVycm9yKSk7CisKKyAg
ICAgICAgICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIGFueSBpbXB1bHNlcyB0aGF0IGFyZW4ndCB3
aGVyZSB3ZSBleHBlY3QgdGhlbQorICAgICAgICAgICAgICAgIC8vIHRvIGJlLgorICAgICAgICAg
ICAgICAgIHZhciBleHBlY3RlZEZyYW1lID0gdGltZVRvU2FtcGxlRnJhbWUodGltZVtpbXB1bHNl
Q291bnRdLCBzYW1wbGVSYXRlKTsKKyAgICAgICAgICAgICAgICBpZiAoayAhPSBleHBlY3RlZEZy
YW1lKSB7CisgICAgICAgICAgICAgICAgICAgIHRpbWVFcnJvcnNbdGltZUVycm9yQ291bnRdID0g
eyBhY3R1YWwgOiBrLCBleHBlY3RlZCA6IGV4cGVjdGVkRnJhbWV9OworICAgICAgICAgICAgICAg
ICAgICArK3RpbWVFcnJvckNvdW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICArK2ltcHVsc2VDb3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlm
IChtb2RlbCA9PSBleHBlY3RlZE1vZGVsKSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJEaXN0
YW5jZSBtb2RlbCB2YWx1ZSBtYXRjaGVkIGV4cGVjdGVkIHZhbHVlLiIpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiRGlzdGFuY2UgbW9kZWwgdmFsdWUgZG9lcyBu
b3QgbWF0Y2ggZXhwZWN0ZWQgdmFsdWUuIik7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7
CisgICAgICAgIH0gICAgCisKKyAgICAgICAgaWYgKGltcHVsc2VDb3VudCA9PSBub2Rlc1RvQ3Jl
YXRlKSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJOdW1iZXIgb2YgaW1wdWxzZXMgZm91bmQg
bWF0Y2hlcyBudW1iZXIgb2YgcGFubmVyIG5vZGVzLiIpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgdGVzdEZhaWxlZCgiTnVtYmVyIG9mIGltcHVsc2VzIGlzIGluY29ycmVjdC4gIEZv
dW5kICIgKyBpbXB1bHNlQ291bnQgKyAiIGJ1dCBleHBlY3RlZCAiICsgbm9kZXNUb0NyZWF0ZSAr
ICIuIik7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobWF4RXJyb3IgPD0gbWF4QWxsb3dlZEVycm9yKSB7CisgICAgICAgICAgICB0ZXN0UGFz
c2VkKCJEaXN0YW5jZSBnYWlucyBhcmUgY29ycmVjdC4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHRlc3RGYWlsZWQoIkRpc3RhbmNlIGdhaW5zIGFyZSBpbmNvcnJlY3QuICBNYXgg
cmVsIGVycm9yID0gIiArIG1heEVycm9yICsgIiAobWF4QWxsb3dlZEVycm9yID0gIiArIG1heEFs
bG93ZWRFcnJvciArICIpIik7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICAvLyBQcmludCBvdXQgaW5mb3JtYXRpb24gb24gdGhlIGltcHVsc2VzIHRo
YXQgb2NjdXJyZWQgYXQgYW4KKyAgICAgICAgLy8gdW5leHBlY3RlZCBwbGFjZS4KKyAgICAgICAg
aWYgKHRpbWVFcnJvcnMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNl
OworICAgICAgICAgICAgdGVzdEZhaWxlZCh0aW1lRXJyb3JzLmxlbmd0aCArICIgdGltaW5nIGVy
cm9ycyBmb3VuZCIpOworICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aW1lRXJyb3Jz
Lmxlbmd0aDsgKytrKSB7CisgICAgICAgICAgICAgICAgdGVzdEZhaWxlZCgiRm91bmQgaW1wdWxz
ZSBhdCBzYW1wbGUgZnJhbWUgIiArIHRpbWVFcnJvcnNba10uYWN0dWFsICsgIiBidXQgZXhwZWN0
ZWQgIiArIHRpbWVFcnJvcnNba10uZXhwZWN0ZWQpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIkRpc3Rh
bmNlIHRlc3QgcGFzc2VkIGZvciBkaXN0YW5jZSBtb2RlbCAiICsgbW9kZWwpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiRGlzdGFuY2UgdGVzdCBmYWlsZWQgZm9y
IGRpc3RhbmNlIG1vZGVsICIgKyBtb2RlbCk7CisgICAgICAgIH0KKworICAgICAgICBmaW5pc2hK
U1Rlc3QoKTsKKyAgICB9Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125020</attachid>
            <date>2012-02-01 14:52:59 -0800</date>
            <delta_ts>2012-02-01 16:11:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74273-20120201145258.patch</filename>
            <type>text/plain</type>
            <size>19243</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTU5ODEzZTYzNjhlYmJk
YjVmMmIyZWY5NjNjYzVjYzI1NmNlNmYxZi4uNDY5ODA0Y2YxMWVlNWEzMTEzNjZlNTcxOGE2MmFl
MTAyMzdiOThmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAxLTA5ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBDb25zdGFudCB2YWx1ZXMgdG8g
c2V0ICJkaXN0YW5jZU1vZGVsIiBhcmUgdW5kZWZpbmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDI3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiB3ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVu
dGlhbC5odG1sCisgICAgICAgICAgICAgICB3ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLmh0bWwK
KyAgICAgICAgICAgICAgIHdlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci5odG1sCisKKyAgICAgICAg
KiB3ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaDogRGVmaW5lIGVudW0gZm9yIHRoZSBuZXcgY29u
c3RhbnRzCisgICAgICAgIGZvciB0aGUgZGlzdGFuY2UgbW9kZWxzLgorICAgICAgICAqIHdlYmF1
ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGw6IERlZmluZSBtYXRjaGluZyBjb25zdGFudHMgZm9yIHRo
ZQorICAgICAgICBkaXN0YW5jZSBtb2RlbHMuCisKIDIwMTItMDEtMzEgIFBhYmxvIEZsb3VyZXQg
IDxwYWJsb2ZAbW90b3JvbGEuY29tPgogCiAgICAgICAgIEZpeCBjb21waWxhdGlvbiBlcnJvcnMg
b24gYnVpbGQtd2Via2l0IC0tZGVidWcgLS1uby13b3JrZXJzIG9uIG1hYy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oIGIvU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmgKaW5kZXggOThkMjc3NDNlNDExNzk0M2IyNjg3
OGU2N2VjZDcxZTM5NjRiZGM0YS4uNDQ1OTdlODgzMDMxNDYxNTFkNGZlZmE2NjY3NWQ3OTY5Njll
NThjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2Rl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmgKQEAgLTUz
LDYgKzUzLDE0IEBAIHB1YmxpYzoKICAgICAgICAgU09VTkRGSUVMRCA9IDIsCiAgICAgfTsKIAor
ICAgIC8vIFRoZXNlIG11c3QgYmUgZGVmaW5lZCBhcyBpbiB0aGUgLmlkbCBmaWxlIGFuZCBtdXN0
IG1hdGNoIHRob3NlCisgICAgLy8gaW4gdGhlIERpc3RhbmNlRWZmZWN0IGNsYXNzLgorICAgIGVu
dW0geworICAgICAgICBMSU5FQVJfRElTVEFOQ0UgPSAwLAorICAgICAgICBJTlZFUlNFX0RJU1RB
TkNFID0gMSwKKyAgICAgICAgRVhQT05FTlRJQUxfRElTVEFOQ0UgPSAyLAorICAgIH07CisgICAg
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QXVkaW9QYW5uZXJOb2RlPiBjcmVhdGUoQXVkaW9Db250
ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBBdWRpb1Bhbm5lck5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwKaW5kZXggMmRiMDkzZDdiNTAz
YWExZTljYzQ1ZjY0YTcxN2EwYzE4NDRiYWRkNy4uNTk3YTNlYWRmYmFjOWU3NmJhOWRhNzQyMzNi
ZTE1YjlkNzQyNTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Q
YW5uZXJOb2RlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5v
ZGUuaWRsCkBAIC0zMyw2ICszMywxMSBAQCBtb2R1bGUgYXVkaW8gewogICAgICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBIUlRGID0gMTsKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgU09V
TkRGSUVMRCA9IDI7CiAKKyAgICAgICAgLy8gRGlzdGFuY2UgbW9kZWwKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgTElORUFSX0RJU1RBTkNFID0gMDsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgSU5WRVJTRV9ESVNUQU5DRSA9IDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IEVYUE9ORU5USUFMX0RJU1RBTkNFID0gMjsKKwogICAgICAgICAvLyBEZWZhdWx0IG1vZGVs
IGZvciBzdGVyZW8gaXMgSFJURiAKICAgICAgICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgcGFu
bmluZ01vZGVsOyAvLyBGSVhNRTogdXNlIHVuc2lnbmVkIHNob3J0IHdoZW4gZ2x1ZSBnZW5lcmF0
aW9uIHN1cHBvcnRzIGl0CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA5ODVlNWUyODkzNDIwMTAwNjg0ODAwMTUwMjQ1YTA3
YjZlZTA0NGI3Li44MWNiOTUxMTgwNzc5NTQzM2Q2OGE2YTQyMWQxMzNkNTk0YWMzMjMzIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjcgQEAKKzIwMTItMDEtMDkgIFJheW1vbmQgVG95ICA8cnRveUBnb29nbGUu
Y29tPgorCisgICAgICAgIENvbnN0YW50IHZhbHVlcyB0byBzZXQgImRpc3RhbmNlTW9kZWwiIGFy
ZSB1bmRlZmluZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc0MjczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiB3ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVudGlhbC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHdlYmF1ZGlvL2Rpc3RhbmNlLWV4cG9uZW50aWFsLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHdlYmF1ZGlvL2Rpc3RhbmNlLWludmVyc2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiB3ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHdlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHdlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRp
by9yZXNvdXJjZXMvZGlzdGFuY2UtbW9kZWwtdGVzdGluZy5qczogQWRkZWQuCisgICAgICAgIChj
cmVhdGVJbXB1bHNlQnVmZmVyKToKKyAgICAgICAgKGxpbmVhckRpc3RhbmNlKToKKyAgICAgICAg
KGV4cG9uZW50aWFsRGlzdGFuY2UpOgorICAgICAgICAoaW52ZXJzZURpc3RhbmNlKToKKyAgICAg
ICAgKGNyZWF0ZUdyYXBoKToKKyAgICAgICAgKHN0YXJ0U291cmNlcyk6CisgICAgICAgIChlcXVh
bFBvd2VyR2Fpbik6CisgICAgICAgIChjaGVja0Rpc3RhbmNlUmVzdWx0LnJldHVybi5yZW5kZXJl
ZEJ1ZmZlcik6CisgICAgICAgIChjaGVja0Rpc3RhbmNlUmVzdWx0KToKKwogMjAxMi0wMS0zMSAg
WXV6byBGdWppc2hpbWEgIDx5dXpvQGdvb2dsZS5jb20+CiAKICAgICAgICAgW0Nocm9taXVtXSBV
bnJldmlld2VkIHRlc3QgZXhwZWN0YXRpb24gY2hhbmdlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vZGlzdGFuY2UtZXhwb25lbnRpYWwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vZGlzdGFuY2UtZXhwb25lbnRpYWwtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjQ5MDJlMzhhMjIyYzRlZTE4NDNhMTAyMzUyMzI4ZTQ0OGZlNjdjMDkKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVudGlhbC1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwxMiBAQAorVGVzdCBleHBvbmVudGlhbCBkaXN0YW5jZSBtb2RlbCBvZiBB
dWRpb1Bhbm5lck5vZGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBEaXN0
YW5jZSBtb2RlbCB2YWx1ZSBtYXRjaGVkIGV4cGVjdGVkIHZhbHVlLgorUEFTUyBOdW1iZXIgb2Yg
aW1wdWxzZXMgZm91bmQgbWF0Y2hlcyBudW1iZXIgb2YgcGFubmVyIG5vZGVzLgorUEFTUyBEaXN0
YW5jZSBnYWlucyBhcmUgY29ycmVjdC4KK1BBU1MgRGlzdGFuY2UgdGVzdCBwYXNzZWQgZm9yIGRp
c3RhbmNlIG1vZGVsIDIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1leHBv
bmVudGlhbC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtZXhwb25lbnRpYWwu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iNmFmYzBlM2E0YTIyZGRiZmFlZjZlYzNmNzAwNjEzNjM4ZTA5MWMz
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtZXhwb25l
bnRpYWwuaHRtbApAQCAtMCwwICsxLDQwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1cz
Qy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorICA8aGVhZD4KKyAg
ICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3Qtc3R5bGUuY3NzIi8+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5n
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZGlzdGFu
Y2UtbW9kZWwtdGVzdGluZy5qcyI+PC9zY3JpcHQ+CisgIDwvaGVhZD4KKworICA8Ym9keT4KKyAg
ICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+CisKKyAgICA8c2NyaXB0PgorICAgICAgZGVzY3JpcHRpb24oIlRlc3QgZXhwb25lbnRpYWwg
ZGlzdGFuY2UgbW9kZWwgb2YgQXVkaW9QYW5uZXJOb2RlLiIpOworCisgICAgICBmdW5jdGlvbiBy
dW5UZXN0KCkgeworICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAg
fQorCisgICAgICAgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworCisgICAgICAgICAg
Ly8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dC4KKyAgICAgICAgICBjb250ZXh0ID0gbmV3
IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1wbGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vjb25kcywg
c2FtcGxlUmF0ZSk7CisKKyAgICAgICAgICAvLyBUZW1wIHBhbm5lciBub2RlIHNvIHdlIGNhbiBn
ZXQgdGhlIEVYUE9ORU5USUFMX0RJU1RBTkNFIHZhbHVlLgorICAgICAgICAgIHZhciB0ZW1wUGFu
bmVyID0gY29udGV4dC5jcmVhdGVQYW5uZXIoKTsKKyAgICAgICAgICBjcmVhdGVUZXN0QW5kUnVu
KGNvbnRleHQsIHRlbXBQYW5uZXIuRVhQT05FTlRJQUxfRElTVEFOQ0UsIDIpOworICAgICAgfQor
CisgICAgICBydW5UZXN0KCk7CisgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCisg
ICAgPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWludmVyc2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1
YTk0OTI0NGZiMjlmODcyZmRlNTE5YzNmOGFkNzQzMWU0Mzc4OGUKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDEyIEBACitUZXN0IGludmVyc2UgZGlzdGFuY2UgbW9kZWwgb2YgQXVkaW9QYW5uZXJO
b2RlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgRGlzdGFuY2UgbW9kZWwg
dmFsdWUgbWF0Y2hlZCBleHBlY3RlZCB2YWx1ZS4KK1BBU1MgTnVtYmVyIG9mIGltcHVsc2VzIGZv
dW5kIG1hdGNoZXMgbnVtYmVyIG9mIHBhbm5lciBub2Rlcy4KK1BBU1MgRGlzdGFuY2UgZ2FpbnMg
YXJlIGNvcnJlY3QuCitQQVNTIERpc3RhbmNlIHRlc3QgcGFzc2VkIGZvciBkaXN0YW5jZSBtb2Rl
bCAxCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtaW52ZXJzZS5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtaW52ZXJzZS5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU1
NzcxNzQ2ZjAxMTI5N2EwNmMwNzg4Yjc4N2ZlZmJlOGZhOGZkYzkKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLmh0bWwKQEAgLTAsMCArMSw0
MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNp
dGlvbmFsLy9FTiI+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorICAgIDxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Rpc3RhbmNlLW1vZGVsLXRlc3RpbmcuanMiPjwv
c2NyaXB0PgorICA8L2hlYWQ+CisKKyAgPGJvZHk+CisgICAgPGRpdiBpZD0iZGVzY3JpcHRpb24i
PjwvZGl2PgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCisgICAgPHNjcmlwdD4KKyAg
ICAgIGRlc2NyaXB0aW9uKCJUZXN0IGludmVyc2UgZGlzdGFuY2UgbW9kZWwgb2YgQXVkaW9QYW5u
ZXJOb2RlLiIpOworCisgICAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgd2luZG93LmpzVGVz
dElzQXN5bmMgPSB0cnVlOworCisgICAgICAgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29u
dGV4dC4KKyAgICAgICAgICBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1w
bGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisKKyAgICAgICAgICAv
LyBUZW1wIHBhbm5lciBub2RlIHNvIHdlIGNhbiBnZXQgdGhlIElOVkVSU0VfRElTVEFOQ0UgdmFs
dWUuCisgICAgICAgICAgdmFyIHRlbXBQYW5uZXIgPSBjb250ZXh0LmNyZWF0ZVBhbm5lcigpOwor
ICAgICAgICAgIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgdGVtcFBhbm5lci5JTlZFUlNFX0RJ
U1RBTkNFLCAxKTsKKyAgICAgIH0KKworICAgICAgcnVuVGVzdCgpOworICAgICAgc3VjY2Vzc2Z1
bGx5UGFyc2VkID0gdHJ1ZTsKKworICAgIDwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKyAgPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtbGluZWFyLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzlkMjhhOTE1MTY2OWQ5NjU3ZjZiNDVkOGY2ODJkNGIwN2ZkZjlm
NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVh
ci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMiBAQAorVGVzdCBsaW5lYXIgZGlzdGFuY2UgbW9k
ZWwgb2YgQXVkaW9QYW5uZXJOb2RlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BB
U1MgRGlzdGFuY2UgbW9kZWwgdmFsdWUgbWF0Y2hlZCBleHBlY3RlZCB2YWx1ZS4KK1BBU1MgTnVt
YmVyIG9mIGltcHVsc2VzIGZvdW5kIG1hdGNoZXMgbnVtYmVyIG9mIHBhbm5lciBub2Rlcy4KK1BB
U1MgRGlzdGFuY2UgZ2FpbnMgYXJlIGNvcnJlY3QuCitQQVNTIERpc3RhbmNlIHRlc3QgcGFzc2Vk
IGZvciBkaXN0YW5jZSBtb2RlbCAwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFu
Y2UtbGluZWFyLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1saW5lYXIuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iMDI1NTYzNDg1Y2Y1NTZhZGU2MWQzZjQ3YjNmYmE5ODIzNjk4NGJlCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtbGluZWFyLmh0
bWwKQEAgLTAsMCArMSw0MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBI
VE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxl
LmNzcyIvPgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Rpc3RhbmNlLW1vZGVs
LXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICA8L2hlYWQ+CisKKyAgPGJvZHk+CisgICAgPGRpdiBp
ZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCisg
ICAgPHNjcmlwdD4KKyAgICAgIGRlc2NyaXB0aW9uKCJUZXN0IGxpbmVhciBkaXN0YW5jZSBtb2Rl
bCBvZiBBdWRpb1Bhbm5lck5vZGUuIik7CisKKyAgICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7Cisg
ICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICB9CisKKyAgICAgICAg
ICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICAgICAgICAvLyBDcmVhdGUgb2Zm
bGluZSBhdWRpbyBjb250ZXh0LgorICAgICAgICAgIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9D
b250ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsK
KworICAgICAgICAgIC8vIENyZWF0ZSB0ZW1wIHBhbm5lciB0byBnZXQgTElORUFSX0RJU1RBTkNF
IHZhbHVlIGZvciB0ZXN0aW5nLgorICAgICAgICAgIHZhciBwYW5uZXJNb2RlbCA9IGNvbnRleHQu
Y3JlYXRlUGFubmVyKCk7CisgICAgICAgICAgY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCBwYW5u
ZXJNb2RlbC5MSU5FQVJfRElTVEFOQ0UsIDApOworICAgICAgfQorCisgICAgICBydW5UZXN0KCk7
CisgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCisgICAgPC9zY3JpcHQ+CisKKzxz
Y3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9y
ZXNvdXJjZXMvZGlzdGFuY2UtbW9kZWwtdGVzdGluZy5qcyBiL0xheW91dFRlc3RzL3dlYmF1ZGlv
L3Jlc291cmNlcy9kaXN0YW5jZS1tb2RlbC10ZXN0aW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4ZDFkOWZk
M2IxOTA2YzA3NjNmYTA1ZWUyOWVhMDFlYzg5YjUzMmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvZGlzdGFuY2UtbW9kZWwtdGVzdGluZy5qcwpAQCAt
MCwwICsxLDIxOCBAQAordmFyIHNhbXBsZVJhdGUgPSA0NDEwMC4wOworCisvLyBIb3cgbWFueSBw
YW5uZXIgbm9kZXMgdG8gY3JlYXRlIGZvciB0aGUgdGVzdC4KK3ZhciBub2Rlc1RvQ3JlYXRlID0g
MTAwOworCisvLyBUaW1lIHN0ZXAgd2hlbiBlYWNoIHBhbm5lciBub2RlIHN0YXJ0cy4KK3ZhciB0
aW1lU3RlcCA9IDAuMDAxOworCisvLyBNYWtlIHN1cmUgd2UgcmVuZGVyIGxvbmcgZW5vdWdoIHRv
IGdldCBhbGwgb2Ygb3VyIG5vZGVzLgordmFyIHJlbmRlckxlbmd0aFNlY29uZHMgPSB0aW1lU3Rl
cCAqIChub2Rlc1RvQ3JlYXRlICsgMSk7CisKKy8vIExlbmd0aCBvZiBhbiBpbXB1bHNlIHNpZ25h
bC4KK3ZhciBwdWxzZUxlbmd0aEZyYW1lcyA9IE1hdGgucm91bmQodGltZVN0ZXAgKiBzYW1wbGVS
YXRlKTsKKworLy8gR2xvYmFscyB0byBtYWtlIGRlYnVnZ2luZyBhIGxpdHRsZSBlYXNpZXIuCit2
YXIgY29udGV4dDsKK3ZhciBpbXB1bHNlOwordmFyIGJ1ZmZlclNvdXJjZTsKK3ZhciBwYW5uZXI7
Cit2YXIgcG9zaXRpb247Cit2YXIgdGltZTsKKyAgICAgIAorLy8gRm9yIHRoZSByZWNvcmQsIHRo
ZXNlIGRpc3RhbmNlIGZvcm11bGFzIHdlcmUgdGFrZW4gZnJvbSB0aGUgT3BlbkFMCisvLyBzcGVj
CisvLyAoaHR0cDovL2Nvbm5lY3QuY3JlYXRpdmVsYWJzLmNvbS9vcGVuYWwvRG9jdW1lbnRhdGlv
bi9PcGVuQUwlMjAxLjElMjBTcGVjaWZpY2F0aW9uLnBkZiksCisvLyBub3QgdGhlIGNvZGUuICBU
aGUgV2ViIEF1ZGlvIHNwZWMgZm9sbG93cyB0aGUgT3BlbkFMIGZvcm11bGFzLgorCitmdW5jdGlv
biBsaW5lYXJEaXN0YW5jZShwYW5uZXIsIHgsIHksIHopIHsKKyAgICB2YXIgZGlzdGFuY2UgPSBN
YXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KTsKKyAgICBkaXN0YW5jZSA9IE1hdGgubWlu
KGRpc3RhbmNlLCBwYW5uZXIubWF4RGlzdGFuY2UpOworICAgIHZhciByb2xsb2ZmID0gcGFubmVy
LnJvbGxvZmZGYWN0b3I7CisgICAgdmFyIGdhaW4gPSAoMSAtIHJvbGxvZmYgKiAoZGlzdGFuY2Ug
LSBwYW5uZXIucmVmRGlzdGFuY2UpIC8gKHBhbm5lci5tYXhEaXN0YW5jZSAtIHBhbm5lci5yZWZE
aXN0YW5jZSkpOworCisgICAgcmV0dXJuIGdhaW47Cit9CisKK2Z1bmN0aW9uIGludmVyc2VEaXN0
YW5jZShwYW5uZXIsIHgsIHksIHopIHsKKyAgICB2YXIgZGlzdGFuY2UgPSBNYXRoLnNxcnQoeCAq
IHggKyB5ICogeSArIHogKiB6KTsKKyAgICBkaXN0YW5jZSA9IE1hdGgubWluKGRpc3RhbmNlLCBw
YW5uZXIubWF4RGlzdGFuY2UpOworICAgIHZhciByb2xsb2ZmID0gcGFubmVyLnJvbGxvZmZGYWN0
b3I7CisgICAgdmFyIGdhaW4gPSBwYW5uZXIucmVmRGlzdGFuY2UgLyAocGFubmVyLnJlZkRpc3Rh
bmNlICsgcm9sbG9mZiAqIChkaXN0YW5jZSAtIHBhbm5lci5yZWZEaXN0YW5jZSkpOworCisgICAg
cmV0dXJuIGdhaW47Cit9CisKK2Z1bmN0aW9uIGV4cG9uZW50aWFsRGlzdGFuY2UocGFubmVyLCB4
LCB5LCB6KSB7CisgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6
ICogeik7CisgICAgZGlzdGFuY2UgPSBNYXRoLm1pbihkaXN0YW5jZSwgcGFubmVyLm1heERpc3Rh
bmNlKTsKKyAgICB2YXIgcm9sbG9mZiA9IHBhbm5lci5yb2xsb2ZmRmFjdG9yOworICAgIHZhciBn
YWluID0gTWF0aC5wb3coZGlzdGFuY2UgLyBwYW5uZXIucmVmRGlzdGFuY2UsIC1yb2xsb2ZmKTsK
KworICAgIHJldHVybiBnYWluOworfQorCisvLyBUaGlzIGFycmF5IG11c3QgYmUgYXJyYW5nZWQg
aW4gdGhlIG51bWVyaWMgb3JkZXIgb2YgdGhlIGRpc3RhbmNlCisvLyBtb2RlbCB2YWx1ZXMuCit2
YXIgZGlzdGFuY2VNb2RlbEZ1bmN0aW9uID0gW2xpbmVhckRpc3RhbmNlLCBpbnZlcnNlRGlzdGFu
Y2UsIGV4cG9uZW50aWFsRGlzdGFuY2VdOworCitmdW5jdGlvbiBjcmVhdGVHcmFwaChjb250ZXh0
LCBkaXN0YW5jZU1vZGVsLCBub2RlQ291bnQpIHsKKyAgICBidWZmZXJTb3VyY2UgPSBuZXcgQXJy
YXkobm9kZUNvdW50KTsKKyAgICBwYW5uZXIgPSBuZXcgQXJyYXkobm9kZUNvdW50KTsKKyAgICBw
b3NpdGlvbiA9IG5ldyBBcnJheShub2RlQ291bnQpOworICAgIHRpbWUgPSBuZXcgQXJyYXkobm9k
ZXNUb0NyZWF0ZSk7CisKKyAgICBpbXB1bHNlID0gY3JlYXRlSW1wdWxzZUJ1ZmZlcihjb250ZXh0
LCBwdWxzZUxlbmd0aEZyYW1lcyk7CisKKyAgICAvLyBDcmVhdGUgYWxsIHRoZSBzb3VyY2VzIGFu
ZCBwYW5uZXJzLgorICAgIC8vCisgICAgLy8gV2UgTVVTVCB1c2UgdGhlIEVRVUFMUE9XRVIgcGFu
bmluZyBtb2RlbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkKKyAgICAvLyBmaWd1cmUgb3V0IHRoZSBn
YWluIGludHJvZHVjZWQgYnkgdGhlIHBhbm5lci4KKyAgICAvLworICAgIC8vIFdlIHdhbnQgdG8g
c3RheSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwYW5uaW5nIHJhbmdlLCB3aGljaCBtZWFucworICAg
IC8vIHdlIHdhbnQgdG8gc3RheSBvbiB0aGUgei1heGlzLiAgSWYgd2UgZG9uJ3QsIHRoZW4gdGhl
IGVmZmVjdCBvZgorICAgIC8vIHBhbm5pbmcgbW9kZWwgd2lsbCBiZSBtdWNoIG1vcmUgY29tcGxp
Y2F0ZWQuICBXZSdyZSBub3QgdGVzdGluZworICAgIC8vIHRoZSBwYW5uZXIsIGJ1dCB0aGUgZGlz
dGFuY2UgbW9kZWwsIHNvIHdlIHdhbnQgdGhlIHBhbm5lciBlZmZlY3QKKyAgICAvLyB0byBiZSBz
aW1wbGUuCisgICAgLy8KKyAgICAvLyBUaGUgcGFubmVycyBhcmUgcGxhY2VkIGF0IGEgdW5pZm9y
bSBpbnRlcnZhbHMgYmV0d2VlbiB0aGUgcGFubmVyCisgICAgLy8gcmVmZXJlbmNlIGRpc3RhbmNl
IGFuZCB0aGUgcGFubmVyIG1heCBkaXN0YW5jZS4gIFRoZSBzb3VyY2UgaXMKKyAgICAvLyBhbHNv
IHN0YXJ0ZWQgYXQgcmVndWxhciBpbnRlcnZhbHMuCisgICAgZm9yICh2YXIgayA9IDA7IGsgPCBu
b2RlQ291bnQ7ICsraykgeworICAgICAgICBidWZmZXJTb3VyY2Vba10gPSBjb250ZXh0LmNyZWF0
ZUJ1ZmZlclNvdXJjZSgpOworICAgICAgICBidWZmZXJTb3VyY2Vba10uYnVmZmVyID0gaW1wdWxz
ZTsKKworICAgICAgICBwYW5uZXJba10gPSBjb250ZXh0LmNyZWF0ZVBhbm5lcigpOworICAgICAg
ICBwYW5uZXJba10ucGFubmluZ01vZGVsID0gcGFubmVyLkVRVUFMUE9XRVI7CisgICAgICAgIHBh
bm5lcltrXS5kaXN0YW5jZU1vZGVsID0gZGlzdGFuY2VNb2RlbDsKKworICAgICAgICB2YXIgZGlz
dGFuY2VTdGVwID0gKHBhbm5lcltrXS5tYXhEaXN0YW5jZSAtIHBhbm5lcltrXS5yZWZEaXN0YW5j
ZSkgLyBub2RlQ291bnQ7CisgICAgICAgIHBvc2l0aW9uW2tdID0gZGlzdGFuY2VTdGVwICogayAr
IHBhbm5lcltrXS5yZWZEaXN0YW5jZTsKKyAgICAgICAgcGFubmVyW2tdLnNldFBvc2l0aW9uKDAs
IDAsIHBvc2l0aW9uW2tdKTsKKworICAgICAgICBidWZmZXJTb3VyY2Vba10uY29ubmVjdChwYW5u
ZXJba10pOworICAgICAgICBwYW5uZXJba10uY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKTsK
KworICAgICAgICB0aW1lW2tdID0gayAqIHRpbWVTdGVwOworICAgICAgICBidWZmZXJTb3VyY2Vb
a10ubm90ZU9uKHRpbWVba10pOworICAgIH0KK30KKworLy8gZGlzdGFuY2VNb2RlbCBzaG91bGQg
YmUgdGhlIGRpc3RhbmNlIG1vZGVsIGNvbnN0YW50IGxpa2UKKy8vIExJTkVBUl9ESVNUQU5DRSwg
SU5WRVJTRV9ESVNUQU5DRSwgYW5kIEVYUE9ORU5USUFMX0RJU1RBTkNFLiAgVGhlCisvLyBleHBl
Y3RlZE1vZGVsIGlzIHRoZSBleHBlY3RlZCBhY3R1YWwgbnVtZXJpYyB2YWx1ZSBvZiB0aGUgY29u
c3RhbnQuCitmdW5jdGlvbiBjcmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsIGRpc3RhbmNlTW9kZWws
IGV4cGVjdGVkTW9kZWwpIHsKKyAgICAvLyBUbyB0ZXN0IHRoZSBkaXN0YW5jZSBtb2RlbHMsIHdl
IGNyZWF0ZSBhIG51bWJlciBvZiBwYW5uZXJzIGF0CisgICAgLy8gdW5pZm9ybWx5IHNwYWNlZCBp
bnRlcnZhbHMgb24gdGhlIHotYXhpcy4gIEVhY2ggb2YgdGhlc2UgYXJlCisgICAgLy8gc3RhcnRl
ZCBhdCBlcXVhbGx5IHNwYWNlZCB0aW1lIGludGVydmFscy4gIEFmdGVyIHJlbmRlcmluZyB0aGUK
KyAgICAvLyBzaWduYWxzLCB3ZSBleGFtaW5lIHdoZXJlIGVhY2ggaW1wdWxzZSBpcyBsb2NhdGVk
IGFuZCB0aGUKKyAgICAvLyBhdHRlbnVhdGlvbiBvZiB0aGUgaW1wdWxzZS4gIFRoZSBhdHRlbnVh
dGlvbiBpcyBjb21wYXJlZAorICAgIC8vIGFnYWluc3Qgb3VyIGV4cGVjdGVkIGF0dGVudWF0aW9u
LgorCisgICAgY3JlYXRlR3JhcGgoY29udGV4dCwgZGlzdGFuY2VNb2RlbCwgbm9kZXNUb0NyZWF0
ZSk7CisKKyAgICBjb250ZXh0Lm9uY29tcGxldGUgPSBjaGVja0Rpc3RhbmNlUmVzdWx0KGRpc3Rh
bmNlTW9kZWwsIGV4cGVjdGVkTW9kZWwpOworICAgIGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTsK
K30KKworLy8gVGhlIGdhaW4gY2F1c2VkIGJ5IHRoZSBFUVVBTFBPV0VSIHBhbm5pbmcgbW9kZWws
IGlmIHdlIHN0YXkgb24gdGhlCisvLyB6IGF4aXMsIHdpdGggdGhlIGRlZmF1bHQgb3JpZW50YXRp
b25zLgorZnVuY3Rpb24gZXF1YWxQb3dlckdhaW4oKSB7CisgICAgcmV0dXJuIE1hdGguU1FSVDFf
MjsKK30KKworZnVuY3Rpb24gY2hlY2tEaXN0YW5jZVJlc3VsdChtb2RlbCwgZXhwZWN0ZWRNb2Rl
bCkgeworICAgIHJldHVybiBmdW5jdGlvbihldmVudCkgeworICAgICAgICByZW5kZXJlZEJ1ZmZl
ciA9IGV2ZW50LnJlbmRlcmVkQnVmZmVyOworICAgICAgICByZW5kZXJlZERhdGEgPSByZW5kZXJl
ZEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKKworICAgICAgICAvLyBUaGUgbWF4IGFsbG93ZWQg
ZXJyb3IgYmV0d2VlbiB0aGUgYWN0dWFsIGdhaW4gYW5kIHRoZSBleHBlY3RlZAorICAgICAgICAv
LyB2YWx1ZS4gIFRoaXMgaXMgZGV0ZXJtaW5lZCBleHBlcmltZW50YWxseS4gIFNldCB0byAwIHRv
IHNlZSB3aGF0CisgICAgICAgIC8vIHRoZSBhY3R1YWwgZXJyb3JzIGFyZS4KKyAgICAgICAgdmFy
IG1heEFsbG93ZWRFcnJvciA9IDIuM2UtNjsKKyAgIAorICAgICAgICB2YXIgc3VjY2VzcyA9IHRy
dWU7CisKKyAgICAgICAgLy8gTnVtYmVyIG9mIGltcHVsc2VzIHdlIGZvdW5kIGluIHRoZSByZW5k
ZXJlZCByZXN1bHQuCisgICAgICAgIHZhciBpbXB1bHNlQ291bnQgPSAwOworCisgICAgICAgIC8v
IE1heGltdW0gcmVsYXRpdmUgZXJyb3IgaW4gdGhlIGdhaW4gb2YgdGhlIGltcHVsc2VzLgorICAg
ICAgICB2YXIgbWF4RXJyb3IgPSAwOworCisgICAgICAgIC8vIE51bWJlciBvZiBpbXB1bHNlcyB0
aGF0IHdlcmUgbm90IGF0IHRoZSBleHBlY3RlZCBsb2NhdGlvbi4KKyAgICAgICAgdmFyIHRpbWVF
cnJvckNvdW50ID0gMDsKKworICAgICAgICAvLyBBcnJheSBvZiBsb2NhdGlvbnMgb2YgdGhlIGlt
cHVsc2VzIHRoYXQgd2VyZSBub3QgYXQgdGhlCisgICAgICAgIC8vIGV4cGVjdGVkIGxvY2F0aW9u
LgorICAgICAgICB2YXIgdGltZUVycm9ycyA9IG5ldyBBcnJheSgpOworCisgICAgICAgIC8vIFN0
ZXAgdGhyb3VnaCB0aGUgcmVuZGVyZWQgZGF0YSB0byBmaW5kIGFsbCB0aGUgbm9uLXplcm8gcG9p
bnRzCisgICAgICAgIC8vIHNvIHdlIGNhbiBmaW5kIHdoZXJlIG91ciBkaXN0YW5jZS1hdHRlbnVh
dGVkIGltcHVsc2VzIGFyZS4KKyAgICAgICAgLy8gVGhlc2UgYXJlIHRlc3RlZCBhZ2FpbnN0IHRo
ZSBleHBlY3RlZCBhdHRlbnVhdGlvbnMgYXQgdGhhdAorICAgICAgICAvLyBkaXN0YW5jZS4KKyAg
ICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCByZW5kZXJlZERhdGEubGVuZ3RoOyArK2spIHsKKyAg
ICAgICAgICAgIGlmIChyZW5kZXJlZERhdGFba10gIT0gMCkgeworICAgICAgICAgICAgICAgIHZh
ciBkaXN0YW5jZUZ1bmN0aW9uID0gZGlzdGFuY2VNb2RlbEZ1bmN0aW9uW3Bhbm5lcltpbXB1bHNl
Q291bnRdLmRpc3RhbmNlTW9kZWxdOworICAgICAgICAgICAgICAgIHZhciBleHBlY3RlZCA9IGRp
c3RhbmNlRnVuY3Rpb24ocGFubmVyW2ltcHVsc2VDb3VudF0sIDAsIDAsIHBvc2l0aW9uW2ltcHVs
c2VDb3VudF0pOworCisgICAgICAgICAgICAgICAgLy8gQWRqdXN0IGZvciB0aGUgY2VudGVyLXBh
bm5pbmcgb2YgdGhlIEVRVUFMUE9XRVIgcGFubmluZworICAgICAgICAgICAgICAgIC8vIG1vZGVs
IHRoYXQgd2UncmUgdXNpbmcuCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgKj0gZXF1YWxQb3dl
ckdhaW4oKTsKKworICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IE1hdGguYWJzKHJlbmRlcmVk
RGF0YVtrXSAtIGV4cGVjdGVkKSAvIE1hdGguYWJzKGV4cGVjdGVkKTsKKworICAgICAgICAgICAg
ICAgIG1heEVycm9yID0gTWF0aC5tYXgobWF4RXJyb3IsIE1hdGguYWJzKGVycm9yKSk7CisKKyAg
ICAgICAgICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIGFueSBpbXB1bHNlcyB0aGF0IGFyZW4ndCB3
aGVyZSB3ZSBleHBlY3QgdGhlbQorICAgICAgICAgICAgICAgIC8vIHRvIGJlLgorICAgICAgICAg
ICAgICAgIHZhciBleHBlY3RlZE9mZnNldCA9IHRpbWVUb1NhbXBsZUZyYW1lKHRpbWVbaW1wdWxz
ZUNvdW50XSwgc2FtcGxlUmF0ZSk7CisgICAgICAgICAgICAgICAgaWYgKGsgIT0gZXhwZWN0ZWRP
ZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGltZUVycm9yc1t0aW1lRXJyb3JDb3VudF0g
PSB7IGFjdHVhbCA6IGssIGV4cGVjdGVkIDogZXhwZWN0ZWRPZmZzZXR9OworICAgICAgICAgICAg
ICAgICAgICArK3RpbWVFcnJvckNvdW50OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICArK2ltcHVsc2VDb3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmIChtb2RlbCA9PSBleHBlY3RlZE1vZGVsKSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJE
aXN0YW5jZSBtb2RlbCB2YWx1ZSBtYXRjaGVkIGV4cGVjdGVkIHZhbHVlLiIpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiRGlzdGFuY2UgbW9kZWwgdmFsdWUgZG9l
cyBub3QgbWF0Y2ggZXhwZWN0ZWQgdmFsdWUuIik7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFs
c2U7CisgICAgICAgIH0gICAgCisKKyAgICAgICAgaWYgKGltcHVsc2VDb3VudCA9PSBub2Rlc1Rv
Q3JlYXRlKSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJOdW1iZXIgb2YgaW1wdWxzZXMgZm91
bmQgbWF0Y2hlcyBudW1iZXIgb2YgcGFubmVyIG5vZGVzLiIpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgdGVzdEZhaWxlZCgiTnVtYmVyIG9mIGltcHVsc2VzIGlzIGluY29ycmVjdC4g
IEZvdW5kICIgKyBpbXB1bHNlQ291bnQgKyAiIGJ1dCBleHBlY3RlZCAiICsgbm9kZXNUb0NyZWF0
ZSArICIuIik7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobWF4RXJyb3IgPD0gbWF4QWxsb3dlZEVycm9yKSB7CisgICAgICAgICAgICB0ZXN0
UGFzc2VkKCJEaXN0YW5jZSBnYWlucyBhcmUgY29ycmVjdC4iKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkRpc3RhbmNlIGdhaW5zIGFyZSBpbmNvcnJlY3QuICBN
YXggcmVsIGVycm9yID0gIiArIG1heEVycm9yICsgIiAobWF4QWxsb3dlZEVycm9yID0gIiArIG1h
eEFsbG93ZWRFcnJvciArICIpIik7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBpbXB1bHNlcyBhcmUgd2hlcmUgd2Ug
ZXhwZWN0IHRoZW0gdG8gYmUuCisgICAgICAgIC8vIEhvd2V2ZXIsIGJ1ZyA3NjA3MyAoYWxzbyBz
ZWUgNzU5OTYpIHByZXZlbnRzIHRoaXMgdGVzdCBmcm9tCisgICAgICAgIC8vIHBhc3NpbmcuICBX
aGVuIHRob3NlIGJ1Z3MgYXJlIGZpeGVkLCB1bmNvbW1lbnQgdGhlCisgICAgICAgIC8vIGZvbGxv
d2luZyBpZiBpdCBlbmFibGUgdGhpcyB0ZXN0LgorICAgICAgICBpZiAodGltZUVycm9ycy5sZW5n
dGggPiAwKSB7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgICAgICB0ZXN0
RmFpbGVkKHRpbWVFcnJvcnMubGVuZ3RoICsgIiB0aW1pbmcgZXJyb3JzIGZvdW5kIik7CisgICAg
ICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRpbWVFcnJvcnMubGVuZ3RoOyArK2spIHsKKyAg
ICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJTYW1wbGUgIiArIHRpbWVFcnJvcnNba10uYWN0dWFs
ICsgIiBidXQgZXhwZWN0ZWQgIiArIHRpbWVFcnJvcnNba10uZXhwZWN0ZWQpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHRl
c3RQYXNzZWQoIkRpc3RhbmNlIHRlc3QgcGFzc2VkIGZvciBkaXN0YW5jZSBtb2RlbCAiICsgbW9k
ZWwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiRGlzdGFuY2Ug
dGVzdCBmYWlsZWQgZm9yIGRpc3RhbmNlIG1vZGVsICIgKyBtb2RlbCk7CisgICAgICAgIH0KKwor
ICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125038</attachid>
            <date>2012-02-01 16:11:28 -0800</date>
            <delta_ts>2012-02-02 12:46:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74273-20120201161127.patch</filename>
            <type>text/plain</type>
            <size>19046</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTU5ODEzZTYzNjhlYmJk
YjVmMmIyZWY5NjNjYzVjYzI1NmNlNmYxZi4uNDY5ODA0Y2YxMWVlNWEzMTEzNjZlNTcxOGE2MmFl
MTAyMzdiOThmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAxLTA5ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBDb25zdGFudCB2YWx1ZXMgdG8g
c2V0ICJkaXN0YW5jZU1vZGVsIiBhcmUgdW5kZWZpbmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDI3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RzOiB3ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVu
dGlhbC5odG1sCisgICAgICAgICAgICAgICB3ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLmh0bWwK
KyAgICAgICAgICAgICAgIHdlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci5odG1sCisKKyAgICAgICAg
KiB3ZWJhdWRpby9BdWRpb1Bhbm5lck5vZGUuaDogRGVmaW5lIGVudW0gZm9yIHRoZSBuZXcgY29u
c3RhbnRzCisgICAgICAgIGZvciB0aGUgZGlzdGFuY2UgbW9kZWxzLgorICAgICAgICAqIHdlYmF1
ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGw6IERlZmluZSBtYXRjaGluZyBjb25zdGFudHMgZm9yIHRo
ZQorICAgICAgICBkaXN0YW5jZSBtb2RlbHMuCisKIDIwMTItMDEtMzEgIFBhYmxvIEZsb3VyZXQg
IDxwYWJsb2ZAbW90b3JvbGEuY29tPgogCiAgICAgICAgIEZpeCBjb21waWxhdGlvbiBlcnJvcnMg
b24gYnVpbGQtd2Via2l0IC0tZGVidWcgLS1uby13b3JrZXJzIG9uIG1hYy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5oIGIvU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmgKaW5kZXggOThkMjc3NDNlNDExNzk0M2IyNjg3
OGU2N2VjZDcxZTM5NjRiZGM0YS4uNDQ1OTdlODgzMDMxNDYxNTFkNGZlZmE2NjY3NWQ3OTY5Njll
NThjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2Rl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmgKQEAgLTUz
LDYgKzUzLDE0IEBAIHB1YmxpYzoKICAgICAgICAgU09VTkRGSUVMRCA9IDIsCiAgICAgfTsKIAor
ICAgIC8vIFRoZXNlIG11c3QgYmUgZGVmaW5lZCBhcyBpbiB0aGUgLmlkbCBmaWxlIGFuZCBtdXN0
IG1hdGNoIHRob3NlCisgICAgLy8gaW4gdGhlIERpc3RhbmNlRWZmZWN0IGNsYXNzLgorICAgIGVu
dW0geworICAgICAgICBMSU5FQVJfRElTVEFOQ0UgPSAwLAorICAgICAgICBJTlZFUlNFX0RJU1RB
TkNFID0gMSwKKyAgICAgICAgRVhQT05FTlRJQUxfRElTVEFOQ0UgPSAyLAorICAgIH07CisgICAg
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QXVkaW9QYW5uZXJOb2RlPiBjcmVhdGUoQXVkaW9Db250
ZXh0KiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBBdWRpb1Bhbm5lck5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9QYW5uZXJOb2RlLmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvUGFubmVyTm9kZS5pZGwKaW5kZXggMmRiMDkzZDdiNTAz
YWExZTljYzQ1ZjY0YTcxN2EwYzE4NDRiYWRkNy4uNTk3YTNlYWRmYmFjOWU3NmJhOWRhNzQyMzNi
ZTE1YjlkNzQyNTRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Q
YW5uZXJOb2RlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb1Bhbm5lck5v
ZGUuaWRsCkBAIC0zMyw2ICszMywxMSBAQCBtb2R1bGUgYXVkaW8gewogICAgICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBIUlRGID0gMTsKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgU09V
TkRGSUVMRCA9IDI7CiAKKyAgICAgICAgLy8gRGlzdGFuY2UgbW9kZWwKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgTElORUFSX0RJU1RBTkNFID0gMDsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgSU5WRVJTRV9ESVNUQU5DRSA9IDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IEVYUE9ORU5USUFMX0RJU1RBTkNFID0gMjsKKwogICAgICAgICAvLyBEZWZhdWx0IG1vZGVs
IGZvciBzdGVyZW8gaXMgSFJURiAKICAgICAgICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgcGFu
bmluZ01vZGVsOyAvLyBGSVhNRTogdXNlIHVuc2lnbmVkIHNob3J0IHdoZW4gZ2x1ZSBnZW5lcmF0
aW9uIHN1cHBvcnRzIGl0CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA5ODVlNWUyODkzNDIwMTAwNjg0ODAwMTUwMjQ1YTA3
YjZlZTA0NGI3Li44MWNiOTUxMTgwNzc5NTQzM2Q2OGE2YTQyMWQxMzNkNTk0YWMzMjMzIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjcgQEAKKzIwMTItMDEtMDkgIFJheW1vbmQgVG95ICA8cnRveUBnb29nbGUu
Y29tPgorCisgICAgICAgIENvbnN0YW50IHZhbHVlcyB0byBzZXQgImRpc3RhbmNlTW9kZWwiIGFy
ZSB1bmRlZmluZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc0MjczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiB3ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVudGlhbC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHdlYmF1ZGlvL2Rpc3RhbmNlLWV4cG9uZW50aWFsLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHdlYmF1ZGlvL2Rpc3RhbmNlLWludmVyc2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiB3ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHdlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHdlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRp
by9yZXNvdXJjZXMvZGlzdGFuY2UtbW9kZWwtdGVzdGluZy5qczogQWRkZWQuCisgICAgICAgIChj
cmVhdGVJbXB1bHNlQnVmZmVyKToKKyAgICAgICAgKGxpbmVhckRpc3RhbmNlKToKKyAgICAgICAg
KGV4cG9uZW50aWFsRGlzdGFuY2UpOgorICAgICAgICAoaW52ZXJzZURpc3RhbmNlKToKKyAgICAg
ICAgKGNyZWF0ZUdyYXBoKToKKyAgICAgICAgKHN0YXJ0U291cmNlcyk6CisgICAgICAgIChlcXVh
bFBvd2VyR2Fpbik6CisgICAgICAgIChjaGVja0Rpc3RhbmNlUmVzdWx0LnJldHVybi5yZW5kZXJl
ZEJ1ZmZlcik6CisgICAgICAgIChjaGVja0Rpc3RhbmNlUmVzdWx0KToKKwogMjAxMi0wMS0zMSAg
WXV6byBGdWppc2hpbWEgIDx5dXpvQGdvb2dsZS5jb20+CiAKICAgICAgICAgW0Nocm9taXVtXSBV
bnJldmlld2VkIHRlc3QgZXhwZWN0YXRpb24gY2hhbmdlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vZGlzdGFuY2UtZXhwb25lbnRpYWwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vZGlzdGFuY2UtZXhwb25lbnRpYWwtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjQ5MDJlMzhhMjIyYzRlZTE4NDNhMTAyMzUyMzI4ZTQ0OGZlNjdjMDkKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1leHBvbmVudGlhbC1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwxMiBAQAorVGVzdCBleHBvbmVudGlhbCBkaXN0YW5jZSBtb2RlbCBvZiBB
dWRpb1Bhbm5lck5vZGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBEaXN0
YW5jZSBtb2RlbCB2YWx1ZSBtYXRjaGVkIGV4cGVjdGVkIHZhbHVlLgorUEFTUyBOdW1iZXIgb2Yg
aW1wdWxzZXMgZm91bmQgbWF0Y2hlcyBudW1iZXIgb2YgcGFubmVyIG5vZGVzLgorUEFTUyBEaXN0
YW5jZSBnYWlucyBhcmUgY29ycmVjdC4KK1BBU1MgRGlzdGFuY2UgdGVzdCBwYXNzZWQgZm9yIGRp
c3RhbmNlIG1vZGVsIDIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1leHBv
bmVudGlhbC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtZXhwb25lbnRpYWwu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iNmFmYzBlM2E0YTIyZGRiZmFlZjZlYzNmNzAwNjEzNjM4ZTA5MWMz
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtZXhwb25l
bnRpYWwuaHRtbApAQCAtMCwwICsxLDQwIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1cz
Qy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorICA8aGVhZD4KKyAg
ICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3Qtc3R5bGUuY3NzIi8+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5n
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZGlzdGFu
Y2UtbW9kZWwtdGVzdGluZy5qcyI+PC9zY3JpcHQ+CisgIDwvaGVhZD4KKworICA8Ym9keT4KKyAg
ICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+CisKKyAgICA8c2NyaXB0PgorICAgICAgZGVzY3JpcHRpb24oIlRlc3QgZXhwb25lbnRpYWwg
ZGlzdGFuY2UgbW9kZWwgb2YgQXVkaW9QYW5uZXJOb2RlLiIpOworCisgICAgICBmdW5jdGlvbiBy
dW5UZXN0KCkgeworICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAg
fQorCisgICAgICAgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworCisgICAgICAgICAg
Ly8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dC4KKyAgICAgICAgICBjb250ZXh0ID0gbmV3
IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1wbGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vjb25kcywg
c2FtcGxlUmF0ZSk7CisKKyAgICAgICAgICAvLyBUZW1wIHBhbm5lciBub2RlIHNvIHdlIGNhbiBn
ZXQgdGhlIEVYUE9ORU5USUFMX0RJU1RBTkNFIHZhbHVlLgorICAgICAgICAgIHZhciB0ZW1wUGFu
bmVyID0gY29udGV4dC5jcmVhdGVQYW5uZXIoKTsKKyAgICAgICAgICBjcmVhdGVUZXN0QW5kUnVu
KGNvbnRleHQsIHRlbXBQYW5uZXIuRVhQT05FTlRJQUxfRElTVEFOQ0UsIDIpOworICAgICAgfQor
CisgICAgICBydW5UZXN0KCk7CisgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCisg
ICAgPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWludmVyc2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1
YTk0OTI0NGZiMjlmODcyZmRlNTE5YzNmOGFkNzQzMWU0Mzc4OGUKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDEyIEBACitUZXN0IGludmVyc2UgZGlzdGFuY2UgbW9kZWwgb2YgQXVkaW9QYW5uZXJO
b2RlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgRGlzdGFuY2UgbW9kZWwg
dmFsdWUgbWF0Y2hlZCBleHBlY3RlZCB2YWx1ZS4KK1BBU1MgTnVtYmVyIG9mIGltcHVsc2VzIGZv
dW5kIG1hdGNoZXMgbnVtYmVyIG9mIHBhbm5lciBub2Rlcy4KK1BBU1MgRGlzdGFuY2UgZ2FpbnMg
YXJlIGNvcnJlY3QuCitQQVNTIERpc3RhbmNlIHRlc3QgcGFzc2VkIGZvciBkaXN0YW5jZSBtb2Rl
bCAxCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtaW52ZXJzZS5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtaW52ZXJzZS5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU1
NzcxNzQ2ZjAxMTI5N2EwNmMwNzg4Yjc4N2ZlZmJlOGZhOGZkYzkKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1pbnZlcnNlLmh0bWwKQEAgLTAsMCArMSw0
MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNp
dGlvbmFsLy9FTiI+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorICAgIDxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Rpc3RhbmNlLW1vZGVsLXRlc3RpbmcuanMiPjwv
c2NyaXB0PgorICA8L2hlYWQ+CisKKyAgPGJvZHk+CisgICAgPGRpdiBpZD0iZGVzY3JpcHRpb24i
PjwvZGl2PgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCisgICAgPHNjcmlwdD4KKyAg
ICAgIGRlc2NyaXB0aW9uKCJUZXN0IGludmVyc2UgZGlzdGFuY2UgbW9kZWwgb2YgQXVkaW9QYW5u
ZXJOb2RlLiIpOworCisgICAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgd2luZG93LmpzVGVz
dElzQXN5bmMgPSB0cnVlOworCisgICAgICAgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29u
dGV4dC4KKyAgICAgICAgICBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1w
bGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisKKyAgICAgICAgICAv
LyBUZW1wIHBhbm5lciBub2RlIHNvIHdlIGNhbiBnZXQgdGhlIElOVkVSU0VfRElTVEFOQ0UgdmFs
dWUuCisgICAgICAgICAgdmFyIHRlbXBQYW5uZXIgPSBjb250ZXh0LmNyZWF0ZVBhbm5lcigpOwor
ICAgICAgICAgIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgdGVtcFBhbm5lci5JTlZFUlNFX0RJ
U1RBTkNFLCAxKTsKKyAgICAgIH0KKworICAgICAgcnVuVGVzdCgpOworICAgICAgc3VjY2Vzc2Z1
bGx5UGFyc2VkID0gdHJ1ZTsKKworICAgIDwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKyAgPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtbGluZWFyLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVhci1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzlkMjhhOTE1MTY2OWQ5NjU3ZjZiNDVkOGY2ODJkNGIwN2ZkZjlm
NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Rpc3RhbmNlLWxpbmVh
ci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMiBAQAorVGVzdCBsaW5lYXIgZGlzdGFuY2UgbW9k
ZWwgb2YgQXVkaW9QYW5uZXJOb2RlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BB
U1MgRGlzdGFuY2UgbW9kZWwgdmFsdWUgbWF0Y2hlZCBleHBlY3RlZCB2YWx1ZS4KK1BBU1MgTnVt
YmVyIG9mIGltcHVsc2VzIGZvdW5kIG1hdGNoZXMgbnVtYmVyIG9mIHBhbm5lciBub2Rlcy4KK1BB
U1MgRGlzdGFuY2UgZ2FpbnMgYXJlIGNvcnJlY3QuCitQQVNTIERpc3RhbmNlIHRlc3QgcGFzc2Vk
IGZvciBkaXN0YW5jZSBtb2RlbCAwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFu
Y2UtbGluZWFyLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9kaXN0YW5jZS1saW5lYXIuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iMDI1NTYzNDg1Y2Y1NTZhZGU2MWQzZjQ3YjNmYmE5ODIzNjk4NGJlCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vZGlzdGFuY2UtbGluZWFyLmh0
bWwKQEAgLTAsMCArMSw0MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBI
VE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxl
LmNzcyIvPgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2Rpc3RhbmNlLW1vZGVs
LXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICA8L2hlYWQ+CisKKyAgPGJvZHk+CisgICAgPGRpdiBp
ZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCisg
ICAgPHNjcmlwdD4KKyAgICAgIGRlc2NyaXB0aW9uKCJUZXN0IGxpbmVhciBkaXN0YW5jZSBtb2Rl
bCBvZiBBdWRpb1Bhbm5lck5vZGUuIik7CisKKyAgICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7Cisg
ICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICB9CisKKyAgICAgICAg
ICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisKKyAgICAgICAgICAvLyBDcmVhdGUgb2Zm
bGluZSBhdWRpbyBjb250ZXh0LgorICAgICAgICAgIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9D
b250ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsK
KworICAgICAgICAgIC8vIENyZWF0ZSB0ZW1wIHBhbm5lciB0byBnZXQgTElORUFSX0RJU1RBTkNF
IHZhbHVlIGZvciB0ZXN0aW5nLgorICAgICAgICAgIHZhciBwYW5uZXJNb2RlbCA9IGNvbnRleHQu
Y3JlYXRlUGFubmVyKCk7CisgICAgICAgICAgY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCBwYW5u
ZXJNb2RlbC5MSU5FQVJfRElTVEFOQ0UsIDApOworICAgICAgfQorCisgICAgICBydW5UZXN0KCk7
CisgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCisgICAgPC9zY3JpcHQ+CisKKzxz
Y3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9y
ZXNvdXJjZXMvZGlzdGFuY2UtbW9kZWwtdGVzdGluZy5qcyBiL0xheW91dFRlc3RzL3dlYmF1ZGlv
L3Jlc291cmNlcy9kaXN0YW5jZS1tb2RlbC10ZXN0aW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyOWViNTVl
YmM3YjgyYmFkNTdjMjE4ZTk0MGM2ZjYwYjlmNzVhYzgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvZGlzdGFuY2UtbW9kZWwtdGVzdGluZy5qcwpAQCAt
MCwwICsxLDIxMiBAQAordmFyIHNhbXBsZVJhdGUgPSA0NDEwMC4wOworCisvLyBIb3cgbWFueSBw
YW5uZXIgbm9kZXMgdG8gY3JlYXRlIGZvciB0aGUgdGVzdC4KK3ZhciBub2Rlc1RvQ3JlYXRlID0g
MTAwOworCisvLyBUaW1lIHN0ZXAgd2hlbiBlYWNoIHBhbm5lciBub2RlIHN0YXJ0cy4KK3ZhciB0
aW1lU3RlcCA9IDAuMDAxOworCisvLyBNYWtlIHN1cmUgd2UgcmVuZGVyIGxvbmcgZW5vdWdoIHRv
IGdldCBhbGwgb2Ygb3VyIG5vZGVzLgordmFyIHJlbmRlckxlbmd0aFNlY29uZHMgPSB0aW1lU3Rl
cCAqIChub2Rlc1RvQ3JlYXRlICsgMSk7CisKKy8vIExlbmd0aCBvZiBhbiBpbXB1bHNlIHNpZ25h
bC4KK3ZhciBwdWxzZUxlbmd0aEZyYW1lcyA9IE1hdGgucm91bmQodGltZVN0ZXAgKiBzYW1wbGVS
YXRlKTsKKworLy8gR2xvYmFscyB0byBtYWtlIGRlYnVnZ2luZyBhIGxpdHRsZSBlYXNpZXIuCit2
YXIgY29udGV4dDsKK3ZhciBpbXB1bHNlOwordmFyIGJ1ZmZlclNvdXJjZTsKK3ZhciBwYW5uZXI7
Cit2YXIgcG9zaXRpb247Cit2YXIgdGltZTsKKyAgICAgIAorLy8gRm9yIHRoZSByZWNvcmQsIHRo
ZXNlIGRpc3RhbmNlIGZvcm11bGFzIHdlcmUgdGFrZW4gZnJvbSB0aGUgT3BlbkFMCisvLyBzcGVj
CisvLyAoaHR0cDovL2Nvbm5lY3QuY3JlYXRpdmVsYWJzLmNvbS9vcGVuYWwvRG9jdW1lbnRhdGlv
bi9PcGVuQUwlMjAxLjElMjBTcGVjaWZpY2F0aW9uLnBkZiksCisvLyBub3QgdGhlIGNvZGUuICBU
aGUgV2ViIEF1ZGlvIHNwZWMgZm9sbG93cyB0aGUgT3BlbkFMIGZvcm11bGFzLgorCitmdW5jdGlv
biBsaW5lYXJEaXN0YW5jZShwYW5uZXIsIHgsIHksIHopIHsKKyAgICB2YXIgZGlzdGFuY2UgPSBN
YXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KTsKKyAgICBkaXN0YW5jZSA9IE1hdGgubWlu
KGRpc3RhbmNlLCBwYW5uZXIubWF4RGlzdGFuY2UpOworICAgIHZhciByb2xsb2ZmID0gcGFubmVy
LnJvbGxvZmZGYWN0b3I7CisgICAgdmFyIGdhaW4gPSAoMSAtIHJvbGxvZmYgKiAoZGlzdGFuY2Ug
LSBwYW5uZXIucmVmRGlzdGFuY2UpIC8gKHBhbm5lci5tYXhEaXN0YW5jZSAtIHBhbm5lci5yZWZE
aXN0YW5jZSkpOworCisgICAgcmV0dXJuIGdhaW47Cit9CisKK2Z1bmN0aW9uIGludmVyc2VEaXN0
YW5jZShwYW5uZXIsIHgsIHksIHopIHsKKyAgICB2YXIgZGlzdGFuY2UgPSBNYXRoLnNxcnQoeCAq
IHggKyB5ICogeSArIHogKiB6KTsKKyAgICBkaXN0YW5jZSA9IE1hdGgubWluKGRpc3RhbmNlLCBw
YW5uZXIubWF4RGlzdGFuY2UpOworICAgIHZhciByb2xsb2ZmID0gcGFubmVyLnJvbGxvZmZGYWN0
b3I7CisgICAgdmFyIGdhaW4gPSBwYW5uZXIucmVmRGlzdGFuY2UgLyAocGFubmVyLnJlZkRpc3Rh
bmNlICsgcm9sbG9mZiAqIChkaXN0YW5jZSAtIHBhbm5lci5yZWZEaXN0YW5jZSkpOworCisgICAg
cmV0dXJuIGdhaW47Cit9CisKK2Z1bmN0aW9uIGV4cG9uZW50aWFsRGlzdGFuY2UocGFubmVyLCB4
LCB5LCB6KSB7CisgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkgKyB6
ICogeik7CisgICAgZGlzdGFuY2UgPSBNYXRoLm1pbihkaXN0YW5jZSwgcGFubmVyLm1heERpc3Rh
bmNlKTsKKyAgICB2YXIgcm9sbG9mZiA9IHBhbm5lci5yb2xsb2ZmRmFjdG9yOworICAgIHZhciBn
YWluID0gTWF0aC5wb3coZGlzdGFuY2UgLyBwYW5uZXIucmVmRGlzdGFuY2UsIC1yb2xsb2ZmKTsK
KworICAgIHJldHVybiBnYWluOworfQorCisvLyBUaGlzIGFycmF5IG11c3QgYmUgYXJyYW5nZWQg
aW4gdGhlIG51bWVyaWMgb3JkZXIgb2YgdGhlIGRpc3RhbmNlCisvLyBtb2RlbCB2YWx1ZXMuCit2
YXIgZGlzdGFuY2VNb2RlbEZ1bmN0aW9uID0gW2xpbmVhckRpc3RhbmNlLCBpbnZlcnNlRGlzdGFu
Y2UsIGV4cG9uZW50aWFsRGlzdGFuY2VdOworCitmdW5jdGlvbiBjcmVhdGVHcmFwaChjb250ZXh0
LCBkaXN0YW5jZU1vZGVsLCBub2RlQ291bnQpIHsKKyAgICBidWZmZXJTb3VyY2UgPSBuZXcgQXJy
YXkobm9kZUNvdW50KTsKKyAgICBwYW5uZXIgPSBuZXcgQXJyYXkobm9kZUNvdW50KTsKKyAgICBw
b3NpdGlvbiA9IG5ldyBBcnJheShub2RlQ291bnQpOworICAgIHRpbWUgPSBuZXcgQXJyYXkobm9k
ZXNUb0NyZWF0ZSk7CisKKyAgICBpbXB1bHNlID0gY3JlYXRlSW1wdWxzZUJ1ZmZlcihjb250ZXh0
LCBwdWxzZUxlbmd0aEZyYW1lcyk7CisKKyAgICAvLyBDcmVhdGUgYWxsIHRoZSBzb3VyY2VzIGFu
ZCBwYW5uZXJzLgorICAgIC8vCisgICAgLy8gV2UgTVVTVCB1c2UgdGhlIEVRVUFMUE9XRVIgcGFu
bmluZyBtb2RlbCBzbyB0aGF0IHdlIGNhbiBlYXNpbHkKKyAgICAvLyBmaWd1cmUgb3V0IHRoZSBn
YWluIGludHJvZHVjZWQgYnkgdGhlIHBhbm5lci4KKyAgICAvLworICAgIC8vIFdlIHdhbnQgdG8g
c3RheSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBwYW5uaW5nIHJhbmdlLCB3aGljaCBtZWFucworICAg
IC8vIHdlIHdhbnQgdG8gc3RheSBvbiB0aGUgei1heGlzLiAgSWYgd2UgZG9uJ3QsIHRoZW4gdGhl
IGVmZmVjdCBvZgorICAgIC8vIHBhbm5pbmcgbW9kZWwgd2lsbCBiZSBtdWNoIG1vcmUgY29tcGxp
Y2F0ZWQuICBXZSdyZSBub3QgdGVzdGluZworICAgIC8vIHRoZSBwYW5uZXIsIGJ1dCB0aGUgZGlz
dGFuY2UgbW9kZWwsIHNvIHdlIHdhbnQgdGhlIHBhbm5lciBlZmZlY3QKKyAgICAvLyB0byBiZSBz
aW1wbGUuCisgICAgLy8KKyAgICAvLyBUaGUgcGFubmVycyBhcmUgcGxhY2VkIGF0IGEgdW5pZm9y
bSBpbnRlcnZhbHMgYmV0d2VlbiB0aGUgcGFubmVyCisgICAgLy8gcmVmZXJlbmNlIGRpc3RhbmNl
IGFuZCB0aGUgcGFubmVyIG1heCBkaXN0YW5jZS4gIFRoZSBzb3VyY2UgaXMKKyAgICAvLyBhbHNv
IHN0YXJ0ZWQgYXQgcmVndWxhciBpbnRlcnZhbHMuCisgICAgZm9yICh2YXIgayA9IDA7IGsgPCBu
b2RlQ291bnQ7ICsraykgeworICAgICAgICBidWZmZXJTb3VyY2Vba10gPSBjb250ZXh0LmNyZWF0
ZUJ1ZmZlclNvdXJjZSgpOworICAgICAgICBidWZmZXJTb3VyY2Vba10uYnVmZmVyID0gaW1wdWxz
ZTsKKworICAgICAgICBwYW5uZXJba10gPSBjb250ZXh0LmNyZWF0ZVBhbm5lcigpOworICAgICAg
ICBwYW5uZXJba10ucGFubmluZ01vZGVsID0gcGFubmVyLkVRVUFMUE9XRVI7CisgICAgICAgIHBh
bm5lcltrXS5kaXN0YW5jZU1vZGVsID0gZGlzdGFuY2VNb2RlbDsKKworICAgICAgICB2YXIgZGlz
dGFuY2VTdGVwID0gKHBhbm5lcltrXS5tYXhEaXN0YW5jZSAtIHBhbm5lcltrXS5yZWZEaXN0YW5j
ZSkgLyBub2RlQ291bnQ7CisgICAgICAgIHBvc2l0aW9uW2tdID0gZGlzdGFuY2VTdGVwICogayAr
IHBhbm5lcltrXS5yZWZEaXN0YW5jZTsKKyAgICAgICAgcGFubmVyW2tdLnNldFBvc2l0aW9uKDAs
IDAsIHBvc2l0aW9uW2tdKTsKKworICAgICAgICBidWZmZXJTb3VyY2Vba10uY29ubmVjdChwYW5u
ZXJba10pOworICAgICAgICBwYW5uZXJba10uY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKTsK
KworICAgICAgICB0aW1lW2tdID0gayAqIHRpbWVTdGVwOworICAgICAgICBidWZmZXJTb3VyY2Vb
a10ubm90ZU9uKHRpbWVba10pOworICAgIH0KK30KKworLy8gZGlzdGFuY2VNb2RlbCBzaG91bGQg
YmUgdGhlIGRpc3RhbmNlIG1vZGVsIGNvbnN0YW50IGxpa2UKKy8vIExJTkVBUl9ESVNUQU5DRSwg
SU5WRVJTRV9ESVNUQU5DRSwgYW5kIEVYUE9ORU5USUFMX0RJU1RBTkNFLiAgVGhlCisvLyBleHBl
Y3RlZE1vZGVsIGlzIHRoZSBleHBlY3RlZCBhY3R1YWwgbnVtZXJpYyB2YWx1ZSBvZiB0aGUgY29u
c3RhbnQuCitmdW5jdGlvbiBjcmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsIGRpc3RhbmNlTW9kZWws
IGV4cGVjdGVkTW9kZWwpIHsKKyAgICAvLyBUbyB0ZXN0IHRoZSBkaXN0YW5jZSBtb2RlbHMsIHdl
IGNyZWF0ZSBhIG51bWJlciBvZiBwYW5uZXJzIGF0CisgICAgLy8gdW5pZm9ybWx5IHNwYWNlZCBp
bnRlcnZhbHMgb24gdGhlIHotYXhpcy4gIEVhY2ggb2YgdGhlc2UgYXJlCisgICAgLy8gc3RhcnRl
ZCBhdCBlcXVhbGx5IHNwYWNlZCB0aW1lIGludGVydmFscy4gIEFmdGVyIHJlbmRlcmluZyB0aGUK
KyAgICAvLyBzaWduYWxzLCB3ZSBleGFtaW5lIHdoZXJlIGVhY2ggaW1wdWxzZSBpcyBsb2NhdGVk
IGFuZCB0aGUKKyAgICAvLyBhdHRlbnVhdGlvbiBvZiB0aGUgaW1wdWxzZS4gIFRoZSBhdHRlbnVh
dGlvbiBpcyBjb21wYXJlZAorICAgIC8vIGFnYWluc3Qgb3VyIGV4cGVjdGVkIGF0dGVudWF0aW9u
LgorCisgICAgY3JlYXRlR3JhcGgoY29udGV4dCwgZGlzdGFuY2VNb2RlbCwgbm9kZXNUb0NyZWF0
ZSk7CisKKyAgICBjb250ZXh0Lm9uY29tcGxldGUgPSBjaGVja0Rpc3RhbmNlUmVzdWx0KGRpc3Rh
bmNlTW9kZWwsIGV4cGVjdGVkTW9kZWwpOworICAgIGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTsK
K30KKworLy8gVGhlIGdhaW4gY2F1c2VkIGJ5IHRoZSBFUVVBTFBPV0VSIHBhbm5pbmcgbW9kZWws
IGlmIHdlIHN0YXkgb24gdGhlCisvLyB6IGF4aXMsIHdpdGggdGhlIGRlZmF1bHQgb3JpZW50YXRp
b25zLgorZnVuY3Rpb24gZXF1YWxQb3dlckdhaW4oKSB7CisgICAgcmV0dXJuIE1hdGguU1FSVDFf
MjsKK30KKworZnVuY3Rpb24gY2hlY2tEaXN0YW5jZVJlc3VsdChtb2RlbCwgZXhwZWN0ZWRNb2Rl
bCkgeworICAgIHJldHVybiBmdW5jdGlvbihldmVudCkgeworICAgICAgICByZW5kZXJlZEJ1ZmZl
ciA9IGV2ZW50LnJlbmRlcmVkQnVmZmVyOworICAgICAgICByZW5kZXJlZERhdGEgPSByZW5kZXJl
ZEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKKworICAgICAgICAvLyBUaGUgbWF4IGFsbG93ZWQg
ZXJyb3IgYmV0d2VlbiB0aGUgYWN0dWFsIGdhaW4gYW5kIHRoZSBleHBlY3RlZAorICAgICAgICAv
LyB2YWx1ZS4gIFRoaXMgaXMgZGV0ZXJtaW5lZCBleHBlcmltZW50YWxseS4gIFNldCB0byAwIHRv
IHNlZSB3aGF0CisgICAgICAgIC8vIHRoZSBhY3R1YWwgZXJyb3JzIGFyZS4KKyAgICAgICAgdmFy
IG1heEFsbG93ZWRFcnJvciA9IDIuM2UtNjsKKyAgIAorICAgICAgICB2YXIgc3VjY2VzcyA9IHRy
dWU7CisKKyAgICAgICAgLy8gTnVtYmVyIG9mIGltcHVsc2VzIHdlIGZvdW5kIGluIHRoZSByZW5k
ZXJlZCByZXN1bHQuCisgICAgICAgIHZhciBpbXB1bHNlQ291bnQgPSAwOworCisgICAgICAgIC8v
IE1heGltdW0gcmVsYXRpdmUgZXJyb3IgaW4gdGhlIGdhaW4gb2YgdGhlIGltcHVsc2VzLgorICAg
ICAgICB2YXIgbWF4RXJyb3IgPSAwOworCisgICAgICAgIC8vIEFycmF5IG9mIGxvY2F0aW9ucyBv
ZiB0aGUgaW1wdWxzZXMgdGhhdCB3ZXJlIG5vdCBhdCB0aGUKKyAgICAgICAgLy8gZXhwZWN0ZWQg
bG9jYXRpb24uICAoQ29udGFpbnMgdGhlIGFjdHVhbCBhbmQgZXhwZWN0ZWQgZnJhbWUKKyAgICAg
ICAgLy8gb2YgdGhlIGltcHVsc2UuKQorICAgICAgICB2YXIgaW1wdWxzZVBvc2l0aW9uRXJyb3Jz
ID0gbmV3IEFycmF5KCk7CisKKyAgICAgICAgLy8gU3RlcCB0aHJvdWdoIHRoZSByZW5kZXJlZCBk
YXRhIHRvIGZpbmQgYWxsIHRoZSBub24temVybyBwb2ludHMKKyAgICAgICAgLy8gc28gd2UgY2Fu
IGZpbmQgd2hlcmUgb3VyIGRpc3RhbmNlLWF0dGVudWF0ZWQgaW1wdWxzZXMgYXJlLgorICAgICAg
ICAvLyBUaGVzZSBhcmUgdGVzdGVkIGFnYWluc3QgdGhlIGV4cGVjdGVkIGF0dGVudWF0aW9ucyBh
dCB0aGF0CisgICAgICAgIC8vIGRpc3RhbmNlLgorICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8
IHJlbmRlcmVkRGF0YS5sZW5ndGg7ICsraykgeworICAgICAgICAgICAgaWYgKHJlbmRlcmVkRGF0
YVtrXSAhPSAwKSB7CisgICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlRnVuY3Rpb24gPSBkaXN0
YW5jZU1vZGVsRnVuY3Rpb25bcGFubmVyW2ltcHVsc2VDb3VudF0uZGlzdGFuY2VNb2RlbF07Cisg
ICAgICAgICAgICAgICAgdmFyIGV4cGVjdGVkID0gZGlzdGFuY2VGdW5jdGlvbihwYW5uZXJbaW1w
dWxzZUNvdW50XSwgMCwgMCwgcG9zaXRpb25baW1wdWxzZUNvdW50XSk7CisKKyAgICAgICAgICAg
ICAgICAvLyBBZGp1c3QgZm9yIHRoZSBjZW50ZXItcGFubmluZyBvZiB0aGUgRVFVQUxQT1dFUiBw
YW5uaW5nCisgICAgICAgICAgICAgICAgLy8gbW9kZWwgdGhhdCB3ZSdyZSB1c2luZy4KKyAgICAg
ICAgICAgICAgICBleHBlY3RlZCAqPSBlcXVhbFBvd2VyR2FpbigpOworCisgICAgICAgICAgICAg
ICAgdmFyIGVycm9yID0gTWF0aC5hYnMocmVuZGVyZWREYXRhW2tdIC0gZXhwZWN0ZWQpIC8gTWF0
aC5hYnMoZXhwZWN0ZWQpOworCisgICAgICAgICAgICAgICAgbWF4RXJyb3IgPSBNYXRoLm1heCht
YXhFcnJvciwgTWF0aC5hYnMoZXJyb3IpKTsKKworICAgICAgICAgICAgICAgIC8vIEtlZXAgdHJh
Y2sgb2YgYW55IGltcHVsc2VzIHRoYXQgYXJlbid0IHdoZXJlIHdlIGV4cGVjdCB0aGVtCisgICAg
ICAgICAgICAgICAgLy8gdG8gYmUuCisgICAgICAgICAgICAgICAgdmFyIGV4cGVjdGVkT2Zmc2V0
ID0gdGltZVRvU2FtcGxlRnJhbWUodGltZVtpbXB1bHNlQ291bnRdLCBzYW1wbGVSYXRlKTsKKyAg
ICAgICAgICAgICAgICBpZiAoayAhPSBleHBlY3RlZE9mZnNldCkgeworICAgICAgICAgICAgICAg
ICAgICBpbXB1bHNlUG9zaXRpb25FcnJvcnMucHVzaCh7IGFjdHVhbCA6IGssIGV4cGVjdGVkIDog
ZXhwZWN0ZWRPZmZzZXR9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKytp
bXB1bHNlQ291bnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAobW9k
ZWwgPT0gZXhwZWN0ZWRNb2RlbCkgeworICAgICAgICAgICAgdGVzdFBhc3NlZCgiRGlzdGFuY2Ug
bW9kZWwgdmFsdWUgbWF0Y2hlZCBleHBlY3RlZCB2YWx1ZS4iKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHRlc3RGYWlsZWQoIkRpc3RhbmNlIG1vZGVsIHZhbHVlIGRvZXMgbm90IG1h
dGNoIGV4cGVjdGVkIHZhbHVlLiIpOworICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAg
ICAgICB9ICAgIAorCisgICAgICAgIGlmIChpbXB1bHNlQ291bnQgPT0gbm9kZXNUb0NyZWF0ZSkg
eworICAgICAgICAgICAgdGVzdFBhc3NlZCgiTnVtYmVyIG9mIGltcHVsc2VzIGZvdW5kIG1hdGNo
ZXMgbnVtYmVyIG9mIHBhbm5lciBub2Rlcy4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHRlc3RGYWlsZWQoIk51bWJlciBvZiBpbXB1bHNlcyBpcyBpbmNvcnJlY3QuICBGb3VuZCAi
ICsgaW1wdWxzZUNvdW50ICsgIiBidXQgZXhwZWN0ZWQgIiArIG5vZGVzVG9DcmVhdGUgKyAiLiIp
OworICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KG1heEVycm9yIDw9IG1heEFsbG93ZWRFcnJvcikgeworICAgICAgICAgICAgdGVzdFBhc3NlZCgi
RGlzdGFuY2UgZ2FpbnMgYXJlIGNvcnJlY3QuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICB0ZXN0RmFpbGVkKCJEaXN0YW5jZSBnYWlucyBhcmUgaW5jb3JyZWN0LiAgTWF4IHJlbCBl
cnJvciA9ICIgKyBtYXhFcnJvciArICIgKG1heEFsbG93ZWRFcnJvciA9ICIgKyBtYXhBbGxvd2Vk
RXJyb3IgKyAiKSIpOworICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICB9CisK
KyAgICAgICAgLy8gRGlzcGxheSBhbnkgdGltaW5nIGVycm9ycyB0aGF0IHdlIGZvdW5kLgorICAg
ICAgICBpZiAoaW1wdWxzZVBvc2l0aW9uRXJyb3JzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAg
IHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoaW1wdWxzZVBvc2l0aW9u
RXJyb3JzLmxlbmd0aCArICIgdGltaW5nIGVycm9ycyBmb3VuZCIpOworICAgICAgICAgICAgZm9y
ICh2YXIgayA9IDA7IGsgPCBpbXB1bHNlUG9zaXRpb25FcnJvcnMubGVuZ3RoOyArK2spIHsKKyAg
ICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJTYW1wbGUgYXQgZnJhbWUgIiArIGltcHVsc2VQb3Np
dGlvbkVycm9yc1trXS5hY3R1YWwgKyAiIGJ1dCBleHBlY3RlZCAiICsgaW1wdWxzZVBvc2l0aW9u
RXJyb3JzW2tdLmV4cGVjdGVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJEaXN0YW5jZSB0ZXN0IHBh
c3NlZCBmb3IgZGlzdGFuY2UgbW9kZWwgIiArIG1vZGVsKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHRlc3RGYWlsZWQoIkRpc3RhbmNlIHRlc3QgZmFpbGVkIGZvciBkaXN0YW5jZSBt
b2RlbCAiICsgbW9kZWwpOworICAgICAgICB9CisKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cisg
ICAgfQorfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>