<?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>149691</bug_id>
          
          <creation_ts>2015-09-30 18:11:08 -0700</creation_ts>
          <short_desc>Add shared code for a new a graphics benchmark</short_desc>
          <delta_ts>2015-10-02 20:10:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Animations</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>149683</dependson>
          <blocked>149053</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1129780</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-09-30 18:11:08 -0700</bug_when>
    <thetext>We need a set of shared objects to be used by the tests and the test runner. This patch is separated from the patch attached to https://bugs.webkit.org/show_bug.cgi?id=149053.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129783</commentid>
    <comment_count>1</comment_count>
      <attachid>262219</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-09-30 18:13:06 -0700</bug_when>
    <thetext>Created attachment 262219
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129786</commentid>
    <comment_count>2</comment_count>
      <attachid>262219</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-09-30 18:19:00 -0700</bug_when>
    <thetext>Comment on attachment 262219
Patch

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

&gt; PerformanceTests/Animometer/resources/statistics.js:1
&gt; +var Statistics =

This is a copy of Speedometer&apos;s statistics.js, right?
Please use &quot;svn cp&quot; instead of copy-paste.

&gt; PerformanceTests/Animometer/resources/statistics.js:95
&gt; +function Experiment()

Please put this in a separate file so that syncing statistics.js won&apos;t require copying this code into it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130101</commentid>
    <comment_count>3</comment_count>
      <attachid>262302</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-10-01 17:15:27 -0700</bug_when>
    <thetext>Created attachment 262302
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130107</commentid>
    <comment_count>4</comment_count>
      <attachid>262219</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-10-01 17:28:00 -0700</bug_when>
    <thetext>Comment on attachment 262219
Patch

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

&gt;&gt; PerformanceTests/Animometer/resources/statistics.js:1
&gt;&gt; +var Statistics =
&gt; 
&gt; This is a copy of Speedometer&apos;s statistics.js, right?
&gt; Please use &quot;svn cp&quot; instead of copy-paste.

Done.

&gt;&gt; PerformanceTests/Animometer/resources/statistics.js:95
&gt;&gt; +function Experiment()
&gt; 
&gt; Please put this in a separate file so that syncing statistics.js won&apos;t require copying this code into it.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130157</commentid>
    <comment_count>5</comment_count>
      <attachid>262302</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-10-01 21:55:38 -0700</bug_when>
    <thetext>Comment on attachment 262302
Patch

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

&gt; PerformanceTests/Animometer/resources/statistics.js:84
&gt; -        var degreesOfFreedom = numberOfSamples - 1;
&gt; -        if (degreesOfFreedom &gt; cdfForProbability.length)
&gt; -            throw &apos;We only support up to &apos; + deltas.length + &apos; degrees of freedom&apos;;
&gt; +        var degreesOfFreedom = Math.min(numberOfSamples - 1, cdfForProbability.length);

We can&apos;t just assume an arbitrary degrees of freedom. 
When the number of samples (and therefore the degrees of freedom) is sufficiently large,
we should be using normal distributions instead of student&apos;s t-distribution.

The table you&apos;re copying here contains values up until 100 degrees of freedom.
I&apos;d say that&apos;s sufficiently large that we can start using normal approximation.
We should use a numerical approximation of normal distributions as outlined in:
https://en.wikipedia.org/wiki/Normal_distribution#Numerical_approximations_for_the_normal_CDF
for example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130236</commentid>
    <comment_count>6</comment_count>
      <attachid>262302</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-10-02 09:09:10 -0700</bug_when>
    <thetext>Comment on attachment 262302
Patch

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

&gt;&gt; PerformanceTests/Animometer/resources/statistics.js:84
&gt;&gt; +        var degreesOfFreedom = Math.min(numberOfSamples - 1, cdfForProbability.length);
&gt; 
&gt; We can&apos;t just assume an arbitrary degrees of freedom. 
&gt; When the number of samples (and therefore the degrees of freedom) is sufficiently large,
&gt; we should be using normal distributions instead of student&apos;s t-distribution.
&gt; 
&gt; The table you&apos;re copying here contains values up until 100 degrees of freedom.
&gt; I&apos;d say that&apos;s sufficiently large that we can start using normal approximation.
&gt; We should use a numerical approximation of normal distributions as outlined in:
&gt; https://en.wikipedia.org/wiki/Normal_distribution#Numerical_approximations_for_the_normal_CDF
&gt; for example.

Why not?

The t distribution tables usually begins by listing the individual values for small degrees of freedom. Once the degree of freedom becomes large (&gt;30), the tables list rows; each row covers a range of 10 degree of freedoms. And then they list rows for a range of 20 degrees of freedom and then they stop. The last row is used for all the degree of freedoms which is larger than the last value before it: https://en.wikipedia.org/wiki/Student%27s_t-distribution#Table_of_selected_values.  So my choice to to use the cdfForProbability[cdfForProbability.length - 1] is not arbitrary it is a valid approximation. And this is obvious from the table I copied. The last values for every degree of freedom are equal for 2 or 3 significant figures after the decimal point. That means if we had tables for infinite degree of freedoms, the difference between this approximation and the actual value will be most likely in the fourth significant digit after the decimal point.

You are suggesting using the normal approximation but using the last row of the t distribution table is not bad approximation. Besides I am using toFixed(2) for the calculated value anyway because there is no much space and it is also distracting to show more than two digits after the decimal point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130299</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-10-02 14:18:59 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 262302 [details]
&gt; Patch
&gt;
&gt; The t distribution tables usually begins by listing the individual values
&gt; for small degrees of freedom. Once the degree of freedom becomes large
&gt; (&gt;30), the tables list rows; each row covers a range of 10 degree of
&gt; freedoms. And then they list rows for a range of 20 degrees of freedom and
&gt; then they stop. The last row is used for all the degree of freedoms which is
&gt; larger than the last value before it:
&gt; https://en.wikipedia.org/wiki/Student%27s_t-
&gt; distribution#Table_of_selected_values.  So my choice to to use the
&gt; cdfForProbability[cdfForProbability.length - 1] is not arbitrary it is a
&gt; valid approximation.

It isn&apos;t because I added that damn table (by computing them on R), and the last value is not appropriate as the approximation for an arbitrary degrees of freedom.  It&apos;s for 100 degrees of freedom, and there is 2-3% margins of error compared to when n -&gt; infinity.

It would mean that your benchmark can never detect any regression of a magnitude less than say, 5%, reliably because your confidence interval calculation itself has an inherent error of 2-3%.

&gt; You are suggesting using the normal approximation but using the last row of
&gt; the t distribution table is not bad approximation. Besides I am using
&gt; toFixed(2) for the calculated value anyway because there is no much space
&gt; and it is also distracting to show more than two digits after the decimal
&gt; point.

Is your test result guaranteed to be less than 9?  If not, toFixed(2) doesn&apos;t guarantee the number of significant figures at all since the function only forces two decimal points, not two significant figures. There&apos;s a big difference between the two.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130392</commentid>
    <comment_count>8</comment_count>
      <attachid>262372</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-10-02 18:09:07 -0700</bug_when>
    <thetext>Created attachment 262372
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130393</commentid>
    <comment_count>9</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-10-02 18:10:33 -0700</bug_when>
    <thetext>I talked to Jon Lee and Simon Fraser and we agreed on removing the 95% confidence interval delta measurement altogether. In speedometer it is used to measure the confidence interval of the test score mean. That makes since because the sampled data are totally independent. But in our case, we are sampling the test complexities in the same iteration. Since the sampled test complexities are dependent we can&apos;t say this measurement is useful in this case.

We may use the confidence interval measurement in the future if we decide to run the same test multiple times as speedometer. But for now we do not need it for the iteration sampled data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130394</commentid>
    <comment_count>10</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-10-02 18:11:47 -0700</bug_when>
    <thetext>statistics.js was removed because the only function I needed from it was sampleStandardDeviation().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130395</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-10-02 18:14:31 -0700</bug_when>
    <thetext>Makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130397</commentid>
    <comment_count>12</comment_count>
      <attachid>262372</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2015-10-02 18:21:23 -0700</bug_when>
    <thetext>Comment on attachment 262372
Patch

r= based on previous reviews and rniwa&apos;s comments being addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130399</commentid>
    <comment_count>13</comment_count>
      <attachid>262372</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-10-02 18:23:13 -0700</bug_when>
    <thetext>Comment on attachment 262372
Patch

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

r=me provided the following comments are addressed before the patch is landed.

&gt; PerformanceTests/Animometer/resources/extensions.js:163
&gt; +                th.innerHTML += &quot;&lt;br&gt;[&quot; + message + &quot;]&quot;;

For the sake of XSS prevention, I&apos;d suggest manually constructing text nodes instead as in:
th.appendChild(document.createElement(&apos;br&apos;));
th.appendChild(document.createTextNode(&apos;[&apos; + message +]&apos;));

&gt; PerformanceTests/Animometer/resources/sampler.js:10
&gt; +    sampleStandardDeviation: function(numberOfSamples, sum, squareSum)

It&apos;s a bit odd to refer to the version with Bessel&apos;s correction as sampleStandardDeviation
since the unqualified &quot;sample standard deviation&quot; usually refers to biased/uncorrected standard deviation.

But I suppose anyone reading the code will see the Bessel&apos;s correction so it&apos;s not a big deal
but I&apos;d prefer calling this correctedSampleStandardDeviation or unbiasedSampleStandardDeviation instead.

By the way, you removed the comment above this function:
http://trac.webkit.org/browser/trunk/PerformanceTests/resources/statistics.js#L44

Please add it back as it&apos;s an important documentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130401</commentid>
    <comment_count>14</comment_count>
      <attachid>262372</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-10-02 18:26:15 -0700</bug_when>
    <thetext>Comment on attachment 262372
Patch

cq- because my comments have not been addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130408</commentid>
    <comment_count>15</comment_count>
      <attachid>262376</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-10-02 19:08:58 -0700</bug_when>
    <thetext>Created attachment 262376
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130409</commentid>
    <comment_count>16</comment_count>
      <attachid>262372</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-10-02 19:09:55 -0700</bug_when>
    <thetext>Comment on attachment 262372
Patch

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

&gt;&gt; PerformanceTests/Animometer/resources/extensions.js:163
&gt;&gt; +                th.innerHTML += &quot;&lt;br&gt;[&quot; + message + &quot;]&quot;;
&gt; 
&gt; For the sake of XSS prevention, I&apos;d suggest manually constructing text nodes instead as in:
&gt; th.appendChild(document.createElement(&apos;br&apos;));
&gt; th.appendChild(document.createTextNode(&apos;[&apos; + message +]&apos;));

Done.

&gt;&gt; PerformanceTests/Animometer/resources/sampler.js:10
&gt;&gt; +    sampleStandardDeviation: function(numberOfSamples, sum, squareSum)
&gt; 
&gt; It&apos;s a bit odd to refer to the version with Bessel&apos;s correction as sampleStandardDeviation
&gt; since the unqualified &quot;sample standard deviation&quot; usually refers to biased/uncorrected standard deviation.
&gt; 
&gt; But I suppose anyone reading the code will see the Bessel&apos;s correction so it&apos;s not a big deal
&gt; but I&apos;d prefer calling this correctedSampleStandardDeviation or unbiasedSampleStandardDeviation instead.
&gt; 
&gt; By the way, you removed the comment above this function:
&gt; http://trac.webkit.org/browser/trunk/PerformanceTests/resources/statistics.js#L44
&gt; 
&gt; Please add it back as it&apos;s an important documentation.

Function was renamed correctedSampleStandardDeviation() and the comment was added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130410</commentid>
    <comment_count>17</comment_count>
      <attachid>262372</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-10-02 19:10:48 -0700</bug_when>
    <thetext>Comment on attachment 262372
Patch

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

&gt;&gt;&gt; PerformanceTests/Animometer/resources/sampler.js:10
&gt;&gt;&gt; +    sampleStandardDeviation: function(numberOfSamples, sum, squareSum)
&gt;&gt; 
&gt;&gt; It&apos;s a bit odd to refer to the version with Bessel&apos;s correction as sampleStandardDeviation
&gt;&gt; since the unqualified &quot;sample standard deviation&quot; usually refers to biased/uncorrected standard deviation.
&gt;&gt; 
&gt;&gt; But I suppose anyone reading the code will see the Bessel&apos;s correction so it&apos;s not a big deal
&gt;&gt; but I&apos;d prefer calling this correctedSampleStandardDeviation or unbiasedSampleStandardDeviation instead.
&gt;&gt; 
&gt;&gt; By the way, you removed the comment above this function:
&gt;&gt; http://trac.webkit.org/browser/trunk/PerformanceTests/resources/statistics.js#L44
&gt;&gt; 
&gt;&gt; Please add it back as it&apos;s an important documentation.
&gt; 
&gt; Function was renamed correctedSampleStandardDeviation() and the comment was added.

Correction: Function was renamed unbiasedSampleStandardDeviation()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130411</commentid>
    <comment_count>18</comment_count>
      <attachid>262376</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-02 19:13:15 -0700</bug_when>
    <thetext>Comment on attachment 262376
Patch

Rejecting attachment 262376 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 262376, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in PerformanceTests/ChangeLog contains OOPS!.

Full output: http://webkit-queues.webkit.org/results/238447</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130412</commentid>
    <comment_count>19</comment_count>
      <attachid>262377</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-10-02 19:15:51 -0700</bug_when>
    <thetext>Created attachment 262377
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130420</commentid>
    <comment_count>20</comment_count>
      <attachid>262377</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-02 20:10:41 -0700</bug_when>
    <thetext>Comment on attachment 262377
Patch

Clearing flags on attachment: 262377

Committed r190541: &lt;http://trac.webkit.org/changeset/190541&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130421</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-02 20:10:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262219</attachid>
            <date>2015-09-30 18:13:06 -0700</date>
            <delta_ts>2015-10-01 17:15:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149691-20150930181241.patch</filename>
            <type>text/plain</type>
            <size>28250</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTAzMzEpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDE1LTA5LTMwICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRk
IGphdmFzY3JpcHQgc2hhcmVkIG9iamVjdHMgZm9yIGEgbmV3IGEgZ3JhcGhpY3MgYmVuY2htYXJr
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk2OTEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAg
IFRoZSBvYmplY3RzIGluIHRoaXMgcGF0Y2ggd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgbmV3IGdy
YXBoaWNzIGJlbmNobWFyay4KKyAgICAgICAgVGhleSB3aWxsIGJlIHVzZWQgYnkgdGhlIHRlc3Rz
IGFuZCB0aGUgdGVzdC1ydW5uZXIuCisKKyAgICAgICAgKiBBbmltb21ldGVyOiBBZGRlZC4KKyAg
ICAgICAgKiBBbmltb21ldGVyL3Jlc291cmNlczogQWRkZWQuCisgICAgICAgIAorICAgICAgICAq
IEFuaW1vbWV0ZXIvcmVzb3VyY2VzL2FsZ29yaXRobS5qczogQWRkZWQuCisgICAgICAgIChBcnJh
eS5wcm90b3R5cGUuc3dhcCk6CisgICAgICAgIChIZWFwKTogQmluYXJ5IE1pbi9NYXggSGVhcCBv
YmplY3QuCisgICAgICAgIChIZWFwLnByb3RvdHlwZS5fcGFyZW50SW5kZXgpOiBHaXZlbiB0aGUg
Y2hpbGQgbm9kZSBpbmRleCwgaXQgcmV0dXJucyB0aGUgcGFyZW50IGluZGV4LgorICAgICAgICAo
SGVhcC5wcm90b3R5cGUuX2xlZnRJbmRleCk6IEdpdmVuIHRoZSBwYXJlbnQgbm9kZSBpbmRleCwg
aXQgcmV0dXJucyB0aGUgbGVmdCBub2RlIGluZGV4LgorICAgICAgICAoSGVhcC5wcm90b3R5cGUu
X3JpZ2h0SW5kZXgpOiBHaXZlbiB0aGUgcGFyZW50IG5vZGUgaW5kZXgsIGl0IHJldHVybnMgdGhl
IHJpZ2h0IG5vZGUgaW5kZXguCisgICAgICAgIChIZWFwLnByb3RvdHlwZS5fY2hpbGRJbmRleCk6
IEdpdmVuIHRoZSBwYXJlbnQgbm9kZSBpbmRleCwgaXQgcmV0dXJucyB0aGUgY2hpbGQgaW5kZXgg
dGhhdCBtYXkgdmlvbGF0ZSB0aGUgaGVhcCBwcm9wZXJ0eS4KKyAgICAgICAgKEhlYXAucHJvdG90
eXBlLmluaXQpOiBJbml0aWFsaXplcyB0aGUgaGVhcCBzdGF0ZS4KKyAgICAgICAgKEhlYXAucHJv
dG90eXBlLnRvcCk6IFJldHVybnMgdGhlIHZhbHVlIHN0b3JlZCBhdCB0aGUgdG9wIG9mIHRoZSBo
ZWFwLgorICAgICAgICAoSGVhcC5wcm90b3R5cGUucHVzaCk6IFB1c2hlcyBhIG5ldyBub2RlIGF0
IHRoZSB0b3Agb2YgdGhlIGhlYXAuCisgICAgICAgIChIZWFwLnByb3RvdHlwZS5wb3ApOiBFeHRy
YWN0cyB0aGUgdG9wIG5vZGUgb2YgdGhlIGhlYXAuCisgICAgICAgIChIZWFwLnByb3RvdHlwZS5f
YnViYmxlKTogRml4ZXMgdGhlIGhlYXAgcHJvcGVydHkgYnkgbW92aW5nIHVwd2FyZC4KKyAgICAg
ICAgKEhlYXAucHJvdG90eXBlLl9zaW5rKTogRml4ZXMgdGhlIGhlYXAgcHJvcGVydHkgYnkgbW92
aW5nIGRvd253YXJkLgorICAgICAgICAoSGVhcC5wcm90b3R5cGUuc3RyKTogUHJpbnRzIHRoZSBu
b2RlcyBvZiB0aGUgaGVhcCB0byBhIHN0cmluZy4KKyAgICAgICAgKEhlYXAucHJvdG90eXBlLnZh
bHVlcyk6IFJldHVybnMgdGhlIGxhc3QgInNpemUiIGhlYXAgZWxlbWVudHMgdmFsdWVzLgorICAg
ICAgICAKKyAgICAgICAgKEFsZ29yaXRobS5jcmVhdGVNaW5IZWFwKTogQ3JlYXRlcyBhIHNpemUt
Ym91bmRlZCBtaW4taGVhcCBvYmplY3QuCisgICAgICAgIChBbGdvcml0aG0uY3JlYXRlTWF4SGVh
cCk6IENyZWF0ZXMgYSBzaXplLWJvdW5kZWQgbWF4LWhlYXAgb2JqZWN0LgorCisgICAgICAgICog
QW5pbW9tZXRlci9yZXNvdXJjZXMvbWFpbi5qczogQWRkZWQuCisgICAgICAgIChQb2ludCk6IEEg
cG9pbnQgb2JqZWN0LgorICAgICAgICAoSW5zZXRzKTogQW4gaW5zZXRzIG9iamVjdC4KKyAgICAg
ICAgKFNpbXBsZVByb21pc2UpOiBBbiBpbXBsZW1lbnRhdGlvbiBmb3IgYSBwcm9taXNlIG9iamVj
dCAoY29waWVkIGZvcm0gc3BlZWRvbWV0ZXIpLgorICAgICAgICAoTWF0cml4KTogQSBtYXRyaXgg
b2JqZWN0LgorICAgICAgICAoVmVjdG9yMyk6IEEgdmVjdG9yIG9mIHNpemUgMyBvYmplY3QuCisg
ICAgICAgIChNYXRyaXgzKTogQSBtYXRyaXggb2Ygc2l6ZSAzeDMgb2JqZWN0LgorICAgICAgICAo
T3B0aW9ucyk6IEJlbmNobWFyayBydW5uaW5nIG9wdGlvbnMgYXMgdGhleSBhcmUgc2V0IGJ5IHRo
ZSB1c2VyLgorICAgICAgICAKKyAgICAgICAgKFByb2dyZXNzQmFyKTogTWFuYWdlcyBhIHByb2dy
ZXNzIGJhciBlbGVtZW50LiBUaGUgcHJvZ3Jlc3MgYmFyIGlzIGRpdmlkZWQgaW50byBlcXVhbCBs
ZW5ndGggcmFuZ2VzLgorICAgICAgICAoUHJvZ3Jlc3NCYXIucHJvdG90eXBlLl9wcm9ncmVzc1Rv
UGVyY2VudCk6IENvbnZlcnRzIHRoZSBwcm9ncmVzcyBpbnRvIGEgcGVyY2VudGFnZS4KKyAgICAg
ICAgKFByb2dyZXNzQmFyLnByb3RvdHlwZS5pbmNSYW5nZSk6IE1vdmVzIHRvIHRoZSBuZXh0IHJh
bmdlIChhIHJhbmdlIGlzIHRoZSBydW5uaW5nIHRpbWUgb2YgYSBzaW5nbGUgdGVzdCkuCisgICAg
ICAgIChQcm9ncmVzc0Jhci5wcm90b3R5cGUuc2V0UG9zKTogRHJhd3MgdGhlIGN1cnJlbnQgcHJv
Z3Jlc3MgaW4gdGhlIGN1cnJlbnQgcmFuZ2UuCisgICAgICAgIAorICAgICAgICAoUmVjb3JkVGFi
bGUpOiBTaG93cyB0aGUgcmVzdWx0cyBvZiBydW5uaW5nIGEgYmVuY2htYXJrIGluIGEgdGFidWxh
ciBmb3JtLgorICAgICAgICAoUmVjb3JkVGFibGUucHJvdG90eXBlLmNsZWFyKTogQ2xlYXJzIHRo
ZSByZXN1bHRzIHRhYmxlLgorICAgICAgICAoUmVjb3JkVGFibGUucHJvdG90eXBlLl9zaG93VGl0
bGVzKTogU2hvd3MgdGhlIGhlYWRlciB0aXRsZXMgYW5kIGFwcGVuZHMgdGhlIHN1Yi10aXRsZXMg
dG8gYSBxdWV1ZS4KKyAgICAgICAgKFJlY29yZFRhYmxlLnByb3RvdHlwZS5fc2hvd0hlYWRlcik6
IFNob3dzIHRoZSB0YWJsZSBoZWFkZXIgdGl0bGVzLgorICAgICAgICAoUmVjb3JkVGFibGUucHJv
dG90eXBlLl9zaG93RW1wdHkpOiBTaG93cyBhbiBlbXB0eSB0YWJsZSBjZWxsLgorICAgICAgICAo
UmVjb3JkVGFibGUucHJvdG90eXBlLl9zaG93VmFsdWUpOiBTaG93cyBhIG51bWJlciB2YWx1ZSBp
biB0aGUgcmVzdWx0cyB0YWJsZS4KKyAgICAgICAgKFJlY29yZFRhYmxlLnByb3RvdHlwZS5fc2hv
d1NhbXBsZXMpOiBTaG93cyBhIGJ1dHRvbiBmb3IgdGhlIHNhbXBsZWQgZGF0YSBncmFwaC4KKyAg
ICAgICAgKFJlY29yZFRhYmxlLnByb3RvdHlwZS5fc2hvd1Rlc3QpOiBTaG93cyB0aGUgcmVzdWx0
cyBvZiBhIHNpbmdsZSB0ZXN0LgorICAgICAgICAoUmVjb3JkVGFibGUucHJvdG90eXBlLl9zaG93
U3VpdGUpOiBTaG93cyB0aGUgcmVzdWx0cyBvZiBhIHNpbmdsZSBzdWl0ZS4KKyAgICAgICAgKFJl
Y29yZFRhYmxlLnByb3RvdHlwZS5zaG93UmVjb3JkKTogU2hvd3MgYSBzaW5nbGUgaXRlcmF0aW9u
IGZvciBhIHNpbmdsZSB0ZXN0LgorICAgICAgICAoUmVjb3JkVGFibGUucHJvdG90eXBlLnNob3dJ
dGVyYXRpb25zKTogU2hvd3MgdGhlIHJlc3VsdHMgb2YgYWxsIHRoZSBzdWl0ZXMgb2YgdGhlIGl0
ZXJhdGlvbnMuIAorICAgICAgICAKKyAgICAgICAgKiBBbmltb21ldGVyL3Jlc291cmNlcy9zdGF0
aXN0aWNzLmpzOiBBZGRlZC4gICAgICAgIAorICAgICAgICAoU3RhdGlzdGljcy5zYW1wbGVNZWFu
KTogUmV0dXJucyB0aGUgc2FtcGxlIG1lYW4gZm9yIGEgc2V0IG9mIGRhdGEgcG9pbnRzLgorICAg
ICAgICAoU3RhdGlzdGljcy5zYW1wbGVTdGFuZGFyZERldmlhdGlvbik6IFJldHVybnMgdGhlIHNh
bXBsZSBzdGFuZGFyZCBkZXZpYXRpb24gZm9yIGEgc2V0IG9mIGRhdGEgcG9pbnRzLgorICAgICAg
ICAoU3RhdGlzdGljcy5nZW9tZXRyaWNNZWFuKTogUmV0dXJucyB0aGUgZ2VvbWV0cmljIG1lYW4g
b2YgYSBzZXQgb2YgZGF0YS4KKyAgICAgICAgKFN0YXRpc3RpY3MuY29uZmlkZW5jZUludGVydmFs
RGVsdGEpOiBDYWxjdWxhdGVzIHRoZSBjb25maWRlbmNlIGRlbHRhIGZvciBzYW1wbGVkIGRhdGEg
Z2l2ZW4gYSBjb25maWRlbmNlIGxldmVsLgorICAgICAgICAKKyAgICAgICAgKEV4cGVyaW1lbnQp
OiBSZXByZXNlbnRzIGEgc2FtcGxpbmcgZXhwZXJpbWVudC4gCisgICAgICAgIChFeHBlcmltZW50
LnByb3RvdHlwZS5faW5pdCk6IENhbGxlZCB3aGVuIHRoZSBvYmplY3QgaXMgY3JlYXRlZCBhbmQg
d2hlbiBzdGFydFNhbXBsaW5nKCkgaXMgY2FsbGVkLgorICAgICAgICAoRXhwZXJpbWVudC5wcm90
b3R5cGUuc3RhcnRTYW1wbGluZyk6IENhbGxlZCBhZnRlciB3YXJtdXAgcGVyaW9kLiBSZXN0YXJ0
cyBjb2xsZWN0aW5nIHNhbXBsZWQgZGF0YSBwb2ludHMuCisgICAgICAgIChFeHBlcmltZW50LnBy
b3RvdHlwZS5zYW1wbGUpOiBBZGQgYSBuZXcgZGF0YSBwb2ludC4KKyAgICAgICAgKEV4cGVyaW1l
bnQucHJvdG90eXBlLm1lYW4pOiBSZXR1cm5zIHRoZSBzYW1wbGUgbWVhbiBmb3IgdGhlIGN1cnJl
bnQgc2FtcGxlZCBkYXRhIHBvaW50cy4KKyAgICAgICAgKEV4cGVyaW1lbnQucHJvdG90eXBlLnN0
YW5kYXJkRGV2aWF0aW9uKTogUmV0dXJucyB0aGUgc2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvbiBm
b3IgdGhlIGN1cnJlbnQgc2FtcGxlZCBkYXRhIHBvaW50cy4KKyAgICAgICAgKEV4cGVyaW1lbnQu
cHJvdG90eXBlLnBlcmNlbnRhZ2UpOiBSZXR1cm5zIHRoZSBwZXJjZW50YWdlIG9mIHRoZSBzdGFu
ZGFyZCBkZXZpYXRpb24gZGl2aWRlZCB0byB0aGUgbWVhbi4KKyAgICAgICAgKEV4cGVyaW1lbnQu
cHJvdG90eXBlLmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKTogQ2FsY3VsYXRlcyB0aGUgY29uZmlk
ZW5jZSBkZWx0YSBmb3IgdGhlIGN1cnJlbnQgc2FtcGxlZCBkYXRhIGdpdmVuIGEgY29uZmlkZW5j
ZSBsZXZlbC4KKyAgICAgICAgKEV4cGVyaW1lbnQucHJvdG90eXBlLmNvbmNlcm4pOiBSZXR1cm5z
IHRoZSBhdmVyYWdlIG9mIHRoZSB3b3JzdCBnaXZlbiBwZXJjZW50YWdlIGZyb20gdGhlIHNhbXBs
ZWQgZGF0YS4KKyAgICAgICAgKEV4cGVyaW1lbnQucHJvdG90eXBlLnNjb3JlKTogUmV0dXJucyBh
IHNjb3JlIGZvciB0aGUgc2FtcGxlZCBkYXRhLiBJdCBpcyB0aGUgZ2VvbWV0cmljIG1lYW4gb2Yg
c2FtcGxlTWVhbiBhbmQgY29uY2Vybi4KKyAgICAgICAgCisgICAgICAgIChTYW1wbGVyKTogUmVw
cmVzZW50cyBhIGNvbXBvdW5kIGV4cGVyaW1lbnQuIEl0IG1hbmFnZXMgc2FtcGxpbmcgbXVsdGlw
bGUgZGF0YSBwb2ludHMgYXQgdGhlIHNhbWUgdGltZSBvZmZzZXQuCisgICAgICAgIChTYW1wbGVy
LnByb3RvdHlwZS5zdGFydFNhbXBsaW5nKTogQ2FsbGVkIGFmdGVyIHdhcm1pbmcgdXAgcGVyaW9k
LiBSZXN0YXJ0cyBjb2xsZWN0aW5nIHNhbXBsZWQgZGF0YSBwb2ludHMuCisgICAgICAgIChTYW1w
bGVyLnByb3RvdHlwZS5zYW1wbGUpOiBBZGQgYSBuZXcgZGF0YSB2ZWN0b3IgYXQgYSBnaXZlbiB0
aW1lIG9mZnNldC4KKwogMjAxNS0wOC0yNyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFtFRkxdIFJFR1JFU1NJT04ocjE4ODc5Myk6IEl0IG1hZGUgMjAw
IGxheW91dCB0ZXN0cyBhbmQgQmluZGluZ3MvZXZlbnQtdGFyZ2V0LXdyYXBwZXIuaHRtbCBwZXJm
b3JtYW5jZSB0ZXN0IGZhaWwKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNv
dXJjZXMvYWxnb3JpdGhtLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9t
ZXRlci9yZXNvdXJjZXMvYWxnb3JpdGhtLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VU
ZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9hbGdvcml0aG0uanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNDIgQEAKK0FycmF5LnByb3RvdHlwZS5zd2FwID0gZnVuY3Rpb24oaSwgaikKK3sK
KyAgICB2YXIgdCA9IHRoaXNbaV07CisgICAgdGhpc1tpXSA9IHRoaXNbal07CisgICAgdGhpc1tq
XSA9IHQ7CisgICAgcmV0dXJuIHRoaXM7Cit9CisKK2Z1bmN0aW9uIEhlYXAobWF4U2l6ZSwgY29t
cGFyZSkKK3sKKyAgICB0aGlzLl9tYXhTaXplID0gbWF4U2l6ZTsKKyAgICB0aGlzLl9jb21wYXJl
ID0gY29tcGFyZTsKKyAgICB0aGlzLl9zaXplID0gMDsKKyAgICB0aGlzLl92YWx1ZXMgPSBuZXcg
QXJyYXkodGhpcy5fbWF4U2l6ZSk7Cit9CisKK0hlYXAucHJvdG90eXBlID0KK3sKKyAgICAvLyBU
aGlzIGlzIGEgYmluYXJ5IGhlYXAgcmVwcmVzZW50ZWQgaW4gYW4gYXJyYXkuIFRoZSByb290IGVs
ZW1lbnQgaXMgc3RvcmVkCisgICAgLy8gaW4gdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGFycmF5
LiBUaGUgcm9vdCBpcyBmb2xsb3dlZCBieSBpdHMgdHdvIGNoaWxkcmVuLgorICAgIC8vIFRoZW4g
aXRzIGZvdXIgZ3JhbmRjaGlsZHJlbiBhbmQgc28gb24uIFNvIGV2ZXJ5IGxldmVsIGluIHRoZSBi
aW5hcnkgaGVhcCBpcworICAgIC8vIGRvdWJsZWQgaW4gdGhlIGZvbGxvd2luZyBsZXZlbC4gSGVy
ZSBpcyBhbiBleGFtcGxlIG9mIHRoZSBub2RlIGluZGljZXMgYW5kCisgICAgLy8gaG93IHRoZXkg
YXJlIHJlbGF0ZWQgdG8gdGhlaXIgcGFyZW50cyBhbmQgY2hpbGRyZW4uCisgICAgLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CisgICAgLy8gICAgICAgICAgICAgIDAgICAgICAgMSAgICAgICAyICAgICAg
IDMgICAgICAgNCAgICAgICA1ICAgICAgIDYKKyAgICAvLyBQQVJFTlQgICAgICAgLTEgICAgICAw
ICAgICAgIDAgICAgICAgMSAgICAgICAxICAgICAgIDIgICAgICAgMgorICAgIC8vIExFRlQgICAg
ICAgICAxICAgICAgIDMgICAgICAgNSAgICAgICA3ICAgICAgIDkgICAgICAgMTEgICAgICAxMwor
ICAgIC8vIFJJR0hUICAgICAgICAyICAgICAgIDQgICAgICAgNiAgICAgICA4ICAgICAgIDEwICAg
ICAgMTIgICAgICAxNAorICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIF9wYXJlbnRJbmRl
eDogZnVuY3Rpb24oaSkKKyAgICB7CisgICAgICAgIHJldHVybiBpID4gMCA/IE1hdGguZmxvb3Io
KGkgLSAxKSAvIDIpIDogLTE7CisgICAgfSwKKyAgICAKKyAgICBfbGVmdEluZGV4OiBmdW5jdGlv
bihpKQorICAgIHsKKyAgICAgICAgdmFyIGxlZnRJbmRleCA9IGkgKiAyICsgMTsKKyAgICAgICAg
cmV0dXJuIGxlZnRJbmRleCA8IHRoaXMuX3NpemUgPyBsZWZ0SW5kZXggOiAtMTsKKyAgICB9LAor
ICAgIAorICAgIF9yaWdodEluZGV4OiBmdW5jdGlvbihpKQorICAgIHsKKyAgICAgICAgdmFyIHJp
Z2h0SW5kZXggPSBpICogMiArIDI7CisgICAgICAgIHJldHVybiByaWdodEluZGV4IDwgdGhpcy5f
c2l6ZSA/IHJpZ2h0SW5kZXggOiAtMTsKKyAgICB9LAorICAgIAorICAgIC8vIFJldHVybnMgdGhl
IGNoaWxkIGluZGV4IHRoYXQgbWF5IHZpb2xhdGUgdGhlIGhlYXAgcHJvcGVydHkgYXQgaW5kZXgg
aS4KKyAgICBfY2hpbGRJbmRleDogZnVuY3Rpb24oaSkKKyAgICB7CisgICAgICAgIHZhciBsZWZ0
ID0gdGhpcy5fbGVmdEluZGV4KGkpOworICAgICAgICB2YXIgcmlnaHQgPSB0aGlzLl9yaWdodElu
ZGV4KGkpOworCisgICAgICAgIGlmIChsZWZ0ICE9IC0xICYmIHJpZ2h0ICE9IC0xKQorICAgICAg
ICAgICAgcmV0dXJuIHRoaXMuX2NvbXBhcmUodGhpcy5fdmFsdWVzW2xlZnRdLCB0aGlzLl92YWx1
ZXNbcmlnaHRdKSA+IDAgPyBsZWZ0IDogcmlnaHQ7CisgICAgICAgIAorICAgICAgICByZXR1cm4g
bGVmdCAhPSAtMSA/IGxlZnQgOiByaWdodDsKKyAgICB9LAorICAgIAorICAgIGluaXQ6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3NpemUgPSAwOworICAgIH0sCisgICAgCisgICAg
dG9wOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZSA/IHRoaXMu
X3ZhbHVlc1swXSA6IE5hTjsKKyAgICB9LAorICAgIAorICAgIHB1c2g6IGZ1bmN0aW9uKHZhbHVl
KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3NpemUgPT0gdGhpcy5fbWF4U2l6ZSkgeworICAg
ICAgICAgICAgLy8gSWYgc2l6ZSBpcyBib3VuZGVkIGFuZCB0aGUgbmV3IHZhbHVlIGNhbiBiZSBh
IHBhcmVudCBvZiB0aGUgdG9wKCkKKyAgICAgICAgICAgIC8vIGlmIHRoZSBzaXplIHdlcmUgdW5i
b3VuZGVkLCBqdXN0IGlnbm9yZSB0aGUgbmV3IHZhbHVlLgorICAgICAgICAgICAgaWYgKHRoaXMu
X2NvbXBhcmUodmFsdWUsIHRoaXMudG9wKCkpID4gMCkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB0aGlzLnBvcCgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3ZhbHVl
c1t0aGlzLl9zaXplKytdID0gdmFsdWU7CisgICAgICAgIHRoaXMuX2J1YmJsZSh0aGlzLl9zaXpl
IC0gMSk7CisgICAgfSwKKworICAgIHBvcDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYg
KCF0aGlzLl9zaXplKQorICAgICAgICAgICAgcmV0dXJuIE5hTjsKKyAgICAgICAgCisgICAgICAg
IHRoaXMuX3ZhbHVlc1swXSA9IHRoaXMuX3ZhbHVlc1stLXRoaXMuX3NpemVdOworICAgICAgICB0
aGlzLl9zaW5rKDApOworICAgIH0sCisgICAgCisgICAgX2J1YmJsZTogZnVuY3Rpb24oaSkKKyAg
ICB7CisgICAgICAgIC8vIEZpeCB0aGUgaGVhcCBwcm9wZXJ0eSBhdCBpbmRleCBpIGdpdmVuIHRo
YXQgcGFyZW50IGlzIHRoZSBvbmx5IG5vZGUgdGhhdAorICAgICAgICAvLyBtYXkgdmlvbGF0ZSB0
aGUgaGVhcCBwcm9wZXJ0eS4KKyAgICAgICAgZm9yICh2YXIgcGkgPSB0aGlzLl9wYXJlbnRJbmRl
eChpKTsgcGkgIT0gLTE7IGkgPSBwaSwgcGkgPSB0aGlzLl9wYXJlbnRJbmRleChwaSkpIHsKKyAg
ICAgICAgICAgIGlmICh0aGlzLl9jb21wYXJlKHRoaXMuX3ZhbHVlc1twaV0sIHRoaXMuX3ZhbHVl
c1tpXSkgPiAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgdGhpcy5fdmFsdWVzLnN3YXAocGksIGkpOworICAgICAgICB9CisgICAgfSwKKyAg
ICAKKyAgICBfc2luazogZnVuY3Rpb24oaSkKKyAgICB7CisgICAgICAgIC8vIEZpeCB0aGUgaGVh
cCBwcm9wZXJ0eSBhdCBpbmRleCBpIGdpdmVuIHRoYXQgZWFjaCBvZiB0aGUgbGVmdCBhbmQgdGhl
IHJpZ2h0CisgICAgICAgIC8vIHN1Yi10cmVlcyBzYXRpc2ZpZXMgdGhlIGhlYXAgcHJvcGVydHku
CisgICAgICAgIGZvciAodmFyIGNpID0gdGhpcy5fY2hpbGRJbmRleChpKTsgY2kgIT0gLTE7IGkg
PSBjaSwgY2kgPSB0aGlzLl9jaGlsZEluZGV4KGNpKSkgeworICAgICAgICAgICAgaWYgKHRoaXMu
X2NvbXBhcmUodGhpcy5fdmFsdWVzW2ldLCB0aGlzLl92YWx1ZXNbY2ldKSA+IDApCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHRoaXMuX3ZhbHVlcy5z
d2FwKGNpLCBpKTsKKyAgICAgICAgfQorICAgIH0sCisgICAgCisgICAgc3RyOiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICB2YXIgb3V0ID0gIkhlYXBbIiArIHRoaXMuX3NpemUgKyAiXSA9IFsi
OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NpemU7ICsraSkgeworICAgICAg
ICAgICAgb3V0ICs9IHRoaXMuX3ZhbHVlc1tpXTsKKyAgICAgICAgICAgIGlmIChpIDwgdGhpcy5f
c2l6ZSAtIDEpCisgICAgICAgICAgICAgICAgb3V0ICs9ICIsICI7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG91dCArICJdIjsKKyAgICB9LAorICAgIAorICAgIHZhbHVlczogZnVuY3Rpb24o
c2l6ZSkgeworICAgICAgICAvLyBSZXR1cm5zIHRoZSBsYXN0ICJzaXplIiBoZWFwIGVsZW1lbnRz
IHZhbHVlcy4KKyAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuX3ZhbHVlcy5zbGljZSgwLCB0aGlz
Ll9zaXplKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlcy5zb3J0KHRoaXMuX2NvbXBhcmUpLnNsaWNl
KDAsIE1hdGgubWluKHNpemUsIHRoaXMuX3NpemUpKTsKKyAgICB9Cit9CisKK3ZhciBBbGdvcml0
aG0gPSB7CisgICAgY3JlYXRlTWluSGVhcDogZnVuY3Rpb24obWF4U2l6ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBuZXcgSGVhcChtYXhTaXplLCBmdW5jdGlvbihhLCBiKSB7IHJldHVybiBiIC0g
YTsgfSk7CisgICAgfSwKKyAgICAKKyAgICBjcmVhdGVNYXhIZWFwOiBmdW5jdGlvbihtYXhTaXpl
KSB7CisgICAgICAgIHJldHVybiBuZXcgSGVhcChtYXhTaXplLCBmdW5jdGlvbihhLCBiKSB7IHJl
dHVybiBhIC0gYjsgfSk7CisgICAgfQorfQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21l
dGVyL3Jlc291cmNlcy9tYWluLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQW5p
bW9tZXRlci9yZXNvdXJjZXMvbWFpbi5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVz
dHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvbWFpbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI5NyBAQAorZnVuY3Rpb24gUG9pbnQoeCwgeSkKK3sKKyAgICB0aGlzLnggPSB4OworICAgIHRo
aXMueSA9IHk7Cit9CisKK1BvaW50LnByb3RvdHlwZSA9Cit7CisgICAgLy8gVXNlZCB3aGVuIHRo
ZSBwb2ludCBvYmplY3QgaXMgdXNlZCBhcyBhIHNpemUgb2JqZWN0LgorICAgIGdldCB3aWR0aCgp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy54OworICAgIH0sCisgICAgCisgICAgLy8gVXNl
ZCB3aGVuIHRoZSBwb2ludCBvYmplY3QgaXMgdXNlZCBhcyBhIHNpemUgb2JqZWN0LgorICAgIGdl
dCBoZWlnaHQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMueTsKKyAgICB9LAorICAgIAor
ICAgIC8vIFVzZWQgd2hlbiB0aGUgcG9pbnQgb2JqZWN0IGlzIHVzZWQgYXMgYSBzaXplIG9iamVj
dC4KKyAgICBnZXQgY2VudGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUG9pbnQodGhp
cy54IC8gMiwgdGhpcy55IC8gMik7CisgICAgfSwKKyAgICAKKyAgICBhZGQ6IGZ1bmN0aW9uKG90
aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLnggKyBvdGhlci54LCB0
aGlzLnkgKyBvdGhlci55KTsKKyAgICB9LAorICAgIAorICAgIHN1YnRyYWN0OiBmdW5jdGlvbihv
dGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54IC0gb3RoZXIueCwg
dGhpcy55IC0gb3RoZXIueSk7CisgICAgfSwKKyAgICAKKyAgICBtdWx0aXBseTogZnVuY3Rpb24o
b3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCAqIG90aGVyLngs
IHRoaXMueSAqIG90aGVyLnkpOworICAgIH0sCisgICAgCisgICAgbW92ZTogZnVuY3Rpb24oYW5n
bGUsIHZlbG9jaXR5LCB0aW1lRGVsdGEpCisgICAgeworICAgICAgICB2YXIgeCA9IHRoaXMueCAr
IE1hdGguY29zKGFuZ2xlKSAqIHZlbG9jaXR5ICogKHRpbWVEZWx0YSAvIDEwMDApOworICAgICAg
ICB2YXIgeSA9IHRoaXMueSArIE1hdGguc2luKGFuZ2xlKSAqIHZlbG9jaXR5ICogKHRpbWVEZWx0
YSAvIDEwMDApOworICAgICAgICByZXR1cm4gbmV3IFBvaW50KHgsIHkpOworICAgIH0KK30KKwor
ZnVuY3Rpb24gSW5zZXRzKHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCkKK3sKKyAgICB0aGlzLnRv
cCA9IHRvcDsKKyAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7CisgICAgdGhpcy5ib3R0b20gPSBib3R0
b207CisgICAgdGhpcy5sZWZ0ID0gbGVmdDsKK30KKworSW5zZXRzLnByb3RvdHlwZSA9Cit7Cisg
ICAgZ2V0IHdpZHRoKCkgeworICAgICAgICByZXR1cm4gdGhpcy5sZWZ0ICsgdGhpcy5yaWdodDsK
KyAgICB9LAorICAgIGdldCBoZWlnaHQoKSB7CisgICAgICAgIHJldHVybiB0aGlzLnRvcCArIHRo
aXMuYm90dG9tOworICAgIH0KK30KKworZnVuY3Rpb24gU2ltcGxlUHJvbWlzZSgpCit7CisgICAg
dGhpcy5fY2hhaW5lZFByb21pc2UgPSBudWxsOworICAgIHRoaXMuX2NhbGxiYWNrID0gbnVsbDsK
K30KKworU2ltcGxlUHJvbWlzZS5wcm90b3R5cGUudGhlbiA9IGZ1bmN0aW9uIChjYWxsYmFjaykK
K3sKKyAgICBpZiAodGhpcy5fY2FsbGJhY2spCisgICAgICAgIHRocm93ICJTaW1wbGVQcm9taXNl
IGRvZXNuJ3Qgc3VwcG9ydCBtdWx0aXBsZSBjYWxscyB0byB0aGVuIjsKKyAgICAgICAgCisgICAg
dGhpcy5fY2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICB0aGlzLl9jaGFpbmVkUHJvbWlzZSA9IG5l
dyBTaW1wbGVQcm9taXNlOworICAgIAorICAgIGlmICh0aGlzLl9yZXNvbHZlZCkKKyAgICAgICAg
dGhpcy5yZXNvbHZlKHRoaXMuX3Jlc29sdmVkVmFsdWUpOworCisgICAgcmV0dXJuIHRoaXMuX2No
YWluZWRQcm9taXNlOworfQorCitTaW1wbGVQcm9taXNlLnByb3RvdHlwZS5yZXNvbHZlID0gZnVu
Y3Rpb24gKHZhbHVlKQoreworICAgIGlmICghdGhpcy5fY2FsbGJhY2spIHsKKyAgICAgICAgdGhp
cy5fcmVzb2x2ZWQgPSB0cnVlOworICAgICAgICB0aGlzLl9yZXNvbHZlZFZhbHVlID0gdmFsdWU7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgcmVzdWx0ID0gdGhpcy5fY2FsbGJh
Y2sodmFsdWUpOworICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBTaW1wbGVQcm9taXNlKSB7Cisg
ICAgICAgIHZhciBjaGFpbmVkUHJvbWlzZSA9IHRoaXMuX2NoYWluZWRQcm9taXNlOworICAgICAg
ICByZXN1bHQudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7IGNoYWluZWRQcm9taXNlLnJlc29sdmUo
cmVzdWx0KTsgfSk7CisgICAgfSBlbHNlCisgICAgICAgIHRoaXMuX2NoYWluZWRQcm9taXNlLnJl
c29sdmUocmVzdWx0KTsKK30KKworZnVuY3Rpb24gT3B0aW9ucyh0ZXN0SW50ZXJ2YWwsIGZyYW1l
UmF0ZSkKK3sKKyAgICB0aGlzLnRlc3RJbnRlcnZhbCA9IHRlc3RJbnRlcnZhbDsKKyAgICB0aGlz
LmZyYW1lUmF0ZSA9IGZyYW1lUmF0ZTsKK30KKworZnVuY3Rpb24gUHJvZ3Jlc3NCYXIoZWxlbWVu
dCwgcmFuZ2VzKQoreworICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7CisgICAgdGhpcy5yYW5n
ZXMgPSByYW5nZXM7CisgICAgdGhpcy5jdXJyZW50UmFuZ2UgPSAwOworfQorCitQcm9ncmVzc0Jh
ci5wcm90b3R5cGUgPQoreworICAgIF9wcm9ncmVzc1RvUGVyY2VudDogZnVuY3Rpb24ocHJvZ3Jl
c3MpCisgICAgeworICAgICAgICByZXR1cm4gcHJvZ3Jlc3MgKiAoMTAwIC8gdGhpcy5yYW5nZXMp
OworICAgIH0sCisgICAgCisgICAgaW5jUmFuZ2U6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
ICsrdGhpcy5jdXJyZW50UmFuZ2U7CisgICAgfSwKKyAgICAKKyAgICBzZXRQb3M6IGZ1bmN0aW9u
KHByb2dyZXNzKQorICAgIHsKKyAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLndpZHRoID0gdGhp
cy5fcHJvZ3Jlc3NUb1BlcmNlbnQodGhpcy5jdXJyZW50UmFuZ2UgKyBwcm9ncmVzcykgKyAiJSI7
CisgICAgfQorfQorCitmdW5jdGlvbiBSZWNvcmRUYWJsZShlbGVtZW50KQoreworICAgIHRoaXMu
ZWxlbWVudCA9IGVsZW1lbnQ7CisgICAgdGhpcy5jbGVhcigpOworfQorCitSZWNvcmRUYWJsZS5w
cm90b3R5cGUgPQoreworICAgIGNsZWFyOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlz
LmVsZW1lbnQuaW5uZXJIVE1MID0gIiI7CisgICAgfSwKKyAgICAKKyAgICBfc2hvd1RpdGxlczog
ZnVuY3Rpb24ocm93LCBxdWV1ZSwgdGl0bGVzLCBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgdGl0
bGVzLmZvckVhY2goZnVuY3Rpb24gKHRpdGxlKSB7CisgICAgICAgICAgICB2YXIgdGggPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJ0aCIpOworICAgICAgICAgICAgdGgudGV4dENvbnRlbnQgPSB0
aXRsZS50ZXh0OworICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9ICJ1bmRlZmluZWQi
ICYmIG1lc3NhZ2UubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgdGguaW5uZXJIVE1MICs9ICI8
YnI+WyIgKyBtZXNzYWdlICsgIl0iOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAiIjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgid2lkdGgiIGluIHRpdGxlKQorICAgICAgICAg
ICAgICAgIHRoLndpZHRoID0gdGl0bGUud2lkdGggKyAiJSI7CisgICAgICAgICAgICByb3cuYXBw
ZW5kQ2hpbGQodGgpOworICAgICAgICAgICAgcXVldWUucHVzaCh7ZWxlbWVudDogdGgsIHRpdGxl
czogdGl0bGUuY2hpbGRyZW4gfSk7CisgICAgICAgIH0pOworICAgIH0sCisgICAgCisgICAgX3No
b3dIZWFkZXI6IGZ1bmN0aW9uKHN1aXRlTmFtZSwgdGl0bGVzLCBtZXNzYWdlKQorICAgIHsKKyAg
ICAgICAgdmFyIHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7CisKKyAgICAgICAg
dmFyIHF1ZXVlID0gW107CisgICAgICAgIHRoaXMuX3Nob3dUaXRsZXMocm93LCBxdWV1ZSwgdGl0
bGVzLCBtZXNzYWdlKTsKKyAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHJvdyk7CisK
KyAgICAgICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIHJvdyA9IG51
bGw7CisgICAgICAgICAgICB2YXIgZW50cmllcyA9IFtdOworCisgICAgICAgICAgICBmb3IgKHZh
ciBpID0gMCwgbGVuID0gcXVldWUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgZW50cnkgPSBxdWV1ZS5zaGlmdCgpOworCisgICAgICAgICAgICAgICAgaWYgKCFl
bnRyeS50aXRsZXMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIGVudHJpZXMucHVzaChl
bnRyeS5lbGVtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFyb3cpCisgICAgICAgICAgICAgICAgICAg
IHZhciByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOworCisgICAgICAgICAgICAg
ICAgdGhpcy5fc2hvd1RpdGxlcyhyb3csIHF1ZXVlLCBlbnRyeS50aXRsZXMsICIiKTsKKyAgICAg
ICAgICAgICAgICBlbnRyeS5lbGVtZW50LmNvbFNwYW4gPSBlbnRyeS50aXRsZXMubGVuZ3RoOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocm93KSB7CisgICAgICAgICAgICAgICAg
dGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHJvdyk7CisgICAgICAgICAgICAgICAgZW50cmllcy5m
b3JFYWNoKGZ1bmN0aW9uKGVudHJ5KSB7CisgICAgICAgICAgICAgICAgICAgICsrZW50cnkucm93
U3BhbjsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0sCisgICAgCisgICAgX3Nob3dFbXB0eTogZnVuY3Rpb24ocm93LCB0ZXN0TmFtZSkKKyAgICB7
CisgICAgICAgIHZhciB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CisgICAgICAg
IHJvdy5hcHBlbmRDaGlsZCh0ZCk7CisgICAgfSwKKyAgICAKKyAgICBfc2hvd1ZhbHVlOiBmdW5j
dGlvbihyb3csIHRlc3ROYW1lLCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHZhciB0ZCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CisgICAgICAgIHRkLnRleHRDb250ZW50ID0gdmFsdWUu
dG9GaXhlZCgyKTsKKyAgICAgICAgcm93LmFwcGVuZENoaWxkKHRkKTsKKyAgICB9LAorICAgIAor
ICAgIF9zaG93U2FtcGxlczogZnVuY3Rpb24ocm93LCB0ZXN0TmFtZSwgYXhlcywgc2FtcGxlcywg
c2FtcGxpbmdUaW1lT2Zmc2V0KQorICAgIHsKKyAgICAgICAgdmFyIHRkID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgidGQiKTsKKyAgICAgICAgdmFyIGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOworICAgICAgICBidXR0b24uY2xhc3NOYW1lID0gInNtYWxsLWJ1dHRvbiI7
CisgICAgICAgICAgICAKKyAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwg
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB3aW5kb3cuc2hvd0dyYXBoKHRlc3ROYW1lLCBheGVz
LCBzYW1wbGVzLCBzYW1wbGluZ1RpbWVPZmZzZXQpOworICAgICAgICB9KTsKKyAgICAgICAgICAg
IAorICAgICAgICBidXR0b24udGV4dENvbnRlbnQgPSAiR3JhcGguLi4iOworICAgICAgICB0ZC5h
cHBlbmRDaGlsZChidXR0b24pOworICAgICAgICByb3cuYXBwZW5kQ2hpbGQodGQpOworICAgIH0s
CisgICAgCisgICAgX3Nob3dUZXN0OiBmdW5jdGlvbih0ZXN0TmFtZSwgdGl0bGVzLCBzYW1wbGVy
LCBmaW5hbFJlc3VsdHMpCisgICAgeworICAgICAgICB2YXIgcm93ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgidHIiKTsKKyAgICAgICAgdmFyIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
dGQiKTsKKyAgICAgICAgCisgICAgICAgIHRkLnRleHRDb250ZW50ID0gdGVzdE5hbWU7CisgICAg
ICAgIHJvdy5hcHBlbmRDaGlsZCh0ZCk7CisgICAgICAgIAorICAgICAgICB2YXIgYXhlcyA9IFtd
OworICAgICAgICBzYW1wbGVyLmV4cGVyaW1lbnRzLmZvckVhY2goZnVuY3Rpb24oZXhwZXJpbWVu
dCwgaW5kZXgpIHsKKyAgICAgICAgICAgIHRoaXMuX3Nob3dWYWx1ZShyb3csIHRlc3ROYW1lLCBl
eHBlcmltZW50Lm1lYW4oKSk7CisgICAgICAgICAgICB0aGlzLl9zaG93VmFsdWUocm93LCB0ZXN0
TmFtZSwgZXhwZXJpbWVudC5jb25maWRlbmNlSW50ZXJ2YWxEZWx0YShFeHBlcmltZW50LmRlZmF1
bHRzLkNPTkZJREVOQ0UpKTsKKyAgICAgICAgICAgIHRoaXMuX3Nob3dWYWx1ZShyb3csIHRlc3RO
YW1lLCBleHBlcmltZW50LmNvbmNlcm4oRXhwZXJpbWVudC5kZWZhdWx0cy5DT05DRVJOKSk7Cisg
ICAgICAgICAgICB0aGlzLl9zaG93VmFsdWUocm93LCB0ZXN0TmFtZSwgZXhwZXJpbWVudC5zdGFu
ZGFyZERldmlhdGlvbigpKTsKKyAgICAgICAgICAgIHRoaXMuX3Nob3dWYWx1ZShyb3csIHRlc3RO
YW1lLCBleHBlcmltZW50LnBlcmNlbnRhZ2UoKSk7CisgICAgICAgICAgICBheGVzLnB1c2godGl0
bGVzW2luZGV4ICsgMV0udGV4dCk7CisgICAgICAgICAgICAKKyAgICAgICAgfSwgdGhpcyk7CisK
KyAgICAgICAgdGhpcy5fc2hvd1ZhbHVlKHJvdywgdGVzdE5hbWUsIHNhbXBsZXIuZXhwZXJpbWVu
dHNbMF0uc2NvcmUoRXhwZXJpbWVudC5kZWZhdWx0cy5DT05DRVJOKSk7CisKKyAgICAgICAgaWYg
KGZpbmFsUmVzdWx0cykKKyAgICAgICAgICAgIHRoaXMuX3Nob3dTYW1wbGVzKHJvdywgdGVzdE5h
bWUsIGF4ZXMsIHNhbXBsZXIuc2FtcGxlcywgc2FtcGxlci5zYW1wbGluZ1RpbWVPZmZzZXQpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICB0aGlzLl9zaG93RW1wdHkocm93LCB0ZXN0TmFtZSk7
CisgICAgICAgICAgICAKKyAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHJvdyk7Cisg
ICAgfSwKKyAgICAKKyAgICBfc2hvd1N1aXRlOiBmdW5jdGlvbihzdWl0ZSwgc3VpdGVTYW1wbGVy
cykKKyAgICB7CisgICAgICAgIHZhciBzY29yZXMgPSBbXTsgICAgICAgIAorICAgICAgICBmb3Ig
KHZhciB0ZXN0TmFtZSBpbiBzdWl0ZVNhbXBsZXJzKSB7CisgICAgICAgICAgICB2YXIgdGVzdCA9
IHRlc3RGcm9tTmFtZShzdWl0ZSwgdGVzdE5hbWUpOworICAgICAgICAgICAgdmFyIHNhbXBsZXIg
PSBzdWl0ZVNhbXBsZXJzW3Rlc3ROYW1lXTsgCisgICAgICAgICAgICB0aGlzLl9zaG93VGVzdCh0
ZXN0TmFtZSwgc3VpdGUudGl0bGVzLCBzYW1wbGVyLCB0cnVlKTsKKyAgICAgICAgICAgIHNjb3Jl
cy5wdXNoKHNhbXBsZXIuZXhwZXJpbWVudHNbMF0uc2NvcmUoRXhwZXJpbWVudC5kZWZhdWx0cy5D
T05DRVJOKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNjb3JlczsKKyAgICB9LAorICAg
IAorICAgIHNob3dSZWNvcmQ6IGZ1bmN0aW9uKHN1aXRlLCB0ZXN0LCBzYW1wbGVyLCBtZXNzYWdl
KQorICAgIHsKKyAgICAgICAgdGhpcy5jbGVhcigpOyAgICAgICAgCisgICAgICAgIHRoaXMuX3No
b3dIZWFkZXIoIiIsIHN1aXRlLnRpdGxlcywgbWVzc2FnZSk7CisgICAgICAgIHRoaXMuX3Nob3dU
ZXN0KHRlc3QubmFtZSwgc3VpdGUudGl0bGVzLCBzYW1wbGVyLCBmYWxzZSk7ICAgICAgICAKKyAg
ICB9LAorICAgIAorICAgIHNob3dJdGVyYXRpb25zOiBmdW5jdGlvbihpdGVyYXRpb25zU2FtcGxl
cnMpCisgICAgeworICAgICAgICB0aGlzLmNsZWFyKCk7CisKKyAgICAgICAgdmFyIHNjb3JlcyA9
IFtdOworICAgICAgICB2YXIgdGl0bGVzID0gbnVsbDsKKyAgICAgICAgaXRlcmF0aW9uc1NhbXBs
ZXJzLmZvckVhY2goZnVuY3Rpb24oc3VpdGVzU2FtcGxlcnMpIHsKKyAgICAgICAgICAgIGZvciAo
dmFyIHN1aXRlTmFtZSBpbiBzdWl0ZXNTYW1wbGVycykgeworICAgICAgICAgICAgICAgIHZhciBz
dWl0ZSA9IHN1aXRlRnJvbU5hbWUoc3VpdGVOYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAodGl0
bGVzICE9IHN1aXRlLnRpdGxlcykgeworICAgICAgICAgICAgICAgICAgICB0aXRsZXMgPSBzdWl0
ZS50aXRsZXM7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dIZWFkZXIoc3VpdGVOYW1l
LCB0aXRsZXMsICIiKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXIg
c3VpdGVTY29yZXMgPSB0aGlzLl9zaG93U3VpdGUoc3VpdGUsIHN1aXRlc1NhbXBsZXJzW3N1aXRl
TmFtZV0pOworICAgICAgICAgICAgICAgIHNjb3Jlcy5wdXNoLmFwcGx5KHNjb3Jlcywgc3VpdGVT
Y29yZXMpOworICAgICAgICAgICAgfQorICAgICAgICB9LCB0aGlzKTsKKyAgICAgICAgCisgICAg
ICAgIHJldHVybiBTdGF0aXN0aWNzLmdlb21ldHJpY01lYW4oc2NvcmVzKTsKKyAgICB9Cit9Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVzb3VyY2VzL3N0YXRpc3RpY3MuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9zdGF0
aXN0aWNzLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jl
c291cmNlcy9zdGF0aXN0aWNzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTk3IEBACit2
YXIgU3RhdGlzdGljcyA9Cit7CisgICAgc2FtcGxlTWVhbjogZnVuY3Rpb24obnVtYmVyT2ZTYW1w
bGVzLCBzdW0pCisgICAgeworICAgICAgICBpZiAobnVtYmVyT2ZTYW1wbGVzIDwgMSkKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gc3VtIC8gbnVtYmVyT2ZTYW1wbGVzOwor
ICAgIH0sCisgICAgCisgICAgc2FtcGxlU3RhbmRhcmREZXZpYXRpb246IGZ1bmN0aW9uKG51bWJl
ck9mU2FtcGxlcywgc3VtLCBzcXVhcmVTdW0pCisgICAgeworICAgICAgICBpZiAobnVtYmVyT2ZT
YW1wbGVzIDwgMikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTWF0aC5z
cXJ0KChzcXVhcmVTdW0gLSBzdW0gKiBzdW0gLyBudW1iZXJPZlNhbXBsZXMpIC8gKG51bWJlck9m
U2FtcGxlcyAtIDEpKSA7CisgICAgfSwKKyAgICAKKyAgICBnZW9tZXRyaWNNZWFuOiBmdW5jdGlv
bih2YWx1ZXMpCisgICAgeworICAgICAgICBpZiAoIXZhbHVlcy5sZW5ndGgpCisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgdmFyIHJvb3RzID0gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1
ZSkgeyByZXR1cm4gIE1hdGgucG93KHZhbHVlLCAxIC8gdmFsdWVzLmxlbmd0aCk7IH0pCisgICAg
ICAgIHJldHVybiByb290cy5yZWR1Y2UoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSAqIGI7IH0p
OworICAgIH0sCisgICAgCisgICAgLy8gU2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kv
U3R1ZGVudCdzX3QtZGlzdHJpYnV0aW9uI1RhYmxlX29mX3NlbGVjdGVkX3ZhbHVlcworICAgIC8v
IFRoaXMgdGFibGUgY29udGFpbnMgb25lIHNpZGVkIChhLmsuYS4gdGFpbCkgdmFsdWVzLgorICAg
IHREaXN0cmlidXRpb25JbnZlcnNlQ0RGOiB7CisgICAgICAgIDAuOTogWworICAgICAgICAgICAg
My4wNzc2ODQsIDEuODg1NjE4LCAxLjYzNzc0NCwgMS41MzMyMDYsIDEuNDc1ODg0LCAxLjQzOTc1
NiwgMS40MTQ5MjQsIDEuMzk2ODE1LCAxLjM4MzAyOSwgMS4zNzIxODQsCisgICAgICAgICAgICAx
LjM2MzQzMCwgMS4zNTYyMTcsIDEuMzUwMTcxLCAxLjM0NTAzMCwgMS4zNDA2MDYsIDEuMzM2NzU3
LCAxLjMzMzM3OSwgMS4zMzAzOTEsIDEuMzI3NzI4LCAxLjMyNTM0MSwKKyAgICAgICAgICAgIDEu
MzIzMTg4LCAxLjMyMTIzNywgMS4zMTk0NjAsIDEuMzE3ODM2LCAxLjMxNjM0NSwgMS4zMTQ5NzIs
IDEuMzEzNzAzLCAxLjMxMjUyNywgMS4zMTE0MzQsIDEuMzEwNDE1LAorICAgICAgICAgICAgMS4z
MDk0NjQsIDEuMzA4NTczLCAxLjMwNzczNywgMS4zMDY5NTIsIDEuMzA2MjEyLCAxLjMwNTUxNCwg
MS4zMDQ4NTQsIDEuMzA0MjMwLCAxLjMwMzYzOSwgMS4zMDMwNzcsCisgICAgICAgICAgICAxLjMw
MjU0MywgMS4zMDIwMzUsIDEuMzAxNTUyLCAxLjMwMTA5MCwgMS4zMDA2NDksIDEuMzAwMjI4LCAx
LjI5OTgyNSwgMS4yOTk0MzksIDEuMjk5MDY5LCAxLjI5ODcxNCwKKworICAgICAgICAgICAgMS4y
OTgzNzMsIDEuMjk4MDQ1LCAxLjI5NzczMCwgMS4yOTc0MjYsIDEuMjk3MTM0LCAxLjI5Njg1Mywg
MS4yOTY1ODEsIDEuMjk2MzE5LCAxLjI5NjA2NiwgMS4yOTU4MjEsCisgICAgICAgICAgICAxLjI5
NTU4NSwgMS4yOTUzNTYsIDEuMjk1MTM0LCAxLjI5NDkyMCwgMS4yOTQ3MTIsIDEuMjk0NTExLCAx
LjI5NDMxNSwgMS4yOTQxMjYsIDEuMjkzOTQyLCAxLjI5Mzc2MywKKyAgICAgICAgICAgIDEuMjkz
NTg5LCAxLjI5MzQyMSwgMS4yOTMyNTYsIDEuMjkzMDk3LCAxLjI5Mjk0MSwgMS4yOTI3OTAsIDEu
MjkyNjQzLCAxLjI5MjUwMCwgMS4yOTIzNjAsIDEuMjkyMjI0LAorICAgICAgICAgICAgMS4yOTIw
OTEsIDEuMjkxOTYxLCAxLjI5MTgzNSwgMS4yOTE3MTEsIDEuMjkxNTkxLCAxLjI5MTQ3MywgMS4y
OTEzNTgsIDEuMjkxMjQ2LCAxLjI5MTEzNiwgMS4yOTEwMjksCisgICAgICAgICAgICAxLjI5MDky
NCwgMS4yOTA4MjEsIDEuMjkwNzIxLCAxLjI5MDYyMywgMS4yOTA1MjcsIDEuMjkwNDMyLCAxLjI5
MDM0MCwgMS4yOTAyNTAsIDEuMjkwMTYxLCAxLjI5MDA3NV0sCisgICAgICAgIDAuOTU6IFsKKyAg
ICAgICAgICAgIDYuMzEzNzUyLCAyLjkxOTk4NiwgMi4zNTMzNjMsIDIuMTMxODQ3LCAyLjAxNTA0
OCwgMS45NDMxODAsIDEuODk0NTc5LCAxLjg1OTU0OCwgMS44MzMxMTMsIDEuODEyNDYxLAorICAg
ICAgICAgICAgMS43OTU4ODUsIDEuNzgyMjg4LCAxLjc3MDkzMywgMS43NjEzMTAsIDEuNzUzMDUw
LCAxLjc0NTg4NCwgMS43Mzk2MDcsIDEuNzM0MDY0LCAxLjcyOTEzMywgMS43MjQ3MTgsCisgICAg
ICAgICAgICAxLjcyMDc0MywgMS43MTcxNDQsIDEuNzEzODcyLCAxLjcxMDg4MiwgMS43MDgxNDEs
IDEuNzA1NjE4LCAxLjcwMzI4OCwgMS43MDExMzEsIDEuNjk5MTI3LCAxLjY5NzI2MSwKKyAgICAg
ICAgICAgIDEuNjk1NTE5LCAxLjY5Mzg4OSwgMS42OTIzNjAsIDEuNjkwOTI0LCAxLjY4OTU3Miwg
MS42ODgyOTgsIDEuNjg3MDk0LCAxLjY4NTk1NCwgMS42ODQ4NzUsIDEuNjgzODUxLAorICAgICAg
ICAgICAgMS42ODI4NzgsIDEuNjgxOTUyLCAxLjY4MTA3MSwgMS42ODAyMzAsIDEuNjc5NDI3LCAx
LjY3ODY2MCwgMS42Nzc5MjcsIDEuNjc3MjI0LCAxLjY3NjU1MSwgMS42NzU5MDUsCisKKyAgICAg
ICAgICAgIDEuNjc1Mjg1LCAxLjY3NDY4OSwgMS42NzQxMTYsIDEuNjczNTY1LCAxLjY3MzAzNCwg
MS42NzI1MjIsIDEuNjcyMDI5LCAxLjY3MTU1MywgMS42NzEwOTMsIDEuNjcwNjQ5LAorICAgICAg
ICAgICAgMS42NzAyMTksIDEuNjY5ODA0LCAxLjY2OTQwMiwgMS42NjkwMTMsIDEuNjY4NjM2LCAx
LjY2ODI3MSwgMS42Njc5MTYsIDEuNjY3NTcyLCAxLjY2NzIzOSwgMS42NjY5MTQsCisgICAgICAg
ICAgICAxLjY2NjYwMCwgMS42NjYyOTQsIDEuNjY1OTk2LCAxLjY2NTcwNywgMS42NjU0MjUsIDEu
NjY1MTUxLCAxLjY2NDg4NSwgMS42NjQ2MjUsIDEuNjY0MzcxLCAxLjY2NDEyNSwKKyAgICAgICAg
ICAgIDEuNjYzODg0LCAxLjY2MzY0OSwgMS42NjM0MjAsIDEuNjYzMTk3LCAxLjY2Mjk3OCwgMS42
NjI3NjUsIDEuNjYyNTU3LCAxLjY2MjM1NCwgMS42NjIxNTUsIDEuNjYxOTYxLAorICAgICAgICAg
ICAgMS42NjE3NzEsIDEuNjYxNTg1LCAxLjY2MTQwNCwgMS42NjEyMjYsIDEuNjYxMDUyLCAxLjY2
MDg4MSwgMS42NjA3MTUsIDEuNjYwNTUxLCAxLjY2MDM5MSwgMS42NjAyMzRdLAorICAgICAgICAw
Ljk3NTogWworICAgICAgICAgICAgMTIuNzA2MjA1LCA0LjMwMjY1MywgMy4xODI0NDYsIDIuNzc2
NDQ1LCAyLjU3MDU4MiwgMi40NDY5MTIsIDIuMzY0NjI0LCAyLjMwNjAwNCwgMi4yNjIxNTcsIDIu
MjI4MTM5LAorICAgICAgICAgICAgMi4yMDA5ODUsIDIuMTc4ODEzLCAyLjE2MDM2OSwgMi4xNDQ3
ODcsIDIuMTMxNDUwLCAyLjExOTkwNSwgMi4xMDk4MTYsIDIuMTAwOTIyLCAyLjA5MzAyNCwgMi4w
ODU5NjMsCisgICAgICAgICAgICAyLjA3OTYxNCwgMi4wNzM4NzMsIDIuMDY4NjU4LCAyLjA2Mzg5
OSwgMi4wNTk1MzksIDIuMDU1NTI5LCAyLjA1MTgzMSwgMi4wNDg0MDcsIDIuMDQ1MjMwLCAyLjA0
MjI3MiwKKyAgICAgICAgICAgIDIuMDM5NTEzLCAyLjAzNjkzMywgMi4wMzQ1MTUsIDIuMDMyMjQ1
LCAyLjAzMDEwOCwgMi4wMjgwOTQsIDIuMDI2MTkyLCAyLjAyNDM5NCwgMi4wMjI2OTEsIDIuMDIx
MDc1LAorICAgICAgICAgICAgMi4wMTk1NDEsIDIuMDE4MDgyLCAyLjAxNjY5MiwgMi4wMTUzNjgs
IDIuMDE0MTAzLCAyLjAxMjg5NiwgMi4wMTE3NDEsIDIuMDEwNjM1LCAyLjAwOTU3NSwgMi4wMDg1
NTksCisKKyAgICAgICAgICAgIDIuMDA3NTg0LCAyLjAwNjY0NywgMi4wMDU3NDYsIDIuMDA0ODc5
LCAyLjAwNDA0NSwgMi4wMDMyNDEsIDIuMDAyNDY1LCAyLjAwMTcxNywgMi4wMDA5OTUsIDIuMDAw
Mjk4LAorICAgICAgICAgICAgMS45OTk2MjQsIDEuOTk4OTcyLCAxLjk5ODM0MSwgMS45OTc3MzAs
IDEuOTk3MTM4LCAxLjk5NjU2NCwgMS45OTYwMDgsIDEuOTk1NDY5LCAxLjk5NDk0NSwgMS45OTQ0
MzcsCisgICAgICAgICAgICAxLjk5Mzk0MywgMS45OTM0NjQsIDEuOTkyOTk3LCAxLjk5MjU0Mywg
MS45OTIxMDIsIDEuOTkxNjczLCAxLjk5MTI1NCwgMS45OTA4NDcsIDEuOTkwNDUwLCAxLjk5MDA2
MywKKyAgICAgICAgICAgIDEuOTg5Njg2LCAxLjk4OTMxOSwgMS45ODg5NjAsIDEuOTg4NjEwLCAx
Ljk4ODI2OCwgMS45ODc5MzQsIDEuOTg3NjA4LCAxLjk4NzI5MCwgMS45ODY5NzksIDEuOTg2Njc1
LAorICAgICAgICAgICAgMS45ODYzNzcsIDEuOTg2MDg2LCAxLjk4NTgwMiwgMS45ODU1MjMsIDEu
OTg1MjUxLCAxLjk4NDk4NCwgMS45ODQ3MjMsIDEuOTg0NDY3LCAxLjk4NDIxNywgMS45ODM5NzJd
LAorICAgICAgICAwLjk5OiBbCisgICAgICAgICAgICAzMS44MjA1MTYsIDYuOTY0NTU3LCA0LjU0
MDcwMywgMy43NDY5NDcsIDMuMzY0OTMwLCAzLjE0MjY2OCwgMi45OTc5NTIsIDIuODk2NDU5LCAy
LjgyMTQzOCwgMi43NjM3NjksCisgICAgICAgICAgICAyLjcxODA3OSwgMi42ODA5OTgsIDIuNjUw
MzA5LCAyLjYyNDQ5NCwgMi42MDI0ODAsIDIuNTgzNDg3LCAyLjU2NjkzNCwgMi41NTIzODAsIDIu
NTM5NDgzLCAyLjUyNzk3NywKKyAgICAgICAgICAgIDIuNTE3NjQ4LCAyLjUwODMyNSwgMi40OTk4
NjcsIDIuNDkyMTU5LCAyLjQ4NTEwNywgMi40Nzg2MzAsIDIuNDcyNjYwLCAyLjQ2NzE0MCwgMi40
NjIwMjEsIDIuNDU3MjYyLAorICAgICAgICAgICAgMi40NTI4MjQsIDIuNDQ4Njc4LCAyLjQ0NDc5
NCwgMi40NDExNTAsIDIuNDM3NzIzLCAyLjQzNDQ5NCwgMi40MzE0NDcsIDIuNDI4NTY4LCAyLjQy
NTg0MSwgMi40MjMyNTcsCisgICAgICAgICAgICAyLjQyMDgwMywgMi40MTg0NzAsIDIuNDE2MjUw
LCAyLjQxNDEzNCwgMi40MTIxMTYsIDIuNDEwMTg4LCAyLjQwODM0NSwgMi40MDY1ODEsIDIuNDA0
ODkyLCAyLjQwMzI3MiwKKworICAgICAgICAgICAgMi40MDE3MTgsIDIuNDAwMjI1LCAyLjM5ODc5
MCwgMi4zOTc0MTAsIDIuMzk2MDgxLCAyLjM5NDgwMSwgMi4zOTM1NjgsIDIuMzkyMzc3LCAyLjM5
MTIyOSwgMi4zOTAxMTksCisgICAgICAgICAgICAyLjM4OTA0NywgMi4zODgwMTEsIDIuMzg3MDA4
LCAyLjM4NjAzNywgMi4zODUwOTcsIDIuMzg0MTg2LCAyLjM4MzMwMiwgMi4zODI0NDYsIDIuMzgx
NjE1LCAyLjM4MDgwNywKKyAgICAgICAgICAgIDIuMzgwMDI0LCAyLjM3OTI2MiwgMi4zNzg1MjIs
IDIuMzc3ODAyLCAyLjM3NzEwMiwgMi4zNzY0MjAsIDIuMzc1NzU3LCAyLjM3NTExMSwgMi4zNzQ0
ODIsIDIuMzczODY4LAorICAgICAgICAgICAgMi4zNzMyNzAsIDIuMzcyNjg3LCAyLjM3MjExOSwg
Mi4zNzE1NjQsIDIuMzcxMDIyLCAyLjM3MDQ5MywgMi4zNjk5NzcsIDIuMzY5NDcyLCAyLjM2ODk3
OSwgMi4zNjg0OTcsCisgICAgICAgICAgICAyLjM2ODAyNiwgMi4zNjc1NjYsIDIuMzY3MTE1LCAy
LjM2NjY3NCwgMi4zNjYyNDMsIDIuMzY1ODIxLCAyLjM2NTQwNywgMi4zNjUwMDIsIDIuMzY0NjA2
LCAyLjM2NDIxN10KKyAgICB9LAorICAgIAorICAgIGNvbmZpZGVuY2VJbnRlcnZhbERlbHRhOiBm
dW5jdGlvbihudW1iZXJPZlNhbXBsZXMsIHN1bSwgc3F1YXJlU3VtLCBjb25maWRlbmNlTGV2ZWwp
CisgICAgeworICAgICAgICBpZiAobnVtYmVyT2ZTYW1wbGVzIDwgMikKKyAgICAgICAgICAgIHJl
dHVybiBOYU47CisgICAgCisgICAgICAgIHZhciBwcm9iYWJpbGl0eSA9ICgxMDAgLSAyICogKDEw
MCAtIGNvbmZpZGVuY2VMZXZlbCkpIC8gMTAwOworICAgICAgICBpZiAoIShwcm9iYWJpbGl0eSBp
biBTdGF0aXN0aWNzLnREaXN0cmlidXRpb25JbnZlcnNlQ0RGKSkKKyAgICAgICAgICAgIHRocm93
ICdVbnN1cHBvcnRlZCBjb25maWRlbmNlIGxldmVsJzsKKworICAgICAgICB2YXIgY2RmRm9yUHJv
YmFiaWxpdHkgPSBTdGF0aXN0aWNzLnREaXN0cmlidXRpb25JbnZlcnNlQ0RGW3Byb2JhYmlsaXR5
XTsKKyAgICAgICAgdmFyIGRlZ3JlZXNPZkZyZWVkb20gPSBNYXRoLm1pbihudW1iZXJPZlNhbXBs
ZXMgLSAxLCBjZGZGb3JQcm9iYWJpbGl0eS5sZW5ndGgpOworICAgIAorICAgICAgICB2YXIgcXVh
bnRpbGUgPSBjZGZGb3JQcm9iYWJpbGl0eVtkZWdyZWVzT2ZGcmVlZG9tIC0gMV07IC8vIFRoZSBm
aXJzdCBlbnRyeSBpcyBmb3IgdGhlIG9uZSBkZWdyZWUgb2YgZnJlZWRvbS4KKyAgICAgICAgcmV0
dXJuIHF1YW50aWxlICogU3RhdGlzdGljcy5zYW1wbGVTdGFuZGFyZERldmlhdGlvbihudW1iZXJP
ZlNhbXBsZXMsIHN1bSwgc3F1YXJlU3VtKSAvIE1hdGguc3FydChudW1iZXJPZlNhbXBsZXMpOwor
ICAgIH0KK30KKworZnVuY3Rpb24gRXhwZXJpbWVudCgpCit7CisgICAgdGhpcy5faW5pdCgpOwor
ICAgIHRoaXMuX21heEhlYXAgPSBBbGdvcml0aG0uY3JlYXRlTWF4SGVhcChFeHBlcmltZW50LmRl
ZmF1bHRzLkNPTkNFUk5fU0laRSk7Cit9CisKK0V4cGVyaW1lbnQuZGVmYXVsdHMgPQoreworICAg
IENPTkNFUk46IDUsCisgICAgQ09ORklERU5DRTogOTUsCisgICAgQ09OQ0VSTl9TSVpFOiAxMDAs
Cit9CisKK0V4cGVyaW1lbnQucHJvdG90eXBlID0KK3sKKyAgICBfaW5pdDogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgdGhpcy5fc3VtID0gMDsKKyAgICAgICAgdGhpcy5fc3F1YXJlU3VtID0g
MDsKKyAgICAgICAgdGhpcy5fbnVtYmVyT2ZTYW1wbGVzID0gMDsKKyAgICB9LAorICAgIAorICAg
IC8vIENhbGxlZCBhZnRlciBhIHdhcm0tdXAgcGVyaW9kCisgICAgc3RhcnRTYW1wbGluZzogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIG1lYW4gPSB0aGlzLm1lYW4oKTsKKyAgICAgICAg
dGhpcy5faW5pdCgpOworICAgICAgICB0aGlzLl9tYXhIZWFwLmluaXQoKTsKKyAgICAgICAgdGhp
cy5zYW1wbGUobWVhbik7CisgICAgfSwKKyAgICAKKyAgICBzYW1wbGU6IGZ1bmN0aW9uKHZhbHVl
KQorICAgIHsKKyAgICAgICAgdGhpcy5fc3VtICs9IHZhbHVlOworICAgICAgICB0aGlzLl9zcXVh
cmVTdW0gKz0gdmFsdWUgKiB2YWx1ZTsKKyAgICAgICAgdGhpcy5fbWF4SGVhcC5wdXNoKHZhbHVl
KTsKKyAgICAgICAgKyt0aGlzLl9udW1iZXJPZlNhbXBsZXM7CisgICAgfSwKKyAgICAKKyAgICBt
ZWFuOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gU3RhdGlzdGljcy5zYW1wbGVN
ZWFuKHRoaXMuX251bWJlck9mU2FtcGxlcywgdGhpcy5fc3VtKTsKKyAgICB9LAorICAgIAorICAg
IHN0YW5kYXJkRGV2aWF0aW9uOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gU3Rh
dGlzdGljcy5zYW1wbGVTdGFuZGFyZERldmlhdGlvbih0aGlzLl9udW1iZXJPZlNhbXBsZXMsIHRo
aXMuX3N1bSwgdGhpcy5fc3F1YXJlU3VtKTsKKyAgICB9LAorICAgIAorICAgIHBlcmNlbnRhZ2U6
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBtZWFuID0gdGhpcy5tZWFuKCk7CisgICAg
ICAgIHJldHVybiBtZWFuID8gdGhpcy5zdGFuZGFyZERldmlhdGlvbigpICogMTAwIC8gbWVhbiA6
IDA7CisgICAgfSwKKyAgICAKKyAgICBjb25maWRlbmNlSW50ZXJ2YWxEZWx0YTogZnVuY3Rpb24o
Y29uZmlkZW5jZUxldmVsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0YXRpc3RpY3MuY29uZmlk
ZW5jZUludGVydmFsRGVsdGEodGhpcy5fbnVtYmVyT2ZTYW1wbGVzLCB0aGlzLl9zdW0sIHRoaXMu
X3NxdWFyZVN1bSwgY29uZmlkZW5jZUxldmVsKQorICAgIH0sCisgICAgCisgICAgY29uY2Vybjog
ZnVuY3Rpb24ocGVyY2VudGFnZSkKKyAgICB7CisgICAgICAgIHZhciBzaXplID0gTWF0aC5jZWls
KHRoaXMuX251bWJlck9mU2FtcGxlcyAqIHBlcmNlbnRhZ2UgLyAxMDApOworICAgICAgICB2YXIg
dmFsdWVzID0gdGhpcy5fbWF4SGVhcC52YWx1ZXMoc2l6ZSk7CisgICAgICAgIHJldHVybiB2YWx1
ZXMubGVuZ3RoID8gdmFsdWVzLnJlZHVjZShmdW5jdGlvbihhLCBiKSB7IHJldHVybiBhICsgYjsg
fSkgLyB2YWx1ZXMubGVuZ3RoIDogMDsKKyAgICB9LAorICAgIAorICAgIHNjb3JlOiBmdW5jdGlv
bihwZXJjZW50YWdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0YXRpc3RpY3MuZ2VvbWV0cmlj
TWVhbihbdGhpcy5tZWFuKCksIE1hdGgubWF4KHRoaXMuY29uY2VybihwZXJjZW50YWdlKSwgMSld
KTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIFNhbXBsZXIoY291bnQpCit7CisgICAgdGhpcy5leHBl
cmltZW50cyA9IFtdOworICAgIHdoaWxlIChjb3VudC0tKQorICAgICAgICB0aGlzLmV4cGVyaW1l
bnRzLnB1c2gobmV3IEV4cGVyaW1lbnQoKSk7CisgICAgdGhpcy5zYW1wbGVzID0gW107CisgICAg
dGhpcy5zYW1wbGluZ1RpbWVPZmZzZXQgPSAwOworfQorCitTYW1wbGVyLnByb3RvdHlwZSA9Cit7
CisgICAgc3RhcnRTYW1wbGluZzogZnVuY3Rpb24odGltZU9mZnNldCkKKyAgICB7CisgICAgICAg
IGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmV4cGVyaW1lbnRzLmxlbmd0aDsgKytp
bmRleCkKKyAgICAgICAgICAgIHRoaXMuZXhwZXJpbWVudHNbaW5kZXhdLnN0YXJ0U2FtcGxpbmco
KTsKKyAgICAgICAgICAgIAorICAgICAgICB0aGlzLnNhbXBsaW5nVGltZU9mZnNldCA9IHRpbWVP
ZmZzZXQgLyAxMDAwOworICAgIH0sCisgICAgCisgICAgc2FtcGxlOiBmdW5jdGlvbih0aW1lT2Zm
c2V0LCB2YWx1ZXMpCisgICAgeworICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA8IHRoaXMuZXhw
ZXJpbWVudHMubGVuZ3RoKQorICAgICAgICAgICAgdGhyb3cgIk5vdCBlbm91Z2ggc2FtcGxlIHBv
aW50cyI7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7
IGluZGV4IDwgdGhpcy5leHBlcmltZW50cy5sZW5ndGg7ICsraW5kZXgpCisgICAgICAgICAgICB0
aGlzLmV4cGVyaW1lbnRzW2luZGV4XS5zYW1wbGUodmFsdWVzW2luZGV4XSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgdGhpcy5zYW1wbGVzLnB1c2goeyB0aW1lT2Zmc2V0OiB0aW1lT2Zmc2V0IC8g
MTAwMCwgdmFsdWVzOiB2YWx1ZXMgfSk7CisgICAgfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262302</attachid>
            <date>2015-10-01 17:15:27 -0700</date>
            <delta_ts>2015-10-02 18:09:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149691-20151001171501.patch</filename>
            <type>text/plain</type>
            <size>34675</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTA0MzkpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBACisyMDE1LTEwLTAxICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRk
IHNoYXJlZCBjb2RlIGZvciBhIG5ldyBhIGdyYXBoaWNzIGJlbmNobWFyaworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5NjkxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBzZXQgb2YgY2xhc3NlcyB3
aWxsIGJlIHNoYXJlZCBhbmQgdXNlZCBieSB0aGUgdGVzdHMgYW5kIHRoZSBydW5uZXIKKyAgICAg
ICAgb2YgYSBuZXcgZ3JhcGhpY3MgYmVuY2htYXJrLgorCisgICAgICAgICogQW5pbW9tZXRlcjog
QWRkZWQuCisgICAgICAgICogQW5pbW9tZXRlci9yZXNvdXJjZXM6IEFkZGVkLgorICAgICAgICAq
IEFuaW1vbWV0ZXIvcmVzb3VyY2VzL2FsZ29yaXRobS5qczogQWRkZWQuCisgICAgICAgIChBcnJh
eS5wcm90b3R5cGUuc3dhcCk6IFN3YXBzIHR3byBlbGVtZW50cyBpbiBhbiBhcnJheS4KKyAgICAg
ICAgKEhlYXApOiBCaW5hcnkgTWluL01heCBIZWFwIG9iamVjdAorICAgICAgICAoSGVhcC5wcm90
b3R5cGUuX3BhcmVudEluZGV4KTogR2l2ZW4gdGhlIGNoaWxkIG5vZGUgaW5kZXgsIGl0IHJldHVy
bnMgdGhlIHBhcmVudCBpbmRleC4KKyAgICAgICAgKEhlYXAucHJvdG90eXBlLl9sZWZ0SW5kZXgp
OiBHaXZlbiB0aGUgcGFyZW50IG5vZGUgaW5kZXgsIGl0IHJldHVybnMgdGhlIGxlZnQgbm9kZSBp
bmRleC4KKyAgICAgICAgKEhlYXAucHJvdG90eXBlLl9yaWdodEluZGV4KTogR2l2ZW4gdGhlIHBh
cmVudCBub2RlIGluZGV4LCBpdCByZXR1cm5zIHRoZSByaWdodCBub2RlIGluZGV4LgorICAgICAg
ICAoSGVhcC5wcm90b3R5cGUuX2NoaWxkSW5kZXgpOiBHaXZlbiB0aGUgcGFyZW50IG5vZGUgaW5k
ZXgsIGl0IHJldHVybnMgdGhlIGNoaWxkIGluZGV4IHRoYXQgbWF5IHZpb2xhdGUgdGhlIGhlYXAg
cHJvcGVydHkuCisgICAgICAgIChIZWFwLnByb3RvdHlwZS5pbml0KTogSW5pdGlhbGl6ZXMgdGhl
IGhlYXAgc3RhdGUuCisgICAgICAgIChIZWFwLnByb3RvdHlwZS50b3ApOiBSZXR1cm5zIHRoZSB2
YWx1ZSBzdG9yZWQgYXQgdGhlIHRvcCBvZiB0aGUgaGVhcC4KKyAgICAgICAgKEhlYXAucHJvdG90
eXBlLnB1c2gpOiBQdXNoZXMgYSBuZXcgbm9kZSBhdCB0aGUgdG9wIG9mIHRoZSBoZWFwLgorICAg
ICAgICAoSGVhcC5wcm90b3R5cGUucG9wKTogRXh0cmFjdHMgdGhlIHRvcCBub2RlIG9mIHRoZSBo
ZWFwLgorICAgICAgICAoSGVhcC5wcm90b3R5cGUuX2J1YmJsZSk6IEZpeGVzIHRoZSBoZWFwIHBy
b3BlcnR5IGJ5IG1vdmluZyB1cHdhcmQuCisgICAgICAgIChIZWFwLnByb3RvdHlwZS5fc2luayk6
IEZpeGVzIHRoZSBoZWFwIHByb3BlcnR5IGJ5IG1vdmluZyBkb3dud2FyZC4KKyAgICAgICAgKEhl
YXAucHJvdG90eXBlLnN0cik6IFByaW50cyB0aGUgbm9kZXMgb2YgdGhlIGhlYXAgdG8gYSBzdHJp
bmcuCisgICAgICAgIChIZWFwLnByb3RvdHlwZS52YWx1ZXMpOiBSZXR1cm5zIHRoZSBsYXN0ICJz
aXplIiBoZWFwIGVsZW1lbnRzIHZhbHVlcy4KKyAgICAgICAgCisgICAgICAgIChBbGdvcml0aG0u
Y3JlYXRlTWluSGVhcCk6IENyZWF0ZXMgYSBzaXplLWJvdW5kZWQgbWluLWhlYXAgb2JqZWN0Lgor
ICAgICAgICAoQWxnb3JpdGhtLmNyZWF0ZU1heEhlYXApOiBDcmVhdGVzIGEgc2l6ZS1ib3VuZGVk
IG1heC1oZWFwIG9iamVjdC4KKyAgICAgICAgCisgICAgICAgICogQW5pbW9tZXRlci9yZXNvdXJj
ZXMvZXh0ZW5zaW9ucy5qczogQWRkZWQuCisgICAgICAgIChQb2ludCk6IFBvaW50IG9iamVjdCBi
dXQgY2FuIGJlIHVzZWQgYXMgc2l6ZSBhbHNvLgorICAgICAgICAoUG9pbnQucG9pbnRPbkNpcmNs
ZSk6IEdpdmVuLCB0aGUgcmFkaXVzIG9mIHRoZSBjaXJjbGUgYW5kIHRoZSBhbmdsZSBvZiB0aGUg
cG9pbnQsIGl0IHJldHVybnMgYSBwb2ludCBvYmplY3QuCisgICAgICAgIChQb2ludC5wb2ludE9u
RWxsaXBzZSk6IEdpdmVuLCB0aGUgcmFkaXVzZXMgb2YgdGhlIGVsbGlwc2UgYW5kIHRoZSBhbmds
ZSBvZiB0aGUgcG9pbnQsIGl0IHJldHVybnMgYSBwb2ludCBvYmplY3QuCisgICAgICAgIChQb2lu
dC5wcm90b3R5cGUuZ2V0IHdpZHRoKTogU2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBwb2ludCBp
cyB1c2VkIGFzIHNpemUuCisgICAgICAgIChQb2ludC5wcm90b3R5cGUuZ2V0IGhlaWdodCk6IFNo
b3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgcG9pbnQgaXMgdXNlZCBhcyBzaXplLgorICAgICAgICAo
UG9pbnQucHJvdG90eXBlLmdldCBjZW50ZXIpOiBTaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIHBv
aW50IGlzIHVzZWQgYXMgc2l6ZS4KKyAgICAgICAgKFBvaW50LnByb3RvdHlwZS5hZGQpOiBSZXR1
cm5zIGEgbmV3IHBvaW50ID0gdGhpcyArIG90aGVyLgorICAgICAgICAoUG9pbnQucHJvdG90eXBl
LnN1YnRyYWN0KTogUmV0dXJucyBhIG5ldyBwb2ludCA9IHRoaXMgLSBvdGhlci4KKyAgICAgICAg
KFBvaW50LnByb3RvdHlwZS5tdWx0aXBseSk6IFJldHVybnMgYSBuZXcgcG9pbnQgPSB0aGlzICog
b3RoZXIuCisgICAgICAgIChQb2ludC5wcm90b3R5cGUubW92ZSk6IE1vdmVzIHRoZSBwb2ludCBp
biBhIGdpdmVuIGRpcmVjdGlvbiwgdmVsb2NpdHksIHRpbWUgcGVyaW9kLgorICAgICAgICAKKyAg
ICAgICAgKEluc2V0cyk6IFJlcHJlc2VudHMgYm9yZGVycyBvZiBhIGNvbnRhaW5lci4KKyAgICAg
ICAgKEluc2V0cy5wcm90b3R5cGUuZ2V0IHdpZHRoKTogUmV0dXJucyBsZWZ0ICsgcmlnaHQuCisg
ICAgICAgIChJbnNldHMucHJvdG90eXBlLmdldCBoZWlnaHQpOiBSZXR1cm5zIHRvcCArIGJvdHRv
bS4KKyAgICAgICAgCisgICAgICAgIChTaW1wbGVQcm9taXNlKToKKyAgICAgICAgKFNpbXBsZVBy
b21pc2UucHJvdG90eXBlLnRoZW4pOgorICAgICAgICAoU2ltcGxlUHJvbWlzZS5wcm90b3R5cGUu
cmVzb2x2ZSk6CisgICAgICAgIE1vdmVkIGZyb20gQW5pbW9tZXRlci9ydW5uZXIvcmVzb3VyY2Vz
L2JlbmNobWFyay1ydW5uZXIuanMgc2luY2UgdGVzdHMgYWxzbyBuZWVkIGl0LgorICAgICAgICAK
KyAgICAgICAgKE9wdGlvbnMpOiBCZW5jaG1hcmsgcnVubmluZyBvcHRpb25zIGFzIHRoZXkgYXJl
IHNldCBieSB0aGUgdXNlci4KKworICAgICAgICAoUHJvZ3Jlc3NCYXIpOiBNYW5hZ2VzIGEgcHJv
Z3Jlc3MgYmFyIGVsZW1lbnQuIFRoZSBwcm9ncmVzcyBiYXIgaXMgZGl2aWRlZCBpbnRvIGVxdWFs
IGxlbmd0aCByYW5nZXMuCisgICAgICAgIChQcm9ncmVzc0Jhci5wcm90b3R5cGUuX3Byb2dyZXNz
VG9QZXJjZW50KTogQ29udmVydHMgdGhlIHByb2dyZXNzIGludG8gYSBwZXJjZW50YWdlLgorICAg
ICAgICAoUHJvZ3Jlc3NCYXIucHJvdG90eXBlLmluY1JhbmdlKTogTW92ZXMgdG8gdGhlIG5leHQg
cmFuZ2UgKGEgcmFuZ2UgaXMgdGhlIHJ1bm5pbmcgdGltZSBvZiBhIHNpbmdsZSB0ZXN0KS4KKyAg
ICAgICAgKFByb2dyZXNzQmFyLnByb3RvdHlwZS5zZXRQb3MpOiBEcmF3cyB0aGUgY3VycmVudCBw
cm9ncmVzcyBpbiB0aGUgY3VycmVudCByYW5nZS4KKyAgICAgICAgCisgICAgICAgIChSZWNvcmRU
YWJsZSk6IFNob3dzIHRoZSByZXN1bHRzIG9mIHJ1bm5pbmcgYSBiZW5jaG1hcmsgaW4gYSB0YWJ1
bGFyIGZvcm0uCisgICAgICAgIChSZWNvcmRUYWJsZS5wcm90b3R5cGUuY2xlYXIpOiBDbGVhcnMg
dGhlIHJlc3VsdHMgdGFibGUuCisgICAgICAgIChSZWNvcmRUYWJsZS5wcm90b3R5cGUuX3Nob3dU
aXRsZXMpOiBTaG93cyB0aGUgaGVhZGVyIHRpdGxlcyBhbmQgYXBwZW5kcyB0aGUgc3ViLXRpdGxl
cyB0byBhIHF1ZXVlLgorICAgICAgICAoUmVjb3JkVGFibGUucHJvdG90eXBlLl9zaG93SGVhZGVy
KTogU2hvd3MgdGhlIHRhYmxlIGhlYWRlciB0aXRsZXMuCisgICAgICAgIChSZWNvcmRUYWJsZS5w
cm90b3R5cGUuX3Nob3dFbXB0eSk6IFNob3dzIGFuIGVtcHR5IHRhYmxlIGNlbGwuCisgICAgICAg
IChSZWNvcmRUYWJsZS5wcm90b3R5cGUuX3Nob3dWYWx1ZSk6IFNob3dzIGEgbnVtYmVyIHZhbHVl
IGluIHRoZSByZXN1bHRzIHRhYmxlLgorICAgICAgICAoUmVjb3JkVGFibGUucHJvdG90eXBlLl9z
aG93U2FtcGxlcyk6IFNob3dzIGEgYnV0dG9uIGZvciB0aGUgc2FtcGxlZCBkYXRhIGdyYXBoLgor
ICAgICAgICAoUmVjb3JkVGFibGUucHJvdG90eXBlLl9zaG93VGVzdCk6IFNob3dzIHRoZSByZXN1
bHRzIG9mIGEgc2luZ2xlIHRlc3QuCisgICAgICAgIChSZWNvcmRUYWJsZS5wcm90b3R5cGUuX3No
b3dTdWl0ZSk6IFNob3dzIHRoZSByZXN1bHRzIG9mIGEgc2luZ2xlIHN1aXRlLgorICAgICAgICAo
UmVjb3JkVGFibGUucHJvdG90eXBlLnNob3dSZWNvcmQpOiBTaG93cyBhIHNpbmdsZSBpdGVyYXRp
b24gZm9yIGEgc2luZ2xlIHRlc3QuCisgICAgICAgIChSZWNvcmRUYWJsZS5wcm90b3R5cGUuc2hv
d0l0ZXJhdGlvbnMpOiBTaG93cyB0aGUgcmVzdWx0cyBvZiBhbGwgdGhlIHN1aXRlcyBvZiB0aGUg
aXRlcmF0aW9ucy4gCisgICAgICAgIAorICAgICAgICAqIEFuaW1vbWV0ZXIvcmVzb3VyY2VzL3Nh
bXBsZXIuanM6IEFkZGVkLgorICAgICAgICAoRXhwZXJpbWVudCk6IFJlcHJlc2VudHMgYSBzYW1w
bGluZyBleHBlcmltZW50LiAKKyAgICAgICAgKEV4cGVyaW1lbnQucHJvdG90eXBlLl9pbml0KTog
Q2FsbGVkIHdoZW4gdGhlIG9iamVjdCBpcyBjcmVhdGVkIGFuZCB3aGVuIHN0YXJ0U2FtcGxpbmco
KSBpcyBjYWxsZWQuCisgICAgICAgIChFeHBlcmltZW50LnByb3RvdHlwZS5zdGFydFNhbXBsaW5n
KTogQ2FsbGVkIGFmdGVyIHdhcm11cCBwZXJpb2QuIFJlc3RhcnRzIGNvbGxlY3Rpbmcgc2FtcGxl
ZCBkYXRhIHBvaW50cy4KKyAgICAgICAgKEV4cGVyaW1lbnQucHJvdG90eXBlLnNhbXBsZSk6IEFk
ZCBhIG5ldyBkYXRhIHBvaW50LgorICAgICAgICAoRXhwZXJpbWVudC5wcm90b3R5cGUubWVhbik6
IFJldHVybnMgdGhlIHNhbXBsZSBtZWFuIGZvciB0aGUgY3VycmVudCBzYW1wbGVkIGRhdGEgcG9p
bnRzLgorICAgICAgICAoRXhwZXJpbWVudC5wcm90b3R5cGUuc3RhbmRhcmREZXZpYXRpb24pOiBS
ZXR1cm5zIHRoZSBzYW1wbGUgc3RhbmRhcmQgZGV2aWF0aW9uIGZvciB0aGUgY3VycmVudCBzYW1w
bGVkIGRhdGEgcG9pbnRzLgorICAgICAgICAoRXhwZXJpbWVudC5wcm90b3R5cGUucGVyY2VudGFn
ZSk6IFJldHVybnMgdGhlIHBlcmNlbnRhZ2Ugb2YgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBkaXZp
ZGVkIHRvIHRoZSBtZWFuLgorICAgICAgICAoRXhwZXJpbWVudC5wcm90b3R5cGUuY29uZmlkZW5j
ZUludGVydmFsRGVsdGEpOiBDYWxjdWxhdGVzIHRoZSBjb25maWRlbmNlIGRlbHRhIGZvciB0aGUg
Y3VycmVudCBzYW1wbGVkIGRhdGEgZ2l2ZW4gYSBjb25maWRlbmNlIGxldmVsLgorICAgICAgICAo
RXhwZXJpbWVudC5wcm90b3R5cGUuY29uY2Vybik6IFJldHVybnMgdGhlIGF2ZXJhZ2Ugb2YgdGhl
IHdvcnN0IGdpdmVuIHBlcmNlbnRhZ2UgZnJvbSB0aGUgc2FtcGxlZCBkYXRhLgorICAgICAgICAo
RXhwZXJpbWVudC5wcm90b3R5cGUuc2NvcmUpOiBSZXR1cm5zIGEgc2NvcmUgZm9yIHRoZSBzYW1w
bGVkIGRhdGEuIEl0IGlzIHRoZSBnZW9tZXRyaWMgbWVhbiBvZiBzYW1wbGVNZWFuIGFuZCBjb25j
ZXJuLgorICAgICAgICAKKyAgICAgICAgKFNhbXBsZXIpOiBSZXByZXNlbnRzIGEgY29tcG91bmQg
ZXhwZXJpbWVudC4gSXQgbWFuYWdlcyBzYW1wbGluZyBtdWx0aXBsZSBkYXRhIHBvaW50cyBhdCB0
aGUgc2FtZSB0aW1lIG9mZnNldC4KKyAgICAgICAgKFNhbXBsZXIucHJvdG90eXBlLnN0YXJ0U2Ft
cGxpbmcpOiBDYWxsZWQgYWZ0ZXIgd2FybWluZyB1cCBwZXJpb2QuIFJlc3RhcnRzIGNvbGxlY3Rp
bmcgc2FtcGxlZCBkYXRhIHBvaW50cy4KKyAgICAgICAgKFNhbXBsZXIucHJvdG90eXBlLnNhbXBs
ZSk6IEFkZCBhIG5ldyBkYXRhIHZlY3RvciBhdCBhIGdpdmVuIHRpbWUgb2Zmc2V0LgorCisgICAg
ICAgICogQW5pbW9tZXRlci9yZXNvdXJjZXMvc3RhdGlzdGljcy5qczogQ29waWVkIGZyb20gUGVy
Zm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvc3RhdGlzdGljcy5qcy4KKyAgICAgICAgKFN0YXRpc3Rp
Y3MubmV3LnRoaXMuc2FtcGxlTWVhbik6IFJldHVybnMgdGhlIHNhbXBsZSBtZWFuIGZvciBhIHNl
dCBvZiBkYXRhIHBvaW50cy4KKyAgICAgICAgKFN0YXRpc3RpY3MubmV3LnRoaXMuZ2VvbWV0cmlj
TWVhbik6IFJldHVybnMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0IG9mIGRhdGEuCisgICAg
ICAgIChTdGF0aXN0aWNzLm5ldy50aGlzLmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKTogTGFzdCBl
bGVtZW50IG9mIGNkZkZvclByb2JhYmlsaXR5IGNhbiBiZSB1c2VkIGZvciBhbGwgb3RoZXIgZGVn
cmVlc09mRnJlZWRvbS4KKwogMjAxNS0wOC0yNyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFtFRkxdIFJFR1JFU1NJT04ocjE4ODc5Myk6IEl0IG1hZGUg
MjAwIGxheW91dCB0ZXN0cyBhbmQgQmluZGluZ3MvZXZlbnQtdGFyZ2V0LXdyYXBwZXIuaHRtbCBw
ZXJmb3JtYW5jZSB0ZXN0IGZhaWwKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9y
ZXNvdXJjZXMvYWxnb3JpdGhtLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQW5p
bW9tZXRlci9yZXNvdXJjZXMvYWxnb3JpdGhtLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFu
Y2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9hbGdvcml0aG0uanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNDIgQEAKK0FycmF5LnByb3RvdHlwZS5zd2FwID0gZnVuY3Rpb24oaSwgaikK
K3sKKyAgICB2YXIgdCA9IHRoaXNbaV07CisgICAgdGhpc1tpXSA9IHRoaXNbal07CisgICAgdGhp
c1tqXSA9IHQ7CisgICAgcmV0dXJuIHRoaXM7Cit9CisKK2Z1bmN0aW9uIEhlYXAobWF4U2l6ZSwg
Y29tcGFyZSkKK3sKKyAgICB0aGlzLl9tYXhTaXplID0gbWF4U2l6ZTsKKyAgICB0aGlzLl9jb21w
YXJlID0gY29tcGFyZTsKKyAgICB0aGlzLl9zaXplID0gMDsKKyAgICB0aGlzLl92YWx1ZXMgPSBu
ZXcgQXJyYXkodGhpcy5fbWF4U2l6ZSk7Cit9CisKK0hlYXAucHJvdG90eXBlID0KK3sKKyAgICAv
LyBUaGlzIGlzIGEgYmluYXJ5IGhlYXAgcmVwcmVzZW50ZWQgaW4gYW4gYXJyYXkuIFRoZSByb290
IGVsZW1lbnQgaXMgc3RvcmVkCisgICAgLy8gaW4gdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGFy
cmF5LiBUaGUgcm9vdCBpcyBmb2xsb3dlZCBieSBpdHMgdHdvIGNoaWxkcmVuLgorICAgIC8vIFRo
ZW4gaXRzIGZvdXIgZ3JhbmRjaGlsZHJlbiBhbmQgc28gb24uIFNvIGV2ZXJ5IGxldmVsIGluIHRo
ZSBiaW5hcnkgaGVhcCBpcworICAgIC8vIGRvdWJsZWQgaW4gdGhlIGZvbGxvd2luZyBsZXZlbC4g
SGVyZSBpcyBhbiBleGFtcGxlIG9mIHRoZSBub2RlIGluZGljZXMgYW5kCisgICAgLy8gaG93IHRo
ZXkgYXJlIHJlbGF0ZWQgdG8gdGhlaXIgcGFyZW50cyBhbmQgY2hpbGRyZW4uCisgICAgLy8gPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CisgICAgLy8gICAgICAgICAgICAgIDAgICAgICAgMSAgICAgICAyICAg
ICAgIDMgICAgICAgNCAgICAgICA1ICAgICAgIDYKKyAgICAvLyBQQVJFTlQgICAgICAgLTEgICAg
ICAwICAgICAgIDAgICAgICAgMSAgICAgICAxICAgICAgIDIgICAgICAgMgorICAgIC8vIExFRlQg
ICAgICAgICAxICAgICAgIDMgICAgICAgNSAgICAgICA3ICAgICAgIDkgICAgICAgMTEgICAgICAx
MworICAgIC8vIFJJR0hUICAgICAgICAyICAgICAgIDQgICAgICAgNiAgICAgICA4ICAgICAgIDEw
ICAgICAgMTIgICAgICAxNAorICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIF9wYXJlbnRJ
bmRleDogZnVuY3Rpb24oaSkKKyAgICB7CisgICAgICAgIHJldHVybiBpID4gMCA/IE1hdGguZmxv
b3IoKGkgLSAxKSAvIDIpIDogLTE7CisgICAgfSwKKyAgICAKKyAgICBfbGVmdEluZGV4OiBmdW5j
dGlvbihpKQorICAgIHsKKyAgICAgICAgdmFyIGxlZnRJbmRleCA9IGkgKiAyICsgMTsKKyAgICAg
ICAgcmV0dXJuIGxlZnRJbmRleCA8IHRoaXMuX3NpemUgPyBsZWZ0SW5kZXggOiAtMTsKKyAgICB9
LAorICAgIAorICAgIF9yaWdodEluZGV4OiBmdW5jdGlvbihpKQorICAgIHsKKyAgICAgICAgdmFy
IHJpZ2h0SW5kZXggPSBpICogMiArIDI7CisgICAgICAgIHJldHVybiByaWdodEluZGV4IDwgdGhp
cy5fc2l6ZSA/IHJpZ2h0SW5kZXggOiAtMTsKKyAgICB9LAorICAgIAorICAgIC8vIFJldHVybiB0
aGUgY2hpbGQgaW5kZXggdGhhdCBtYXkgdmlvbGF0ZSB0aGUgaGVhcCBwcm9wZXJ0eSBhdCBpbmRl
eCBpLgorICAgIF9jaGlsZEluZGV4OiBmdW5jdGlvbihpKQorICAgIHsKKyAgICAgICAgdmFyIGxl
ZnQgPSB0aGlzLl9sZWZ0SW5kZXgoaSk7CisgICAgICAgIHZhciByaWdodCA9IHRoaXMuX3JpZ2h0
SW5kZXgoaSk7CisKKyAgICAgICAgaWYgKGxlZnQgIT0gLTEgJiYgcmlnaHQgIT0gLTEpCisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fY29tcGFyZSh0aGlzLl92YWx1ZXNbbGVmdF0sIHRoaXMuX3Zh
bHVlc1tyaWdodF0pID4gMCA/IGxlZnQgOiByaWdodDsKKyAgICAgICAgCisgICAgICAgIHJldHVy
biBsZWZ0ICE9IC0xID8gbGVmdCA6IHJpZ2h0OworICAgIH0sCisgICAgCisgICAgaW5pdDogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fc2l6ZSA9IDA7CisgICAgfSwKKyAgICAKKyAg
ICB0b3A6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zaXplID8gdGhp
cy5fdmFsdWVzWzBdIDogTmFOOworICAgIH0sCisgICAgCisgICAgcHVzaDogZnVuY3Rpb24odmFs
dWUpCisgICAgeworICAgICAgICBpZiAodGhpcy5fc2l6ZSA9PSB0aGlzLl9tYXhTaXplKSB7Cisg
ICAgICAgICAgICAvLyBJZiBzaXplIGlzIGJvdW5kZWQgYW5kIHRoZSBuZXcgdmFsdWUgY2FuIGJl
IGEgcGFyZW50IG9mIHRoZSB0b3AoKQorICAgICAgICAgICAgLy8gaWYgdGhlIHNpemUgd2VyZSB1
bmJvdW5kZWQsIGp1c3QgaWdub3JlIHRoZSBuZXcgdmFsdWUuCisgICAgICAgICAgICBpZiAodGhp
cy5fY29tcGFyZSh2YWx1ZSwgdGhpcy50b3AoKSkgPiAwKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHRoaXMucG9wKCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fdmFs
dWVzW3RoaXMuX3NpemUrK10gPSB2YWx1ZTsKKyAgICAgICAgdGhpcy5fYnViYmxlKHRoaXMuX3Np
emUgLSAxKTsKKyAgICB9LAorCisgICAgcG9wOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBp
ZiAoIXRoaXMuX3NpemUpCisgICAgICAgICAgICByZXR1cm4gTmFOOworICAgICAgICAKKyAgICAg
ICAgdGhpcy5fdmFsdWVzWzBdID0gdGhpcy5fdmFsdWVzWy0tdGhpcy5fc2l6ZV07CisgICAgICAg
IHRoaXMuX3NpbmsoMCk7CisgICAgfSwKKyAgICAKKyAgICBfYnViYmxlOiBmdW5jdGlvbihpKQor
ICAgIHsKKyAgICAgICAgLy8gRml4IHRoZSBoZWFwIHByb3BlcnR5IGF0IGluZGV4IGkgZ2l2ZW4g
dGhhdCBwYXJlbnQgaXMgdGhlIG9ubHkgbm9kZSB0aGF0CisgICAgICAgIC8vIG1heSB2aW9sYXRl
IHRoZSBoZWFwIHByb3BlcnR5LgorICAgICAgICBmb3IgKHZhciBwaSA9IHRoaXMuX3BhcmVudElu
ZGV4KGkpOyBwaSAhPSAtMTsgaSA9IHBpLCBwaSA9IHRoaXMuX3BhcmVudEluZGV4KHBpKSkgewor
ICAgICAgICAgICAgaWYgKHRoaXMuX2NvbXBhcmUodGhpcy5fdmFsdWVzW3BpXSwgdGhpcy5fdmFs
dWVzW2ldKSA+IDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICB0aGlzLl92YWx1ZXMuc3dhcChwaSwgaSk7CisgICAgICAgIH0KKyAgICB9LAor
ICAgIAorICAgIF9zaW5rOiBmdW5jdGlvbihpKQorICAgIHsKKyAgICAgICAgLy8gRml4IHRoZSBo
ZWFwIHByb3BlcnR5IGF0IGluZGV4IGkgZ2l2ZW4gdGhhdCBlYWNoIG9mIHRoZSBsZWZ0IGFuZCB0
aGUgcmlnaHQKKyAgICAgICAgLy8gc3ViLXRyZWVzIHNhdGlzZmllcyB0aGUgaGVhcCBwcm9wZXJ0
eS4KKyAgICAgICAgZm9yICh2YXIgY2kgPSB0aGlzLl9jaGlsZEluZGV4KGkpOyBjaSAhPSAtMTsg
aSA9IGNpLCBjaSA9IHRoaXMuX2NoaWxkSW5kZXgoY2kpKSB7CisgICAgICAgICAgICBpZiAodGhp
cy5fY29tcGFyZSh0aGlzLl92YWx1ZXNbaV0sIHRoaXMuX3ZhbHVlc1tjaV0pID4gMCkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdGhpcy5fdmFsdWVz
LnN3YXAoY2ksIGkpOworICAgICAgICB9CisgICAgfSwKKyAgICAKKyAgICBzdHI6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHZhciBvdXQgPSAiSGVhcFsiICsgdGhpcy5fc2l6ZSArICJdID0g
WyI7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2l6ZTsgKytpKSB7CisgICAg
ICAgICAgICBvdXQgKz0gdGhpcy5fdmFsdWVzW2ldOworICAgICAgICAgICAgaWYgKGkgPCB0aGlz
Ll9zaXplIC0gMSkKKyAgICAgICAgICAgICAgICBvdXQgKz0gIiwgIjsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gb3V0ICsgIl0iOworICAgIH0sCisgICAgCisgICAgdmFsdWVzOiBmdW5jdGlv
bihzaXplKSB7CisgICAgICAgIC8vIFJldHVybiB0aGUgbGFzdCAic2l6ZSIgaGVhcCBlbGVtZW50
cyB2YWx1ZXMuCisgICAgICAgIHZhciB2YWx1ZXMgPSB0aGlzLl92YWx1ZXMuc2xpY2UoMCwgdGhp
cy5fc2l6ZSk7CisgICAgICAgIHJldHVybiB2YWx1ZXMuc29ydCh0aGlzLl9jb21wYXJlKS5zbGlj
ZSgwLCBNYXRoLm1pbihzaXplLCB0aGlzLl9zaXplKSk7CisgICAgfQorfQorCit2YXIgQWxnb3Jp
dGhtID0geworICAgIGNyZWF0ZU1pbkhlYXA6IGZ1bmN0aW9uKG1heFNpemUpCisgICAgeworICAg
ICAgICByZXR1cm4gbmV3IEhlYXAobWF4U2l6ZSwgZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYiAt
IGE7IH0pOworICAgIH0sCisgICAgCisgICAgY3JlYXRlTWF4SGVhcDogZnVuY3Rpb24obWF4U2l6
ZSkgeworICAgICAgICByZXR1cm4gbmV3IEhlYXAobWF4U2l6ZSwgZnVuY3Rpb24oYSwgYikgeyBy
ZXR1cm4gYSAtIGI7IH0pOworICAgIH0KK30KSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9t
ZXRlci9yZXNvdXJjZXMvZXh0ZW5zaW9ucy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRl
c3RzL0FuaW1vbWV0ZXIvcmVzb3VyY2VzL2V4dGVuc2lvbnMuanMJKHJldmlzaW9uIDApCisrKyBQ
ZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVzb3VyY2VzL2V4dGVuc2lvbnMuanMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzMDYgQEAKK2Z1bmN0aW9uIFBvaW50KHgsIHkpCit7CisgICAg
dGhpcy54ID0geDsKKyAgICB0aGlzLnkgPSB5OworfQorCitQb2ludC5wb2ludE9uQ2lyY2xlID0g
ZnVuY3Rpb24oYW5nbGUsIHJhZGl1cykKK3sKKyAgICByZXR1cm4gbmV3IFBvaW50KHJhZGl1cyAq
IE1hdGguY29zKGFuZ2xlKSwgcmFkaXVzICogTWF0aC5zaW4oYW5nbGUpKTsKK30KKworUG9pbnQu
cG9pbnRPbkVsbGlwc2UgPSBmdW5jdGlvbihhbmdsZSwgcmFkaXVzZXMpCit7CisgICAgcmV0dXJu
IG5ldyBQb2ludChyYWRpdXNlcy54ICogTWF0aC5jb3MoYW5nbGUpLCByYWRpdXNlcy55ICogTWF0
aC5zaW4oYW5nbGUpKTsKK30KKworUG9pbnQucHJvdG90eXBlID0KK3sKKyAgICAvLyBVc2VkIHdo
ZW4gdGhlIHBvaW50IG9iamVjdCBpcyB1c2VkIGFzIGEgc2l6ZSBvYmplY3QuCisgICAgZ2V0IHdp
ZHRoKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLng7CisgICAgfSwKKyAgICAKKyAgICAv
LyBVc2VkIHdoZW4gdGhlIHBvaW50IG9iamVjdCBpcyB1c2VkIGFzIGEgc2l6ZSBvYmplY3QuCisg
ICAgZ2V0IGhlaWdodCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy55OworICAgIH0sCisg
ICAgCisgICAgLy8gVXNlZCB3aGVuIHRoZSBwb2ludCBvYmplY3QgaXMgdXNlZCBhcyBhIHNpemUg
b2JqZWN0LgorICAgIGdldCBjZW50ZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQb2lu
dCh0aGlzLnggLyAyLCB0aGlzLnkgLyAyKTsKKyAgICB9LAorICAgIAorICAgIGFkZDogZnVuY3Rp
b24ob3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCArIG90aGVy
LngsIHRoaXMueSArIG90aGVyLnkpOworICAgIH0sCisgICAgCisgICAgc3VidHJhY3Q6IGZ1bmN0
aW9uKG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLnggLSBvdGhl
ci54LCB0aGlzLnkgLSBvdGhlci55KTsKKyAgICB9LAorICAgIAorICAgIG11bHRpcGx5OiBmdW5j
dGlvbihvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54ICogb3Ro
ZXIueCwgdGhpcy55ICogb3RoZXIueSk7CisgICAgfSwKKyAgICAKKyAgICBtb3ZlOiBmdW5jdGlv
bihhbmdsZSwgdmVsb2NpdHksIHRpbWVEZWx0YSkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlz
LmFkZChQb2ludC5wb2ludE9uQ2lyY2xlKGFuZ2xlLCB2ZWxvY2l0eSAqICh0aW1lRGVsdGEgLyAx
MDAwKSkpOworICAgIH0KK30KKworZnVuY3Rpb24gSW5zZXRzKHRvcCwgcmlnaHQsIGJvdHRvbSwg
bGVmdCkKK3sKKyAgICB0aGlzLnRvcCA9IHRvcDsKKyAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7Cisg
ICAgdGhpcy5ib3R0b20gPSBib3R0b207CisgICAgdGhpcy5sZWZ0ID0gbGVmdDsKK30KKworSW5z
ZXRzLnByb3RvdHlwZSA9Cit7CisgICAgZ2V0IHdpZHRoKCkgeworICAgICAgICByZXR1cm4gdGhp
cy5sZWZ0ICsgdGhpcy5yaWdodDsKKyAgICB9LAorCisgICAgZ2V0IGhlaWdodCgpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMudG9wICsgdGhpcy5ib3R0b207CisgICAgfQorfQorCitmdW5jdGlvbiBT
aW1wbGVQcm9taXNlKCkKK3sKKyAgICB0aGlzLl9jaGFpbmVkUHJvbWlzZSA9IG51bGw7CisgICAg
dGhpcy5fY2FsbGJhY2sgPSBudWxsOworfQorCitTaW1wbGVQcm9taXNlLnByb3RvdHlwZS50aGVu
ID0gZnVuY3Rpb24gKGNhbGxiYWNrKQoreworICAgIGlmICh0aGlzLl9jYWxsYmFjaykKKyAgICAg
ICAgdGhyb3cgIlNpbXBsZVByb21pc2UgZG9lc24ndCBzdXBwb3J0IG11bHRpcGxlIGNhbGxzIHRv
IHRoZW4iOworICAgICAgICAKKyAgICB0aGlzLl9jYWxsYmFjayA9IGNhbGxiYWNrOworICAgIHRo
aXMuX2NoYWluZWRQcm9taXNlID0gbmV3IFNpbXBsZVByb21pc2U7CisgICAgCisgICAgaWYgKHRo
aXMuX3Jlc29sdmVkKQorICAgICAgICB0aGlzLnJlc29sdmUodGhpcy5fcmVzb2x2ZWRWYWx1ZSk7
CisKKyAgICByZXR1cm4gdGhpcy5fY2hhaW5lZFByb21pc2U7Cit9CisKK1NpbXBsZVByb21pc2Uu
cHJvdG90eXBlLnJlc29sdmUgPSBmdW5jdGlvbiAodmFsdWUpCit7CisgICAgaWYgKCF0aGlzLl9j
YWxsYmFjaykgeworICAgICAgICB0aGlzLl9yZXNvbHZlZCA9IHRydWU7CisgICAgICAgIHRoaXMu
X3Jlc29sdmVkVmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZh
ciByZXN1bHQgPSB0aGlzLl9jYWxsYmFjayh2YWx1ZSk7CisgICAgaWYgKHJlc3VsdCBpbnN0YW5j
ZW9mIFNpbXBsZVByb21pc2UpIHsKKyAgICAgICAgdmFyIGNoYWluZWRQcm9taXNlID0gdGhpcy5f
Y2hhaW5lZFByb21pc2U7CisgICAgICAgIHJlc3VsdC50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHsg
Y2hhaW5lZFByb21pc2UucmVzb2x2ZShyZXN1bHQpOyB9KTsKKyAgICB9IGVsc2UKKyAgICAgICAg
dGhpcy5fY2hhaW5lZFByb21pc2UucmVzb2x2ZShyZXN1bHQpOworfQorCitmdW5jdGlvbiBPcHRp
b25zKHRlc3RJbnRlcnZhbCwgZnJhbWVSYXRlKQoreworICAgIHRoaXMudGVzdEludGVydmFsID0g
dGVzdEludGVydmFsOworICAgIHRoaXMuZnJhbWVSYXRlID0gZnJhbWVSYXRlOworfQorCitmdW5j
dGlvbiBQcm9ncmVzc0JhcihlbGVtZW50LCByYW5nZXMpCit7CisgICAgdGhpcy5lbGVtZW50ID0g
ZWxlbWVudDsKKyAgICB0aGlzLnJhbmdlcyA9IHJhbmdlczsKKyAgICB0aGlzLmN1cnJlbnRSYW5n
ZSA9IDA7Cit9CisKK1Byb2dyZXNzQmFyLnByb3RvdHlwZSA9Cit7CisgICAgX3Byb2dyZXNzVG9Q
ZXJjZW50OiBmdW5jdGlvbihwcm9ncmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBwcm9ncmVz
cyAqICgxMDAgLyB0aGlzLnJhbmdlcyk7CisgICAgfSwKKyAgICAKKyAgICBpbmNSYW5nZTogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgKyt0aGlzLmN1cnJlbnRSYW5nZTsKKyAgICB9LAorICAg
IAorICAgIHNldFBvczogZnVuY3Rpb24ocHJvZ3Jlc3MpCisgICAgeworICAgICAgICB0aGlzLmVs
ZW1lbnQuc3R5bGUud2lkdGggPSB0aGlzLl9wcm9ncmVzc1RvUGVyY2VudCh0aGlzLmN1cnJlbnRS
YW5nZSArIHByb2dyZXNzKSArICIlIjsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIFJlY29yZFRhYmxl
KGVsZW1lbnQpCit7CisgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDsKKyAgICB0aGlzLmNsZWFy
KCk7Cit9CisKK1JlY29yZFRhYmxlLnByb3RvdHlwZSA9Cit7CisgICAgY2xlYXI6IGZ1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgPSAiIjsKKyAgICB9LAor
ICAgIAorICAgIF9zaG93VGl0bGVzOiBmdW5jdGlvbihyb3csIHF1ZXVlLCB0aXRsZXMsIG1lc3Nh
Z2UpCisgICAgeworICAgICAgICB0aXRsZXMuZm9yRWFjaChmdW5jdGlvbiAodGl0bGUpIHsKKyAg
ICAgICAgICAgIHZhciB0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoIik7CisgICAgICAg
ICAgICB0aC50ZXh0Q29udGVudCA9IHRpdGxlLnRleHQ7CisgICAgICAgICAgICBpZiAodHlwZW9m
IG1lc3NhZ2UgIT0gInVuZGVmaW5lZCIgJiYgbWVzc2FnZS5sZW5ndGgpIHsKKyAgICAgICAgICAg
ICAgICB0aC5pbm5lckhUTUwgKz0gIjxicj5bIiArIG1lc3NhZ2UgKyAiXSI7CisgICAgICAgICAg
ICAgICAgbWVzc2FnZSA9ICIiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCJ3aWR0
aCIgaW4gdGl0bGUpCisgICAgICAgICAgICAgICAgdGgud2lkdGggPSB0aXRsZS53aWR0aCArICIl
IjsKKyAgICAgICAgICAgIHJvdy5hcHBlbmRDaGlsZCh0aCk7CisgICAgICAgICAgICBxdWV1ZS5w
dXNoKHtlbGVtZW50OiB0aCwgdGl0bGVzOiB0aXRsZS5jaGlsZHJlbiB9KTsKKyAgICAgICAgfSk7
CisgICAgfSwKKyAgICAKKyAgICBfc2hvd0hlYWRlcjogZnVuY3Rpb24oc3VpdGVOYW1lLCB0aXRs
ZXMsIG1lc3NhZ2UpCisgICAgeworICAgICAgICB2YXIgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgidHIiKTsKKworICAgICAgICB2YXIgcXVldWUgPSBbXTsKKyAgICAgICAgdGhpcy5fc2hv
d1RpdGxlcyhyb3csIHF1ZXVlLCB0aXRsZXMsIG1lc3NhZ2UpOworICAgICAgICB0aGlzLmVsZW1l
bnQuYXBwZW5kQ2hpbGQocm93KTsKKworICAgICAgICB3aGlsZSAocXVldWUubGVuZ3RoKSB7Cisg
ICAgICAgICAgICB2YXIgcm93ID0gbnVsbDsKKyAgICAgICAgICAgIHZhciBlbnRyaWVzID0gW107
CisKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBxdWV1ZS5sZW5ndGg7IGkgPCBs
ZW47ICsraSkgeworICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHF1ZXVlLnNoaWZ0KCk7CisK
KyAgICAgICAgICAgICAgICBpZiAoIWVudHJ5LnRpdGxlcy5sZW5ndGgpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5LmVsZW1lbnQpOworICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIXJv
dykKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
InRyIik7CisKKyAgICAgICAgICAgICAgICB0aGlzLl9zaG93VGl0bGVzKHJvdywgcXVldWUsIGVu
dHJ5LnRpdGxlcywgIiIpOworICAgICAgICAgICAgICAgIGVudHJ5LmVsZW1lbnQuY29sU3BhbiA9
IGVudHJ5LnRpdGxlcy5sZW5ndGg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChy
b3cpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQocm93KTsKKyAg
ICAgICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24oZW50cnkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgKytlbnRyeS5yb3dTcGFuOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfSwKKyAgICAKKyAgICBfc2hvd0VtcHR5OiBmdW5jdGlv
bihyb3csIHRlc3ROYW1lKQorICAgIHsKKyAgICAgICAgdmFyIHRkID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgidGQiKTsKKyAgICAgICAgcm93LmFwcGVuZENoaWxkKHRkKTsKKyAgICB9LAorICAg
IAorICAgIF9zaG93VmFsdWU6IGZ1bmN0aW9uKHJvdywgdGVzdE5hbWUsIHZhbHVlKQorICAgIHsK
KyAgICAgICAgdmFyIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKKyAgICAgICAg
dGQudGV4dENvbnRlbnQgPSB2YWx1ZS50b0ZpeGVkKDIpOworICAgICAgICByb3cuYXBwZW5kQ2hp
bGQodGQpOworICAgIH0sCisgICAgCisgICAgX3Nob3dTYW1wbGVzOiBmdW5jdGlvbihyb3csIHRl
c3ROYW1lLCBheGVzLCBzYW1wbGVzLCBzYW1wbGluZ1RpbWVPZmZzZXQpCisgICAgeworICAgICAg
ICB2YXIgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOworICAgICAgICB2YXIgYnV0
dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIGJ1dHRvbi5jbGFz
c05hbWUgPSAic21hbGwtYnV0dG9uIjsKKyAgICAgICAgICAgIAorICAgICAgICBidXR0b24uYWRk
RXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHdpbmRvdy5z
aG93R3JhcGgodGVzdE5hbWUsIGF4ZXMsIHNhbXBsZXMsIHNhbXBsaW5nVGltZU9mZnNldCk7Cisg
ICAgICAgIH0pOworICAgICAgICAgICAgCisgICAgICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9ICJH
cmFwaC4uLiI7CisgICAgICAgIHRkLmFwcGVuZENoaWxkKGJ1dHRvbik7CisgICAgICAgIHJvdy5h
cHBlbmRDaGlsZCh0ZCk7CisgICAgfSwKKyAgICAKKyAgICBfc2hvd1Rlc3Q6IGZ1bmN0aW9uKHRl
c3ROYW1lLCB0aXRsZXMsIHNhbXBsZXIsIGZpbmFsUmVzdWx0cykKKyAgICB7CisgICAgICAgIHZh
ciByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOworICAgICAgICB2YXIgdGQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOworICAgICAgICAKKyAgICAgICAgdGQudGV4dENv
bnRlbnQgPSB0ZXN0TmFtZTsKKyAgICAgICAgcm93LmFwcGVuZENoaWxkKHRkKTsKKyAgICAgICAg
CisgICAgICAgIHZhciBheGVzID0gW107CisgICAgICAgIHNhbXBsZXIuZXhwZXJpbWVudHMuZm9y
RWFjaChmdW5jdGlvbihleHBlcmltZW50LCBpbmRleCkgeworICAgICAgICAgICAgdGhpcy5fc2hv
d1ZhbHVlKHJvdywgdGVzdE5hbWUsIGV4cGVyaW1lbnQubWVhbigpKTsKKyAgICAgICAgICAgIHRo
aXMuX3Nob3dWYWx1ZShyb3csIHRlc3ROYW1lLCBleHBlcmltZW50LmNvbmZpZGVuY2VJbnRlcnZh
bERlbHRhKEV4cGVyaW1lbnQuZGVmYXVsdHMuQ09ORklERU5DRSkpOworICAgICAgICAgICAgdGhp
cy5fc2hvd1ZhbHVlKHJvdywgdGVzdE5hbWUsIGV4cGVyaW1lbnQuY29uY2VybihFeHBlcmltZW50
LmRlZmF1bHRzLkNPTkNFUk4pKTsKKyAgICAgICAgICAgIHRoaXMuX3Nob3dWYWx1ZShyb3csIHRl
c3ROYW1lLCBleHBlcmltZW50LnN0YW5kYXJkRGV2aWF0aW9uKCkpOworICAgICAgICAgICAgdGhp
cy5fc2hvd1ZhbHVlKHJvdywgdGVzdE5hbWUsIGV4cGVyaW1lbnQucGVyY2VudGFnZSgpKTsKKyAg
ICAgICAgICAgIGF4ZXMucHVzaCh0aXRsZXNbaW5kZXggKyAxXS50ZXh0KTsKKyAgICAgICAgICAg
IAorICAgICAgICB9LCB0aGlzKTsKKworICAgICAgICB0aGlzLl9zaG93VmFsdWUocm93LCB0ZXN0
TmFtZSwgc2FtcGxlci5leHBlcmltZW50c1swXS5zY29yZShFeHBlcmltZW50LmRlZmF1bHRzLkNP
TkNFUk4pKTsKKworICAgICAgICBpZiAoZmluYWxSZXN1bHRzKQorICAgICAgICAgICAgdGhpcy5f
c2hvd1NhbXBsZXMocm93LCB0ZXN0TmFtZSwgYXhlcywgc2FtcGxlci5zYW1wbGVzLCBzYW1wbGVy
LnNhbXBsaW5nVGltZU9mZnNldCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRoaXMuX3No
b3dFbXB0eShyb3csIHRlc3ROYW1lKTsKKyAgICAgICAgICAgIAorICAgICAgICB0aGlzLmVsZW1l
bnQuYXBwZW5kQ2hpbGQocm93KTsKKyAgICB9LAorICAgIAorICAgIF9zaG93U3VpdGU6IGZ1bmN0
aW9uKHN1aXRlLCBzdWl0ZVNhbXBsZXJzKQorICAgIHsKKyAgICAgICAgdmFyIHNjb3JlcyA9IFtd
OyAgICAgICAgCisgICAgICAgIGZvciAodmFyIHRlc3ROYW1lIGluIHN1aXRlU2FtcGxlcnMpIHsK
KyAgICAgICAgICAgIHZhciB0ZXN0ID0gdGVzdEZyb21OYW1lKHN1aXRlLCB0ZXN0TmFtZSk7Cisg
ICAgICAgICAgICB2YXIgc2FtcGxlciA9IHN1aXRlU2FtcGxlcnNbdGVzdE5hbWVdOyAKKyAgICAg
ICAgICAgIHRoaXMuX3Nob3dUZXN0KHRlc3ROYW1lLCBzdWl0ZS50aXRsZXMsIHNhbXBsZXIsIHRy
dWUpOworICAgICAgICAgICAgc2NvcmVzLnB1c2goc2FtcGxlci5leHBlcmltZW50c1swXS5zY29y
ZShFeHBlcmltZW50LmRlZmF1bHRzLkNPTkNFUk4pKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gc2NvcmVzOworICAgIH0sCisgICAgCisgICAgc2hvd1JlY29yZDogZnVuY3Rpb24oc3VpdGUs
IHRlc3QsIHNhbXBsZXIsIG1lc3NhZ2UpCisgICAgeworICAgICAgICB0aGlzLmNsZWFyKCk7ICAg
ICAgICAKKyAgICAgICAgdGhpcy5fc2hvd0hlYWRlcigiIiwgc3VpdGUudGl0bGVzLCBtZXNzYWdl
KTsKKyAgICAgICAgdGhpcy5fc2hvd1Rlc3QodGVzdC5uYW1lLCBzdWl0ZS50aXRsZXMsIHNhbXBs
ZXIsIGZhbHNlKTsgICAgICAgIAorICAgIH0sCisgICAgCisgICAgc2hvd0l0ZXJhdGlvbnM6IGZ1
bmN0aW9uKGl0ZXJhdGlvbnNTYW1wbGVycykKKyAgICB7CisgICAgICAgIHRoaXMuY2xlYXIoKTsK
KworICAgICAgICB2YXIgc2NvcmVzID0gW107CisgICAgICAgIHZhciB0aXRsZXMgPSBudWxsOwor
ICAgICAgICBpdGVyYXRpb25zU2FtcGxlcnMuZm9yRWFjaChmdW5jdGlvbihzdWl0ZXNTYW1wbGVy
cykgeworICAgICAgICAgICAgZm9yICh2YXIgc3VpdGVOYW1lIGluIHN1aXRlc1NhbXBsZXJzKSB7
CisgICAgICAgICAgICAgICAgdmFyIHN1aXRlID0gc3VpdGVGcm9tTmFtZShzdWl0ZU5hbWUpOwor
ICAgICAgICAgICAgICAgIGlmICh0aXRsZXMgIT0gc3VpdGUudGl0bGVzKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRpdGxlcyA9IHN1aXRlLnRpdGxlczsKKyAgICAgICAgICAgICAgICAgICAgdGhp
cy5fc2hvd0hlYWRlcihzdWl0ZU5hbWUsIHRpdGxlcywgIiIpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIHZhciBzdWl0ZVNjb3JlcyA9IHRoaXMuX3Nob3dTdWl0ZShzdWl0
ZSwgc3VpdGVzU2FtcGxlcnNbc3VpdGVOYW1lXSk7CisgICAgICAgICAgICAgICAgc2NvcmVzLnB1
c2guYXBwbHkoc2NvcmVzLCBzdWl0ZVNjb3Jlcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0s
IHRoaXMpOworCisgICAgICAgIHJldHVybiBTdGF0aXN0aWNzLmdlb21ldHJpY01lYW4oc2NvcmVz
KTsKKyAgICB9Cit9CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVzb3VyY2Vz
L3NhbXBsZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jl
c291cmNlcy9zYW1wbGVyLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Bbmlt
b21ldGVyL3Jlc291cmNlcy9zYW1wbGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAz
IEBACitmdW5jdGlvbiBFeHBlcmltZW50KCkKK3sKKyAgICB0aGlzLl9pbml0KCk7CisgICAgdGhp
cy5fbWF4SGVhcCA9IEFsZ29yaXRobS5jcmVhdGVNYXhIZWFwKEV4cGVyaW1lbnQuZGVmYXVsdHMu
Q09OQ0VSTl9TSVpFKTsKK30KKworRXhwZXJpbWVudC5kZWZhdWx0cyA9Cit7CisgICAgQ09OQ0VS
TjogNSwKKyAgICBDT05GSURFTkNFOiAwLjksCisgICAgQ09OQ0VSTl9TSVpFOiAxMDAsCit9CisK
K0V4cGVyaW1lbnQucHJvdG90eXBlID0KK3sKKyAgICBfaW5pdDogZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgdGhpcy5fc3VtID0gMDsKKyAgICAgICAgdGhpcy5fc3F1YXJlU3VtID0gMDsKKyAg
ICAgICAgdGhpcy5fbnVtYmVyT2ZTYW1wbGVzID0gMDsKKyAgICB9LAorICAgIAorICAgIC8vIENh
bGxlZCBhZnRlciBhIHdhcm0tdXAgcGVyaW9kCisgICAgc3RhcnRTYW1wbGluZzogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgdmFyIG1lYW4gPSB0aGlzLm1lYW4oKTsKKyAgICAgICAgdGhpcy5f
aW5pdCgpOworICAgICAgICB0aGlzLl9tYXhIZWFwLmluaXQoKTsKKyAgICAgICAgdGhpcy5zYW1w
bGUobWVhbik7CisgICAgfSwKKyAgICAKKyAgICBzYW1wbGU6IGZ1bmN0aW9uKHZhbHVlKQorICAg
IHsKKyAgICAgICAgdGhpcy5fc3VtICs9IHZhbHVlOworICAgICAgICB0aGlzLl9zcXVhcmVTdW0g
Kz0gdmFsdWUgKiB2YWx1ZTsKKyAgICAgICAgdGhpcy5fbWF4SGVhcC5wdXNoKHZhbHVlKTsKKyAg
ICAgICAgKyt0aGlzLl9udW1iZXJPZlNhbXBsZXM7CisgICAgfSwKKyAgICAKKyAgICBtZWFuOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gU3RhdGlzdGljcy5zYW1wbGVNZWFuKHRo
aXMuX251bWJlck9mU2FtcGxlcywgdGhpcy5fc3VtKTsKKyAgICB9LAorICAgIAorICAgIHN0YW5k
YXJkRGV2aWF0aW9uOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gU3RhdGlzdGlj
cy5zYW1wbGVTdGFuZGFyZERldmlhdGlvbih0aGlzLl9udW1iZXJPZlNhbXBsZXMsIHRoaXMuX3N1
bSwgdGhpcy5fc3F1YXJlU3VtKTsKKyAgICB9LAorICAgIAorICAgIHBlcmNlbnRhZ2U6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBtZWFuID0gdGhpcy5tZWFuKCk7CisgICAgICAgIHJl
dHVybiBtZWFuID8gdGhpcy5zdGFuZGFyZERldmlhdGlvbigpICogMTAwIC8gbWVhbiA6IDA7Cisg
ICAgfSwKKyAgICAKKyAgICBjb25maWRlbmNlSW50ZXJ2YWxEZWx0YTogZnVuY3Rpb24oY29uZmlk
ZW5jZUxldmVsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0YXRpc3RpY3MuY29uZmlkZW5jZUlu
dGVydmFsRGVsdGEoY29uZmlkZW5jZUxldmVsLCB0aGlzLl9udW1iZXJPZlNhbXBsZXMsIHRoaXMu
X3N1bSwgdGhpcy5fc3F1YXJlU3VtKTsKKyAgICB9LAorICAgIAorICAgIGNvbmNlcm46IGZ1bmN0
aW9uKHBlcmNlbnRhZ2UpCisgICAgeworICAgICAgICB2YXIgc2l6ZSA9IE1hdGguY2VpbCh0aGlz
Ll9udW1iZXJPZlNhbXBsZXMgKiBwZXJjZW50YWdlIC8gMTAwKTsKKyAgICAgICAgdmFyIHZhbHVl
cyA9IHRoaXMuX21heEhlYXAudmFsdWVzKHNpemUpOworICAgICAgICByZXR1cm4gdmFsdWVzLmxl
bmd0aCA/IHZhbHVlcy5yZWR1Y2UoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSArIGI7IH0pIC8g
dmFsdWVzLmxlbmd0aCA6IDA7CisgICAgfSwKKyAgICAKKyAgICBzY29yZTogZnVuY3Rpb24ocGVy
Y2VudGFnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdGF0aXN0aWNzLmdlb21ldHJpY01lYW4o
W3RoaXMubWVhbigpLCBNYXRoLm1heCh0aGlzLmNvbmNlcm4ocGVyY2VudGFnZSksIDEpXSk7Cisg
ICAgfQorfQorCitmdW5jdGlvbiBTYW1wbGVyKGNvdW50KQoreworICAgIHRoaXMuZXhwZXJpbWVu
dHMgPSBbXTsKKyAgICB3aGlsZSAoY291bnQtLSkKKyAgICAgICAgdGhpcy5leHBlcmltZW50cy5w
dXNoKG5ldyBFeHBlcmltZW50KCkpOworICAgIHRoaXMuc2FtcGxlcyA9IFtdOworICAgIHRoaXMu
c2FtcGxpbmdUaW1lT2Zmc2V0ID0gMDsKK30KKworU2FtcGxlci5wcm90b3R5cGUgPQoreworICAg
IHN0YXJ0U2FtcGxpbmc6IGZ1bmN0aW9uKHRpbWVPZmZzZXQpCisgICAgeworICAgICAgICBmb3Ig
KHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5leHBlcmltZW50cy5sZW5ndGg7ICsraW5kZXgp
CisgICAgICAgICAgICB0aGlzLmV4cGVyaW1lbnRzW2luZGV4XS5zdGFydFNhbXBsaW5nKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgdGhpcy5zYW1wbGluZ1RpbWVPZmZzZXQgPSB0aW1lT2Zmc2V0
IC8gMTAwMDsKKyAgICB9LAorICAgIAorICAgIHNhbXBsZTogZnVuY3Rpb24odGltZU9mZnNldCwg
dmFsdWVzKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPCB0aGlzLmV4cGVyaW1l
bnRzLmxlbmd0aCkKKyAgICAgICAgICAgIHRocm93ICJOb3QgZW5vdWdoIHNhbXBsZSBwb2ludHMi
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRl
eCA8IHRoaXMuZXhwZXJpbWVudHMubGVuZ3RoOyArK2luZGV4KQorICAgICAgICAgICAgdGhpcy5l
eHBlcmltZW50c1tpbmRleF0uc2FtcGxlKHZhbHVlc1tpbmRleF0pOworICAgICAgICAgICAgCisg
ICAgICAgIHRoaXMuc2FtcGxlcy5wdXNoKHsgdGltZU9mZnNldDogdGltZU9mZnNldCAvIDEwMDAs
IHZhbHVlczogdmFsdWVzIH0pOworICAgIH0KK30KSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQW5p
bW9tZXRlci9yZXNvdXJjZXMvc3RhdGlzdGljcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5j
ZVRlc3RzL0FuaW1vbWV0ZXIvcmVzb3VyY2VzL3N0YXRpc3RpY3MuanMJKHJldmlzaW9uIDE5MDI3
OCkJKGZyb20gUGVyZm9ybWFuY2VUZXN0cy9yZXNvdXJjZXMvc3RhdGlzdGljcy5qczoxOTAyNzgp
CisrKyBQZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVzb3VyY2VzL3N0YXRpc3RpY3MuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCit2YXIg
U3RhdGlzdGljcyA9IG5ldyAoZnVuY3Rpb24gKCkgeworCisgICAgdGhpcy5tYXggPSBmdW5jdGlv
biAodmFsdWVzKSB7CisgICAgICAgIHJldHVybiBNYXRoLm1heC5hcHBseShNYXRoLCB2YWx1ZXMp
OworICAgIH0KKworICAgIHRoaXMubWluID0gZnVuY3Rpb24gKHZhbHVlcykgeworICAgICAgICBy
ZXR1cm4gTWF0aC5taW4uYXBwbHkoTWF0aCwgdmFsdWVzKTsKKyAgICB9CisKKyAgICB0aGlzLnN1
bSA9IGZ1bmN0aW9uICh2YWx1ZXMpIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlcy5yZWR1Y2UoZnVu
Y3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgKyBiOyB9LCAwKTsKKyAgICB9CisKKyAgICB0aGlzLnNx
dWFyZVN1bSA9IGZ1bmN0aW9uICh2YWx1ZXMpIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlcy5yZWR1
Y2UoZnVuY3Rpb24gKHN1bSwgdmFsdWUpIHsgcmV0dXJuIHN1bSArIHZhbHVlICogdmFsdWU7fSwg
MCk7CisgICAgfQorCisgICAgLy8gV2l0aCBzdW0gYW5kIHN1bSBvZiBzcXVhcmVzLCB3ZSBjYW4g
Y29tcHV0ZSB0aGUgc2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvbiBpbiBPKDEpLgorICAgIC8vIFNl
ZSBodHRwczovL3JuaXdhLmNvbS8yMDEyLTExLTEwL3NhbXBsZS1zdGFuZGFyZC1kZXZpYXRpb24t
aW4tdGVybXMtb2Ytc3VtLWFuZC1zcXVhcmUtc3VtLW9mLXNhbXBsZXMvCisgICAgdGhpcy5zYW1w
bGVTdGFuZGFyZERldmlhdGlvbiA9IGZ1bmN0aW9uIChudW1iZXJPZlNhbXBsZXMsIHN1bSwgc3F1
YXJlU3VtKSB7CisgICAgICAgIGlmIChudW1iZXJPZlNhbXBsZXMgPCAyKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHJldHVybiBNYXRoLnNxcnQoc3F1YXJlU3VtIC8gKG51bWJlck9m
U2FtcGxlcyAtIDEpCisgICAgICAgICAgICAtIHN1bSAqIHN1bSAvIChudW1iZXJPZlNhbXBsZXMg
LSAxKSAvIG51bWJlck9mU2FtcGxlcyk7CisgICAgfQorCisgICAgdGhpcy5zdXBwb3J0ZWRDb25m
aWRlbmNlTGV2ZWxzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgc3VwcG9ydGVkTGV2ZWxz
ID0gW107CisgICAgICAgIGZvciAodmFyIHF1YW50aWxlIGluIHREaXN0cmlidXRpb25JbnZlcnNl
Q0RGKQorICAgICAgICAgICAgc3VwcG9ydGVkTGV2ZWxzLnB1c2goKDEgLSAoMSAtIHF1YW50aWxl
KSAqIDIpLnRvRml4ZWQoMikpOworICAgICAgICByZXR1cm4gc3VwcG9ydGVkTGV2ZWxzOworICAg
IH0KKworICAgIC8vIENvbXB1dGVzIHRoZSBkZWx0YSBkIHMudC4gKG1lYW4gLSBkLCBtZWFuICsg
ZCkgaXMgdGhlIGNvbmZpZGVuY2UgaW50ZXJ2YWwgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbmZpZGVu
Y2UgbGV2ZWwgaW4gTygxKS4KKyAgICB0aGlzLmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhID0gZnVu
Y3Rpb24gKGNvbmZpZGVuY2VMZXZlbCwgbnVtYmVyT2ZTYW1wbGVzLCBzdW0sIHNxdWFyZVN1bSkg
eworICAgICAgICB2YXIgcHJvYmFiaWxpdHkgPSAoMSAtICgxIC0gY29uZmlkZW5jZUxldmVsKSAv
IDIpOworICAgICAgICBpZiAoIShwcm9iYWJpbGl0eSBpbiB0RGlzdHJpYnV0aW9uSW52ZXJzZUNE
RikpIHsKKyAgICAgICAgICAgIHRocm93ICdXZSBvbmx5IHN1cHBvcnQgJyArIHRoaXMuc3VwcG9y
dGVkQ29uZmlkZW5jZUxldmVscygpLm1hcCgKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiAobGV2
ZWwpIHsgcmV0dXJuIGxldmVsICogMTAwICsgJyUnOyB9ICkuam9pbignLCAnKSArICcgY29uZmlk
ZW5jZSBpbnRlcnZhbHMuJzsKKyAgICAgICAgfQorICAgICAgICBpZiAobnVtYmVyT2ZTYW1wbGVz
IC0gMiA8IDApCisgICAgICAgICAgICByZXR1cm4gTmFOOworCisgICAgICAgIHZhciBjZGZGb3JQ
cm9iYWJpbGl0eSA9IHREaXN0cmlidXRpb25JbnZlcnNlQ0RGW3Byb2JhYmlsaXR5XTsKKyAgICAg
ICAgdmFyIGRlZ3JlZXNPZkZyZWVkb20gPSBudW1iZXJPZlNhbXBsZXMgLSAxOworICAgICAgICBp
ZiAoZGVncmVlc09mRnJlZWRvbSA+IGNkZkZvclByb2JhYmlsaXR5Lmxlbmd0aCkKKyAgICAgICAg
ICAgIHRocm93ICdXZSBvbmx5IHN1cHBvcnQgdXAgdG8gJyArIGRlbHRhcy5sZW5ndGggKyAnIGRl
Z3JlZXMgb2YgZnJlZWRvbSc7CisKKyAgICAgICAgLy8gdERpc3RyaWJ1dGlvblF1YW50aWxlKGRl
Z3JlZXNPZkZyZWVkb20sIGNvbmZpZGVuY2VMZXZlbCkgKiBzYW1wbGVTdGFuZGFyZERldmlhdGlv
biAvIHNxcnQobnVtYmVyT2ZTYW1wbGVzKSAqIFMvc3FydChudW1iZXJPZlNhbXBsZXMpCisgICAg
ICAgIHZhciBxdWFudGlsZSA9IGNkZkZvclByb2JhYmlsaXR5W2RlZ3JlZXNPZkZyZWVkb20gLSAx
XTsgLy8gVGhlIGZpcnN0IGVudHJ5IGlzIGZvciB0aGUgb25lIGRlZ3JlZSBvZiBmcmVlZG9tLgor
ICAgICAgICByZXR1cm4gcXVhbnRpbGUgKiB0aGlzLnNhbXBsZVN0YW5kYXJkRGV2aWF0aW9uKG51
bWJlck9mU2FtcGxlcywgc3VtLCBzcXVhcmVTdW0pIC8gTWF0aC5zcXJ0KG51bWJlck9mU2FtcGxl
cyk7CisgICAgfQorCisgICAgdGhpcy5jb25maWRlbmNlSW50ZXJ2YWwgPSBmdW5jdGlvbiAodmFs
dWVzLCBwcm9iYWJpbGl0eSkgeworICAgICAgICB2YXIgc3VtID0gdGhpcy5zdW0odmFsdWVzKTsK
KyAgICAgICAgdmFyIG1lYW4gPSBzdW0gLyB2YWx1ZXMubGVuZ3RoOworICAgICAgICB2YXIgZGVs
dGEgPSB0aGlzLmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKHByb2JhYmlsaXR5IHx8IDAuOTUsIHZh
bHVlcy5sZW5ndGgsIHN1bSwgdGhpcy5zcXVhcmVTdW0odmFsdWVzKSk7CisgICAgICAgIHJldHVy
biBbbWVhbiAtIGRlbHRhLCBtZWFuICsgZGVsdGFdOworICAgIH0KKworICAgIC8vIFNlZSBodHRw
Oi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1N0dWRlbnQnc190LWRpc3RyaWJ1dGlvbiNUYWJsZV9v
Zl9zZWxlY3RlZF92YWx1ZXMKKyAgICAvLyBUaGlzIHRhYmxlIGNvbnRhaW5zIG9uZSBzaWRlZCAo
YS5rLmEuIHRhaWwpIHZhbHVlcy4KKyAgICB2YXIgdERpc3RyaWJ1dGlvbkludmVyc2VDREYgPSB7
CisgICAgICAgIDAuOTogWworICAgICAgICAgICAgMy4wNzc2ODQsIDEuODg1NjE4LCAxLjYzNzc0
NCwgMS41MzMyMDYsIDEuNDc1ODg0LCAxLjQzOTc1NiwgMS40MTQ5MjQsIDEuMzk2ODE1LCAxLjM4
MzAyOSwgMS4zNzIxODQsCisgICAgICAgICAgICAxLjM2MzQzMCwgMS4zNTYyMTcsIDEuMzUwMTcx
LCAxLjM0NTAzMCwgMS4zNDA2MDYsIDEuMzM2NzU3LCAxLjMzMzM3OSwgMS4zMzAzOTEsIDEuMzI3
NzI4LCAxLjMyNTM0MSwKKyAgICAgICAgICAgIDEuMzIzMTg4LCAxLjMyMTIzNywgMS4zMTk0NjAs
IDEuMzE3ODM2LCAxLjMxNjM0NSwgMS4zMTQ5NzIsIDEuMzEzNzAzLCAxLjMxMjUyNywgMS4zMTE0
MzQsIDEuMzEwNDE1LAorICAgICAgICAgICAgMS4zMDk0NjQsIDEuMzA4NTczLCAxLjMwNzczNywg
MS4zMDY5NTIsIDEuMzA2MjEyLCAxLjMwNTUxNCwgMS4zMDQ4NTQsIDEuMzA0MjMwLCAxLjMwMzYz
OSwgMS4zMDMwNzcsCisgICAgICAgICAgICAxLjMwMjU0MywgMS4zMDIwMzUsIDEuMzAxNTUyLCAx
LjMwMTA5MCwgMS4zMDA2NDksIDEuMzAwMjI4LCAxLjI5OTgyNSwgMS4yOTk0MzksIDEuMjk5MDY5
LCAxLjI5ODcxNCwKKworICAgICAgICAgICAgMS4yOTgzNzMsIDEuMjk4MDQ1LCAxLjI5NzczMCwg
MS4yOTc0MjYsIDEuMjk3MTM0LCAxLjI5Njg1MywgMS4yOTY1ODEsIDEuMjk2MzE5LCAxLjI5NjA2
NiwgMS4yOTU4MjEsCisgICAgICAgICAgICAxLjI5NTU4NSwgMS4yOTUzNTYsIDEuMjk1MTM0LCAx
LjI5NDkyMCwgMS4yOTQ3MTIsIDEuMjk0NTExLCAxLjI5NDMxNSwgMS4yOTQxMjYsIDEuMjkzOTQy
LCAxLjI5Mzc2MywKKyAgICAgICAgICAgIDEuMjkzNTg5LCAxLjI5MzQyMSwgMS4yOTMyNTYsIDEu
MjkzMDk3LCAxLjI5Mjk0MSwgMS4yOTI3OTAsIDEuMjkyNjQzLCAxLjI5MjUwMCwgMS4yOTIzNjAs
IDEuMjkyMjI0LAorICAgICAgICAgICAgMS4yOTIwOTEsIDEuMjkxOTYxLCAxLjI5MTgzNSwgMS4y
OTE3MTEsIDEuMjkxNTkxLCAxLjI5MTQ3MywgMS4yOTEzNTgsIDEuMjkxMjQ2LCAxLjI5MTEzNiwg
MS4yOTEwMjksCisgICAgICAgICAgICAxLjI5MDkyNCwgMS4yOTA4MjEsIDEuMjkwNzIxLCAxLjI5
MDYyMywgMS4yOTA1MjcsIDEuMjkwNDMyLCAxLjI5MDM0MCwgMS4yOTAyNTAsIDEuMjkwMTYxLCAx
LjI5MDA3NV0sCisgICAgICAgIDAuOTU6IFsKKyAgICAgICAgICAgIDYuMzEzNzUyLCAyLjkxOTk4
NiwgMi4zNTMzNjMsIDIuMTMxODQ3LCAyLjAxNTA0OCwgMS45NDMxODAsIDEuODk0NTc5LCAxLjg1
OTU0OCwgMS44MzMxMTMsIDEuODEyNDYxLAorICAgICAgICAgICAgMS43OTU4ODUsIDEuNzgyMjg4
LCAxLjc3MDkzMywgMS43NjEzMTAsIDEuNzUzMDUwLCAxLjc0NTg4NCwgMS43Mzk2MDcsIDEuNzM0
MDY0LCAxLjcyOTEzMywgMS43MjQ3MTgsCisgICAgICAgICAgICAxLjcyMDc0MywgMS43MTcxNDQs
IDEuNzEzODcyLCAxLjcxMDg4MiwgMS43MDgxNDEsIDEuNzA1NjE4LCAxLjcwMzI4OCwgMS43MDEx
MzEsIDEuNjk5MTI3LCAxLjY5NzI2MSwKKyAgICAgICAgICAgIDEuNjk1NTE5LCAxLjY5Mzg4OSwg
MS42OTIzNjAsIDEuNjkwOTI0LCAxLjY4OTU3MiwgMS42ODgyOTgsIDEuNjg3MDk0LCAxLjY4NTk1
NCwgMS42ODQ4NzUsIDEuNjgzODUxLAorICAgICAgICAgICAgMS42ODI4NzgsIDEuNjgxOTUyLCAx
LjY4MTA3MSwgMS42ODAyMzAsIDEuNjc5NDI3LCAxLjY3ODY2MCwgMS42Nzc5MjcsIDEuNjc3MjI0
LCAxLjY3NjU1MSwgMS42NzU5MDUsCisKKyAgICAgICAgICAgIDEuNjc1Mjg1LCAxLjY3NDY4OSwg
MS42NzQxMTYsIDEuNjczNTY1LCAxLjY3MzAzNCwgMS42NzI1MjIsIDEuNjcyMDI5LCAxLjY3MTU1
MywgMS42NzEwOTMsIDEuNjcwNjQ5LAorICAgICAgICAgICAgMS42NzAyMTksIDEuNjY5ODA0LCAx
LjY2OTQwMiwgMS42NjkwMTMsIDEuNjY4NjM2LCAxLjY2ODI3MSwgMS42Njc5MTYsIDEuNjY3NTcy
LCAxLjY2NzIzOSwgMS42NjY5MTQsCisgICAgICAgICAgICAxLjY2NjYwMCwgMS42NjYyOTQsIDEu
NjY1OTk2LCAxLjY2NTcwNywgMS42NjU0MjUsIDEuNjY1MTUxLCAxLjY2NDg4NSwgMS42NjQ2MjUs
IDEuNjY0MzcxLCAxLjY2NDEyNSwKKyAgICAgICAgICAgIDEuNjYzODg0LCAxLjY2MzY0OSwgMS42
NjM0MjAsIDEuNjYzMTk3LCAxLjY2Mjk3OCwgMS42NjI3NjUsIDEuNjYyNTU3LCAxLjY2MjM1NCwg
MS42NjIxNTUsIDEuNjYxOTYxLAorICAgICAgICAgICAgMS42NjE3NzEsIDEuNjYxNTg1LCAxLjY2
MTQwNCwgMS42NjEyMjYsIDEuNjYxMDUyLCAxLjY2MDg4MSwgMS42NjA3MTUsIDEuNjYwNTUxLCAx
LjY2MDM5MSwgMS42NjAyMzRdLAorICAgICAgICAwLjk3NTogWworICAgICAgICAgICAgMTIuNzA2
MjA1LCA0LjMwMjY1MywgMy4xODI0NDYsIDIuNzc2NDQ1LCAyLjU3MDU4MiwgMi40NDY5MTIsIDIu
MzY0NjI0LCAyLjMwNjAwNCwgMi4yNjIxNTcsIDIuMjI4MTM5LAorICAgICAgICAgICAgMi4yMDA5
ODUsIDIuMTc4ODEzLCAyLjE2MDM2OSwgMi4xNDQ3ODcsIDIuMTMxNDUwLCAyLjExOTkwNSwgMi4x
MDk4MTYsIDIuMTAwOTIyLCAyLjA5MzAyNCwgMi4wODU5NjMsCisgICAgICAgICAgICAyLjA3OTYx
NCwgMi4wNzM4NzMsIDIuMDY4NjU4LCAyLjA2Mzg5OSwgMi4wNTk1MzksIDIuMDU1NTI5LCAyLjA1
MTgzMSwgMi4wNDg0MDcsIDIuMDQ1MjMwLCAyLjA0MjI3MiwKKyAgICAgICAgICAgIDIuMDM5NTEz
LCAyLjAzNjkzMywgMi4wMzQ1MTUsIDIuMDMyMjQ1LCAyLjAzMDEwOCwgMi4wMjgwOTQsIDIuMDI2
MTkyLCAyLjAyNDM5NCwgMi4wMjI2OTEsIDIuMDIxMDc1LAorICAgICAgICAgICAgMi4wMTk1NDEs
IDIuMDE4MDgyLCAyLjAxNjY5MiwgMi4wMTUzNjgsIDIuMDE0MTAzLCAyLjAxMjg5NiwgMi4wMTE3
NDEsIDIuMDEwNjM1LCAyLjAwOTU3NSwgMi4wMDg1NTksCisKKyAgICAgICAgICAgIDIuMDA3NTg0
LCAyLjAwNjY0NywgMi4wMDU3NDYsIDIuMDA0ODc5LCAyLjAwNDA0NSwgMi4wMDMyNDEsIDIuMDAy
NDY1LCAyLjAwMTcxNywgMi4wMDA5OTUsIDIuMDAwMjk4LAorICAgICAgICAgICAgMS45OTk2MjQs
IDEuOTk4OTcyLCAxLjk5ODM0MSwgMS45OTc3MzAsIDEuOTk3MTM4LCAxLjk5NjU2NCwgMS45OTYw
MDgsIDEuOTk1NDY5LCAxLjk5NDk0NSwgMS45OTQ0MzcsCisgICAgICAgICAgICAxLjk5Mzk0Mywg
MS45OTM0NjQsIDEuOTkyOTk3LCAxLjk5MjU0MywgMS45OTIxMDIsIDEuOTkxNjczLCAxLjk5MTI1
NCwgMS45OTA4NDcsIDEuOTkwNDUwLCAxLjk5MDA2MywKKyAgICAgICAgICAgIDEuOTg5Njg2LCAx
Ljk4OTMxOSwgMS45ODg5NjAsIDEuOTg4NjEwLCAxLjk4ODI2OCwgMS45ODc5MzQsIDEuOTg3NjA4
LCAxLjk4NzI5MCwgMS45ODY5NzksIDEuOTg2Njc1LAorICAgICAgICAgICAgMS45ODYzNzcsIDEu
OTg2MDg2LCAxLjk4NTgwMiwgMS45ODU1MjMsIDEuOTg1MjUxLCAxLjk4NDk4NCwgMS45ODQ3MjMs
IDEuOTg0NDY3LCAxLjk4NDIxNywgMS45ODM5NzJdLAorICAgICAgICAwLjk5OiBbCisgICAgICAg
ICAgICAzMS44MjA1MTYsIDYuOTY0NTU3LCA0LjU0MDcwMywgMy43NDY5NDcsIDMuMzY0OTMwLCAz
LjE0MjY2OCwgMi45OTc5NTIsIDIuODk2NDU5LCAyLjgyMTQzOCwgMi43NjM3NjksCisgICAgICAg
ICAgICAyLjcxODA3OSwgMi42ODA5OTgsIDIuNjUwMzA5LCAyLjYyNDQ5NCwgMi42MDI0ODAsIDIu
NTgzNDg3LCAyLjU2NjkzNCwgMi41NTIzODAsIDIuNTM5NDgzLCAyLjUyNzk3NywKKyAgICAgICAg
ICAgIDIuNTE3NjQ4LCAyLjUwODMyNSwgMi40OTk4NjcsIDIuNDkyMTU5LCAyLjQ4NTEwNywgMi40
Nzg2MzAsIDIuNDcyNjYwLCAyLjQ2NzE0MCwgMi40NjIwMjEsIDIuNDU3MjYyLAorICAgICAgICAg
ICAgMi40NTI4MjQsIDIuNDQ4Njc4LCAyLjQ0NDc5NCwgMi40NDExNTAsIDIuNDM3NzIzLCAyLjQz
NDQ5NCwgMi40MzE0NDcsIDIuNDI4NTY4LCAyLjQyNTg0MSwgMi40MjMyNTcsCisgICAgICAgICAg
ICAyLjQyMDgwMywgMi40MTg0NzAsIDIuNDE2MjUwLCAyLjQxNDEzNCwgMi40MTIxMTYsIDIuNDEw
MTg4LCAyLjQwODM0NSwgMi40MDY1ODEsIDIuNDA0ODkyLCAyLjQwMzI3MiwKKworICAgICAgICAg
ICAgMi40MDE3MTgsIDIuNDAwMjI1LCAyLjM5ODc5MCwgMi4zOTc0MTAsIDIuMzk2MDgxLCAyLjM5
NDgwMSwgMi4zOTM1NjgsIDIuMzkyMzc3LCAyLjM5MTIyOSwgMi4zOTAxMTksCisgICAgICAgICAg
ICAyLjM4OTA0NywgMi4zODgwMTEsIDIuMzg3MDA4LCAyLjM4NjAzNywgMi4zODUwOTcsIDIuMzg0
MTg2LCAyLjM4MzMwMiwgMi4zODI0NDYsIDIuMzgxNjE1LCAyLjM4MDgwNywKKyAgICAgICAgICAg
IDIuMzgwMDI0LCAyLjM3OTI2MiwgMi4zNzg1MjIsIDIuMzc3ODAyLCAyLjM3NzEwMiwgMi4zNzY0
MjAsIDIuMzc1NzU3LCAyLjM3NTExMSwgMi4zNzQ0ODIsIDIuMzczODY4LAorICAgICAgICAgICAg
Mi4zNzMyNzAsIDIuMzcyNjg3LCAyLjM3MjExOSwgMi4zNzE1NjQsIDIuMzcxMDIyLCAyLjM3MDQ5
MywgMi4zNjk5NzcsIDIuMzY5NDcyLCAyLjM2ODk3OSwgMi4zNjg0OTcsCisgICAgICAgICAgICAy
LjM2ODAyNiwgMi4zNjc1NjYsIDIuMzY3MTE1LCAyLjM2NjY3NCwgMi4zNjYyNDMsIDIuMzY1ODIx
LCAyLjM2NTQwNywgMi4zNjUwMDIsIDIuMzY0NjA2LCAyLjM2NDIxN10KKyAgICB9OworCit9KSgp
OworCitpZiAodHlwZW9mIG1vZHVsZSAhPSAndW5kZWZpbmVkJykgeworICAgIGZvciAodmFyIGtl
eSBpbiBTdGF0aXN0aWNzKQorICAgICAgICBtb2R1bGUuZXhwb3J0c1trZXldID0gU3RhdGlzdGlj
c1trZXldOworfQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9z
dGF0aXN0aWNzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9y
ZXNvdXJjZXMvc3RhdGlzdGljcy5qcwkod29ya2luZyBjb3B5KQorKysgUGVyZm9ybWFuY2VUZXN0
cy9Bbmltb21ldGVyL3Jlc291cmNlcy9zdGF0aXN0aWNzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw2ICs0MSwxMiBAQCB2YXIgU3RhdGlzdGljcyA9IG5ldyAoZnVuY3Rpb24gKCkgewogICAgICAg
ICByZXR1cm4gdmFsdWVzLnJlZHVjZShmdW5jdGlvbiAoc3VtLCB2YWx1ZSkgeyByZXR1cm4gc3Vt
ICsgdmFsdWUgKiB2YWx1ZTt9LCAwKTsKICAgICB9CiAKKyAgICB0aGlzLnNhbXBsZU1lYW4gPSBm
dW5jdGlvbihudW1iZXJPZlNhbXBsZXMsIHN1bSkgeworICAgICAgICBpZiAobnVtYmVyT2ZTYW1w
bGVzIDwgMSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gc3VtIC8gbnVt
YmVyT2ZTYW1wbGVzOworICAgIH0KKwogICAgIC8vIFdpdGggc3VtIGFuZCBzdW0gb2Ygc3F1YXJl
cywgd2UgY2FuIGNvbXB1dGUgdGhlIHNhbXBsZSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gTygxKS4K
ICAgICAvLyBTZWUgaHR0cHM6Ly9ybml3YS5jb20vMjAxMi0xMS0xMC9zYW1wbGUtc3RhbmRhcmQt
ZGV2aWF0aW9uLWluLXRlcm1zLW9mLXN1bS1hbmQtc3F1YXJlLXN1bS1vZi1zYW1wbGVzLwogICAg
IHRoaXMuc2FtcGxlU3RhbmRhcmREZXZpYXRpb24gPSBmdW5jdGlvbiAobnVtYmVyT2ZTYW1wbGVz
LCBzdW0sIHNxdWFyZVN1bSkgewpAQCAtNDksNiArNTUsMTMgQEAgdmFyIFN0YXRpc3RpY3MgPSBu
ZXcgKGZ1bmN0aW9uICgpIHsKICAgICAgICAgcmV0dXJuIE1hdGguc3FydChzcXVhcmVTdW0gLyAo
bnVtYmVyT2ZTYW1wbGVzIC0gMSkKICAgICAgICAgICAgIC0gc3VtICogc3VtIC8gKG51bWJlck9m
U2FtcGxlcyAtIDEpIC8gbnVtYmVyT2ZTYW1wbGVzKTsKICAgICB9CisgICAgCisgICAgdGhpcy5n
ZW9tZXRyaWNNZWFuID0gZnVuY3Rpb24odmFsdWVzKSB7CisgICAgICAgIGlmICghdmFsdWVzLmxl
bmd0aCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB2YXIgcm9vdHMgPSB2YWx1ZXMu
bWFwKGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiAgTWF0aC5wb3codmFsdWUsIDEgLyB2YWx1ZXMu
bGVuZ3RoKTsgfSkKKyAgICAgICAgcmV0dXJuIHJvb3RzLnJlZHVjZShmdW5jdGlvbihhLCBiKSB7
IHJldHVybiBhICogYjsgfSk7CisgICAgfQogCiAgICAgdGhpcy5zdXBwb3J0ZWRDb25maWRlbmNl
TGV2ZWxzID0gZnVuY3Rpb24gKCkgewogICAgICAgICB2YXIgc3VwcG9ydGVkTGV2ZWxzID0gW107
CkBAIC02OCw5ICs4MSw3IEBAIHZhciBTdGF0aXN0aWNzID0gbmV3IChmdW5jdGlvbiAoKSB7CiAg
ICAgICAgICAgICByZXR1cm4gTmFOOwogCiAgICAgICAgIHZhciBjZGZGb3JQcm9iYWJpbGl0eSA9
IHREaXN0cmlidXRpb25JbnZlcnNlQ0RGW3Byb2JhYmlsaXR5XTsKLSAgICAgICAgdmFyIGRlZ3Jl
ZXNPZkZyZWVkb20gPSBudW1iZXJPZlNhbXBsZXMgLSAxOwotICAgICAgICBpZiAoZGVncmVlc09m
RnJlZWRvbSA+IGNkZkZvclByb2JhYmlsaXR5Lmxlbmd0aCkKLSAgICAgICAgICAgIHRocm93ICdX
ZSBvbmx5IHN1cHBvcnQgdXAgdG8gJyArIGRlbHRhcy5sZW5ndGggKyAnIGRlZ3JlZXMgb2YgZnJl
ZWRvbSc7CisgICAgICAgIHZhciBkZWdyZWVzT2ZGcmVlZG9tID0gTWF0aC5taW4obnVtYmVyT2ZT
YW1wbGVzIC0gMSwgY2RmRm9yUHJvYmFiaWxpdHkubGVuZ3RoKTsKIAogICAgICAgICAvLyB0RGlz
dHJpYnV0aW9uUXVhbnRpbGUoZGVncmVlc09mRnJlZWRvbSwgY29uZmlkZW5jZUxldmVsKSAqIHNh
bXBsZVN0YW5kYXJkRGV2aWF0aW9uIC8gc3FydChudW1iZXJPZlNhbXBsZXMpICogUy9zcXJ0KG51
bWJlck9mU2FtcGxlcykKICAgICAgICAgdmFyIHF1YW50aWxlID0gY2RmRm9yUHJvYmFiaWxpdHlb
ZGVncmVlc09mRnJlZWRvbSAtIDFdOyAvLyBUaGUgZmlyc3QgZW50cnkgaXMgZm9yIHRoZSBvbmUg
ZGVncmVlIG9mIGZyZWVkb20uCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262372</attachid>
            <date>2015-10-02 18:09:07 -0700</date>
            <delta_ts>2015-10-02 19:08:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149691-20151002180840.patch</filename>
            <type>text/plain</type>
            <size>23216</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTA1MzUpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBACisyMDE1LTEwLTAyICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRk
IHNoYXJlZCBjb2RlIGZvciBhIG5ldyBhIGdyYXBoaWNzIGJlbmNobWFyaworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5NjkxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBzZXQgb2YgY2xhc3NlcyB3
aWxsIGJlIHNoYXJlZCBhbmQgdXNlZCBieSB0aGUgdGVzdHMgYW5kIHRoZSBydW5uZXIKKyAgICAg
ICAgb2YgYSBuZXcgZ3JhcGhpY3MgYmVuY2htYXJrLgorCisgICAgICAgICogQW5pbW9tZXRlci9y
ZXNvdXJjZXM6IEFkZGVkLgorICAgICAgICAqIEFuaW1vbWV0ZXIvcmVzb3VyY2VzL2FsZ29yaXRo
bS5qczogQWRkZWQuCisgICAgICAgIChBcnJheS5wcm90b3R5cGUuc3dhcCk6IFN3YXBzIHR3byBl
bGVtZW50cyBpbiBhbiBhcnJheS4KKyAgICAgICAgKEhlYXApOiBCaW5hcnkgTWluL01heCBIZWFw
IG9iamVjdAorICAgICAgICAoSGVhcC5wcm90b3R5cGUuX3BhcmVudEluZGV4KTogR2l2ZW4gdGhl
IGNoaWxkIG5vZGUgaW5kZXgsIGl0IHJldHVybnMgdGhlIHBhcmVudCBpbmRleC4KKyAgICAgICAg
KEhlYXAucHJvdG90eXBlLl9sZWZ0SW5kZXgpOiBHaXZlbiB0aGUgcGFyZW50IG5vZGUgaW5kZXgs
IGl0IHJldHVybnMgdGhlIGxlZnQgbm9kZSBpbmRleC4KKyAgICAgICAgKEhlYXAucHJvdG90eXBl
Ll9yaWdodEluZGV4KTogR2l2ZW4gdGhlIHBhcmVudCBub2RlIGluZGV4LCBpdCByZXR1cm5zIHRo
ZSByaWdodCBub2RlIGluZGV4LgorICAgICAgICAoSGVhcC5wcm90b3R5cGUuX2NoaWxkSW5kZXgp
OiBHaXZlbiB0aGUgcGFyZW50IG5vZGUgaW5kZXgsIGl0IHJldHVybnMgdGhlIGNoaWxkIGluZGV4
IHRoYXQgbWF5IHZpb2xhdGUgdGhlIGhlYXAgcHJvcGVydHkuCisgICAgICAgIChIZWFwLnByb3Rv
dHlwZS5pbml0KTogSW5pdGlhbGl6ZXMgdGhlIGhlYXAgc3RhdGUuCisgICAgICAgIChIZWFwLnBy
b3RvdHlwZS50b3ApOiBSZXR1cm5zIHRoZSB2YWx1ZSBzdG9yZWQgYXQgdGhlIHRvcCBvZiB0aGUg
aGVhcC4KKyAgICAgICAgKEhlYXAucHJvdG90eXBlLnB1c2gpOiBQdXNoZXMgYSBuZXcgbm9kZSBh
dCB0aGUgdG9wIG9mIHRoZSBoZWFwLgorICAgICAgICAoSGVhcC5wcm90b3R5cGUucG9wKTogRXh0
cmFjdHMgdGhlIHRvcCBub2RlIG9mIHRoZSBoZWFwLgorICAgICAgICAoSGVhcC5wcm90b3R5cGUu
X2J1YmJsZSk6IEZpeGVzIHRoZSBoZWFwIHByb3BlcnR5IGJ5IG1vdmluZyB1cHdhcmQuCisgICAg
ICAgIChIZWFwLnByb3RvdHlwZS5fc2luayk6IEZpeGVzIHRoZSBoZWFwIHByb3BlcnR5IGJ5IG1v
dmluZyBkb3dud2FyZC4KKyAgICAgICAgKEhlYXAucHJvdG90eXBlLnN0cik6IFByaW50cyB0aGUg
bm9kZXMgb2YgdGhlIGhlYXAgdG8gYSBzdHJpbmcuCisgICAgICAgIChIZWFwLnByb3RvdHlwZS52
YWx1ZXMpOiBSZXR1cm5zIHRoZSBsYXN0ICJzaXplIiBoZWFwIGVsZW1lbnRzIHZhbHVlcy4KKwor
ICAgICAgICAoQWxnb3JpdGhtLmNyZWF0ZU1pbkhlYXApOiBDcmVhdGVzIGEgc2l6ZS1ib3VuZGVk
IG1pbi1oZWFwIG9iamVjdC4KKyAgICAgICAgKEFsZ29yaXRobS5jcmVhdGVNYXhIZWFwKTogQ3Jl
YXRlcyBhIHNpemUtYm91bmRlZCBtYXgtaGVhcCBvYmplY3QuCisgICAgICAgIAorICAgICAgICAq
IEFuaW1vbWV0ZXIvcmVzb3VyY2VzL2V4dGVuc2lvbnMuanM6IEFkZGVkLgorICAgICAgICAoUG9p
bnQpOiBQb2ludCBvYmplY3QgYnV0IGNhbiBiZSB1c2VkIGFzIHNpemUgYWxzby4KKyAgICAgICAg
KFBvaW50LnBvaW50T25DaXJjbGUpOiBHaXZlbiwgdGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlIGFu
ZCB0aGUgYW5nbGUgb2YgdGhlIHBvaW50LCBpdCByZXR1cm5zIGEgcG9pbnQgb2JqZWN0LgorICAg
ICAgICAoUG9pbnQucG9pbnRPbkVsbGlwc2UpOiBHaXZlbiwgdGhlIHJhZGl1c2VzIG9mIHRoZSBl
bGxpcHNlIGFuZCB0aGUgYW5nbGUgb2YgdGhlIHBvaW50LCBpdCByZXR1cm5zIGEgcG9pbnQgb2Jq
ZWN0LgorICAgICAgICAoUG9pbnQucHJvdG90eXBlLmdldCB3aWR0aCk6IFNob3VsZCBiZSBjYWxs
ZWQgd2hlbiB0aGUgcG9pbnQgaXMgdXNlZCBhcyBzaXplLgorICAgICAgICAoUG9pbnQucHJvdG90
eXBlLmdldCBoZWlnaHQpOiBTaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIHBvaW50IGlzIHVzZWQg
YXMgc2l6ZS4KKyAgICAgICAgKFBvaW50LnByb3RvdHlwZS5nZXQgY2VudGVyKTogU2hvdWxkIGJl
IGNhbGxlZCB3aGVuIHRoZSBwb2ludCBpcyB1c2VkIGFzIHNpemUuCisgICAgICAgIChQb2ludC5w
cm90b3R5cGUuYWRkKTogUmV0dXJucyBhIG5ldyBwb2ludCA9IHRoaXMgKyBvdGhlci4KKyAgICAg
ICAgKFBvaW50LnByb3RvdHlwZS5zdWJ0cmFjdCk6IFJldHVybnMgYSBuZXcgcG9pbnQgPSB0aGlz
IC0gb3RoZXIuCisgICAgICAgIChQb2ludC5wcm90b3R5cGUubXVsdGlwbHkpOiBSZXR1cm5zIGEg
bmV3IHBvaW50ID0gdGhpcyAqIG90aGVyLgorICAgICAgICAoUG9pbnQucHJvdG90eXBlLm1vdmUp
OiBNb3ZlcyB0aGUgcG9pbnQgaW4gYSBnaXZlbiBkaXJlY3Rpb24sIHZlbG9jaXR5LCB0aW1lIHBl
cmlvZC4KKworICAgICAgICAoSW5zZXRzKTogUmVwcmVzZW50cyBib3JkZXJzIG9mIGEgY29udGFp
bmVyLgorICAgICAgICAoSW5zZXRzLnByb3RvdHlwZS5nZXQgd2lkdGgpOiBSZXR1cm5zIGxlZnQg
KyByaWdodC4KKyAgICAgICAgKEluc2V0cy5wcm90b3R5cGUuZ2V0IGhlaWdodCk6IFJldHVybnMg
dG9wICsgYm90dG9tLgorCisgICAgICAgIChTaW1wbGVQcm9taXNlKToKKyAgICAgICAgKFNpbXBs
ZVByb21pc2UucHJvdG90eXBlLnRoZW4pOgorICAgICAgICAoU2ltcGxlUHJvbWlzZS5wcm90b3R5
cGUucmVzb2x2ZSk6CisgICAgICAgIE1vdmVkIGZyb20gQW5pbW9tZXRlci9ydW5uZXIvcmVzb3Vy
Y2VzL2JlbmNobWFyay1ydW5uZXIuanMgc2luY2UgdGVzdHMgYWxzbyBuZWVkIGl0LgorCisgICAg
ICAgIChPcHRpb25zKTogQmVuY2htYXJrIHJ1bm5pbmcgb3B0aW9ucyBhcyB0aGV5IGFyZSBzZXQg
YnkgdGhlIHVzZXIuCisKKyAgICAgICAgKFByb2dyZXNzQmFyKTogTWFuYWdlcyBhIHByb2dyZXNz
IGJhciBlbGVtZW50LiBUaGUgcHJvZ3Jlc3MgYmFyIGlzIGRpdmlkZWQgaW50byBlcXVhbCBsZW5n
dGggcmFuZ2VzLgorICAgICAgICAoUHJvZ3Jlc3NCYXIucHJvdG90eXBlLl9wcm9ncmVzc1RvUGVy
Y2VudCk6IENvbnZlcnRzIHRoZSBwcm9ncmVzcyBpbnRvIGEgcGVyY2VudGFnZS4KKyAgICAgICAg
KFByb2dyZXNzQmFyLnByb3RvdHlwZS5pbmNSYW5nZSk6IE1vdmVzIHRvIHRoZSBuZXh0IHJhbmdl
IChhIHJhbmdlIGlzIHRoZSBydW5uaW5nIHRpbWUgb2YgYSBzaW5nbGUgdGVzdCkuCisgICAgICAg
IChQcm9ncmVzc0Jhci5wcm90b3R5cGUuc2V0UG9zKTogRHJhd3MgdGhlIGN1cnJlbnQgcHJvZ3Jl
c3MgaW4gdGhlIGN1cnJlbnQgcmFuZ2UuCisKKyAgICAgICAgKFJlY29yZFRhYmxlKTogU2hvd3Mg
dGhlIHJlc3VsdHMgb2YgcnVubmluZyBhIGJlbmNobWFyayBpbiBhIHRhYnVsYXIgZm9ybS4KKyAg
ICAgICAgKFJlY29yZFRhYmxlLnByb3RvdHlwZS5jbGVhcik6IENsZWFycyB0aGUgcmVzdWx0cyB0
YWJsZS4KKyAgICAgICAgKFJlY29yZFRhYmxlLnByb3RvdHlwZS5fc2hvd1RpdGxlcyk6IFNob3dz
IHRoZSBoZWFkZXIgdGl0bGVzIGFuZCBhcHBlbmRzIHRoZSBzdWItdGl0bGVzIHRvIGEgcXVldWUu
CisgICAgICAgIChSZWNvcmRUYWJsZS5wcm90b3R5cGUuX3Nob3dIZWFkZXIpOiBTaG93cyB0aGUg
dGFibGUgaGVhZGVyIHRpdGxlcy4KKyAgICAgICAgKFJlY29yZFRhYmxlLnByb3RvdHlwZS5fc2hv
d0VtcHR5KTogU2hvd3MgYW4gZW1wdHkgdGFibGUgY2VsbC4KKyAgICAgICAgKFJlY29yZFRhYmxl
LnByb3RvdHlwZS5fc2hvd1ZhbHVlKTogU2hvd3MgYSBudW1iZXIgdmFsdWUgaW4gdGhlIHJlc3Vs
dHMgdGFibGUuCisgICAgICAgIChSZWNvcmRUYWJsZS5wcm90b3R5cGUuX3Nob3dTYW1wbGVzKTog
U2hvd3MgYSBidXR0b24gZm9yIHRoZSBzYW1wbGVkIGRhdGEgZ3JhcGguCisgICAgICAgIChSZWNv
cmRUYWJsZS5wcm90b3R5cGUuX3Nob3dUZXN0KTogU2hvd3MgdGhlIHJlc3VsdHMgb2YgYSBzaW5n
bGUgdGVzdC4KKyAgICAgICAgKFJlY29yZFRhYmxlLnByb3RvdHlwZS5fc2hvd1N1aXRlKTogU2hv
d3MgdGhlIHJlc3VsdHMgb2YgYSBzaW5nbGUgc3VpdGUuCisgICAgICAgIChSZWNvcmRUYWJsZS5w
cm90b3R5cGUuc2hvd1JlY29yZCk6IFNob3dzIGEgc2luZ2xlIGl0ZXJhdGlvbiBmb3IgYSBzaW5n
bGUgdGVzdC4KKyAgICAgICAgKFJlY29yZFRhYmxlLnByb3RvdHlwZS5zaG93SXRlcmF0aW9ucyk6
IFNob3dzIHRoZSByZXN1bHRzIG9mIGFsbCB0aGUgc3VpdGVzIG9mIHRoZSBpdGVyYXRpb25zLiAK
KworICAgICAgICAqIEFuaW1vbWV0ZXIvcmVzb3VyY2VzL3NhbXBsZXIuanM6IEFkZGVkLgorICAg
ICAgICAoU3RhdGlzdGljcy5zYW1wbGVNZWFuKTogUmV0dXJucyB0aGUgc2FtcGxlIG1lYW4gZm9y
IGEgc2V0IG9mIGRhdGEgcG9pbnRzLgorICAgICAgICAoU3RhdGlzdGljcy5zYW1wbGVTdGFuZGFy
ZERldmlhdGlvbik6IFJldHVybnMgdGhlIHNhbXBsZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgYSBz
ZXQgb2YgZGF0YS4KKyAgICAgICAgKFN0YXRpc3RpY3MuZ2VvbWV0cmljTWVhbik6IFJldHVybnMg
dGhlIGdlb21ldHJpYyBtZWFuIG9mIGEgc2V0IG9mIGRhdGEuCisKKyAgICAgICAgKEV4cGVyaW1l
bnQpOiBSZXByZXNlbnRzIGEgc2FtcGxpbmcgZXhwZXJpbWVudC4gCisgICAgICAgIChFeHBlcmlt
ZW50LnByb3RvdHlwZS5faW5pdCk6IENhbGxlZCB3aGVuIHRoZSBvYmplY3QgaXMgY3JlYXRlZCBh
bmQgd2hlbiBzdGFydFNhbXBsaW5nKCkgaXMgY2FsbGVkLgorICAgICAgICAoRXhwZXJpbWVudC5w
cm90b3R5cGUuc3RhcnRTYW1wbGluZyk6IENhbGxlZCBhZnRlciB3YXJtdXAgcGVyaW9kLiBSZXN0
YXJ0cyBjb2xsZWN0aW5nIHNhbXBsZWQgZGF0YSBwb2ludHMuCisgICAgICAgIChFeHBlcmltZW50
LnByb3RvdHlwZS5zYW1wbGUpOiBBZGQgYSBuZXcgZGF0YSBwb2ludC4KKyAgICAgICAgKEV4cGVy
aW1lbnQucHJvdG90eXBlLm1lYW4pOiBSZXR1cm5zIHRoZSBzYW1wbGUgbWVhbiBmb3IgdGhlIGN1
cnJlbnQgc2FtcGxlZCBkYXRhIHBvaW50cy4KKyAgICAgICAgKEV4cGVyaW1lbnQucHJvdG90eXBl
LnN0YW5kYXJkRGV2aWF0aW9uKTogUmV0dXJucyB0aGUgc2FtcGxlIHN0YW5kYXJkIGRldmlhdGlv
biBmb3IgdGhlIGN1cnJlbnQgc2FtcGxlZCBkYXRhIHBvaW50cy4KKyAgICAgICAgKEV4cGVyaW1l
bnQucHJvdG90eXBlLnBlcmNlbnRhZ2UpOiBSZXR1cm5zIHRoZSBwZXJjZW50YWdlIG9mIHRoZSBz
dGFuZGFyZCBkZXZpYXRpb24gZGl2aWRlZCB0byB0aGUgbWVhbi4KKyAgICAgICAgKEV4cGVyaW1l
bnQucHJvdG90eXBlLmNvbmZpZGVuY2VJbnRlcnZhbERlbHRhKTogQ2FsY3VsYXRlcyB0aGUgY29u
ZmlkZW5jZSBkZWx0YSBmb3IgdGhlIGN1cnJlbnQgc2FtcGxlZCBkYXRhIGdpdmVuIGEgY29uZmlk
ZW5jZSBsZXZlbC4KKyAgICAgICAgKEV4cGVyaW1lbnQucHJvdG90eXBlLmNvbmNlcm4pOiBSZXR1
cm5zIHRoZSBhdmVyYWdlIG9mIHRoZSB3b3JzdCBnaXZlbiBwZXJjZW50YWdlIGZyb20gdGhlIHNh
bXBsZWQgZGF0YS4KKyAgICAgICAgKEV4cGVyaW1lbnQucHJvdG90eXBlLnNjb3JlKTogUmV0dXJu
cyBhIHNjb3JlIGZvciB0aGUgc2FtcGxlZCBkYXRhLiBJdCBpcyB0aGUgZ2VvbWV0cmljIG1lYW4g
b2Ygc2FtcGxlTWVhbiBhbmQgY29uY2Vybi4KKworICAgICAgICAoU2FtcGxlcik6IFJlcHJlc2Vu
dHMgYSBjb21wb3VuZCBleHBlcmltZW50LiBJdCBtYW5hZ2VzIHNhbXBsaW5nIG11bHRpcGxlIGRh
dGEgcG9pbnRzIGF0IHRoZSBzYW1lIHRpbWUgb2Zmc2V0LgorICAgICAgICAoU2FtcGxlci5wcm90
b3R5cGUuc3RhcnRTYW1wbGluZyk6IENhbGxlZCBhZnRlciB3YXJtaW5nIHVwIHBlcmlvZC4gUmVz
dGFydHMgY29sbGVjdGluZyBzYW1wbGVkIGRhdGEgcG9pbnRzLgorICAgICAgICAoU2FtcGxlci5w
cm90b3R5cGUuc2FtcGxlKTogQWRkIGEgbmV3IGRhdGEgdmVjdG9yIGF0IGEgZ2l2ZW4gdGltZSBv
ZmZzZXQuCisgICAgICAgIAogMjAxNS0xMC0wMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhh
bGxhd2FAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCB0aGUgdGVzdCBydW5uZXIgZm9yIGEgbmV3
IGEgZ3JhcGhpY3MgYmVuY2htYXJrCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIv
cmVzb3VyY2VzL2FsZ29yaXRobS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0Fu
aW1vbWV0ZXIvcmVzb3VyY2VzL2FsZ29yaXRobS5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1h
bmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvYWxnb3JpdGhtLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTQyIEBACitBcnJheS5wcm90b3R5cGUuc3dhcCA9IGZ1bmN0aW9uKGksIGop
Cit7CisgICAgdmFyIHQgPSB0aGlzW2ldOworICAgIHRoaXNbaV0gPSB0aGlzW2pdOworICAgIHRo
aXNbal0gPSB0OworICAgIHJldHVybiB0aGlzOworfQorCitmdW5jdGlvbiBIZWFwKG1heFNpemUs
IGNvbXBhcmUpCit7CisgICAgdGhpcy5fbWF4U2l6ZSA9IG1heFNpemU7CisgICAgdGhpcy5fY29t
cGFyZSA9IGNvbXBhcmU7CisgICAgdGhpcy5fc2l6ZSA9IDA7CisgICAgdGhpcy5fdmFsdWVzID0g
bmV3IEFycmF5KHRoaXMuX21heFNpemUpOworfQorCitIZWFwLnByb3RvdHlwZSA9Cit7CisgICAg
Ly8gVGhpcyBpcyBhIGJpbmFyeSBoZWFwIHJlcHJlc2VudGVkIGluIGFuIGFycmF5LiBUaGUgcm9v
dCBlbGVtZW50IGlzIHN0b3JlZAorICAgIC8vIGluIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBh
cnJheS4gVGhlIHJvb3QgaXMgZm9sbG93ZWQgYnkgaXRzIHR3byBjaGlsZHJlbi4KKyAgICAvLyBU
aGVuIGl0cyBmb3VyIGdyYW5kY2hpbGRyZW4gYW5kIHNvIG9uLiBTbyBldmVyeSBsZXZlbCBpbiB0
aGUgYmluYXJ5IGhlYXAgaXMKKyAgICAvLyBkb3VibGVkIGluIHRoZSBmb2xsb3dpbmcgbGV2ZWwu
IEhlcmUgaXMgYW4gZXhhbXBsZSBvZiB0aGUgbm9kZSBpbmRpY2VzIGFuZAorICAgIC8vIGhvdyB0
aGV5IGFyZSByZWxhdGVkIHRvIHRoZWlyIHBhcmVudHMgYW5kIGNoaWxkcmVuLgorICAgIC8vID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQorICAgIC8vICAgICAgICAgICAgICAwICAgICAgIDEgICAgICAgMiAg
ICAgICAzICAgICAgIDQgICAgICAgNSAgICAgICA2CisgICAgLy8gUEFSRU5UICAgICAgIC0xICAg
ICAgMCAgICAgICAwICAgICAgIDEgICAgICAgMSAgICAgICAyICAgICAgIDIKKyAgICAvLyBMRUZU
ICAgICAgICAgMSAgICAgICAzICAgICAgIDUgICAgICAgNyAgICAgICA5ICAgICAgIDExICAgICAg
MTMKKyAgICAvLyBSSUdIVCAgICAgICAgMiAgICAgICA0ICAgICAgIDYgICAgICAgOCAgICAgICAx
MCAgICAgIDEyICAgICAgMTQKKyAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBfcGFyZW50
SW5kZXg6IGZ1bmN0aW9uKGkpCisgICAgeworICAgICAgICByZXR1cm4gaSA+IDAgPyBNYXRoLmZs
b29yKChpIC0gMSkgLyAyKSA6IC0xOworICAgIH0sCisgICAgCisgICAgX2xlZnRJbmRleDogZnVu
Y3Rpb24oaSkKKyAgICB7CisgICAgICAgIHZhciBsZWZ0SW5kZXggPSBpICogMiArIDE7CisgICAg
ICAgIHJldHVybiBsZWZ0SW5kZXggPCB0aGlzLl9zaXplID8gbGVmdEluZGV4IDogLTE7CisgICAg
fSwKKyAgICAKKyAgICBfcmlnaHRJbmRleDogZnVuY3Rpb24oaSkKKyAgICB7CisgICAgICAgIHZh
ciByaWdodEluZGV4ID0gaSAqIDIgKyAyOworICAgICAgICByZXR1cm4gcmlnaHRJbmRleCA8IHRo
aXMuX3NpemUgPyByaWdodEluZGV4IDogLTE7CisgICAgfSwKKyAgICAKKyAgICAvLyBSZXR1cm4g
dGhlIGNoaWxkIGluZGV4IHRoYXQgbWF5IHZpb2xhdGUgdGhlIGhlYXAgcHJvcGVydHkgYXQgaW5k
ZXggaS4KKyAgICBfY2hpbGRJbmRleDogZnVuY3Rpb24oaSkKKyAgICB7CisgICAgICAgIHZhciBs
ZWZ0ID0gdGhpcy5fbGVmdEluZGV4KGkpOworICAgICAgICB2YXIgcmlnaHQgPSB0aGlzLl9yaWdo
dEluZGV4KGkpOworCisgICAgICAgIGlmIChsZWZ0ICE9IC0xICYmIHJpZ2h0ICE9IC0xKQorICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbXBhcmUodGhpcy5fdmFsdWVzW2xlZnRdLCB0aGlzLl92
YWx1ZXNbcmlnaHRdKSA+IDAgPyBsZWZ0IDogcmlnaHQ7CisgICAgICAgIAorICAgICAgICByZXR1
cm4gbGVmdCAhPSAtMSA/IGxlZnQgOiByaWdodDsKKyAgICB9LAorICAgIAorICAgIGluaXQ6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3NpemUgPSAwOworICAgIH0sCisgICAgCisg
ICAgdG9wOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZSA/IHRo
aXMuX3ZhbHVlc1swXSA6IE5hTjsKKyAgICB9LAorICAgIAorICAgIHB1c2g6IGZ1bmN0aW9uKHZh
bHVlKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3NpemUgPT0gdGhpcy5fbWF4U2l6ZSkgewor
ICAgICAgICAgICAgLy8gSWYgc2l6ZSBpcyBib3VuZGVkIGFuZCB0aGUgbmV3IHZhbHVlIGNhbiBi
ZSBhIHBhcmVudCBvZiB0aGUgdG9wKCkKKyAgICAgICAgICAgIC8vIGlmIHRoZSBzaXplIHdlcmUg
dW5ib3VuZGVkLCBqdXN0IGlnbm9yZSB0aGUgbmV3IHZhbHVlLgorICAgICAgICAgICAgaWYgKHRo
aXMuX2NvbXBhcmUodmFsdWUsIHRoaXMudG9wKCkpID4gMCkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB0aGlzLnBvcCgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3Zh
bHVlc1t0aGlzLl9zaXplKytdID0gdmFsdWU7CisgICAgICAgIHRoaXMuX2J1YmJsZSh0aGlzLl9z
aXplIC0gMSk7CisgICAgfSwKKworICAgIHBvcDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
aWYgKCF0aGlzLl9zaXplKQorICAgICAgICAgICAgcmV0dXJuIE5hTjsKKyAgICAgICAgCisgICAg
ICAgIHRoaXMuX3ZhbHVlc1swXSA9IHRoaXMuX3ZhbHVlc1stLXRoaXMuX3NpemVdOworICAgICAg
ICB0aGlzLl9zaW5rKDApOworICAgIH0sCisgICAgCisgICAgX2J1YmJsZTogZnVuY3Rpb24oaSkK
KyAgICB7CisgICAgICAgIC8vIEZpeCB0aGUgaGVhcCBwcm9wZXJ0eSBhdCBpbmRleCBpIGdpdmVu
IHRoYXQgcGFyZW50IGlzIHRoZSBvbmx5IG5vZGUgdGhhdAorICAgICAgICAvLyBtYXkgdmlvbGF0
ZSB0aGUgaGVhcCBwcm9wZXJ0eS4KKyAgICAgICAgZm9yICh2YXIgcGkgPSB0aGlzLl9wYXJlbnRJ
bmRleChpKTsgcGkgIT0gLTE7IGkgPSBwaSwgcGkgPSB0aGlzLl9wYXJlbnRJbmRleChwaSkpIHsK
KyAgICAgICAgICAgIGlmICh0aGlzLl9jb21wYXJlKHRoaXMuX3ZhbHVlc1twaV0sIHRoaXMuX3Zh
bHVlc1tpXSkgPiAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgdGhpcy5fdmFsdWVzLnN3YXAocGksIGkpOworICAgICAgICB9CisgICAgfSwK
KyAgICAKKyAgICBfc2luazogZnVuY3Rpb24oaSkKKyAgICB7CisgICAgICAgIC8vIEZpeCB0aGUg
aGVhcCBwcm9wZXJ0eSBhdCBpbmRleCBpIGdpdmVuIHRoYXQgZWFjaCBvZiB0aGUgbGVmdCBhbmQg
dGhlIHJpZ2h0CisgICAgICAgIC8vIHN1Yi10cmVlcyBzYXRpc2ZpZXMgdGhlIGhlYXAgcHJvcGVy
dHkuCisgICAgICAgIGZvciAodmFyIGNpID0gdGhpcy5fY2hpbGRJbmRleChpKTsgY2kgIT0gLTE7
IGkgPSBjaSwgY2kgPSB0aGlzLl9jaGlsZEluZGV4KGNpKSkgeworICAgICAgICAgICAgaWYgKHRo
aXMuX2NvbXBhcmUodGhpcy5fdmFsdWVzW2ldLCB0aGlzLl92YWx1ZXNbY2ldKSA+IDApCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHRoaXMuX3ZhbHVl
cy5zd2FwKGNpLCBpKTsKKyAgICAgICAgfQorICAgIH0sCisgICAgCisgICAgc3RyOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICB2YXIgb3V0ID0gIkhlYXBbIiArIHRoaXMuX3NpemUgKyAiXSA9
IFsiOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NpemU7ICsraSkgeworICAg
ICAgICAgICAgb3V0ICs9IHRoaXMuX3ZhbHVlc1tpXTsKKyAgICAgICAgICAgIGlmIChpIDwgdGhp
cy5fc2l6ZSAtIDEpCisgICAgICAgICAgICAgICAgb3V0ICs9ICIsICI7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG91dCArICJdIjsKKyAgICB9LAorICAgIAorICAgIHZhbHVlczogZnVuY3Rp
b24oc2l6ZSkgeworICAgICAgICAvLyBSZXR1cm4gdGhlIGxhc3QgInNpemUiIGhlYXAgZWxlbWVu
dHMgdmFsdWVzLgorICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy5fdmFsdWVzLnNsaWNlKDAsIHRo
aXMuX3NpemUpOworICAgICAgICByZXR1cm4gdmFsdWVzLnNvcnQodGhpcy5fY29tcGFyZSkuc2xp
Y2UoMCwgTWF0aC5taW4oc2l6ZSwgdGhpcy5fc2l6ZSkpOworICAgIH0KK30KKwordmFyIEFsZ29y
aXRobSA9IHsKKyAgICBjcmVhdGVNaW5IZWFwOiBmdW5jdGlvbihtYXhTaXplKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyBIZWFwKG1heFNpemUsIGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGIg
LSBhOyB9KTsKKyAgICB9LAorICAgIAorICAgIGNyZWF0ZU1heEhlYXA6IGZ1bmN0aW9uKG1heFNp
emUpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBIZWFwKG1heFNpemUsIGZ1bmN0aW9uKGEsIGIpIHsg
cmV0dXJuIGEgLSBiOyB9KTsKKyAgICB9Cit9CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0FuaW1v
bWV0ZXIvcmVzb3VyY2VzL2V4dGVuc2lvbnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VU
ZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9leHRlbnNpb25zLmpzCShyZXZpc2lvbiAwKQorKysg
UGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9leHRlbnNpb25zLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzA1IEBACitmdW5jdGlvbiBQb2ludCh4LCB5KQoreworICAg
IHRoaXMueCA9IHg7CisgICAgdGhpcy55ID0geTsKK30KKworUG9pbnQucG9pbnRPbkNpcmNsZSA9
IGZ1bmN0aW9uKGFuZ2xlLCByYWRpdXMpCit7CisgICAgcmV0dXJuIG5ldyBQb2ludChyYWRpdXMg
KiBNYXRoLmNvcyhhbmdsZSksIHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlKSk7Cit9CisKK1BvaW50
LnBvaW50T25FbGxpcHNlID0gZnVuY3Rpb24oYW5nbGUsIHJhZGl1c2VzKQoreworICAgIHJldHVy
biBuZXcgUG9pbnQocmFkaXVzZXMueCAqIE1hdGguY29zKGFuZ2xlKSwgcmFkaXVzZXMueSAqIE1h
dGguc2luKGFuZ2xlKSk7Cit9CisKK1BvaW50LnByb3RvdHlwZSA9Cit7CisgICAgLy8gVXNlZCB3
aGVuIHRoZSBwb2ludCBvYmplY3QgaXMgdXNlZCBhcyBhIHNpemUgb2JqZWN0LgorICAgIGdldCB3
aWR0aCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy54OworICAgIH0sCisgICAgCisgICAg
Ly8gVXNlZCB3aGVuIHRoZSBwb2ludCBvYmplY3QgaXMgdXNlZCBhcyBhIHNpemUgb2JqZWN0Lgor
ICAgIGdldCBoZWlnaHQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMueTsKKyAgICB9LAor
ICAgIAorICAgIC8vIFVzZWQgd2hlbiB0aGUgcG9pbnQgb2JqZWN0IGlzIHVzZWQgYXMgYSBzaXpl
IG9iamVjdC4KKyAgICBnZXQgY2VudGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUG9p
bnQodGhpcy54IC8gMiwgdGhpcy55IC8gMik7CisgICAgfSwKKyAgICAKKyAgICBhZGQ6IGZ1bmN0
aW9uKG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLnggKyBvdGhl
ci54LCB0aGlzLnkgKyBvdGhlci55KTsKKyAgICB9LAorICAgIAorICAgIHN1YnRyYWN0OiBmdW5j
dGlvbihvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54IC0gb3Ro
ZXIueCwgdGhpcy55IC0gb3RoZXIueSk7CisgICAgfSwKKyAgICAKKyAgICBtdWx0aXBseTogZnVu
Y3Rpb24ob3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCAqIG90
aGVyLngsIHRoaXMueSAqIG90aGVyLnkpOworICAgIH0sCisgICAgCisgICAgbW92ZTogZnVuY3Rp
b24oYW5nbGUsIHZlbG9jaXR5LCB0aW1lRGVsdGEpCisgICAgeworICAgICAgICByZXR1cm4gdGhp
cy5hZGQoUG9pbnQucG9pbnRPbkNpcmNsZShhbmdsZSwgdmVsb2NpdHkgKiAodGltZURlbHRhIC8g
MTAwMCkpKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIEluc2V0cyh0b3AsIHJpZ2h0LCBib3R0b20s
IGxlZnQpCit7CisgICAgdGhpcy50b3AgPSB0b3A7CisgICAgdGhpcy5yaWdodCA9IHJpZ2h0Owor
ICAgIHRoaXMuYm90dG9tID0gYm90dG9tOworICAgIHRoaXMubGVmdCA9IGxlZnQ7Cit9CisKK0lu
c2V0cy5wcm90b3R5cGUgPQoreworICAgIGdldCB3aWR0aCgpIHsKKyAgICAgICAgcmV0dXJuIHRo
aXMubGVmdCArIHRoaXMucmlnaHQ7CisgICAgfSwKKworICAgIGdldCBoZWlnaHQoKSB7CisgICAg
ICAgIHJldHVybiB0aGlzLnRvcCArIHRoaXMuYm90dG9tOworICAgIH0KK30KKworZnVuY3Rpb24g
U2ltcGxlUHJvbWlzZSgpCit7CisgICAgdGhpcy5fY2hhaW5lZFByb21pc2UgPSBudWxsOworICAg
IHRoaXMuX2NhbGxiYWNrID0gbnVsbDsKK30KKworU2ltcGxlUHJvbWlzZS5wcm90b3R5cGUudGhl
biA9IGZ1bmN0aW9uIChjYWxsYmFjaykKK3sKKyAgICBpZiAodGhpcy5fY2FsbGJhY2spCisgICAg
ICAgIHRocm93ICJTaW1wbGVQcm9taXNlIGRvZXNuJ3Qgc3VwcG9ydCBtdWx0aXBsZSBjYWxscyB0
byB0aGVuIjsKKyAgICAgICAgCisgICAgdGhpcy5fY2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICB0
aGlzLl9jaGFpbmVkUHJvbWlzZSA9IG5ldyBTaW1wbGVQcm9taXNlOworICAgIAorICAgIGlmICh0
aGlzLl9yZXNvbHZlZCkKKyAgICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuX3Jlc29sdmVkVmFsdWUp
OworCisgICAgcmV0dXJuIHRoaXMuX2NoYWluZWRQcm9taXNlOworfQorCitTaW1wbGVQcm9taXNl
LnByb3RvdHlwZS5yZXNvbHZlID0gZnVuY3Rpb24gKHZhbHVlKQoreworICAgIGlmICghdGhpcy5f
Y2FsbGJhY2spIHsKKyAgICAgICAgdGhpcy5fcmVzb2x2ZWQgPSB0cnVlOworICAgICAgICB0aGlz
Ll9yZXNvbHZlZFZhbHVlID0gdmFsdWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2
YXIgcmVzdWx0ID0gdGhpcy5fY2FsbGJhY2sodmFsdWUpOworICAgIGlmIChyZXN1bHQgaW5zdGFu
Y2VvZiBTaW1wbGVQcm9taXNlKSB7CisgICAgICAgIHZhciBjaGFpbmVkUHJvbWlzZSA9IHRoaXMu
X2NoYWluZWRQcm9taXNlOworICAgICAgICByZXN1bHQudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7
IGNoYWluZWRQcm9taXNlLnJlc29sdmUocmVzdWx0KTsgfSk7CisgICAgfSBlbHNlCisgICAgICAg
IHRoaXMuX2NoYWluZWRQcm9taXNlLnJlc29sdmUocmVzdWx0KTsKK30KKworZnVuY3Rpb24gT3B0
aW9ucyh0ZXN0SW50ZXJ2YWwsIGZyYW1lUmF0ZSkKK3sKKyAgICB0aGlzLnRlc3RJbnRlcnZhbCA9
IHRlc3RJbnRlcnZhbDsKKyAgICB0aGlzLmZyYW1lUmF0ZSA9IGZyYW1lUmF0ZTsKK30KKworZnVu
Y3Rpb24gUHJvZ3Jlc3NCYXIoZWxlbWVudCwgcmFuZ2VzKQoreworICAgIHRoaXMuZWxlbWVudCA9
IGVsZW1lbnQ7CisgICAgdGhpcy5yYW5nZXMgPSByYW5nZXM7CisgICAgdGhpcy5jdXJyZW50UmFu
Z2UgPSAwOworfQorCitQcm9ncmVzc0Jhci5wcm90b3R5cGUgPQoreworICAgIF9wcm9ncmVzc1Rv
UGVyY2VudDogZnVuY3Rpb24ocHJvZ3Jlc3MpCisgICAgeworICAgICAgICByZXR1cm4gcHJvZ3Jl
c3MgKiAoMTAwIC8gdGhpcy5yYW5nZXMpOworICAgIH0sCisgICAgCisgICAgaW5jUmFuZ2U6IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgICsrdGhpcy5jdXJyZW50UmFuZ2U7CisgICAgfSwKKyAg
ICAKKyAgICBzZXRQb3M6IGZ1bmN0aW9uKHByb2dyZXNzKQorICAgIHsKKyAgICAgICAgdGhpcy5l
bGVtZW50LnN0eWxlLndpZHRoID0gdGhpcy5fcHJvZ3Jlc3NUb1BlcmNlbnQodGhpcy5jdXJyZW50
UmFuZ2UgKyBwcm9ncmVzcykgKyAiJSI7CisgICAgfQorfQorCitmdW5jdGlvbiBSZWNvcmRUYWJs
ZShlbGVtZW50KQoreworICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7CisgICAgdGhpcy5jbGVh
cigpOworfQorCitSZWNvcmRUYWJsZS5wcm90b3R5cGUgPQoreworICAgIGNsZWFyOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MID0gIiI7CisgICAgfSwK
KyAgICAKKyAgICBfc2hvd1RpdGxlczogZnVuY3Rpb24ocm93LCBxdWV1ZSwgdGl0bGVzLCBtZXNz
YWdlKQorICAgIHsKKyAgICAgICAgdGl0bGVzLmZvckVhY2goZnVuY3Rpb24gKHRpdGxlKSB7Cisg
ICAgICAgICAgICB2YXIgdGggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0aCIpOworICAgICAg
ICAgICAgdGgudGV4dENvbnRlbnQgPSB0aXRsZS50ZXh0OworICAgICAgICAgICAgaWYgKHR5cGVv
ZiBtZXNzYWdlICE9ICJ1bmRlZmluZWQiICYmIG1lc3NhZ2UubGVuZ3RoKSB7CisgICAgICAgICAg
ICAgICAgdGguaW5uZXJIVE1MICs9ICI8YnI+WyIgKyBtZXNzYWdlICsgIl0iOworICAgICAgICAg
ICAgICAgIG1lc3NhZ2UgPSAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgid2lk
dGgiIGluIHRpdGxlKQorICAgICAgICAgICAgICAgIHRoLndpZHRoID0gdGl0bGUud2lkdGggKyAi
JSI7CisgICAgICAgICAgICByb3cuYXBwZW5kQ2hpbGQodGgpOworICAgICAgICAgICAgcXVldWUu
cHVzaCh7ZWxlbWVudDogdGgsIHRpdGxlczogdGl0bGUuY2hpbGRyZW4gfSk7CisgICAgICAgIH0p
OworICAgIH0sCisgICAgCisgICAgX3Nob3dIZWFkZXI6IGZ1bmN0aW9uKHN1aXRlTmFtZSwgdGl0
bGVzLCBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgdmFyIHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoInRyIik7CisKKyAgICAgICAgdmFyIHF1ZXVlID0gW107CisgICAgICAgIHRoaXMuX3No
b3dUaXRsZXMocm93LCBxdWV1ZSwgdGl0bGVzLCBtZXNzYWdlKTsKKyAgICAgICAgdGhpcy5lbGVt
ZW50LmFwcGVuZENoaWxkKHJvdyk7CisKKyAgICAgICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCkgewor
ICAgICAgICAgICAgdmFyIHJvdyA9IG51bGw7CisgICAgICAgICAgICB2YXIgZW50cmllcyA9IFtd
OworCisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcXVldWUubGVuZ3RoOyBpIDwg
bGVuOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBxdWV1ZS5zaGlmdCgpOwor
CisgICAgICAgICAgICAgICAgaWYgKCFlbnRyeS50aXRsZXMubGVuZ3RoKSB7CisgICAgICAgICAg
ICAgICAgICAgIGVudHJpZXMucHVzaChlbnRyeS5lbGVtZW50KTsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFy
b3cpCisgICAgICAgICAgICAgICAgICAgIHZhciByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJ0ciIpOworCisgICAgICAgICAgICAgICAgdGhpcy5fc2hvd1RpdGxlcyhyb3csIHF1ZXVlLCBl
bnRyeS50aXRsZXMsICIiKTsKKyAgICAgICAgICAgICAgICBlbnRyeS5lbGVtZW50LmNvbFNwYW4g
PSBlbnRyeS50aXRsZXMubGVuZ3RoOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAo
cm93KSB7CisgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHJvdyk7Cisg
ICAgICAgICAgICAgICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uKGVudHJ5KSB7CisgICAgICAg
ICAgICAgICAgICAgICsrZW50cnkucm93U3BhbjsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisgICAgCisgICAgX3Nob3dFbXB0eTogZnVuY3Rp
b24ocm93LCB0ZXN0TmFtZSkKKyAgICB7CisgICAgICAgIHZhciB0ZCA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoInRkIik7CisgICAgICAgIHJvdy5hcHBlbmRDaGlsZCh0ZCk7CisgICAgfSwKKyAg
ICAKKyAgICBfc2hvd1ZhbHVlOiBmdW5jdGlvbihyb3csIHRlc3ROYW1lLCB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHZhciB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CisgICAgICAg
IHRkLnRleHRDb250ZW50ID0gdmFsdWUudG9GaXhlZCgyKTsKKyAgICAgICAgcm93LmFwcGVuZENo
aWxkKHRkKTsKKyAgICB9LAorICAgIAorICAgIF9zaG93U2FtcGxlczogZnVuY3Rpb24ocm93LCB0
ZXN0TmFtZSwgYXhlcywgc2FtcGxlcywgc2FtcGxpbmdUaW1lT2Zmc2V0KQorICAgIHsKKyAgICAg
ICAgdmFyIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKKyAgICAgICAgdmFyIGJ1
dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBidXR0b24uY2xh
c3NOYW1lID0gInNtYWxsLWJ1dHRvbiI7CisgICAgICAgICAgICAKKyAgICAgICAgYnV0dG9uLmFk
ZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB3aW5kb3cu
c2hvd0dyYXBoKHRlc3ROYW1lLCBheGVzLCBzYW1wbGVzLCBzYW1wbGluZ1RpbWVPZmZzZXQpOwor
ICAgICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICBidXR0b24udGV4dENvbnRlbnQgPSAi
R3JhcGguLi4iOworICAgICAgICB0ZC5hcHBlbmRDaGlsZChidXR0b24pOworICAgICAgICByb3cu
YXBwZW5kQ2hpbGQodGQpOworICAgIH0sCisgICAgCisgICAgX3Nob3dUZXN0OiBmdW5jdGlvbih0
ZXN0TmFtZSwgdGl0bGVzLCBzYW1wbGVyLCBmaW5hbFJlc3VsdHMpCisgICAgeworICAgICAgICB2
YXIgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKKyAgICAgICAgdmFyIHRkID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKKyAgICAgICAgCisgICAgICAgIHRkLnRleHRD
b250ZW50ID0gdGVzdE5hbWU7CisgICAgICAgIHJvdy5hcHBlbmRDaGlsZCh0ZCk7CisgICAgICAg
IAorICAgICAgICB2YXIgYXhlcyA9IFtdOworICAgICAgICBzYW1wbGVyLmV4cGVyaW1lbnRzLmZv
ckVhY2goZnVuY3Rpb24oZXhwZXJpbWVudCwgaW5kZXgpIHsKKyAgICAgICAgICAgIHRoaXMuX3No
b3dWYWx1ZShyb3csIHRlc3ROYW1lLCBleHBlcmltZW50Lm1lYW4oKSk7CisgICAgICAgICAgICB0
aGlzLl9zaG93VmFsdWUocm93LCB0ZXN0TmFtZSwgZXhwZXJpbWVudC5jb25jZXJuKEV4cGVyaW1l
bnQuZGVmYXVsdHMuQ09OQ0VSTikpOworICAgICAgICAgICAgdGhpcy5fc2hvd1ZhbHVlKHJvdywg
dGVzdE5hbWUsIGV4cGVyaW1lbnQuc3RhbmRhcmREZXZpYXRpb24oKSk7CisgICAgICAgICAgICB0
aGlzLl9zaG93VmFsdWUocm93LCB0ZXN0TmFtZSwgZXhwZXJpbWVudC5wZXJjZW50YWdlKCkpOwor
ICAgICAgICAgICAgYXhlcy5wdXNoKHRpdGxlc1tpbmRleCArIDFdLnRleHQpOworICAgICAgICAg
ICAgCisgICAgICAgIH0sIHRoaXMpOworCisgICAgICAgIHRoaXMuX3Nob3dWYWx1ZShyb3csIHRl
c3ROYW1lLCBzYW1wbGVyLmV4cGVyaW1lbnRzWzBdLnNjb3JlKEV4cGVyaW1lbnQuZGVmYXVsdHMu
Q09OQ0VSTikpOworCisgICAgICAgIGlmIChmaW5hbFJlc3VsdHMpCisgICAgICAgICAgICB0aGlz
Ll9zaG93U2FtcGxlcyhyb3csIHRlc3ROYW1lLCBheGVzLCBzYW1wbGVyLnNhbXBsZXMsIHNhbXBs
ZXIuc2FtcGxpbmdUaW1lT2Zmc2V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5f
c2hvd0VtcHR5KHJvdywgdGVzdE5hbWUpOworICAgICAgICAgICAgCisgICAgICAgIHRoaXMuZWxl
bWVudC5hcHBlbmRDaGlsZChyb3cpOworICAgIH0sCisgICAgCisgICAgX3Nob3dTdWl0ZTogZnVu
Y3Rpb24oc3VpdGUsIHN1aXRlU2FtcGxlcnMpCisgICAgeworICAgICAgICB2YXIgc2NvcmVzID0g
W107ICAgICAgICAKKyAgICAgICAgZm9yICh2YXIgdGVzdE5hbWUgaW4gc3VpdGVTYW1wbGVycykg
eworICAgICAgICAgICAgdmFyIHRlc3QgPSB0ZXN0RnJvbU5hbWUoc3VpdGUsIHRlc3ROYW1lKTsK
KyAgICAgICAgICAgIHZhciBzYW1wbGVyID0gc3VpdGVTYW1wbGVyc1t0ZXN0TmFtZV07IAorICAg
ICAgICAgICAgdGhpcy5fc2hvd1Rlc3QodGVzdE5hbWUsIHN1aXRlLnRpdGxlcywgc2FtcGxlciwg
dHJ1ZSk7CisgICAgICAgICAgICBzY29yZXMucHVzaChzYW1wbGVyLmV4cGVyaW1lbnRzWzBdLnNj
b3JlKEV4cGVyaW1lbnQuZGVmYXVsdHMuQ09OQ0VSTikpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBzY29yZXM7CisgICAgfSwKKyAgICAKKyAgICBzaG93UmVjb3JkOiBmdW5jdGlvbihzdWl0
ZSwgdGVzdCwgc2FtcGxlciwgbWVzc2FnZSkKKyAgICB7CisgICAgICAgIHRoaXMuY2xlYXIoKTsg
ICAgICAgIAorICAgICAgICB0aGlzLl9zaG93SGVhZGVyKCIiLCBzdWl0ZS50aXRsZXMsIG1lc3Nh
Z2UpOworICAgICAgICB0aGlzLl9zaG93VGVzdCh0ZXN0Lm5hbWUsIHN1aXRlLnRpdGxlcywgc2Ft
cGxlciwgZmFsc2UpOyAgICAgICAgCisgICAgfSwKKyAgICAKKyAgICBzaG93SXRlcmF0aW9uczog
ZnVuY3Rpb24oaXRlcmF0aW9uc1NhbXBsZXJzKQorICAgIHsKKyAgICAgICAgdGhpcy5jbGVhcigp
OworCisgICAgICAgIHZhciBzY29yZXMgPSBbXTsKKyAgICAgICAgdmFyIHRpdGxlcyA9IG51bGw7
CisgICAgICAgIGl0ZXJhdGlvbnNTYW1wbGVycy5mb3JFYWNoKGZ1bmN0aW9uKHN1aXRlc1NhbXBs
ZXJzKSB7CisgICAgICAgICAgICBmb3IgKHZhciBzdWl0ZU5hbWUgaW4gc3VpdGVzU2FtcGxlcnMp
IHsKKyAgICAgICAgICAgICAgICB2YXIgc3VpdGUgPSBzdWl0ZUZyb21OYW1lKHN1aXRlTmFtZSk7
CisgICAgICAgICAgICAgICAgaWYgKHRpdGxlcyAhPSBzdWl0ZS50aXRsZXMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGl0bGVzID0gc3VpdGUudGl0bGVzOworICAgICAgICAgICAgICAgICAgICB0
aGlzLl9zaG93SGVhZGVyKHN1aXRlTmFtZSwgdGl0bGVzLCAiIik7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgdmFyIHN1aXRlU2NvcmVzID0gdGhpcy5fc2hvd1N1aXRlKHN1
aXRlLCBzdWl0ZXNTYW1wbGVyc1tzdWl0ZU5hbWVdKTsKKyAgICAgICAgICAgICAgICBzY29yZXMu
cHVzaC5hcHBseShzY29yZXMsIHN1aXRlU2NvcmVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSwgdGhpcyk7CisKKyAgICAgICAgcmV0dXJuIFN0YXRpc3RpY3MuZ2VvbWV0cmljTWVhbihzY29y
ZXMpOworICAgIH0KK30KSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJj
ZXMvc2FtcGxlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIv
cmVzb3VyY2VzL3NhbXBsZXIuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0Fu
aW1vbWV0ZXIvcmVzb3VyY2VzL3NhbXBsZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MjMgQEAKK3ZhciBTdGF0aXN0aWNzID0KK3sKKyAgICBzYW1wbGVNZWFuOiBmdW5jdGlvbihudW1i
ZXJPZlNhbXBsZXMsIHN1bSkKKyAgICB7CisgICAgICAgIGlmIChudW1iZXJPZlNhbXBsZXMgPCAx
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBzdW0gLyBudW1iZXJPZlNh
bXBsZXM7CisgICAgfSwKKworICAgIHNhbXBsZVN0YW5kYXJkRGV2aWF0aW9uOiBmdW5jdGlvbihu
dW1iZXJPZlNhbXBsZXMsIHN1bSwgc3F1YXJlU3VtKQorICAgIHsKKyAgICAgICAgaWYgKG51bWJl
ck9mU2FtcGxlcyA8IDIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE1h
dGguc3FydCgoc3F1YXJlU3VtIC0gc3VtICogc3VtIC8gbnVtYmVyT2ZTYW1wbGVzKSAvIChudW1i
ZXJPZlNhbXBsZXMgLSAxKSkgOworICAgIH0sCisKKyAgICBnZW9tZXRyaWNNZWFuOiBmdW5jdGlv
bih2YWx1ZXMpCisgICAgeworICAgICAgICBpZiAoIXZhbHVlcy5sZW5ndGgpCisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgdmFyIHJvb3RzID0gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1
ZSkgeyByZXR1cm4gIE1hdGgucG93KHZhbHVlLCAxIC8gdmFsdWVzLmxlbmd0aCk7IH0pCisgICAg
ICAgIHJldHVybiByb290cy5yZWR1Y2UoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSAqIGI7IH0p
OworICAgIH0gICAKK30KKworZnVuY3Rpb24gRXhwZXJpbWVudCgpCit7CisgICAgdGhpcy5faW5p
dCgpOworICAgIHRoaXMuX21heEhlYXAgPSBBbGdvcml0aG0uY3JlYXRlTWF4SGVhcChFeHBlcmlt
ZW50LmRlZmF1bHRzLkNPTkNFUk5fU0laRSk7Cit9CisKK0V4cGVyaW1lbnQuZGVmYXVsdHMgPQor
eworICAgIENPTkNFUk46IDUsCisgICAgQ09ORklERU5DRTogMC45LAorICAgIENPTkNFUk5fU0la
RTogMTAwLAorfQorCitFeHBlcmltZW50LnByb3RvdHlwZSA9Cit7CisgICAgX2luaXQ6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3N1bSA9IDA7CisgICAgICAgIHRoaXMuX3NxdWFy
ZVN1bSA9IDA7CisgICAgICAgIHRoaXMuX251bWJlck9mU2FtcGxlcyA9IDA7CisgICAgfSwKKyAg
ICAKKyAgICAvLyBDYWxsZWQgYWZ0ZXIgYSB3YXJtLXVwIHBlcmlvZAorICAgIHN0YXJ0U2FtcGxp
bmc6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBtZWFuID0gdGhpcy5tZWFuKCk7Cisg
ICAgICAgIHRoaXMuX2luaXQoKTsKKyAgICAgICAgdGhpcy5fbWF4SGVhcC5pbml0KCk7CisgICAg
ICAgIHRoaXMuc2FtcGxlKG1lYW4pOworICAgIH0sCisgICAgCisgICAgc2FtcGxlOiBmdW5jdGlv
bih2YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3N1bSArPSB2YWx1ZTsKKyAgICAgICAgdGhp
cy5fc3F1YXJlU3VtICs9IHZhbHVlICogdmFsdWU7CisgICAgICAgIHRoaXMuX21heEhlYXAucHVz
aCh2YWx1ZSk7CisgICAgICAgICsrdGhpcy5fbnVtYmVyT2ZTYW1wbGVzOworICAgIH0sCisgICAg
CisgICAgbWVhbjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0YXRpc3RpY3Mu
c2FtcGxlTWVhbih0aGlzLl9udW1iZXJPZlNhbXBsZXMsIHRoaXMuX3N1bSk7CisgICAgfSwKKyAg
ICAKKyAgICBzdGFuZGFyZERldmlhdGlvbjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFN0YXRpc3RpY3Muc2FtcGxlU3RhbmRhcmREZXZpYXRpb24odGhpcy5fbnVtYmVyT2ZTYW1w
bGVzLCB0aGlzLl9zdW0sIHRoaXMuX3NxdWFyZVN1bSk7CisgICAgfSwKKyAgICAKKyAgICBwZXJj
ZW50YWdlOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgbWVhbiA9IHRoaXMubWVhbigp
OworICAgICAgICByZXR1cm4gbWVhbiA/IHRoaXMuc3RhbmRhcmREZXZpYXRpb24oKSAqIDEwMCAv
IG1lYW4gOiAwOworICAgIH0sCisgICAgCisgICAgY29uY2VybjogZnVuY3Rpb24ocGVyY2VudGFn
ZSkKKyAgICB7CisgICAgICAgIHZhciBzaXplID0gTWF0aC5jZWlsKHRoaXMuX251bWJlck9mU2Ft
cGxlcyAqIHBlcmNlbnRhZ2UgLyAxMDApOworICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy5fbWF4
SGVhcC52YWx1ZXMoc2l6ZSk7CisgICAgICAgIHJldHVybiB2YWx1ZXMubGVuZ3RoID8gdmFsdWVz
LnJlZHVjZShmdW5jdGlvbihhLCBiKSB7IHJldHVybiBhICsgYjsgfSkgLyB2YWx1ZXMubGVuZ3Ro
IDogMDsKKyAgICB9LAorICAgIAorICAgIHNjb3JlOiBmdW5jdGlvbihwZXJjZW50YWdlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFN0YXRpc3RpY3MuZ2VvbWV0cmljTWVhbihbdGhpcy5tZWFuKCks
IE1hdGgubWF4KHRoaXMuY29uY2VybihwZXJjZW50YWdlKSwgMSldKTsKKyAgICB9Cit9CisKK2Z1
bmN0aW9uIFNhbXBsZXIoY291bnQpCit7CisgICAgdGhpcy5leHBlcmltZW50cyA9IFtdOworICAg
IHdoaWxlIChjb3VudC0tKQorICAgICAgICB0aGlzLmV4cGVyaW1lbnRzLnB1c2gobmV3IEV4cGVy
aW1lbnQoKSk7CisgICAgdGhpcy5zYW1wbGVzID0gW107CisgICAgdGhpcy5zYW1wbGluZ1RpbWVP
ZmZzZXQgPSAwOworfQorCitTYW1wbGVyLnByb3RvdHlwZSA9Cit7CisgICAgc3RhcnRTYW1wbGlu
ZzogZnVuY3Rpb24odGltZU9mZnNldCkKKyAgICB7CisgICAgICAgIGZvciAodmFyIGluZGV4ID0g
MDsgaW5kZXggPCB0aGlzLmV4cGVyaW1lbnRzLmxlbmd0aDsgKytpbmRleCkKKyAgICAgICAgICAg
IHRoaXMuZXhwZXJpbWVudHNbaW5kZXhdLnN0YXJ0U2FtcGxpbmcoKTsKKyAgICAgICAgICAgIAor
ICAgICAgICB0aGlzLnNhbXBsaW5nVGltZU9mZnNldCA9IHRpbWVPZmZzZXQgLyAxMDAwOworICAg
IH0sCisgICAgCisgICAgc2FtcGxlOiBmdW5jdGlvbih0aW1lT2Zmc2V0LCB2YWx1ZXMpCisgICAg
eworICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA8IHRoaXMuZXhwZXJpbWVudHMubGVuZ3RoKQor
ICAgICAgICAgICAgdGhyb3cgIk5vdCBlbm91Z2ggc2FtcGxlIHBvaW50cyI7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5leHBl
cmltZW50cy5sZW5ndGg7ICsraW5kZXgpCisgICAgICAgICAgICB0aGlzLmV4cGVyaW1lbnRzW2lu
ZGV4XS5zYW1wbGUodmFsdWVzW2luZGV4XSk7CisgICAgICAgICAgICAKKyAgICAgICAgdGhpcy5z
YW1wbGVzLnB1c2goeyB0aW1lT2Zmc2V0OiB0aW1lT2Zmc2V0IC8gMTAwMCwgdmFsdWVzOiB2YWx1
ZXMgfSk7CisgICAgfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262376</attachid>
            <date>2015-10-02 19:08:58 -0700</date>
            <delta_ts>2015-10-02 19:15:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149691-20151002190831.patch</filename>
            <type>text/plain</type>
            <size>23472</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTA1MzUpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBACisyMDE1LTEwLTAyICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRk
IHNoYXJlZCBjb2RlIGZvciBhIG5ldyBhIGdyYXBoaWNzIGJlbmNobWFyaworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5NjkxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBzZXQgb2YgY2xhc3NlcyB3
aWxsIGJlIHNoYXJlZCBhbmQgdXNlZCBieSB0aGUgdGVzdHMgYW5kIHRoZSBydW5uZXIKKyAgICAg
ICAgb2YgYSBuZXcgZ3JhcGhpY3MgYmVuY2htYXJrLgorCisgICAgICAgICogQW5pbW9tZXRlci9y
ZXNvdXJjZXM6IEFkZGVkLgorICAgICAgICAqIEFuaW1vbWV0ZXIvcmVzb3VyY2VzL2FsZ29yaXRo
bS5qczogQWRkZWQuCisgICAgICAgIChBcnJheS5wcm90b3R5cGUuc3dhcCk6IFN3YXBzIHR3byBl
bGVtZW50cyBpbiBhbiBhcnJheS4KKyAgICAgICAgKEhlYXApOiBCaW5hcnkgTWluL01heCBIZWFw
IG9iamVjdAorICAgICAgICAoSGVhcC5wcm90b3R5cGUuX3BhcmVudEluZGV4KTogR2l2ZW4gdGhl
IGNoaWxkIG5vZGUgaW5kZXgsIGl0IHJldHVybnMgdGhlIHBhcmVudCBpbmRleC4KKyAgICAgICAg
KEhlYXAucHJvdG90eXBlLl9sZWZ0SW5kZXgpOiBHaXZlbiB0aGUgcGFyZW50IG5vZGUgaW5kZXgs
IGl0IHJldHVybnMgdGhlIGxlZnQgbm9kZSBpbmRleC4KKyAgICAgICAgKEhlYXAucHJvdG90eXBl
Ll9yaWdodEluZGV4KTogR2l2ZW4gdGhlIHBhcmVudCBub2RlIGluZGV4LCBpdCByZXR1cm5zIHRo
ZSByaWdodCBub2RlIGluZGV4LgorICAgICAgICAoSGVhcC5wcm90b3R5cGUuX2NoaWxkSW5kZXgp
OiBHaXZlbiB0aGUgcGFyZW50IG5vZGUgaW5kZXgsIGl0IHJldHVybnMgdGhlIGNoaWxkIGluZGV4
IHRoYXQgbWF5IHZpb2xhdGUgdGhlIGhlYXAgcHJvcGVydHkuCisgICAgICAgIChIZWFwLnByb3Rv
dHlwZS5pbml0KTogSW5pdGlhbGl6ZXMgdGhlIGhlYXAgc3RhdGUuCisgICAgICAgIChIZWFwLnBy
b3RvdHlwZS50b3ApOiBSZXR1cm5zIHRoZSB2YWx1ZSBzdG9yZWQgYXQgdGhlIHRvcCBvZiB0aGUg
aGVhcC4KKyAgICAgICAgKEhlYXAucHJvdG90eXBlLnB1c2gpOiBQdXNoZXMgYSBuZXcgbm9kZSBh
dCB0aGUgdG9wIG9mIHRoZSBoZWFwLgorICAgICAgICAoSGVhcC5wcm90b3R5cGUucG9wKTogRXh0
cmFjdHMgdGhlIHRvcCBub2RlIG9mIHRoZSBoZWFwLgorICAgICAgICAoSGVhcC5wcm90b3R5cGUu
X2J1YmJsZSk6IEZpeGVzIHRoZSBoZWFwIHByb3BlcnR5IGJ5IG1vdmluZyB1cHdhcmQuCisgICAg
ICAgIChIZWFwLnByb3RvdHlwZS5fc2luayk6IEZpeGVzIHRoZSBoZWFwIHByb3BlcnR5IGJ5IG1v
dmluZyBkb3dud2FyZC4KKyAgICAgICAgKEhlYXAucHJvdG90eXBlLnN0cik6IFByaW50cyB0aGUg
bm9kZXMgb2YgdGhlIGhlYXAgdG8gYSBzdHJpbmcuCisgICAgICAgIChIZWFwLnByb3RvdHlwZS52
YWx1ZXMpOiBSZXR1cm5zIHRoZSBsYXN0ICJzaXplIiBoZWFwIGVsZW1lbnRzIHZhbHVlcy4KKwor
ICAgICAgICAoQWxnb3JpdGhtLmNyZWF0ZU1pbkhlYXApOiBDcmVhdGVzIGEgc2l6ZS1ib3VuZGVk
IG1pbi1oZWFwIG9iamVjdC4KKyAgICAgICAgKEFsZ29yaXRobS5jcmVhdGVNYXhIZWFwKTogQ3Jl
YXRlcyBhIHNpemUtYm91bmRlZCBtYXgtaGVhcCBvYmplY3QuCisgICAgICAgIAorICAgICAgICAq
IEFuaW1vbWV0ZXIvcmVzb3VyY2VzL2V4dGVuc2lvbnMuanM6IEFkZGVkLgorICAgICAgICAoUG9p
bnQpOiBQb2ludCBvYmplY3QgYnV0IGNhbiBiZSB1c2VkIGFzIHNpemUgYWxzby4KKyAgICAgICAg
KFBvaW50LnBvaW50T25DaXJjbGUpOiBHaXZlbiwgdGhlIHJhZGl1cyBvZiB0aGUgY2lyY2xlIGFu
ZCB0aGUgYW5nbGUgb2YgdGhlIHBvaW50LCBpdCByZXR1cm5zIGEgcG9pbnQgb2JqZWN0LgorICAg
ICAgICAoUG9pbnQucG9pbnRPbkVsbGlwc2UpOiBHaXZlbiwgdGhlIHJhZGl1c2VzIG9mIHRoZSBl
bGxpcHNlIGFuZCB0aGUgYW5nbGUgb2YgdGhlIHBvaW50LCBpdCByZXR1cm5zIGEgcG9pbnQgb2Jq
ZWN0LgorICAgICAgICAoUG9pbnQucHJvdG90eXBlLmdldCB3aWR0aCk6IFNob3VsZCBiZSBjYWxs
ZWQgd2hlbiB0aGUgcG9pbnQgaXMgdXNlZCBhcyBzaXplLgorICAgICAgICAoUG9pbnQucHJvdG90
eXBlLmdldCBoZWlnaHQpOiBTaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIHBvaW50IGlzIHVzZWQg
YXMgc2l6ZS4KKyAgICAgICAgKFBvaW50LnByb3RvdHlwZS5nZXQgY2VudGVyKTogU2hvdWxkIGJl
IGNhbGxlZCB3aGVuIHRoZSBwb2ludCBpcyB1c2VkIGFzIHNpemUuCisgICAgICAgIChQb2ludC5w
cm90b3R5cGUuYWRkKTogUmV0dXJucyBhIG5ldyBwb2ludCA9IHRoaXMgKyBvdGhlci4KKyAgICAg
ICAgKFBvaW50LnByb3RvdHlwZS5zdWJ0cmFjdCk6IFJldHVybnMgYSBuZXcgcG9pbnQgPSB0aGlz
IC0gb3RoZXIuCisgICAgICAgIChQb2ludC5wcm90b3R5cGUubXVsdGlwbHkpOiBSZXR1cm5zIGEg
bmV3IHBvaW50ID0gdGhpcyAqIG90aGVyLgorICAgICAgICAoUG9pbnQucHJvdG90eXBlLm1vdmUp
OiBNb3ZlcyB0aGUgcG9pbnQgaW4gYSBnaXZlbiBkaXJlY3Rpb24sIHZlbG9jaXR5LCB0aW1lIHBl
cmlvZC4KKworICAgICAgICAoSW5zZXRzKTogUmVwcmVzZW50cyBib3JkZXJzIG9mIGEgY29udGFp
bmVyLgorICAgICAgICAoSW5zZXRzLnByb3RvdHlwZS5nZXQgd2lkdGgpOiBSZXR1cm5zIGxlZnQg
KyByaWdodC4KKyAgICAgICAgKEluc2V0cy5wcm90b3R5cGUuZ2V0IGhlaWdodCk6IFJldHVybnMg
dG9wICsgYm90dG9tLgorCisgICAgICAgIChTaW1wbGVQcm9taXNlKToKKyAgICAgICAgKFNpbXBs
ZVByb21pc2UucHJvdG90eXBlLnRoZW4pOgorICAgICAgICAoU2ltcGxlUHJvbWlzZS5wcm90b3R5
cGUucmVzb2x2ZSk6CisgICAgICAgIE1vdmVkIGZyb20gQW5pbW9tZXRlci9ydW5uZXIvcmVzb3Vy
Y2VzL2JlbmNobWFyay1ydW5uZXIuanMgc2luY2UgdGVzdHMgYWxzbyBuZWVkIGl0LgorCisgICAg
ICAgIChPcHRpb25zKTogQmVuY2htYXJrIHJ1bm5pbmcgb3B0aW9ucyBhcyB0aGV5IGFyZSBzZXQg
YnkgdGhlIHVzZXIuCisKKyAgICAgICAgKFByb2dyZXNzQmFyKTogTWFuYWdlcyBhIHByb2dyZXNz
IGJhciBlbGVtZW50LiBUaGUgcHJvZ3Jlc3MgYmFyIGlzIGRpdmlkZWQgaW50byBlcXVhbCBsZW5n
dGggcmFuZ2VzLgorICAgICAgICAoUHJvZ3Jlc3NCYXIucHJvdG90eXBlLl9wcm9ncmVzc1RvUGVy
Y2VudCk6IENvbnZlcnRzIHRoZSBwcm9ncmVzcyBpbnRvIGEgcGVyY2VudGFnZS4KKyAgICAgICAg
KFByb2dyZXNzQmFyLnByb3RvdHlwZS5pbmNSYW5nZSk6IE1vdmVzIHRvIHRoZSBuZXh0IHJhbmdl
IChhIHJhbmdlIGlzIHRoZSBydW5uaW5nIHRpbWUgb2YgYSBzaW5nbGUgdGVzdCkuCisgICAgICAg
IChQcm9ncmVzc0Jhci5wcm90b3R5cGUuc2V0UG9zKTogRHJhd3MgdGhlIGN1cnJlbnQgcHJvZ3Jl
c3MgaW4gdGhlIGN1cnJlbnQgcmFuZ2UuCisKKyAgICAgICAgKFJlY29yZFRhYmxlKTogU2hvd3Mg
dGhlIHJlc3VsdHMgb2YgcnVubmluZyBhIGJlbmNobWFyayBpbiBhIHRhYnVsYXIgZm9ybS4KKyAg
ICAgICAgKFJlY29yZFRhYmxlLnByb3RvdHlwZS5jbGVhcik6IENsZWFycyB0aGUgcmVzdWx0cyB0
YWJsZS4KKyAgICAgICAgKFJlY29yZFRhYmxlLnByb3RvdHlwZS5fc2hvd1RpdGxlcyk6IFNob3dz
IHRoZSBoZWFkZXIgdGl0bGVzIGFuZCBhcHBlbmRzIHRoZSBzdWItdGl0bGVzIHRvIGEgcXVldWUu
CisgICAgICAgIChSZWNvcmRUYWJsZS5wcm90b3R5cGUuX3Nob3dIZWFkZXIpOiBTaG93cyB0aGUg
dGFibGUgaGVhZGVyIHRpdGxlcy4KKyAgICAgICAgKFJlY29yZFRhYmxlLnByb3RvdHlwZS5fc2hv
d0VtcHR5KTogU2hvd3MgYW4gZW1wdHkgdGFibGUgY2VsbC4KKyAgICAgICAgKFJlY29yZFRhYmxl
LnByb3RvdHlwZS5fc2hvd1ZhbHVlKTogU2hvd3MgYSBudW1iZXIgdmFsdWUgaW4gdGhlIHJlc3Vs
dHMgdGFibGUuCisgICAgICAgIChSZWNvcmRUYWJsZS5wcm90b3R5cGUuX3Nob3dTYW1wbGVzKTog
U2hvd3MgYSBidXR0b24gZm9yIHRoZSBzYW1wbGVkIGRhdGEgZ3JhcGguCisgICAgICAgIChSZWNv
cmRUYWJsZS5wcm90b3R5cGUuX3Nob3dUZXN0KTogU2hvd3MgdGhlIHJlc3VsdHMgb2YgYSBzaW5n
bGUgdGVzdC4KKyAgICAgICAgKFJlY29yZFRhYmxlLnByb3RvdHlwZS5fc2hvd1N1aXRlKTogU2hv
d3MgdGhlIHJlc3VsdHMgb2YgYSBzaW5nbGUgc3VpdGUuCisgICAgICAgIChSZWNvcmRUYWJsZS5w
cm90b3R5cGUuc2hvd1JlY29yZCk6IFNob3dzIGEgc2luZ2xlIGl0ZXJhdGlvbiBmb3IgYSBzaW5n
bGUgdGVzdC4KKyAgICAgICAgKFJlY29yZFRhYmxlLnByb3RvdHlwZS5zaG93SXRlcmF0aW9ucyk6
IFNob3dzIHRoZSByZXN1bHRzIG9mIGFsbCB0aGUgc3VpdGVzIG9mIHRoZSBpdGVyYXRpb25zLiAK
KworICAgICAgICAqIEFuaW1vbWV0ZXIvcmVzb3VyY2VzL3NhbXBsZXIuanM6IEFkZGVkLgorICAg
ICAgICAoU3RhdGlzdGljcy5zYW1wbGVNZWFuKTogUmV0dXJucyB0aGUgc2FtcGxlIG1lYW4uCisg
ICAgICAgIChTdGF0aXN0aWNzLnVuYmlhc2VkU2FtcGxlU3RhbmRhcmREZXZpYXRpb24pOiBSZXR1
cm5zIHRoZSB1bmJpYXNlZCBzYW1wbGUgdmFyaWFuY2UgKGkuZS4gd2l0aCBCZXNzZWwncyBjb3Jy
ZWN0aW9uKQorICAgICAgICAoU3RhdGlzdGljcy5nZW9tZXRyaWNNZWFuKTogUmV0dXJucyB0aGUg
Z2VvbWV0cmljIG1lYW4uCisKKyAgICAgICAgKEV4cGVyaW1lbnQpOiBSZXByZXNlbnRzIGEgc2Ft
cGxpbmcgZXhwZXJpbWVudC4gCisgICAgICAgIChFeHBlcmltZW50LnByb3RvdHlwZS5faW5pdCk6
IENhbGxlZCB3aGVuIHRoZSBvYmplY3QgaXMgY3JlYXRlZCBhbmQgd2hlbiBzdGFydFNhbXBsaW5n
KCkgaXMgY2FsbGVkLgorICAgICAgICAoRXhwZXJpbWVudC5wcm90b3R5cGUuc3RhcnRTYW1wbGlu
Zyk6IENhbGxlZCBhZnRlciB3YXJtdXAgcGVyaW9kLiBSZXN0YXJ0cyBjb2xsZWN0aW5nIHNhbXBs
ZWQgZGF0YSBwb2ludHMuCisgICAgICAgIChFeHBlcmltZW50LnByb3RvdHlwZS5zYW1wbGUpOiBB
ZGQgYSBuZXcgZGF0YSBwb2ludC4KKyAgICAgICAgKEV4cGVyaW1lbnQucHJvdG90eXBlLm1lYW4p
OiBSZXR1cm5zIHRoZSBzYW1wbGUgbWVhbiBmb3IgdGhlIGN1cnJlbnQgc2FtcGxlZCBkYXRhIHBv
aW50cy4KKyAgICAgICAgKEV4cGVyaW1lbnQucHJvdG90eXBlLnN0YW5kYXJkRGV2aWF0aW9uKTog
UmV0dXJucyB0aGUgc2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvbiBmb3IgdGhlIGN1cnJlbnQgc2Ft
cGxlZCBkYXRhIHBvaW50cy4KKyAgICAgICAgKEV4cGVyaW1lbnQucHJvdG90eXBlLnBlcmNlbnRh
Z2UpOiBSZXR1cm5zIHRoZSBwZXJjZW50YWdlIG9mIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gZGl2
aWRlZCB0byB0aGUgbWVhbi4KKyAgICAgICAgKEV4cGVyaW1lbnQucHJvdG90eXBlLmNvbmZpZGVu
Y2VJbnRlcnZhbERlbHRhKTogQ2FsY3VsYXRlcyB0aGUgY29uZmlkZW5jZSBkZWx0YSBmb3IgdGhl
IGN1cnJlbnQgc2FtcGxlZCBkYXRhIGdpdmVuIGEgY29uZmlkZW5jZSBsZXZlbC4KKyAgICAgICAg
KEV4cGVyaW1lbnQucHJvdG90eXBlLmNvbmNlcm4pOiBSZXR1cm5zIHRoZSBhdmVyYWdlIG9mIHRo
ZSB3b3JzdCBnaXZlbiBwZXJjZW50YWdlIGZyb20gdGhlIHNhbXBsZWQgZGF0YS4KKyAgICAgICAg
KEV4cGVyaW1lbnQucHJvdG90eXBlLnNjb3JlKTogUmV0dXJucyBhIHNjb3JlIGZvciB0aGUgc2Ft
cGxlZCBkYXRhLiBJdCBpcyB0aGUgZ2VvbWV0cmljIG1lYW4gb2Ygc2FtcGxlTWVhbiBhbmQgY29u
Y2Vybi4KKworICAgICAgICAoU2FtcGxlcik6IFJlcHJlc2VudHMgYSBjb21wb3VuZCBleHBlcmlt
ZW50LiBJdCBtYW5hZ2VzIHNhbXBsaW5nIG11bHRpcGxlIGRhdGEgcG9pbnRzIGF0IHRoZSBzYW1l
IHRpbWUgb2Zmc2V0LgorICAgICAgICAoU2FtcGxlci5wcm90b3R5cGUuc3RhcnRTYW1wbGluZyk6
IENhbGxlZCBhZnRlciB3YXJtaW5nIHVwIHBlcmlvZC4gUmVzdGFydHMgY29sbGVjdGluZyBzYW1w
bGVkIGRhdGEgcG9pbnRzLgorICAgICAgICAoU2FtcGxlci5wcm90b3R5cGUuc2FtcGxlKTogQWRk
IGEgbmV3IGRhdGEgdmVjdG9yIGF0IGEgZ2l2ZW4gdGltZSBvZmZzZXQuCisgICAgICAgIAogMjAx
NS0xMC0wMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkZCB0aGUgdGVzdCBydW5uZXIgZm9yIGEgbmV3IGEgZ3JhcGhpY3MgYmVuY2htYXJr
CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVzb3VyY2VzL2FsZ29yaXRobS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVzb3VyY2VzL2Fs
Z29yaXRobS5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9y
ZXNvdXJjZXMvYWxnb3JpdGhtLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQyIEBACitB
cnJheS5wcm90b3R5cGUuc3dhcCA9IGZ1bmN0aW9uKGksIGopCit7CisgICAgdmFyIHQgPSB0aGlz
W2ldOworICAgIHRoaXNbaV0gPSB0aGlzW2pdOworICAgIHRoaXNbal0gPSB0OworICAgIHJldHVy
biB0aGlzOworfQorCitmdW5jdGlvbiBIZWFwKG1heFNpemUsIGNvbXBhcmUpCit7CisgICAgdGhp
cy5fbWF4U2l6ZSA9IG1heFNpemU7CisgICAgdGhpcy5fY29tcGFyZSA9IGNvbXBhcmU7CisgICAg
dGhpcy5fc2l6ZSA9IDA7CisgICAgdGhpcy5fdmFsdWVzID0gbmV3IEFycmF5KHRoaXMuX21heFNp
emUpOworfQorCitIZWFwLnByb3RvdHlwZSA9Cit7CisgICAgLy8gVGhpcyBpcyBhIGJpbmFyeSBo
ZWFwIHJlcHJlc2VudGVkIGluIGFuIGFycmF5LiBUaGUgcm9vdCBlbGVtZW50IGlzIHN0b3JlZAor
ICAgIC8vIGluIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBhcnJheS4gVGhlIHJvb3QgaXMgZm9s
bG93ZWQgYnkgaXRzIHR3byBjaGlsZHJlbi4KKyAgICAvLyBUaGVuIGl0cyBmb3VyIGdyYW5kY2hp
bGRyZW4gYW5kIHNvIG9uLiBTbyBldmVyeSBsZXZlbCBpbiB0aGUgYmluYXJ5IGhlYXAgaXMKKyAg
ICAvLyBkb3VibGVkIGluIHRoZSBmb2xsb3dpbmcgbGV2ZWwuIEhlcmUgaXMgYW4gZXhhbXBsZSBv
ZiB0aGUgbm9kZSBpbmRpY2VzIGFuZAorICAgIC8vIGhvdyB0aGV5IGFyZSByZWxhdGVkIHRvIHRo
ZWlyIHBhcmVudHMgYW5kIGNoaWxkcmVuLgorICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAg
IC8vICAgICAgICAgICAgICAwICAgICAgIDEgICAgICAgMiAgICAgICAzICAgICAgIDQgICAgICAg
NSAgICAgICA2CisgICAgLy8gUEFSRU5UICAgICAgIC0xICAgICAgMCAgICAgICAwICAgICAgIDEg
ICAgICAgMSAgICAgICAyICAgICAgIDIKKyAgICAvLyBMRUZUICAgICAgICAgMSAgICAgICAzICAg
ICAgIDUgICAgICAgNyAgICAgICA5ICAgICAgIDExICAgICAgMTMKKyAgICAvLyBSSUdIVCAgICAg
ICAgMiAgICAgICA0ICAgICAgIDYgICAgICAgOCAgICAgICAxMCAgICAgIDEyICAgICAgMTQKKyAg
ICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBfcGFyZW50SW5kZXg6IGZ1bmN0aW9uKGkpCisg
ICAgeworICAgICAgICByZXR1cm4gaSA+IDAgPyBNYXRoLmZsb29yKChpIC0gMSkgLyAyKSA6IC0x
OworICAgIH0sCisgICAgCisgICAgX2xlZnRJbmRleDogZnVuY3Rpb24oaSkKKyAgICB7CisgICAg
ICAgIHZhciBsZWZ0SW5kZXggPSBpICogMiArIDE7CisgICAgICAgIHJldHVybiBsZWZ0SW5kZXgg
PCB0aGlzLl9zaXplID8gbGVmdEluZGV4IDogLTE7CisgICAgfSwKKyAgICAKKyAgICBfcmlnaHRJ
bmRleDogZnVuY3Rpb24oaSkKKyAgICB7CisgICAgICAgIHZhciByaWdodEluZGV4ID0gaSAqIDIg
KyAyOworICAgICAgICByZXR1cm4gcmlnaHRJbmRleCA8IHRoaXMuX3NpemUgPyByaWdodEluZGV4
IDogLTE7CisgICAgfSwKKyAgICAKKyAgICAvLyBSZXR1cm4gdGhlIGNoaWxkIGluZGV4IHRoYXQg
bWF5IHZpb2xhdGUgdGhlIGhlYXAgcHJvcGVydHkgYXQgaW5kZXggaS4KKyAgICBfY2hpbGRJbmRl
eDogZnVuY3Rpb24oaSkKKyAgICB7CisgICAgICAgIHZhciBsZWZ0ID0gdGhpcy5fbGVmdEluZGV4
KGkpOworICAgICAgICB2YXIgcmlnaHQgPSB0aGlzLl9yaWdodEluZGV4KGkpOworCisgICAgICAg
IGlmIChsZWZ0ICE9IC0xICYmIHJpZ2h0ICE9IC0xKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2NvbXBhcmUodGhpcy5fdmFsdWVzW2xlZnRdLCB0aGlzLl92YWx1ZXNbcmlnaHRdKSA+IDAgPyBs
ZWZ0IDogcmlnaHQ7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbGVmdCAhPSAtMSA/IGxlZnQg
OiByaWdodDsKKyAgICB9LAorICAgIAorICAgIGluaXQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHRoaXMuX3NpemUgPSAwOworICAgIH0sCisgICAgCisgICAgdG9wOiBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZSA/IHRoaXMuX3ZhbHVlc1swXSA6IE5hTjsK
KyAgICB9LAorICAgIAorICAgIHB1c2g6IGZ1bmN0aW9uKHZhbHVlKQorICAgIHsKKyAgICAgICAg
aWYgKHRoaXMuX3NpemUgPT0gdGhpcy5fbWF4U2l6ZSkgeworICAgICAgICAgICAgLy8gSWYgc2l6
ZSBpcyBib3VuZGVkIGFuZCB0aGUgbmV3IHZhbHVlIGNhbiBiZSBhIHBhcmVudCBvZiB0aGUgdG9w
KCkKKyAgICAgICAgICAgIC8vIGlmIHRoZSBzaXplIHdlcmUgdW5ib3VuZGVkLCBqdXN0IGlnbm9y
ZSB0aGUgbmV3IHZhbHVlLgorICAgICAgICAgICAgaWYgKHRoaXMuX2NvbXBhcmUodmFsdWUsIHRo
aXMudG9wKCkpID4gMCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB0aGlz
LnBvcCgpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX3ZhbHVlc1t0aGlzLl9zaXplKytdID0g
dmFsdWU7CisgICAgICAgIHRoaXMuX2J1YmJsZSh0aGlzLl9zaXplIC0gMSk7CisgICAgfSwKKwor
ICAgIHBvcDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9zaXplKQorICAg
ICAgICAgICAgcmV0dXJuIE5hTjsKKyAgICAgICAgCisgICAgICAgIHRoaXMuX3ZhbHVlc1swXSA9
IHRoaXMuX3ZhbHVlc1stLXRoaXMuX3NpemVdOworICAgICAgICB0aGlzLl9zaW5rKDApOworICAg
IH0sCisgICAgCisgICAgX2J1YmJsZTogZnVuY3Rpb24oaSkKKyAgICB7CisgICAgICAgIC8vIEZp
eCB0aGUgaGVhcCBwcm9wZXJ0eSBhdCBpbmRleCBpIGdpdmVuIHRoYXQgcGFyZW50IGlzIHRoZSBv
bmx5IG5vZGUgdGhhdAorICAgICAgICAvLyBtYXkgdmlvbGF0ZSB0aGUgaGVhcCBwcm9wZXJ0eS4K
KyAgICAgICAgZm9yICh2YXIgcGkgPSB0aGlzLl9wYXJlbnRJbmRleChpKTsgcGkgIT0gLTE7IGkg
PSBwaSwgcGkgPSB0aGlzLl9wYXJlbnRJbmRleChwaSkpIHsKKyAgICAgICAgICAgIGlmICh0aGlz
Ll9jb21wYXJlKHRoaXMuX3ZhbHVlc1twaV0sIHRoaXMuX3ZhbHVlc1tpXSkgPiAwKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgdGhpcy5fdmFs
dWVzLnN3YXAocGksIGkpOworICAgICAgICB9CisgICAgfSwKKyAgICAKKyAgICBfc2luazogZnVu
Y3Rpb24oaSkKKyAgICB7CisgICAgICAgIC8vIEZpeCB0aGUgaGVhcCBwcm9wZXJ0eSBhdCBpbmRl
eCBpIGdpdmVuIHRoYXQgZWFjaCBvZiB0aGUgbGVmdCBhbmQgdGhlIHJpZ2h0CisgICAgICAgIC8v
IHN1Yi10cmVlcyBzYXRpc2ZpZXMgdGhlIGhlYXAgcHJvcGVydHkuCisgICAgICAgIGZvciAodmFy
IGNpID0gdGhpcy5fY2hpbGRJbmRleChpKTsgY2kgIT0gLTE7IGkgPSBjaSwgY2kgPSB0aGlzLl9j
aGlsZEluZGV4KGNpKSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX2NvbXBhcmUodGhpcy5fdmFs
dWVzW2ldLCB0aGlzLl92YWx1ZXNbY2ldKSA+IDApCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHRoaXMuX3ZhbHVlcy5zd2FwKGNpLCBpKTsKKyAgICAg
ICAgfQorICAgIH0sCisgICAgCisgICAgc3RyOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2
YXIgb3V0ID0gIkhlYXBbIiArIHRoaXMuX3NpemUgKyAiXSA9IFsiOworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHRoaXMuX3NpemU7ICsraSkgeworICAgICAgICAgICAgb3V0ICs9IHRoaXMu
X3ZhbHVlc1tpXTsKKyAgICAgICAgICAgIGlmIChpIDwgdGhpcy5fc2l6ZSAtIDEpCisgICAgICAg
ICAgICAgICAgb3V0ICs9ICIsICI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG91dCArICJd
IjsKKyAgICB9LAorICAgIAorICAgIHZhbHVlczogZnVuY3Rpb24oc2l6ZSkgeworICAgICAgICAv
LyBSZXR1cm4gdGhlIGxhc3QgInNpemUiIGhlYXAgZWxlbWVudHMgdmFsdWVzLgorICAgICAgICB2
YXIgdmFsdWVzID0gdGhpcy5fdmFsdWVzLnNsaWNlKDAsIHRoaXMuX3NpemUpOworICAgICAgICBy
ZXR1cm4gdmFsdWVzLnNvcnQodGhpcy5fY29tcGFyZSkuc2xpY2UoMCwgTWF0aC5taW4oc2l6ZSwg
dGhpcy5fc2l6ZSkpOworICAgIH0KK30KKwordmFyIEFsZ29yaXRobSA9IHsKKyAgICBjcmVhdGVN
aW5IZWFwOiBmdW5jdGlvbihtYXhTaXplKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBIZWFw
KG1heFNpemUsIGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGIgLSBhOyB9KTsKKyAgICB9LAorICAg
IAorICAgIGNyZWF0ZU1heEhlYXA6IGZ1bmN0aW9uKG1heFNpemUpIHsKKyAgICAgICAgcmV0dXJu
IG5ldyBIZWFwKG1heFNpemUsIGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGEgLSBiOyB9KTsKKyAg
ICB9Cit9CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVzb3VyY2VzL2V4dGVu
c2lvbnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291
cmNlcy9leHRlbnNpb25zLmpzCShyZXZpc2lvbiAwKQorKysgUGVyZm9ybWFuY2VUZXN0cy9Bbmlt
b21ldGVyL3Jlc291cmNlcy9leHRlbnNpb25zLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzA2IEBACitmdW5jdGlvbiBQb2ludCh4LCB5KQoreworICAgIHRoaXMueCA9IHg7CisgICAgdGhp
cy55ID0geTsKK30KKworUG9pbnQucG9pbnRPbkNpcmNsZSA9IGZ1bmN0aW9uKGFuZ2xlLCByYWRp
dXMpCit7CisgICAgcmV0dXJuIG5ldyBQb2ludChyYWRpdXMgKiBNYXRoLmNvcyhhbmdsZSksIHJh
ZGl1cyAqIE1hdGguc2luKGFuZ2xlKSk7Cit9CisKK1BvaW50LnBvaW50T25FbGxpcHNlID0gZnVu
Y3Rpb24oYW5nbGUsIHJhZGl1c2VzKQoreworICAgIHJldHVybiBuZXcgUG9pbnQocmFkaXVzZXMu
eCAqIE1hdGguY29zKGFuZ2xlKSwgcmFkaXVzZXMueSAqIE1hdGguc2luKGFuZ2xlKSk7Cit9CisK
K1BvaW50LnByb3RvdHlwZSA9Cit7CisgICAgLy8gVXNlZCB3aGVuIHRoZSBwb2ludCBvYmplY3Qg
aXMgdXNlZCBhcyBhIHNpemUgb2JqZWN0LgorICAgIGdldCB3aWR0aCgpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy54OworICAgIH0sCisgICAgCisgICAgLy8gVXNlZCB3aGVuIHRoZSBwb2lu
dCBvYmplY3QgaXMgdXNlZCBhcyBhIHNpemUgb2JqZWN0LgorICAgIGdldCBoZWlnaHQoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMueTsKKyAgICB9LAorICAgIAorICAgIC8vIFVzZWQgd2hl
biB0aGUgcG9pbnQgb2JqZWN0IGlzIHVzZWQgYXMgYSBzaXplIG9iamVjdC4KKyAgICBnZXQgY2Vu
dGVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54IC8gMiwgdGhpcy55
IC8gMik7CisgICAgfSwKKyAgICAKKyAgICBhZGQ6IGZ1bmN0aW9uKG90aGVyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLnggKyBvdGhlci54LCB0aGlzLnkgKyBvdGhlci55
KTsKKyAgICB9LAorICAgIAorICAgIHN1YnRyYWN0OiBmdW5jdGlvbihvdGhlcikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54IC0gb3RoZXIueCwgdGhpcy55IC0gb3RoZXIu
eSk7CisgICAgfSwKKyAgICAKKyAgICBtdWx0aXBseTogZnVuY3Rpb24ob3RoZXIpCisgICAgewor
ICAgICAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCAqIG90aGVyLngsIHRoaXMueSAqIG90aGVy
LnkpOworICAgIH0sCisgICAgCisgICAgbW92ZTogZnVuY3Rpb24oYW5nbGUsIHZlbG9jaXR5LCB0
aW1lRGVsdGEpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5hZGQoUG9pbnQucG9pbnRPbkNp
cmNsZShhbmdsZSwgdmVsb2NpdHkgKiAodGltZURlbHRhIC8gMTAwMCkpKTsKKyAgICB9Cit9CisK
K2Z1bmN0aW9uIEluc2V0cyh0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQpCit7CisgICAgdGhpcy50
b3AgPSB0b3A7CisgICAgdGhpcy5yaWdodCA9IHJpZ2h0OworICAgIHRoaXMuYm90dG9tID0gYm90
dG9tOworICAgIHRoaXMubGVmdCA9IGxlZnQ7Cit9CisKK0luc2V0cy5wcm90b3R5cGUgPQorewor
ICAgIGdldCB3aWR0aCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubGVmdCArIHRoaXMucmlnaHQ7
CisgICAgfSwKKworICAgIGdldCBoZWlnaHQoKSB7CisgICAgICAgIHJldHVybiB0aGlzLnRvcCAr
IHRoaXMuYm90dG9tOworICAgIH0KK30KKworZnVuY3Rpb24gU2ltcGxlUHJvbWlzZSgpCit7Cisg
ICAgdGhpcy5fY2hhaW5lZFByb21pc2UgPSBudWxsOworICAgIHRoaXMuX2NhbGxiYWNrID0gbnVs
bDsKK30KKworU2ltcGxlUHJvbWlzZS5wcm90b3R5cGUudGhlbiA9IGZ1bmN0aW9uIChjYWxsYmFj
aykKK3sKKyAgICBpZiAodGhpcy5fY2FsbGJhY2spCisgICAgICAgIHRocm93ICJTaW1wbGVQcm9t
aXNlIGRvZXNuJ3Qgc3VwcG9ydCBtdWx0aXBsZSBjYWxscyB0byB0aGVuIjsKKyAgICAgICAgCisg
ICAgdGhpcy5fY2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICB0aGlzLl9jaGFpbmVkUHJvbWlzZSA9
IG5ldyBTaW1wbGVQcm9taXNlOworICAgIAorICAgIGlmICh0aGlzLl9yZXNvbHZlZCkKKyAgICAg
ICAgdGhpcy5yZXNvbHZlKHRoaXMuX3Jlc29sdmVkVmFsdWUpOworCisgICAgcmV0dXJuIHRoaXMu
X2NoYWluZWRQcm9taXNlOworfQorCitTaW1wbGVQcm9taXNlLnByb3RvdHlwZS5yZXNvbHZlID0g
ZnVuY3Rpb24gKHZhbHVlKQoreworICAgIGlmICghdGhpcy5fY2FsbGJhY2spIHsKKyAgICAgICAg
dGhpcy5fcmVzb2x2ZWQgPSB0cnVlOworICAgICAgICB0aGlzLl9yZXNvbHZlZFZhbHVlID0gdmFs
dWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2YXIgcmVzdWx0ID0gdGhpcy5fY2Fs
bGJhY2sodmFsdWUpOworICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBTaW1wbGVQcm9taXNlKSB7
CisgICAgICAgIHZhciBjaGFpbmVkUHJvbWlzZSA9IHRoaXMuX2NoYWluZWRQcm9taXNlOworICAg
ICAgICByZXN1bHQudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7IGNoYWluZWRQcm9taXNlLnJlc29s
dmUocmVzdWx0KTsgfSk7CisgICAgfSBlbHNlCisgICAgICAgIHRoaXMuX2NoYWluZWRQcm9taXNl
LnJlc29sdmUocmVzdWx0KTsKK30KKworZnVuY3Rpb24gT3B0aW9ucyh0ZXN0SW50ZXJ2YWwsIGZy
YW1lUmF0ZSkKK3sKKyAgICB0aGlzLnRlc3RJbnRlcnZhbCA9IHRlc3RJbnRlcnZhbDsKKyAgICB0
aGlzLmZyYW1lUmF0ZSA9IGZyYW1lUmF0ZTsKK30KKworZnVuY3Rpb24gUHJvZ3Jlc3NCYXIoZWxl
bWVudCwgcmFuZ2VzKQoreworICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7CisgICAgdGhpcy5y
YW5nZXMgPSByYW5nZXM7CisgICAgdGhpcy5jdXJyZW50UmFuZ2UgPSAwOworfQorCitQcm9ncmVz
c0Jhci5wcm90b3R5cGUgPQoreworICAgIF9wcm9ncmVzc1RvUGVyY2VudDogZnVuY3Rpb24ocHJv
Z3Jlc3MpCisgICAgeworICAgICAgICByZXR1cm4gcHJvZ3Jlc3MgKiAoMTAwIC8gdGhpcy5yYW5n
ZXMpOworICAgIH0sCisgICAgCisgICAgaW5jUmFuZ2U6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgICsrdGhpcy5jdXJyZW50UmFuZ2U7CisgICAgfSwKKyAgICAKKyAgICBzZXRQb3M6IGZ1bmN0
aW9uKHByb2dyZXNzKQorICAgIHsKKyAgICAgICAgdGhpcy5lbGVtZW50LnN0eWxlLndpZHRoID0g
dGhpcy5fcHJvZ3Jlc3NUb1BlcmNlbnQodGhpcy5jdXJyZW50UmFuZ2UgKyBwcm9ncmVzcykgKyAi
JSI7CisgICAgfQorfQorCitmdW5jdGlvbiBSZWNvcmRUYWJsZShlbGVtZW50KQoreworICAgIHRo
aXMuZWxlbWVudCA9IGVsZW1lbnQ7CisgICAgdGhpcy5jbGVhcigpOworfQorCitSZWNvcmRUYWJs
ZS5wcm90b3R5cGUgPQoreworICAgIGNsZWFyOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0
aGlzLmVsZW1lbnQuaW5uZXJIVE1MID0gIiI7CisgICAgfSwKKyAgICAKKyAgICBfc2hvd1RpdGxl
czogZnVuY3Rpb24ocm93LCBxdWV1ZSwgdGl0bGVzLCBtZXNzYWdlKQorICAgIHsKKyAgICAgICAg
dGl0bGVzLmZvckVhY2goZnVuY3Rpb24gKHRpdGxlKSB7CisgICAgICAgICAgICB2YXIgdGggPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0aCIpOworICAgICAgICAgICAgdGgudGV4dENvbnRlbnQg
PSB0aXRsZS50ZXh0OworICAgICAgICAgICAgaWYgKHR5cGVvZiBtZXNzYWdlICE9ICJ1bmRlZmlu
ZWQiICYmIG1lc3NhZ2UubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgdGguYXBwZW5kQ2hpbGQo
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7CisgICAgICAgICAgICAgICAgdGguYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1snICsgbWVzc2FnZSArJ10nKSk7CisgICAg
ICAgICAgICAgICAgbWVzc2FnZSA9ICIiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KCJ3aWR0aCIgaW4gdGl0bGUpCisgICAgICAgICAgICAgICAgdGgud2lkdGggPSB0aXRsZS53aWR0
aCArICIlIjsKKyAgICAgICAgICAgIHJvdy5hcHBlbmRDaGlsZCh0aCk7CisgICAgICAgICAgICBx
dWV1ZS5wdXNoKHtlbGVtZW50OiB0aCwgdGl0bGVzOiB0aXRsZS5jaGlsZHJlbiB9KTsKKyAgICAg
ICAgfSk7CisgICAgfSwKKyAgICAKKyAgICBfc2hvd0hlYWRlcjogZnVuY3Rpb24oc3VpdGVOYW1l
LCB0aXRsZXMsIG1lc3NhZ2UpCisgICAgeworICAgICAgICB2YXIgcm93ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgidHIiKTsKKworICAgICAgICB2YXIgcXVldWUgPSBbXTsKKyAgICAgICAgdGhp
cy5fc2hvd1RpdGxlcyhyb3csIHF1ZXVlLCB0aXRsZXMsIG1lc3NhZ2UpOworICAgICAgICB0aGlz
LmVsZW1lbnQuYXBwZW5kQ2hpbGQocm93KTsKKworICAgICAgICB3aGlsZSAocXVldWUubGVuZ3Ro
KSB7CisgICAgICAgICAgICB2YXIgcm93ID0gbnVsbDsKKyAgICAgICAgICAgIHZhciBlbnRyaWVz
ID0gW107CisKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBxdWV1ZS5sZW5ndGg7
IGkgPCBsZW47ICsraSkgeworICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHF1ZXVlLnNoaWZ0
KCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWVudHJ5LnRpdGxlcy5sZW5ndGgpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5LmVsZW1lbnQpOworICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoIXJvdykKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoInRyIik7CisKKyAgICAgICAgICAgICAgICB0aGlzLl9zaG93VGl0bGVzKHJvdywgcXVl
dWUsIGVudHJ5LnRpdGxlcywgIiIpOworICAgICAgICAgICAgICAgIGVudHJ5LmVsZW1lbnQuY29s
U3BhbiA9IGVudHJ5LnRpdGxlcy5sZW5ndGg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChyb3cpIHsKKyAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQocm93
KTsKKyAgICAgICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24oZW50cnkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgKytlbnRyeS5yb3dTcGFuOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwKKyAgICAKKyAgICBfc2hvd0VtcHR5OiBm
dW5jdGlvbihyb3csIHRlc3ROYW1lKQorICAgIHsKKyAgICAgICAgdmFyIHRkID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgidGQiKTsKKyAgICAgICAgcm93LmFwcGVuZENoaWxkKHRkKTsKKyAgICB9
LAorICAgIAorICAgIF9zaG93VmFsdWU6IGZ1bmN0aW9uKHJvdywgdGVzdE5hbWUsIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgdmFyIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKKyAg
ICAgICAgdGQudGV4dENvbnRlbnQgPSB2YWx1ZS50b0ZpeGVkKDIpOworICAgICAgICByb3cuYXBw
ZW5kQ2hpbGQodGQpOworICAgIH0sCisgICAgCisgICAgX3Nob3dTYW1wbGVzOiBmdW5jdGlvbihy
b3csIHRlc3ROYW1lLCBheGVzLCBzYW1wbGVzLCBzYW1wbGluZ1RpbWVPZmZzZXQpCisgICAgewor
ICAgICAgICB2YXIgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOworICAgICAgICB2
YXIgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIGJ1dHRv
bi5jbGFzc05hbWUgPSAic21hbGwtYnV0dG9uIjsKKyAgICAgICAgICAgIAorICAgICAgICBidXR0
b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHdp
bmRvdy5zaG93R3JhcGgodGVzdE5hbWUsIGF4ZXMsIHNhbXBsZXMsIHNhbXBsaW5nVGltZU9mZnNl
dCk7CisgICAgICAgIH0pOworICAgICAgICAgICAgCisgICAgICAgIGJ1dHRvbi50ZXh0Q29udGVu
dCA9ICJHcmFwaC4uLiI7CisgICAgICAgIHRkLmFwcGVuZENoaWxkKGJ1dHRvbik7CisgICAgICAg
IHJvdy5hcHBlbmRDaGlsZCh0ZCk7CisgICAgfSwKKyAgICAKKyAgICBfc2hvd1Rlc3Q6IGZ1bmN0
aW9uKHRlc3ROYW1lLCB0aXRsZXMsIHNhbXBsZXIsIGZpbmFsUmVzdWx0cykKKyAgICB7CisgICAg
ICAgIHZhciByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOworICAgICAgICB2YXIg
dGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOworICAgICAgICAKKyAgICAgICAgdGQu
dGV4dENvbnRlbnQgPSB0ZXN0TmFtZTsKKyAgICAgICAgcm93LmFwcGVuZENoaWxkKHRkKTsKKyAg
ICAgICAgCisgICAgICAgIHZhciBheGVzID0gW107CisgICAgICAgIHNhbXBsZXIuZXhwZXJpbWVu
dHMuZm9yRWFjaChmdW5jdGlvbihleHBlcmltZW50LCBpbmRleCkgeworICAgICAgICAgICAgdGhp
cy5fc2hvd1ZhbHVlKHJvdywgdGVzdE5hbWUsIGV4cGVyaW1lbnQubWVhbigpKTsKKyAgICAgICAg
ICAgIHRoaXMuX3Nob3dWYWx1ZShyb3csIHRlc3ROYW1lLCBleHBlcmltZW50LmNvbmNlcm4oRXhw
ZXJpbWVudC5kZWZhdWx0cy5DT05DRVJOKSk7CisgICAgICAgICAgICB0aGlzLl9zaG93VmFsdWUo
cm93LCB0ZXN0TmFtZSwgZXhwZXJpbWVudC5zdGFuZGFyZERldmlhdGlvbigpKTsKKyAgICAgICAg
ICAgIHRoaXMuX3Nob3dWYWx1ZShyb3csIHRlc3ROYW1lLCBleHBlcmltZW50LnBlcmNlbnRhZ2Uo
KSk7CisgICAgICAgICAgICBheGVzLnB1c2godGl0bGVzW2luZGV4ICsgMV0udGV4dCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgfSwgdGhpcyk7CisKKyAgICAgICAgdGhpcy5fc2hvd1ZhbHVlKHJv
dywgdGVzdE5hbWUsIHNhbXBsZXIuZXhwZXJpbWVudHNbMF0uc2NvcmUoRXhwZXJpbWVudC5kZWZh
dWx0cy5DT05DRVJOKSk7CisKKyAgICAgICAgaWYgKGZpbmFsUmVzdWx0cykKKyAgICAgICAgICAg
IHRoaXMuX3Nob3dTYW1wbGVzKHJvdywgdGVzdE5hbWUsIGF4ZXMsIHNhbXBsZXIuc2FtcGxlcywg
c2FtcGxlci5zYW1wbGluZ1RpbWVPZmZzZXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0
aGlzLl9zaG93RW1wdHkocm93LCB0ZXN0TmFtZSk7CisgICAgICAgICAgICAKKyAgICAgICAgdGhp
cy5lbGVtZW50LmFwcGVuZENoaWxkKHJvdyk7CisgICAgfSwKKyAgICAKKyAgICBfc2hvd1N1aXRl
OiBmdW5jdGlvbihzdWl0ZSwgc3VpdGVTYW1wbGVycykKKyAgICB7CisgICAgICAgIHZhciBzY29y
ZXMgPSBbXTsgICAgICAgIAorICAgICAgICBmb3IgKHZhciB0ZXN0TmFtZSBpbiBzdWl0ZVNhbXBs
ZXJzKSB7CisgICAgICAgICAgICB2YXIgdGVzdCA9IHRlc3RGcm9tTmFtZShzdWl0ZSwgdGVzdE5h
bWUpOworICAgICAgICAgICAgdmFyIHNhbXBsZXIgPSBzdWl0ZVNhbXBsZXJzW3Rlc3ROYW1lXTsg
CisgICAgICAgICAgICB0aGlzLl9zaG93VGVzdCh0ZXN0TmFtZSwgc3VpdGUudGl0bGVzLCBzYW1w
bGVyLCB0cnVlKTsKKyAgICAgICAgICAgIHNjb3Jlcy5wdXNoKHNhbXBsZXIuZXhwZXJpbWVudHNb
MF0uc2NvcmUoRXhwZXJpbWVudC5kZWZhdWx0cy5DT05DRVJOKSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHNjb3JlczsKKyAgICB9LAorICAgIAorICAgIHNob3dSZWNvcmQ6IGZ1bmN0aW9u
KHN1aXRlLCB0ZXN0LCBzYW1wbGVyLCBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgdGhpcy5jbGVh
cigpOyAgICAgICAgCisgICAgICAgIHRoaXMuX3Nob3dIZWFkZXIoIiIsIHN1aXRlLnRpdGxlcywg
bWVzc2FnZSk7CisgICAgICAgIHRoaXMuX3Nob3dUZXN0KHRlc3QubmFtZSwgc3VpdGUudGl0bGVz
LCBzYW1wbGVyLCBmYWxzZSk7ICAgICAgICAKKyAgICB9LAorICAgIAorICAgIHNob3dJdGVyYXRp
b25zOiBmdW5jdGlvbihpdGVyYXRpb25zU2FtcGxlcnMpCisgICAgeworICAgICAgICB0aGlzLmNs
ZWFyKCk7CisKKyAgICAgICAgdmFyIHNjb3JlcyA9IFtdOworICAgICAgICB2YXIgdGl0bGVzID0g
bnVsbDsKKyAgICAgICAgaXRlcmF0aW9uc1NhbXBsZXJzLmZvckVhY2goZnVuY3Rpb24oc3VpdGVz
U2FtcGxlcnMpIHsKKyAgICAgICAgICAgIGZvciAodmFyIHN1aXRlTmFtZSBpbiBzdWl0ZXNTYW1w
bGVycykgeworICAgICAgICAgICAgICAgIHZhciBzdWl0ZSA9IHN1aXRlRnJvbU5hbWUoc3VpdGVO
YW1lKTsKKyAgICAgICAgICAgICAgICBpZiAodGl0bGVzICE9IHN1aXRlLnRpdGxlcykgeworICAg
ICAgICAgICAgICAgICAgICB0aXRsZXMgPSBzdWl0ZS50aXRsZXM7CisgICAgICAgICAgICAgICAg
ICAgIHRoaXMuX3Nob3dIZWFkZXIoc3VpdGVOYW1lLCB0aXRsZXMsICIiKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXIgc3VpdGVTY29yZXMgPSB0aGlzLl9zaG93U3Vp
dGUoc3VpdGUsIHN1aXRlc1NhbXBsZXJzW3N1aXRlTmFtZV0pOworICAgICAgICAgICAgICAgIHNj
b3Jlcy5wdXNoLmFwcGx5KHNjb3Jlcywgc3VpdGVTY29yZXMpOworICAgICAgICAgICAgfQorICAg
ICAgICB9LCB0aGlzKTsKKworICAgICAgICByZXR1cm4gU3RhdGlzdGljcy5nZW9tZXRyaWNNZWFu
KHNjb3Jlcyk7CisgICAgfQorfQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jl
c291cmNlcy9zYW1wbGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9t
ZXRlci9yZXNvdXJjZXMvc2FtcGxlci5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVz
dHMvQW5pbW9tZXRlci9yZXNvdXJjZXMvc2FtcGxlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEyNCBAQAordmFyIFN0YXRpc3RpY3MgPQoreworICAgIHNhbXBsZU1lYW46IGZ1bmN0aW9u
KG51bWJlck9mU2FtcGxlcywgc3VtKQorICAgIHsKKyAgICAgICAgaWYgKG51bWJlck9mU2FtcGxl
cyA8IDEpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHN1bSAvIG51bWJl
ck9mU2FtcGxlczsKKyAgICB9LAorCisgICAgLy8gV2l0aCBzdW0gYW5kIHN1bSBvZiBzcXVhcmVz
LCB3ZSBjYW4gY29tcHV0ZSB0aGUgc2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvbiBpbiBPKDEpLgor
ICAgIC8vIFNlZSBodHRwczovL3JuaXdhLmNvbS8yMDEyLTExLTEwL3NhbXBsZS1zdGFuZGFyZC1k
ZXZpYXRpb24taW4tdGVybXMtb2Ytc3VtLWFuZC1zcXVhcmUtc3VtLW9mLXNhbXBsZXMvCisgICAg
dW5iaWFzZWRTYW1wbGVTdGFuZGFyZERldmlhdGlvbjogZnVuY3Rpb24obnVtYmVyT2ZTYW1wbGVz
LCBzdW0sIHNxdWFyZVN1bSkKKyAgICB7CisgICAgICAgIGlmIChudW1iZXJPZlNhbXBsZXMgPCAy
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBNYXRoLnNxcnQoKHNxdWFy
ZVN1bSAtIHN1bSAqIHN1bSAvIG51bWJlck9mU2FtcGxlcykgLyAobnVtYmVyT2ZTYW1wbGVzIC0g
MSkpOworICAgIH0sCisKKyAgICBnZW9tZXRyaWNNZWFuOiBmdW5jdGlvbih2YWx1ZXMpCisgICAg
eworICAgICAgICBpZiAoIXZhbHVlcy5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgdmFyIHJvb3RzID0gdmFsdWVzLm1hcChmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gIE1h
dGgucG93KHZhbHVlLCAxIC8gdmFsdWVzLmxlbmd0aCk7IH0pCisgICAgICAgIHJldHVybiByb290
cy5yZWR1Y2UoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSAqIGI7IH0pOworICAgIH0gICAKK30K
KworZnVuY3Rpb24gRXhwZXJpbWVudCgpCit7CisgICAgdGhpcy5faW5pdCgpOworICAgIHRoaXMu
X21heEhlYXAgPSBBbGdvcml0aG0uY3JlYXRlTWF4SGVhcChFeHBlcmltZW50LmRlZmF1bHRzLkNP
TkNFUk5fU0laRSk7Cit9CisKK0V4cGVyaW1lbnQuZGVmYXVsdHMgPQoreworICAgIENPTkNFUk46
IDUsCisgICAgQ09OQ0VSTl9TSVpFOiAxMDAsCit9CisKK0V4cGVyaW1lbnQucHJvdG90eXBlID0K
K3sKKyAgICBfaW5pdDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy5fc3VtID0gMDsK
KyAgICAgICAgdGhpcy5fc3F1YXJlU3VtID0gMDsKKyAgICAgICAgdGhpcy5fbnVtYmVyT2ZTYW1w
bGVzID0gMDsKKyAgICB9LAorICAgIAorICAgIC8vIENhbGxlZCBhZnRlciBhIHdhcm0tdXAgcGVy
aW9kCisgICAgc3RhcnRTYW1wbGluZzogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIG1l
YW4gPSB0aGlzLm1lYW4oKTsKKyAgICAgICAgdGhpcy5faW5pdCgpOworICAgICAgICB0aGlzLl9t
YXhIZWFwLmluaXQoKTsKKyAgICAgICAgdGhpcy5zYW1wbGUobWVhbik7CisgICAgfSwKKyAgICAK
KyAgICBzYW1wbGU6IGZ1bmN0aW9uKHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy5fc3VtICs9
IHZhbHVlOworICAgICAgICB0aGlzLl9zcXVhcmVTdW0gKz0gdmFsdWUgKiB2YWx1ZTsKKyAgICAg
ICAgdGhpcy5fbWF4SGVhcC5wdXNoKHZhbHVlKTsKKyAgICAgICAgKyt0aGlzLl9udW1iZXJPZlNh
bXBsZXM7CisgICAgfSwKKyAgICAKKyAgICBtZWFuOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICByZXR1cm4gU3RhdGlzdGljcy5zYW1wbGVNZWFuKHRoaXMuX251bWJlck9mU2FtcGxlcywgdGhp
cy5fc3VtKTsKKyAgICB9LAorICAgIAorICAgIHN0YW5kYXJkRGV2aWF0aW9uOiBmdW5jdGlvbigp
CisgICAgeworICAgICAgICByZXR1cm4gU3RhdGlzdGljcy51bmJpYXNlZFNhbXBsZVN0YW5kYXJk
RGV2aWF0aW9uKHRoaXMuX251bWJlck9mU2FtcGxlcywgdGhpcy5fc3VtLCB0aGlzLl9zcXVhcmVT
dW0pOworICAgIH0sCisgICAgCisgICAgcGVyY2VudGFnZTogZnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgdmFyIG1lYW4gPSB0aGlzLm1lYW4oKTsKKyAgICAgICAgcmV0dXJuIG1lYW4gPyB0aGlz
LnN0YW5kYXJkRGV2aWF0aW9uKCkgKiAxMDAgLyBtZWFuIDogMDsKKyAgICB9LAorICAgIAorICAg
IGNvbmNlcm46IGZ1bmN0aW9uKHBlcmNlbnRhZ2UpCisgICAgeworICAgICAgICB2YXIgc2l6ZSA9
IE1hdGguY2VpbCh0aGlzLl9udW1iZXJPZlNhbXBsZXMgKiBwZXJjZW50YWdlIC8gMTAwKTsKKyAg
ICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuX21heEhlYXAudmFsdWVzKHNpemUpOworICAgICAgICBy
ZXR1cm4gdmFsdWVzLmxlbmd0aCA/IHZhbHVlcy5yZWR1Y2UoZnVuY3Rpb24oYSwgYikgeyByZXR1
cm4gYSArIGI7IH0pIC8gdmFsdWVzLmxlbmd0aCA6IDA7CisgICAgfSwKKyAgICAKKyAgICBzY29y
ZTogZnVuY3Rpb24ocGVyY2VudGFnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdGF0aXN0aWNz
Lmdlb21ldHJpY01lYW4oW3RoaXMubWVhbigpLCBNYXRoLm1heCh0aGlzLmNvbmNlcm4ocGVyY2Vu
dGFnZSksIDEpXSk7CisgICAgfQorfQorCitmdW5jdGlvbiBTYW1wbGVyKGNvdW50KQoreworICAg
IHRoaXMuZXhwZXJpbWVudHMgPSBbXTsKKyAgICB3aGlsZSAoY291bnQtLSkKKyAgICAgICAgdGhp
cy5leHBlcmltZW50cy5wdXNoKG5ldyBFeHBlcmltZW50KCkpOworICAgIHRoaXMuc2FtcGxlcyA9
IFtdOworICAgIHRoaXMuc2FtcGxpbmdUaW1lT2Zmc2V0ID0gMDsKK30KKworU2FtcGxlci5wcm90
b3R5cGUgPQoreworICAgIHN0YXJ0U2FtcGxpbmc6IGZ1bmN0aW9uKHRpbWVPZmZzZXQpCisgICAg
eworICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5leHBlcmltZW50cy5s
ZW5ndGg7ICsraW5kZXgpCisgICAgICAgICAgICB0aGlzLmV4cGVyaW1lbnRzW2luZGV4XS5zdGFy
dFNhbXBsaW5nKCk7CisgICAgICAgICAgICAKKyAgICAgICAgdGhpcy5zYW1wbGluZ1RpbWVPZmZz
ZXQgPSB0aW1lT2Zmc2V0IC8gMTAwMDsKKyAgICB9LAorICAgIAorICAgIHNhbXBsZTogZnVuY3Rp
b24odGltZU9mZnNldCwgdmFsdWVzKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGgg
PCB0aGlzLmV4cGVyaW1lbnRzLmxlbmd0aCkKKyAgICAgICAgICAgIHRocm93ICJOb3QgZW5vdWdo
IHNhbXBsZSBwb2ludHMiOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgZm9yICh2YXIg
aW5kZXggPSAwOyBpbmRleCA8IHRoaXMuZXhwZXJpbWVudHMubGVuZ3RoOyArK2luZGV4KQorICAg
ICAgICAgICAgdGhpcy5leHBlcmltZW50c1tpbmRleF0uc2FtcGxlKHZhbHVlc1tpbmRleF0pOwor
ICAgICAgICAgICAgCisgICAgICAgIHRoaXMuc2FtcGxlcy5wdXNoKHsgdGltZU9mZnNldDogdGlt
ZU9mZnNldCAvIDEwMDAsIHZhbHVlczogdmFsdWVzIH0pOworICAgIH0KK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262377</attachid>
            <date>2015-10-02 19:15:51 -0700</date>
            <delta_ts>2015-10-02 20:10:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149691-20151002191524.patch</filename>
            <type>text/plain</type>
            <size>23470</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTA1MzUpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBACisyMDE1LTEwLTAyICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWRk
IHNoYXJlZCBjb2RlIGZvciBhIG5ldyBhIGdyYXBoaWNzIGJlbmNobWFyaworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5NjkxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgUnlvc3VrZSBOaXdhLgorCisgICAgICAgIFRoaXMgc2V0IG9mIGNsYXNzZXMgd2ls
bCBiZSBzaGFyZWQgYW5kIHVzZWQgYnkgdGhlIHRlc3RzIGFuZCB0aGUgcnVubmVyCisgICAgICAg
IG9mIGEgbmV3IGdyYXBoaWNzIGJlbmNobWFyay4KKworICAgICAgICAqIEFuaW1vbWV0ZXIvcmVz
b3VyY2VzOiBBZGRlZC4KKyAgICAgICAgKiBBbmltb21ldGVyL3Jlc291cmNlcy9hbGdvcml0aG0u
anM6IEFkZGVkLgorICAgICAgICAoQXJyYXkucHJvdG90eXBlLnN3YXApOiBTd2FwcyB0d28gZWxl
bWVudHMgaW4gYW4gYXJyYXkuCisgICAgICAgIChIZWFwKTogQmluYXJ5IE1pbi9NYXggSGVhcCBv
YmplY3QKKyAgICAgICAgKEhlYXAucHJvdG90eXBlLl9wYXJlbnRJbmRleCk6IEdpdmVuIHRoZSBj
aGlsZCBub2RlIGluZGV4LCBpdCByZXR1cm5zIHRoZSBwYXJlbnQgaW5kZXguCisgICAgICAgIChI
ZWFwLnByb3RvdHlwZS5fbGVmdEluZGV4KTogR2l2ZW4gdGhlIHBhcmVudCBub2RlIGluZGV4LCBp
dCByZXR1cm5zIHRoZSBsZWZ0IG5vZGUgaW5kZXguCisgICAgICAgIChIZWFwLnByb3RvdHlwZS5f
cmlnaHRJbmRleCk6IEdpdmVuIHRoZSBwYXJlbnQgbm9kZSBpbmRleCwgaXQgcmV0dXJucyB0aGUg
cmlnaHQgbm9kZSBpbmRleC4KKyAgICAgICAgKEhlYXAucHJvdG90eXBlLl9jaGlsZEluZGV4KTog
R2l2ZW4gdGhlIHBhcmVudCBub2RlIGluZGV4LCBpdCByZXR1cm5zIHRoZSBjaGlsZCBpbmRleCB0
aGF0IG1heSB2aW9sYXRlIHRoZSBoZWFwIHByb3BlcnR5LgorICAgICAgICAoSGVhcC5wcm90b3R5
cGUuaW5pdCk6IEluaXRpYWxpemVzIHRoZSBoZWFwIHN0YXRlLgorICAgICAgICAoSGVhcC5wcm90
b3R5cGUudG9wKTogUmV0dXJucyB0aGUgdmFsdWUgc3RvcmVkIGF0IHRoZSB0b3Agb2YgdGhlIGhl
YXAuCisgICAgICAgIChIZWFwLnByb3RvdHlwZS5wdXNoKTogUHVzaGVzIGEgbmV3IG5vZGUgYXQg
dGhlIHRvcCBvZiB0aGUgaGVhcC4KKyAgICAgICAgKEhlYXAucHJvdG90eXBlLnBvcCk6IEV4dHJh
Y3RzIHRoZSB0b3Agbm9kZSBvZiB0aGUgaGVhcC4KKyAgICAgICAgKEhlYXAucHJvdG90eXBlLl9i
dWJibGUpOiBGaXhlcyB0aGUgaGVhcCBwcm9wZXJ0eSBieSBtb3ZpbmcgdXB3YXJkLgorICAgICAg
ICAoSGVhcC5wcm90b3R5cGUuX3NpbmspOiBGaXhlcyB0aGUgaGVhcCBwcm9wZXJ0eSBieSBtb3Zp
bmcgZG93bndhcmQuCisgICAgICAgIChIZWFwLnByb3RvdHlwZS5zdHIpOiBQcmludHMgdGhlIG5v
ZGVzIG9mIHRoZSBoZWFwIHRvIGEgc3RyaW5nLgorICAgICAgICAoSGVhcC5wcm90b3R5cGUudmFs
dWVzKTogUmV0dXJucyB0aGUgbGFzdCAic2l6ZSIgaGVhcCBlbGVtZW50cyB2YWx1ZXMuCisKKyAg
ICAgICAgKEFsZ29yaXRobS5jcmVhdGVNaW5IZWFwKTogQ3JlYXRlcyBhIHNpemUtYm91bmRlZCBt
aW4taGVhcCBvYmplY3QuCisgICAgICAgIChBbGdvcml0aG0uY3JlYXRlTWF4SGVhcCk6IENyZWF0
ZXMgYSBzaXplLWJvdW5kZWQgbWF4LWhlYXAgb2JqZWN0LgorICAgICAgICAKKyAgICAgICAgKiBB
bmltb21ldGVyL3Jlc291cmNlcy9leHRlbnNpb25zLmpzOiBBZGRlZC4KKyAgICAgICAgKFBvaW50
KTogUG9pbnQgb2JqZWN0IGJ1dCBjYW4gYmUgdXNlZCBhcyBzaXplIGFsc28uCisgICAgICAgIChQ
b2ludC5wb2ludE9uQ2lyY2xlKTogR2l2ZW4sIHRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZSBhbmQg
dGhlIGFuZ2xlIG9mIHRoZSBwb2ludCwgaXQgcmV0dXJucyBhIHBvaW50IG9iamVjdC4KKyAgICAg
ICAgKFBvaW50LnBvaW50T25FbGxpcHNlKTogR2l2ZW4sIHRoZSByYWRpdXNlcyBvZiB0aGUgZWxs
aXBzZSBhbmQgdGhlIGFuZ2xlIG9mIHRoZSBwb2ludCwgaXQgcmV0dXJucyBhIHBvaW50IG9iamVj
dC4KKyAgICAgICAgKFBvaW50LnByb3RvdHlwZS5nZXQgd2lkdGgpOiBTaG91bGQgYmUgY2FsbGVk
IHdoZW4gdGhlIHBvaW50IGlzIHVzZWQgYXMgc2l6ZS4KKyAgICAgICAgKFBvaW50LnByb3RvdHlw
ZS5nZXQgaGVpZ2h0KTogU2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBwb2ludCBpcyB1c2VkIGFz
IHNpemUuCisgICAgICAgIChQb2ludC5wcm90b3R5cGUuZ2V0IGNlbnRlcik6IFNob3VsZCBiZSBj
YWxsZWQgd2hlbiB0aGUgcG9pbnQgaXMgdXNlZCBhcyBzaXplLgorICAgICAgICAoUG9pbnQucHJv
dG90eXBlLmFkZCk6IFJldHVybnMgYSBuZXcgcG9pbnQgPSB0aGlzICsgb3RoZXIuCisgICAgICAg
IChQb2ludC5wcm90b3R5cGUuc3VidHJhY3QpOiBSZXR1cm5zIGEgbmV3IHBvaW50ID0gdGhpcyAt
IG90aGVyLgorICAgICAgICAoUG9pbnQucHJvdG90eXBlLm11bHRpcGx5KTogUmV0dXJucyBhIG5l
dyBwb2ludCA9IHRoaXMgKiBvdGhlci4KKyAgICAgICAgKFBvaW50LnByb3RvdHlwZS5tb3ZlKTog
TW92ZXMgdGhlIHBvaW50IGluIGEgZ2l2ZW4gZGlyZWN0aW9uLCB2ZWxvY2l0eSwgdGltZSBwZXJp
b2QuCisKKyAgICAgICAgKEluc2V0cyk6IFJlcHJlc2VudHMgYm9yZGVycyBvZiBhIGNvbnRhaW5l
ci4KKyAgICAgICAgKEluc2V0cy5wcm90b3R5cGUuZ2V0IHdpZHRoKTogUmV0dXJucyBsZWZ0ICsg
cmlnaHQuCisgICAgICAgIChJbnNldHMucHJvdG90eXBlLmdldCBoZWlnaHQpOiBSZXR1cm5zIHRv
cCArIGJvdHRvbS4KKworICAgICAgICAoU2ltcGxlUHJvbWlzZSk6CisgICAgICAgIChTaW1wbGVQ
cm9taXNlLnByb3RvdHlwZS50aGVuKToKKyAgICAgICAgKFNpbXBsZVByb21pc2UucHJvdG90eXBl
LnJlc29sdmUpOgorICAgICAgICBNb3ZlZCBmcm9tIEFuaW1vbWV0ZXIvcnVubmVyL3Jlc291cmNl
cy9iZW5jaG1hcmstcnVubmVyLmpzIHNpbmNlIHRlc3RzIGFsc28gbmVlZCBpdC4KKworICAgICAg
ICAoT3B0aW9ucyk6IEJlbmNobWFyayBydW5uaW5nIG9wdGlvbnMgYXMgdGhleSBhcmUgc2V0IGJ5
IHRoZSB1c2VyLgorCisgICAgICAgIChQcm9ncmVzc0Jhcik6IE1hbmFnZXMgYSBwcm9ncmVzcyBi
YXIgZWxlbWVudC4gVGhlIHByb2dyZXNzIGJhciBpcyBkaXZpZGVkIGludG8gZXF1YWwgbGVuZ3Ro
IHJhbmdlcy4KKyAgICAgICAgKFByb2dyZXNzQmFyLnByb3RvdHlwZS5fcHJvZ3Jlc3NUb1BlcmNl
bnQpOiBDb252ZXJ0cyB0aGUgcHJvZ3Jlc3MgaW50byBhIHBlcmNlbnRhZ2UuCisgICAgICAgIChQ
cm9ncmVzc0Jhci5wcm90b3R5cGUuaW5jUmFuZ2UpOiBNb3ZlcyB0byB0aGUgbmV4dCByYW5nZSAo
YSByYW5nZSBpcyB0aGUgcnVubmluZyB0aW1lIG9mIGEgc2luZ2xlIHRlc3QpLgorICAgICAgICAo
UHJvZ3Jlc3NCYXIucHJvdG90eXBlLnNldFBvcyk6IERyYXdzIHRoZSBjdXJyZW50IHByb2dyZXNz
IGluIHRoZSBjdXJyZW50IHJhbmdlLgorCisgICAgICAgIChSZWNvcmRUYWJsZSk6IFNob3dzIHRo
ZSByZXN1bHRzIG9mIHJ1bm5pbmcgYSBiZW5jaG1hcmsgaW4gYSB0YWJ1bGFyIGZvcm0uCisgICAg
ICAgIChSZWNvcmRUYWJsZS5wcm90b3R5cGUuY2xlYXIpOiBDbGVhcnMgdGhlIHJlc3VsdHMgdGFi
bGUuCisgICAgICAgIChSZWNvcmRUYWJsZS5wcm90b3R5cGUuX3Nob3dUaXRsZXMpOiBTaG93cyB0
aGUgaGVhZGVyIHRpdGxlcyBhbmQgYXBwZW5kcyB0aGUgc3ViLXRpdGxlcyB0byBhIHF1ZXVlLgor
ICAgICAgICAoUmVjb3JkVGFibGUucHJvdG90eXBlLl9zaG93SGVhZGVyKTogU2hvd3MgdGhlIHRh
YmxlIGhlYWRlciB0aXRsZXMuCisgICAgICAgIChSZWNvcmRUYWJsZS5wcm90b3R5cGUuX3Nob3dF
bXB0eSk6IFNob3dzIGFuIGVtcHR5IHRhYmxlIGNlbGwuCisgICAgICAgIChSZWNvcmRUYWJsZS5w
cm90b3R5cGUuX3Nob3dWYWx1ZSk6IFNob3dzIGEgbnVtYmVyIHZhbHVlIGluIHRoZSByZXN1bHRz
IHRhYmxlLgorICAgICAgICAoUmVjb3JkVGFibGUucHJvdG90eXBlLl9zaG93U2FtcGxlcyk6IFNo
b3dzIGEgYnV0dG9uIGZvciB0aGUgc2FtcGxlZCBkYXRhIGdyYXBoLgorICAgICAgICAoUmVjb3Jk
VGFibGUucHJvdG90eXBlLl9zaG93VGVzdCk6IFNob3dzIHRoZSByZXN1bHRzIG9mIGEgc2luZ2xl
IHRlc3QuCisgICAgICAgIChSZWNvcmRUYWJsZS5wcm90b3R5cGUuX3Nob3dTdWl0ZSk6IFNob3dz
IHRoZSByZXN1bHRzIG9mIGEgc2luZ2xlIHN1aXRlLgorICAgICAgICAoUmVjb3JkVGFibGUucHJv
dG90eXBlLnNob3dSZWNvcmQpOiBTaG93cyBhIHNpbmdsZSBpdGVyYXRpb24gZm9yIGEgc2luZ2xl
IHRlc3QuCisgICAgICAgIChSZWNvcmRUYWJsZS5wcm90b3R5cGUuc2hvd0l0ZXJhdGlvbnMpOiBT
aG93cyB0aGUgcmVzdWx0cyBvZiBhbGwgdGhlIHN1aXRlcyBvZiB0aGUgaXRlcmF0aW9ucy4gCisK
KyAgICAgICAgKiBBbmltb21ldGVyL3Jlc291cmNlcy9zYW1wbGVyLmpzOiBBZGRlZC4KKyAgICAg
ICAgKFN0YXRpc3RpY3Muc2FtcGxlTWVhbik6IFJldHVybnMgdGhlIHNhbXBsZSBtZWFuLgorICAg
ICAgICAoU3RhdGlzdGljcy51bmJpYXNlZFNhbXBsZVN0YW5kYXJkRGV2aWF0aW9uKTogUmV0dXJu
cyB0aGUgdW5iaWFzZWQgc2FtcGxlIHZhcmlhbmNlIChpLmUuIHdpdGggQmVzc2VsJ3MgY29ycmVj
dGlvbikKKyAgICAgICAgKFN0YXRpc3RpY3MuZ2VvbWV0cmljTWVhbik6IFJldHVybnMgdGhlIGdl
b21ldHJpYyBtZWFuLgorCisgICAgICAgIChFeHBlcmltZW50KTogUmVwcmVzZW50cyBhIHNhbXBs
aW5nIGV4cGVyaW1lbnQuIAorICAgICAgICAoRXhwZXJpbWVudC5wcm90b3R5cGUuX2luaXQpOiBD
YWxsZWQgd2hlbiB0aGUgb2JqZWN0IGlzIGNyZWF0ZWQgYW5kIHdoZW4gc3RhcnRTYW1wbGluZygp
IGlzIGNhbGxlZC4KKyAgICAgICAgKEV4cGVyaW1lbnQucHJvdG90eXBlLnN0YXJ0U2FtcGxpbmcp
OiBDYWxsZWQgYWZ0ZXIgd2FybXVwIHBlcmlvZC4gUmVzdGFydHMgY29sbGVjdGluZyBzYW1wbGVk
IGRhdGEgcG9pbnRzLgorICAgICAgICAoRXhwZXJpbWVudC5wcm90b3R5cGUuc2FtcGxlKTogQWRk
IGEgbmV3IGRhdGEgcG9pbnQuCisgICAgICAgIChFeHBlcmltZW50LnByb3RvdHlwZS5tZWFuKTog
UmV0dXJucyB0aGUgc2FtcGxlIG1lYW4gZm9yIHRoZSBjdXJyZW50IHNhbXBsZWQgZGF0YSBwb2lu
dHMuCisgICAgICAgIChFeHBlcmltZW50LnByb3RvdHlwZS5zdGFuZGFyZERldmlhdGlvbik6IFJl
dHVybnMgdGhlIHNhbXBsZSBzdGFuZGFyZCBkZXZpYXRpb24gZm9yIHRoZSBjdXJyZW50IHNhbXBs
ZWQgZGF0YSBwb2ludHMuCisgICAgICAgIChFeHBlcmltZW50LnByb3RvdHlwZS5wZXJjZW50YWdl
KTogUmV0dXJucyB0aGUgcGVyY2VudGFnZSBvZiB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIGRpdmlk
ZWQgdG8gdGhlIG1lYW4uCisgICAgICAgIChFeHBlcmltZW50LnByb3RvdHlwZS5jb25maWRlbmNl
SW50ZXJ2YWxEZWx0YSk6IENhbGN1bGF0ZXMgdGhlIGNvbmZpZGVuY2UgZGVsdGEgZm9yIHRoZSBj
dXJyZW50IHNhbXBsZWQgZGF0YSBnaXZlbiBhIGNvbmZpZGVuY2UgbGV2ZWwuCisgICAgICAgIChF
eHBlcmltZW50LnByb3RvdHlwZS5jb25jZXJuKTogUmV0dXJucyB0aGUgYXZlcmFnZSBvZiB0aGUg
d29yc3QgZ2l2ZW4gcGVyY2VudGFnZSBmcm9tIHRoZSBzYW1wbGVkIGRhdGEuCisgICAgICAgIChF
eHBlcmltZW50LnByb3RvdHlwZS5zY29yZSk6IFJldHVybnMgYSBzY29yZSBmb3IgdGhlIHNhbXBs
ZWQgZGF0YS4gSXQgaXMgdGhlIGdlb21ldHJpYyBtZWFuIG9mIHNhbXBsZU1lYW4gYW5kIGNvbmNl
cm4uCisKKyAgICAgICAgKFNhbXBsZXIpOiBSZXByZXNlbnRzIGEgY29tcG91bmQgZXhwZXJpbWVu
dC4gSXQgbWFuYWdlcyBzYW1wbGluZyBtdWx0aXBsZSBkYXRhIHBvaW50cyBhdCB0aGUgc2FtZSB0
aW1lIG9mZnNldC4KKyAgICAgICAgKFNhbXBsZXIucHJvdG90eXBlLnN0YXJ0U2FtcGxpbmcpOiBD
YWxsZWQgYWZ0ZXIgd2FybWluZyB1cCBwZXJpb2QuIFJlc3RhcnRzIGNvbGxlY3Rpbmcgc2FtcGxl
ZCBkYXRhIHBvaW50cy4KKyAgICAgICAgKFNhbXBsZXIucHJvdG90eXBlLnNhbXBsZSk6IEFkZCBh
IG5ldyBkYXRhIHZlY3RvciBhdCBhIGdpdmVuIHRpbWUgb2Zmc2V0LgorICAgICAgICAKIDIwMTUt
MTAtMDIgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBZGQgdGhlIHRlc3QgcnVubmVyIGZvciBhIG5ldyBhIGdyYXBoaWNzIGJlbmNobWFyawpJ
bmRleDogUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9hbGdvcml0aG0uanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9hbGdv
cml0aG0uanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0ZXIvcmVz
b3VyY2VzL2FsZ29yaXRobS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MiBAQAorQXJy
YXkucHJvdG90eXBlLnN3YXAgPSBmdW5jdGlvbihpLCBqKQoreworICAgIHZhciB0ID0gdGhpc1tp
XTsKKyAgICB0aGlzW2ldID0gdGhpc1tqXTsKKyAgICB0aGlzW2pdID0gdDsKKyAgICByZXR1cm4g
dGhpczsKK30KKworZnVuY3Rpb24gSGVhcChtYXhTaXplLCBjb21wYXJlKQoreworICAgIHRoaXMu
X21heFNpemUgPSBtYXhTaXplOworICAgIHRoaXMuX2NvbXBhcmUgPSBjb21wYXJlOworICAgIHRo
aXMuX3NpemUgPSAwOworICAgIHRoaXMuX3ZhbHVlcyA9IG5ldyBBcnJheSh0aGlzLl9tYXhTaXpl
KTsKK30KKworSGVhcC5wcm90b3R5cGUgPQoreworICAgIC8vIFRoaXMgaXMgYSBiaW5hcnkgaGVh
cCByZXByZXNlbnRlZCBpbiBhbiBhcnJheS4gVGhlIHJvb3QgZWxlbWVudCBpcyBzdG9yZWQKKyAg
ICAvLyBpbiB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgYXJyYXkuIFRoZSByb290IGlzIGZvbGxv
d2VkIGJ5IGl0cyB0d28gY2hpbGRyZW4uCisgICAgLy8gVGhlbiBpdHMgZm91ciBncmFuZGNoaWxk
cmVuIGFuZCBzbyBvbi4gU28gZXZlcnkgbGV2ZWwgaW4gdGhlIGJpbmFyeSBoZWFwIGlzCisgICAg
Ly8gZG91YmxlZCBpbiB0aGUgZm9sbG93aW5nIGxldmVsLiBIZXJlIGlzIGFuIGV4YW1wbGUgb2Yg
dGhlIG5vZGUgaW5kaWNlcyBhbmQKKyAgICAvLyBob3cgdGhleSBhcmUgcmVsYXRlZCB0byB0aGVp
ciBwYXJlbnRzIGFuZCBjaGlsZHJlbi4KKyAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAv
LyAgICAgICAgICAgICAgMCAgICAgICAxICAgICAgIDIgICAgICAgMyAgICAgICA0ICAgICAgIDUg
ICAgICAgNgorICAgIC8vIFBBUkVOVCAgICAgICAtMSAgICAgIDAgICAgICAgMCAgICAgICAxICAg
ICAgIDEgICAgICAgMiAgICAgICAyCisgICAgLy8gTEVGVCAgICAgICAgIDEgICAgICAgMyAgICAg
ICA1ICAgICAgIDcgICAgICAgOSAgICAgICAxMSAgICAgIDEzCisgICAgLy8gUklHSFQgICAgICAg
IDIgICAgICAgNCAgICAgICA2ICAgICAgIDggICAgICAgMTAgICAgICAxMiAgICAgIDE0CisgICAg
Ly8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CisgICAgX3BhcmVudEluZGV4OiBmdW5jdGlvbihpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGkgPiAwID8gTWF0aC5mbG9vcigoaSAtIDEpIC8gMikgOiAtMTsK
KyAgICB9LAorICAgIAorICAgIF9sZWZ0SW5kZXg6IGZ1bmN0aW9uKGkpCisgICAgeworICAgICAg
ICB2YXIgbGVmdEluZGV4ID0gaSAqIDIgKyAxOworICAgICAgICByZXR1cm4gbGVmdEluZGV4IDwg
dGhpcy5fc2l6ZSA/IGxlZnRJbmRleCA6IC0xOworICAgIH0sCisgICAgCisgICAgX3JpZ2h0SW5k
ZXg6IGZ1bmN0aW9uKGkpCisgICAgeworICAgICAgICB2YXIgcmlnaHRJbmRleCA9IGkgKiAyICsg
MjsKKyAgICAgICAgcmV0dXJuIHJpZ2h0SW5kZXggPCB0aGlzLl9zaXplID8gcmlnaHRJbmRleCA6
IC0xOworICAgIH0sCisgICAgCisgICAgLy8gUmV0dXJuIHRoZSBjaGlsZCBpbmRleCB0aGF0IG1h
eSB2aW9sYXRlIHRoZSBoZWFwIHByb3BlcnR5IGF0IGluZGV4IGkuCisgICAgX2NoaWxkSW5kZXg6
IGZ1bmN0aW9uKGkpCisgICAgeworICAgICAgICB2YXIgbGVmdCA9IHRoaXMuX2xlZnRJbmRleChp
KTsKKyAgICAgICAgdmFyIHJpZ2h0ID0gdGhpcy5fcmlnaHRJbmRleChpKTsKKworICAgICAgICBp
ZiAobGVmdCAhPSAtMSAmJiByaWdodCAhPSAtMSkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9j
b21wYXJlKHRoaXMuX3ZhbHVlc1tsZWZ0XSwgdGhpcy5fdmFsdWVzW3JpZ2h0XSkgPiAwID8gbGVm
dCA6IHJpZ2h0OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGxlZnQgIT0gLTEgPyBsZWZ0IDog
cmlnaHQ7CisgICAgfSwKKyAgICAKKyAgICBpbml0OiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICB0aGlzLl9zaXplID0gMDsKKyAgICB9LAorICAgIAorICAgIHRvcDogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3NpemUgPyB0aGlzLl92YWx1ZXNbMF0gOiBOYU47Cisg
ICAgfSwKKyAgICAKKyAgICBwdXNoOiBmdW5jdGlvbih2YWx1ZSkKKyAgICB7CisgICAgICAgIGlm
ICh0aGlzLl9zaXplID09IHRoaXMuX21heFNpemUpIHsKKyAgICAgICAgICAgIC8vIElmIHNpemUg
aXMgYm91bmRlZCBhbmQgdGhlIG5ldyB2YWx1ZSBjYW4gYmUgYSBwYXJlbnQgb2YgdGhlIHRvcCgp
CisgICAgICAgICAgICAvLyBpZiB0aGUgc2l6ZSB3ZXJlIHVuYm91bmRlZCwganVzdCBpZ25vcmUg
dGhlIG5ldyB2YWx1ZS4KKyAgICAgICAgICAgIGlmICh0aGlzLl9jb21wYXJlKHZhbHVlLCB0aGlz
LnRvcCgpKSA+IDApCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgdGhpcy5w
b3AoKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLl92YWx1ZXNbdGhpcy5fc2l6ZSsrXSA9IHZh
bHVlOworICAgICAgICB0aGlzLl9idWJibGUodGhpcy5fc2l6ZSAtIDEpOworICAgIH0sCisKKyAg
ICBwb3A6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fc2l6ZSkKKyAgICAg
ICAgICAgIHJldHVybiBOYU47CisgICAgICAgIAorICAgICAgICB0aGlzLl92YWx1ZXNbMF0gPSB0
aGlzLl92YWx1ZXNbLS10aGlzLl9zaXplXTsKKyAgICAgICAgdGhpcy5fc2luaygwKTsKKyAgICB9
LAorICAgIAorICAgIF9idWJibGU6IGZ1bmN0aW9uKGkpCisgICAgeworICAgICAgICAvLyBGaXgg
dGhlIGhlYXAgcHJvcGVydHkgYXQgaW5kZXggaSBnaXZlbiB0aGF0IHBhcmVudCBpcyB0aGUgb25s
eSBub2RlIHRoYXQKKyAgICAgICAgLy8gbWF5IHZpb2xhdGUgdGhlIGhlYXAgcHJvcGVydHkuCisg
ICAgICAgIGZvciAodmFyIHBpID0gdGhpcy5fcGFyZW50SW5kZXgoaSk7IHBpICE9IC0xOyBpID0g
cGksIHBpID0gdGhpcy5fcGFyZW50SW5kZXgocGkpKSB7CisgICAgICAgICAgICBpZiAodGhpcy5f
Y29tcGFyZSh0aGlzLl92YWx1ZXNbcGldLCB0aGlzLl92YWx1ZXNbaV0pID4gMCkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHRoaXMuX3ZhbHVl
cy5zd2FwKHBpLCBpKTsKKyAgICAgICAgfQorICAgIH0sCisgICAgCisgICAgX3Npbms6IGZ1bmN0
aW9uKGkpCisgICAgeworICAgICAgICAvLyBGaXggdGhlIGhlYXAgcHJvcGVydHkgYXQgaW5kZXgg
aSBnaXZlbiB0aGF0IGVhY2ggb2YgdGhlIGxlZnQgYW5kIHRoZSByaWdodAorICAgICAgICAvLyBz
dWItdHJlZXMgc2F0aXNmaWVzIHRoZSBoZWFwIHByb3BlcnR5LgorICAgICAgICBmb3IgKHZhciBj
aSA9IHRoaXMuX2NoaWxkSW5kZXgoaSk7IGNpICE9IC0xOyBpID0gY2ksIGNpID0gdGhpcy5fY2hp
bGRJbmRleChjaSkpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9jb21wYXJlKHRoaXMuX3ZhbHVl
c1tpXSwgdGhpcy5fdmFsdWVzW2NpXSkgPiAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgICAgICAgICB0aGlzLl92YWx1ZXMuc3dhcChjaSwgaSk7CisgICAgICAg
IH0KKyAgICB9LAorICAgIAorICAgIHN0cjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFy
IG91dCA9ICJIZWFwWyIgKyB0aGlzLl9zaXplICsgIl0gPSBbIjsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB0aGlzLl9zaXplOyArK2kpIHsKKyAgICAgICAgICAgIG91dCArPSB0aGlzLl92
YWx1ZXNbaV07CisgICAgICAgICAgICBpZiAoaSA8IHRoaXMuX3NpemUgLSAxKQorICAgICAgICAg
ICAgICAgIG91dCArPSAiLCAiOworICAgICAgICB9CisgICAgICAgIHJldHVybiBvdXQgKyAiXSI7
CisgICAgfSwKKyAgICAKKyAgICB2YWx1ZXM6IGZ1bmN0aW9uKHNpemUpIHsKKyAgICAgICAgLy8g
UmV0dXJuIHRoZSBsYXN0ICJzaXplIiBoZWFwIGVsZW1lbnRzIHZhbHVlcy4KKyAgICAgICAgdmFy
IHZhbHVlcyA9IHRoaXMuX3ZhbHVlcy5zbGljZSgwLCB0aGlzLl9zaXplKTsKKyAgICAgICAgcmV0
dXJuIHZhbHVlcy5zb3J0KHRoaXMuX2NvbXBhcmUpLnNsaWNlKDAsIE1hdGgubWluKHNpemUsIHRo
aXMuX3NpemUpKTsKKyAgICB9Cit9CisKK3ZhciBBbGdvcml0aG0gPSB7CisgICAgY3JlYXRlTWlu
SGVhcDogZnVuY3Rpb24obWF4U2l6ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgSGVhcCht
YXhTaXplLCBmdW5jdGlvbihhLCBiKSB7IHJldHVybiBiIC0gYTsgfSk7CisgICAgfSwKKyAgICAK
KyAgICBjcmVhdGVNYXhIZWFwOiBmdW5jdGlvbihtYXhTaXplKSB7CisgICAgICAgIHJldHVybiBu
ZXcgSGVhcChtYXhTaXplLCBmdW5jdGlvbihhLCBiKSB7IHJldHVybiBhIC0gYjsgfSk7CisgICAg
fQorfQpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9Bbmltb21ldGVyL3Jlc291cmNlcy9leHRlbnNp
b25zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNvdXJj
ZXMvZXh0ZW5zaW9ucy5qcwkocmV2aXNpb24gMCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9t
ZXRlci9yZXNvdXJjZXMvZXh0ZW5zaW9ucy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMw
NiBAQAorZnVuY3Rpb24gUG9pbnQoeCwgeSkKK3sKKyAgICB0aGlzLnggPSB4OworICAgIHRoaXMu
eSA9IHk7Cit9CisKK1BvaW50LnBvaW50T25DaXJjbGUgPSBmdW5jdGlvbihhbmdsZSwgcmFkaXVz
KQoreworICAgIHJldHVybiBuZXcgUG9pbnQocmFkaXVzICogTWF0aC5jb3MoYW5nbGUpLCByYWRp
dXMgKiBNYXRoLnNpbihhbmdsZSkpOworfQorCitQb2ludC5wb2ludE9uRWxsaXBzZSA9IGZ1bmN0
aW9uKGFuZ2xlLCByYWRpdXNlcykKK3sKKyAgICByZXR1cm4gbmV3IFBvaW50KHJhZGl1c2VzLngg
KiBNYXRoLmNvcyhhbmdsZSksIHJhZGl1c2VzLnkgKiBNYXRoLnNpbihhbmdsZSkpOworfQorCitQ
b2ludC5wcm90b3R5cGUgPQoreworICAgIC8vIFVzZWQgd2hlbiB0aGUgcG9pbnQgb2JqZWN0IGlz
IHVzZWQgYXMgYSBzaXplIG9iamVjdC4KKyAgICBnZXQgd2lkdGgoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMueDsKKyAgICB9LAorICAgIAorICAgIC8vIFVzZWQgd2hlbiB0aGUgcG9pbnQg
b2JqZWN0IGlzIHVzZWQgYXMgYSBzaXplIG9iamVjdC4KKyAgICBnZXQgaGVpZ2h0KCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0aGlzLnk7CisgICAgfSwKKyAgICAKKyAgICAvLyBVc2VkIHdoZW4g
dGhlIHBvaW50IG9iamVjdCBpcyB1c2VkIGFzIGEgc2l6ZSBvYmplY3QuCisgICAgZ2V0IGNlbnRl
cigpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCAvIDIsIHRoaXMueSAv
IDIpOworICAgIH0sCisgICAgCisgICAgYWRkOiBmdW5jdGlvbihvdGhlcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54ICsgb3RoZXIueCwgdGhpcy55ICsgb3RoZXIueSk7
CisgICAgfSwKKyAgICAKKyAgICBzdWJ0cmFjdDogZnVuY3Rpb24ob3RoZXIpCisgICAgeworICAg
ICAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCAtIG90aGVyLngsIHRoaXMueSAtIG90aGVyLnkp
OworICAgIH0sCisgICAgCisgICAgbXVsdGlwbHk6IGZ1bmN0aW9uKG90aGVyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLnggKiBvdGhlci54LCB0aGlzLnkgKiBvdGhlci55
KTsKKyAgICB9LAorICAgIAorICAgIG1vdmU6IGZ1bmN0aW9uKGFuZ2xlLCB2ZWxvY2l0eSwgdGlt
ZURlbHRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuYWRkKFBvaW50LnBvaW50T25DaXJj
bGUoYW5nbGUsIHZlbG9jaXR5ICogKHRpbWVEZWx0YSAvIDEwMDApKSk7CisgICAgfQorfQorCitm
dW5jdGlvbiBJbnNldHModG9wLCByaWdodCwgYm90dG9tLCBsZWZ0KQoreworICAgIHRoaXMudG9w
ID0gdG9wOworICAgIHRoaXMucmlnaHQgPSByaWdodDsKKyAgICB0aGlzLmJvdHRvbSA9IGJvdHRv
bTsKKyAgICB0aGlzLmxlZnQgPSBsZWZ0OworfQorCitJbnNldHMucHJvdG90eXBlID0KK3sKKyAg
ICBnZXQgd2lkdGgoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmxlZnQgKyB0aGlzLnJpZ2h0Owor
ICAgIH0sCisKKyAgICBnZXQgaGVpZ2h0KCkgeworICAgICAgICByZXR1cm4gdGhpcy50b3AgKyB0
aGlzLmJvdHRvbTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIFNpbXBsZVByb21pc2UoKQoreworICAg
IHRoaXMuX2NoYWluZWRQcm9taXNlID0gbnVsbDsKKyAgICB0aGlzLl9jYWxsYmFjayA9IG51bGw7
Cit9CisKK1NpbXBsZVByb21pc2UucHJvdG90eXBlLnRoZW4gPSBmdW5jdGlvbiAoY2FsbGJhY2sp
Cit7CisgICAgaWYgKHRoaXMuX2NhbGxiYWNrKQorICAgICAgICB0aHJvdyAiU2ltcGxlUHJvbWlz
ZSBkb2Vzbid0IHN1cHBvcnQgbXVsdGlwbGUgY2FsbHMgdG8gdGhlbiI7CisgICAgICAgIAorICAg
IHRoaXMuX2NhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgdGhpcy5fY2hhaW5lZFByb21pc2UgPSBu
ZXcgU2ltcGxlUHJvbWlzZTsKKyAgICAKKyAgICBpZiAodGhpcy5fcmVzb2x2ZWQpCisgICAgICAg
IHRoaXMucmVzb2x2ZSh0aGlzLl9yZXNvbHZlZFZhbHVlKTsKKworICAgIHJldHVybiB0aGlzLl9j
aGFpbmVkUHJvbWlzZTsKK30KKworU2ltcGxlUHJvbWlzZS5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1
bmN0aW9uICh2YWx1ZSkKK3sKKyAgICBpZiAoIXRoaXMuX2NhbGxiYWNrKSB7CisgICAgICAgIHRo
aXMuX3Jlc29sdmVkID0gdHJ1ZTsKKyAgICAgICAgdGhpcy5fcmVzb2x2ZWRWYWx1ZSA9IHZhbHVl
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2NhbGxi
YWNrKHZhbHVlKTsKKyAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgU2ltcGxlUHJvbWlzZSkgewor
ICAgICAgICB2YXIgY2hhaW5lZFByb21pc2UgPSB0aGlzLl9jaGFpbmVkUHJvbWlzZTsKKyAgICAg
ICAgcmVzdWx0LnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkgeyBjaGFpbmVkUHJvbWlzZS5yZXNvbHZl
KHJlc3VsdCk7IH0pOworICAgIH0gZWxzZQorICAgICAgICB0aGlzLl9jaGFpbmVkUHJvbWlzZS5y
ZXNvbHZlKHJlc3VsdCk7Cit9CisKK2Z1bmN0aW9uIE9wdGlvbnModGVzdEludGVydmFsLCBmcmFt
ZVJhdGUpCit7CisgICAgdGhpcy50ZXN0SW50ZXJ2YWwgPSB0ZXN0SW50ZXJ2YWw7CisgICAgdGhp
cy5mcmFtZVJhdGUgPSBmcmFtZVJhdGU7Cit9CisKK2Z1bmN0aW9uIFByb2dyZXNzQmFyKGVsZW1l
bnQsIHJhbmdlcykKK3sKKyAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50OworICAgIHRoaXMucmFu
Z2VzID0gcmFuZ2VzOworICAgIHRoaXMuY3VycmVudFJhbmdlID0gMDsKK30KKworUHJvZ3Jlc3NC
YXIucHJvdG90eXBlID0KK3sKKyAgICBfcHJvZ3Jlc3NUb1BlcmNlbnQ6IGZ1bmN0aW9uKHByb2dy
ZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByb2dyZXNzICogKDEwMCAvIHRoaXMucmFuZ2Vz
KTsKKyAgICB9LAorICAgIAorICAgIGluY1JhbmdlOiBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICArK3RoaXMuY3VycmVudFJhbmdlOworICAgIH0sCisgICAgCisgICAgc2V0UG9zOiBmdW5jdGlv
bihwcm9ncmVzcykKKyAgICB7CisgICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS53aWR0aCA9IHRo
aXMuX3Byb2dyZXNzVG9QZXJjZW50KHRoaXMuY3VycmVudFJhbmdlICsgcHJvZ3Jlc3MpICsgIiUi
OworICAgIH0KK30KKworZnVuY3Rpb24gUmVjb3JkVGFibGUoZWxlbWVudCkKK3sKKyAgICB0aGlz
LmVsZW1lbnQgPSBlbGVtZW50OworICAgIHRoaXMuY2xlYXIoKTsKK30KKworUmVjb3JkVGFibGUu
cHJvdG90eXBlID0KK3sKKyAgICBjbGVhcjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhp
cy5lbGVtZW50LmlubmVySFRNTCA9ICIiOworICAgIH0sCisgICAgCisgICAgX3Nob3dUaXRsZXM6
IGZ1bmN0aW9uKHJvdywgcXVldWUsIHRpdGxlcywgbWVzc2FnZSkKKyAgICB7CisgICAgICAgIHRp
dGxlcy5mb3JFYWNoKGZ1bmN0aW9uICh0aXRsZSkgeworICAgICAgICAgICAgdmFyIHRoID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgidGgiKTsKKyAgICAgICAgICAgIHRoLnRleHRDb250ZW50ID0g
dGl0bGUudGV4dDsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZSAhPSAidW5kZWZpbmVk
IiAmJiBtZXNzYWdlLmxlbmd0aCkgeworICAgICAgICAgICAgICAgIHRoLmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJykpOworICAgICAgICAgICAgICAgIHRoLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdbJyArIG1lc3NhZ2UgKyddJykpOworICAgICAg
ICAgICAgICAgIG1lc3NhZ2UgPSAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgi
d2lkdGgiIGluIHRpdGxlKQorICAgICAgICAgICAgICAgIHRoLndpZHRoID0gdGl0bGUud2lkdGgg
KyAiJSI7CisgICAgICAgICAgICByb3cuYXBwZW5kQ2hpbGQodGgpOworICAgICAgICAgICAgcXVl
dWUucHVzaCh7ZWxlbWVudDogdGgsIHRpdGxlczogdGl0bGUuY2hpbGRyZW4gfSk7CisgICAgICAg
IH0pOworICAgIH0sCisgICAgCisgICAgX3Nob3dIZWFkZXI6IGZ1bmN0aW9uKHN1aXRlTmFtZSwg
dGl0bGVzLCBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgdmFyIHJvdyA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoInRyIik7CisKKyAgICAgICAgdmFyIHF1ZXVlID0gW107CisgICAgICAgIHRoaXMu
X3Nob3dUaXRsZXMocm93LCBxdWV1ZSwgdGl0bGVzLCBtZXNzYWdlKTsKKyAgICAgICAgdGhpcy5l
bGVtZW50LmFwcGVuZENoaWxkKHJvdyk7CisKKyAgICAgICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCkg
eworICAgICAgICAgICAgdmFyIHJvdyA9IG51bGw7CisgICAgICAgICAgICB2YXIgZW50cmllcyA9
IFtdOworCisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gcXVldWUubGVuZ3RoOyBp
IDwgbGVuOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBxdWV1ZS5zaGlmdCgp
OworCisgICAgICAgICAgICAgICAgaWYgKCFlbnRyeS50aXRsZXMubGVuZ3RoKSB7CisgICAgICAg
ICAgICAgICAgICAgIGVudHJpZXMucHVzaChlbnRyeS5lbGVtZW50KTsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYg
KCFyb3cpCisgICAgICAgICAgICAgICAgICAgIHZhciByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJ0ciIpOworCisgICAgICAgICAgICAgICAgdGhpcy5fc2hvd1RpdGxlcyhyb3csIHF1ZXVl
LCBlbnRyeS50aXRsZXMsICIiKTsKKyAgICAgICAgICAgICAgICBlbnRyeS5lbGVtZW50LmNvbFNw
YW4gPSBlbnRyeS50aXRsZXMubGVuZ3RoOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAocm93KSB7CisgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHJvdyk7
CisgICAgICAgICAgICAgICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uKGVudHJ5KSB7CisgICAg
ICAgICAgICAgICAgICAgICsrZW50cnkucm93U3BhbjsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisgICAgCisgICAgX3Nob3dFbXB0eTogZnVu
Y3Rpb24ocm93LCB0ZXN0TmFtZSkKKyAgICB7CisgICAgICAgIHZhciB0ZCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoInRkIik7CisgICAgICAgIHJvdy5hcHBlbmRDaGlsZCh0ZCk7CisgICAgfSwK
KyAgICAKKyAgICBfc2hvd1ZhbHVlOiBmdW5jdGlvbihyb3csIHRlc3ROYW1lLCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHZhciB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CisgICAg
ICAgIHRkLnRleHRDb250ZW50ID0gdmFsdWUudG9GaXhlZCgyKTsKKyAgICAgICAgcm93LmFwcGVu
ZENoaWxkKHRkKTsKKyAgICB9LAorICAgIAorICAgIF9zaG93U2FtcGxlczogZnVuY3Rpb24ocm93
LCB0ZXN0TmFtZSwgYXhlcywgc2FtcGxlcywgc2FtcGxpbmdUaW1lT2Zmc2V0KQorICAgIHsKKyAg
ICAgICAgdmFyIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKKyAgICAgICAgdmFy
IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBidXR0b24u
Y2xhc3NOYW1lID0gInNtYWxsLWJ1dHRvbiI7CisgICAgICAgICAgICAKKyAgICAgICAgYnV0dG9u
LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB3aW5k
b3cuc2hvd0dyYXBoKHRlc3ROYW1lLCBheGVzLCBzYW1wbGVzLCBzYW1wbGluZ1RpbWVPZmZzZXQp
OworICAgICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICBidXR0b24udGV4dENvbnRlbnQg
PSAiR3JhcGguLi4iOworICAgICAgICB0ZC5hcHBlbmRDaGlsZChidXR0b24pOworICAgICAgICBy
b3cuYXBwZW5kQ2hpbGQodGQpOworICAgIH0sCisgICAgCisgICAgX3Nob3dUZXN0OiBmdW5jdGlv
bih0ZXN0TmFtZSwgdGl0bGVzLCBzYW1wbGVyLCBmaW5hbFJlc3VsdHMpCisgICAgeworICAgICAg
ICB2YXIgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKKyAgICAgICAgdmFyIHRk
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKKyAgICAgICAgCisgICAgICAgIHRkLnRl
eHRDb250ZW50ID0gdGVzdE5hbWU7CisgICAgICAgIHJvdy5hcHBlbmRDaGlsZCh0ZCk7CisgICAg
ICAgIAorICAgICAgICB2YXIgYXhlcyA9IFtdOworICAgICAgICBzYW1wbGVyLmV4cGVyaW1lbnRz
LmZvckVhY2goZnVuY3Rpb24oZXhwZXJpbWVudCwgaW5kZXgpIHsKKyAgICAgICAgICAgIHRoaXMu
X3Nob3dWYWx1ZShyb3csIHRlc3ROYW1lLCBleHBlcmltZW50Lm1lYW4oKSk7CisgICAgICAgICAg
ICB0aGlzLl9zaG93VmFsdWUocm93LCB0ZXN0TmFtZSwgZXhwZXJpbWVudC5jb25jZXJuKEV4cGVy
aW1lbnQuZGVmYXVsdHMuQ09OQ0VSTikpOworICAgICAgICAgICAgdGhpcy5fc2hvd1ZhbHVlKHJv
dywgdGVzdE5hbWUsIGV4cGVyaW1lbnQuc3RhbmRhcmREZXZpYXRpb24oKSk7CisgICAgICAgICAg
ICB0aGlzLl9zaG93VmFsdWUocm93LCB0ZXN0TmFtZSwgZXhwZXJpbWVudC5wZXJjZW50YWdlKCkp
OworICAgICAgICAgICAgYXhlcy5wdXNoKHRpdGxlc1tpbmRleCArIDFdLnRleHQpOworICAgICAg
ICAgICAgCisgICAgICAgIH0sIHRoaXMpOworCisgICAgICAgIHRoaXMuX3Nob3dWYWx1ZShyb3cs
IHRlc3ROYW1lLCBzYW1wbGVyLmV4cGVyaW1lbnRzWzBdLnNjb3JlKEV4cGVyaW1lbnQuZGVmYXVs
dHMuQ09OQ0VSTikpOworCisgICAgICAgIGlmIChmaW5hbFJlc3VsdHMpCisgICAgICAgICAgICB0
aGlzLl9zaG93U2FtcGxlcyhyb3csIHRlc3ROYW1lLCBheGVzLCBzYW1wbGVyLnNhbXBsZXMsIHNh
bXBsZXIuc2FtcGxpbmdUaW1lT2Zmc2V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhp
cy5fc2hvd0VtcHR5KHJvdywgdGVzdE5hbWUpOworICAgICAgICAgICAgCisgICAgICAgIHRoaXMu
ZWxlbWVudC5hcHBlbmRDaGlsZChyb3cpOworICAgIH0sCisgICAgCisgICAgX3Nob3dTdWl0ZTog
ZnVuY3Rpb24oc3VpdGUsIHN1aXRlU2FtcGxlcnMpCisgICAgeworICAgICAgICB2YXIgc2NvcmVz
ID0gW107ICAgICAgICAKKyAgICAgICAgZm9yICh2YXIgdGVzdE5hbWUgaW4gc3VpdGVTYW1wbGVy
cykgeworICAgICAgICAgICAgdmFyIHRlc3QgPSB0ZXN0RnJvbU5hbWUoc3VpdGUsIHRlc3ROYW1l
KTsKKyAgICAgICAgICAgIHZhciBzYW1wbGVyID0gc3VpdGVTYW1wbGVyc1t0ZXN0TmFtZV07IAor
ICAgICAgICAgICAgdGhpcy5fc2hvd1Rlc3QodGVzdE5hbWUsIHN1aXRlLnRpdGxlcywgc2FtcGxl
ciwgdHJ1ZSk7CisgICAgICAgICAgICBzY29yZXMucHVzaChzYW1wbGVyLmV4cGVyaW1lbnRzWzBd
LnNjb3JlKEV4cGVyaW1lbnQuZGVmYXVsdHMuQ09OQ0VSTikpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBzY29yZXM7CisgICAgfSwKKyAgICAKKyAgICBzaG93UmVjb3JkOiBmdW5jdGlvbihz
dWl0ZSwgdGVzdCwgc2FtcGxlciwgbWVzc2FnZSkKKyAgICB7CisgICAgICAgIHRoaXMuY2xlYXIo
KTsgICAgICAgIAorICAgICAgICB0aGlzLl9zaG93SGVhZGVyKCIiLCBzdWl0ZS50aXRsZXMsIG1l
c3NhZ2UpOworICAgICAgICB0aGlzLl9zaG93VGVzdCh0ZXN0Lm5hbWUsIHN1aXRlLnRpdGxlcywg
c2FtcGxlciwgZmFsc2UpOyAgICAgICAgCisgICAgfSwKKyAgICAKKyAgICBzaG93SXRlcmF0aW9u
czogZnVuY3Rpb24oaXRlcmF0aW9uc1NhbXBsZXJzKQorICAgIHsKKyAgICAgICAgdGhpcy5jbGVh
cigpOworCisgICAgICAgIHZhciBzY29yZXMgPSBbXTsKKyAgICAgICAgdmFyIHRpdGxlcyA9IG51
bGw7CisgICAgICAgIGl0ZXJhdGlvbnNTYW1wbGVycy5mb3JFYWNoKGZ1bmN0aW9uKHN1aXRlc1Nh
bXBsZXJzKSB7CisgICAgICAgICAgICBmb3IgKHZhciBzdWl0ZU5hbWUgaW4gc3VpdGVzU2FtcGxl
cnMpIHsKKyAgICAgICAgICAgICAgICB2YXIgc3VpdGUgPSBzdWl0ZUZyb21OYW1lKHN1aXRlTmFt
ZSk7CisgICAgICAgICAgICAgICAgaWYgKHRpdGxlcyAhPSBzdWl0ZS50aXRsZXMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGl0bGVzID0gc3VpdGUudGl0bGVzOworICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9zaG93SGVhZGVyKHN1aXRlTmFtZSwgdGl0bGVzLCAiIik7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgdmFyIHN1aXRlU2NvcmVzID0gdGhpcy5fc2hvd1N1aXRl
KHN1aXRlLCBzdWl0ZXNTYW1wbGVyc1tzdWl0ZU5hbWVdKTsKKyAgICAgICAgICAgICAgICBzY29y
ZXMucHVzaC5hcHBseShzY29yZXMsIHN1aXRlU2NvcmVzKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSwgdGhpcyk7CisKKyAgICAgICAgcmV0dXJuIFN0YXRpc3RpY3MuZ2VvbWV0cmljTWVhbihz
Y29yZXMpOworICAgIH0KK30KSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQW5pbW9tZXRlci9yZXNv
dXJjZXMvc2FtcGxlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0FuaW1vbWV0
ZXIvcmVzb3VyY2VzL3NhbXBsZXIuanMJKHJldmlzaW9uIDApCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0FuaW1vbWV0ZXIvcmVzb3VyY2VzL3NhbXBsZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMjQgQEAKK3ZhciBTdGF0aXN0aWNzID0KK3sKKyAgICBzYW1wbGVNZWFuOiBmdW5jdGlvbihu
dW1iZXJPZlNhbXBsZXMsIHN1bSkKKyAgICB7CisgICAgICAgIGlmIChudW1iZXJPZlNhbXBsZXMg
PCAxKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBzdW0gLyBudW1iZXJP
ZlNhbXBsZXM7CisgICAgfSwKKworICAgIC8vIFdpdGggc3VtIGFuZCBzdW0gb2Ygc3F1YXJlcywg
d2UgY2FuIGNvbXB1dGUgdGhlIHNhbXBsZSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gTygxKS4KKyAg
ICAvLyBTZWUgaHR0cHM6Ly9ybml3YS5jb20vMjAxMi0xMS0xMC9zYW1wbGUtc3RhbmRhcmQtZGV2
aWF0aW9uLWluLXRlcm1zLW9mLXN1bS1hbmQtc3F1YXJlLXN1bS1vZi1zYW1wbGVzLworICAgIHVu
Ymlhc2VkU2FtcGxlU3RhbmRhcmREZXZpYXRpb246IGZ1bmN0aW9uKG51bWJlck9mU2FtcGxlcywg
c3VtLCBzcXVhcmVTdW0pCisgICAgeworICAgICAgICBpZiAobnVtYmVyT2ZTYW1wbGVzIDwgMikK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KChzcXVhcmVT
dW0gLSBzdW0gKiBzdW0gLyBudW1iZXJPZlNhbXBsZXMpIC8gKG51bWJlck9mU2FtcGxlcyAtIDEp
KTsKKyAgICB9LAorCisgICAgZ2VvbWV0cmljTWVhbjogZnVuY3Rpb24odmFsdWVzKQorICAgIHsK
KyAgICAgICAgaWYgKCF2YWx1ZXMubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHZhciByb290cyA9IHZhbHVlcy5tYXAoZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuICBNYXRo
LnBvdyh2YWx1ZSwgMSAvIHZhbHVlcy5sZW5ndGgpOyB9KQorICAgICAgICByZXR1cm4gcm9vdHMu
cmVkdWNlKGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJuIGEgKiBiOyB9KTsKKyAgICB9ICAgCit9CisK
K2Z1bmN0aW9uIEV4cGVyaW1lbnQoKQoreworICAgIHRoaXMuX2luaXQoKTsKKyAgICB0aGlzLl9t
YXhIZWFwID0gQWxnb3JpdGhtLmNyZWF0ZU1heEhlYXAoRXhwZXJpbWVudC5kZWZhdWx0cy5DT05D
RVJOX1NJWkUpOworfQorCitFeHBlcmltZW50LmRlZmF1bHRzID0KK3sKKyAgICBDT05DRVJOOiA1
LAorICAgIENPTkNFUk5fU0laRTogMTAwLAorfQorCitFeHBlcmltZW50LnByb3RvdHlwZSA9Cit7
CisgICAgX2luaXQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX3N1bSA9IDA7Cisg
ICAgICAgIHRoaXMuX3NxdWFyZVN1bSA9IDA7CisgICAgICAgIHRoaXMuX251bWJlck9mU2FtcGxl
cyA9IDA7CisgICAgfSwKKyAgICAKKyAgICAvLyBDYWxsZWQgYWZ0ZXIgYSB3YXJtLXVwIHBlcmlv
ZAorICAgIHN0YXJ0U2FtcGxpbmc6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBtZWFu
ID0gdGhpcy5tZWFuKCk7CisgICAgICAgIHRoaXMuX2luaXQoKTsKKyAgICAgICAgdGhpcy5fbWF4
SGVhcC5pbml0KCk7CisgICAgICAgIHRoaXMuc2FtcGxlKG1lYW4pOworICAgIH0sCisgICAgCisg
ICAgc2FtcGxlOiBmdW5jdGlvbih2YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMuX3N1bSArPSB2
YWx1ZTsKKyAgICAgICAgdGhpcy5fc3F1YXJlU3VtICs9IHZhbHVlICogdmFsdWU7CisgICAgICAg
IHRoaXMuX21heEhlYXAucHVzaCh2YWx1ZSk7CisgICAgICAgICsrdGhpcy5fbnVtYmVyT2ZTYW1w
bGVzOworICAgIH0sCisgICAgCisgICAgbWVhbjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFN0YXRpc3RpY3Muc2FtcGxlTWVhbih0aGlzLl9udW1iZXJPZlNhbXBsZXMsIHRoaXMu
X3N1bSk7CisgICAgfSwKKyAgICAKKyAgICBzdGFuZGFyZERldmlhdGlvbjogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFN0YXRpc3RpY3MudW5iaWFzZWRTYW1wbGVTdGFuZGFyZERl
dmlhdGlvbih0aGlzLl9udW1iZXJPZlNhbXBsZXMsIHRoaXMuX3N1bSwgdGhpcy5fc3F1YXJlU3Vt
KTsKKyAgICB9LAorICAgIAorICAgIHBlcmNlbnRhZ2U6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHZhciBtZWFuID0gdGhpcy5tZWFuKCk7CisgICAgICAgIHJldHVybiBtZWFuID8gdGhpcy5z
dGFuZGFyZERldmlhdGlvbigpICogMTAwIC8gbWVhbiA6IDA7CisgICAgfSwKKyAgICAKKyAgICBj
b25jZXJuOiBmdW5jdGlvbihwZXJjZW50YWdlKQorICAgIHsKKyAgICAgICAgdmFyIHNpemUgPSBN
YXRoLmNlaWwodGhpcy5fbnVtYmVyT2ZTYW1wbGVzICogcGVyY2VudGFnZSAvIDEwMCk7CisgICAg
ICAgIHZhciB2YWx1ZXMgPSB0aGlzLl9tYXhIZWFwLnZhbHVlcyhzaXplKTsKKyAgICAgICAgcmV0
dXJuIHZhbHVlcy5sZW5ndGggPyB2YWx1ZXMucmVkdWNlKGZ1bmN0aW9uKGEsIGIpIHsgcmV0dXJu
IGEgKyBiOyB9KSAvIHZhbHVlcy5sZW5ndGggOiAwOworICAgIH0sCisgICAgCisgICAgc2NvcmU6
IGZ1bmN0aW9uKHBlcmNlbnRhZ2UpCisgICAgeworICAgICAgICByZXR1cm4gU3RhdGlzdGljcy5n
ZW9tZXRyaWNNZWFuKFt0aGlzLm1lYW4oKSwgTWF0aC5tYXgodGhpcy5jb25jZXJuKHBlcmNlbnRh
Z2UpLCAxKV0pOworICAgIH0KK30KKworZnVuY3Rpb24gU2FtcGxlcihjb3VudCkKK3sKKyAgICB0
aGlzLmV4cGVyaW1lbnRzID0gW107CisgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgIHRoaXMu
ZXhwZXJpbWVudHMucHVzaChuZXcgRXhwZXJpbWVudCgpKTsKKyAgICB0aGlzLnNhbXBsZXMgPSBb
XTsKKyAgICB0aGlzLnNhbXBsaW5nVGltZU9mZnNldCA9IDA7Cit9CisKK1NhbXBsZXIucHJvdG90
eXBlID0KK3sKKyAgICBzdGFydFNhbXBsaW5nOiBmdW5jdGlvbih0aW1lT2Zmc2V0KQorICAgIHsK
KyAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuZXhwZXJpbWVudHMubGVu
Z3RoOyArK2luZGV4KQorICAgICAgICAgICAgdGhpcy5leHBlcmltZW50c1tpbmRleF0uc3RhcnRT
YW1wbGluZygpOworICAgICAgICAgICAgCisgICAgICAgIHRoaXMuc2FtcGxpbmdUaW1lT2Zmc2V0
ID0gdGltZU9mZnNldCAvIDEwMDA7CisgICAgfSwKKyAgICAKKyAgICBzYW1wbGU6IGZ1bmN0aW9u
KHRpbWVPZmZzZXQsIHZhbHVlcykKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoIDwg
dGhpcy5leHBlcmltZW50cy5sZW5ndGgpCisgICAgICAgICAgICB0aHJvdyAiTm90IGVub3VnaCBz
YW1wbGUgcG9pbnRzIjsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGZvciAodmFyIGlu
ZGV4ID0gMDsgaW5kZXggPCB0aGlzLmV4cGVyaW1lbnRzLmxlbmd0aDsgKytpbmRleCkKKyAgICAg
ICAgICAgIHRoaXMuZXhwZXJpbWVudHNbaW5kZXhdLnNhbXBsZSh2YWx1ZXNbaW5kZXhdKTsKKyAg
ICAgICAgICAgIAorICAgICAgICB0aGlzLnNhbXBsZXMucHVzaCh7IHRpbWVPZmZzZXQ6IHRpbWVP
ZmZzZXQgLyAxMDAwLCB2YWx1ZXM6IHZhbHVlcyB9KTsKKyAgICB9Cit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>