<?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>71413</bug_id>
          
          <creation_ts>2011-11-02 15:56:00 -0700</creation_ts>
          <short_desc>Check parameters to biquad filters</short_desc>
          <delta_ts>2012-02-02 20:09:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Audio</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>76659</dependson>
          <blocked>71391</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Raymond Toy">rtoy</reporter>
          <assigned_to name="Raymond Toy">rtoy</assigned_to>
          <cc>crogers</cc>
    
    <cc>dglazkov</cc>
    
    <cc>kbr</cc>
    
    <cc>rtoy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>494997</commentid>
    <comment_count>0</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-11-02 15:56:00 -0700</bug_when>
    <thetext>The parameters to the biquad filters should be checked more carefully.  In particular, if the cutoff frequency becomes 0 or if the Q factor becomes zero, the filter can become unstable.  This can cause audio output to stop.  We should also check if the frequency exceeds the Nyquist frequency and clip it to that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497338</commentid>
    <comment_count>1</comment_count>
      <attachid>113901</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-11-07 11:38:31 -0800</bug_when>
    <thetext>Created attachment 113901
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497341</commentid>
    <comment_count>2</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-11-07 11:44:04 -0800</bug_when>
    <thetext>Check that the parameters to the biquads don&apos;t cause invalid biquad settings.  The parameters are clipped to the limits.  If the limit values cause problems, the limit of the z-transform is used to determine the biquad coefficients.  Not all problems can be handled consistently though because the z-transform is not continuous in those cases.  We choose some possible limits.

The best way to see the effects is to run the mag-phase demo &lt;http://www.corp.google.com/~rtoy/mag-phase.html&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>537551</commentid>
    <comment_count>3</comment_count>
      <attachid>122861</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-17 18:46:48 -0800</bug_when>
    <thetext>Created attachment 122861
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538084</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-18 12:46:00 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Check that the parameters to the biquads don&apos;t cause invalid biquad settings.  The parameters are clipped to the limits.  If the limit values cause problems, the limit of the z-transform is used to determine the biquad coefficients.  Not all problems can be handled consistently though because the z-transform is not continuous in those cases.  We choose some possible limits.
&gt; 
&gt; The best way to see the effects is to run the mag-phase demo &lt;http://www.corp.google.com/~rtoy/mag-phase.html&gt;.

Nice demo!  We need to host this somewhere where non-Google people can access.  One feature request I have is that the frequency axis be on a log-scale, with marks at 20Hz, 40, 80, 160, ...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538104</commentid>
    <comment_count>5</comment_count>
      <attachid>122861</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-18 13:26:22 -0800</bug_when>
    <thetext>Comment on attachment 122861
Patch

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

Tests are looking good.  I think that later we&apos;ll want to add some more which generate actual .wav files we can listen to -- as a different and complementary testing approach.  But this should hold us for a long time...

&gt; Source/WebCore/platform/audio/Biquad.cpp:197
&gt; +    if (cutoff == 1.0) {

nit: 1.0 -&gt; 1

&gt; Source/WebCore/platform/audio/Biquad.cpp:198
&gt; +      // When cutoff is 1, the z-transform is 1.

nit: indentation here is 2 but should be 4 - please correct here and other places

&gt; Source/WebCore/platform/audio/Biquad.cpp:199
&gt; +      m_b0 = 1.0;

nit: 1.0 -&gt; 1 please correct here and other similar places

&gt; Source/WebCore/platform/audio/Biquad.cpp:292
&gt; +        setNormalizedCoefficients(A*A, 0.0, 0.0,

nit: A*A -&gt; A * A , 0.0 -&gt; 0, etc.

&gt; Source/WebCore/platform/audio/Biquad.cpp:369
&gt; +    if ((frequency &gt; 0) &amp;&amp; (frequency &lt; 1)) {

nit: extra layer of parenthesis unnecessary - please correct here and in similar places

&gt; Source/WebCore/platform/audio/Biquad.cpp:406
&gt; +    if ((frequency &gt; 0) &amp;&amp; (frequency &lt; 1)) {

nit: extra layer of parenthesis

&gt; LayoutTests/webaudio/biquad-allpass.html:31
&gt; +    var maxAllowedError = 4.0e-8;

Please don&apos;t define separate threshold values in each .html file.  Pick one single value for all the tests and manage it in the privacy of the .js file

Otherwise, it&apos;s going to be a maintenance nightmare to have to manage the eight (or so) different .html thresholds as separate values when adjusting for different ports, etc.

&gt; LayoutTests/webaudio/biquad-test-expected.txt:6
&gt; +FAIL Lowpass filter response is incorrect.  Max err = 0.8619335505499499

Test is FAIL?

Did you intend to include this file &quot;biquad-test-expected.txt&quot; or is it something old which should be removed?

&gt; LayoutTests/webaudio/resources/biquad-testing.js:12
&gt; +// essentially zero.

I understand what you mean, but can you re-word a little with some more detail, explaining that this value was chosen such that the &quot;tail-time&quot; of each filtered impulse is
effectively contained within this time?  You might need to explain that we&apos;re rendering end-end several different impulse responses of a few test-cases, and
want to have &quot;enough&quot; space between them.

&gt; LayoutTests/webaudio/resources/biquad-testing.js:17
&gt; +var maxFilters = 5;

It seems like we should do a sanity check (down below) to make sure that the numbers of requested filters fits within this range.

&gt; LayoutTests/webaudio/resources/biquad-testing.js:26
&gt; +// H(z) = (b0 + b1/z + b2/z^2)/(1 + a1/z+a2/z^2)

nit: spacing

&gt; LayoutTests/webaudio/resources/biquad-testing.js:27
&gt; +

Please add a comment with URL for the reference *where* we&apos;re getting all the equations for the different filter types.

I think it&apos;s this link:
http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt

&gt; LayoutTests/webaudio/resources/biquad-testing.js:396
&gt; +function createTestAndRun(context, filterType, filterParameter, threshold) {

&quot;filterParameter&quot; -&gt; &quot;filterParameters&quot;  (with an &apos;s&apos;) since this is a list

Please change here and everywhere else in the file

&gt; LayoutTests/webaudio/resources/biquad-testing.js:450
&gt; +        // Accumulate this filtered data into the final output.

nit: can you say &quot;into the final output&quot; -&gt; &quot;into the final output at the desired offset&quot;

&gt; LayoutTests/webaudio/resources/biquad-testing.js:460
&gt; +        renderedData = renderedBuffer.getChannelData(0);

Is there anyway you can run through the renderedData and check for NAN and INF as an additional test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538171</commentid>
    <comment_count>6</comment_count>
      <attachid>122861</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-18 14:28:46 -0800</bug_when>
    <thetext>Comment on attachment 122861
Patch

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

&gt;&gt; LayoutTests/webaudio/resources/biquad-testing.js:27
&gt;&gt; +
&gt; 
&gt; Please add a comment with URL for the reference *where* we&apos;re getting all the equations for the different filter types.
&gt; 
&gt; I think it&apos;s this link:
&gt; http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt

Can you provide the reference for your book?  Recall that not all of the filters are from the audio eq cookbook.  (I have a patch for that as well, but it&apos;s out of date and we never decided on exactly how to roll out that change.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538289</commentid>
    <comment_count>7</comment_count>
      <attachid>123028</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-18 15:54:58 -0800</bug_when>
    <thetext>Created attachment 123028
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538297</commentid>
    <comment_count>8</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-18 16:06:22 -0800</bug_when>
    <thetext>All comments should be addressed now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538338</commentid>
    <comment_count>9</comment_count>
      <attachid>123028</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-18 17:09:24 -0800</bug_when>
    <thetext>Comment on attachment 123028
Patch

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

Ray, thanks for adding the NaN and INF checks.  Just a couple of nits.

&gt; Source/WebCore/platform/audio/Biquad.cpp:240
&gt; +      // The z-transform is 0.

nit: indentation is off - please fix here and verify whole patch

&gt; LayoutTests/webaudio/resources/biquad-testing.js:56
&gt; +        var d = Math.sqrt((4 - Math.sqrt(16 - 16 / g / g)) / 2);

16 / g / g ?

This is confusing when comparing with implementation which is 16 / (g*g)

&gt; LayoutTests/webaudio/resources/biquad-testing.js:59
&gt; +        var beta = 1/2 * (1 - sn) / (1 + sn);

Confusing when comparing equations to C++ versions -- here we use 1/2, but use 0.5* in the C++ code -- can&apos;t we make the JS consistent (as much as possible) for people&apos;s sanity when trying to track down differences

&gt; LayoutTests/webaudio/resources/biquad-testing.js:222
&gt; +        var Am1 = A - 1;

Can we have consistent spacing.  For example, above on line 187 there&apos;s a space in almost identical code

&gt; LayoutTests/webaudio/resources/biquad-testing.js:328
&gt; +            b1 = -2*k;

nit: spacing

&gt; LayoutTests/webaudio/resources/biquad-testing.js:424
&gt; +    

nit: extra blank line

&gt; LayoutTests/webaudio/resources/biquad-testing.js:504
&gt; +

nit: extra blank line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538372</commentid>
    <comment_count>10</comment_count>
      <attachid>123028</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-18 17:59:21 -0800</bug_when>
    <thetext>Comment on attachment 123028
Patch

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

New failing tests:
webaudio/biquad-peaking.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538421</commentid>
    <comment_count>11</comment_count>
      <attachid>123059</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-18 20:14:18 -0800</bug_when>
    <thetext>Created attachment 123059
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>538422</commentid>
    <comment_count>12</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-18 20:15:52 -0800</bug_when>
    <thetext>Fixed the comments for the previous patch and also fixed a failure of the tests on Linux (threshold was a little bit too small).   Tests on windows fail because of an issue with noteOn.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540603</commentid>
    <comment_count>13</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-23 09:23:01 -0800</bug_when>
    <thetext>Wait for bug 76659 to land before landing this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547225</commentid>
    <comment_count>14</comment_count>
      <attachid>124977</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-01 11:19:04 -0800</bug_when>
    <thetext>Created attachment 124977
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547315</commentid>
    <comment_count>15</comment_count>
      <attachid>124977</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-01 13:14:26 -0800</bug_when>
    <thetext>Comment on attachment 124977
Patch

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

Looks good overall - just a couple of final nits.

&gt; Source/WebCore/platform/audio/Biquad.cpp:204
&gt; +      

nit: extra blank line

&gt; Source/WebCore/platform/audio/Biquad.cpp:247
&gt; +        // Compute biquad coefficients for highpass filter

nit: period at end of sentence

&gt; LayoutTests/webaudio/resources/biquad-testing.js:184
&gt; +        var alpha = 1 / 2 * Math.sin(w0) * Math.sqrt((A + 1 / A) * (1 / S - 1)+2);

nit: need spaces   &quot;)+2&quot; -&gt; &quot;) + 2&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547328</commentid>
    <comment_count>16</comment_count>
      <attachid>125004</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-01 13:31:18 -0800</bug_when>
    <thetext>Created attachment 125004
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547331</commentid>
    <comment_count>17</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-02-01 13:31:55 -0800</bug_when>
    <thetext>Fixed the two nits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547338</commentid>
    <comment_count>18</comment_count>
      <attachid>125004</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-01 13:45:29 -0800</bug_when>
    <thetext>Comment on attachment 125004
Patch

Rejecting attachment 125004 from review queue.

crogers@google.com does not have reviewer permissions according to http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/committers.py.

- If you do not have reviewer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have reviewer rights please correct the error in Tools/Scripts/webkitpy/common/config/committers.py by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your reviewer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547362</commentid>
    <comment_count>19</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-01 14:16:11 -0800</bug_when>
    <thetext>Looks good.

Sorry, I&apos;m not a reviewer yet.  Ken could you please have a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548298</commentid>
    <comment_count>20</comment_count>
      <attachid>125004</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2012-02-02 17:53:14 -0800</bug_when>
    <thetext>Comment on attachment 125004
Patch

Nice tests. rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548389</commentid>
    <comment_count>21</comment_count>
      <attachid>125004</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-02 20:09:07 -0800</bug_when>
    <thetext>Comment on attachment 125004
Patch

Clearing flags on attachment: 125004

Committed r106621: &lt;http://trac.webkit.org/changeset/106621&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548390</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-02 20:09:14 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113901</attachid>
            <date>2011-11-07 11:38:31 -0800</date>
            <delta_ts>2012-01-17 18:46:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71413-20111107113830.patch</filename>
            <type>text/plain</type>
            <size>15779</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTkzOTkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2ZDEyMTUyMGUzNWUyODdi
ZDBhNTdiYmNmNjA5ZDA0M2EwYWM1ZTVjLi4yYzlhYmQxNjhiMDZhZmYzYjI3MTI1YTJkYmMwNTM3
YjJkMGJkN2I2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMTEtMDcgIFJheW1v
bmQgVG95ICA8cnRveUBnb29nbGUuY29tPgorCisgICAgICAgIENoZWNrIHBhcmFtZXRlcnMgdG8g
YmlxdWFkIGZpbHRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcxNDEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9C
aXF1YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkOjpzZXRMb3dwYXNzUGFyYW1zKToK
KyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6c2V0SGlnaHBhc3NQYXJhbXMpOgorICAgICAgICAo
V2ViQ29yZTo6QmlxdWFkOjpzZXRMb3dTaGVsZlBhcmFtcyk6CisgICAgICAgIChXZWJDb3JlOjpC
aXF1YWQ6OnNldEhpZ2hTaGVsZlBhcmFtcyk6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWQ6OnNl
dFBlYWtpbmdQYXJhbXMpOgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkOjpzZXRBbGxwYXNzUGFy
YW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6c2V0Tm90Y2hQYXJhbXMpOgorICAgICAg
ICAoV2ViQ29yZTo6QmlxdWFkOjpzZXRCYW5kcGFzc1BhcmFtcyk6CisgICAgICAgIENoZWNrIGZv
ciBpbnZhbGlkIHBhcmFtZXRlcnMgYW5kIGNsaXAgdGhlbSB0byBzb21ldGhpbmcgc2Vuc2libGUu
CisgICAgICAgIEFsc28gY2hlY2sgZm9yIHRoZSBsaW1pdGluZyBjYXNlcyBhbmQgdHJ5IHRvIHVz
ZSB0aGUgbGltaXRpbmcgZm9ybQorICAgICAgICBvZiB0aGUgei10cmFuc2Zvcm0gZm9yIHRoZSBi
aXF1YWQuICBTb21lIGlzc3VlcyBjYW5ub3QgYmUKKyAgICAgICAgY29uc2lzdGVudGx5IGhhbmRs
ZWQgYmVjYXVzZSB0aGUgei10cmFuc2Zvcm0gaXMgbm90IGNvbnRpbnVvdXMgYXMKKyAgICAgICAg
dGhlIHBhcmFtZXRlcnMgYXBwcm9hY2ggdGhlIGxpbWl0LgorCiAyMDExLTExLTA2ICBOb2VsIEdv
cmRvbiAgPG5vZWwuZ29yZG9uQGdtYWlsLmNvbT4KIAogICAgICAgICBGaXggc29tZSBzdHlsZSBp
c3N1ZXMgaW4gSW1hZ2VCdWZmZXIuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vQmlxdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVh
ZC5jcHAKaW5kZXggOGRjMWY0ZmI2OWU3MTEyYmJiMTYwZDk3ZDEzM2MwMGVjODkwYTYyOS4uN2Yy
OWVmMzhlNDVlNDAzMjkzZWFmOTlkMDRmZDFkYzY1MWY2ODc2NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwCkBAIC0xODgsNDMgKzE4OCw4NSBAQCB2b2lkIEJpcXVh
ZDo6cmVzZXQoKQogdm9pZCBCaXF1YWQ6OnNldExvd3Bhc3NQYXJhbXMoZG91YmxlIGN1dG9mZiwg
ZG91YmxlIHJlc29uYW5jZSkKIHsKICAgICByZXNvbmFuY2UgPSBzdGQ6Om1heCgwLjAsIHJlc29u
YW5jZSk7IC8vIGNhbid0IGdvIG5lZ2F0aXZlCi0KKyAgICAvLyBMaW1pdCBjdXRvZmYgdG8gMCB0
byAxLgorICAgIGN1dG9mZiA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oY3V0b2ZmLCAxLjApKTsK
KyAgICAKICAgICBkb3VibGUgZyA9IHBvdygxMC4wLCAwLjA1ICogcmVzb25hbmNlKTsKICAgICBk
b3VibGUgZCA9IHNxcnQoKDQgLSBzcXJ0KDE2IC0gMTYgLyAoZyAqIGcpKSkgLyAyKTsKIAotICAg
IC8vIENvbXB1dGUgYmlxdWFkIGNvZWZmaWNpZW50cyBmb3IgbG9wYXNzIGZpbHRlcgotICAgIGRv
dWJsZSB0aGV0YSA9IHBpRG91YmxlICogY3V0b2ZmOwotICAgIGRvdWJsZSBzbiA9IDAuNSAqIGQg
KiBzaW4odGhldGEpOwotICAgIGRvdWJsZSBiZXRhID0gMC41ICogKDEgLSBzbikgLyAoMSArIHNu
KTsKLSAgICBkb3VibGUgZ2FtbWEgPSAoMC41ICsgYmV0YSkgKiBjb3ModGhldGEpOwotICAgIGRv
dWJsZSBhbHBoYSA9IDAuMjUgKiAoMC41ICsgYmV0YSAtIGdhbW1hKTsKLQotICAgIG1fYjAgPSAy
ICogYWxwaGE7Ci0gICAgbV9iMSA9IDIgKiAyICogYWxwaGE7Ci0gICAgbV9iMiA9IDIgKiBhbHBo
YTsKLSAgICBtX2ExID0gMiAqIC1nYW1tYTsKLSAgICBtX2EyID0gMiAqIGJldGE7CisgICAgaWYg
KGN1dG9mZiA9PSAxLjApIHsKKyAgICAgIC8vIFdoZW4gY3V0b2ZmIGlzIDEsIHRoZSB6LXRyYW5z
Zm9ybSBpcyAxLgorICAgICAgbV9iMCA9IDEuMDsKKyAgICAgIG1fYjEgPSAwOworICAgICAgbV9i
MiA9IDA7CisgICAgICBtX2ExID0gMDsKKyAgICAgIG1fYTIgPSAwOworICAgICAgCisgICAgfSBl
bHNlIGlmIChjdXRvZmYgPiAwKSB7CisgICAgICAvLyBDb21wdXRlIGJpcXVhZCBjb2VmZmljaWVu
dHMgZm9yIGxvcGFzcyBmaWx0ZXIKKyAgICAgIGRvdWJsZSB0aGV0YSA9IHBpRG91YmxlICogY3V0
b2ZmOworICAgICAgZG91YmxlIHNuID0gMC41ICogZCAqIHNpbih0aGV0YSk7CisgICAgICBkb3Vi
bGUgYmV0YSA9IDAuNSAqICgxIC0gc24pIC8gKDEgKyBzbik7CisgICAgICBkb3VibGUgZ2FtbWEg
PSAoMC41ICsgYmV0YSkgKiBjb3ModGhldGEpOworICAgICAgZG91YmxlIGFscGhhID0gMC4yNSAq
ICgwLjUgKyBiZXRhIC0gZ2FtbWEpOworCisgICAgICBtX2IwID0gMiAqIGFscGhhOworICAgICAg
bV9iMSA9IDIgKiAyICogYWxwaGE7CisgICAgICBtX2IyID0gMiAqIGFscGhhOworICAgICAgbV9h
MSA9IDIgKiAtZ2FtbWE7CisgICAgICBtX2EyID0gMiAqIGJldGE7CisgICAgfSBlbHNlIHsKKyAg
ICAgIC8vIFdoZW4gY3V0b2ZmIGlzIHplcm8sIG5vdGhpbmcgZ2V0cyB0aHJvdWdoIHRoZSBmaWx0
ZXIsIHNvIHNldAorICAgICAgLy8gY29lZmZpY2llbnRzIHVwIGNvcnJlY3RseS4KKyAgICAgIG1f
YjAgPSAwOworICAgICAgbV9iMSA9IDA7CisgICAgICBtX2IyID0gMDsKKyAgICAgIG1fYTEgPSAw
OworICAgICAgbV9hMiA9IDA7CisgICAgfQogfQogCiB2b2lkIEJpcXVhZDo6c2V0SGlnaHBhc3NQ
YXJhbXMoZG91YmxlIGN1dG9mZiwgZG91YmxlIHJlc29uYW5jZSkKIHsKICAgICByZXNvbmFuY2Ug
PSBzdGQ6Om1heCgwLjAsIHJlc29uYW5jZSk7IC8vIGNhbid0IGdvIG5lZ2F0aXZlCiAKKyAgICAv
LyBMaW1pdCBjdXRvZmYgdG8gMCB0byAxLgorICAgIGN1dG9mZiA9IHN0ZDo6bWF4KDAuMCwgc3Rk
OjptaW4oY3V0b2ZmLCAxLjApKTsKKwogICAgIGRvdWJsZSBnID0gcG93KDEwLjAsIDAuMDUgKiBy
ZXNvbmFuY2UpOwogICAgIGRvdWJsZSBkID0gc3FydCgoNCAtIHNxcnQoMTYgLSAxNiAvIChnICog
ZykpKSAvIDIpOwogCi0gICAgLy8gQ29tcHV0ZSBiaXF1YWQgY29lZmZpY2llbnRzIGZvciBoaWdo
cGFzcyBmaWx0ZXIKLSAgICBkb3VibGUgdGhldGEgPSBwaURvdWJsZSAqIGN1dG9mZjsKLSAgICBk
b3VibGUgc24gPSAwLjUgKiBkICogc2luKHRoZXRhKTsKLSAgICBkb3VibGUgYmV0YSA9IDAuNSAq
ICgxIC0gc24pIC8gKDEgKyBzbik7Ci0gICAgZG91YmxlIGdhbW1hID0gKDAuNSArIGJldGEpICog
Y29zKHRoZXRhKTsKLSAgICBkb3VibGUgYWxwaGEgPSAwLjI1ICogKDAuNSArIGJldGEgKyBnYW1t
YSk7Ci0KLSAgICBtX2IwID0gMiAqIGFscGhhOwotICAgIG1fYjEgPSAyICogLTIgKiBhbHBoYTsK
LSAgICBtX2IyID0gMiAqIGFscGhhOwotICAgIG1fYTEgPSAyICogLWdhbW1hOwotICAgIG1fYTIg
PSAyICogYmV0YTsKKyAgICBpZiAoY3V0b2ZmID09IDEuMCkgeworICAgICAgLy8gVGhlIHotdHJh
bnNmb3JtIGlzIDAuCisgICAgICBtX2IwID0gMDsKKyAgICAgIG1fYjEgPSAwOworICAgICAgbV9i
MiA9IDA7CisgICAgICBtX2ExID0gMDsKKyAgICAgIG1fYTIgPSAwOworICAgIH0gZWxzZSBpZiAo
Y3V0b2ZmID4gMCkgeworICAgICAgLy8gQ29tcHV0ZSBiaXF1YWQgY29lZmZpY2llbnRzIGZvciBo
aWdocGFzcyBmaWx0ZXIKKyAgICAgIGRvdWJsZSB0aGV0YSA9IHBpRG91YmxlICogY3V0b2ZmOwor
ICAgICAgZG91YmxlIHNuID0gMC41ICogZCAqIHNpbih0aGV0YSk7CisgICAgICBkb3VibGUgYmV0
YSA9IDAuNSAqICgxIC0gc24pIC8gKDEgKyBzbik7CisgICAgICBkb3VibGUgZ2FtbWEgPSAoMC41
ICsgYmV0YSkgKiBjb3ModGhldGEpOworICAgICAgZG91YmxlIGFscGhhID0gMC4yNSAqICgwLjUg
KyBiZXRhICsgZ2FtbWEpOworCisgICAgICBtX2IwID0gMiAqIGFscGhhOworICAgICAgbV9iMSA9
IDIgKiAtMiAqIGFscGhhOworICAgICAgbV9iMiA9IDIgKiBhbHBoYTsKKyAgICAgIG1fYTEgPSAy
ICogLWdhbW1hOworICAgICAgbV9hMiA9IDIgKiBiZXRhOworICAgIH0gZWxzZSB7CisgICAgICAv
LyBXaGVuIGN1dG9mZiBpcyB6ZXJvLCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYmVjYXVzZSB0aGUg
YWJvdmUKKyAgICAgIC8vIGdpdmVzIGEgcXVhZHJhdGljIGRpdmlkZWQgYnkgdGhlIHNhbWUgcXVh
ZHJhdGljLCB3aXRoIHBvbGVzCisgICAgICAvLyBhbmQgemVyb3Mgb24gdGhlIHVuaXQgY2lyY2xl
IGluIHRoZSBzYW1lIHBsYWNlLiBXaGVuIGN1dG9mZgorICAgICAgLy8gaXMgemVybywgdGhlIHot
dHJhbnNmb3JtIGlzIDEuCisgICAgICBtX2IwID0gMTsKKyAgICAgIG1fYjEgPSAwOworICAgICAg
bV9iMiA9IDA7CisgICAgICBtX2ExID0gMDsKKyAgICAgIG1fYTIgPSAwOworICAgIH0KIH0KIAog
dm9pZCBCaXF1YWQ6OnNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoZG91YmxlIGIwLCBkb3VibGUg
YjEsIGRvdWJsZSBiMiwgZG91YmxlIGEwLCBkb3VibGUgYTEsIGRvdWJsZSBhMikKQEAgLTI0MCwx
MTkgKzI4MiwyMzIgQEAgdm9pZCBCaXF1YWQ6OnNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoZG91
YmxlIGIwLCBkb3VibGUgYjEsIGRvdWJsZSBiMiwgZG91YmxlIGEKIAogdm9pZCBCaXF1YWQ6OnNl
dExvd1NoZWxmUGFyYW1zKGRvdWJsZSBmcmVxdWVuY3ksIGRvdWJsZSBkYkdhaW4pCiB7Ci0gICAg
ZG91YmxlIHcwID0gcGlEb3VibGUgKiBmcmVxdWVuY3k7Ci0KKyAgICAvLyBDbGlwIGZyZXF1ZW5j
aWVzIHRvIGJldHdlZW4gMCBhbmQgMSwgaW5jbHVzaXZlLgorICAgIGZyZXF1ZW5jeSA9IHN0ZDo6
bWF4KDAuMCwgc3RkOjptaW4oZnJlcXVlbmN5LCAxLjApKTsKKyAgICAKICAgICBkb3VibGUgQSA9
IHBvdygxMC4wLCBkYkdhaW4gLyA0MCk7Ci0gICAgZG91YmxlIFMgPSAxOyAvLyBmaWx0ZXIgc2xv
cGUgKDEgaXMgbWF4IHZhbHVlKQotICAgIGRvdWJsZSBhbHBoYSA9IDAuNSAqIHNpbih3MCkgKiBz
cXJ0KChBICsgMSAvIEEpICogKDEgLyBTIC0gMSkgKyAyKTsKIAotICAgIGRvdWJsZSBrID0gY29z
KHcwKTsKLSAgICBkb3VibGUgazIgPSAyICogc3FydChBKSAqIGFscGhhOworICAgIGlmIChmcmVx
dWVuY3kgPT0gMSkgeworICAgICAgICAvLyBUaGUgei10cmFuc2Zvcm0gaXMgYSBjb25zdGFudCBn
YWluLgorICAgICAgICBzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKEEqQSwgMC4wLCAwLjAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wLCAwLjAsIDAuMCk7CisgICAgfSBl
bHNlIGlmIChmcmVxdWVuY3kgPiAwKSB7CisgICAgICAgIGRvdWJsZSB3MCA9IHBpRG91YmxlICog
ZnJlcXVlbmN5OwogCi0gICAgZG91YmxlIGFQbHVzT25lID0gQSArIDE7Ci0gICAgZG91YmxlIGFN
aW51c09uZSA9IEEgLSAxOworICAgICAgICBkb3VibGUgUyA9IDE7IC8vIGZpbHRlciBzbG9wZSAo
MSBpcyBtYXggdmFsdWUpCisgICAgICAgIGRvdWJsZSBhbHBoYSA9IDAuNSAqIHNpbih3MCkgKiBz
cXJ0KChBICsgMSAvIEEpICogKDEgLyBTIC0gMSkgKyAyKTsKKworICAgICAgICBkb3VibGUgayA9
IGNvcyh3MCk7CisgICAgICAgIGRvdWJsZSBrMiA9IDIgKiBzcXJ0KEEpICogYWxwaGE7CisKKyAg
ICAgICAgZG91YmxlIGFQbHVzT25lID0gQSArIDE7CisgICAgICAgIGRvdWJsZSBhTWludXNPbmUg
PSBBIC0gMTsKICAgICAKLSAgICBkb3VibGUgYjAgPSBBICogKGFQbHVzT25lIC0gYU1pbnVzT25l
ICogayArIGsyKTsKLSAgICBkb3VibGUgYjEgPSAyICogQSAqIChhTWludXNPbmUgLSBhUGx1c09u
ZSAqIGspOwotICAgIGRvdWJsZSBiMiA9IEEgKiAoYVBsdXNPbmUgLSBhTWludXNPbmUgKiBrIC0g
azIpOwotICAgIGRvdWJsZSBhMCA9IGFQbHVzT25lICsgYU1pbnVzT25lICogayArIGsyOwotICAg
IGRvdWJsZSBhMSA9IC0yICogKGFNaW51c09uZSArIGFQbHVzT25lICogayk7Ci0gICAgZG91Ymxl
IGEyID0gYVBsdXNPbmUgKyBhTWludXNPbmUgKiBrIC0gazI7Ci0KLSAgICBzZXROb3JtYWxpemVk
Q29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOworICAgICAgICBkb3VibGUgYjAg
PSBBICogKGFQbHVzT25lIC0gYU1pbnVzT25lICogayArIGsyKTsKKyAgICAgICAgZG91YmxlIGIx
ID0gMiAqIEEgKiAoYU1pbnVzT25lIC0gYVBsdXNPbmUgKiBrKTsKKyAgICAgICAgZG91YmxlIGIy
ID0gQSAqIChhUGx1c09uZSAtIGFNaW51c09uZSAqIGsgLSBrMik7CisgICAgICAgIGRvdWJsZSBh
MCA9IGFQbHVzT25lICsgYU1pbnVzT25lICogayArIGsyOworICAgICAgICBkb3VibGUgYTEgPSAt
MiAqIChhTWludXNPbmUgKyBhUGx1c09uZSAqIGspOworICAgICAgICBkb3VibGUgYTIgPSBhUGx1
c09uZSArIGFNaW51c09uZSAqIGsgLSBrMjsKKworICAgICAgICBzZXROb3JtYWxpemVkQ29lZmZp
Y2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IFdoZW4gZnJlcXVlbmN5IGlzIDAsIHRoZSB6LXRyYW5zZm9ybSBpcyAxLgorICAgICAgICBzZXRO
b3JtYWxpemVkQ29lZmZpY2llbnRzKDEuMCwgMC4wLCAwLjAsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMS4wLCAwLjAsIDAuMCk7CisgICAgfQogfQogCiB2b2lkIEJpcXVhZDo6
c2V0SGlnaFNoZWxmUGFyYW1zKGRvdWJsZSBmcmVxdWVuY3ksIGRvdWJsZSBkYkdhaW4pCiB7Ci0g
ICAgZG91YmxlIHcwID0gcGlEb3VibGUgKiBmcmVxdWVuY3k7CisgICAgLy8gQ2xpcCBmcmVxdWVu
Y2llcyB0byBiZXR3ZWVuIDAgYW5kIDEsIGluY2x1c2l2ZS4KKyAgICBmcmVxdWVuY3kgPSBzdGQ6
Om1heCgwLjAsIHN0ZDo6bWluKGZyZXF1ZW5jeSwgMS4wKSk7CiAKICAgICBkb3VibGUgQSA9IHBv
dygxMC4wLCBkYkdhaW4gLyA0MCk7Ci0gICAgZG91YmxlIFMgPSAxOyAvLyBmaWx0ZXIgc2xvcGUg
KDEgaXMgbWF4IHZhbHVlKQotICAgIGRvdWJsZSBhbHBoYSA9IDAuNSAqIHNpbih3MCkgKiBzcXJ0
KChBICsgMSAvIEEpICogKDEgLyBTIC0gMSkgKyAyKTsKIAotICAgIGRvdWJsZSBrID0gY29zKHcw
KTsKLSAgICBkb3VibGUgazIgPSAyICogc3FydChBKSAqIGFscGhhOworICAgIGlmIChmcmVxdWVu
Y3kgPT0gMSkgeworICAgICAgICAvLyBUaGUgei10cmFuc2Zvcm0gaXMgMS4KKyAgICAgICAgc2V0
Tm9ybWFsaXplZENvZWZmaWNpZW50cygxLjAsIDAuMCwgMC4wLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDEuMCwgMC4wLCAwLjApOworICAgIH0gZWxzZSBpZiAoZnJlcXVlbmN5
ID4gMCkgeworICAgICAgICBkb3VibGUgdzAgPSBwaURvdWJsZSAqIGZyZXF1ZW5jeTsKKworICAg
ICAgICBkb3VibGUgUyA9IDE7IC8vIGZpbHRlciBzbG9wZSAoMSBpcyBtYXggdmFsdWUpCisgICAg
ICAgIGRvdWJsZSBhbHBoYSA9IDAuNSAqIHNpbih3MCkgKiBzcXJ0KChBICsgMSAvIEEpICogKDEg
LyBTIC0gMSkgKyAyKTsKIAotICAgIGRvdWJsZSBhUGx1c09uZSA9IEEgKyAxOwotICAgIGRvdWJs
ZSBhTWludXNPbmUgPSBBIC0gMTsKKyAgICAgICAgZG91YmxlIGsgPSBjb3ModzApOworICAgICAg
ICBkb3VibGUgazIgPSAyICogc3FydChBKSAqIGFscGhhOworCisgICAgICAgIGRvdWJsZSBhUGx1
c09uZSA9IEEgKyAxOworICAgICAgICBkb3VibGUgYU1pbnVzT25lID0gQSAtIDE7CiAgICAgCi0g
ICAgZG91YmxlIGIwID0gQSAqIChhUGx1c09uZSArIGFNaW51c09uZSAqIGsgKyBrMik7Ci0gICAg
ZG91YmxlIGIxID0gLTIgKiBBICogKGFNaW51c09uZSArIGFQbHVzT25lICogayk7Ci0gICAgZG91
YmxlIGIyID0gQSAqIChhUGx1c09uZSArIGFNaW51c09uZSAqIGsgLSBrMik7Ci0gICAgZG91Ymxl
IGEwID0gYVBsdXNPbmUgLSBhTWludXNPbmUgKiBrICsgazI7Ci0gICAgZG91YmxlIGExID0gMiAq
IChhTWludXNPbmUgLSBhUGx1c09uZSAqIGspOwotICAgIGRvdWJsZSBhMiA9IGFQbHVzT25lIC0g
YU1pbnVzT25lICogayAtIGsyOwotCi0gICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhiMCwg
YjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAgICAgICAgZG91YmxlIGIwID0gQSAqIChhUGx1c09uZSAr
IGFNaW51c09uZSAqIGsgKyBrMik7CisgICAgICAgIGRvdWJsZSBiMSA9IC0yICogQSAqIChhTWlu
dXNPbmUgKyBhUGx1c09uZSAqIGspOworICAgICAgICBkb3VibGUgYjIgPSBBICogKGFQbHVzT25l
ICsgYU1pbnVzT25lICogayAtIGsyKTsKKyAgICAgICAgZG91YmxlIGEwID0gYVBsdXNPbmUgLSBh
TWludXNPbmUgKiBrICsgazI7CisgICAgICAgIGRvdWJsZSBhMSA9IDIgKiAoYU1pbnVzT25lIC0g
YVBsdXNPbmUgKiBrKTsKKyAgICAgICAgZG91YmxlIGEyID0gYVBsdXNPbmUgLSBhTWludXNPbmUg
KiBrIC0gazI7CisKKyAgICAgICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhiMCwgYjEsIGIy
LCBhMCwgYTEsIGEyKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXaGVuIGZyZXF1ZW5jeSA9
IDAsIHRoZSBmaWx0ZXIgaXMganVzdCBhIGdhaW4sIEFeMi4KKyAgICAgICAgc2V0Tm9ybWFsaXpl
ZENvZWZmaWNpZW50cyhBKkEsIDAuMCwgMC4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDEuMCwgMC4wLCAwLjApOworICAgIH0KIH0KIAogdm9pZCBCaXF1YWQ6OnNldFBlYWtp
bmdQYXJhbXMoZG91YmxlIGZyZXF1ZW5jeSwgZG91YmxlIFEsIGRvdWJsZSBkYkdhaW4pCiB7Ci0g
ICAgZG91YmxlIHcwID0gcGlEb3VibGUgKiBmcmVxdWVuY3k7Ci0gICAgZG91YmxlIGFscGhhID0g
c2luKHcwKSAvICgyICogUSk7Ci0gICAgZG91YmxlIEEgPSBwb3coMTAuMCwgZGJHYWluIC8gNDAp
OworICAgIC8vIENsaXAgZnJlcXVlbmNpZXMgdG8gYmV0d2VlbiAwIGFuZCAxLCBpbmNsdXNpdmUu
CisgICAgZnJlcXVlbmN5ID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbihmcmVxdWVuY3ksIDEuMCkp
OwogCi0gICAgZG91YmxlIGsgPSBjb3ModzApOworICAgIC8vIERvbid0IGxldCBRIGdvIG5lZ2F0
aXZlLCB3aGljaCBjYXVzZXMgYW4gdW5zdGFibGUgZmlsdGVyLgorICAgIFEgPSBzdGQ6Om1heCgw
LjAsIFEpOwogCi0gICAgZG91YmxlIGIwID0gMSArIGFscGhhICogQTsKLSAgICBkb3VibGUgYjEg
PSAtMiAqIGs7Ci0gICAgZG91YmxlIGIyID0gMSAtIGFscGhhICogQTsKLSAgICBkb3VibGUgYTAg
PSAxICsgYWxwaGEgLyBBOwotICAgIGRvdWJsZSBhMSA9IC0yICogazsKLSAgICBkb3VibGUgYTIg
PSAxIC0gYWxwaGEgLyBBOworICAgIGRvdWJsZSBBID0gcG93KDEwLjAsIGRiR2FpbiAvIDQwKTsK
IAotICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoYjAsIGIxLCBiMiwgYTAsIGExLCBhMik7
CisgICAgaWYgKChmcmVxdWVuY3kgPiAwKSAmJiAoZnJlcXVlbmN5IDwgMSkpIHsKKyAgICAgICAg
aWYgKFEgPiAwKSB7CisgICAgICAgICAgICBkb3VibGUgdzAgPSBwaURvdWJsZSAqIGZyZXF1ZW5j
eTsKKyAgICAgICAgICAgIGRvdWJsZSBhbHBoYSA9IHNpbih3MCkgLyAoMiAqIFEpOworCisgICAg
ICAgICAgICBkb3VibGUgayA9IGNvcyh3MCk7CisKKyAgICAgICAgICAgIGRvdWJsZSBiMCA9IDEg
KyBhbHBoYSAqIEE7CisgICAgICAgICAgICBkb3VibGUgYjEgPSAtMiAqIGs7CisgICAgICAgICAg
ICBkb3VibGUgYjIgPSAxIC0gYWxwaGEgKiBBOworICAgICAgICAgICAgZG91YmxlIGEwID0gMSAr
IGFscGhhIC8gQTsKKyAgICAgICAgICAgIGRvdWJsZSBhMSA9IC0yICogazsKKyAgICAgICAgICAg
IGRvdWJsZSBhMiA9IDEgLSBhbHBoYSAvIEE7CisKKyAgICAgICAgICAgIHNldE5vcm1hbGl6ZWRD
b2VmZmljaWVudHMoYjAsIGIxLCBiMiwgYTAsIGExLCBhMik7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBXaGVuIFEgPSAwLCB0aGUgYWJvdmUgZm9ybXVsYXMgaGF2ZSBwcm9ibGVt
cy4gSWYgd2UgbG9vayBhdAorICAgICAgICAgICAgLy8gdGhlIHotdHJhbnNmb3JtLCB3ZSBjYW4g
c2VlIHRoYXQgdGhlIGxpbWl0IGFzIFEtPjAgaXMgQV4yLCBzbworICAgICAgICAgICAgLy8gc2V0
IHRoZSBmaWx0ZXIgdGhhdCB3YXkuCisgICAgICAgICAgICBzZXROb3JtYWxpemVkQ29lZmZpY2ll
bnRzKEEgKiBBLCAwLjAsIDAuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMS4wLCAwLjAsIDAuMCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBX
aGVuIGZyZXF1ZW5jeSBpcyAwIG9yIDEsIHRoZSB6LXRyYW5zZm9ybSBpcyAxLgorICAgICAgICBz
ZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKDEuMCwgMC4wLCAwLjAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMS4wLCAwLjAsIDAuMCk7CisgICAgfQogfQogCiB2b2lkIEJpcXVh
ZDo6c2V0QWxscGFzc1BhcmFtcyhkb3VibGUgZnJlcXVlbmN5LCBkb3VibGUgUSkKIHsKLSAgICBk
b3VibGUgdzAgPSBwaURvdWJsZSAqIGZyZXF1ZW5jeTsKLSAgICBkb3VibGUgYWxwaGEgPSBzaW4o
dzApIC8gKDIgKiBRKTsKLQotICAgIGRvdWJsZSBrID0gY29zKHcwKTsKLQotICAgIGRvdWJsZSBi
MCA9IDEgLSBhbHBoYTsKLSAgICBkb3VibGUgYjEgPSAtMiAqIGs7Ci0gICAgZG91YmxlIGIyID0g
MSArIGFscGhhOwotICAgIGRvdWJsZSBhMCA9IDEgKyBhbHBoYTsKLSAgICBkb3VibGUgYTEgPSAt
MiAqIGs7Ci0gICAgZG91YmxlIGEyID0gMSAtIGFscGhhOwotCi0gICAgc2V0Tm9ybWFsaXplZENv
ZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAgICAvLyBDbGlwIGZyZXF1ZW5j
aWVzIHRvIGJldHdlZW4gMCBhbmQgMSwgaW5jbHVzaXZlLgorICAgIGZyZXF1ZW5jeSA9IHN0ZDo6
bWF4KDAuMCwgc3RkOjptaW4oZnJlcXVlbmN5LCAxLjApKTsKKworICAgIC8vIERvbid0IGxldCBR
IGdvIG5lZ2F0aXZlLCB3aGljaCBjYXVzZXMgYW4gdW5zdGFibGUgZmlsdGVyLgorICAgIFEgPSBz
dGQ6Om1heCgwLjAsIFEpOworCisgICAgaWYgKChmcmVxdWVuY3kgPiAwKSAmJiAoZnJlcXVlbmN5
IDwgMSkpIHsKKyAgICAgICAgaWYgKFEgPiAwKSB7CisgICAgICAgICAgICBkb3VibGUgdzAgPSBw
aURvdWJsZSAqIGZyZXF1ZW5jeTsKKyAgICAgICAgICAgIGRvdWJsZSBhbHBoYSA9IHNpbih3MCkg
LyAoMiAqIFEpOworCisgICAgICAgICAgICBkb3VibGUgayA9IGNvcyh3MCk7CisKKyAgICAgICAg
ICAgIGRvdWJsZSBiMCA9IDEgLSBhbHBoYTsKKyAgICAgICAgICAgIGRvdWJsZSBiMSA9IC0yICog
azsKKyAgICAgICAgICAgIGRvdWJsZSBiMiA9IDEgKyBhbHBoYTsKKyAgICAgICAgICAgIGRvdWJs
ZSBhMCA9IDEgKyBhbHBoYTsKKyAgICAgICAgICAgIGRvdWJsZSBhMSA9IC0yICogazsKKyAgICAg
ICAgICAgIGRvdWJsZSBhMiA9IDEgLSBhbHBoYTsKKworICAgICAgICAgICAgc2V0Tm9ybWFsaXpl
ZENvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIFdoZW4gUSA9IDAsIHRoZSBhYm92ZSBmb3JtdWxhcyBoYXZlIHByb2Js
ZW1zLiBJZiB3ZSBsb29rIGF0CisgICAgICAgICAgICAvLyB0aGUgei10cmFuc2Zvcm0sIHdlIGNh
biBzZWUgdGhhdCB0aGUgbGltaXQgYXMgUS0+MCBpcyAtMSwgc28KKyAgICAgICAgICAgIC8vIHNl
dCB0aGUgZmlsdGVyIHRoYXQgd2F5LgorICAgICAgICAgICAgc2V0Tm9ybWFsaXplZENvZWZmaWNp
ZW50cygtMS4wLCAwLjAsIDAuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMS4wLCAwLjAsIDAuMCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBX
aGVuIGZyZXF1ZW5jeSBpcyAwIG9yIDEsIHRoZSB6LXRyYW5zZm9ybSBpcyAxLgorICAgICAgICBz
ZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKDEuMCwgMC4wLCAwLjAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMS4wLCAwLjAsIDAuMCk7CisgICAgfQogfQogCiB2b2lkIEJpcXVh
ZDo6c2V0Tm90Y2hQYXJhbXMoZG91YmxlIGZyZXF1ZW5jeSwgZG91YmxlIFEpCiB7Ci0gICAgZG91
YmxlIHcwID0gcGlEb3VibGUgKiBmcmVxdWVuY3k7Ci0gICAgZG91YmxlIGFscGhhID0gc2luKHcw
KSAvICgyICogUSk7Ci0KLSAgICBkb3VibGUgayA9IGNvcyh3MCk7Ci0KLSAgICBkb3VibGUgYjAg
PSAxOwotICAgIGRvdWJsZSBiMSA9IC0yICogazsKLSAgICBkb3VibGUgYjIgPSAxOwotICAgIGRv
dWJsZSBhMCA9IDEgKyBhbHBoYTsKLSAgICBkb3VibGUgYTEgPSAtMiAqIGs7Ci0gICAgZG91Ymxl
IGEyID0gMSAtIGFscGhhOwotCi0gICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhiMCwgYjEs
IGIyLCBhMCwgYTEsIGEyKTsKKyAgICAvLyBDbGlwIGZyZXF1ZW5jaWVzIHRvIGJldHdlZW4gMCBh
bmQgMSwgaW5jbHVzaXZlLgorICAgIGZyZXF1ZW5jeSA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4o
ZnJlcXVlbmN5LCAxLjApKTsKKworICAgIC8vIERvbid0IGxldCBRIGdvIG5lZ2F0aXZlLCB3aGlj
aCBjYXVzZXMgYW4gdW5zdGFibGUgZmlsdGVyLgorICAgIFEgPSBzdGQ6Om1heCgwLjAsIFEpOwor
CisgICAgaWYgKChmcmVxdWVuY3kgPiAwKSAmJiAoZnJlcXVlbmN5IDwgMSkpIHsKKyAgICAgICAg
aWYgKFEgPiAwKSB7CisgICAgICAgICAgICBkb3VibGUgdzAgPSBwaURvdWJsZSAqIGZyZXF1ZW5j
eTsKKyAgICAgICAgICAgIGRvdWJsZSBhbHBoYSA9IHNpbih3MCkgLyAoMiAqIFEpOworCisgICAg
ICAgICAgICBkb3VibGUgayA9IGNvcyh3MCk7CisKKyAgICAgICAgICAgIGRvdWJsZSBiMCA9IDE7
CisgICAgICAgICAgICBkb3VibGUgYjEgPSAtMiAqIGs7CisgICAgICAgICAgICBkb3VibGUgYjIg
PSAxOworICAgICAgICAgICAgZG91YmxlIGEwID0gMSArIGFscGhhOworICAgICAgICAgICAgZG91
YmxlIGExID0gLTIgKiBrOworICAgICAgICAgICAgZG91YmxlIGEyID0gMSAtIGFscGhhOworCisg
ICAgICAgICAgICBzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwg
YTIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2hlbiBRID0gMCwgdGhlIGFi
b3ZlIGZvcm11bGFzIGhhdmUgcHJvYmxlbXMuIElmIHdlIGxvb2sgYXQKKyAgICAgICAgICAgIC8v
IHRoZSB6LXRyYW5zZm9ybSwgd2UgY2FuIHNlZSB0aGF0IHRoZSBsaW1pdCBhcyBRLT4wIGlzIDAs
IHNvCisgICAgICAgICAgICAvLyBzZXQgdGhlIGZpbHRlciB0aGF0IHdheS4KKyAgICAgICAgICAg
IHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoMC4wLCAwLjAsIDAuMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMS4wLCAwLjAsIDAuMCk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICAvLyBXaGVuIGZyZXF1ZW5jeSBpcyAwIG9yIDEsIHRoZSB6LXRyYW5z
Zm9ybSBpcyAxLgorICAgICAgICBzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKDEuMCwgMC4wLCAw
LjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wLCAwLjAsIDAuMCk7Cisg
ICAgfQogfQogCiB2b2lkIEJpcXVhZDo6c2V0QmFuZHBhc3NQYXJhbXMoZG91YmxlIGZyZXF1ZW5j
eSwgZG91YmxlIFEpCiB7Ci0gICAgZG91YmxlIHcwID0gcGlEb3VibGUgKiBmcmVxdWVuY3k7Ci0g
ICAgZG91YmxlIGFscGhhID0gc2luKHcwKSAvICgyICogUSk7CisgICAgLy8gTm8gbmVnYXRpdmUg
ZnJlcXVlbmNpZXMgYWxsb3dlZC4KKyAgICBmcmVxdWVuY3kgPSBzdGQ6Om1heCgwLjAsIGZyZXF1
ZW5jeSk7CiAKLSAgICBkb3VibGUgayA9IGNvcyh3MCk7CisgICAgLy8gRG9uJ3QgbGV0IFEgZ28g
bmVnYXRpdmUsIHdoaWNoIGNhdXNlcyBhbiB1bnN0YWJsZSBmaWx0ZXIuCisgICAgUSA9IHN0ZDo6
bWF4KDAuMCwgUSk7CisKKyAgICBpZiAoKGZyZXF1ZW5jeSA+IDApICYmIChmcmVxdWVuY3kgPCAx
KSkgeworICAgICAgZG91YmxlIHcwID0gcGlEb3VibGUgKiBmcmVxdWVuY3k7CisgICAgICBpZiAo
USA+IDApIHsKKyAgICAgICAgZG91YmxlIGFscGhhID0gc2luKHcwKSAvICgyICogUSk7CisKKyAg
ICAgICAgZG91YmxlIGsgPSBjb3ModzApOwogICAgIAotICAgIGRvdWJsZSBiMCA9IGFscGhhOwot
ICAgIGRvdWJsZSBiMSA9IDA7Ci0gICAgZG91YmxlIGIyID0gLWFscGhhOwotICAgIGRvdWJsZSBh
MCA9IDEgKyBhbHBoYTsKLSAgICBkb3VibGUgYTEgPSAtMiAqIGs7Ci0gICAgZG91YmxlIGEyID0g
MSAtIGFscGhhOwotCi0gICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBh
MCwgYTEsIGEyKTsKKyAgICAgICAgZG91YmxlIGIwID0gYWxwaGE7CisgICAgICAgIGRvdWJsZSBi
MSA9IDA7CisgICAgICAgIGRvdWJsZSBiMiA9IC1hbHBoYTsKKyAgICAgICAgZG91YmxlIGEwID0g
MSArIGFscGhhOworICAgICAgICBkb3VibGUgYTEgPSAtMiAqIGs7CisgICAgICAgIGRvdWJsZSBh
MiA9IDEgLSBhbHBoYTsKKworICAgICAgICBzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKGIwLCBi
MSwgYjIsIGEwLCBhMSwgYTIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2hlbiBRID0g
MCwgdGhlIGFib3ZlIGZvcm11bGFzIGhhdmUgcHJvYmxlbXMuIElmIHdlIGxvb2sgYXQKKyAgICAg
ICAgLy8gdGhlIHotdHJhbnNmb3JtLCB3ZSBjYW4gc2VlIHRoYXQgdGhlIGxpbWl0IGFzIFEtPjAg
aXMgMSwgc28KKyAgICAgICAgLy8gc2V0IHRoZSBmaWx0ZXIgdGhhdCB3YXkuCisgICAgICAgIHNl
dE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoMS4wLCAwLjAsIDAuMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAxLjAsIDAuMCwgMC4wKTsKKyAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBXaGVuIHRoZSBjdXRvZmYgaXMgemVybywgdGhlIHotdHJhbnNmb3JtIGFwcHJv
YWNoZXMgMCwgaWYgUQorICAgICAgICAvLyA+IDAuIFdoZW4gYm90aCBRIGFuZCBjdXRvZmYgYXJl
IHplcm8sIHRoZSB6LXRyYW5zZm9ybSBpcworICAgICAgICAvLyBwcmV0dHkgbXVjaCB1bmRlZmlu
ZWQuIFdoYXQgc2hvdWxkIHdlIGRvIGluIHRoaXMgY2FzZT8KKyAgICAgICAgLy8gRm9yIG5vdywg
anVzdCBtYWtlIHRoZSBmaWx0ZXIgMC4gV2hlbiB0aGUgY3V0b2ZmIGlzIDEsIHRoZQorICAgICAg
ICAvLyB6LXRyYW5zZm9ybSBhbHNvIGFwcHJvYWNoZXMgMC4KKyAgICAgIHNldE5vcm1hbGl6ZWRD
b2VmZmljaWVudHMoMC4wLCAwLjAsIDAuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMS4wLCAwLjAsIDAuMCk7CisgICAgfQogfQogCiB2b2lkIEJpcXVhZDo6c2V0WmVyb1BvbGVQ
YWlycyhjb25zdCBDb21wbGV4ICZ6ZXJvLCBjb25zdCBDb21wbGV4ICZwb2xlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122861</attachid>
            <date>2012-01-17 18:46:48 -0800</date>
            <delta_ts>2012-01-18 15:54:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71413-20120117184646.patch</filename>
            <type>text/plain</type>
            <size>51253</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MTI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2M4NTIxOWFmMWZjZWZj
Y2UwOTY0M2MzNzVhNGYwYzFmMGM3ZGNiNC4uOWE5ZjEzZDRjNWQ2ZmUzNDU0ZTVjNGE4NWExMTY2
OWFhMDEzNTI3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDExLTExLTA3ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBDaGVjayBwYXJhbWV0ZXJzIHRv
IGJpcXVhZCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MTQxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3RzIGFkZGVkIGZvciBlYWNoIGZpbHRlciB0eXBlIGFuZCBmb3IgdGhlIGxpbWl0
aW5nIGNhc2VzIGZvcgorICAgICAgICBlYWNoIGZpbHRlciB0eXBlLiAgTk9URTogIFRlc3RzIG1h
eSBmYWlsIG9uIFdpbmRvd3MgZm9yIHNvbWUKKyAgICAgICAgdW5rbm93biByZWFzb24uCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qmlx
dWFkOjpzZXRMb3dwYXNzUGFyYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6c2V0SGln
aHBhc3NQYXJhbXMpOgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkOjpzZXRMb3dTaGVsZlBhcmFt
cyk6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWQ6OnNldEhpZ2hTaGVsZlBhcmFtcyk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXF1YWQ6OnNldFBlYWtpbmdQYXJhbXMpOgorICAgICAgICAoV2ViQ29y
ZTo6QmlxdWFkOjpzZXRBbGxwYXNzUGFyYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6
c2V0Tm90Y2hQYXJhbXMpOgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkOjpzZXRCYW5kcGFzc1Bh
cmFtcyk6CisgICAgICAgIENoZWNrIGZvciBpbnZhbGlkIHBhcmFtZXRlcnMgYW5kIGNsaXAgdGhl
bSB0byBzb21ldGhpbmcgc2Vuc2libGUuCisgICAgICAgIEFsc28gY2hlY2sgZm9yIHRoZSBsaW1p
dGluZyBjYXNlcyBhbmQgdHJ5IHRvIHVzZSB0aGUgbGltaXRpbmcgZm9ybQorICAgICAgICBvZiB0
aGUgei10cmFuc2Zvcm0gZm9yIHRoZSBiaXF1YWQuICBTb21lIGlzc3VlcyBjYW5ub3QgYmUKKyAg
ICAgICAgY29uc2lzdGVudGx5IGhhbmRsZWQgYmVjYXVzZSB0aGUgei10cmFuc2Zvcm0gaXMgbm90
IGNvbnRpbnVvdXMgYXMKKyAgICAgICAgdGhlIHBhcmFtZXRlcnMgYXBwcm9hY2ggdGhlIGxpbWl0
LgorCiAyMDEyLTAxLTE2ICBIYWppbWUgTW9ycml0YSAgPG1vcnJpdGFAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFtJbnRlcm5hbHNdIG1lbWJlciB2YXJhaWJsZXMgc2hvdWxkIGZvbGxvdyBuYW1p
bmcgY29udmVudGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0JpcXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwCmlu
ZGV4IDhkYzFmNGZiNjllNzExMmJiYjE2MGQ5N2QxMzNjMDBlYzg5MGE2MjkuLjdmMjllZjM4ZTQ1
ZTQwMzI5M2VhZjk5ZDA0ZmQxZGM2NTFmNjg3NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vQmlxdWFkLmNwcApAQCAtMTg4LDQzICsxODgsODUgQEAgdm9pZCBCaXF1YWQ6OnJlc2V0
KCkKIHZvaWQgQmlxdWFkOjpzZXRMb3dwYXNzUGFyYW1zKGRvdWJsZSBjdXRvZmYsIGRvdWJsZSBy
ZXNvbmFuY2UpCiB7CiAgICAgcmVzb25hbmNlID0gc3RkOjptYXgoMC4wLCByZXNvbmFuY2UpOyAv
LyBjYW4ndCBnbyBuZWdhdGl2ZQotCisgICAgLy8gTGltaXQgY3V0b2ZmIHRvIDAgdG8gMS4KKyAg
ICBjdXRvZmYgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKGN1dG9mZiwgMS4wKSk7CisgICAgCiAg
ICAgZG91YmxlIGcgPSBwb3coMTAuMCwgMC4wNSAqIHJlc29uYW5jZSk7CiAgICAgZG91YmxlIGQg
PSBzcXJ0KCg0IC0gc3FydCgxNiAtIDE2IC8gKGcgKiBnKSkpIC8gMik7CiAKLSAgICAvLyBDb21w
dXRlIGJpcXVhZCBjb2VmZmljaWVudHMgZm9yIGxvcGFzcyBmaWx0ZXIKLSAgICBkb3VibGUgdGhl
dGEgPSBwaURvdWJsZSAqIGN1dG9mZjsKLSAgICBkb3VibGUgc24gPSAwLjUgKiBkICogc2luKHRo
ZXRhKTsKLSAgICBkb3VibGUgYmV0YSA9IDAuNSAqICgxIC0gc24pIC8gKDEgKyBzbik7Ci0gICAg
ZG91YmxlIGdhbW1hID0gKDAuNSArIGJldGEpICogY29zKHRoZXRhKTsKLSAgICBkb3VibGUgYWxw
aGEgPSAwLjI1ICogKDAuNSArIGJldGEgLSBnYW1tYSk7Ci0KLSAgICBtX2IwID0gMiAqIGFscGhh
OwotICAgIG1fYjEgPSAyICogMiAqIGFscGhhOwotICAgIG1fYjIgPSAyICogYWxwaGE7Ci0gICAg
bV9hMSA9IDIgKiAtZ2FtbWE7Ci0gICAgbV9hMiA9IDIgKiBiZXRhOworICAgIGlmIChjdXRvZmYg
PT0gMS4wKSB7CisgICAgICAvLyBXaGVuIGN1dG9mZiBpcyAxLCB0aGUgei10cmFuc2Zvcm0gaXMg
MS4KKyAgICAgIG1fYjAgPSAxLjA7CisgICAgICBtX2IxID0gMDsKKyAgICAgIG1fYjIgPSAwOwor
ICAgICAgbV9hMSA9IDA7CisgICAgICBtX2EyID0gMDsKKyAgICAgIAorICAgIH0gZWxzZSBpZiAo
Y3V0b2ZmID4gMCkgeworICAgICAgLy8gQ29tcHV0ZSBiaXF1YWQgY29lZmZpY2llbnRzIGZvciBs
b3Bhc3MgZmlsdGVyCisgICAgICBkb3VibGUgdGhldGEgPSBwaURvdWJsZSAqIGN1dG9mZjsKKyAg
ICAgIGRvdWJsZSBzbiA9IDAuNSAqIGQgKiBzaW4odGhldGEpOworICAgICAgZG91YmxlIGJldGEg
PSAwLjUgKiAoMSAtIHNuKSAvICgxICsgc24pOworICAgICAgZG91YmxlIGdhbW1hID0gKDAuNSAr
IGJldGEpICogY29zKHRoZXRhKTsKKyAgICAgIGRvdWJsZSBhbHBoYSA9IDAuMjUgKiAoMC41ICsg
YmV0YSAtIGdhbW1hKTsKKworICAgICAgbV9iMCA9IDIgKiBhbHBoYTsKKyAgICAgIG1fYjEgPSAy
ICogMiAqIGFscGhhOworICAgICAgbV9iMiA9IDIgKiBhbHBoYTsKKyAgICAgIG1fYTEgPSAyICog
LWdhbW1hOworICAgICAgbV9hMiA9IDIgKiBiZXRhOworICAgIH0gZWxzZSB7CisgICAgICAvLyBX
aGVuIGN1dG9mZiBpcyB6ZXJvLCBub3RoaW5nIGdldHMgdGhyb3VnaCB0aGUgZmlsdGVyLCBzbyBz
ZXQKKyAgICAgIC8vIGNvZWZmaWNpZW50cyB1cCBjb3JyZWN0bHkuCisgICAgICBtX2IwID0gMDsK
KyAgICAgIG1fYjEgPSAwOworICAgICAgbV9iMiA9IDA7CisgICAgICBtX2ExID0gMDsKKyAgICAg
IG1fYTIgPSAwOworICAgIH0KIH0KIAogdm9pZCBCaXF1YWQ6OnNldEhpZ2hwYXNzUGFyYW1zKGRv
dWJsZSBjdXRvZmYsIGRvdWJsZSByZXNvbmFuY2UpCiB7CiAgICAgcmVzb25hbmNlID0gc3RkOjpt
YXgoMC4wLCByZXNvbmFuY2UpOyAvLyBjYW4ndCBnbyBuZWdhdGl2ZQogCisgICAgLy8gTGltaXQg
Y3V0b2ZmIHRvIDAgdG8gMS4KKyAgICBjdXRvZmYgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKGN1
dG9mZiwgMS4wKSk7CisKICAgICBkb3VibGUgZyA9IHBvdygxMC4wLCAwLjA1ICogcmVzb25hbmNl
KTsKICAgICBkb3VibGUgZCA9IHNxcnQoKDQgLSBzcXJ0KDE2IC0gMTYgLyAoZyAqIGcpKSkgLyAy
KTsKIAotICAgIC8vIENvbXB1dGUgYmlxdWFkIGNvZWZmaWNpZW50cyBmb3IgaGlnaHBhc3MgZmls
dGVyCi0gICAgZG91YmxlIHRoZXRhID0gcGlEb3VibGUgKiBjdXRvZmY7Ci0gICAgZG91YmxlIHNu
ID0gMC41ICogZCAqIHNpbih0aGV0YSk7Ci0gICAgZG91YmxlIGJldGEgPSAwLjUgKiAoMSAtIHNu
KSAvICgxICsgc24pOwotICAgIGRvdWJsZSBnYW1tYSA9ICgwLjUgKyBiZXRhKSAqIGNvcyh0aGV0
YSk7Ci0gICAgZG91YmxlIGFscGhhID0gMC4yNSAqICgwLjUgKyBiZXRhICsgZ2FtbWEpOwotCi0g
ICAgbV9iMCA9IDIgKiBhbHBoYTsKLSAgICBtX2IxID0gMiAqIC0yICogYWxwaGE7Ci0gICAgbV9i
MiA9IDIgKiBhbHBoYTsKLSAgICBtX2ExID0gMiAqIC1nYW1tYTsKLSAgICBtX2EyID0gMiAqIGJl
dGE7CisgICAgaWYgKGN1dG9mZiA9PSAxLjApIHsKKyAgICAgIC8vIFRoZSB6LXRyYW5zZm9ybSBp
cyAwLgorICAgICAgbV9iMCA9IDA7CisgICAgICBtX2IxID0gMDsKKyAgICAgIG1fYjIgPSAwOwor
ICAgICAgbV9hMSA9IDA7CisgICAgICBtX2EyID0gMDsKKyAgICB9IGVsc2UgaWYgKGN1dG9mZiA+
IDApIHsKKyAgICAgIC8vIENvbXB1dGUgYmlxdWFkIGNvZWZmaWNpZW50cyBmb3IgaGlnaHBhc3Mg
ZmlsdGVyCisgICAgICBkb3VibGUgdGhldGEgPSBwaURvdWJsZSAqIGN1dG9mZjsKKyAgICAgIGRv
dWJsZSBzbiA9IDAuNSAqIGQgKiBzaW4odGhldGEpOworICAgICAgZG91YmxlIGJldGEgPSAwLjUg
KiAoMSAtIHNuKSAvICgxICsgc24pOworICAgICAgZG91YmxlIGdhbW1hID0gKDAuNSArIGJldGEp
ICogY29zKHRoZXRhKTsKKyAgICAgIGRvdWJsZSBhbHBoYSA9IDAuMjUgKiAoMC41ICsgYmV0YSAr
IGdhbW1hKTsKKworICAgICAgbV9iMCA9IDIgKiBhbHBoYTsKKyAgICAgIG1fYjEgPSAyICogLTIg
KiBhbHBoYTsKKyAgICAgIG1fYjIgPSAyICogYWxwaGE7CisgICAgICBtX2ExID0gMiAqIC1nYW1t
YTsKKyAgICAgIG1fYTIgPSAyICogYmV0YTsKKyAgICB9IGVsc2UgeworICAgICAgLy8gV2hlbiBj
dXRvZmYgaXMgemVybywgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGJlY2F1c2UgdGhlIGFib3ZlCisg
ICAgICAvLyBnaXZlcyBhIHF1YWRyYXRpYyBkaXZpZGVkIGJ5IHRoZSBzYW1lIHF1YWRyYXRpYywg
d2l0aCBwb2xlcworICAgICAgLy8gYW5kIHplcm9zIG9uIHRoZSB1bml0IGNpcmNsZSBpbiB0aGUg
c2FtZSBwbGFjZS4gV2hlbiBjdXRvZmYKKyAgICAgIC8vIGlzIHplcm8sIHRoZSB6LXRyYW5zZm9y
bSBpcyAxLgorICAgICAgbV9iMCA9IDE7CisgICAgICBtX2IxID0gMDsKKyAgICAgIG1fYjIgPSAw
OworICAgICAgbV9hMSA9IDA7CisgICAgICBtX2EyID0gMDsKKyAgICB9CiB9CiAKIHZvaWQgQmlx
dWFkOjpzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKGRvdWJsZSBiMCwgZG91YmxlIGIxLCBkb3Vi
bGUgYjIsIGRvdWJsZSBhMCwgZG91YmxlIGExLCBkb3VibGUgYTIpCkBAIC0yNDAsMTE5ICsyODIs
MjMyIEBAIHZvaWQgQmlxdWFkOjpzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKGRvdWJsZSBiMCwg
ZG91YmxlIGIxLCBkb3VibGUgYjIsIGRvdWJsZSBhCiAKIHZvaWQgQmlxdWFkOjpzZXRMb3dTaGVs
ZlBhcmFtcyhkb3VibGUgZnJlcXVlbmN5LCBkb3VibGUgZGJHYWluKQogewotICAgIGRvdWJsZSB3
MCA9IHBpRG91YmxlICogZnJlcXVlbmN5OwotCisgICAgLy8gQ2xpcCBmcmVxdWVuY2llcyB0byBi
ZXR3ZWVuIDAgYW5kIDEsIGluY2x1c2l2ZS4KKyAgICBmcmVxdWVuY3kgPSBzdGQ6Om1heCgwLjAs
IHN0ZDo6bWluKGZyZXF1ZW5jeSwgMS4wKSk7CisgICAgCiAgICAgZG91YmxlIEEgPSBwb3coMTAu
MCwgZGJHYWluIC8gNDApOwotICAgIGRvdWJsZSBTID0gMTsgLy8gZmlsdGVyIHNsb3BlICgxIGlz
IG1heCB2YWx1ZSkKLSAgICBkb3VibGUgYWxwaGEgPSAwLjUgKiBzaW4odzApICogc3FydCgoQSAr
IDEgLyBBKSAqICgxIC8gUyAtIDEpICsgMik7CiAKLSAgICBkb3VibGUgayA9IGNvcyh3MCk7Ci0g
ICAgZG91YmxlIGsyID0gMiAqIHNxcnQoQSkgKiBhbHBoYTsKKyAgICBpZiAoZnJlcXVlbmN5ID09
IDEpIHsKKyAgICAgICAgLy8gVGhlIHotdHJhbnNmb3JtIGlzIGEgY29uc3RhbnQgZ2Fpbi4KKyAg
ICAgICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhBKkEsIDAuMCwgMC4wLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDEuMCwgMC4wLCAwLjApOworICAgIH0gZWxzZSBpZiAo
ZnJlcXVlbmN5ID4gMCkgeworICAgICAgICBkb3VibGUgdzAgPSBwaURvdWJsZSAqIGZyZXF1ZW5j
eTsKIAotICAgIGRvdWJsZSBhUGx1c09uZSA9IEEgKyAxOwotICAgIGRvdWJsZSBhTWludXNPbmUg
PSBBIC0gMTsKKyAgICAgICAgZG91YmxlIFMgPSAxOyAvLyBmaWx0ZXIgc2xvcGUgKDEgaXMgbWF4
IHZhbHVlKQorICAgICAgICBkb3VibGUgYWxwaGEgPSAwLjUgKiBzaW4odzApICogc3FydCgoQSAr
IDEgLyBBKSAqICgxIC8gUyAtIDEpICsgMik7CisKKyAgICAgICAgZG91YmxlIGsgPSBjb3ModzAp
OworICAgICAgICBkb3VibGUgazIgPSAyICogc3FydChBKSAqIGFscGhhOworCisgICAgICAgIGRv
dWJsZSBhUGx1c09uZSA9IEEgKyAxOworICAgICAgICBkb3VibGUgYU1pbnVzT25lID0gQSAtIDE7
CiAgICAgCi0gICAgZG91YmxlIGIwID0gQSAqIChhUGx1c09uZSAtIGFNaW51c09uZSAqIGsgKyBr
Mik7Ci0gICAgZG91YmxlIGIxID0gMiAqIEEgKiAoYU1pbnVzT25lIC0gYVBsdXNPbmUgKiBrKTsK
LSAgICBkb3VibGUgYjIgPSBBICogKGFQbHVzT25lIC0gYU1pbnVzT25lICogayAtIGsyKTsKLSAg
ICBkb3VibGUgYTAgPSBhUGx1c09uZSArIGFNaW51c09uZSAqIGsgKyBrMjsKLSAgICBkb3VibGUg
YTEgPSAtMiAqIChhTWludXNPbmUgKyBhUGx1c09uZSAqIGspOwotICAgIGRvdWJsZSBhMiA9IGFQ
bHVzT25lICsgYU1pbnVzT25lICogayAtIGsyOwotCi0gICAgc2V0Tm9ybWFsaXplZENvZWZmaWNp
ZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAgICAgICAgZG91YmxlIGIwID0gQSAqIChh
UGx1c09uZSAtIGFNaW51c09uZSAqIGsgKyBrMik7CisgICAgICAgIGRvdWJsZSBiMSA9IDIgKiBB
ICogKGFNaW51c09uZSAtIGFQbHVzT25lICogayk7CisgICAgICAgIGRvdWJsZSBiMiA9IEEgKiAo
YVBsdXNPbmUgLSBhTWludXNPbmUgKiBrIC0gazIpOworICAgICAgICBkb3VibGUgYTAgPSBhUGx1
c09uZSArIGFNaW51c09uZSAqIGsgKyBrMjsKKyAgICAgICAgZG91YmxlIGExID0gLTIgKiAoYU1p
bnVzT25lICsgYVBsdXNPbmUgKiBrKTsKKyAgICAgICAgZG91YmxlIGEyID0gYVBsdXNPbmUgKyBh
TWludXNPbmUgKiBrIC0gazI7CisKKyAgICAgICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhi
MCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXaGVuIGZy
ZXF1ZW5jeSBpcyAwLCB0aGUgei10cmFuc2Zvcm0gaXMgMS4KKyAgICAgICAgc2V0Tm9ybWFsaXpl
ZENvZWZmaWNpZW50cygxLjAsIDAuMCwgMC4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDEuMCwgMC4wLCAwLjApOworICAgIH0KIH0KIAogdm9pZCBCaXF1YWQ6OnNldEhpZ2hT
aGVsZlBhcmFtcyhkb3VibGUgZnJlcXVlbmN5LCBkb3VibGUgZGJHYWluKQogewotICAgIGRvdWJs
ZSB3MCA9IHBpRG91YmxlICogZnJlcXVlbmN5OworICAgIC8vIENsaXAgZnJlcXVlbmNpZXMgdG8g
YmV0d2VlbiAwIGFuZCAxLCBpbmNsdXNpdmUuCisgICAgZnJlcXVlbmN5ID0gc3RkOjptYXgoMC4w
LCBzdGQ6Om1pbihmcmVxdWVuY3ksIDEuMCkpOwogCiAgICAgZG91YmxlIEEgPSBwb3coMTAuMCwg
ZGJHYWluIC8gNDApOwotICAgIGRvdWJsZSBTID0gMTsgLy8gZmlsdGVyIHNsb3BlICgxIGlzIG1h
eCB2YWx1ZSkKLSAgICBkb3VibGUgYWxwaGEgPSAwLjUgKiBzaW4odzApICogc3FydCgoQSArIDEg
LyBBKSAqICgxIC8gUyAtIDEpICsgMik7CiAKLSAgICBkb3VibGUgayA9IGNvcyh3MCk7Ci0gICAg
ZG91YmxlIGsyID0gMiAqIHNxcnQoQSkgKiBhbHBoYTsKKyAgICBpZiAoZnJlcXVlbmN5ID09IDEp
IHsKKyAgICAgICAgLy8gVGhlIHotdHJhbnNmb3JtIGlzIDEuCisgICAgICAgIHNldE5vcm1hbGl6
ZWRDb2VmZmljaWVudHMoMS4wLCAwLjAsIDAuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAxLjAsIDAuMCwgMC4wKTsKKyAgICB9IGVsc2UgaWYgKGZyZXF1ZW5jeSA+IDApIHsK
KyAgICAgICAgZG91YmxlIHcwID0gcGlEb3VibGUgKiBmcmVxdWVuY3k7CisKKyAgICAgICAgZG91
YmxlIFMgPSAxOyAvLyBmaWx0ZXIgc2xvcGUgKDEgaXMgbWF4IHZhbHVlKQorICAgICAgICBkb3Vi
bGUgYWxwaGEgPSAwLjUgKiBzaW4odzApICogc3FydCgoQSArIDEgLyBBKSAqICgxIC8gUyAtIDEp
ICsgMik7CiAKLSAgICBkb3VibGUgYVBsdXNPbmUgPSBBICsgMTsKLSAgICBkb3VibGUgYU1pbnVz
T25lID0gQSAtIDE7CisgICAgICAgIGRvdWJsZSBrID0gY29zKHcwKTsKKyAgICAgICAgZG91Ymxl
IGsyID0gMiAqIHNxcnQoQSkgKiBhbHBoYTsKKworICAgICAgICBkb3VibGUgYVBsdXNPbmUgPSBB
ICsgMTsKKyAgICAgICAgZG91YmxlIGFNaW51c09uZSA9IEEgLSAxOwogICAgIAotICAgIGRvdWJs
ZSBiMCA9IEEgKiAoYVBsdXNPbmUgKyBhTWludXNPbmUgKiBrICsgazIpOwotICAgIGRvdWJsZSBi
MSA9IC0yICogQSAqIChhTWludXNPbmUgKyBhUGx1c09uZSAqIGspOwotICAgIGRvdWJsZSBiMiA9
IEEgKiAoYVBsdXNPbmUgKyBhTWludXNPbmUgKiBrIC0gazIpOwotICAgIGRvdWJsZSBhMCA9IGFQ
bHVzT25lIC0gYU1pbnVzT25lICogayArIGsyOwotICAgIGRvdWJsZSBhMSA9IDIgKiAoYU1pbnVz
T25lIC0gYVBsdXNPbmUgKiBrKTsKLSAgICBkb3VibGUgYTIgPSBhUGx1c09uZSAtIGFNaW51c09u
ZSAqIGsgLSBrMjsKLQotICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoYjAsIGIxLCBiMiwg
YTAsIGExLCBhMik7CisgICAgICAgIGRvdWJsZSBiMCA9IEEgKiAoYVBsdXNPbmUgKyBhTWludXNP
bmUgKiBrICsgazIpOworICAgICAgICBkb3VibGUgYjEgPSAtMiAqIEEgKiAoYU1pbnVzT25lICsg
YVBsdXNPbmUgKiBrKTsKKyAgICAgICAgZG91YmxlIGIyID0gQSAqIChhUGx1c09uZSArIGFNaW51
c09uZSAqIGsgLSBrMik7CisgICAgICAgIGRvdWJsZSBhMCA9IGFQbHVzT25lIC0gYU1pbnVzT25l
ICogayArIGsyOworICAgICAgICBkb3VibGUgYTEgPSAyICogKGFNaW51c09uZSAtIGFQbHVzT25l
ICogayk7CisgICAgICAgIGRvdWJsZSBhMiA9IGFQbHVzT25lIC0gYU1pbnVzT25lICogayAtIGsy
OworCisgICAgICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoYjAsIGIxLCBiMiwgYTAsIGEx
LCBhMik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2hlbiBmcmVxdWVuY3kgPSAwLCB0aGUg
ZmlsdGVyIGlzIGp1c3QgYSBnYWluLCBBXjIuCisgICAgICAgIHNldE5vcm1hbGl6ZWRDb2VmZmlj
aWVudHMoQSpBLCAwLjAsIDAuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAx
LjAsIDAuMCwgMC4wKTsKKyAgICB9CiB9CiAKIHZvaWQgQmlxdWFkOjpzZXRQZWFraW5nUGFyYW1z
KGRvdWJsZSBmcmVxdWVuY3ksIGRvdWJsZSBRLCBkb3VibGUgZGJHYWluKQogewotICAgIGRvdWJs
ZSB3MCA9IHBpRG91YmxlICogZnJlcXVlbmN5OwotICAgIGRvdWJsZSBhbHBoYSA9IHNpbih3MCkg
LyAoMiAqIFEpOwotICAgIGRvdWJsZSBBID0gcG93KDEwLjAsIGRiR2FpbiAvIDQwKTsKKyAgICAv
LyBDbGlwIGZyZXF1ZW5jaWVzIHRvIGJldHdlZW4gMCBhbmQgMSwgaW5jbHVzaXZlLgorICAgIGZy
ZXF1ZW5jeSA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oZnJlcXVlbmN5LCAxLjApKTsKIAotICAg
IGRvdWJsZSBrID0gY29zKHcwKTsKKyAgICAvLyBEb24ndCBsZXQgUSBnbyBuZWdhdGl2ZSwgd2hp
Y2ggY2F1c2VzIGFuIHVuc3RhYmxlIGZpbHRlci4KKyAgICBRID0gc3RkOjptYXgoMC4wLCBRKTsK
IAotICAgIGRvdWJsZSBiMCA9IDEgKyBhbHBoYSAqIEE7Ci0gICAgZG91YmxlIGIxID0gLTIgKiBr
OwotICAgIGRvdWJsZSBiMiA9IDEgLSBhbHBoYSAqIEE7Ci0gICAgZG91YmxlIGEwID0gMSArIGFs
cGhhIC8gQTsKLSAgICBkb3VibGUgYTEgPSAtMiAqIGs7Ci0gICAgZG91YmxlIGEyID0gMSAtIGFs
cGhhIC8gQTsKKyAgICBkb3VibGUgQSA9IHBvdygxMC4wLCBkYkdhaW4gLyA0MCk7CiAKLSAgICBz
ZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOworICAgIGlm
ICgoZnJlcXVlbmN5ID4gMCkgJiYgKGZyZXF1ZW5jeSA8IDEpKSB7CisgICAgICAgIGlmIChRID4g
MCkgeworICAgICAgICAgICAgZG91YmxlIHcwID0gcGlEb3VibGUgKiBmcmVxdWVuY3k7CisgICAg
ICAgICAgICBkb3VibGUgYWxwaGEgPSBzaW4odzApIC8gKDIgKiBRKTsKKworICAgICAgICAgICAg
ZG91YmxlIGsgPSBjb3ModzApOworCisgICAgICAgICAgICBkb3VibGUgYjAgPSAxICsgYWxwaGEg
KiBBOworICAgICAgICAgICAgZG91YmxlIGIxID0gLTIgKiBrOworICAgICAgICAgICAgZG91Ymxl
IGIyID0gMSAtIGFscGhhICogQTsKKyAgICAgICAgICAgIGRvdWJsZSBhMCA9IDEgKyBhbHBoYSAv
IEE7CisgICAgICAgICAgICBkb3VibGUgYTEgPSAtMiAqIGs7CisgICAgICAgICAgICBkb3VibGUg
YTIgPSAxIC0gYWxwaGEgLyBBOworCisgICAgICAgICAgICBzZXROb3JtYWxpemVkQ29lZmZpY2ll
bnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLy8gV2hlbiBRID0gMCwgdGhlIGFib3ZlIGZvcm11bGFzIGhhdmUgcHJvYmxlbXMuIElmIHdl
IGxvb2sgYXQKKyAgICAgICAgICAgIC8vIHRoZSB6LXRyYW5zZm9ybSwgd2UgY2FuIHNlZSB0aGF0
IHRoZSBsaW1pdCBhcyBRLT4wIGlzIEFeMiwgc28KKyAgICAgICAgICAgIC8vIHNldCB0aGUgZmls
dGVyIHRoYXQgd2F5LgorICAgICAgICAgICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhBICog
QSwgMC4wLCAwLjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMCwg
MC4wLCAwLjApOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2hlbiBmcmVx
dWVuY3kgaXMgMCBvciAxLCB0aGUgei10cmFuc2Zvcm0gaXMgMS4KKyAgICAgICAgc2V0Tm9ybWFs
aXplZENvZWZmaWNpZW50cygxLjAsIDAuMCwgMC4wLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDEuMCwgMC4wLCAwLjApOworICAgIH0KIH0KIAogdm9pZCBCaXF1YWQ6OnNldEFs
bHBhc3NQYXJhbXMoZG91YmxlIGZyZXF1ZW5jeSwgZG91YmxlIFEpCiB7Ci0gICAgZG91YmxlIHcw
ID0gcGlEb3VibGUgKiBmcmVxdWVuY3k7Ci0gICAgZG91YmxlIGFscGhhID0gc2luKHcwKSAvICgy
ICogUSk7Ci0KLSAgICBkb3VibGUgayA9IGNvcyh3MCk7Ci0KLSAgICBkb3VibGUgYjAgPSAxIC0g
YWxwaGE7Ci0gICAgZG91YmxlIGIxID0gLTIgKiBrOwotICAgIGRvdWJsZSBiMiA9IDEgKyBhbHBo
YTsKLSAgICBkb3VibGUgYTAgPSAxICsgYWxwaGE7Ci0gICAgZG91YmxlIGExID0gLTIgKiBrOwot
ICAgIGRvdWJsZSBhMiA9IDEgLSBhbHBoYTsKLQotICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVu
dHMoYjAsIGIxLCBiMiwgYTAsIGExLCBhMik7CisgICAgLy8gQ2xpcCBmcmVxdWVuY2llcyB0byBi
ZXR3ZWVuIDAgYW5kIDEsIGluY2x1c2l2ZS4KKyAgICBmcmVxdWVuY3kgPSBzdGQ6Om1heCgwLjAs
IHN0ZDo6bWluKGZyZXF1ZW5jeSwgMS4wKSk7CisKKyAgICAvLyBEb24ndCBsZXQgUSBnbyBuZWdh
dGl2ZSwgd2hpY2ggY2F1c2VzIGFuIHVuc3RhYmxlIGZpbHRlci4KKyAgICBRID0gc3RkOjptYXgo
MC4wLCBRKTsKKworICAgIGlmICgoZnJlcXVlbmN5ID4gMCkgJiYgKGZyZXF1ZW5jeSA8IDEpKSB7
CisgICAgICAgIGlmIChRID4gMCkgeworICAgICAgICAgICAgZG91YmxlIHcwID0gcGlEb3VibGUg
KiBmcmVxdWVuY3k7CisgICAgICAgICAgICBkb3VibGUgYWxwaGEgPSBzaW4odzApIC8gKDIgKiBR
KTsKKworICAgICAgICAgICAgZG91YmxlIGsgPSBjb3ModzApOworCisgICAgICAgICAgICBkb3Vi
bGUgYjAgPSAxIC0gYWxwaGE7CisgICAgICAgICAgICBkb3VibGUgYjEgPSAtMiAqIGs7CisgICAg
ICAgICAgICBkb3VibGUgYjIgPSAxICsgYWxwaGE7CisgICAgICAgICAgICBkb3VibGUgYTAgPSAx
ICsgYWxwaGE7CisgICAgICAgICAgICBkb3VibGUgYTEgPSAtMiAqIGs7CisgICAgICAgICAgICBk
b3VibGUgYTIgPSAxIC0gYWxwaGE7CisKKyAgICAgICAgICAgIHNldE5vcm1hbGl6ZWRDb2VmZmlj
aWVudHMoYjAsIGIxLCBiMiwgYTAsIGExLCBhMik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAvLyBXaGVuIFEgPSAwLCB0aGUgYWJvdmUgZm9ybXVsYXMgaGF2ZSBwcm9ibGVtcy4gSWYg
d2UgbG9vayBhdAorICAgICAgICAgICAgLy8gdGhlIHotdHJhbnNmb3JtLCB3ZSBjYW4gc2VlIHRo
YXQgdGhlIGxpbWl0IGFzIFEtPjAgaXMgLTEsIHNvCisgICAgICAgICAgICAvLyBzZXQgdGhlIGZp
bHRlciB0aGF0IHdheS4KKyAgICAgICAgICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoLTEu
MCwgMC4wLCAwLjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMCwg
MC4wLCAwLjApOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2hlbiBmcmVx
dWVuY3kgaXMgMCBvciAxLCB0aGUgei10cmFuc2Zvcm0gaXMgMS4KKyAgICAgICAgc2V0Tm9ybWFs
aXplZENvZWZmaWNpZW50cygxLjAsIDAuMCwgMC4wLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDEuMCwgMC4wLCAwLjApOworICAgIH0KIH0KIAogdm9pZCBCaXF1YWQ6OnNldE5v
dGNoUGFyYW1zKGRvdWJsZSBmcmVxdWVuY3ksIGRvdWJsZSBRKQogewotICAgIGRvdWJsZSB3MCA9
IHBpRG91YmxlICogZnJlcXVlbmN5OwotICAgIGRvdWJsZSBhbHBoYSA9IHNpbih3MCkgLyAoMiAq
IFEpOwotCi0gICAgZG91YmxlIGsgPSBjb3ModzApOwotCi0gICAgZG91YmxlIGIwID0gMTsKLSAg
ICBkb3VibGUgYjEgPSAtMiAqIGs7Ci0gICAgZG91YmxlIGIyID0gMTsKLSAgICBkb3VibGUgYTAg
PSAxICsgYWxwaGE7Ci0gICAgZG91YmxlIGExID0gLTIgKiBrOwotICAgIGRvdWJsZSBhMiA9IDEg
LSBhbHBoYTsKLQotICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoYjAsIGIxLCBiMiwgYTAs
IGExLCBhMik7CisgICAgLy8gQ2xpcCBmcmVxdWVuY2llcyB0byBiZXR3ZWVuIDAgYW5kIDEsIGlu
Y2x1c2l2ZS4KKyAgICBmcmVxdWVuY3kgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKGZyZXF1ZW5j
eSwgMS4wKSk7CisKKyAgICAvLyBEb24ndCBsZXQgUSBnbyBuZWdhdGl2ZSwgd2hpY2ggY2F1c2Vz
IGFuIHVuc3RhYmxlIGZpbHRlci4KKyAgICBRID0gc3RkOjptYXgoMC4wLCBRKTsKKworICAgIGlm
ICgoZnJlcXVlbmN5ID4gMCkgJiYgKGZyZXF1ZW5jeSA8IDEpKSB7CisgICAgICAgIGlmIChRID4g
MCkgeworICAgICAgICAgICAgZG91YmxlIHcwID0gcGlEb3VibGUgKiBmcmVxdWVuY3k7CisgICAg
ICAgICAgICBkb3VibGUgYWxwaGEgPSBzaW4odzApIC8gKDIgKiBRKTsKKworICAgICAgICAgICAg
ZG91YmxlIGsgPSBjb3ModzApOworCisgICAgICAgICAgICBkb3VibGUgYjAgPSAxOworICAgICAg
ICAgICAgZG91YmxlIGIxID0gLTIgKiBrOworICAgICAgICAgICAgZG91YmxlIGIyID0gMTsKKyAg
ICAgICAgICAgIGRvdWJsZSBhMCA9IDEgKyBhbHBoYTsKKyAgICAgICAgICAgIGRvdWJsZSBhMSA9
IC0yICogazsKKyAgICAgICAgICAgIGRvdWJsZSBhMiA9IDEgLSBhbHBoYTsKKworICAgICAgICAg
ICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdoZW4gUSA9IDAsIHRoZSBhYm92ZSBmb3Jt
dWxhcyBoYXZlIHByb2JsZW1zLiBJZiB3ZSBsb29rIGF0CisgICAgICAgICAgICAvLyB0aGUgei10
cmFuc2Zvcm0sIHdlIGNhbiBzZWUgdGhhdCB0aGUgbGltaXQgYXMgUS0+MCBpcyAwLCBzbworICAg
ICAgICAgICAgLy8gc2V0IHRoZSBmaWx0ZXIgdGhhdCB3YXkuCisgICAgICAgICAgICBzZXROb3Jt
YWxpemVkQ29lZmZpY2llbnRzKDAuMCwgMC4wLCAwLjAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDEuMCwgMC4wLCAwLjApOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gV2hlbiBmcmVxdWVuY3kgaXMgMCBvciAxLCB0aGUgei10cmFuc2Zvcm0gaXMg
MS4KKyAgICAgICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cygxLjAsIDAuMCwgMC4wLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMCwgMC4wLCAwLjApOworICAgIH0KIH0K
IAogdm9pZCBCaXF1YWQ6OnNldEJhbmRwYXNzUGFyYW1zKGRvdWJsZSBmcmVxdWVuY3ksIGRvdWJs
ZSBRKQogewotICAgIGRvdWJsZSB3MCA9IHBpRG91YmxlICogZnJlcXVlbmN5OwotICAgIGRvdWJs
ZSBhbHBoYSA9IHNpbih3MCkgLyAoMiAqIFEpOworICAgIC8vIE5vIG5lZ2F0aXZlIGZyZXF1ZW5j
aWVzIGFsbG93ZWQuCisgICAgZnJlcXVlbmN5ID0gc3RkOjptYXgoMC4wLCBmcmVxdWVuY3kpOwog
Ci0gICAgZG91YmxlIGsgPSBjb3ModzApOworICAgIC8vIERvbid0IGxldCBRIGdvIG5lZ2F0aXZl
LCB3aGljaCBjYXVzZXMgYW4gdW5zdGFibGUgZmlsdGVyLgorICAgIFEgPSBzdGQ6Om1heCgwLjAs
IFEpOworCisgICAgaWYgKChmcmVxdWVuY3kgPiAwKSAmJiAoZnJlcXVlbmN5IDwgMSkpIHsKKyAg
ICAgIGRvdWJsZSB3MCA9IHBpRG91YmxlICogZnJlcXVlbmN5OworICAgICAgaWYgKFEgPiAwKSB7
CisgICAgICAgIGRvdWJsZSBhbHBoYSA9IHNpbih3MCkgLyAoMiAqIFEpOworCisgICAgICAgIGRv
dWJsZSBrID0gY29zKHcwKTsKICAgICAKLSAgICBkb3VibGUgYjAgPSBhbHBoYTsKLSAgICBkb3Vi
bGUgYjEgPSAwOwotICAgIGRvdWJsZSBiMiA9IC1hbHBoYTsKLSAgICBkb3VibGUgYTAgPSAxICsg
YWxwaGE7Ci0gICAgZG91YmxlIGExID0gLTIgKiBrOwotICAgIGRvdWJsZSBhMiA9IDEgLSBhbHBo
YTsKLQotICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoYjAsIGIxLCBiMiwgYTAsIGExLCBh
Mik7CisgICAgICAgIGRvdWJsZSBiMCA9IGFscGhhOworICAgICAgICBkb3VibGUgYjEgPSAwOwor
ICAgICAgICBkb3VibGUgYjIgPSAtYWxwaGE7CisgICAgICAgIGRvdWJsZSBhMCA9IDEgKyBhbHBo
YTsKKyAgICAgICAgZG91YmxlIGExID0gLTIgKiBrOworICAgICAgICBkb3VibGUgYTIgPSAxIC0g
YWxwaGE7CisKKyAgICAgICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBh
MCwgYTEsIGEyKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdoZW4gUSA9IDAsIHRoZSBh
Ym92ZSBmb3JtdWxhcyBoYXZlIHByb2JsZW1zLiBJZiB3ZSBsb29rIGF0CisgICAgICAgIC8vIHRo
ZSB6LXRyYW5zZm9ybSwgd2UgY2FuIHNlZSB0aGF0IHRoZSBsaW1pdCBhcyBRLT4wIGlzIDEsIHNv
CisgICAgICAgIC8vIHNldCB0aGUgZmlsdGVyIHRoYXQgd2F5LgorICAgICAgICBzZXROb3JtYWxp
emVkQ29lZmZpY2llbnRzKDEuMCwgMC4wLCAwLjAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMS4wLCAwLjAsIDAuMCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gV2hlbiB0aGUgY3V0b2ZmIGlzIHplcm8sIHRoZSB6LXRyYW5zZm9ybSBhcHByb2FjaGVzIDAs
IGlmIFEKKyAgICAgICAgLy8gPiAwLiBXaGVuIGJvdGggUSBhbmQgY3V0b2ZmIGFyZSB6ZXJvLCB0
aGUgei10cmFuc2Zvcm0gaXMKKyAgICAgICAgLy8gcHJldHR5IG11Y2ggdW5kZWZpbmVkLiBXaGF0
IHNob3VsZCB3ZSBkbyBpbiB0aGlzIGNhc2U/CisgICAgICAgIC8vIEZvciBub3csIGp1c3QgbWFr
ZSB0aGUgZmlsdGVyIDAuIFdoZW4gdGhlIGN1dG9mZiBpcyAxLCB0aGUKKyAgICAgICAgLy8gei10
cmFuc2Zvcm0gYWxzbyBhcHByb2FjaGVzIDAuCisgICAgICBzZXROb3JtYWxpemVkQ29lZmZpY2ll
bnRzKDAuMCwgMC4wLCAwLjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMCwg
MC4wLCAwLjApOworICAgIH0KIH0KIAogdm9pZCBCaXF1YWQ6OnNldFplcm9Qb2xlUGFpcnMoY29u
c3QgQ29tcGxleCAmemVybywgY29uc3QgQ29tcGxleCAmcG9sZSkKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0NGE1YmJmNTNh
OTdkMmM4NTA0Y2JhZjlmNDhkNGI1MWNkOTU4ZjM1Li5hNjE0YWVlOGI5MTZhM2RmOTFmOTFmNTAy
NDk0OTFiZTdkYWM1YjE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTItMDEtMTMgIFJheW1v
bmQgVG95ICA8cnRveUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ2hlY2sgcGFyYW1ldGVycyB0
byBiaXF1YWQgZmlsdGVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzE0MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAg
ICAgICAgCisgICAgICAgICogd2ViYXVkaW8vYmlxdWFkLWFsbHBhc3MtZXhwZWN0ZWQudHh0OiBB
ZGRlZAorICAgICAgICAqIHdlYmF1ZGlvL2JpcXVhZC1hbGxwYXNzLmh0bWw6IEFkZGVkCisgICAg
ICAgICogd2ViYXVkaW8vYmlxdWFkLWJhbmRwYXNzLWV4cGVjdGVkLnR4dDogQWRkZWQKKyAgICAg
ICAgKiB3ZWJhdWRpby9iaXF1YWQtYmFuZHBhc3MuaHRtbDogQWRkZWQKKyAgICAgICAgKiB3ZWJh
dWRpby9iaXF1YWQtaGlnaHBhc3MtZXhwZWN0ZWQudHh0OiBBZGRlZAorICAgICAgICAqIHdlYmF1
ZGlvL2JpcXVhZC1oaWdocGFzcy5odG1sOiBBZGRlZAorICAgICAgICAqIHdlYmF1ZGlvL2JpcXVh
ZC1oaWdoc2hlbGYtZXhwZWN0ZWQudHh0OiBBZGRlZAorICAgICAgICAqIHdlYmF1ZGlvL2JpcXVh
ZC1oaWdoc2hlbGYuaHRtbDogQWRkZWQKKyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWQtbG93cGFz
cy1leHBlY3RlZC50eHQ6IEFkZGVkCisgICAgICAgICogd2ViYXVkaW8vYmlxdWFkLWxvd3Bhc3Mu
aHRtbDogQWRkZWQKKyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWQtbG93c2hlbGYtZXhwZWN0ZWQu
dHh0OiBBZGRlZAorICAgICAgICAqIHdlYmF1ZGlvL2JpcXVhZC1sb3dzaGVsZi5odG1sOiBBZGRl
ZAorICAgICAgICAqIHdlYmF1ZGlvL2JpcXVhZC1ub3RjaC1leHBlY3RlZC50eHQ6IEFkZGVkCisg
ICAgICAgICogd2ViYXVkaW8vYmlxdWFkLW5vdGNoLmh0bWw6IEFkZGVkCisgICAgICAgICogd2Vi
YXVkaW8vYmlxdWFkLXBlYWtpbmctZXhwZWN0ZWQudHh0OiBBZGRlZAorICAgICAgICAqIHdlYmF1
ZGlvL2JpcXVhZC1wZWFraW5nLmh0bWw6IEFkZGVkCisgICAgICAgICogd2ViYXVkaW8vcmVzb3Vy
Y2VzL2JpcXVhZC10ZXN0aW5nLmpzOiBBZGRlZAorCiAyMDEyLTAxLTE2ICBSb2xhbmQgU3RlaW5l
ciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQ6bW9y
ZSBDaHJvbWl1bSBMaW51eCByZWJhc2VsaW5pbmcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmF1ZGlvL2JpcXVhZC1hbGxwYXNzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlv
L2JpcXVhZC1hbGxwYXNzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40Mjc4ODczOTE5MGIxNWYz
YzFiYjMxZDkwOTRjNTQxOGM5ZGUxOGY2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vYmlxdWFkLWFsbHBhc3MtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK1Rl
c3RzIEJpcXVhZCBhbGxwYXNzIGZpbHRlci4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CitQQVNTIEFsbHBhc3MgZmlsdGVyIHJlc3BvbnNlIGlzIGNvcnJlY3QuCitQQVNTIFRlc3Qgc2ln
bmFsIHdhcyBjb3JyZWN0bHkgZmlsdGVyZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8v
YmlxdWFkLWFsbHBhc3MuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1hbGxwYXNz
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMmNjYzIzNzM2NGY1YjIyZTExNmE5ZWQwZjM2NTIwNTIxNmEzZmQ2
ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1hbGxwYXNz
Lmh0bWwKQEAgLTAsMCArMSw1MSBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxodG1sPgorPGhlYWQ+
Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYmlxdWFkLXRlc3RpbmcuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKworPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwv
ZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigi
VGVzdHMgQmlxdWFkIGFsbHBhc3MgZmlsdGVyLiIpOworCitmdW5jdGlvbiBydW5UZXN0KCkgewor
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7CisgICAgfQorICAgIAorICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0g
dHJ1ZTsKKyAgICAgICAgCisgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dC4KKyAg
ICB2YXIgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgc2FtcGxlUmF0ZSAqIHJl
bmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOworCisgICAgLy8gRXhwZXJpbWVudGFsbHkg
ZGV0ZXJtaW5lZCB2YWx1ZS4KKyAgICB2YXIgbWF4QWxsb3dlZEVycm9yID0gNC4wZS04OworCisg
ICAgLy8gRHVtbXkgZmlsdGVyIHRvIGdldCBmaWx0ZXIgdHlwZSBjb25zdGFudAorICAgIHZhciBm
ID0gY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTsKKworICAgIHZhciBmaWx0ZXJQYXJhbWV0
ZXJzID0gW3tjdXRvZmYgOiAwLCAgICBxIDogMTAsIGdhaW4gOiAxIH0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAge2N1dG9mZiA6IDEsICAgIHEgOiAxMCwgZ2FpbiA6IDEgfSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogLjUsICAgcSA6ICAwLCBnYWluIDogMSB9
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAwLjI1LCBxIDogMTAsIGdh
aW4gOiAxIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBdOworICAgIGNyZWF0ZVRlc3RB
bmRSdW4oY29udGV4dCwgZi5BTExQQVNTLCBmaWx0ZXJQYXJhbWV0ZXJzLCBtYXhBbGxvd2VkRXJy
b3IpOworfQorCitydW5UZXN0KCk7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3Nj
cmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJhdWRpby9iaXF1YWQtYmFuZHBhc3MtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vYmlxdWFkLWJhbmRwYXNzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NWZhYmJkMWM2YzA5
ODJjYWZlMDFmMjlhNjBjYWMwMzAwYmMxMDk2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vYmlxdWFkLWJhbmRwYXNzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBA
CitUZXN0cyBCaXF1YWQgYmFuZHBhc3MgZmlsdGVyLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKK1BBU1MgQmFuZHBhc3MgZmlsdGVyIHJlc3BvbnNlIGlzIGNvcnJlY3QuCitQQVNTIFRl
c3Qgc2lnbmFsIHdhcyBjb3JyZWN0bHkgZmlsdGVyZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vYmlxdWFkLWJhbmRwYXNzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQt
YmFuZHBhc3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZTUzMWE4OWMxMzM4YmQzMTIxOTI3YmNjODIwYTQ3
YjhiZGU0ZjkxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFk
LWJhbmRwYXNzLmh0bWwKQEAgLTAsMCArMSw1MiBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxodG1s
PgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRl
c3RpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYmlxdWFkLXRl
c3RpbmcuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKworPGRpdiBpZD0iZGVzY3Jp
cHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNj
cmlwdGlvbigiVGVzdHMgQmlxdWFkIGJhbmRwYXNzIGZpbHRlci4iKTsKKworZnVuY3Rpb24gcnVu
VGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKyAgICAKKyAgICB3aW5kb3cuanNUZXN0
SXNBc3luYyA9IHRydWU7CisgICAgICAgIAorICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNv
bnRleHQuCisgICAgdmFyIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDIsIHNhbXBs
ZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsKKworICAgIC8vIEV4cGVy
aW1lbnRhbGx5IGRldGVybWluZSB2YWx1ZS4KKyAgICB2YXIgbWF4QWxsb3dlZEVycm9yID0gMi4z
ZS04OworCisgICAgLy8gRHVtbXkgZmlsdGVyIHRvIGdldCBmaWx0ZXIgdHlwZSBjb25zdGFudAor
ICAgIHZhciBmID0gY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTsKKworICAgIC8vIFRoZSBm
aWx0ZXJzIHdlIHdhbnQgdG8gdGVzdC4KKyAgICB2YXIgZmlsdGVyUGFyYW1ldGVycyA9IFt7Y3V0
b2ZmIDogMCwgICAgcSA6IDAsIGdhaW4gOiAxIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAge2N1dG9mZiA6IDEsICAgIHEgOiAwLCBnYWluIDogMSB9LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHtjdXRvZmYgOiAwLjUsICBxIDogMCwgZ2FpbiA6IDEgfSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogMC4yNSwgcSA6IDEsIGdhaW4gOiAxIH0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBdOworICAgIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwg
Zi5CQU5EUEFTUywgZmlsdGVyUGFyYW1ldGVycywgbWF4QWxsb3dlZEVycm9yKTsKK30KKworcnVu
VGVzdCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxzY3Jp
cHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFk
LWhpZ2hwYXNzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1oaWdo
cGFzcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGIyYWU4MzAyZDlkYjllNWYyMzg1YWI0ZjY4
NTAyNzBmZDFlYzE5OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Jp
cXVhZC1oaWdocGFzcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorVGVzdHMgQmlxdWFk
IGhpZ2hwYXNzIGZpbHRlci4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIEhp
Z2hwYXNzIGZpbHRlciByZXNwb25zZSBpcyBjb3JyZWN0LgorUEFTUyBUZXN0IHNpZ25hbCB3YXMg
Y29ycmVjdGx5IGZpbHRlcmVkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1o
aWdocGFzcy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWhpZ2hwYXNzLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNzEyOWZkMjc3MGY2ZmJiYzBkMTljZTdlODkzYmQ4ODVjMThmM2E5ZQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1oaWdocGFzcy5odG1s
CkBAIC0wLDAgKzEsNTEgQEAKKzwhRE9DVFlQRSBodG1sPgorCis8aHRtbD4KKzxoZWFkPgorPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0
eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2JpcXVhZC10ZXN0aW5nLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisKKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4K
KzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3Rz
IEJpcXVhZCBoaWdocGFzcyBmaWx0ZXIuIik7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKKyAgICB9CisgICAgCisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVl
OworICAgICAgICAKKyAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBjb250ZXh0LgorICAgIHZh
ciBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1wbGVSYXRlICogcmVuZGVy
TGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisKKyAgICAvLyBFeHBlcmltZW50YWxseSBkZXRl
cm1pbmVkIHZhbHVlCisgICAgdmFyIG1heEFsbG93ZWRFcnJvciA9IDIuOGUtODsKKworICAgIC8v
IER1bW15IGZpbHRlciB0byBnZXQgZmlsdGVyIHR5cGUgY29uc3RhbnQKKyAgICB2YXIgZiA9IGNv
bnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7CisKKyAgICAvLyBUaGUgZmlsdGVycyB3ZSB3YW50
IHRvIHRlc3QuCisgICAgdmFyIGZpbHRlclBhcmFtZXRlcnMgPSBbe2N1dG9mZiA6IDAsICAgIHEg
OiAxLCBnYWluIDogMSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAx
LCAgICBxIDogMSwgZ2FpbiA6IDEgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0
b2ZmIDogMC4yNSwgcSA6IDEsIGdhaW4gOiAxIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBdOworICAgIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgZi5ISUdIUEFTUywgZmlsdGVyUGFy
YW1ldGVycywgbWF4QWxsb3dlZEVycm9yKTsKK30KKworcnVuVGVzdCgpOworc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWhpZ2hzaGVsZi1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtaGlnaHNoZWxmLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hYWY3NTJjOTIyN2MxMzEzYTY1MmE0NjZjNTY2N2FlNGNlZDY3Y2Y5Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWhpZ2hzaGVsZi1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorVGVzdHMgQmlxdWFkIGhpZ2hzaGVsZiBmaWx0ZXIu
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBIaWdoc2hlbGYgZmlsdGVyIHJl
c3BvbnNlIGlzIGNvcnJlY3QuCitQQVNTIFRlc3Qgc2lnbmFsIHdhcyBjb3JyZWN0bHkgZmlsdGVy
ZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWhpZ2hzaGVsZi5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWhpZ2hzaGVsZi5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVh
MDBlMTQ3NDRlZDE4NzM2OGNhN2M1NTdhNDE5N2Y2MmVkMzk3NmUKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtaGlnaHNoZWxmLmh0bWwKQEAgLTAsMCArMSw1
MSBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvYmlxdWFkLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorCis8Ym9keT4KKworPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgQmlxdWFkIGhpZ2hz
aGVsZiBmaWx0ZXIuIik7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
KyAgICB9CisgICAgCisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworICAgICAgICAK
KyAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBjb250ZXh0LgorICAgIHZhciBjb250ZXh0ID0g
bmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1wbGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vjb25k
cywgc2FtcGxlUmF0ZSk7CisKKyAgICAvLyBFeHBlcmltZW50YWxseSBkZXRlcm1pbmVkIHZhbHVl
CisgICAgdmFyIG1heEFsbG93ZWRFcnJvciA9IDUuN2UtODsKKworICAgIC8vIER1bW15IGZpbHRl
ciB0byBnZXQgZmlsdGVyIHR5cGUgY29uc3RhbnQKKyAgICB2YXIgZiA9IGNvbnRleHQuY3JlYXRl
QmlxdWFkRmlsdGVyKCk7CisKKyAgICAvLyBUaGUgZmlsdGVycyB3ZSB3YW50IHRvIHRlc3QuCisg
ICAgdmFyIGZpbHRlclBhcmFtZXRlcnMgPSBbe2N1dG9mZiA6IDAsICAgIHEgOiAxMCwgZ2FpbiA6
IDEwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6IDEsICAgIHEgOiAx
MCwgZ2FpbiA6IDEwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6IDAu
MjUsIHEgOiAxMCwgZ2FpbiA6IDEwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBdOwor
ICAgIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgZi5ISUdIU0hFTEYsIGZpbHRlclBhcmFtZXRl
cnMsIG1heEFsbG93ZWRFcnJvcik7Cit9CisKK3J1blRlc3QoKTsKK3N1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7CisKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1sb3dwYXNzLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1sb3dwYXNzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lM2IwNTRjYmUwNDg5MjNlMTgyYTc3NDQxNDgwYTQwZGI3OTE5NmRkCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWxvd3Bhc3MtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMTAgQEAKK1Rlc3RzIEJpcXVhZCBsb3dwYXNzIGZpbHRlci4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCitQQVNTIExvd3Bhc3MgZmlsdGVyIHJlc3BvbnNlIGlzIGNvcnJl
Y3QuCitQQVNTIFRlc3Qgc2lnbmFsIHdhcyBjb3JyZWN0bHkgZmlsdGVyZWQuCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWxvd3Bhc3MuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1
ZGlvL2JpcXVhZC1sb3dwYXNzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTJhYzcyYTdlN2QzMDI5NTgwOWNl
ZWM0MGI4ODAxN2FkOWVkZTI3NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1
ZGlvL2JpcXVhZC1sb3dwYXNzLmh0bWwKQEAgLTAsMCArMSw1MSBAQAorPCFET0NUWVBFIGh0bWw+
CisKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
YmlxdWFkLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKworPGRpdiBp
ZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3Jp
cHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgQmlxdWFkIGxvd3Bhc3MgZmlsdGVyLiIpOworCitmdW5j
dGlvbiBydW5UZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorICAgIAorICAgIHdpbmRv
dy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKyAgICAgICAgCisgICAgLy8gQ3JlYXRlIG9mZmxpbmUg
YXVkaW8gY29udGV4dC4KKyAgICB2YXIgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQo
Miwgc2FtcGxlUmF0ZSAqIHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOworCisgICAg
Ly8gRXhwZXJpbWVudGFsbHkgZGV0ZXJtaW5lZCB2YWx1ZQorICAgIHZhciBtYXhBbGxvd2VkRXJy
b3IgPSAxLjVlLTg7CisKKyAgICAvLyBEdW1teSBmaWx0ZXIgdG8gZ2V0IGZpbHRlciB0eXBlIGNv
bnN0YW50CisgICAgdmFyIGYgPSBjb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpOworCisgICAg
Ly8gVGhlIGZpbHRlcnMgd2Ugd2FudCB0byB0ZXN0LgorICAgIHZhciBmaWx0ZXJQYXJhbWV0ZXJz
ID0gW3tjdXRvZmYgOiAwLCAgICBxIDogMSwgZ2FpbiA6IDEgfSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7Y3V0b2ZmIDogMSwgICAgcSA6IDEsIGdhaW4gOiAxIH0sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAge2N1dG9mZiA6IDAuMjUsIHEgOiAxLCBnYWluIDogMSB9LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXTsKKyAgICBjcmVhdGVUZXN0QW5kUnVuKGNvbnRleHQs
IGYuTE9XUEFTUywgZmlsdGVyUGFyYW1ldGVycywgbWF4QWxsb3dlZEVycm9yKTsKK30KKworcnVu
VGVzdCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxzY3Jp
cHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFk
LWxvd3NoZWxmLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1sb3dz
aGVsZi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODM0MGQ0NWE3NDg3YTY4OGM5NTAxZDdhNjkw
ZDY0ZWQ3NmFjNmI2NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Jp
cXVhZC1sb3dzaGVsZi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorVGVzdHMgQmlxdWFk
IGxvd3NoZWxmIGZpbHRlci4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIExv
d3NoZWxmIGZpbHRlciByZXNwb25zZSBpcyBjb3JyZWN0LgorUEFTUyBUZXN0IHNpZ25hbCB3YXMg
Y29ycmVjdGx5IGZpbHRlcmVkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1s
b3dzaGVsZi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWxvd3NoZWxmLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNTY4NDI4ZDAzNmY3OWI0YjEyMzY4YmE3NDcxMGY5Yjg0MzdjMzU3ZgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1sb3dzaGVsZi5odG1s
CkBAIC0wLDAgKzEsNTEgQEAKKzwhRE9DVFlQRSBodG1sPgorCis8aHRtbD4KKzxoZWFkPgorPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0
eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2JpcXVhZC10ZXN0aW5nLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisKKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4K
KzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3Rz
IEJpcXVhZCBsb3dzaGVsZiBmaWx0ZXIuIik7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKKyAgICB9CisgICAgCisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVl
OworICAgICAgICAKKyAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBjb250ZXh0LgorICAgIHZh
ciBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1wbGVSYXRlICogcmVuZGVy
TGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisKKyAgICAvLyBFeHBlcmltZW50YWxseSBkZXRl
cm1pbmVkIHZhbHVlCisgICAgdmFyIG1heEFsbG93ZWRFcnJvciA9IDMuOWUtODsKKworICAgIC8v
IER1bW15IGZpbHRlciB0byBnZXQgZmlsdGVyIHR5cGUgY29uc3RhbnQKKyAgICB2YXIgZiA9IGNv
bnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7CisKKyAgICAvLyBUaGUgZmlsdGVycyB3ZSB3YW50
IHRvIHRlc3QuCisgICAgdmFyIGZpbHRlclBhcmFtZXRlcnMgPSBbe2N1dG9mZiA6IDAsICAgIHEg
OiAxMCwgZ2FpbiA6IDEwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6
IDEsICAgIHEgOiAxMCwgZ2FpbiA6IDEwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
e2N1dG9mZiA6IDAuMjUsIHEgOiAxMCwgZ2FpbiA6IDEwIH0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBdOworICAgIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgZi5MT1dTSEVMRiwgZmls
dGVyUGFyYW1ldGVycywgbWF4QWxsb3dlZEVycm9yKTsKK30KKworcnVuVGVzdCgpOworc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLW5vdGNoLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1ub3RjaC1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMGU0NGRjNGMyNWMzNzVkZTM4MTBmYTM1YTU5ZDc3OGIyYjlmZTZiOQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1ub3RjaC1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwxMCBAQAorVGVzdHMgQmlxdWFkIG5vdGNoIGZpbHRlci4KKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIE5vdGNoIGZpbHRlciByZXNwb25zZSBpcyBjb3Jy
ZWN0LgorUEFTUyBUZXN0IHNpZ25hbCB3YXMgY29ycmVjdGx5IGZpbHRlcmVkLgorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1ub3RjaC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vYmlxdWFkLW5vdGNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmMyOGVjNWVlNTljZmI2N2YwY2NkOThh
ODhiNmNhN2FlM2NhYjJkOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlv
L2JpcXVhZC1ub3RjaC5odG1sCkBAIC0wLDAgKzEsNTEgQEAKKzwhRE9DVFlQRSBodG1sPgorCis8
aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRp
by10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2JpcXVh
ZC10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisKKzxkaXYgaWQ9ImRl
c2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0Pgor
ZGVzY3JpcHRpb24oIlRlc3RzIEJpcXVhZCBub3RjaCBmaWx0ZXIuIik7CisKK2Z1bmN0aW9uIHJ1
blRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisgICAgCisgICAgd2luZG93LmpzVGVz
dElzQXN5bmMgPSB0cnVlOworICAgICAgICAKKyAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBj
b250ZXh0LgorICAgIHZhciBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1w
bGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisKKyAgICAvLyBFeHBl
cmltZW50YWxseSBkZXRlcm1pbmVkIHZhbHVlCisgICAgdmFyIG1heEFsbG93ZWRFcnJvciA9IDIu
MGUtODsKKworICAgIC8vIER1bW15IGZpbHRlciB0byBnZXQgZmlsdGVyIHR5cGUgY29uc3RhbnQK
KyAgICB2YXIgZiA9IGNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7CisKKyAgICB2YXIgZmls
dGVyUGFyYW1ldGVycyA9IFt7Y3V0b2ZmIDogMCwgICAgcSA6IDEwLCBnYWluIDogMSB9LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAxLCAgICBxIDogMTAsIGdhaW4gOiAx
IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6IC41LCAgIHEgOiAgMCwg
Z2FpbiA6IDEgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogMC4yNSwg
cSA6IDEwLCBnYWluIDogMSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgXTsKKyAgICBj
cmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsIGYuTk9UQ0gsIGZpbHRlclBhcmFtZXRlcnMsIG1heEFs
bG93ZWRFcnJvcik7Cit9CisKK3J1blRlc3QoKTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7
CisKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1wZWFraW5nLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3dlYmF1ZGlvL2JpcXVhZC1wZWFraW5nLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMmE4ODAz
MmRmMmY4ZjMzMTAyMGE2ZDQ1YWM1Y2Q0ZDM1NjExMTBlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLXBlYWtpbmctZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MTAgQEAKK1Rlc3RzIEJpcXVhZCBwZWFraW5nIGZpbHRlci4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCitQQVNTIFBlYWtpbmcgZmlsdGVyIHJlc3BvbnNlIGlzIGNvcnJlY3QuCitQQVNT
IFRlc3Qgc2lnbmFsIHdhcyBjb3JyZWN0bHkgZmlsdGVyZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vYmlxdWFkLXBlYWtpbmcuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVh
ZC1wZWFraW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzQ0NzZkZjQzYzFiOGNhZmMwNGQyZjBhZmU4NDFi
YWIxMDlhZDIzMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVh
ZC1wZWFraW5nLmh0bWwKQEAgLTAsMCArMSw1MiBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxodG1s
PgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRl
c3RpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYmlxdWFkLXRl
c3RpbmcuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKworPGRpdiBpZD0iZGVzY3Jp
cHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNj
cmlwdGlvbigiVGVzdHMgQmlxdWFkIHBlYWtpbmcgZmlsdGVyLiIpOworCitmdW5jdGlvbiBydW5U
ZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorICAgIAorICAgIHdpbmRvdy5qc1Rlc3RJ
c0FzeW5jID0gdHJ1ZTsKKyAgICAgICAgCisgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29u
dGV4dC4KKyAgICB2YXIgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgc2FtcGxl
UmF0ZSAqIHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOworCisgICAgLy8gRXhwZXJp
bWVudGFsbHkgZGV0ZXJtaW5lZCB2YWx1ZQorICAgIHZhciBtYXhBbGxvd2VkRXJyb3IgPSA1Ljll
LTg7CisKKyAgICAvLyBEdW1teSBmaWx0ZXIgdG8gZ2V0IGZpbHRlciB0eXBlIGNvbnN0YW50Cisg
ICAgdmFyIGYgPSBjb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpOworCisgICAgLy8gVGhlIGZp
bHRlcnMgd2Ugd2FudCB0byB0ZXN0LgorICAgIHZhciBmaWx0ZXJQYXJhbWV0ZXJzID0gW3tjdXRv
ZmYgOiAwLCAgICBxIDogMTAsIGdhaW4gOiAxMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHtjdXRvZmYgOiAxLCAgICBxIDogMTAsIGdhaW4gOiAxMCB9LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHtjdXRvZmYgOiAuNSwgICBxIDogIDAsIGdhaW4gOiAxMCB9LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAwLjI1LCBxIDogMTAsIGdhaW4gOiAxMCB9
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgXTsKKyAgICBjcmVhdGVUZXN0QW5kUnVuKGNv
bnRleHQsIGYuUEVBS0lORywgZmlsdGVyUGFyYW1ldGVycywgbWF4QWxsb3dlZEVycm9yKTsKK30K
KworcnVuVGVzdCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+CisK
KzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8v
YmlxdWFkLXRlc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLXRl
c3QtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM1ZTZiZmFjMmU0MTQ1NjA5NWJiMTM1ZGVmYzhj
MzMxMTY0MzA2MjcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1
YWQtdGVzdC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMSBAQAorQ09OU09MRSBNRVNTQUdFOiBs
aW5lIDEyMjogYjAgPSAwLjQzMDk2Njc3NTI3NDk3NDk2CitUZXN0IGJpcXVhZCBmaWx0ZXIgcmVz
cG9uc2UKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitGQUlMIExvd3Bhc3MgZmlsdGVy
IHJlc3BvbnNlIGlzIGluY29ycmVjdC4gIE1heCBlcnIgPSAwLjg2MTkzMzU1MDU0OTk0OTkKK0ZB
SUwgVGVzdCBzaWduYWwgd2FzIG5vdCBjb3JyZWN0bHkgZmlsdGVyZWQuCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2JpcXVhZC10ZXN0aW5nLmpzIGIvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vcmVzb3VyY2VzL2JpcXVhZC10ZXN0aW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4M2E5ZGZm
ZDY0YjE2OTY5MTU0ZmVkODI4YjM1NTI2YzU3ZThkMTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYmlxdWFkLXRlc3RpbmcuanMKQEAgLTAsMCArMSw0
OTQgQEAKKy8vIEdsb2JhbHMsIHRvIG1ha2UgdGVzdGluZyBhbmQgZGVidWdnaW5nIGVhc2llci4K
K3ZhciBjb250ZXh0OwordmFyIGZpbHRlcjsKK3ZhciBzaWduYWw7Cit2YXIgcmVuZGVyZWRCdWZm
ZXI7Cit2YXIgcmVuZGVyZWREYXRhOworCit2YXIgc2FtcGxlUmF0ZSA9IDQ0MTAwLjA7Cit2YXIg
cHVsc2VMZW5ndGhGcmFtZXMgPSAuMSAqIHNhbXBsZVJhdGU7CisKKy8vIFRoaXMgbXVzdCBiZSBs
YXJnZSBlbm91Z2ggc28gdGhhdCB0aGUgZmlsdGVyZWQgcmVzdWx0IGlzCisvLyBlc3NlbnRpYWxs
eSB6ZXJvLgordmFyIHRpbWVTdGVwID0gLjE7CisKKy8vIE1heGltdW0gbnVtYmVyIG9mIGZpbHRl
cnMgd2UgY2FuIHByb2Nlc3MgKG1vc3RseSBmb3Igc2V0dGluZyB0aGUKKy8vIHJlbmRlciBsZW5n
dGggY29ycmVjdGx5LikKK3ZhciBtYXhGaWx0ZXJzID0gNTsKKworLy8gSG93IGxvbmcgdG8gcmVu
ZGVyLiAgTXVzdCBiZSBsb25nIGVub3VnaCBmb3IgYWxsIG9mIHRoZSBmaWx0ZXJzIHdlCisvLyB3
YW50IHRvIHRlc3QuCit2YXIgcmVuZGVyTGVuZ3RoU2Vjb25kcyA9IHRpbWVTdGVwICogKG1heEZp
bHRlcnMgKyAxKSA7CisKK3ZhciByZW5kZXJMZW5ndGhTYW1wbGVzID0gTWF0aC5yb3VuZChyZW5k
ZXJMZW5ndGhTZWNvbmRzICogc2FtcGxlUmF0ZSk7CisKKy8vIEEgYmlxdWFkIGZpbHRlciBoYXMg
YSB6LXRyYW5zZm9ybSBvZgorLy8gSCh6KSA9IChiMCArIGIxL3ogKyBiMi96XjIpLygxICsgYTEv
eithMi96XjIpCisKKy8vIExvd3Bhc3MgZmlsdGVyLgorZnVuY3Rpb24gY3JlYXRlTG93cGFzc0Zp
bHRlcihmcmVxLCBxLCBnYWluKSB7CisgICAgdmFyIGIwOworICAgIHZhciBiMTsKKyAgICB2YXIg
YjI7CisgICAgdmFyIGExOworICAgIHZhciBhMjsKKworICAgIGlmIChmcmVxID09IDEpIHsKKyAg
ICAgICAgLy8gVGhlIGZvcm11bGEgYmVsb3cgd29ya3MsIGV4Y2VwdCBmb3Igcm91bmRvZmYuICBX
aGVuIGZyZXEgPSAxLAorICAgICAgICAvLyB0aGUgZmlsdGVyIGlzIGp1c3QgYSB3aXJlLCBzbyBo
YXJkd2lyZSB0aGUgY29lZmZpY2llbnRzLgorICAgICAgICBiMCA9IDE7CisgICAgICAgIGIxID0g
MDsKKyAgICAgICAgYjIgPSAwOworICAgICAgICBhMSA9IDA7CisgICAgICAgIGEyID0gMDsKKyAg
ICB9IGVsc2UgeworICAgICAgICB2YXIgZyA9IE1hdGgucG93KDEwLCBxIC8gMjApOworICAgICAg
ICB2YXIgZCA9IE1hdGguc3FydCgoNCAtIE1hdGguc3FydCgxNiAtIDE2IC8gZyAvIGcpKSAvIDIp
OworICAgICAgICB2YXIgdGhldGEgPSBNYXRoLlBJICogZnJlcTsKKyAgICAgICAgdmFyIHNuID0g
ZCAqIE1hdGguc2luKHRoZXRhKSAvIDI7CisgICAgICAgIHZhciBiZXRhID0gMS8yICogKDEgLSBz
bikgLyAoMSArIHNuKTsKKyAgICAgICAgdmFyIGdhbW1hID0gKDEvMiArIGJldGEpICogTWF0aC5j
b3ModGhldGEpOworICAgICAgICB2YXIgYWxwaGEgPSAxLzQgKiAoMS8yICsgYmV0YSAtIGdhbW1h
KTsKKworICAgICAgICBiMCA9IDIgKiBhbHBoYTsKKyAgICAgICAgYjEgPSA0ICogYWxwaGE7Cisg
ICAgICAgIGIyID0gMiAqIGFscGhhOworICAgICAgICBhMSA9IDIgKiAoLWdhbW1hKTsKKyAgICAg
ICAgYTIgPSAyICogYmV0YTsKKyAgICB9CisKKyAgICByZXR1cm4ge2IwIDogYjAsIGIxIDogYjEs
IGIyIDogYjIsIGExIDogYTEsIGEyIDogYTJ9OworfQorCitmdW5jdGlvbiBjcmVhdGVIaWdocGFz
c0ZpbHRlcihmcmVxLCBxLCBnYWluKSB7CisgICAgdmFyIGIwOworICAgIHZhciBiMTsKKyAgICB2
YXIgYjI7CisgICAgdmFyIGExOworICAgIHZhciBhMjsKKworICAgIGlmIChmcmVxID09IDEpIHsK
KyAgICAgICAgLy8gVGhlIGZpbHRlciBpcyAwCisgICAgICAgIGIwID0gMDsKKyAgICAgICAgYjEg
PSAwOworICAgICAgICBiMiA9IDA7CisgICAgICAgIGExID0gMDsKKyAgICAgICAgYTIgPSAwOwor
ICAgIH0gZWxzZSBpZiAoZnJlcSA9PSAwKSB7CisgICAgICAgIC8vIFRoZSBmaWx0ZXIgaXMgMS4g
IENvbXB1dGF0aW9uIG9mIGNvZWZmaWNpZW50cyBiZWxvdyBpcyBvaywgYnV0CisgICAgICAgIC8v
IHRoZXJlJ3MgYSBwb2xlIGF0IDEgYW5kIGEgemVybyBhdCAxLCBzbyByb3VuZC1vZmYgY291bGQg
bWFrZQorICAgICAgICAvLyB0aGUgZmlsdGVyIHVuc3RhYmxlLgorICAgICAgICBiMCA9IDE7Cisg
ICAgICAgIGIxID0gMDsKKyAgICAgICAgYjIgPSAwOworICAgICAgICBhMSA9IDA7CisgICAgICAg
IGEyID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICB2YXIgZyA9IE1hdGgucG93KDEwLCBxIC8g
MjApOworICAgICAgICB2YXIgZCA9IE1hdGguc3FydCgoNCAtIE1hdGguc3FydCgxNiAtIDE2IC8g
ZyAvIGcpKSAvIDIpOworICAgICAgICB2YXIgdGhldGEgPSBNYXRoLlBJICogZnJlcTsKKyAgICAg
ICAgdmFyIHNuID0gZCAqIE1hdGguc2luKHRoZXRhKSAvIDI7CisgICAgICAgIHZhciBiZXRhID0g
MS8yICogKDEgLSBzbikgLyAoMSArIHNuKTsKKyAgICAgICAgdmFyIGdhbW1hID0gKDEvMiArIGJl
dGEpICogTWF0aC5jb3ModGhldGEpOworICAgICAgICB2YXIgYWxwaGEgPSAxLzQgKiAoMS8yICsg
YmV0YSArIGdhbW1hKTsKKyAgICAgICAgYjAgPSAyICogYWxwaGE7CisgICAgICAgIGIxID0gLTQg
KiBhbHBoYTsKKyAgICAgICAgYjIgPSAyICogYWxwaGE7CisgICAgICAgIGExID0gMiAqICgtZ2Ft
bWEpOworICAgICAgICBhMiA9IDIgKiBiZXRhOworICAgIH0KKworICAgIHJldHVybiB7YjAgOiBi
MCwgYjEgOiBiMSwgYjIgOiBiMiwgYTEgOiBhMSwgYTIgOiBhMn07Cit9CisKK2Z1bmN0aW9uIG5v
cm1hbGl6ZUZpbHRlckNvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKSB7CisgICAg
dmFyIHNjYWxlID0gMSAvIGEwOworCisgICAgcmV0dXJuIHtiMCA6IGIwICogc2NhbGUsCisgICAg
ICAgICAgICBiMSA6IGIxICogc2NhbGUsCisgICAgICAgICAgICBiMiA6IGIyICogc2NhbGUsCisg
ICAgICAgICAgICBhMSA6IGExICogc2NhbGUsCisgICAgICAgICAgICBhMiA6IGEyICogc2NhbGV9
OworfQorCitmdW5jdGlvbiBjcmVhdGVCYW5kcGFzc0ZpbHRlcihmcmVxLCBxLCBnYWluKSB7Cisg
ICAgdmFyIGIwOworICAgIHZhciBiMTsKKyAgICB2YXIgYjI7CisgICAgdmFyIGEwOworICAgIHZh
ciBhMTsKKyAgICB2YXIgYTI7CisgICAgdmFyIGNvZWY7CisKKyAgICBpZiAoZnJlcSA+IDAgJiYg
ZnJlcSA8IDEpIHsKKyAgICAgICAgdmFyIHcwID0gTWF0aC5QSSAqIGZyZXE7CisgICAgICAgIGlm
IChxID4gMCkgeworICAgICAgICAgICAgdmFyIGFscGhhID0gTWF0aC5zaW4odzApIC8gKDIgKiBx
KTsKKyAgICAgICAgICAgIHZhciBrID0gTWF0aC5jb3ModzApOworICAgICAgICAgICAgYjAgPSBh
bHBoYTsKKyAgICAgICAgICAgIGIxID0gMDsKKyAgICAgICAgICAgIGIyID0gLWFscGhhOworICAg
ICAgICAgICAgYTAgPSAxICsgYWxwaGE7CisgICAgICAgICAgICBhMSA9IC0yICogazsKKyAgICAg
ICAgICAgIGEyID0gMSAtIGFscGhhOworCisgICAgICAgICAgICBjb2VmID0gbm9ybWFsaXplRmls
dGVyQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLy8gcSA9IDAsIGFuZCBmcmVxdWVuY3kgaXMgbm90IDAgb3IgMS4gIFRo
ZSBhYm92ZSBmb3JtdWxhIGhhcyBhCisgICAgICAgICAgICAvLyBkaXZpZGUgYnkgemVybyBwcm9i
bGVtLiAgVGhlIGxpbWl0IG9mIHRoZSB6LXRyYW5zZm9ybSBhcyBxCisgICAgICAgICAgICAvLyBh
cHByb2FjaGVzIDAgaXMgMSwgc28gc2V0IHRoZSBmaWx0ZXIgdGhhdCB3YXkuCisgICAgICAgICAg
ICBjb2VmID0ge2IwIDogMSwgYjEgOiAwLCBiMiA6IDAsIGExIDogMCwgYTIgOiAwfTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdoZW4gZnJlcSA9IDAgb3IgMSwgdGhlIHot
dHJhbnNmb3JtIGlzIGlkZW50aWNhbGx5IDAsCisgICAgICAgIC8vIGluZGVwZW5kZW50IG9mIHEu
CisgICAgICAgIGNvZWYgPSB7YjAgOiAwLCBiMSA6IDAsIGIyIDogMCwgYTEgOiAwLCBhMiA6IDB9
CisgICAgfQorICAKKyAgICByZXR1cm4gY29lZjsKK30KKworZnVuY3Rpb24gY3JlYXRlTG93U2hl
bGZGaWx0ZXIoZnJlcSwgcSwgZ2FpbikgeworICAgIC8vIHEgbm90IHVzZWQKKyAgICB2YXIgYjA7
CisgICAgdmFyIGIxOworICAgIHZhciBiMjsKKyAgICB2YXIgYTA7CisgICAgdmFyIGExOworICAg
IHZhciBhMjsKKyAgICB2YXIgY29lZjsKKyAgCisgICAgdmFyIFMgPSAxOworICAgIHZhciBBID0g
TWF0aC5wb3coMTAsIGdhaW4gLyA0MCk7CisKKyAgICBpZiAoZnJlcSA9PSAxKSB7CisgICAgICAg
IC8vIFRoZSBmaWx0ZXIgaXMganVzdCBhIGNvbnN0YW50IGdhaW4KKyAgICAgICAgY29lZiA9IHti
MCA6IEEgKiBBLCBiMSA6IDAsIGIyIDogMCwgYTEgOiAwLCBhMiA6IDB9OyAgCisgICAgfSBlbHNl
IGlmIChmcmVxID09IDApIHsKKyAgICAgICAgLy8gVGhlIGZpbHRlciBpcyAxCisgICAgICAgIGNv
ZWYgPSB7YjAgOiAxLCBiMSA6IDAsIGIyIDogMCwgYTEgOiAwLCBhMiA6IDB9OyAgCisgICAgfSBl
bHNlIHsKKyAgICAgICAgdmFyIHcwID0gTWF0aC5QSSAqIGZyZXE7CisgICAgICAgIHZhciBhbHBo
YSA9IDEgLyAyICogTWF0aC5zaW4odzApICogTWF0aC5zcXJ0KChBICsgMSAvIEEpICogKDEgLyBT
IC0gMSkrMik7CisgICAgICAgIHZhciBrID0gTWF0aC5jb3ModzApOworICAgICAgICB2YXIgazIg
PSAyICogTWF0aC5zcXJ0KEEpICogYWxwaGE7CisgICAgICAgIHZhciBBcDEgPSBBICsgMTsKKyAg
ICAgICAgdmFyIEFtMSA9IEEgLSAxOworCisgICAgICAgIGIwID0gQSAqIChBcDEgLSBBbTEgKiBr
ICsgazIpOworICAgICAgICBiMSA9IDIgKiBBICogKEFtMSAtIEFwMSAqIGspOworICAgICAgICBi
MiA9IEEgKiAoQXAxIC0gQW0xICogayAtIGsyKTsKKyAgICAgICAgYTAgPSBBcDEgKyBBbTEgKiBr
ICsgazI7CisgICAgICAgIGExID0gLTIgKiAoQW0xICsgQXAxICogayk7CisgICAgICAgIGEyID0g
QXAxICsgQW0xICogayAtIGsyOworICAgICAgICBjb2VmID0gbm9ybWFsaXplRmlsdGVyQ29lZmZp
Y2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOworICAgIH0KKworICAgIHJldHVybiBjb2Vm
OworfQorCitmdW5jdGlvbiBjcmVhdGVIaWdoU2hlbGZGaWx0ZXIoZnJlcSwgcSwgZ2Fpbikgewor
ICAgIC8vIHEgbm90IHVzZWQKKyAgICB2YXIgYjA7CisgICAgdmFyIGIxOworICAgIHZhciBiMjsK
KyAgICB2YXIgYTA7CisgICAgdmFyIGExOworICAgIHZhciBhMjsKKyAgICB2YXIgY29lZjsKKwor
ICAgIHZhciBBID0gTWF0aC5wb3coMTAsIGdhaW4gLyA0MCk7CisKKyAgICBpZiAoZnJlcSA9PSAx
KSB7CisgICAgICAgIC8vIFdoZW4gZnJlcSA9IDEsIHRoZSB6LXRyYW5zZm9ybSBpcyAxCisgICAg
ICAgIGNvZWYgPSB7YjAgOiAxLCBiMSA6IDAsIGIyIDogMCwgYTEgOiAwLCBhMiA6IDB9OworICAg
IH0gZWxzZSBpZiAoZnJlcSA+IDApIHsKKyAgICAgICAgdmFyIHcwID0gTWF0aC5QSSAqIGZyZXE7
CisgICAgICAgIHZhciBTID0gMTsKKyAgICAgICAgdmFyIGFscGhhID0gMS8yICogTWF0aC5zaW4o
dzApICogTWF0aC5zcXJ0KChBICsgMSAvIEEpICogKDEgLyBTIC0gMSkgKyAyKTsKKyAgICAgICAg
dmFyIGsgPSBNYXRoLmNvcyh3MCk7CisgICAgICAgIHZhciBrMiA9IDIgKiBNYXRoLnNxcnQoQSkg
KiBhbHBoYTsKKyAgICAgICAgdmFyIEFwMSA9IEEgKyAxOworICAgICAgICB2YXIgQW0xID0gQSAt
IDE7CisgICAgICAgIGIwID0gQSAqIChBcDEgKyBBbTEgKiBrICsgazIpOworICAgICAgICBiMSA9
IC0yICogQSAqIChBbTEgKyBBcDEgKiBrKTsKKyAgICAgICAgYjIgPSBBICogKEFwMSArIEFtMSAq
IGsgLSBrMik7CisgICAgICAgIGEwID0gQXAxIC0gQW0xICogayArIGsyOworICAgICAgICBhMSA9
IDIgKiAoQW0xIC0gQXAxKmspOworICAgICAgICBhMiA9IEFwMSAtIEFtMSAqIGstazI7CisKKyAg
ICAgICAgY29lZiA9IG5vcm1hbGl6ZUZpbHRlckNvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwg
YTEsIGEyKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXaGVuIGZyZXEgPSAwLCB0aGUgZmls
dGVyIGlzIGp1c3QgYSBnYWluCisgICAgICAgIGNvZWYgPSB7YjAgOiBBICogQSwgYjEgOiAwLCBi
MiA6IDAsIGExIDogMCwgYTIgOiAwfTsKKyAgICB9CisKKyAgICByZXR1cm4gY29lZjsKK30KKwor
ZnVuY3Rpb24gY3JlYXRlUGVha2luZ0ZpbHRlcihmcmVxLCBxLCBnYWluKSB7CisgICAgdmFyIGIw
OworICAgIHZhciBiMTsKKyAgICB2YXIgYjI7CisgICAgdmFyIGEwOworICAgIHZhciBhMTsKKyAg
ICB2YXIgYTI7CisgICAgdmFyIGNvZWY7CisKKyAgICB2YXIgQSA9IE1hdGgucG93KDEwLCBnYWlu
IC8gNDApOworCisgICAgaWYgKGZyZXEgPiAwICYmIGZyZXEgPCAxKSB7CisgICAgICAgIGlmIChx
ID4gMCkgeworICAgICAgICAgICAgdmFyIHcwID0gTWF0aC5QSSAqIGZyZXE7CisgICAgICAgICAg
ICB2YXIgYWxwaGEgPSBNYXRoLnNpbih3MCkgLyAoMiAqIHEpOworICAgICAgICAgICAgdmFyIGsg
PSBNYXRoLmNvcyh3MCk7CisKKyAgICAgICAgICAgIGIwID0gMSArIGFscGhhICogQTsKKyAgICAg
ICAgICAgIGIxID0gLTIgKiBrOworICAgICAgICAgICAgYjIgPSAxIC0gYWxwaGEgKiBBOworICAg
ICAgICAgICAgYTAgPSAxICsgYWxwaGEgLyBBOworICAgICAgICAgICAgYTEgPSAtMiAqIGs7Cisg
ICAgICAgICAgICBhMiA9IDEgLSBhbHBoYSAvIEE7CisgIAorICAgICAgICAgICAgY29lZiA9IG5v
cm1hbGl6ZUZpbHRlckNvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIHEgPSAwLCB3ZSBoYXZlIGEgZGl2aWRlIGJ5IHpl
cm8gcHJvYmxlbSBpbiB0aGUgZm9ybXVsYXMKKyAgICAgICAgICAgIC8vIGFib3ZlLiAgQnV0IGlm
IHdlIGxvb2sgYXQgdGhlIHotdHJhbnNmb3JtLCB3ZSBzZWUgdGhhdCB0aGUKKyAgICAgICAgICAg
IC8vIGxpbWl0IGFzIHEgYXBwcm9hY2hlcyAwIGlzIEFeMi4KKyAgICAgICAgICAgIGNvZWYgPSB7
YjAgOiBBICogQSwgYjEgOiAwLCBiMiA6IDAsIGExIDogMCwgYTIgOiAwfTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIGZyZXEgPSAwIG9yIDEsIHRoZSB6LXRyYW5zZm9ybSBp
cyAxCisgICAgICAgIGNvZWYgPSB7YjAgOiAxLCBiMSA6IDAsIGIyIDogMCwgYTEgOiAwLCBhMiA6
IDB9OworICAgIH0KKworICAgIHJldHVybiBjb2VmOworfQorCitmdW5jdGlvbiBjcmVhdGVOb3Rj
aEZpbHRlcihmcmVxLCBxLCBnYWluKSB7CisgICAgdmFyIGIwOworICAgIHZhciBiMTsKKyAgICB2
YXIgYjI7CisgICAgdmFyIGEwOworICAgIHZhciBhMTsKKyAgICB2YXIgYTI7CisgICAgdmFyIGNv
ZWY7CisKKyAgICBpZiAoZnJlcSA+IDAgJiYgZnJlcSA8IDEpIHsKKyAgICAgICAgaWYgKHEgPiAw
KSB7CisgICAgICAgICAgICB2YXIgdzAgPSBNYXRoLlBJICogZnJlcTsKKyAgICAgICAgICAgIHZh
ciBhbHBoYSA9IE1hdGguc2luKHcwKSAvICgyICogcSk7CisgICAgICAgICAgICB2YXIgayA9IE1h
dGguY29zKHcwKTsKKyAgICAgICAgICAgIGIwID0gMTsKKyAgICAgICAgICAgIGIxID0gLTIgKiBr
OworICAgICAgICAgICAgYjIgPSAxOworICAgICAgICAgICAgYTAgPSAxICsgYWxwaGE7CisgICAg
ICAgICAgICBhMSA9IC0yICogazsKKyAgICAgICAgICAgIGEyID0gMSAtIGFscGhhOworICAgICAg
ICAgICAgY29lZiA9IG5vcm1hbGl6ZUZpbHRlckNvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwg
YTEsIGEyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdoZW4gcSA9IDAsIHdl
IGdldCBhIGRpdmlkZSBieSB6ZXJvIGFib3ZlLiAgVGhlIGxpbWl0IG9mIHRoZQorICAgICAgICAg
ICAgLy8gei10cmFuc2Zvcm0gYXMgcSBhcHByb2FjaGVzIDAgaXMgMCwgc28gc2V0IHRoZSBjb2Vm
ZmljaWVudHMKKyAgICAgICAgICAgIC8vIGFwcHJvcHJpYXRlbHkuCisgICAgICAgICAgICBjb2Vm
ID0ge2IwIDogMCwgYjEgOiAwLCBiMiA6IDAsIGExIDogMCwgYTIgOiAwfTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdoZW4gZnJlcSA9IDAgb3IgMSwgdGhlIHotdHJhbnNm
b3JtIGlzIDEKKyAgICAgICAgY29lZiA9IHtiMCA6IDEsIGIxIDogMCwgYjIgOiAwLCBhMSA6IDAs
IGEyIDogMH07CisgICAgfQorCisgICAgcmV0dXJuIGNvZWY7Cit9CisKK2Z1bmN0aW9uIGNyZWF0
ZUFsbHBhc3NGaWx0ZXIoZnJlcSwgcSwgZ2FpbikgeworICAgIHZhciBiMDsKKyAgICB2YXIgYjE7
CisgICAgdmFyIGIyOworICAgIHZhciBhMDsKKyAgICB2YXIgYTE7CisgICAgdmFyIGEyOworICAg
IHZhciBjb2VmOworCisgICAgaWYgKGZyZXEgPiAwICYmIGZyZXEgPCAxKSB7CisgICAgICAgIGlm
IChxID4gMCkgeworICAgICAgICAgICAgdmFyIHcwID0gTWF0aC5QSSAqIGZyZXE7CisgICAgICAg
ICAgICB2YXIgYWxwaGEgPSBNYXRoLnNpbih3MCkgLyAoMiAqIHEpOworICAgICAgICAgICAgdmFy
IGsgPSBNYXRoLmNvcyh3MCk7CisgICAgICAgICAgICBiMCA9IDEgLSBhbHBoYTsKKyAgICAgICAg
ICAgIGIxID0gLTIqazsKKyAgICAgICAgICAgIGIyID0gMSArIGFscGhhOworICAgICAgICAgICAg
YTAgPSAxICsgYWxwaGE7CisgICAgICAgICAgICBhMSA9IC0yKms7CisgICAgICAgICAgICBhMiA9
IDEgLSBhbHBoYTsKKyAgICAgICAgICAgIGNvZWYgPSBub3JtYWxpemVGaWx0ZXJDb2VmZmljaWVu
dHMoYjAsIGIxLCBiMiwgYTAsIGExLCBhMik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvLyBxID0gMAorICAgICAgICAgICAgY29lZiA9IHtiMCA6IC0xLCBiMSA6IDAsIGIyIDogMCwg
YTEgOiAwLCBhMiA6IDB9OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29lZiA9
IHtiMCA6IDEsIGIxIDogMCwgYjIgOiAwLCBhMSA6IDAsIGEyIDogMH07CisgICAgfQorCisgICAg
cmV0dXJuIGNvZWY7Cit9CisKKy8vIEFycmF5IG9mIGZ1bmN0aW9ucyB0byBjb21wdXRlIHRoZSBm
aWx0ZXIgY29lZmZpY2llbnRzLiAgVGhpcyBtdXN0CisvLyBiZSBhcnJhbmVkIGluIHRoZSBzYW1l
IG9yZGVyIGFzIHRoZSBmaWx0ZXIgdHlwZXMgaW4gdGhlIGlkbCBmaWxlLgordmFyIGZpbHRlckNy
ZWF0b3JGdW5jdGlvbiA9IFtjcmVhdGVMb3dwYXNzRmlsdGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjcmVhdGVIaWdocGFzc0ZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3JlYXRlQmFuZHBhc3NGaWx0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNyZWF0ZUxvd1NoZWxmRmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVh
dGVIaWdoU2hlbGZGaWx0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVBl
YWtpbmdGaWx0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZU5vdGNoRmls
dGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVBbGxwYXNzRmlsdGVyXTsK
KwordmFyIGZpbHRlclR5cGVOYW1lID0gWyJMb3dwYXNzIGZpbHRlciIsCisgICAgICAgICAgICAg
ICAgICAgICAgIkhpZ2hwYXNzIGZpbHRlciIsCisgICAgICAgICAgICAgICAgICAgICAgIkJhbmRw
YXNzIGZpbHRlciIsCisgICAgICAgICAgICAgICAgICAgICAgIkxvd3NoZWxmIGZpbHRlciIsCisg
ICAgICAgICAgICAgICAgICAgICAgIkhpZ2hzaGVsZiBmaWx0ZXIiLAorICAgICAgICAgICAgICAg
ICAgICAgICJQZWFraW5nIGZpbHRlciIsCisgICAgICAgICAgICAgICAgICAgICAgIk5vdGNoIGZp
bHRlciIsCisgICAgICAgICAgICAgICAgICAgICAgIkFsbHBhc3MgZmlsdGVyIl07CisKK2Z1bmN0
aW9uIGNyZWF0ZUZpbHRlcihmaWx0ZXJUeXBlLCBmcmVxLCBxLCBnYWluKSB7CisgICAgcmV0dXJu
IGZpbHRlckNyZWF0b3JGdW5jdGlvbltmaWx0ZXJUeXBlXShmcmVxLCBxLCBnYWluKTsKK30KKwor
ZnVuY3Rpb24gZmlsdGVyRGF0YShmaWx0ZXJDb2VmLCBzaWduYWwsIGxlbikgeworICAgIHZhciB5
ID0gbmV3IEFycmF5KGxlbik7CisgICAgdmFyIGIwID0gZmlsdGVyQ29lZi5iMDsKKyAgICB2YXIg
YjEgPSBmaWx0ZXJDb2VmLmIxOworICAgIHZhciBiMiA9IGZpbHRlckNvZWYuYjI7CisgICAgdmFy
IGExID0gZmlsdGVyQ29lZi5hMTsKKyAgICB2YXIgYTIgPSBmaWx0ZXJDb2VmLiBhMjsKKworICAg
IC8vIFByaW1lIHRoZSBwdW1wLiAoQXNzdW1lcyB0aGUgc2lnbmFsIGhhcyBsZW5ndGggPj0gMiEp
CisgICAgeVswXSA9IGIwICogc2lnbmFsWzBdOworICAgIHlbMV0gPSBiMCAqIHNpZ25hbFsxXSAr
IGIxICogc2lnbmFsWzBdIC0gYTEgKiB5WzBdOworCisgICAgLy8gRmlsdGVyIGFsbCBvZiB0aGUg
c2lnbmFsIHRoYXQgd2UgaGF2ZS4KKyAgICBmb3IgKHZhciBrID0gMjsgayA8IE1hdGgubWluKHNp
Z25hbC5sZW5ndGgsIGxlbik7ICsraykgeworICAgICAgICB5W2tdID0gYjAgKiBzaWduYWxba10g
KyBiMSAqIHNpZ25hbFtrLTFdICsgYjIgKiBzaWduYWxbay0yXSAtIGExICogeVtrLTFdIC0gYTIg
KiB5W2stMl07CisgICAgfQorCisgICAgLy8gSWYgd2UgbmVlZCB0byBmaWx0ZXIgbW9yZSwgYnV0
IGRvbid0IGhhdmUgYW55IHNpZ25hbCBsZWZ0LAorICAgIC8vIGFzc3VtZSB0aGUgc2lnbmFsIGlz
IHplcm8uCisgICAgZm9yICh2YXIgayA9IHNpZ25hbC5sZW5ndGg7IGsgPCBsZW47ICsraykgewor
ICAgICAgICB5W2tdID0gLSBhMSAqIHlbay0xXSAtIGEyICogeVtrLTJdOworICAgIH0KKworICAg
IHJldHVybiB5OworfQorCitmdW5jdGlvbiBjcmVhdGVJbXB1bHNlQnVmZmVyKGNvbnRleHQsIGxl
bmd0aCkgeworICAgIHZhciBpbXB1bHNlID0gY29udGV4dC5jcmVhdGVCdWZmZXIoMSwgbGVuZ3Ro
LCBjb250ZXh0LnNhbXBsZVJhdGUpOworICAgIHZhciBkYXRhID0gaW1wdWxzZS5nZXRDaGFubmVs
RGF0YSgwKTsKKyAgICBmb3IgKHZhciBrID0gMTsgayA8IGRhdGEubGVuZ3RoOyArK2spIHsKKyAg
ICAgICAgZGF0YVtrXSA9IDA7CisgICAgfQorICAgIGRhdGFbMF0gPSAxOworCisgICAgcmV0dXJu
IGltcHVsc2U7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgZmlsdGVy
VHlwZSwgZmlsdGVyUGFyYW1ldGVyLCB0aHJlc2hvbGQpIHsKKyAgICBzaWduYWwgPSBuZXcgQXJy
YXkoZmlsdGVyUGFyYW1ldGVyLmxlbmd0aCk7CisgICAgZmlsdGVyID0gbmV3IEFycmF5KGZpbHRl
clBhcmFtZXRlci5sZW5ndGgpOworCisgICAgaW1wdWxzZSA9IGNyZWF0ZUltcHVsc2VCdWZmZXIo
Y29udGV4dCwgcHVsc2VMZW5ndGhGcmFtZXMpOworCisgICAgLy8gQ3JlYXRlIGFsbCBvZiB0aGUg
c2lnbmFsIHNvdXJjZXMgYW5kIGZpbHRlcnMgdGhhdCB3ZSBuZWVkLgorICAgIGZvciAodmFyIGsg
PSAwOyBrIDwgZmlsdGVyUGFyYW1ldGVyLmxlbmd0aDsgKytrKSB7CisgICAgICAgIHNpZ25hbFtr
XSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7CisgICAgICAgIHNpZ25hbFtrXS5idWZm
ZXIgPSBpbXB1bHNlOworCisgICAgICAgIGZpbHRlcltrXSA9IGNvbnRleHQuY3JlYXRlQmlxdWFk
RmlsdGVyKCk7CisgICAgICAgIGZpbHRlcltrXS50eXBlID0gZmlsdGVyVHlwZTsKKyAgICAgICAg
ZmlsdGVyW2tdLmZyZXF1ZW5jeS52YWx1ZSA9IGNvbnRleHQuc2FtcGxlUmF0ZS8yICogZmlsdGVy
UGFyYW1ldGVyW2tdLmN1dG9mZjsKKyAgICAgICAgZmlsdGVyW2tdLlEudmFsdWUgPSBmaWx0ZXJQ
YXJhbWV0ZXJba10ucTsKKyAgICAgICAgZmlsdGVyW2tdLmdhaW4udmFsdWUgPSBmaWx0ZXJQYXJh
bWV0ZXJba10uZ2FpbjsKKworICAgICAgICBzaWduYWxba10uY29ubmVjdChmaWx0ZXJba10pOwor
ICAgICAgICBmaWx0ZXJba10uY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKTsKKworICAgICAg
ICBzaWduYWxba10ubm90ZU9uKHRpbWVTdGVwICogayk7CisgICAgfQorCisgICAgY29udGV4dC5v
bmNvbXBsZXRlID0gY2hlY2tGaWx0ZXJSZXNwb25zZShmaWx0ZXJUeXBlLCBmaWx0ZXJQYXJhbWV0
ZXIsIHRocmVzaG9sZCk7CisgICAgY29udGV4dC5zdGFydFJlbmRlcmluZygpOworfQorCitmdW5j
dGlvbiBhZGRTaWduYWwoZGVzdCwgc3JjLCBkZXN0T2Zmc2V0KSB7CisgICAgLy8gQWRkIHNyYyB0
byBkZXN0IGF0IHRoZSBnaXZlbiBkZXN0IG9mZnNldC4KKyAgICBmb3IgKHZhciBrID0gZGVzdE9m
ZnNldCwgaiA9IDA7IGsgPCBkZXN0Lmxlbmd0aCwgaiA8IHNyYy5sZW5ndGg7ICsraywgKytqKSB7
CisgICAgICAgIGRlc3Rba10gKz0gc3JjW2pdOworICAgIH0KK30KKworZnVuY3Rpb24gZ2VuZXJh
dGVSZWZlcmVuY2UoZmlsdGVyVHlwZSwgZmlsdGVyUGFyYW1ldGVyKSB7CisKKyAgICB2YXIgcmVz
dWx0ID0gbmV3IEFycmF5KHJlbmRlckxlbmd0aFNhbXBsZXMpOworICAgIHZhciBkYXRhID0gbmV3
IEFycmF5KHJlbmRlckxlbmd0aFNhbXBsZXMpOworICAgIC8vIEluaXRpYWxpemUgdGhlIHJlc3Vs
dCBhcnJheSBhbmQgZGF0YS4KKyAgICBmb3IgKHZhciBrID0gMDsgayA8IHJlc3VsdC5sZW5ndGg7
ICsraykgeworICAgICAgICByZXN1bHRba10gPSAwOworICAgICAgICBkYXRhW2tdID0gMDsKKyAg
ICB9CisgICAgLy8gTWFrZSBkYXRhIGFuIGltcHVsc2UuCisgICAgZGF0YVswXSA9IDE7CisgICAg
CisgICAgZm9yICh2YXIgayA9IDA7IGsgPCBmaWx0ZXJQYXJhbWV0ZXIubGVuZ3RoOyArK2spIHsK
KyAgICAgICAgLy8gRmlsdGVyIGFuIGltcHVsc2UKKyAgICAgICAgdmFyIGZpbHRlckNvZWYgPSBj
cmVhdGVGaWx0ZXIoZmlsdGVyVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmlsdGVyUGFyYW1ldGVyW2tdLmN1dG9mZiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1ldGVyW2tdLnEsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtZXRlcltrXS5nYWluKTsKKyAgICAgICAgdmFy
IHkgPSBmaWx0ZXJEYXRhKGZpbHRlckNvZWYsIGRhdGEsIHJlbmRlckxlbmd0aFNhbXBsZXMpOwor
CisgICAgICAgIC8vIEFjY3VtdWxhdGUgdGhpcyBmaWx0ZXJlZCBkYXRhIGludG8gdGhlIGZpbmFs
IG91dHB1dC4KKyAgICAgICAgYWRkU2lnbmFsKHJlc3VsdCwgeSwgTWF0aC5yb3VuZCh0aW1lU3Rl
cCAqIGsgKiBzYW1wbGVSYXRlKSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
ZnVuY3Rpb24gY2hlY2tGaWx0ZXJSZXNwb25zZShmaWx0ZXJUeXBlLCBmaWx0ZXJQYXJhbWV0ZXIs
IG1heEFsbG93ZWRFcnJvcikgeworICAgIHJldHVybiBmdW5jdGlvbihldmVudCkgeworICAgICAg
ICByZW5kZXJlZEJ1ZmZlciA9IGV2ZW50LnJlbmRlcmVkQnVmZmVyOworICAgICAgICByZW5kZXJl
ZERhdGEgPSByZW5kZXJlZEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKKworICAgICAgICByZWZl
cmVuY2UgPSBnZW5lcmF0ZVJlZmVyZW5jZShmaWx0ZXJUeXBlLCBmaWx0ZXJQYXJhbWV0ZXIpOwor
ICAgICAgICAKKyAgICAgICAgdmFyIGxlbiA9IE1hdGgubWluKHJlbmRlcmVkRGF0YS5sZW5ndGgs
IHJlZmVyZW5jZS5sZW5ndGgpOworICAgICAgICB2YXIgc3VjY2VzcyA9IHRydWU7CisgICAgICAg
IHZhciBtYXhFcnJvciA9IDA7CisgICAgICAgIHZhciBtYXhQb3NpdGlvbiA9IDA7CisKKyAgICAg
ICAgLy8gQ29tcGFyZSB0aGUgcmVuZGVyZWQgc2lnbmFsIHdpdGggb3VyIHJlZmVyZW5jZSwga2Vl
cGluZworICAgICAgICAvLyB0cmFjayBvZiB0aGUgbWF4aW11bSBkaWZmZXJlbmNlIChhbmQgdGhl
IG9mZnNldCBvZiB0aGUgbWF4CisgICAgICAgIC8vIGRpZmZlcmVuY2UuKQorICAgICAgICBmb3Ig
KHZhciBrID0gMDsgayA8IGxlbjsgKytrKSB7CisgICAgICAgICAgICB2YXIgZXJyID0gTWF0aC5h
YnMocmVuZGVyZWREYXRhW2tdIC0gcmVmZXJlbmNlW2tdKTsKKyAgICAgICAgICAgIGlmIChlcnIg
PiBtYXhFcnJvcikgeworICAgICAgICAgICAgICAgIG1heEVycm9yID0gZXJyOworICAgICAgICAg
ICAgICAgIG1heFBvc2l0aW9uID0gazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKG1heEVycm9yIDw9IG1heEFsbG93ZWRFcnJvcikgeworICAgICAgICAg
ICAgdGVzdFBhc3NlZChmaWx0ZXJUeXBlTmFtZVtmaWx0ZXJUeXBlXSArICIgcmVzcG9uc2UgaXMg
Y29ycmVjdC4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoZmls
dGVyVHlwZU5hbWVbZmlsdGVyVHlwZV0gKyAiIHJlc3BvbnNlIGlzIGluY29ycmVjdC4gIE1heCBl
cnIgPSAiICsgbWF4RXJyb3IgKyAiIGF0ICIgKyBtYXhQb3NpdGlvbiArICIuICBUaHJlc2hvbGQg
PSAiICsgbWF4QWxsb3dlZEVycm9yKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHRl
c3RQYXNzZWQoIlRlc3Qgc2lnbmFsIHdhcyBjb3JyZWN0bHkgZmlsdGVyZWQuIik7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJUZXN0IHNpZ25hbCB3YXMgbm90IGNv
cnJlY3RseSBmaWx0ZXJlZC4iKTsKKyAgICAgICAgfQorICAgICAgICBmaW5pc2hKU1Rlc3QoKTsK
KyAgICB9Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123028</attachid>
            <date>2012-01-18 15:54:58 -0800</date>
            <delta_ts>2012-01-18 20:14:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71413-20120118155453.patch</filename>
            <type>text/plain</type>
            <size>52205</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MjI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2FjYzFlNzRjN2QzMjRm
ZTBjNDM1MjVmZWViZTk4ZjZjZDliZWNmMy4uYzE5ZDY2YThjZWIxODZjM2Y4Yzc3MGI0YjdlMDNl
ODk5MWM2YTkyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDExLTExLTA3ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBDaGVjayBwYXJhbWV0ZXJzIHRv
IGJpcXVhZCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MTQxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3RzIGFkZGVkIGZvciBlYWNoIGZpbHRlciB0eXBlIGFuZCBmb3IgdGhlIGxpbWl0
aW5nIGNhc2VzIGZvcgorICAgICAgICBlYWNoIGZpbHRlciB0eXBlLiAgTk9URTogIFRlc3RzIG1h
eSBmYWlsIG9uIFdpbmRvd3MgZm9yIHNvbWUKKyAgICAgICAgdW5rbm93biByZWFzb24uCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qmlx
dWFkOjpzZXRMb3dwYXNzUGFyYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6c2V0SGln
aHBhc3NQYXJhbXMpOgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkOjpzZXRMb3dTaGVsZlBhcmFt
cyk6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWQ6OnNldEhpZ2hTaGVsZlBhcmFtcyk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXF1YWQ6OnNldFBlYWtpbmdQYXJhbXMpOgorICAgICAgICAoV2ViQ29y
ZTo6QmlxdWFkOjpzZXRBbGxwYXNzUGFyYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6
c2V0Tm90Y2hQYXJhbXMpOgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkOjpzZXRCYW5kcGFzc1Bh
cmFtcyk6CisgICAgICAgIENoZWNrIGZvciBpbnZhbGlkIHBhcmFtZXRlcnMgYW5kIGNsaXAgdGhl
bSB0byBzb21ldGhpbmcgc2Vuc2libGUuCisgICAgICAgIEFsc28gY2hlY2sgZm9yIHRoZSBsaW1p
dGluZyBjYXNlcyBhbmQgdHJ5IHRvIHVzZSB0aGUgbGltaXRpbmcgZm9ybQorICAgICAgICBvZiB0
aGUgei10cmFuc2Zvcm0gZm9yIHRoZSBiaXF1YWQuICBTb21lIGlzc3VlcyBjYW5ub3QgYmUKKyAg
ICAgICAgY29uc2lzdGVudGx5IGhhbmRsZWQgYmVjYXVzZSB0aGUgei10cmFuc2Zvcm0gaXMgbm90
IGNvbnRpbnVvdXMgYXMKKyAgICAgICAgdGhlIHBhcmFtZXRlcnMgYXBwcm9hY2ggdGhlIGxpbWl0
LgorCiAyMDEyLTAxLTE3ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgRW5zdXJlIHdlIGRvbid0IGNhbmNlbCByZXZhbGlkYXRpb24gb2YgYSBDYWNoZWRSZXNv
dXJjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHAKaW5kZXggOGRjMWY0
ZmI2OWU3MTEyYmJiMTYwZDk3ZDEzM2MwMGVjODkwYTYyOS4uN2RjNDQ1MTJmMDA5ZjJiODI4Yjcw
ZWIyNmU0ZDc0YmI4ODMxYjE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vQmlxdWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1
YWQuY3BwCkBAIC0xODgsNDMgKzE4OCw4NSBAQCB2b2lkIEJpcXVhZDo6cmVzZXQoKQogdm9pZCBC
aXF1YWQ6OnNldExvd3Bhc3NQYXJhbXMoZG91YmxlIGN1dG9mZiwgZG91YmxlIHJlc29uYW5jZSkK
IHsKICAgICByZXNvbmFuY2UgPSBzdGQ6Om1heCgwLjAsIHJlc29uYW5jZSk7IC8vIGNhbid0IGdv
IG5lZ2F0aXZlCi0KKyAgICAvLyBMaW1pdCBjdXRvZmYgdG8gMCB0byAxLgorICAgIGN1dG9mZiA9
IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oY3V0b2ZmLCAxLjApKTsKKyAgICAKICAgICBkb3VibGUg
ZyA9IHBvdygxMC4wLCAwLjA1ICogcmVzb25hbmNlKTsKICAgICBkb3VibGUgZCA9IHNxcnQoKDQg
LSBzcXJ0KDE2IC0gMTYgLyAoZyAqIGcpKSkgLyAyKTsKIAotICAgIC8vIENvbXB1dGUgYmlxdWFk
IGNvZWZmaWNpZW50cyBmb3IgbG9wYXNzIGZpbHRlcgotICAgIGRvdWJsZSB0aGV0YSA9IHBpRG91
YmxlICogY3V0b2ZmOwotICAgIGRvdWJsZSBzbiA9IDAuNSAqIGQgKiBzaW4odGhldGEpOwotICAg
IGRvdWJsZSBiZXRhID0gMC41ICogKDEgLSBzbikgLyAoMSArIHNuKTsKLSAgICBkb3VibGUgZ2Ft
bWEgPSAoMC41ICsgYmV0YSkgKiBjb3ModGhldGEpOwotICAgIGRvdWJsZSBhbHBoYSA9IDAuMjUg
KiAoMC41ICsgYmV0YSAtIGdhbW1hKTsKLQotICAgIG1fYjAgPSAyICogYWxwaGE7Ci0gICAgbV9i
MSA9IDIgKiAyICogYWxwaGE7Ci0gICAgbV9iMiA9IDIgKiBhbHBoYTsKLSAgICBtX2ExID0gMiAq
IC1nYW1tYTsKLSAgICBtX2EyID0gMiAqIGJldGE7CisgICAgaWYgKGN1dG9mZiA9PSAxKSB7Cisg
ICAgICAgIC8vIFdoZW4gY3V0b2ZmIGlzIDEsIHRoZSB6LXRyYW5zZm9ybSBpcyAxLgorICAgICAg
ICBtX2IwID0gMTsKKyAgICAgICAgbV9iMSA9IDA7CisgICAgICAgIG1fYjIgPSAwOworICAgICAg
ICBtX2ExID0gMDsKKyAgICAgICAgbV9hMiA9IDA7CisgICAgICAKKyAgICB9IGVsc2UgaWYgKGN1
dG9mZiA+IDApIHsKKyAgICAgICAgLy8gQ29tcHV0ZSBiaXF1YWQgY29lZmZpY2llbnRzIGZvciBs
b3Bhc3MgZmlsdGVyCisgICAgICAgIGRvdWJsZSB0aGV0YSA9IHBpRG91YmxlICogY3V0b2ZmOwor
ICAgICAgICBkb3VibGUgc24gPSAwLjUgKiBkICogc2luKHRoZXRhKTsKKyAgICAgICAgZG91Ymxl
IGJldGEgPSAwLjUgKiAoMSAtIHNuKSAvICgxICsgc24pOworICAgICAgICBkb3VibGUgZ2FtbWEg
PSAoMC41ICsgYmV0YSkgKiBjb3ModGhldGEpOworICAgICAgICBkb3VibGUgYWxwaGEgPSAwLjI1
ICogKDAuNSArIGJldGEgLSBnYW1tYSk7CisKKyAgICAgICAgbV9iMCA9IDIgKiBhbHBoYTsKKyAg
ICAgICAgbV9iMSA9IDIgKiAyICogYWxwaGE7CisgICAgICAgIG1fYjIgPSAyICogYWxwaGE7Cisg
ICAgICAgIG1fYTEgPSAyICogLWdhbW1hOworICAgICAgICBtX2EyID0gMiAqIGJldGE7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gV2hlbiBjdXRvZmYgaXMgemVybywgbm90aGluZyBnZXRzIHRo
cm91Z2ggdGhlIGZpbHRlciwgc28gc2V0CisgICAgICAgIC8vIGNvZWZmaWNpZW50cyB1cCBjb3Jy
ZWN0bHkuCisgICAgICAgIG1fYjAgPSAwOworICAgICAgICBtX2IxID0gMDsKKyAgICAgICAgbV9i
MiA9IDA7CisgICAgICAgIG1fYTEgPSAwOworICAgICAgICBtX2EyID0gMDsKKyAgICB9CiB9CiAK
IHZvaWQgQmlxdWFkOjpzZXRIaWdocGFzc1BhcmFtcyhkb3VibGUgY3V0b2ZmLCBkb3VibGUgcmVz
b25hbmNlKQogewogICAgIHJlc29uYW5jZSA9IHN0ZDo6bWF4KDAuMCwgcmVzb25hbmNlKTsgLy8g
Y2FuJ3QgZ28gbmVnYXRpdmUKIAorICAgIC8vIExpbWl0IGN1dG9mZiB0byAwIHRvIDEuCisgICAg
Y3V0b2ZmID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbihjdXRvZmYsIDEuMCkpOworCiAgICAgZG91
YmxlIGcgPSBwb3coMTAuMCwgMC4wNSAqIHJlc29uYW5jZSk7CiAgICAgZG91YmxlIGQgPSBzcXJ0
KCg0IC0gc3FydCgxNiAtIDE2IC8gKGcgKiBnKSkpIC8gMik7CiAKLSAgICAvLyBDb21wdXRlIGJp
cXVhZCBjb2VmZmljaWVudHMgZm9yIGhpZ2hwYXNzIGZpbHRlcgotICAgIGRvdWJsZSB0aGV0YSA9
IHBpRG91YmxlICogY3V0b2ZmOwotICAgIGRvdWJsZSBzbiA9IDAuNSAqIGQgKiBzaW4odGhldGEp
OwotICAgIGRvdWJsZSBiZXRhID0gMC41ICogKDEgLSBzbikgLyAoMSArIHNuKTsKLSAgICBkb3Vi
bGUgZ2FtbWEgPSAoMC41ICsgYmV0YSkgKiBjb3ModGhldGEpOwotICAgIGRvdWJsZSBhbHBoYSA9
IDAuMjUgKiAoMC41ICsgYmV0YSArIGdhbW1hKTsKLQotICAgIG1fYjAgPSAyICogYWxwaGE7Ci0g
ICAgbV9iMSA9IDIgKiAtMiAqIGFscGhhOwotICAgIG1fYjIgPSAyICogYWxwaGE7Ci0gICAgbV9h
MSA9IDIgKiAtZ2FtbWE7Ci0gICAgbV9hMiA9IDIgKiBiZXRhOworICAgIGlmIChjdXRvZmYgPT0g
MSkgeworICAgICAgLy8gVGhlIHotdHJhbnNmb3JtIGlzIDAuCisgICAgICBtX2IwID0gMDsKKyAg
ICAgIG1fYjEgPSAwOworICAgICAgbV9iMiA9IDA7CisgICAgICBtX2ExID0gMDsKKyAgICAgIG1f
YTIgPSAwOworICAgIH0gZWxzZSBpZiAoY3V0b2ZmID4gMCkgeworICAgICAgLy8gQ29tcHV0ZSBi
aXF1YWQgY29lZmZpY2llbnRzIGZvciBoaWdocGFzcyBmaWx0ZXIKKyAgICAgIGRvdWJsZSB0aGV0
YSA9IHBpRG91YmxlICogY3V0b2ZmOworICAgICAgZG91YmxlIHNuID0gMC41ICogZCAqIHNpbih0
aGV0YSk7CisgICAgICBkb3VibGUgYmV0YSA9IDAuNSAqICgxIC0gc24pIC8gKDEgKyBzbik7Cisg
ICAgICBkb3VibGUgZ2FtbWEgPSAoMC41ICsgYmV0YSkgKiBjb3ModGhldGEpOworICAgICAgZG91
YmxlIGFscGhhID0gMC4yNSAqICgwLjUgKyBiZXRhICsgZ2FtbWEpOworCisgICAgICBtX2IwID0g
MiAqIGFscGhhOworICAgICAgbV9iMSA9IDIgKiAtMiAqIGFscGhhOworICAgICAgbV9iMiA9IDIg
KiBhbHBoYTsKKyAgICAgIG1fYTEgPSAyICogLWdhbW1hOworICAgICAgbV9hMiA9IDIgKiBiZXRh
OworICAgIH0gZWxzZSB7CisgICAgICAvLyBXaGVuIGN1dG9mZiBpcyB6ZXJvLCB3ZSBuZWVkIHRv
IGJlIGNhcmVmdWwgYmVjYXVzZSB0aGUgYWJvdmUKKyAgICAgIC8vIGdpdmVzIGEgcXVhZHJhdGlj
IGRpdmlkZWQgYnkgdGhlIHNhbWUgcXVhZHJhdGljLCB3aXRoIHBvbGVzCisgICAgICAvLyBhbmQg
emVyb3Mgb24gdGhlIHVuaXQgY2lyY2xlIGluIHRoZSBzYW1lIHBsYWNlLiBXaGVuIGN1dG9mZgor
ICAgICAgLy8gaXMgemVybywgdGhlIHotdHJhbnNmb3JtIGlzIDEuCisgICAgICBtX2IwID0gMTsK
KyAgICAgIG1fYjEgPSAwOworICAgICAgbV9iMiA9IDA7CisgICAgICBtX2ExID0gMDsKKyAgICAg
IG1fYTIgPSAwOworICAgIH0KIH0KIAogdm9pZCBCaXF1YWQ6OnNldE5vcm1hbGl6ZWRDb2VmZmlj
aWVudHMoZG91YmxlIGIwLCBkb3VibGUgYjEsIGRvdWJsZSBiMiwgZG91YmxlIGEwLCBkb3VibGUg
YTEsIGRvdWJsZSBhMikKQEAgLTI0MCwxMTkgKzI4MiwyMzIgQEAgdm9pZCBCaXF1YWQ6OnNldE5v
cm1hbGl6ZWRDb2VmZmljaWVudHMoZG91YmxlIGIwLCBkb3VibGUgYjEsIGRvdWJsZSBiMiwgZG91
YmxlIGEKIAogdm9pZCBCaXF1YWQ6OnNldExvd1NoZWxmUGFyYW1zKGRvdWJsZSBmcmVxdWVuY3ks
IGRvdWJsZSBkYkdhaW4pCiB7Ci0gICAgZG91YmxlIHcwID0gcGlEb3VibGUgKiBmcmVxdWVuY3k7
Ci0KKyAgICAvLyBDbGlwIGZyZXF1ZW5jaWVzIHRvIGJldHdlZW4gMCBhbmQgMSwgaW5jbHVzaXZl
LgorICAgIGZyZXF1ZW5jeSA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oZnJlcXVlbmN5LCAxLjAp
KTsKKyAgICAKICAgICBkb3VibGUgQSA9IHBvdygxMC4wLCBkYkdhaW4gLyA0MCk7Ci0gICAgZG91
YmxlIFMgPSAxOyAvLyBmaWx0ZXIgc2xvcGUgKDEgaXMgbWF4IHZhbHVlKQotICAgIGRvdWJsZSBh
bHBoYSA9IDAuNSAqIHNpbih3MCkgKiBzcXJ0KChBICsgMSAvIEEpICogKDEgLyBTIC0gMSkgKyAy
KTsKIAotICAgIGRvdWJsZSBrID0gY29zKHcwKTsKLSAgICBkb3VibGUgazIgPSAyICogc3FydChB
KSAqIGFscGhhOworICAgIGlmIChmcmVxdWVuY3kgPT0gMSkgeworICAgICAgICAvLyBUaGUgei10
cmFuc2Zvcm0gaXMgYSBjb25zdGFudCBnYWluLgorICAgICAgICBzZXROb3JtYWxpemVkQ29lZmZp
Y2llbnRzKEEgKiBBLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEs
IDAsIDApOworICAgIH0gZWxzZSBpZiAoZnJlcXVlbmN5ID4gMCkgeworICAgICAgICBkb3VibGUg
dzAgPSBwaURvdWJsZSAqIGZyZXF1ZW5jeTsKIAotICAgIGRvdWJsZSBhUGx1c09uZSA9IEEgKyAx
OwotICAgIGRvdWJsZSBhTWludXNPbmUgPSBBIC0gMTsKKyAgICAgICAgZG91YmxlIFMgPSAxOyAv
LyBmaWx0ZXIgc2xvcGUgKDEgaXMgbWF4IHZhbHVlKQorICAgICAgICBkb3VibGUgYWxwaGEgPSAw
LjUgKiBzaW4odzApICogc3FydCgoQSArIDEgLyBBKSAqICgxIC8gUyAtIDEpICsgMik7CisKKyAg
ICAgICAgZG91YmxlIGsgPSBjb3ModzApOworICAgICAgICBkb3VibGUgazIgPSAyICogc3FydChB
KSAqIGFscGhhOworCisgICAgICAgIGRvdWJsZSBhUGx1c09uZSA9IEEgKyAxOworICAgICAgICBk
b3VibGUgYU1pbnVzT25lID0gQSAtIDE7CiAgICAgCi0gICAgZG91YmxlIGIwID0gQSAqIChhUGx1
c09uZSAtIGFNaW51c09uZSAqIGsgKyBrMik7Ci0gICAgZG91YmxlIGIxID0gMiAqIEEgKiAoYU1p
bnVzT25lIC0gYVBsdXNPbmUgKiBrKTsKLSAgICBkb3VibGUgYjIgPSBBICogKGFQbHVzT25lIC0g
YU1pbnVzT25lICogayAtIGsyKTsKLSAgICBkb3VibGUgYTAgPSBhUGx1c09uZSArIGFNaW51c09u
ZSAqIGsgKyBrMjsKLSAgICBkb3VibGUgYTEgPSAtMiAqIChhTWludXNPbmUgKyBhUGx1c09uZSAq
IGspOwotICAgIGRvdWJsZSBhMiA9IGFQbHVzT25lICsgYU1pbnVzT25lICogayAtIGsyOwotCi0g
ICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAg
ICAgICAgZG91YmxlIGIwID0gQSAqIChhUGx1c09uZSAtIGFNaW51c09uZSAqIGsgKyBrMik7Cisg
ICAgICAgIGRvdWJsZSBiMSA9IDIgKiBBICogKGFNaW51c09uZSAtIGFQbHVzT25lICogayk7Cisg
ICAgICAgIGRvdWJsZSBiMiA9IEEgKiAoYVBsdXNPbmUgLSBhTWludXNPbmUgKiBrIC0gazIpOwor
ICAgICAgICBkb3VibGUgYTAgPSBhUGx1c09uZSArIGFNaW51c09uZSAqIGsgKyBrMjsKKyAgICAg
ICAgZG91YmxlIGExID0gLTIgKiAoYU1pbnVzT25lICsgYVBsdXNPbmUgKiBrKTsKKyAgICAgICAg
ZG91YmxlIGEyID0gYVBsdXNPbmUgKyBhTWludXNPbmUgKiBrIC0gazI7CisKKyAgICAgICAgc2V0
Tm9ybWFsaXplZENvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBXaGVuIGZyZXF1ZW5jeSBpcyAwLCB0aGUgei10cmFuc2Zvcm0gaXMg
MS4KKyAgICAgICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cygxLCAwLCAwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDAsIDApOworICAgIH0KIH0KIAogdm9pZCBCaXF1
YWQ6OnNldEhpZ2hTaGVsZlBhcmFtcyhkb3VibGUgZnJlcXVlbmN5LCBkb3VibGUgZGJHYWluKQog
ewotICAgIGRvdWJsZSB3MCA9IHBpRG91YmxlICogZnJlcXVlbmN5OworICAgIC8vIENsaXAgZnJl
cXVlbmNpZXMgdG8gYmV0d2VlbiAwIGFuZCAxLCBpbmNsdXNpdmUuCisgICAgZnJlcXVlbmN5ID0g
c3RkOjptYXgoMC4wLCBzdGQ6Om1pbihmcmVxdWVuY3ksIDEuMCkpOwogCiAgICAgZG91YmxlIEEg
PSBwb3coMTAuMCwgZGJHYWluIC8gNDApOwotICAgIGRvdWJsZSBTID0gMTsgLy8gZmlsdGVyIHNs
b3BlICgxIGlzIG1heCB2YWx1ZSkKLSAgICBkb3VibGUgYWxwaGEgPSAwLjUgKiBzaW4odzApICog
c3FydCgoQSArIDEgLyBBKSAqICgxIC8gUyAtIDEpICsgMik7CiAKLSAgICBkb3VibGUgayA9IGNv
cyh3MCk7Ci0gICAgZG91YmxlIGsyID0gMiAqIHNxcnQoQSkgKiBhbHBoYTsKKyAgICBpZiAoZnJl
cXVlbmN5ID09IDEpIHsKKyAgICAgICAgLy8gVGhlIHotdHJhbnNmb3JtIGlzIDEuCisgICAgICAg
IHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoMSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAxLCAwLCAwKTsKKyAgICB9IGVsc2UgaWYgKGZyZXF1ZW5jeSA+IDApIHsK
KyAgICAgICAgZG91YmxlIHcwID0gcGlEb3VibGUgKiBmcmVxdWVuY3k7CisKKyAgICAgICAgZG91
YmxlIFMgPSAxOyAvLyBmaWx0ZXIgc2xvcGUgKDEgaXMgbWF4IHZhbHVlKQorICAgICAgICBkb3Vi
bGUgYWxwaGEgPSAwLjUgKiBzaW4odzApICogc3FydCgoQSArIDEgLyBBKSAqICgxIC8gUyAtIDEp
ICsgMik7CiAKLSAgICBkb3VibGUgYVBsdXNPbmUgPSBBICsgMTsKLSAgICBkb3VibGUgYU1pbnVz
T25lID0gQSAtIDE7CisgICAgICAgIGRvdWJsZSBrID0gY29zKHcwKTsKKyAgICAgICAgZG91Ymxl
IGsyID0gMiAqIHNxcnQoQSkgKiBhbHBoYTsKKworICAgICAgICBkb3VibGUgYVBsdXNPbmUgPSBB
ICsgMTsKKyAgICAgICAgZG91YmxlIGFNaW51c09uZSA9IEEgLSAxOwogICAgIAotICAgIGRvdWJs
ZSBiMCA9IEEgKiAoYVBsdXNPbmUgKyBhTWludXNPbmUgKiBrICsgazIpOwotICAgIGRvdWJsZSBi
MSA9IC0yICogQSAqIChhTWludXNPbmUgKyBhUGx1c09uZSAqIGspOwotICAgIGRvdWJsZSBiMiA9
IEEgKiAoYVBsdXNPbmUgKyBhTWludXNPbmUgKiBrIC0gazIpOwotICAgIGRvdWJsZSBhMCA9IGFQ
bHVzT25lIC0gYU1pbnVzT25lICogayArIGsyOwotICAgIGRvdWJsZSBhMSA9IDIgKiAoYU1pbnVz
T25lIC0gYVBsdXNPbmUgKiBrKTsKLSAgICBkb3VibGUgYTIgPSBhUGx1c09uZSAtIGFNaW51c09u
ZSAqIGsgLSBrMjsKLQotICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoYjAsIGIxLCBiMiwg
YTAsIGExLCBhMik7CisgICAgICAgIGRvdWJsZSBiMCA9IEEgKiAoYVBsdXNPbmUgKyBhTWludXNP
bmUgKiBrICsgazIpOworICAgICAgICBkb3VibGUgYjEgPSAtMiAqIEEgKiAoYU1pbnVzT25lICsg
YVBsdXNPbmUgKiBrKTsKKyAgICAgICAgZG91YmxlIGIyID0gQSAqIChhUGx1c09uZSArIGFNaW51
c09uZSAqIGsgLSBrMik7CisgICAgICAgIGRvdWJsZSBhMCA9IGFQbHVzT25lIC0gYU1pbnVzT25l
ICogayArIGsyOworICAgICAgICBkb3VibGUgYTEgPSAyICogKGFNaW51c09uZSAtIGFQbHVzT25l
ICogayk7CisgICAgICAgIGRvdWJsZSBhMiA9IGFQbHVzT25lIC0gYU1pbnVzT25lICogayAtIGsy
OworCisgICAgICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoYjAsIGIxLCBiMiwgYTAsIGEx
LCBhMik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2hlbiBmcmVxdWVuY3kgPSAwLCB0aGUg
ZmlsdGVyIGlzIGp1c3QgYSBnYWluLCBBXjIuCisgICAgICAgIHNldE5vcm1hbGl6ZWRDb2VmZmlj
aWVudHMoQSAqIEEsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwg
MCwgMCk7CisgICAgfQogfQogCiB2b2lkIEJpcXVhZDo6c2V0UGVha2luZ1BhcmFtcyhkb3VibGUg
ZnJlcXVlbmN5LCBkb3VibGUgUSwgZG91YmxlIGRiR2FpbikKIHsKLSAgICBkb3VibGUgdzAgPSBw
aURvdWJsZSAqIGZyZXF1ZW5jeTsKLSAgICBkb3VibGUgYWxwaGEgPSBzaW4odzApIC8gKDIgKiBR
KTsKLSAgICBkb3VibGUgQSA9IHBvdygxMC4wLCBkYkdhaW4gLyA0MCk7CisgICAgLy8gQ2xpcCBm
cmVxdWVuY2llcyB0byBiZXR3ZWVuIDAgYW5kIDEsIGluY2x1c2l2ZS4KKyAgICBmcmVxdWVuY3kg
PSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKGZyZXF1ZW5jeSwgMS4wKSk7CiAKLSAgICBkb3VibGUg
ayA9IGNvcyh3MCk7CisgICAgLy8gRG9uJ3QgbGV0IFEgZ28gbmVnYXRpdmUsIHdoaWNoIGNhdXNl
cyBhbiB1bnN0YWJsZSBmaWx0ZXIuCisgICAgUSA9IHN0ZDo6bWF4KDAuMCwgUSk7CiAKLSAgICBk
b3VibGUgYjAgPSAxICsgYWxwaGEgKiBBOwotICAgIGRvdWJsZSBiMSA9IC0yICogazsKLSAgICBk
b3VibGUgYjIgPSAxIC0gYWxwaGEgKiBBOwotICAgIGRvdWJsZSBhMCA9IDEgKyBhbHBoYSAvIEE7
Ci0gICAgZG91YmxlIGExID0gLTIgKiBrOwotICAgIGRvdWJsZSBhMiA9IDEgLSBhbHBoYSAvIEE7
CisgICAgZG91YmxlIEEgPSBwb3coMTAuMCwgZGJHYWluIC8gNDApOwogCi0gICAgc2V0Tm9ybWFs
aXplZENvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAgICBpZiAoZnJlcXVl
bmN5ID4gMCAmJiBmcmVxdWVuY3kgPCAxKSB7CisgICAgICAgIGlmIChRID4gMCkgeworICAgICAg
ICAgICAgZG91YmxlIHcwID0gcGlEb3VibGUgKiBmcmVxdWVuY3k7CisgICAgICAgICAgICBkb3Vi
bGUgYWxwaGEgPSBzaW4odzApIC8gKDIgKiBRKTsKKworICAgICAgICAgICAgZG91YmxlIGsgPSBj
b3ModzApOworCisgICAgICAgICAgICBkb3VibGUgYjAgPSAxICsgYWxwaGEgKiBBOworICAgICAg
ICAgICAgZG91YmxlIGIxID0gLTIgKiBrOworICAgICAgICAgICAgZG91YmxlIGIyID0gMSAtIGFs
cGhhICogQTsKKyAgICAgICAgICAgIGRvdWJsZSBhMCA9IDEgKyBhbHBoYSAvIEE7CisgICAgICAg
ICAgICBkb3VibGUgYTEgPSAtMiAqIGs7CisgICAgICAgICAgICBkb3VibGUgYTIgPSAxIC0gYWxw
aGEgLyBBOworCisgICAgICAgICAgICBzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKGIwLCBiMSwg
YjIsIGEwLCBhMSwgYTIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2hlbiBR
ID0gMCwgdGhlIGFib3ZlIGZvcm11bGFzIGhhdmUgcHJvYmxlbXMuIElmIHdlIGxvb2sgYXQKKyAg
ICAgICAgICAgIC8vIHRoZSB6LXRyYW5zZm9ybSwgd2UgY2FuIHNlZSB0aGF0IHRoZSBsaW1pdCBh
cyBRLT4wIGlzIEFeMiwgc28KKyAgICAgICAgICAgIC8vIHNldCB0aGUgZmlsdGVyIHRoYXQgd2F5
LgorICAgICAgICAgICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhBICogQSwgMCwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBXaGVuIGZyZXF1ZW5jeSBpcyAwIG9yIDEsIHRoZSB6
LXRyYW5zZm9ybSBpcyAxLgorICAgICAgICBzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKDEsIDAs
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCk7CisgICAgfQog
fQogCiB2b2lkIEJpcXVhZDo6c2V0QWxscGFzc1BhcmFtcyhkb3VibGUgZnJlcXVlbmN5LCBkb3Vi
bGUgUSkKIHsKLSAgICBkb3VibGUgdzAgPSBwaURvdWJsZSAqIGZyZXF1ZW5jeTsKLSAgICBkb3Vi
bGUgYWxwaGEgPSBzaW4odzApIC8gKDIgKiBRKTsKLQotICAgIGRvdWJsZSBrID0gY29zKHcwKTsK
LQotICAgIGRvdWJsZSBiMCA9IDEgLSBhbHBoYTsKLSAgICBkb3VibGUgYjEgPSAtMiAqIGs7Ci0g
ICAgZG91YmxlIGIyID0gMSArIGFscGhhOwotICAgIGRvdWJsZSBhMCA9IDEgKyBhbHBoYTsKLSAg
ICBkb3VibGUgYTEgPSAtMiAqIGs7Ci0gICAgZG91YmxlIGEyID0gMSAtIGFscGhhOwotCi0gICAg
c2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAgICAv
LyBDbGlwIGZyZXF1ZW5jaWVzIHRvIGJldHdlZW4gMCBhbmQgMSwgaW5jbHVzaXZlLgorICAgIGZy
ZXF1ZW5jeSA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oZnJlcXVlbmN5LCAxLjApKTsKKworICAg
IC8vIERvbid0IGxldCBRIGdvIG5lZ2F0aXZlLCB3aGljaCBjYXVzZXMgYW4gdW5zdGFibGUgZmls
dGVyLgorICAgIFEgPSBzdGQ6Om1heCgwLjAsIFEpOworCisgICAgaWYgKGZyZXF1ZW5jeSA+IDAg
JiYgZnJlcXVlbmN5IDwgMSkgeworICAgICAgICBpZiAoUSA+IDApIHsKKyAgICAgICAgICAgIGRv
dWJsZSB3MCA9IHBpRG91YmxlICogZnJlcXVlbmN5OworICAgICAgICAgICAgZG91YmxlIGFscGhh
ID0gc2luKHcwKSAvICgyICogUSk7CisKKyAgICAgICAgICAgIGRvdWJsZSBrID0gY29zKHcwKTsK
KworICAgICAgICAgICAgZG91YmxlIGIwID0gMSAtIGFscGhhOworICAgICAgICAgICAgZG91Ymxl
IGIxID0gLTIgKiBrOworICAgICAgICAgICAgZG91YmxlIGIyID0gMSArIGFscGhhOworICAgICAg
ICAgICAgZG91YmxlIGEwID0gMSArIGFscGhhOworICAgICAgICAgICAgZG91YmxlIGExID0gLTIg
KiBrOworICAgICAgICAgICAgZG91YmxlIGEyID0gMSAtIGFscGhhOworCisgICAgICAgICAgICBz
ZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2hlbiBRID0gMCwgdGhlIGFib3ZlIGZvcm11bGFz
IGhhdmUgcHJvYmxlbXMuIElmIHdlIGxvb2sgYXQKKyAgICAgICAgICAgIC8vIHRoZSB6LXRyYW5z
Zm9ybSwgd2UgY2FuIHNlZSB0aGF0IHRoZSBsaW1pdCBhcyBRLT4wIGlzIC0xLCBzbworICAgICAg
ICAgICAgLy8gc2V0IHRoZSBmaWx0ZXIgdGhhdCB3YXkuCisgICAgICAgICAgICBzZXROb3JtYWxp
emVkQ29lZmZpY2llbnRzKC0xLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAxLCAwLCAwKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdo
ZW4gZnJlcXVlbmN5IGlzIDAgb3IgMSwgdGhlIHotdHJhbnNmb3JtIGlzIDEuCisgICAgICAgIHNl
dE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoMSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAxLCAwLCAwKTsKKyAgICB9CiB9CiAKIHZvaWQgQmlxdWFkOjpzZXROb3RjaFBh
cmFtcyhkb3VibGUgZnJlcXVlbmN5LCBkb3VibGUgUSkKIHsKLSAgICBkb3VibGUgdzAgPSBwaURv
dWJsZSAqIGZyZXF1ZW5jeTsKLSAgICBkb3VibGUgYWxwaGEgPSBzaW4odzApIC8gKDIgKiBRKTsK
LQotICAgIGRvdWJsZSBrID0gY29zKHcwKTsKLQotICAgIGRvdWJsZSBiMCA9IDE7Ci0gICAgZG91
YmxlIGIxID0gLTIgKiBrOwotICAgIGRvdWJsZSBiMiA9IDE7Ci0gICAgZG91YmxlIGEwID0gMSAr
IGFscGhhOwotICAgIGRvdWJsZSBhMSA9IC0yICogazsKLSAgICBkb3VibGUgYTIgPSAxIC0gYWxw
aGE7Ci0KLSAgICBzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwg
YTIpOworICAgIC8vIENsaXAgZnJlcXVlbmNpZXMgdG8gYmV0d2VlbiAwIGFuZCAxLCBpbmNsdXNp
dmUuCisgICAgZnJlcXVlbmN5ID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbihmcmVxdWVuY3ksIDEu
MCkpOworCisgICAgLy8gRG9uJ3QgbGV0IFEgZ28gbmVnYXRpdmUsIHdoaWNoIGNhdXNlcyBhbiB1
bnN0YWJsZSBmaWx0ZXIuCisgICAgUSA9IHN0ZDo6bWF4KDAuMCwgUSk7CisKKyAgICBpZiAoZnJl
cXVlbmN5ID4gMCAmJiBmcmVxdWVuY3kgPCAxKSB7CisgICAgICAgIGlmIChRID4gMCkgeworICAg
ICAgICAgICAgZG91YmxlIHcwID0gcGlEb3VibGUgKiBmcmVxdWVuY3k7CisgICAgICAgICAgICBk
b3VibGUgYWxwaGEgPSBzaW4odzApIC8gKDIgKiBRKTsKKworICAgICAgICAgICAgZG91YmxlIGsg
PSBjb3ModzApOworCisgICAgICAgICAgICBkb3VibGUgYjAgPSAxOworICAgICAgICAgICAgZG91
YmxlIGIxID0gLTIgKiBrOworICAgICAgICAgICAgZG91YmxlIGIyID0gMTsKKyAgICAgICAgICAg
IGRvdWJsZSBhMCA9IDEgKyBhbHBoYTsKKyAgICAgICAgICAgIGRvdWJsZSBhMSA9IC0yICogazsK
KyAgICAgICAgICAgIGRvdWJsZSBhMiA9IDEgLSBhbHBoYTsKKworICAgICAgICAgICAgc2V0Tm9y
bWFsaXplZENvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIFdoZW4gUSA9IDAsIHRoZSBhYm92ZSBmb3JtdWxhcyBoYXZl
IHByb2JsZW1zLiBJZiB3ZSBsb29rIGF0CisgICAgICAgICAgICAvLyB0aGUgei10cmFuc2Zvcm0s
IHdlIGNhbiBzZWUgdGhhdCB0aGUgbGltaXQgYXMgUS0+MCBpcyAwLCBzbworICAgICAgICAgICAg
Ly8gc2V0IHRoZSBmaWx0ZXIgdGhhdCB3YXkuCisgICAgICAgICAgICBzZXROb3JtYWxpemVkQ29l
ZmZpY2llbnRzKDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDEsIDAsIDApOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2hlbiBmcmVx
dWVuY3kgaXMgMCBvciAxLCB0aGUgei10cmFuc2Zvcm0gaXMgMS4KKyAgICAgICAgc2V0Tm9ybWFs
aXplZENvZWZmaWNpZW50cygxLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEsIDAsIDApOworICAgIH0KIH0KIAogdm9pZCBCaXF1YWQ6OnNldEJhbmRwYXNzUGFyYW1z
KGRvdWJsZSBmcmVxdWVuY3ksIGRvdWJsZSBRKQogewotICAgIGRvdWJsZSB3MCA9IHBpRG91Ymxl
ICogZnJlcXVlbmN5OwotICAgIGRvdWJsZSBhbHBoYSA9IHNpbih3MCkgLyAoMiAqIFEpOworICAg
IC8vIE5vIG5lZ2F0aXZlIGZyZXF1ZW5jaWVzIGFsbG93ZWQuCisgICAgZnJlcXVlbmN5ID0gc3Rk
OjptYXgoMC4wLCBmcmVxdWVuY3kpOwogCi0gICAgZG91YmxlIGsgPSBjb3ModzApOworICAgIC8v
IERvbid0IGxldCBRIGdvIG5lZ2F0aXZlLCB3aGljaCBjYXVzZXMgYW4gdW5zdGFibGUgZmlsdGVy
LgorICAgIFEgPSBzdGQ6Om1heCgwLjAsIFEpOworCisgICAgaWYgKGZyZXF1ZW5jeSA+IDAgJiYg
ZnJlcXVlbmN5IDwgMSkgeworICAgICAgZG91YmxlIHcwID0gcGlEb3VibGUgKiBmcmVxdWVuY3k7
CisgICAgICBpZiAoUSA+IDApIHsKKyAgICAgICAgZG91YmxlIGFscGhhID0gc2luKHcwKSAvICgy
ICogUSk7CisKKyAgICAgICAgZG91YmxlIGsgPSBjb3ModzApOwogICAgIAotICAgIGRvdWJsZSBi
MCA9IGFscGhhOwotICAgIGRvdWJsZSBiMSA9IDA7Ci0gICAgZG91YmxlIGIyID0gLWFscGhhOwot
ICAgIGRvdWJsZSBhMCA9IDEgKyBhbHBoYTsKLSAgICBkb3VibGUgYTEgPSAtMiAqIGs7Ci0gICAg
ZG91YmxlIGEyID0gMSAtIGFscGhhOwotCi0gICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhi
MCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAgICAgICAgZG91YmxlIGIwID0gYWxwaGE7CisgICAg
ICAgIGRvdWJsZSBiMSA9IDA7CisgICAgICAgIGRvdWJsZSBiMiA9IC1hbHBoYTsKKyAgICAgICAg
ZG91YmxlIGEwID0gMSArIGFscGhhOworICAgICAgICBkb3VibGUgYTEgPSAtMiAqIGs7CisgICAg
ICAgIGRvdWJsZSBhMiA9IDEgLSBhbHBoYTsKKworICAgICAgICBzZXROb3JtYWxpemVkQ29lZmZp
Y2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gV2hlbiBRID0gMCwgdGhlIGFib3ZlIGZvcm11bGFzIGhhdmUgcHJvYmxlbXMuIElmIHdlIGxv
b2sgYXQKKyAgICAgICAgLy8gdGhlIHotdHJhbnNmb3JtLCB3ZSBjYW4gc2VlIHRoYXQgdGhlIGxp
bWl0IGFzIFEtPjAgaXMgMSwgc28KKyAgICAgICAgLy8gc2V0IHRoZSBmaWx0ZXIgdGhhdCB3YXku
CisgICAgICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoMSwgMCwgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAxLCAwLCAwKTsKKyAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBXaGVuIHRoZSBjdXRvZmYgaXMgemVybywgdGhlIHotdHJhbnNmb3JtIGFwcHJv
YWNoZXMgMCwgaWYgUQorICAgICAgICAvLyA+IDAuIFdoZW4gYm90aCBRIGFuZCBjdXRvZmYgYXJl
IHplcm8sIHRoZSB6LXRyYW5zZm9ybSBpcworICAgICAgICAvLyBwcmV0dHkgbXVjaCB1bmRlZmlu
ZWQuIFdoYXQgc2hvdWxkIHdlIGRvIGluIHRoaXMgY2FzZT8KKyAgICAgICAgLy8gRm9yIG5vdywg
anVzdCBtYWtlIHRoZSBmaWx0ZXIgMC4gV2hlbiB0aGUgY3V0b2ZmIGlzIDEsIHRoZQorICAgICAg
ICAvLyB6LXRyYW5zZm9ybSBhbHNvIGFwcHJvYWNoZXMgMC4KKyAgICAgIHNldE5vcm1hbGl6ZWRD
b2VmZmljaWVudHMoMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwg
MCwgMCk7CisgICAgfQogfQogCiB2b2lkIEJpcXVhZDo6c2V0WmVyb1BvbGVQYWlycyhjb25zdCBD
b21wbGV4ICZ6ZXJvLCBjb25zdCBDb21wbGV4ICZwb2xlKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDYyOWUxNTFmMzNlMWFm
Y2Y0ODA5NGMwZDQ5NjVhYWNmNDUzZjJkM2YuLjVjOTk4ZTRjZWRmMTgxM2QyZmYxMGJkMzZhYzk4
NTJlNjJlYjliYTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMi0wMS0xMyAgUmF5bW9uZCBU
b3kgIDxydG95QGNocm9taXVtLm9yZz4KKworICAgICAgICBDaGVjayBwYXJhbWV0ZXJzIHRvIGJp
cXVhZCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03MTQxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWQtYWxscGFzcy1leHBlY3RlZC50eHQ6IEFkZGVk
CisgICAgICAgICogd2ViYXVkaW8vYmlxdWFkLWFsbHBhc3MuaHRtbDogQWRkZWQKKyAgICAgICAg
KiB3ZWJhdWRpby9iaXF1YWQtYmFuZHBhc3MtZXhwZWN0ZWQudHh0OiBBZGRlZAorICAgICAgICAq
IHdlYmF1ZGlvL2JpcXVhZC1iYW5kcGFzcy5odG1sOiBBZGRlZAorICAgICAgICAqIHdlYmF1ZGlv
L2JpcXVhZC1oaWdocGFzcy1leHBlY3RlZC50eHQ6IEFkZGVkCisgICAgICAgICogd2ViYXVkaW8v
YmlxdWFkLWhpZ2hwYXNzLmh0bWw6IEFkZGVkCisgICAgICAgICogd2ViYXVkaW8vYmlxdWFkLWhp
Z2hzaGVsZi1leHBlY3RlZC50eHQ6IEFkZGVkCisgICAgICAgICogd2ViYXVkaW8vYmlxdWFkLWhp
Z2hzaGVsZi5odG1sOiBBZGRlZAorICAgICAgICAqIHdlYmF1ZGlvL2JpcXVhZC1sb3dwYXNzLWV4
cGVjdGVkLnR4dDogQWRkZWQKKyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWQtbG93cGFzcy5odG1s
OiBBZGRlZAorICAgICAgICAqIHdlYmF1ZGlvL2JpcXVhZC1sb3dzaGVsZi1leHBlY3RlZC50eHQ6
IEFkZGVkCisgICAgICAgICogd2ViYXVkaW8vYmlxdWFkLWxvd3NoZWxmLmh0bWw6IEFkZGVkCisg
ICAgICAgICogd2ViYXVkaW8vYmlxdWFkLW5vdGNoLWV4cGVjdGVkLnR4dDogQWRkZWQKKyAgICAg
ICAgKiB3ZWJhdWRpby9iaXF1YWQtbm90Y2guaHRtbDogQWRkZWQKKyAgICAgICAgKiB3ZWJhdWRp
by9iaXF1YWQtcGVha2luZy1leHBlY3RlZC50eHQ6IEFkZGVkCisgICAgICAgICogd2ViYXVkaW8v
YmlxdWFkLXBlYWtpbmcuaHRtbDogQWRkZWQKKyAgICAgICAgKiB3ZWJhdWRpby9yZXNvdXJjZXMv
YmlxdWFkLXRlc3RpbmcuanM6IEFkZGVkCisKIDIwMTItMDEtMTcgIEphbWVzIFJvYmluc29uICA8
amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIE1hcmsgc29tZSBjb21w
b3NpdGluZyB0ZXN0cyBhcyBmYWlsaW5nIHdpdGggYW4gSU1BR0UgZGlmZiBkdWUgdG8gdmlkZW8g
cGxheWJhY2sgcHJvYmxlbQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFk
LWFsbHBhc3MtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWFsbHBh
c3MtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyOTYxMzJmMmRjNjNkYmY4MTNmZjRjNTRlYjc3
ZTZkMTUwYWRlNjYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1
YWQtYWxscGFzcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMSBAQAorVGVzdHMgQmlxdWFkIGFs
bHBhc3MgZmlsdGVyLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgUmVuZGVy
ZWQgb3V0cHV0IGRpZCBub3QgaGF2ZSBpbmZpbml0aWVzIG9yIE5hTnMuCitQQVNTIEFsbHBhc3Mg
ZmlsdGVyIHJlc3BvbnNlIGlzIGNvcnJlY3QuCitQQVNTIFRlc3Qgc2lnbmFsIHdhcyBjb3JyZWN0
bHkgZmlsdGVyZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWFsbHBhc3Mu
aHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1hbGxwYXNzLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMjY2MjhmZTRiMGQ2MTZlMGExNDcwNGNjMzFiNzk3MDFhMWQ1Mjg5OQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1hbGxwYXNzLmh0bWwKQEAgLTAsMCAr
MSw0OCBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYmlxdWFkLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorCis8Ym9keT4KKworPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgQmlxdWFkIGFs
bHBhc3MgZmlsdGVyLiIpOworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
CisgICAgfQorICAgIAorICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKyAgICAgICAg
CisgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dC4KKyAgICB2YXIgY29udGV4dCA9
IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgc2FtcGxlUmF0ZSAqIHJlbmRlckxlbmd0aFNlY29u
ZHMsIHNhbXBsZVJhdGUpOworCisgICAgLy8gRHVtbXkgZmlsdGVyIHRvIGdldCBmaWx0ZXIgdHlw
ZSBjb25zdGFudAorICAgIHZhciBmID0gY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTsKKwor
ICAgIHZhciBmaWx0ZXJQYXJhbWV0ZXJzID0gW3tjdXRvZmYgOiAwLCAgICBxIDogMTAsIGdhaW4g
OiAxIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6IDEsICAgIHEgOiAx
MCwgZ2FpbiA6IDEgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogLjUs
ICAgcSA6ICAwLCBnYWluIDogMSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXRv
ZmYgOiAwLjI1LCBxIDogMTAsIGdhaW4gOiAxIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBdOworICAgIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgZi5BTExQQVNTLCBmaWx0ZXJQYXJh
bWV0ZXJzKTsKK30KKworcnVuVGVzdCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKwor
PC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vYmlxdWFkLWJhbmRwYXNzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dl
YmF1ZGlvL2JpcXVhZC1iYW5kcGFzcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGJiOTdkNGFi
ZWU5NzA2YTA4NmJlZDQ4N2ZlYjQ2NmY1YzRiOWQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1iYW5kcGFzcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwx
MSBAQAorVGVzdHMgQmlxdWFkIGJhbmRwYXNzIGZpbHRlci4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCitQQVNTIFJlbmRlcmVkIG91dHB1dCBkaWQgbm90IGhhdmUgaW5maW5pdGllcyBv
ciBOYU5zLgorUEFTUyBCYW5kcGFzcyBmaWx0ZXIgcmVzcG9uc2UgaXMgY29ycmVjdC4KK1BBU1Mg
VGVzdCBzaWduYWwgd2FzIGNvcnJlY3RseSBmaWx0ZXJlZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJhdWRpby9iaXF1YWQtYmFuZHBhc3MuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVh
ZC1iYW5kcGFzcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiMTU0NTI1NTRhNmM5NDQ1MDhhYTAzZTVjYzVm
N2UzMDZmMjdkZjcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1
YWQtYmFuZHBhc3MuaHRtbApAQCAtMCwwICsxLDUwIEBACis8IURPQ1RZUEUgaHRtbD4KKworPGh0
bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZmFzdC9qcy9yZXNv
dXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8t
dGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9iaXF1YWQt
dGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorCis8ZGl2IGlkPSJkZXNj
cmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rl
c2NyaXB0aW9uKCJUZXN0cyBCaXF1YWQgYmFuZHBhc3MgZmlsdGVyLiIpOworCitmdW5jdGlvbiBy
dW5UZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorICAgIAorICAgIHdpbmRvdy5qc1Rl
c3RJc0FzeW5jID0gdHJ1ZTsKKyAgICAgICAgCisgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8g
Y29udGV4dC4KKyAgICB2YXIgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgc2Ft
cGxlUmF0ZSAqIHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOworCisgICAgLy8gRHVt
bXkgZmlsdGVyIHRvIGdldCBmaWx0ZXIgdHlwZSBjb25zdGFudAorICAgIHZhciBmID0gY29udGV4
dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTsKKworICAgIC8vIFRoZSBmaWx0ZXJzIHdlIHdhbnQgdG8g
dGVzdC4KKyAgICB2YXIgZmlsdGVyUGFyYW1ldGVycyA9IFt7Y3V0b2ZmIDogMCwgICAgcSA6IDAs
IGdhaW4gOiAxIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6IDEsICAg
IHEgOiAwLCBnYWluIDogMSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYg
OiAwLjUsICBxIDogMCwgZ2FpbiA6IDEgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
Y3V0b2ZmIDogMC4yNSwgcSA6IDEsIGdhaW4gOiAxIH0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBdOworCisgICAgY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCBmLkJBTkRQQVNTLCBmaWx0
ZXJQYXJhbWV0ZXJzKTsKK30KKworcnVuVGVzdCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWhpZ2hwYXNzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3dlYmF1ZGlvL2JpcXVhZC1oaWdocGFzcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNl
NmZiNTgyY2Q2OGVmODNiNWVjMzY0ZGM3MWEwYjBiNzIyMDRmZgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1oaWdocGFzcy1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwxMSBAQAorVGVzdHMgQmlxdWFkIGhpZ2hwYXNzIGZpbHRlci4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCitQQVNTIFJlbmRlcmVkIG91dHB1dCBkaWQgbm90IGhhdmUgaW5maW5p
dGllcyBvciBOYU5zLgorUEFTUyBIaWdocGFzcyBmaWx0ZXIgcmVzcG9uc2UgaXMgY29ycmVjdC4K
K1BBU1MgVGVzdCBzaWduYWwgd2FzIGNvcnJlY3RseSBmaWx0ZXJlZC4KK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9iaXF1YWQtaGlnaHBhc3MuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlv
L2JpcXVhZC1oaWdocGFzcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMwYjdkZWFkOGY3OWE4M2E3MGYzNTdi
NGIzYjM2ZjJiZjZjN2Q2NjcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRp
by9iaXF1YWQtaGlnaHBhc3MuaHRtbApAQCAtMCwwICsxLDQ5IEBACis8IURPQ1RZUEUgaHRtbD4K
KworPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
YXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9i
aXF1YWQtdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorCis8ZGl2IGlk
PSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlw
dD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyBCaXF1YWQgaGlnaHBhc3MgZmlsdGVyLiIpOworCitmdW5j
dGlvbiBydW5UZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorICAgIAorICAgIHdpbmRv
dy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKyAgICAgICAgCisgICAgLy8gQ3JlYXRlIG9mZmxpbmUg
YXVkaW8gY29udGV4dC4KKyAgICB2YXIgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQo
Miwgc2FtcGxlUmF0ZSAqIHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOworCisgICAg
Ly8gRHVtbXkgZmlsdGVyIHRvIGdldCBmaWx0ZXIgdHlwZSBjb25zdGFudAorICAgIHZhciBmID0g
Y29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTsKKworICAgIC8vIFRoZSBmaWx0ZXJzIHdlIHdh
bnQgdG8gdGVzdC4KKyAgICB2YXIgZmlsdGVyUGFyYW1ldGVycyA9IFt7Y3V0b2ZmIDogMCwgICAg
cSA6IDEsIGdhaW4gOiAxIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6
IDEsICAgIHEgOiAxLCBnYWluIDogMSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtj
dXRvZmYgOiAwLjI1LCBxIDogMSwgZ2FpbiA6IDEgfSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF07CisKKyAgICBjcmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsIGYuSElHSFBBU1MsIGZpbHRl
clBhcmFtZXRlcnMpOworfQorCitydW5UZXN0KCk7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OworCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtaGlnaHNoZWxmLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3dlYmF1ZGlvL2JpcXVhZC1oaWdoc2hlbGYtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRl
ODYzNDM1OTdkYjAyNWVmYTI4NzU5M2MyZmE5YTYyZDNlMTI4YTIKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtaGlnaHNoZWxmLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDExIEBACitUZXN0cyBCaXF1YWQgaGlnaHNoZWxmIGZpbHRlci4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCitQQVNTIFJlbmRlcmVkIG91dHB1dCBkaWQgbm90IGhhdmUgaW5m
aW5pdGllcyBvciBOYU5zLgorUEFTUyBIaWdoc2hlbGYgZmlsdGVyIHJlc3BvbnNlIGlzIGNvcnJl
Y3QuCitQQVNTIFRlc3Qgc2lnbmFsIHdhcyBjb3JyZWN0bHkgZmlsdGVyZWQuCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWhpZ2hzaGVsZi5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vYmlxdWFkLWhpZ2hzaGVsZi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyNDk3ZmEwYzJjYjg3YjQ5
MjFiMzUzYTkyYmFjODViYTM3YmI0NzEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJhdWRpby9iaXF1YWQtaGlnaHNoZWxmLmh0bWwKQEAgLTAsMCArMSw0OSBAQAorPCFET0NUWVBF
IGh0bWw+CisKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvYmlxdWFkLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKwor
PGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisK
KzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgQmlxdWFkIGhpZ2hzaGVsZiBmaWx0ZXIuIik7
CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisgICAgCisg
ICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworICAgICAgICAKKyAgICAvLyBDcmVhdGUg
b2ZmbGluZSBhdWRpbyBjb250ZXh0LgorICAgIHZhciBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlv
Q29udGV4dCgyLCBzYW1wbGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7
CisKKyAgICAvLyBEdW1teSBmaWx0ZXIgdG8gZ2V0IGZpbHRlciB0eXBlIGNvbnN0YW50CisgICAg
dmFyIGYgPSBjb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpOworCisgICAgLy8gVGhlIGZpbHRl
cnMgd2Ugd2FudCB0byB0ZXN0LgorICAgIHZhciBmaWx0ZXJQYXJhbWV0ZXJzID0gW3tjdXRvZmYg
OiAwLCAgICBxIDogMTAsIGdhaW4gOiAxMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHtjdXRvZmYgOiAxLCAgICBxIDogMTAsIGdhaW4gOiAxMCB9LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHtjdXRvZmYgOiAwLjI1LCBxIDogMTAsIGdhaW4gOiAxMCB9LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXTsKKworICAgIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgZi5I
SUdIU0hFTEYsIGZpbHRlclBhcmFtZXRlcnMpOworfQorCitydW5UZXN0KCk7CitzdWNjZXNzZnVs
bHlQYXJzZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtbG93cGFzcy1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtbG93cGFzcy1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODZiZjAxMzBjOGFlZWJkMTYwNTI4OTJjOWM0MDkwYTZhYzczZDRiZgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1sb3dwYXNzLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDExIEBACitUZXN0cyBCaXF1YWQgbG93cGFzcyBmaWx0ZXIuCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBSZW5kZXJlZCBvdXRwdXQgZGlkIG5vdCBo
YXZlIGluZmluaXRpZXMgb3IgTmFOcy4KK1BBU1MgTG93cGFzcyBmaWx0ZXIgcmVzcG9uc2UgaXMg
Y29ycmVjdC4KK1BBU1MgVGVzdCBzaWduYWwgd2FzIGNvcnJlY3RseSBmaWx0ZXJlZC4KK1BBU1Mg
c3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtbG93cGFzcy5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vYmlxdWFkLWxvd3Bhc3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYzBhMzNiOWNiMTUwMGM4
ZjkwNGY3ODU0YmY4NTg3OWRjM2E3NzA3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vYmlxdWFkLWxvd3Bhc3MuaHRtbApAQCAtMCwwICsxLDQ4IEBACis8IURPQ1RZUEUg
aHRtbD4KKworPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4v
ZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291
cmNlcy9iaXF1YWQtdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorCis8
ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKwor
PHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyBCaXF1YWQgbG93cGFzcyBmaWx0ZXIuIik7CisK
K2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisgICAgCisgICAg
d2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworICAgICAgICAKKyAgICAvLyBDcmVhdGUgb2Zm
bGluZSBhdWRpbyBjb250ZXh0LgorICAgIHZhciBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29u
dGV4dCgyLCBzYW1wbGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisK
KyAgICAvLyBEdW1teSBmaWx0ZXIgdG8gZ2V0IGZpbHRlciB0eXBlIGNvbnN0YW50CisgICAgdmFy
IGYgPSBjb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpOworCisgICAgLy8gVGhlIGZpbHRlcnMg
d2Ugd2FudCB0byB0ZXN0LgorICAgIHZhciBmaWx0ZXJQYXJhbWV0ZXJzID0gW3tjdXRvZmYgOiAw
LCAgICBxIDogMSwgZ2FpbiA6IDEgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0
b2ZmIDogMSwgICAgcSA6IDEsIGdhaW4gOiAxIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAge2N1dG9mZiA6IDAuMjUsIHEgOiAxLCBnYWluIDogMSB9LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXTsKKyAgICBjcmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsIGYuTE9XUEFTUywgZmls
dGVyUGFyYW1ldGVycyk7Cit9CisKK3J1blRlc3QoKTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRy
dWU7CisKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1sb3dzaGVsZi1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9iaXF1YWQtbG93c2hlbGYtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3
ZjUwMDJmZmUxNzY5MzI1NjU5YzNiNmQ3YzVmNGZlYThiNWNmZmMKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtbG93c2hlbGYtZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsMTEgQEAKK1Rlc3RzIEJpcXVhZCBsb3dzaGVsZiBmaWx0ZXIuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworUEFTUyBSZW5kZXJlZCBvdXRwdXQgZGlkIG5vdCBoYXZlIGluZmlu
aXRpZXMgb3IgTmFOcy4KK1BBU1MgTG93c2hlbGYgZmlsdGVyIHJlc3BvbnNlIGlzIGNvcnJlY3Qu
CitQQVNTIFRlc3Qgc2lnbmFsIHdhcyBjb3JyZWN0bHkgZmlsdGVyZWQuCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWxvd3NoZWxmLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRp
by9iaXF1YWQtbG93c2hlbGYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44Yzc1ZjljM2Y2OTQzNmJmM2RlMzNm
ZjI0MGQwZTkzOWJmMTdlNzUyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vYmlxdWFkLWxvd3NoZWxmLmh0bWwKQEAgLTAsMCArMSw0OSBAQAorPCFET0NUWVBFIGh0bWw+
CisKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
YmlxdWFkLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKworPGRpdiBp
ZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3Jp
cHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgQmlxdWFkIGxvd3NoZWxmIGZpbHRlci4iKTsKKworZnVu
Y3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKyAgICAKKyAgICB3aW5k
b3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisgICAgICAgIAorICAgIC8vIENyZWF0ZSBvZmZsaW5l
IGF1ZGlvIGNvbnRleHQuCisgICAgdmFyIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0
KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsKKworICAg
IC8vIER1bW15IGZpbHRlciB0byBnZXQgZmlsdGVyIHR5cGUgY29uc3RhbnQKKyAgICB2YXIgZiA9
IGNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7CisKKyAgICAvLyBUaGUgZmlsdGVycyB3ZSB3
YW50IHRvIHRlc3QuCisgICAgdmFyIGZpbHRlclBhcmFtZXRlcnMgPSBbe2N1dG9mZiA6IDAsICAg
IHEgOiAxMCwgZ2FpbiA6IDEwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9m
ZiA6IDEsICAgIHEgOiAxMCwgZ2FpbiA6IDEwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAge2N1dG9mZiA6IDAuMjUsIHEgOiAxMCwgZ2FpbiA6IDEwIH0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBdOworCisgICAgY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCBmLkxPV1NIRUxG
LCBmaWx0ZXJQYXJhbWV0ZXJzKTsKK30KKworcnVuVGVzdCgpOworc3VjY2Vzc2Z1bGx5UGFyc2Vk
ID0gdHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLW5vdGNoLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1ub3RjaC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGY0
NjM1YThkYzNhNzMyMTFmOGRhNjFkNzI4Y2E4MWZkMDAxYTcyNQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1ub3RjaC1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwxMSBAQAorVGVzdHMgQmlxdWFkIG5vdGNoIGZpbHRlci4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCitQQVNTIFJlbmRlcmVkIG91dHB1dCBkaWQgbm90IGhhdmUgaW5maW5pdGllcyBv
ciBOYU5zLgorUEFTUyBOb3RjaCBmaWx0ZXIgcmVzcG9uc2UgaXMgY29ycmVjdC4KK1BBU1MgVGVz
dCBzaWduYWwgd2FzIGNvcnJlY3RseSBmaWx0ZXJlZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJh
dWRpby9iaXF1YWQtbm90Y2guaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1ub3Rj
aC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjIwMWEwOGQwNzAxZWFmMTcxODg1YjY4OTE5YWExMzBlNGE3YmYx
NjQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtbm90Y2gu
aHRtbApAQCAtMCwwICsxLDQ5IEBACis8IURPQ1RZUEUgaHRtbD4KKworPGh0bWw+Cis8aGVhZD4K
KzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9iaXF1YWQtdGVzdGluZy5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorCis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9k
aXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJU
ZXN0cyBCaXF1YWQgbm90Y2ggZmlsdGVyLiIpOworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0
VW50aWxEb25lKCk7CisgICAgfQorICAgIAorICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1
ZTsKKyAgICAgICAgCisgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dC4KKyAgICB2
YXIgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgc2FtcGxlUmF0ZSAqIHJlbmRl
ckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOworCisgICAgLy8gRHVtbXkgZmlsdGVyIHRvIGdl
dCBmaWx0ZXIgdHlwZSBjb25zdGFudAorICAgIHZhciBmID0gY29udGV4dC5jcmVhdGVCaXF1YWRG
aWx0ZXIoKTsKKworICAgIHZhciBmaWx0ZXJQYXJhbWV0ZXJzID0gW3tjdXRvZmYgOiAwLCAgICBx
IDogMTAsIGdhaW4gOiAxIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6
IDEsICAgIHEgOiAxMCwgZ2FpbiA6IDEgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
Y3V0b2ZmIDogLjUsICAgcSA6ICAwLCBnYWluIDogMSB9LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHtjdXRvZmYgOiAwLjI1LCBxIDogMTAsIGdhaW4gOiAxIH0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBdOworCisgICAgY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCBmLk5PVENI
LCBmaWx0ZXJQYXJhbWV0ZXJzKTsKK30KKworcnVuVGVzdCgpOworc3VjY2Vzc2Z1bGx5UGFyc2Vk
ID0gdHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLXBlYWtpbmctZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLXBlYWtpbmctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjRlODM2MjcxZmQ4YjlmMTA2NmEwZjVhYmYwZWQ5MzkzNzQ3ODJkNjUKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtcGVha2luZy1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSwxMSBAQAorVGVzdHMgQmlxdWFkIHBlYWtpbmcgZmlsdGVyLgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKK1BBU1MgUmVuZGVyZWQgb3V0cHV0IGRpZCBub3QgaGF2ZSBpbmZp
bml0aWVzIG9yIE5hTnMuCitQQVNTIFBlYWtpbmcgZmlsdGVyIHJlc3BvbnNlIGlzIGNvcnJlY3Qu
CitQQVNTIFRlc3Qgc2lnbmFsIHdhcyBjb3JyZWN0bHkgZmlsdGVyZWQuCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViYXVkaW8vYmlxdWFkLXBlYWtpbmcuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlv
L2JpcXVhZC1wZWFraW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmEwNDQ4MzRhZWRjZmY1N2JkMzIyMTA2
ZjVhMWI5NWE3ZGQ0NTdlNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlv
L2JpcXVhZC1wZWFraW5nLmh0bWwKQEAgLTAsMCArMSw1MCBAQAorPCFET0NUWVBFIGh0bWw+CisK
KzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1
ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYmlx
dWFkLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKworPGRpdiBpZD0i
ZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+
CitkZXNjcmlwdGlvbigiVGVzdHMgQmlxdWFkIHBlYWtpbmcgZmlsdGVyLiIpOworCitmdW5jdGlv
biBydW5UZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorICAgIAorICAgIHdpbmRvdy5q
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKyAgICAgICAgCisgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVk
aW8gY29udGV4dC4KKyAgICB2YXIgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwg
c2FtcGxlUmF0ZSAqIHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOworCisgICAgLy8g
RHVtbXkgZmlsdGVyIHRvIGdldCBmaWx0ZXIgdHlwZSBjb25zdGFudAorICAgIHZhciBmID0gY29u
dGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTsKKworICAgIC8vIFRoZSBmaWx0ZXJzIHdlIHdhbnQg
dG8gdGVzdC4KKyAgICB2YXIgZmlsdGVyUGFyYW1ldGVycyA9IFt7Y3V0b2ZmIDogMCwgICAgcSA6
IDEwLCBnYWluIDogMTAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDog
MSwgICAgcSA6IDEwLCBnYWluIDogMTAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
Y3V0b2ZmIDogLjUsICAgcSA6ICAwLCBnYWluIDogMTAgfSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7Y3V0b2ZmIDogMC4yNSwgcSA6IDEwLCBnYWluIDogMTAgfSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF07CisKKyAgICBjcmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsIGYuUEVB
S0lORywgZmlsdGVyUGFyYW1ldGVycyk7Cit9CisKK3J1blRlc3QoKTsKK3N1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7CisKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9iaXF1YWQtdGVzdGluZy5qcyBi
L0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9iaXF1YWQtdGVzdGluZy5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41YWE2Yzc2YzZhZWQ5M2M0YmQ4Mzk0ZTViNWQxZjVjYjZlZDU4YWQ4Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2JpcXVhZC10ZXN0aW5nLmpz
CkBAIC0wLDAgKzEsNTQ2IEBACisvLyBHbG9iYWxzLCB0byBtYWtlIHRlc3RpbmcgYW5kIGRlYnVn
Z2luZyBlYXNpZXIuCit2YXIgY29udGV4dDsKK3ZhciBmaWx0ZXI7Cit2YXIgc2lnbmFsOwordmFy
IHJlbmRlcmVkQnVmZmVyOwordmFyIHJlbmRlcmVkRGF0YTsKKwordmFyIHNhbXBsZVJhdGUgPSA0
NDEwMC4wOwordmFyIHB1bHNlTGVuZ3RoRnJhbWVzID0gLjEgKiBzYW1wbGVSYXRlOworCisvLyBN
YXhpbXVtIGFsbG93ZWQgZXJyb3IgZm9yIHRoZSB0ZXN0IHRvIHN1Y2NlZWQuICBFeHBlcmltZW50
YWxseSBkZXRlcm1pbmVkLiAKK3ZhciBtYXhBbGxvd2VkRXJyb3IgPSA1LjdlLTg7CisKKy8vIFRo
aXMgbXVzdCBiZSBsYXJnZSBlbm91Z2ggc28gdGhhdCB0aGUgZmlsdGVyZWQgcmVzdWx0IGlzCisv
LyBlc3NlbnRpYWxseSB6ZXJvLiAgU2VlIGNvbW1lbnRzIGZvciBjcmVhdGVUZXN0QW5kUnVuLgor
dmFyIHRpbWVTdGVwID0gLjE7CisKKy8vIE1heGltdW0gbnVtYmVyIG9mIGZpbHRlcnMgd2UgY2Fu
IHByb2Nlc3MgKG1vc3RseSBmb3Igc2V0dGluZyB0aGUKKy8vIHJlbmRlciBsZW5ndGggY29ycmVj
dGx5LikKK3ZhciBtYXhGaWx0ZXJzID0gNTsKKworLy8gSG93IGxvbmcgdG8gcmVuZGVyLiAgTXVz
dCBiZSBsb25nIGVub3VnaCBmb3IgYWxsIG9mIHRoZSBmaWx0ZXJzIHdlCisvLyB3YW50IHRvIHRl
c3QuCit2YXIgcmVuZGVyTGVuZ3RoU2Vjb25kcyA9IHRpbWVTdGVwICogKG1heEZpbHRlcnMgKyAx
KSA7CisKK3ZhciByZW5kZXJMZW5ndGhTYW1wbGVzID0gTWF0aC5yb3VuZChyZW5kZXJMZW5ndGhT
ZWNvbmRzICogc2FtcGxlUmF0ZSk7CisKKy8vIE51bWJlciBvZiBmaWx0ZXJzIHRoYXQgd2lsbCBi
ZSBwcm9jZXNzZWQuCit2YXIgbkZpbHRlcnM7CisKKy8vIEEgYmlxdWFkIGZpbHRlciBoYXMgYSB6
LXRyYW5zZm9ybSBvZgorLy8gSCh6KSA9IChiMCArIGIxIC8geiArIGIyIC8gel4yKSAvICgxICsg
YTEgLyB6ICsgYTIgLyB6XjIpCisvLworLy8gVGhlIGZvcm11bGFzIGZvciB0aGUgdmFyaW91cyBm
aWx0ZXJzIHdlcmUgdGFrZW4gZnJvbQorLy8gaHR0cDovL3d3dy5tdXNpY2RzcC5vcmcvZmlsZXMv
QXVkaW8tRVEtQ29va2Jvb2sudHh0LgorCisKKy8vIExvd3Bhc3MgZmlsdGVyLgorZnVuY3Rpb24g
Y3JlYXRlTG93cGFzc0ZpbHRlcihmcmVxLCBxLCBnYWluKSB7CisgICAgdmFyIGIwOworICAgIHZh
ciBiMTsKKyAgICB2YXIgYjI7CisgICAgdmFyIGExOworICAgIHZhciBhMjsKKworICAgIGlmIChm
cmVxID09IDEpIHsKKyAgICAgICAgLy8gVGhlIGZvcm11bGEgYmVsb3cgd29ya3MsIGV4Y2VwdCBm
b3Igcm91bmRvZmYuICBXaGVuIGZyZXEgPSAxLAorICAgICAgICAvLyB0aGUgZmlsdGVyIGlzIGp1
c3QgYSB3aXJlLCBzbyBoYXJkd2lyZSB0aGUgY29lZmZpY2llbnRzLgorICAgICAgICBiMCA9IDE7
CisgICAgICAgIGIxID0gMDsKKyAgICAgICAgYjIgPSAwOworICAgICAgICBhMSA9IDA7CisgICAg
ICAgIGEyID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICB2YXIgZyA9IE1hdGgucG93KDEwLCBx
IC8gMjApOworICAgICAgICB2YXIgZCA9IE1hdGguc3FydCgoNCAtIE1hdGguc3FydCgxNiAtIDE2
IC8gZyAvIGcpKSAvIDIpOworICAgICAgICB2YXIgdGhldGEgPSBNYXRoLlBJICogZnJlcTsKKyAg
ICAgICAgdmFyIHNuID0gZCAqIE1hdGguc2luKHRoZXRhKSAvIDI7CisgICAgICAgIHZhciBiZXRh
ID0gMS8yICogKDEgLSBzbikgLyAoMSArIHNuKTsKKyAgICAgICAgdmFyIGdhbW1hID0gKDEvMiAr
IGJldGEpICogTWF0aC5jb3ModGhldGEpOworICAgICAgICB2YXIgYWxwaGEgPSAxLzQgKiAoMS8y
ICsgYmV0YSAtIGdhbW1hKTsKKworICAgICAgICBiMCA9IDIgKiBhbHBoYTsKKyAgICAgICAgYjEg
PSA0ICogYWxwaGE7CisgICAgICAgIGIyID0gMiAqIGFscGhhOworICAgICAgICBhMSA9IDIgKiAo
LWdhbW1hKTsKKyAgICAgICAgYTIgPSAyICogYmV0YTsKKyAgICB9CisKKyAgICByZXR1cm4ge2Iw
IDogYjAsIGIxIDogYjEsIGIyIDogYjIsIGExIDogYTEsIGEyIDogYTJ9OworfQorCitmdW5jdGlv
biBjcmVhdGVIaWdocGFzc0ZpbHRlcihmcmVxLCBxLCBnYWluKSB7CisgICAgdmFyIGIwOworICAg
IHZhciBiMTsKKyAgICB2YXIgYjI7CisgICAgdmFyIGExOworICAgIHZhciBhMjsKKworICAgIGlm
IChmcmVxID09IDEpIHsKKyAgICAgICAgLy8gVGhlIGZpbHRlciBpcyAwCisgICAgICAgIGIwID0g
MDsKKyAgICAgICAgYjEgPSAwOworICAgICAgICBiMiA9IDA7CisgICAgICAgIGExID0gMDsKKyAg
ICAgICAgYTIgPSAwOworICAgIH0gZWxzZSBpZiAoZnJlcSA9PSAwKSB7CisgICAgICAgIC8vIFRo
ZSBmaWx0ZXIgaXMgMS4gIENvbXB1dGF0aW9uIG9mIGNvZWZmaWNpZW50cyBiZWxvdyBpcyBvaywg
YnV0CisgICAgICAgIC8vIHRoZXJlJ3MgYSBwb2xlIGF0IDEgYW5kIGEgemVybyBhdCAxLCBzbyBy
b3VuZC1vZmYgY291bGQgbWFrZQorICAgICAgICAvLyB0aGUgZmlsdGVyIHVuc3RhYmxlLgorICAg
ICAgICBiMCA9IDE7CisgICAgICAgIGIxID0gMDsKKyAgICAgICAgYjIgPSAwOworICAgICAgICBh
MSA9IDA7CisgICAgICAgIGEyID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICB2YXIgZyA9IE1h
dGgucG93KDEwLCBxIC8gMjApOworICAgICAgICB2YXIgZCA9IE1hdGguc3FydCgoNCAtIE1hdGgu
c3FydCgxNiAtIDE2IC8gZyAvIGcpKSAvIDIpOworICAgICAgICB2YXIgdGhldGEgPSBNYXRoLlBJ
ICogZnJlcTsKKyAgICAgICAgdmFyIHNuID0gZCAqIE1hdGguc2luKHRoZXRhKSAvIDI7CisgICAg
ICAgIHZhciBiZXRhID0gMS8yICogKDEgLSBzbikgLyAoMSArIHNuKTsKKyAgICAgICAgdmFyIGdh
bW1hID0gKDEvMiArIGJldGEpICogTWF0aC5jb3ModGhldGEpOworICAgICAgICB2YXIgYWxwaGEg
PSAxLzQgKiAoMS8yICsgYmV0YSArIGdhbW1hKTsKKyAgICAgICAgYjAgPSAyICogYWxwaGE7Cisg
ICAgICAgIGIxID0gLTQgKiBhbHBoYTsKKyAgICAgICAgYjIgPSAyICogYWxwaGE7CisgICAgICAg
IGExID0gMiAqICgtZ2FtbWEpOworICAgICAgICBhMiA9IDIgKiBiZXRhOworICAgIH0KKworICAg
IHJldHVybiB7YjAgOiBiMCwgYjEgOiBiMSwgYjIgOiBiMiwgYTEgOiBhMSwgYTIgOiBhMn07Cit9
CisKK2Z1bmN0aW9uIG5vcm1hbGl6ZUZpbHRlckNvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwg
YTEsIGEyKSB7CisgICAgdmFyIHNjYWxlID0gMSAvIGEwOworCisgICAgcmV0dXJuIHtiMCA6IGIw
ICogc2NhbGUsCisgICAgICAgICAgICBiMSA6IGIxICogc2NhbGUsCisgICAgICAgICAgICBiMiA6
IGIyICogc2NhbGUsCisgICAgICAgICAgICBhMSA6IGExICogc2NhbGUsCisgICAgICAgICAgICBh
MiA6IGEyICogc2NhbGV9OworfQorCitmdW5jdGlvbiBjcmVhdGVCYW5kcGFzc0ZpbHRlcihmcmVx
LCBxLCBnYWluKSB7CisgICAgdmFyIGIwOworICAgIHZhciBiMTsKKyAgICB2YXIgYjI7CisgICAg
dmFyIGEwOworICAgIHZhciBhMTsKKyAgICB2YXIgYTI7CisgICAgdmFyIGNvZWY7CisKKyAgICBp
ZiAoZnJlcSA+IDAgJiYgZnJlcSA8IDEpIHsKKyAgICAgICAgdmFyIHcwID0gTWF0aC5QSSAqIGZy
ZXE7CisgICAgICAgIGlmIChxID4gMCkgeworICAgICAgICAgICAgdmFyIGFscGhhID0gTWF0aC5z
aW4odzApIC8gKDIgKiBxKTsKKyAgICAgICAgICAgIHZhciBrID0gTWF0aC5jb3ModzApOworICAg
ICAgICAgICAgYjAgPSBhbHBoYTsKKyAgICAgICAgICAgIGIxID0gMDsKKyAgICAgICAgICAgIGIy
ID0gLWFscGhhOworICAgICAgICAgICAgYTAgPSAxICsgYWxwaGE7CisgICAgICAgICAgICBhMSA9
IC0yICogazsKKyAgICAgICAgICAgIGEyID0gMSAtIGFscGhhOworCisgICAgICAgICAgICBjb2Vm
ID0gbm9ybWFsaXplRmlsdGVyQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gcSA9IDAsIGFuZCBmcmVxdWVuY3kgaXMg
bm90IDAgb3IgMS4gIFRoZSBhYm92ZSBmb3JtdWxhIGhhcyBhCisgICAgICAgICAgICAvLyBkaXZp
ZGUgYnkgemVybyBwcm9ibGVtLiAgVGhlIGxpbWl0IG9mIHRoZSB6LXRyYW5zZm9ybSBhcyBxCisg
ICAgICAgICAgICAvLyBhcHByb2FjaGVzIDAgaXMgMSwgc28gc2V0IHRoZSBmaWx0ZXIgdGhhdCB3
YXkuCisgICAgICAgICAgICBjb2VmID0ge2IwIDogMSwgYjEgOiAwLCBiMiA6IDAsIGExIDogMCwg
YTIgOiAwfTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdoZW4gZnJlcSA9
IDAgb3IgMSwgdGhlIHotdHJhbnNmb3JtIGlzIGlkZW50aWNhbGx5IDAsCisgICAgICAgIC8vIGlu
ZGVwZW5kZW50IG9mIHEuCisgICAgICAgIGNvZWYgPSB7YjAgOiAwLCBiMSA6IDAsIGIyIDogMCwg
YTEgOiAwLCBhMiA6IDB9CisgICAgfQorICAKKyAgICByZXR1cm4gY29lZjsKK30KKworZnVuY3Rp
b24gY3JlYXRlTG93U2hlbGZGaWx0ZXIoZnJlcSwgcSwgZ2FpbikgeworICAgIC8vIHEgbm90IHVz
ZWQKKyAgICB2YXIgYjA7CisgICAgdmFyIGIxOworICAgIHZhciBiMjsKKyAgICB2YXIgYTA7Cisg
ICAgdmFyIGExOworICAgIHZhciBhMjsKKyAgICB2YXIgY29lZjsKKyAgCisgICAgdmFyIFMgPSAx
OworICAgIHZhciBBID0gTWF0aC5wb3coMTAsIGdhaW4gLyA0MCk7CisKKyAgICBpZiAoZnJlcSA9
PSAxKSB7CisgICAgICAgIC8vIFRoZSBmaWx0ZXIgaXMganVzdCBhIGNvbnN0YW50IGdhaW4KKyAg
ICAgICAgY29lZiA9IHtiMCA6IEEgKiBBLCBiMSA6IDAsIGIyIDogMCwgYTEgOiAwLCBhMiA6IDB9
OyAgCisgICAgfSBlbHNlIGlmIChmcmVxID09IDApIHsKKyAgICAgICAgLy8gVGhlIGZpbHRlciBp
cyAxCisgICAgICAgIGNvZWYgPSB7YjAgOiAxLCBiMSA6IDAsIGIyIDogMCwgYTEgOiAwLCBhMiA6
IDB9OyAgCisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHcwID0gTWF0aC5QSSAqIGZyZXE7Cisg
ICAgICAgIHZhciBhbHBoYSA9IDEgLyAyICogTWF0aC5zaW4odzApICogTWF0aC5zcXJ0KChBICsg
MSAvIEEpICogKDEgLyBTIC0gMSkrMik7CisgICAgICAgIHZhciBrID0gTWF0aC5jb3ModzApOwor
ICAgICAgICB2YXIgazIgPSAyICogTWF0aC5zcXJ0KEEpICogYWxwaGE7CisgICAgICAgIHZhciBB
cDEgPSBBICsgMTsKKyAgICAgICAgdmFyIEFtMSA9IEEgLSAxOworCisgICAgICAgIGIwID0gQSAq
IChBcDEgLSBBbTEgKiBrICsgazIpOworICAgICAgICBiMSA9IDIgKiBBICogKEFtMSAtIEFwMSAq
IGspOworICAgICAgICBiMiA9IEEgKiAoQXAxIC0gQW0xICogayAtIGsyKTsKKyAgICAgICAgYTAg
PSBBcDEgKyBBbTEgKiBrICsgazI7CisgICAgICAgIGExID0gLTIgKiAoQW0xICsgQXAxICogayk7
CisgICAgICAgIGEyID0gQXAxICsgQW0xICogayAtIGsyOworICAgICAgICBjb2VmID0gbm9ybWFs
aXplRmlsdGVyQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOworICAgIH0KKwor
ICAgIHJldHVybiBjb2VmOworfQorCitmdW5jdGlvbiBjcmVhdGVIaWdoU2hlbGZGaWx0ZXIoZnJl
cSwgcSwgZ2FpbikgeworICAgIC8vIHEgbm90IHVzZWQKKyAgICB2YXIgYjA7CisgICAgdmFyIGIx
OworICAgIHZhciBiMjsKKyAgICB2YXIgYTA7CisgICAgdmFyIGExOworICAgIHZhciBhMjsKKyAg
ICB2YXIgY29lZjsKKworICAgIHZhciBBID0gTWF0aC5wb3coMTAsIGdhaW4gLyA0MCk7CisKKyAg
ICBpZiAoZnJlcSA9PSAxKSB7CisgICAgICAgIC8vIFdoZW4gZnJlcSA9IDEsIHRoZSB6LXRyYW5z
Zm9ybSBpcyAxCisgICAgICAgIGNvZWYgPSB7YjAgOiAxLCBiMSA6IDAsIGIyIDogMCwgYTEgOiAw
LCBhMiA6IDB9OworICAgIH0gZWxzZSBpZiAoZnJlcSA+IDApIHsKKyAgICAgICAgdmFyIHcwID0g
TWF0aC5QSSAqIGZyZXE7CisgICAgICAgIHZhciBTID0gMTsKKyAgICAgICAgdmFyIGFscGhhID0g
MS8yICogTWF0aC5zaW4odzApICogTWF0aC5zcXJ0KChBICsgMSAvIEEpICogKDEgLyBTIC0gMSkg
KyAyKTsKKyAgICAgICAgdmFyIGsgPSBNYXRoLmNvcyh3MCk7CisgICAgICAgIHZhciBrMiA9IDIg
KiBNYXRoLnNxcnQoQSkgKiBhbHBoYTsKKyAgICAgICAgdmFyIEFwMSA9IEEgKyAxOworICAgICAg
ICB2YXIgQW0xID0gQSAtIDE7CisgICAgICAgIGIwID0gQSAqIChBcDEgKyBBbTEgKiBrICsgazIp
OworICAgICAgICBiMSA9IC0yICogQSAqIChBbTEgKyBBcDEgKiBrKTsKKyAgICAgICAgYjIgPSBB
ICogKEFwMSArIEFtMSAqIGsgLSBrMik7CisgICAgICAgIGEwID0gQXAxIC0gQW0xICogayArIGsy
OworICAgICAgICBhMSA9IDIgKiAoQW0xIC0gQXAxKmspOworICAgICAgICBhMiA9IEFwMSAtIEFt
MSAqIGstazI7CisKKyAgICAgICAgY29lZiA9IG5vcm1hbGl6ZUZpbHRlckNvZWZmaWNpZW50cyhi
MCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXaGVuIGZy
ZXEgPSAwLCB0aGUgZmlsdGVyIGlzIGp1c3QgYSBnYWluCisgICAgICAgIGNvZWYgPSB7YjAgOiBB
ICogQSwgYjEgOiAwLCBiMiA6IDAsIGExIDogMCwgYTIgOiAwfTsKKyAgICB9CisKKyAgICByZXR1
cm4gY29lZjsKK30KKworZnVuY3Rpb24gY3JlYXRlUGVha2luZ0ZpbHRlcihmcmVxLCBxLCBnYWlu
KSB7CisgICAgdmFyIGIwOworICAgIHZhciBiMTsKKyAgICB2YXIgYjI7CisgICAgdmFyIGEwOwor
ICAgIHZhciBhMTsKKyAgICB2YXIgYTI7CisgICAgdmFyIGNvZWY7CisKKyAgICB2YXIgQSA9IE1h
dGgucG93KDEwLCBnYWluIC8gNDApOworCisgICAgaWYgKGZyZXEgPiAwICYmIGZyZXEgPCAxKSB7
CisgICAgICAgIGlmIChxID4gMCkgeworICAgICAgICAgICAgdmFyIHcwID0gTWF0aC5QSSAqIGZy
ZXE7CisgICAgICAgICAgICB2YXIgYWxwaGEgPSBNYXRoLnNpbih3MCkgLyAoMiAqIHEpOworICAg
ICAgICAgICAgdmFyIGsgPSBNYXRoLmNvcyh3MCk7CisKKyAgICAgICAgICAgIGIwID0gMSArIGFs
cGhhICogQTsKKyAgICAgICAgICAgIGIxID0gLTIgKiBrOworICAgICAgICAgICAgYjIgPSAxIC0g
YWxwaGEgKiBBOworICAgICAgICAgICAgYTAgPSAxICsgYWxwaGEgLyBBOworICAgICAgICAgICAg
YTEgPSAtMiAqIGs7CisgICAgICAgICAgICBhMiA9IDEgLSBhbHBoYSAvIEE7CisgIAorICAgICAg
ICAgICAgY29lZiA9IG5vcm1hbGl6ZUZpbHRlckNvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwg
YTEsIGEyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIHEgPSAwLCB3ZSBoYXZl
IGEgZGl2aWRlIGJ5IHplcm8gcHJvYmxlbSBpbiB0aGUgZm9ybXVsYXMKKyAgICAgICAgICAgIC8v
IGFib3ZlLiAgQnV0IGlmIHdlIGxvb2sgYXQgdGhlIHotdHJhbnNmb3JtLCB3ZSBzZWUgdGhhdCB0
aGUKKyAgICAgICAgICAgIC8vIGxpbWl0IGFzIHEgYXBwcm9hY2hlcyAwIGlzIEFeMi4KKyAgICAg
ICAgICAgIGNvZWYgPSB7YjAgOiBBICogQSwgYjEgOiAwLCBiMiA6IDAsIGExIDogMCwgYTIgOiAw
fTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIGZyZXEgPSAwIG9yIDEsIHRo
ZSB6LXRyYW5zZm9ybSBpcyAxCisgICAgICAgIGNvZWYgPSB7YjAgOiAxLCBiMSA6IDAsIGIyIDog
MCwgYTEgOiAwLCBhMiA6IDB9OworICAgIH0KKworICAgIHJldHVybiBjb2VmOworfQorCitmdW5j
dGlvbiBjcmVhdGVOb3RjaEZpbHRlcihmcmVxLCBxLCBnYWluKSB7CisgICAgdmFyIGIwOworICAg
IHZhciBiMTsKKyAgICB2YXIgYjI7CisgICAgdmFyIGEwOworICAgIHZhciBhMTsKKyAgICB2YXIg
YTI7CisgICAgdmFyIGNvZWY7CisKKyAgICBpZiAoZnJlcSA+IDAgJiYgZnJlcSA8IDEpIHsKKyAg
ICAgICAgaWYgKHEgPiAwKSB7CisgICAgICAgICAgICB2YXIgdzAgPSBNYXRoLlBJICogZnJlcTsK
KyAgICAgICAgICAgIHZhciBhbHBoYSA9IE1hdGguc2luKHcwKSAvICgyICogcSk7CisgICAgICAg
ICAgICB2YXIgayA9IE1hdGguY29zKHcwKTsKKyAgICAgICAgICAgIGIwID0gMTsKKyAgICAgICAg
ICAgIGIxID0gLTIgKiBrOworICAgICAgICAgICAgYjIgPSAxOworICAgICAgICAgICAgYTAgPSAx
ICsgYWxwaGE7CisgICAgICAgICAgICBhMSA9IC0yICogazsKKyAgICAgICAgICAgIGEyID0gMSAt
IGFscGhhOworICAgICAgICAgICAgY29lZiA9IG5vcm1hbGl6ZUZpbHRlckNvZWZmaWNpZW50cyhi
MCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IFdoZW4gcSA9IDAsIHdlIGdldCBhIGRpdmlkZSBieSB6ZXJvIGFib3ZlLiAgVGhlIGxpbWl0IG9m
IHRoZQorICAgICAgICAgICAgLy8gei10cmFuc2Zvcm0gYXMgcSBhcHByb2FjaGVzIDAgaXMgMCwg
c28gc2V0IHRoZSBjb2VmZmljaWVudHMKKyAgICAgICAgICAgIC8vIGFwcHJvcHJpYXRlbHkuCisg
ICAgICAgICAgICBjb2VmID0ge2IwIDogMCwgYjEgOiAwLCBiMiA6IDAsIGExIDogMCwgYTIgOiAw
fTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdoZW4gZnJlcSA9IDAgb3Ig
MSwgdGhlIHotdHJhbnNmb3JtIGlzIDEKKyAgICAgICAgY29lZiA9IHtiMCA6IDEsIGIxIDogMCwg
YjIgOiAwLCBhMSA6IDAsIGEyIDogMH07CisgICAgfQorCisgICAgcmV0dXJuIGNvZWY7Cit9CisK
K2Z1bmN0aW9uIGNyZWF0ZUFsbHBhc3NGaWx0ZXIoZnJlcSwgcSwgZ2FpbikgeworICAgIHZhciBi
MDsKKyAgICB2YXIgYjE7CisgICAgdmFyIGIyOworICAgIHZhciBhMDsKKyAgICB2YXIgYTE7Cisg
ICAgdmFyIGEyOworICAgIHZhciBjb2VmOworCisgICAgaWYgKGZyZXEgPiAwICYmIGZyZXEgPCAx
KSB7CisgICAgICAgIGlmIChxID4gMCkgeworICAgICAgICAgICAgdmFyIHcwID0gTWF0aC5QSSAq
IGZyZXE7CisgICAgICAgICAgICB2YXIgYWxwaGEgPSBNYXRoLnNpbih3MCkgLyAoMiAqIHEpOwor
ICAgICAgICAgICAgdmFyIGsgPSBNYXRoLmNvcyh3MCk7CisgICAgICAgICAgICBiMCA9IDEgLSBh
bHBoYTsKKyAgICAgICAgICAgIGIxID0gLTIqazsKKyAgICAgICAgICAgIGIyID0gMSArIGFscGhh
OworICAgICAgICAgICAgYTAgPSAxICsgYWxwaGE7CisgICAgICAgICAgICBhMSA9IC0yKms7Cisg
ICAgICAgICAgICBhMiA9IDEgLSBhbHBoYTsKKyAgICAgICAgICAgIGNvZWYgPSBub3JtYWxpemVG
aWx0ZXJDb2VmZmljaWVudHMoYjAsIGIxLCBiMiwgYTAsIGExLCBhMik7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBxID0gMAorICAgICAgICAgICAgY29lZiA9IHtiMCA6IC0xLCBi
MSA6IDAsIGIyIDogMCwgYTEgOiAwLCBhMiA6IDB9OworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgY29lZiA9IHtiMCA6IDEsIGIxIDogMCwgYjIgOiAwLCBhMSA6IDAsIGEyIDogMH07
CisgICAgfQorCisgICAgcmV0dXJuIGNvZWY7Cit9CisKKy8vIEFycmF5IG9mIGZ1bmN0aW9ucyB0
byBjb21wdXRlIHRoZSBmaWx0ZXIgY29lZmZpY2llbnRzLiAgVGhpcyBtdXN0CisvLyBiZSBhcnJh
bmVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBmaWx0ZXIgdHlwZXMgaW4gdGhlIGlkbCBmaWxl
LgordmFyIGZpbHRlckNyZWF0b3JGdW5jdGlvbiA9IFtjcmVhdGVMb3dwYXNzRmlsdGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVIaWdocGFzc0ZpbHRlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQmFuZHBhc3NGaWx0ZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNyZWF0ZUxvd1NoZWxmRmlsdGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjcmVhdGVIaWdoU2hlbGZGaWx0ZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNyZWF0ZVBlYWtpbmdGaWx0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNyZWF0ZU5vdGNoRmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVB
bGxwYXNzRmlsdGVyXTsKKwordmFyIGZpbHRlclR5cGVOYW1lID0gWyJMb3dwYXNzIGZpbHRlciIs
CisgICAgICAgICAgICAgICAgICAgICAgIkhpZ2hwYXNzIGZpbHRlciIsCisgICAgICAgICAgICAg
ICAgICAgICAgIkJhbmRwYXNzIGZpbHRlciIsCisgICAgICAgICAgICAgICAgICAgICAgIkxvd3No
ZWxmIGZpbHRlciIsCisgICAgICAgICAgICAgICAgICAgICAgIkhpZ2hzaGVsZiBmaWx0ZXIiLAor
ICAgICAgICAgICAgICAgICAgICAgICJQZWFraW5nIGZpbHRlciIsCisgICAgICAgICAgICAgICAg
ICAgICAgIk5vdGNoIGZpbHRlciIsCisgICAgICAgICAgICAgICAgICAgICAgIkFsbHBhc3MgZmls
dGVyIl07CisKK2Z1bmN0aW9uIGNyZWF0ZUZpbHRlcihmaWx0ZXJUeXBlLCBmcmVxLCBxLCBnYWlu
KSB7CisgICAgcmV0dXJuIGZpbHRlckNyZWF0b3JGdW5jdGlvbltmaWx0ZXJUeXBlXShmcmVxLCBx
LCBnYWluKTsKK30KKworZnVuY3Rpb24gZmlsdGVyRGF0YShmaWx0ZXJDb2VmLCBzaWduYWwsIGxl
bikgeworICAgIHZhciB5ID0gbmV3IEFycmF5KGxlbik7CisgICAgdmFyIGIwID0gZmlsdGVyQ29l
Zi5iMDsKKyAgICB2YXIgYjEgPSBmaWx0ZXJDb2VmLmIxOworICAgIHZhciBiMiA9IGZpbHRlckNv
ZWYuYjI7CisgICAgdmFyIGExID0gZmlsdGVyQ29lZi5hMTsKKyAgICB2YXIgYTIgPSBmaWx0ZXJD
b2VmLiBhMjsKKworICAgIC8vIFByaW1lIHRoZSBwdW1wLiAoQXNzdW1lcyB0aGUgc2lnbmFsIGhh
cyBsZW5ndGggPj0gMiEpCisgICAgeVswXSA9IGIwICogc2lnbmFsWzBdOworICAgIHlbMV0gPSBi
MCAqIHNpZ25hbFsxXSArIGIxICogc2lnbmFsWzBdIC0gYTEgKiB5WzBdOworCisgICAgLy8gRmls
dGVyIGFsbCBvZiB0aGUgc2lnbmFsIHRoYXQgd2UgaGF2ZS4KKyAgICBmb3IgKHZhciBrID0gMjsg
ayA8IE1hdGgubWluKHNpZ25hbC5sZW5ndGgsIGxlbik7ICsraykgeworICAgICAgICB5W2tdID0g
YjAgKiBzaWduYWxba10gKyBiMSAqIHNpZ25hbFtrLTFdICsgYjIgKiBzaWduYWxbay0yXSAtIGEx
ICogeVtrLTFdIC0gYTIgKiB5W2stMl07CisgICAgfQorCisgICAgLy8gSWYgd2UgbmVlZCB0byBm
aWx0ZXIgbW9yZSwgYnV0IGRvbid0IGhhdmUgYW55IHNpZ25hbCBsZWZ0LAorICAgIC8vIGFzc3Vt
ZSB0aGUgc2lnbmFsIGlzIHplcm8uCisgICAgZm9yICh2YXIgayA9IHNpZ25hbC5sZW5ndGg7IGsg
PCBsZW47ICsraykgeworICAgICAgICB5W2tdID0gLSBhMSAqIHlbay0xXSAtIGEyICogeVtrLTJd
OworICAgIH0KKworICAgIHJldHVybiB5OworfQorCitmdW5jdGlvbiBjcmVhdGVJbXB1bHNlQnVm
ZmVyKGNvbnRleHQsIGxlbmd0aCkgeworICAgIHZhciBpbXB1bHNlID0gY29udGV4dC5jcmVhdGVC
dWZmZXIoMSwgbGVuZ3RoLCBjb250ZXh0LnNhbXBsZVJhdGUpOworICAgIHZhciBkYXRhID0gaW1w
dWxzZS5nZXRDaGFubmVsRGF0YSgwKTsKKyAgICBmb3IgKHZhciBrID0gMTsgayA8IGRhdGEubGVu
Z3RoOyArK2spIHsKKyAgICAgICAgZGF0YVtrXSA9IDA7CisgICAgfQorICAgIGRhdGFbMF0gPSAx
OworCisgICAgcmV0dXJuIGltcHVsc2U7Cit9CisKKworZnVuY3Rpb24gY3JlYXRlVGVzdEFuZFJ1
bihjb250ZXh0LCBmaWx0ZXJUeXBlLCBmaWx0ZXJQYXJhbWV0ZXJzKSB7CisgICAgLy8gVG8gdGVz
dCB0aGUgZmlsdGVycywgd2UgYXBwbHkgYSBzaWduYWwgKGFuIGltcHVsc2UpIHRvIGVhY2ggb2YK
KyAgICAvLyB0aGUgc3BlY2lmaWVkIGZpbHRlcnMsIHdpdGggZWFjaCBzaWduYWwgc3RhcnRpbmcg
YXQgYSBkaWZmZXJlbnQKKyAgICAvLyB0aW1lLiAgVGhlIG91dHB1dCBvZiB0aGUgZmlsdGVycyBp
cyBzdW1tZWQgdG9nZXRoZXIgYXQgdGhlCisgICAgLy8gb3V0cHV0LiAgVGh1cyBmb3IgZmlsdGVy
IGssIHRoZSBzaWduYWwgaW5wdXQgdG8gdGhlIGZpbHRlcgorICAgIC8vIHN0YXJ0cyBhdCB0aW1l
IGsgKiB0aW1lU3RlcC4gIEZvciB0aGlzIHRvIHdvcmsgd2VsbCwgdGltZVN0ZXAKKyAgICAvLyBt
dXN0IGJlIGxhcmdlIGVub3VnaCBmb3IgdGhlIG91dHB1dCBvZiBlYWNoIGZpbHRlciB0byBoYXZl
CisgICAgLy8gZGVjYXllZCB0byB6ZXJvIHdpdGggdGltZVN0ZXAgc2Vjb25kcy4gIFRoYXQgd2F5
IHRoZSBmaWx0ZXIKKyAgICAvLyBvdXRwdXRzIGRvbid0IGludGVyZmVyZSB3aXRoIGVhY2ggb3Ro
ZXIuCisgICAgCisgICAgbkZpbHRlcnMgPSBNYXRoLm1pbihmaWx0ZXJQYXJhbWV0ZXJzLmxlbmd0
aCwgbWF4RmlsdGVycyk7CisKKyAgICBzaWduYWwgPSBuZXcgQXJyYXkobkZpbHRlcnMpOworICAg
IGZpbHRlciA9IG5ldyBBcnJheShuRmlsdGVycyk7CisKKyAgICBpbXB1bHNlID0gY3JlYXRlSW1w
dWxzZUJ1ZmZlcihjb250ZXh0LCBwdWxzZUxlbmd0aEZyYW1lcyk7CisKKyAgICAKKyAgICAvLyBD
cmVhdGUgYWxsIG9mIHRoZSBzaWduYWwgc291cmNlcyBhbmQgZmlsdGVycyB0aGF0IHdlIG5lZWQu
CisgICAgZm9yICh2YXIgayA9IDA7IGsgPCBuRmlsdGVyczsgKytrKSB7CisgICAgICAgIHNpZ25h
bFtrXSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7CisgICAgICAgIHNpZ25hbFtrXS5i
dWZmZXIgPSBpbXB1bHNlOworCisgICAgICAgIGZpbHRlcltrXSA9IGNvbnRleHQuY3JlYXRlQmlx
dWFkRmlsdGVyKCk7CisgICAgICAgIGZpbHRlcltrXS50eXBlID0gZmlsdGVyVHlwZTsKKyAgICAg
ICAgZmlsdGVyW2tdLmZyZXF1ZW5jeS52YWx1ZSA9IGNvbnRleHQuc2FtcGxlUmF0ZSAvIDIgKiBm
aWx0ZXJQYXJhbWV0ZXJzW2tdLmN1dG9mZjsKKyAgICAgICAgZmlsdGVyW2tdLlEudmFsdWUgPSBm
aWx0ZXJQYXJhbWV0ZXJzW2tdLnE7CisgICAgICAgIGZpbHRlcltrXS5nYWluLnZhbHVlID0gZmls
dGVyUGFyYW1ldGVyc1trXS5nYWluOworCisgICAgICAgIHNpZ25hbFtrXS5jb25uZWN0KGZpbHRl
cltrXSk7CisgICAgICAgIGZpbHRlcltrXS5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pOwor
CisgICAgICAgIHNpZ25hbFtrXS5ub3RlT24odGltZVN0ZXAgKiBrKTsKKyAgICB9CisKKyAgICBj
b250ZXh0Lm9uY29tcGxldGUgPSBjaGVja0ZpbHRlclJlc3BvbnNlKGZpbHRlclR5cGUsIGZpbHRl
clBhcmFtZXRlcnMpOworICAgIGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTsKK30KKworZnVuY3Rp
b24gYWRkU2lnbmFsKGRlc3QsIHNyYywgZGVzdE9mZnNldCkgeworICAgIC8vIEFkZCBzcmMgdG8g
ZGVzdCBhdCB0aGUgZ2l2ZW4gZGVzdCBvZmZzZXQuCisgICAgZm9yICh2YXIgayA9IGRlc3RPZmZz
ZXQsIGogPSAwOyBrIDwgZGVzdC5sZW5ndGgsIGogPCBzcmMubGVuZ3RoOyArK2ssICsraikgewor
ICAgICAgICBkZXN0W2tdICs9IHNyY1tqXTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGdlbmVyYXRl
UmVmZXJlbmNlKGZpbHRlclR5cGUsIGZpbHRlclBhcmFtZXRlcnMpIHsKKyAgICB2YXIgcmVzdWx0
ID0gbmV3IEFycmF5KHJlbmRlckxlbmd0aFNhbXBsZXMpOworICAgIHZhciBkYXRhID0gbmV3IEFy
cmF5KHJlbmRlckxlbmd0aFNhbXBsZXMpOworICAgIC8vIEluaXRpYWxpemUgdGhlIHJlc3VsdCBh
cnJheSBhbmQgZGF0YS4KKyAgICBmb3IgKHZhciBrID0gMDsgayA8IHJlc3VsdC5sZW5ndGg7ICsr
aykgeworICAgICAgICByZXN1bHRba10gPSAwOworICAgICAgICBkYXRhW2tdID0gMDsKKyAgICB9
CisgICAgLy8gTWFrZSBkYXRhIGFuIGltcHVsc2UuCisgICAgZGF0YVswXSA9IDE7CisgICAgCisg
ICAgZm9yICh2YXIgayA9IDA7IGsgPCBuRmlsdGVyczsgKytrKSB7CisgICAgICAgIC8vIEZpbHRl
ciBhbiBpbXB1bHNlCisgICAgICAgIHZhciBmaWx0ZXJDb2VmID0gY3JlYXRlRmlsdGVyKGZpbHRl
clR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFt
ZXRlcnNba10uY3V0b2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
aWx0ZXJQYXJhbWV0ZXJzW2tdLnEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZpbHRlclBhcmFtZXRlcnNba10uZ2Fpbik7CisgICAgICAgIHZhciB5ID0gZmlsdGVyRGF0
YShmaWx0ZXJDb2VmLCBkYXRhLCByZW5kZXJMZW5ndGhTYW1wbGVzKTsKKworICAgICAgICAvLyBB
Y2N1bXVsYXRlIHRoaXMgZmlsdGVyZWQgZGF0YSBpbnRvIHRoZSBmaW5hbCBvdXRwdXQgYXQgdGhl
IGRlc2lyZWQgb2Zmc2V0LgorICAgICAgICBhZGRTaWduYWwocmVzdWx0LCB5LCBNYXRoLnJvdW5k
KHRpbWVTdGVwICogayAqIHNhbXBsZVJhdGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCisvLyBUcnVlIGlmIHRoZSBudW1iZXIgaXMgbm90IGFuIGluZmluaXR5IG9yIE5hTgor
ZnVuY3Rpb24gaXNWYWxpZE51bWJlcih4KSB7CisgICAgcmV0dXJuICFpc05hTih4KSAmJiAoeCAh
PSBJbmZpbml0eSkgJiYgKHggIT0gLUluZmluaXR5KTsKK30KKworZnVuY3Rpb24gY2hlY2tGaWx0
ZXJSZXNwb25zZShmaWx0ZXJUeXBlLCBmaWx0ZXJQYXJhbWV0ZXJzKSB7CisgICAgcmV0dXJuIGZ1
bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHJlbmRlcmVkQnVmZmVyID0gZXZlbnQucmVuZGVyZWRC
dWZmZXI7CisgICAgICAgIHJlbmRlcmVkRGF0YSA9IHJlbmRlcmVkQnVmZmVyLmdldENoYW5uZWxE
YXRhKDApOworCisgICAgICAgIHJlZmVyZW5jZSA9IGdlbmVyYXRlUmVmZXJlbmNlKGZpbHRlclR5
cGUsIGZpbHRlclBhcmFtZXRlcnMpOworICAgICAgICAKKyAgICAgICAgdmFyIGxlbiA9IE1hdGgu
bWluKHJlbmRlcmVkRGF0YS5sZW5ndGgsIHJlZmVyZW5jZS5sZW5ndGgpOworCisgICAgICAgIHZh
ciBzdWNjZXNzID0gdHJ1ZTsKKworICAgICAgICAvLyBNYXhpbXVtIGVycm9yIGJldHdlZW4gcmVu
ZGVyZWQgZGF0YSBhbmQgZXhwZWN0ZWQgZGF0YQorICAgICAgICB2YXIgbWF4RXJyb3IgPSAwOwor
CisgICAgICAgIC8vIFNhbXBsZSBvZmZzZXQgd2hlcmUgdGhlIG1heGltdW0gZXJyb3Igb2NjdXJy
ZWQuCisgICAgICAgIHZhciBtYXhQb3NpdGlvbiA9IDA7CisKKyAgICAgICAgLy8gTnVtYmVyIG9m
IGluZmluaXRpZXMgb3IgTmFOcyB0aGF0IG9jY3VycmVkIGluIHRoZSByZW5kZXJlZCBkYXRhLgor
ICAgICAgICB2YXIgaW52YWxpZE51bWJlckNvdW50ID0gMDsKKworCisgICAgICAgIGlmIChuRmls
dGVycyAhPSBmaWx0ZXJQYXJhbWV0ZXJzLmxlbmd0aCkgeworICAgICAgICAgICAgdGVzdEZhaWxl
ZCgiVGVzdCB3YW50ZWQgIiArIGZpbHRlclBhcmFtZXRlcnMubGVuZ3RoICsgIiBmaWx0ZXJzIGJ1
dCBvbmx5ICIgKyBtYXhGaWx0ZXJzICsgIiBhbGxvd2VkLiIpOworICAgICAgICAgICAgc3VjY2Vz
cyA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLy8gQ29tcGFyZSB0aGUgcmVuZGVyZWQg
c2lnbmFsIHdpdGggb3VyIHJlZmVyZW5jZSwga2VlcGluZworICAgICAgICAvLyB0cmFjayBvZiB0
aGUgbWF4aW11bSBkaWZmZXJlbmNlIChhbmQgdGhlIG9mZnNldCBvZiB0aGUgbWF4CisgICAgICAg
IC8vIGRpZmZlcmVuY2UuKSAgQ2hlY2sgZm9yIGJhZCBudW1iZXJzIGluIHRoZSByZW5kZXJlZCBv
dXRwdXQKKyAgICAgICAgLy8gdG9vLiAgVGhlcmUgc2hvdWxkbid0IGJlIGFueS4KKyAgICAgICAg
Zm9yICh2YXIgayA9IDA7IGsgPCBsZW47ICsraykgeworICAgICAgICAgICAgdmFyIGVyciA9IE1h
dGguYWJzKHJlbmRlcmVkRGF0YVtrXSAtIHJlZmVyZW5jZVtrXSk7CisgICAgICAgICAgICBpZiAo
ZXJyID4gbWF4RXJyb3IpIHsKKyAgICAgICAgICAgICAgICBtYXhFcnJvciA9IGVycjsKKyAgICAg
ICAgICAgICAgICBtYXhQb3NpdGlvbiA9IGs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoIWlzVmFsaWROdW1iZXIocmVuZGVyZWREYXRhW2tdKSkgeworICAgICAgICAgICAgICAgICsr
aW52YWxpZE51bWJlckNvdW50OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKGludmFsaWROdW1iZXJDb3VudCA+IDApIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIlJl
bmRlcmVkIG91dHB1dCBoYXMgIiArIGludmFsaWROdW1iZXJDb3VudCArICIgaW5maW5pdGllcyBv
ciBOYU5zLiIpOworICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgdGVzdFBhc3NlZCgiUmVuZGVyZWQgb3V0cHV0IGRpZCBub3QgaGF2ZSBp
bmZpbml0aWVzIG9yIE5hTnMuIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICht
YXhFcnJvciA8PSBtYXhBbGxvd2VkRXJyb3IpIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoZmls
dGVyVHlwZU5hbWVbZmlsdGVyVHlwZV0gKyAiIHJlc3BvbnNlIGlzIGNvcnJlY3QuIik7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKGZpbHRlclR5cGVOYW1lW2ZpbHRl
clR5cGVdICsgIiByZXNwb25zZSBpcyBpbmNvcnJlY3QuICBNYXggZXJyID0gIiArIG1heEVycm9y
ICsgIiBhdCAiICsgbWF4UG9zaXRpb24gKyAiLiAgVGhyZXNob2xkID0gIiArIG1heEFsbG93ZWRF
cnJvcik7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJUZXN0IHNp
Z25hbCB3YXMgY29ycmVjdGx5IGZpbHRlcmVkLiIpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgdGVzdEZhaWxlZCgiVGVzdCBzaWduYWwgd2FzIG5vdCBjb3JyZWN0bHkgZmlsdGVyZWQu
Iik7CisgICAgICAgIH0KKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123059</attachid>
            <date>2012-01-18 20:14:18 -0800</date>
            <delta_ts>2012-02-01 11:19:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71413-20120118201415.patch</filename>
            <type>text/plain</type>
            <size>52333</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmQ5MDYxYjljOTEzZGUx
ZjFkYzQ5ZjgyYTZhMTRkYjhlODUxMzIzZS4uNzI0Nzk0MDNhZTIxMmIzYjdjMDlmNzRlNGY3NjUz
MmU2ZTFkYzY5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDExLTExLTA3ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBDaGVjayBwYXJhbWV0ZXJzIHRv
IGJpcXVhZCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MTQxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3RzIGFkZGVkIGZvciBlYWNoIGZpbHRlciB0eXBlIGFuZCBmb3IgdGhlIGxpbWl0
aW5nIGNhc2VzIGZvcgorICAgICAgICBlYWNoIGZpbHRlciB0eXBlLiAgTk9URTogIFRlc3RzIHdp
bGwgZmFpbCBvbiBXaW5kb3dzIGR1ZSB0byBhCisgICAgICAgIHJvdW5kLW9mZiBwcm9ibGVtLgor
CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkJpcXVhZDo6c2V0TG93cGFzc1BhcmFtcyk6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWQ6OnNl
dEhpZ2hwYXNzUGFyYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6c2V0TG93U2hlbGZQ
YXJhbXMpOgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkOjpzZXRIaWdoU2hlbGZQYXJhbXMpOgor
ICAgICAgICAoV2ViQ29yZTo6QmlxdWFkOjpzZXRQZWFraW5nUGFyYW1zKToKKyAgICAgICAgKFdl
YkNvcmU6OkJpcXVhZDo6c2V0QWxscGFzc1BhcmFtcyk6CisgICAgICAgIChXZWJDb3JlOjpCaXF1
YWQ6OnNldE5vdGNoUGFyYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6c2V0QmFuZHBh
c3NQYXJhbXMpOgorICAgICAgICBDaGVjayBmb3IgaW52YWxpZCBwYXJhbWV0ZXJzIGFuZCBjbGlw
IHRoZW0gdG8gc29tZXRoaW5nIHNlbnNpYmxlLgorICAgICAgICBBbHNvIGNoZWNrIGZvciB0aGUg
bGltaXRpbmcgY2FzZXMgYW5kIHRyeSB0byB1c2UgdGhlIGxpbWl0aW5nIGZvcm0KKyAgICAgICAg
b2YgdGhlIHotdHJhbnNmb3JtIGZvciB0aGUgYmlxdWFkLiAgU29tZSBpc3N1ZXMgY2Fubm90IGJl
CisgICAgICAgIGNvbnNpc3RlbnRseSBoYW5kbGVkIGJlY2F1c2UgdGhlIHotdHJhbnNmb3JtIGlz
IG5vdCBjb250aW51b3VzIGFzCisgICAgICAgIHRoZSBwYXJhbWV0ZXJzIGFwcHJvYWNoIHRoZSBs
aW1pdC4KKwogMjAxMi0wMS0xOCAgSm9zaHVhIEJlbGwgIDxqc2JlbGxAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIEluZGV4ZWREQjogSW52YWxpZCBrZXlzIHlpZWxkZWQgYnkga2V5IHBhdGhzIHNo
b3VsZCByYWlzZSBleGNlcHRpb25zLCBub3QgZXJyb3IgY2FsbGJhY2tzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNwcAppbmRleCA4ZGMxZjRmYjY5ZTcxMTJiYmIxNjBkOTdk
MTMzYzAwZWM4OTBhNjI5Li5lMDZmOTM3MTk1ODBjY2RlNzVjMzA5NDhlYzJiZTJmOTkxMGU4Yzcx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHAKQEAgLTE4OCw0MyAr
MTg4LDg1IEBAIHZvaWQgQmlxdWFkOjpyZXNldCgpCiB2b2lkIEJpcXVhZDo6c2V0TG93cGFzc1Bh
cmFtcyhkb3VibGUgY3V0b2ZmLCBkb3VibGUgcmVzb25hbmNlKQogewogICAgIHJlc29uYW5jZSA9
IHN0ZDo6bWF4KDAuMCwgcmVzb25hbmNlKTsgLy8gY2FuJ3QgZ28gbmVnYXRpdmUKLQorICAgIC8v
IExpbWl0IGN1dG9mZiB0byAwIHRvIDEuCisgICAgY3V0b2ZmID0gc3RkOjptYXgoMC4wLCBzdGQ6
Om1pbihjdXRvZmYsIDEuMCkpOworICAgIAogICAgIGRvdWJsZSBnID0gcG93KDEwLjAsIDAuMDUg
KiByZXNvbmFuY2UpOwogICAgIGRvdWJsZSBkID0gc3FydCgoNCAtIHNxcnQoMTYgLSAxNiAvIChn
ICogZykpKSAvIDIpOwogCi0gICAgLy8gQ29tcHV0ZSBiaXF1YWQgY29lZmZpY2llbnRzIGZvciBs
b3Bhc3MgZmlsdGVyCi0gICAgZG91YmxlIHRoZXRhID0gcGlEb3VibGUgKiBjdXRvZmY7Ci0gICAg
ZG91YmxlIHNuID0gMC41ICogZCAqIHNpbih0aGV0YSk7Ci0gICAgZG91YmxlIGJldGEgPSAwLjUg
KiAoMSAtIHNuKSAvICgxICsgc24pOwotICAgIGRvdWJsZSBnYW1tYSA9ICgwLjUgKyBiZXRhKSAq
IGNvcyh0aGV0YSk7Ci0gICAgZG91YmxlIGFscGhhID0gMC4yNSAqICgwLjUgKyBiZXRhIC0gZ2Ft
bWEpOwotCi0gICAgbV9iMCA9IDIgKiBhbHBoYTsKLSAgICBtX2IxID0gMiAqIDIgKiBhbHBoYTsK
LSAgICBtX2IyID0gMiAqIGFscGhhOwotICAgIG1fYTEgPSAyICogLWdhbW1hOwotICAgIG1fYTIg
PSAyICogYmV0YTsKKyAgICBpZiAoY3V0b2ZmID09IDEpIHsKKyAgICAgICAgLy8gV2hlbiBjdXRv
ZmYgaXMgMSwgdGhlIHotdHJhbnNmb3JtIGlzIDEuCisgICAgICAgIG1fYjAgPSAxOworICAgICAg
ICBtX2IxID0gMDsKKyAgICAgICAgbV9iMiA9IDA7CisgICAgICAgIG1fYTEgPSAwOworICAgICAg
ICBtX2EyID0gMDsKKyAgICAgIAorICAgIH0gZWxzZSBpZiAoY3V0b2ZmID4gMCkgeworICAgICAg
ICAvLyBDb21wdXRlIGJpcXVhZCBjb2VmZmljaWVudHMgZm9yIGxvcGFzcyBmaWx0ZXIKKyAgICAg
ICAgZG91YmxlIHRoZXRhID0gcGlEb3VibGUgKiBjdXRvZmY7CisgICAgICAgIGRvdWJsZSBzbiA9
IDAuNSAqIGQgKiBzaW4odGhldGEpOworICAgICAgICBkb3VibGUgYmV0YSA9IDAuNSAqICgxIC0g
c24pIC8gKDEgKyBzbik7CisgICAgICAgIGRvdWJsZSBnYW1tYSA9ICgwLjUgKyBiZXRhKSAqIGNv
cyh0aGV0YSk7CisgICAgICAgIGRvdWJsZSBhbHBoYSA9IDAuMjUgKiAoMC41ICsgYmV0YSAtIGdh
bW1hKTsKKworICAgICAgICBtX2IwID0gMiAqIGFscGhhOworICAgICAgICBtX2IxID0gMiAqIDIg
KiBhbHBoYTsKKyAgICAgICAgbV9iMiA9IDIgKiBhbHBoYTsKKyAgICAgICAgbV9hMSA9IDIgKiAt
Z2FtbWE7CisgICAgICAgIG1fYTIgPSAyICogYmV0YTsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBXaGVuIGN1dG9mZiBpcyB6ZXJvLCBub3RoaW5nIGdldHMgdGhyb3VnaCB0aGUgZmlsdGVyLCBz
byBzZXQKKyAgICAgICAgLy8gY29lZmZpY2llbnRzIHVwIGNvcnJlY3RseS4KKyAgICAgICAgbV9i
MCA9IDA7CisgICAgICAgIG1fYjEgPSAwOworICAgICAgICBtX2IyID0gMDsKKyAgICAgICAgbV9h
MSA9IDA7CisgICAgICAgIG1fYTIgPSAwOworICAgIH0KIH0KIAogdm9pZCBCaXF1YWQ6OnNldEhp
Z2hwYXNzUGFyYW1zKGRvdWJsZSBjdXRvZmYsIGRvdWJsZSByZXNvbmFuY2UpCiB7CiAgICAgcmVz
b25hbmNlID0gc3RkOjptYXgoMC4wLCByZXNvbmFuY2UpOyAvLyBjYW4ndCBnbyBuZWdhdGl2ZQog
CisgICAgLy8gTGltaXQgY3V0b2ZmIHRvIDAgdG8gMS4KKyAgICBjdXRvZmYgPSBzdGQ6Om1heCgw
LjAsIHN0ZDo6bWluKGN1dG9mZiwgMS4wKSk7CisKICAgICBkb3VibGUgZyA9IHBvdygxMC4wLCAw
LjA1ICogcmVzb25hbmNlKTsKICAgICBkb3VibGUgZCA9IHNxcnQoKDQgLSBzcXJ0KDE2IC0gMTYg
LyAoZyAqIGcpKSkgLyAyKTsKIAotICAgIC8vIENvbXB1dGUgYmlxdWFkIGNvZWZmaWNpZW50cyBm
b3IgaGlnaHBhc3MgZmlsdGVyCi0gICAgZG91YmxlIHRoZXRhID0gcGlEb3VibGUgKiBjdXRvZmY7
Ci0gICAgZG91YmxlIHNuID0gMC41ICogZCAqIHNpbih0aGV0YSk7Ci0gICAgZG91YmxlIGJldGEg
PSAwLjUgKiAoMSAtIHNuKSAvICgxICsgc24pOwotICAgIGRvdWJsZSBnYW1tYSA9ICgwLjUgKyBi
ZXRhKSAqIGNvcyh0aGV0YSk7Ci0gICAgZG91YmxlIGFscGhhID0gMC4yNSAqICgwLjUgKyBiZXRh
ICsgZ2FtbWEpOwotCi0gICAgbV9iMCA9IDIgKiBhbHBoYTsKLSAgICBtX2IxID0gMiAqIC0yICog
YWxwaGE7Ci0gICAgbV9iMiA9IDIgKiBhbHBoYTsKLSAgICBtX2ExID0gMiAqIC1nYW1tYTsKLSAg
ICBtX2EyID0gMiAqIGJldGE7CisgICAgaWYgKGN1dG9mZiA9PSAxKSB7CisgICAgICAgIC8vIFRo
ZSB6LXRyYW5zZm9ybSBpcyAwLgorICAgICAgICBtX2IwID0gMDsKKyAgICAgICAgbV9iMSA9IDA7
CisgICAgICAgIG1fYjIgPSAwOworICAgICAgICBtX2ExID0gMDsKKyAgICAgICAgbV9hMiA9IDA7
CisgICAgfSBlbHNlIGlmIChjdXRvZmYgPiAwKSB7CisgICAgICAgIC8vIENvbXB1dGUgYmlxdWFk
IGNvZWZmaWNpZW50cyBmb3IgaGlnaHBhc3MgZmlsdGVyCisgICAgICAgIGRvdWJsZSB0aGV0YSA9
IHBpRG91YmxlICogY3V0b2ZmOworICAgICAgICBkb3VibGUgc24gPSAwLjUgKiBkICogc2luKHRo
ZXRhKTsKKyAgICAgICAgZG91YmxlIGJldGEgPSAwLjUgKiAoMSAtIHNuKSAvICgxICsgc24pOwor
ICAgICAgICBkb3VibGUgZ2FtbWEgPSAoMC41ICsgYmV0YSkgKiBjb3ModGhldGEpOworICAgICAg
ICBkb3VibGUgYWxwaGEgPSAwLjI1ICogKDAuNSArIGJldGEgKyBnYW1tYSk7CisKKyAgICAgICAg
bV9iMCA9IDIgKiBhbHBoYTsKKyAgICAgICAgbV9iMSA9IDIgKiAtMiAqIGFscGhhOworICAgICAg
ICBtX2IyID0gMiAqIGFscGhhOworICAgICAgICBtX2ExID0gMiAqIC1nYW1tYTsKKyAgICAgICAg
bV9hMiA9IDIgKiBiZXRhOworICAgIH0gZWxzZSB7CisgICAgICAvLyBXaGVuIGN1dG9mZiBpcyB6
ZXJvLCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYmVjYXVzZSB0aGUgYWJvdmUKKyAgICAgIC8vIGdp
dmVzIGEgcXVhZHJhdGljIGRpdmlkZWQgYnkgdGhlIHNhbWUgcXVhZHJhdGljLCB3aXRoIHBvbGVz
CisgICAgICAvLyBhbmQgemVyb3Mgb24gdGhlIHVuaXQgY2lyY2xlIGluIHRoZSBzYW1lIHBsYWNl
LiBXaGVuIGN1dG9mZgorICAgICAgLy8gaXMgemVybywgdGhlIHotdHJhbnNmb3JtIGlzIDEuCisg
ICAgICBtX2IwID0gMTsKKyAgICAgIG1fYjEgPSAwOworICAgICAgbV9iMiA9IDA7CisgICAgICBt
X2ExID0gMDsKKyAgICAgIG1fYTIgPSAwOworICAgIH0KIH0KIAogdm9pZCBCaXF1YWQ6OnNldE5v
cm1hbGl6ZWRDb2VmZmljaWVudHMoZG91YmxlIGIwLCBkb3VibGUgYjEsIGRvdWJsZSBiMiwgZG91
YmxlIGEwLCBkb3VibGUgYTEsIGRvdWJsZSBhMikKQEAgLTI0MCwxMTkgKzI4MiwyMjIgQEAgdm9p
ZCBCaXF1YWQ6OnNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoZG91YmxlIGIwLCBkb3VibGUgYjEs
IGRvdWJsZSBiMiwgZG91YmxlIGEKIAogdm9pZCBCaXF1YWQ6OnNldExvd1NoZWxmUGFyYW1zKGRv
dWJsZSBmcmVxdWVuY3ksIGRvdWJsZSBkYkdhaW4pCiB7Ci0gICAgZG91YmxlIHcwID0gcGlEb3Vi
bGUgKiBmcmVxdWVuY3k7Ci0KKyAgICAvLyBDbGlwIGZyZXF1ZW5jaWVzIHRvIGJldHdlZW4gMCBh
bmQgMSwgaW5jbHVzaXZlLgorICAgIGZyZXF1ZW5jeSA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4o
ZnJlcXVlbmN5LCAxLjApKTsKKyAgICAKICAgICBkb3VibGUgQSA9IHBvdygxMC4wLCBkYkdhaW4g
LyA0MCk7Ci0gICAgZG91YmxlIFMgPSAxOyAvLyBmaWx0ZXIgc2xvcGUgKDEgaXMgbWF4IHZhbHVl
KQotICAgIGRvdWJsZSBhbHBoYSA9IDAuNSAqIHNpbih3MCkgKiBzcXJ0KChBICsgMSAvIEEpICog
KDEgLyBTIC0gMSkgKyAyKTsKIAotICAgIGRvdWJsZSBrID0gY29zKHcwKTsKLSAgICBkb3VibGUg
azIgPSAyICogc3FydChBKSAqIGFscGhhOwotCi0gICAgZG91YmxlIGFQbHVzT25lID0gQSArIDE7
Ci0gICAgZG91YmxlIGFNaW51c09uZSA9IEEgLSAxOwotICAgIAotICAgIGRvdWJsZSBiMCA9IEEg
KiAoYVBsdXNPbmUgLSBhTWludXNPbmUgKiBrICsgazIpOwotICAgIGRvdWJsZSBiMSA9IDIgKiBB
ICogKGFNaW51c09uZSAtIGFQbHVzT25lICogayk7Ci0gICAgZG91YmxlIGIyID0gQSAqIChhUGx1
c09uZSAtIGFNaW51c09uZSAqIGsgLSBrMik7Ci0gICAgZG91YmxlIGEwID0gYVBsdXNPbmUgKyBh
TWludXNPbmUgKiBrICsgazI7Ci0gICAgZG91YmxlIGExID0gLTIgKiAoYU1pbnVzT25lICsgYVBs
dXNPbmUgKiBrKTsKLSAgICBkb3VibGUgYTIgPSBhUGx1c09uZSArIGFNaW51c09uZSAqIGsgLSBr
MjsKLQotICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoYjAsIGIxLCBiMiwgYTAsIGExLCBh
Mik7CisgICAgaWYgKGZyZXF1ZW5jeSA9PSAxKSB7CisgICAgICAgIC8vIFRoZSB6LXRyYW5zZm9y
bSBpcyBhIGNvbnN0YW50IGdhaW4uCisgICAgICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMo
QSAqIEEsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCk7
CisgICAgfSBlbHNlIGlmIChmcmVxdWVuY3kgPiAwKSB7CisgICAgICAgIGRvdWJsZSB3MCA9IHBp
RG91YmxlICogZnJlcXVlbmN5OworICAgICAgICBkb3VibGUgUyA9IDE7IC8vIGZpbHRlciBzbG9w
ZSAoMSBpcyBtYXggdmFsdWUpCisgICAgICAgIGRvdWJsZSBhbHBoYSA9IDAuNSAqIHNpbih3MCkg
KiBzcXJ0KChBICsgMSAvIEEpICogKDEgLyBTIC0gMSkgKyAyKTsKKyAgICAgICAgZG91YmxlIGsg
PSBjb3ModzApOworICAgICAgICBkb3VibGUgazIgPSAyICogc3FydChBKSAqIGFscGhhOworICAg
ICAgICBkb3VibGUgYVBsdXNPbmUgPSBBICsgMTsKKyAgICAgICAgZG91YmxlIGFNaW51c09uZSA9
IEEgLSAxOworCisgICAgICAgIGRvdWJsZSBiMCA9IEEgKiAoYVBsdXNPbmUgLSBhTWludXNPbmUg
KiBrICsgazIpOworICAgICAgICBkb3VibGUgYjEgPSAyICogQSAqIChhTWludXNPbmUgLSBhUGx1
c09uZSAqIGspOworICAgICAgICBkb3VibGUgYjIgPSBBICogKGFQbHVzT25lIC0gYU1pbnVzT25l
ICogayAtIGsyKTsKKyAgICAgICAgZG91YmxlIGEwID0gYVBsdXNPbmUgKyBhTWludXNPbmUgKiBr
ICsgazI7CisgICAgICAgIGRvdWJsZSBhMSA9IC0yICogKGFNaW51c09uZSArIGFQbHVzT25lICog
ayk7CisgICAgICAgIGRvdWJsZSBhMiA9IGFQbHVzT25lICsgYU1pbnVzT25lICogayAtIGsyOwor
CisgICAgICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoYjAsIGIxLCBiMiwgYTAsIGExLCBh
Mik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2hlbiBmcmVxdWVuY3kgaXMgMCwgdGhlIHot
dHJhbnNmb3JtIGlzIDEuCisgICAgICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoMSwgMCwg
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAwLCAwKTsKKyAgICB9CiB9
CiAKIHZvaWQgQmlxdWFkOjpzZXRIaWdoU2hlbGZQYXJhbXMoZG91YmxlIGZyZXF1ZW5jeSwgZG91
YmxlIGRiR2FpbikKIHsKLSAgICBkb3VibGUgdzAgPSBwaURvdWJsZSAqIGZyZXF1ZW5jeTsKKyAg
ICAvLyBDbGlwIGZyZXF1ZW5jaWVzIHRvIGJldHdlZW4gMCBhbmQgMSwgaW5jbHVzaXZlLgorICAg
IGZyZXF1ZW5jeSA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oZnJlcXVlbmN5LCAxLjApKTsKIAog
ICAgIGRvdWJsZSBBID0gcG93KDEwLjAsIGRiR2FpbiAvIDQwKTsKLSAgICBkb3VibGUgUyA9IDE7
IC8vIGZpbHRlciBzbG9wZSAoMSBpcyBtYXggdmFsdWUpCi0gICAgZG91YmxlIGFscGhhID0gMC41
ICogc2luKHcwKSAqIHNxcnQoKEEgKyAxIC8gQSkgKiAoMSAvIFMgLSAxKSArIDIpOwogCi0gICAg
ZG91YmxlIGsgPSBjb3ModzApOwotICAgIGRvdWJsZSBrMiA9IDIgKiBzcXJ0KEEpICogYWxwaGE7
Ci0KLSAgICBkb3VibGUgYVBsdXNPbmUgPSBBICsgMTsKLSAgICBkb3VibGUgYU1pbnVzT25lID0g
QSAtIDE7Ci0gICAgCi0gICAgZG91YmxlIGIwID0gQSAqIChhUGx1c09uZSArIGFNaW51c09uZSAq
IGsgKyBrMik7Ci0gICAgZG91YmxlIGIxID0gLTIgKiBBICogKGFNaW51c09uZSArIGFQbHVzT25l
ICogayk7Ci0gICAgZG91YmxlIGIyID0gQSAqIChhUGx1c09uZSArIGFNaW51c09uZSAqIGsgLSBr
Mik7Ci0gICAgZG91YmxlIGEwID0gYVBsdXNPbmUgLSBhTWludXNPbmUgKiBrICsgazI7Ci0gICAg
ZG91YmxlIGExID0gMiAqIChhTWludXNPbmUgLSBhUGx1c09uZSAqIGspOwotICAgIGRvdWJsZSBh
MiA9IGFQbHVzT25lIC0gYU1pbnVzT25lICogayAtIGsyOwotCi0gICAgc2V0Tm9ybWFsaXplZENv
ZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAgICBpZiAoZnJlcXVlbmN5ID09
IDEpIHsKKyAgICAgICAgLy8gVGhlIHotdHJhbnNmb3JtIGlzIDEuCisgICAgICAgIHNldE5vcm1h
bGl6ZWRDb2VmZmljaWVudHMoMSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAxLCAwLCAwKTsKKyAgICB9IGVsc2UgaWYgKGZyZXF1ZW5jeSA+IDApIHsKKyAgICAgICAg
ZG91YmxlIHcwID0gcGlEb3VibGUgKiBmcmVxdWVuY3k7CisgICAgICAgIGRvdWJsZSBTID0gMTsg
Ly8gZmlsdGVyIHNsb3BlICgxIGlzIG1heCB2YWx1ZSkKKyAgICAgICAgZG91YmxlIGFscGhhID0g
MC41ICogc2luKHcwKSAqIHNxcnQoKEEgKyAxIC8gQSkgKiAoMSAvIFMgLSAxKSArIDIpOworICAg
ICAgICBkb3VibGUgayA9IGNvcyh3MCk7CisgICAgICAgIGRvdWJsZSBrMiA9IDIgKiBzcXJ0KEEp
ICogYWxwaGE7CisgICAgICAgIGRvdWJsZSBhUGx1c09uZSA9IEEgKyAxOworICAgICAgICBkb3Vi
bGUgYU1pbnVzT25lID0gQSAtIDE7CisKKyAgICAgICAgZG91YmxlIGIwID0gQSAqIChhUGx1c09u
ZSArIGFNaW51c09uZSAqIGsgKyBrMik7CisgICAgICAgIGRvdWJsZSBiMSA9IC0yICogQSAqIChh
TWludXNPbmUgKyBhUGx1c09uZSAqIGspOworICAgICAgICBkb3VibGUgYjIgPSBBICogKGFQbHVz
T25lICsgYU1pbnVzT25lICogayAtIGsyKTsKKyAgICAgICAgZG91YmxlIGEwID0gYVBsdXNPbmUg
LSBhTWludXNPbmUgKiBrICsgazI7CisgICAgICAgIGRvdWJsZSBhMSA9IDIgKiAoYU1pbnVzT25l
IC0gYVBsdXNPbmUgKiBrKTsKKyAgICAgICAgZG91YmxlIGEyID0gYVBsdXNPbmUgLSBhTWludXNP
bmUgKiBrIC0gazI7CisKKyAgICAgICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhiMCwgYjEs
IGIyLCBhMCwgYTEsIGEyKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXaGVuIGZyZXF1ZW5j
eSA9IDAsIHRoZSBmaWx0ZXIgaXMganVzdCBhIGdhaW4sIEFeMi4KKyAgICAgICAgc2V0Tm9ybWFs
aXplZENvZWZmaWNpZW50cyhBICogQSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAxLCAwLCAwKTsKKyAgICB9CiB9CiAKIHZvaWQgQmlxdWFkOjpzZXRQZWFraW5nUGFy
YW1zKGRvdWJsZSBmcmVxdWVuY3ksIGRvdWJsZSBRLCBkb3VibGUgZGJHYWluKQogewotICAgIGRv
dWJsZSB3MCA9IHBpRG91YmxlICogZnJlcXVlbmN5OwotICAgIGRvdWJsZSBhbHBoYSA9IHNpbih3
MCkgLyAoMiAqIFEpOwotICAgIGRvdWJsZSBBID0gcG93KDEwLjAsIGRiR2FpbiAvIDQwKTsKKyAg
ICAvLyBDbGlwIGZyZXF1ZW5jaWVzIHRvIGJldHdlZW4gMCBhbmQgMSwgaW5jbHVzaXZlLgorICAg
IGZyZXF1ZW5jeSA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oZnJlcXVlbmN5LCAxLjApKTsKIAot
ICAgIGRvdWJsZSBrID0gY29zKHcwKTsKKyAgICAvLyBEb24ndCBsZXQgUSBnbyBuZWdhdGl2ZSwg
d2hpY2ggY2F1c2VzIGFuIHVuc3RhYmxlIGZpbHRlci4KKyAgICBRID0gc3RkOjptYXgoMC4wLCBR
KTsKIAotICAgIGRvdWJsZSBiMCA9IDEgKyBhbHBoYSAqIEE7Ci0gICAgZG91YmxlIGIxID0gLTIg
KiBrOwotICAgIGRvdWJsZSBiMiA9IDEgLSBhbHBoYSAqIEE7Ci0gICAgZG91YmxlIGEwID0gMSAr
IGFscGhhIC8gQTsKLSAgICBkb3VibGUgYTEgPSAtMiAqIGs7Ci0gICAgZG91YmxlIGEyID0gMSAt
IGFscGhhIC8gQTsKKyAgICBkb3VibGUgQSA9IHBvdygxMC4wLCBkYkdhaW4gLyA0MCk7CiAKLSAg
ICBzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOworICAg
IGlmIChmcmVxdWVuY3kgPiAwICYmIGZyZXF1ZW5jeSA8IDEpIHsKKyAgICAgICAgaWYgKFEgPiAw
KSB7CisgICAgICAgICAgICBkb3VibGUgdzAgPSBwaURvdWJsZSAqIGZyZXF1ZW5jeTsKKyAgICAg
ICAgICAgIGRvdWJsZSBhbHBoYSA9IHNpbih3MCkgLyAoMiAqIFEpOworICAgICAgICAgICAgZG91
YmxlIGsgPSBjb3ModzApOworCisgICAgICAgICAgICBkb3VibGUgYjAgPSAxICsgYWxwaGEgKiBB
OworICAgICAgICAgICAgZG91YmxlIGIxID0gLTIgKiBrOworICAgICAgICAgICAgZG91YmxlIGIy
ID0gMSAtIGFscGhhICogQTsKKyAgICAgICAgICAgIGRvdWJsZSBhMCA9IDEgKyBhbHBoYSAvIEE7
CisgICAgICAgICAgICBkb3VibGUgYTEgPSAtMiAqIGs7CisgICAgICAgICAgICBkb3VibGUgYTIg
PSAxIC0gYWxwaGEgLyBBOworCisgICAgICAgICAgICBzZXROb3JtYWxpemVkQ29lZmZpY2llbnRz
KGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
Ly8gV2hlbiBRID0gMCwgdGhlIGFib3ZlIGZvcm11bGFzIGhhdmUgcHJvYmxlbXMuIElmIHdlIGxv
b2sgYXQKKyAgICAgICAgICAgIC8vIHRoZSB6LXRyYW5zZm9ybSwgd2UgY2FuIHNlZSB0aGF0IHRo
ZSBsaW1pdCBhcyBRLT4wIGlzIEFeMiwgc28KKyAgICAgICAgICAgIC8vIHNldCB0aGUgZmlsdGVy
IHRoYXQgd2F5LgorICAgICAgICAgICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhBICogQSwg
MCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCk7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXaGVuIGZyZXF1ZW5jeSBpcyAwIG9y
IDEsIHRoZSB6LXRyYW5zZm9ybSBpcyAxLgorICAgICAgICBzZXROb3JtYWxpemVkQ29lZmZpY2ll
bnRzKDEsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCk7
CisgICAgfQogfQogCiB2b2lkIEJpcXVhZDo6c2V0QWxscGFzc1BhcmFtcyhkb3VibGUgZnJlcXVl
bmN5LCBkb3VibGUgUSkKIHsKLSAgICBkb3VibGUgdzAgPSBwaURvdWJsZSAqIGZyZXF1ZW5jeTsK
LSAgICBkb3VibGUgYWxwaGEgPSBzaW4odzApIC8gKDIgKiBRKTsKLQotICAgIGRvdWJsZSBrID0g
Y29zKHcwKTsKLQotICAgIGRvdWJsZSBiMCA9IDEgLSBhbHBoYTsKLSAgICBkb3VibGUgYjEgPSAt
MiAqIGs7Ci0gICAgZG91YmxlIGIyID0gMSArIGFscGhhOwotICAgIGRvdWJsZSBhMCA9IDEgKyBh
bHBoYTsKLSAgICBkb3VibGUgYTEgPSAtMiAqIGs7Ci0gICAgZG91YmxlIGEyID0gMSAtIGFscGhh
OwotCi0gICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEy
KTsKKyAgICAvLyBDbGlwIGZyZXF1ZW5jaWVzIHRvIGJldHdlZW4gMCBhbmQgMSwgaW5jbHVzaXZl
LgorICAgIGZyZXF1ZW5jeSA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oZnJlcXVlbmN5LCAxLjAp
KTsKKworICAgIC8vIERvbid0IGxldCBRIGdvIG5lZ2F0aXZlLCB3aGljaCBjYXVzZXMgYW4gdW5z
dGFibGUgZmlsdGVyLgorICAgIFEgPSBzdGQ6Om1heCgwLjAsIFEpOworCisgICAgaWYgKGZyZXF1
ZW5jeSA+IDAgJiYgZnJlcXVlbmN5IDwgMSkgeworICAgICAgICBpZiAoUSA+IDApIHsKKyAgICAg
ICAgICAgIGRvdWJsZSB3MCA9IHBpRG91YmxlICogZnJlcXVlbmN5OworICAgICAgICAgICAgZG91
YmxlIGFscGhhID0gc2luKHcwKSAvICgyICogUSk7CisgICAgICAgICAgICBkb3VibGUgayA9IGNv
cyh3MCk7CisKKyAgICAgICAgICAgIGRvdWJsZSBiMCA9IDEgLSBhbHBoYTsKKyAgICAgICAgICAg
IGRvdWJsZSBiMSA9IC0yICogazsKKyAgICAgICAgICAgIGRvdWJsZSBiMiA9IDEgKyBhbHBoYTsK
KyAgICAgICAgICAgIGRvdWJsZSBhMCA9IDEgKyBhbHBoYTsKKyAgICAgICAgICAgIGRvdWJsZSBh
MSA9IC0yICogazsKKyAgICAgICAgICAgIGRvdWJsZSBhMiA9IDEgLSBhbHBoYTsKKworICAgICAg
ICAgICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdoZW4gUSA9IDAsIHRoZSBhYm92ZSBm
b3JtdWxhcyBoYXZlIHByb2JsZW1zLiBJZiB3ZSBsb29rIGF0CisgICAgICAgICAgICAvLyB0aGUg
ei10cmFuc2Zvcm0sIHdlIGNhbiBzZWUgdGhhdCB0aGUgbGltaXQgYXMgUS0+MCBpcyAtMSwgc28K
KyAgICAgICAgICAgIC8vIHNldCB0aGUgZmlsdGVyIHRoYXQgd2F5LgorICAgICAgICAgICAgc2V0
Tm9ybWFsaXplZENvZWZmaWNpZW50cygtMSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMSwgMCwgMCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBXaGVuIGZyZXF1ZW5jeSBpcyAwIG9yIDEsIHRoZSB6LXRyYW5zZm9ybSBpcyAxLgorICAg
ICAgICBzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKDEsIDAsIDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMSwgMCwgMCk7CisgICAgfQogfQogCiB2b2lkIEJpcXVhZDo6c2V0
Tm90Y2hQYXJhbXMoZG91YmxlIGZyZXF1ZW5jeSwgZG91YmxlIFEpCiB7Ci0gICAgZG91YmxlIHcw
ID0gcGlEb3VibGUgKiBmcmVxdWVuY3k7Ci0gICAgZG91YmxlIGFscGhhID0gc2luKHcwKSAvICgy
ICogUSk7Ci0KLSAgICBkb3VibGUgayA9IGNvcyh3MCk7Ci0KLSAgICBkb3VibGUgYjAgPSAxOwot
ICAgIGRvdWJsZSBiMSA9IC0yICogazsKLSAgICBkb3VibGUgYjIgPSAxOwotICAgIGRvdWJsZSBh
MCA9IDEgKyBhbHBoYTsKLSAgICBkb3VibGUgYTEgPSAtMiAqIGs7Ci0gICAgZG91YmxlIGEyID0g
MSAtIGFscGhhOwotCi0gICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBh
MCwgYTEsIGEyKTsKKyAgICAvLyBDbGlwIGZyZXF1ZW5jaWVzIHRvIGJldHdlZW4gMCBhbmQgMSwg
aW5jbHVzaXZlLgorICAgIGZyZXF1ZW5jeSA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oZnJlcXVl
bmN5LCAxLjApKTsKKworICAgIC8vIERvbid0IGxldCBRIGdvIG5lZ2F0aXZlLCB3aGljaCBjYXVz
ZXMgYW4gdW5zdGFibGUgZmlsdGVyLgorICAgIFEgPSBzdGQ6Om1heCgwLjAsIFEpOworCisgICAg
aWYgKGZyZXF1ZW5jeSA+IDAgJiYgZnJlcXVlbmN5IDwgMSkgeworICAgICAgICBpZiAoUSA+IDAp
IHsKKyAgICAgICAgICAgIGRvdWJsZSB3MCA9IHBpRG91YmxlICogZnJlcXVlbmN5OworICAgICAg
ICAgICAgZG91YmxlIGFscGhhID0gc2luKHcwKSAvICgyICogUSk7CisgICAgICAgICAgICBkb3Vi
bGUgayA9IGNvcyh3MCk7CisKKyAgICAgICAgICAgIGRvdWJsZSBiMCA9IDE7CisgICAgICAgICAg
ICBkb3VibGUgYjEgPSAtMiAqIGs7CisgICAgICAgICAgICBkb3VibGUgYjIgPSAxOworICAgICAg
ICAgICAgZG91YmxlIGEwID0gMSArIGFscGhhOworICAgICAgICAgICAgZG91YmxlIGExID0gLTIg
KiBrOworICAgICAgICAgICAgZG91YmxlIGEyID0gMSAtIGFscGhhOworCisgICAgICAgICAgICBz
ZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2hlbiBRID0gMCwgdGhlIGFib3ZlIGZvcm11bGFz
IGhhdmUgcHJvYmxlbXMuIElmIHdlIGxvb2sgYXQKKyAgICAgICAgICAgIC8vIHRoZSB6LXRyYW5z
Zm9ybSwgd2UgY2FuIHNlZSB0aGF0IHRoZSBsaW1pdCBhcyBRLT4wIGlzIDAsIHNvCisgICAgICAg
ICAgICAvLyBzZXQgdGhlIGZpbHRlciB0aGF0IHdheS4KKyAgICAgICAgICAgIHNldE5vcm1hbGl6
ZWRDb2VmZmljaWVudHMoMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMSwgMCwgMCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXaGVu
IGZyZXF1ZW5jeSBpcyAwIG9yIDEsIHRoZSB6LXRyYW5zZm9ybSBpcyAxLgorICAgICAgICBzZXRO
b3JtYWxpemVkQ29lZmZpY2llbnRzKDEsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMSwgMCwgMCk7CisgICAgfQogfQogCiB2b2lkIEJpcXVhZDo6c2V0QmFuZHBhc3NQ
YXJhbXMoZG91YmxlIGZyZXF1ZW5jeSwgZG91YmxlIFEpCiB7Ci0gICAgZG91YmxlIHcwID0gcGlE
b3VibGUgKiBmcmVxdWVuY3k7Ci0gICAgZG91YmxlIGFscGhhID0gc2luKHcwKSAvICgyICogUSk7
CisgICAgLy8gTm8gbmVnYXRpdmUgZnJlcXVlbmNpZXMgYWxsb3dlZC4KKyAgICBmcmVxdWVuY3kg
PSBzdGQ6Om1heCgwLjAsIGZyZXF1ZW5jeSk7CisKKyAgICAvLyBEb24ndCBsZXQgUSBnbyBuZWdh
dGl2ZSwgd2hpY2ggY2F1c2VzIGFuIHVuc3RhYmxlIGZpbHRlci4KKyAgICBRID0gc3RkOjptYXgo
MC4wLCBRKTsKIAotICAgIGRvdWJsZSBrID0gY29zKHcwKTsKKyAgICBpZiAoZnJlcXVlbmN5ID4g
MCAmJiBmcmVxdWVuY3kgPCAxKSB7CisgICAgICAgIGRvdWJsZSB3MCA9IHBpRG91YmxlICogZnJl
cXVlbmN5OworICAgICAgICBpZiAoUSA+IDApIHsKKyAgICAgICAgICAgIGRvdWJsZSBhbHBoYSA9
IHNpbih3MCkgLyAoMiAqIFEpOworICAgICAgICAgICAgZG91YmxlIGsgPSBjb3ModzApOwogICAg
IAotICAgIGRvdWJsZSBiMCA9IGFscGhhOwotICAgIGRvdWJsZSBiMSA9IDA7Ci0gICAgZG91Ymxl
IGIyID0gLWFscGhhOwotICAgIGRvdWJsZSBhMCA9IDEgKyBhbHBoYTsKLSAgICBkb3VibGUgYTEg
PSAtMiAqIGs7Ci0gICAgZG91YmxlIGEyID0gMSAtIGFscGhhOwotCi0gICAgc2V0Tm9ybWFsaXpl
ZENvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAgICAgICAgICAgIGRvdWJs
ZSBiMCA9IGFscGhhOworICAgICAgICAgICAgZG91YmxlIGIxID0gMDsKKyAgICAgICAgICAgIGRv
dWJsZSBiMiA9IC1hbHBoYTsKKyAgICAgICAgICAgIGRvdWJsZSBhMCA9IDEgKyBhbHBoYTsKKyAg
ICAgICAgICAgIGRvdWJsZSBhMSA9IC0yICogazsKKyAgICAgICAgICAgIGRvdWJsZSBhMiA9IDEg
LSBhbHBoYTsKKworICAgICAgICAgICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhiMCwgYjEs
IGIyLCBhMCwgYTEsIGEyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdoZW4g
USA9IDAsIHRoZSBhYm92ZSBmb3JtdWxhcyBoYXZlIHByb2JsZW1zLiBJZiB3ZSBsb29rIGF0Cisg
ICAgICAgICAgICAvLyB0aGUgei10cmFuc2Zvcm0sIHdlIGNhbiBzZWUgdGhhdCB0aGUgbGltaXQg
YXMgUS0+MCBpcyAxLCBzbworICAgICAgICAgICAgLy8gc2V0IHRoZSBmaWx0ZXIgdGhhdCB3YXku
CisgICAgICAgICAgICBzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKDEsIDAsIDAsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDAsIDApOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gV2hlbiB0aGUgY3V0b2ZmIGlzIHplcm8sIHRoZSB6LXRyYW5z
Zm9ybSBhcHByb2FjaGVzIDAsIGlmIFEKKyAgICAgICAgLy8gPiAwLiBXaGVuIGJvdGggUSBhbmQg
Y3V0b2ZmIGFyZSB6ZXJvLCB0aGUgei10cmFuc2Zvcm0gaXMKKyAgICAgICAgLy8gcHJldHR5IG11
Y2ggdW5kZWZpbmVkLiBXaGF0IHNob3VsZCB3ZSBkbyBpbiB0aGlzIGNhc2U/CisgICAgICAgIC8v
IEZvciBub3csIGp1c3QgbWFrZSB0aGUgZmlsdGVyIDAuIFdoZW4gdGhlIGN1dG9mZiBpcyAxLCB0
aGUKKyAgICAgICAgLy8gei10cmFuc2Zvcm0gYWxzbyBhcHByb2FjaGVzIDAuCisgICAgICAgIHNl
dE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAxLCAwLCAwKTsKKyAgICB9CiB9CiAKIHZvaWQgQmlxdWFkOjpzZXRaZXJvUG9s
ZVBhaXJzKGNvbnN0IENvbXBsZXggJnplcm8sIGNvbnN0IENvbXBsZXggJnBvbGUpCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
NTgzZWYyZWFmMmZjN2VlYjhiMjE5MDk0OTAxMDk4NmJlMDZjYTA0ZC4uYTc1YTdjM2RiYTRjNTdi
OWI0MjcwOWI2ZDY1ZGNlNTIxYTZlNGIyNSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTAx
LTEzICBSYXltb25kIFRveSAgPHJ0b3lAY2hyb21pdW0ub3JnPgorCisgICAgICAgIENoZWNrIHBh
cmFtZXRlcnMgdG8gYmlxdWFkIGZpbHRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcxNDEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICAqIHdlYmF1ZGlvL2JpcXVhZC1hbGxwYXNzLWV4cGVj
dGVkLnR4dDogQWRkZWQKKyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWQtYWxscGFzcy5odG1sOiBB
ZGRlZAorICAgICAgICAqIHdlYmF1ZGlvL2JpcXVhZC1iYW5kcGFzcy1leHBlY3RlZC50eHQ6IEFk
ZGVkCisgICAgICAgICogd2ViYXVkaW8vYmlxdWFkLWJhbmRwYXNzLmh0bWw6IEFkZGVkCisgICAg
ICAgICogd2ViYXVkaW8vYmlxdWFkLWhpZ2hwYXNzLWV4cGVjdGVkLnR4dDogQWRkZWQKKyAgICAg
ICAgKiB3ZWJhdWRpby9iaXF1YWQtaGlnaHBhc3MuaHRtbDogQWRkZWQKKyAgICAgICAgKiB3ZWJh
dWRpby9iaXF1YWQtaGlnaHNoZWxmLWV4cGVjdGVkLnR4dDogQWRkZWQKKyAgICAgICAgKiB3ZWJh
dWRpby9iaXF1YWQtaGlnaHNoZWxmLmh0bWw6IEFkZGVkCisgICAgICAgICogd2ViYXVkaW8vYmlx
dWFkLWxvd3Bhc3MtZXhwZWN0ZWQudHh0OiBBZGRlZAorICAgICAgICAqIHdlYmF1ZGlvL2JpcXVh
ZC1sb3dwYXNzLmh0bWw6IEFkZGVkCisgICAgICAgICogd2ViYXVkaW8vYmlxdWFkLWxvd3NoZWxm
LWV4cGVjdGVkLnR4dDogQWRkZWQKKyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWQtbG93c2hlbGYu
aHRtbDogQWRkZWQKKyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWQtbm90Y2gtZXhwZWN0ZWQudHh0
OiBBZGRlZAorICAgICAgICAqIHdlYmF1ZGlvL2JpcXVhZC1ub3RjaC5odG1sOiBBZGRlZAorICAg
ICAgICAqIHdlYmF1ZGlvL2JpcXVhZC1wZWFraW5nLWV4cGVjdGVkLnR4dDogQWRkZWQKKyAgICAg
ICAgKiB3ZWJhdWRpby9iaXF1YWQtcGVha2luZy5odG1sOiBBZGRlZAorICAgICAgICAqIHdlYmF1
ZGlvL3Jlc291cmNlcy9iaXF1YWQtdGVzdGluZy5qczogQWRkZWQKKwogMjAxMi0wMS0xOCAgSm9z
aHVhIEJlbGwgIDxqc2JlbGxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEluZGV4ZWREQjogSW52
YWxpZCBrZXlzIHlpZWxkZWQgYnkga2V5IHBhdGhzIHNob3VsZCByYWlzZSBleGNlcHRpb25zLCBu
b3QgZXJyb3IgY2FsbGJhY2tzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1
YWQtYWxscGFzcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtYWxs
cGFzcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTI5NjEzMmYyZGM2M2RiZjgxM2ZmNGM1NGVi
NzdlNmQxNTBhZGU2NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Jp
cXVhZC1hbGxwYXNzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDExIEBACitUZXN0cyBCaXF1YWQg
YWxscGFzcyBmaWx0ZXIuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBSZW5k
ZXJlZCBvdXRwdXQgZGlkIG5vdCBoYXZlIGluZmluaXRpZXMgb3IgTmFOcy4KK1BBU1MgQWxscGFz
cyBmaWx0ZXIgcmVzcG9uc2UgaXMgY29ycmVjdC4KK1BBU1MgVGVzdCBzaWduYWwgd2FzIGNvcnJl
Y3RseSBmaWx0ZXJlZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtYWxscGFz
cy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWFsbHBhc3MuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yNjYyOGZlNGIwZDYxNmUwYTE0NzA0Y2MzMWI3OTcwMWExZDUyODk5Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWFsbHBhc3MuaHRtbApAQCAtMCww
ICsxLDQ4IEBACis8IURPQ1RZUEUgaHRtbD4KKworPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3Mi
Lz4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9iaXF1YWQtdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+CisKKzxib2R5PgorCis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyBCaXF1YWQg
YWxscGFzcyBmaWx0ZXIuIik7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUo
KTsKKyAgICB9CisgICAgCisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworICAgICAg
ICAKKyAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBjb250ZXh0LgorICAgIHZhciBjb250ZXh0
ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1wbGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vj
b25kcywgc2FtcGxlUmF0ZSk7CisKKyAgICAvLyBEdW1teSBmaWx0ZXIgdG8gZ2V0IGZpbHRlciB0
eXBlIGNvbnN0YW50CisgICAgdmFyIGYgPSBjb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpOwor
CisgICAgdmFyIGZpbHRlclBhcmFtZXRlcnMgPSBbe2N1dG9mZiA6IDAsICAgIHEgOiAxMCwgZ2Fp
biA6IDEgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogMSwgICAgcSA6
IDEwLCBnYWluIDogMSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAu
NSwgICBxIDogIDAsIGdhaW4gOiAxIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1
dG9mZiA6IDAuMjUsIHEgOiAxMCwgZ2FpbiA6IDEgfSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF07CisgICAgY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCBmLkFMTFBBU1MsIGZpbHRlclBh
cmFtZXRlcnMpOworfQorCitydW5UZXN0KCk7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwor
Cis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9iaXF1YWQtYmFuZHBhc3MtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vYmlxdWFkLWJhbmRwYXNzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYmI5N2Q0
YWJlZTk3MDZhMDg2YmVkNDg3ZmViNDY2ZjVjNGI5ZDhmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWJhbmRwYXNzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDExIEBACitUZXN0cyBCaXF1YWQgYmFuZHBhc3MgZmlsdGVyLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKK1BBU1MgUmVuZGVyZWQgb3V0cHV0IGRpZCBub3QgaGF2ZSBpbmZpbml0aWVz
IG9yIE5hTnMuCitQQVNTIEJhbmRwYXNzIGZpbHRlciByZXNwb25zZSBpcyBjb3JyZWN0LgorUEFT
UyBUZXN0IHNpZ25hbCB3YXMgY29ycmVjdGx5IGZpbHRlcmVkLgorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmF1ZGlvL2JpcXVhZC1iYW5kcGFzcy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlx
dWFkLWJhbmRwYXNzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2IxNTQ1MjU1NGE2Yzk0NDUwOGFhMDNlNWNj
NWY3ZTMwNmYyN2RmNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Jp
cXVhZC1iYW5kcGFzcy5odG1sCkBAIC0wLDAgKzEsNTAgQEAKKzwhRE9DVFlQRSBodG1sPgorCis8
aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRp
by10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2JpcXVh
ZC10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisKKzxkaXYgaWQ9ImRl
c2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0Pgor
ZGVzY3JpcHRpb24oIlRlc3RzIEJpcXVhZCBiYW5kcGFzcyBmaWx0ZXIuIik7CisKK2Z1bmN0aW9u
IHJ1blRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisgICAgCisgICAgd2luZG93Lmpz
VGVzdElzQXN5bmMgPSB0cnVlOworICAgICAgICAKKyAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRp
byBjb250ZXh0LgorICAgIHZhciBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBz
YW1wbGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisKKyAgICAvLyBE
dW1teSBmaWx0ZXIgdG8gZ2V0IGZpbHRlciB0eXBlIGNvbnN0YW50CisgICAgdmFyIGYgPSBjb250
ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpOworCisgICAgLy8gVGhlIGZpbHRlcnMgd2Ugd2FudCB0
byB0ZXN0LgorICAgIHZhciBmaWx0ZXJQYXJhbWV0ZXJzID0gW3tjdXRvZmYgOiAwLCAgICBxIDog
MCwgZ2FpbiA6IDEgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogMSwg
ICAgcSA6IDAsIGdhaW4gOiAxIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9m
ZiA6IDAuNSwgIHEgOiAwLCBnYWluIDogMSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHtjdXRvZmYgOiAwLjI1LCBxIDogMSwgZ2FpbiA6IDEgfSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF07CisKKyAgICBjcmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsIGYuQkFORFBBU1MsIGZp
bHRlclBhcmFtZXRlcnMpOworfQorCitydW5UZXN0KCk7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0
cnVlOworCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtaGlnaHBhc3MtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWhpZ2hwYXNzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
M2U2ZmI1ODJjZDY4ZWY4M2I1ZWMzNjRkYzcxYTBiMGI3MjIwNGZmCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWhpZ2hwYXNzLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDExIEBACitUZXN0cyBCaXF1YWQgaGlnaHBhc3MgZmlsdGVyLgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKK1BBU1MgUmVuZGVyZWQgb3V0cHV0IGRpZCBub3QgaGF2ZSBpbmZp
bml0aWVzIG9yIE5hTnMuCitQQVNTIEhpZ2hwYXNzIGZpbHRlciByZXNwb25zZSBpcyBjb3JyZWN0
LgorUEFTUyBUZXN0IHNpZ25hbCB3YXMgY29ycmVjdGx5IGZpbHRlcmVkLgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1oaWdocGFzcy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vYmlxdWFkLWhpZ2hwYXNzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzBiN2RlYWQ4Zjc5YTgzYTcwZjM1
N2I0YjNiMzZmMmJmNmM3ZDY2NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1
ZGlvL2JpcXVhZC1oaWdocGFzcy5odG1sCkBAIC0wLDAgKzEsNDkgQEAKKzwhRE9DVFlQRSBodG1s
PgorCis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9InJlc291cmNl
cy9hdWRpby10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L2JpcXVhZC10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisKKzxkaXYg
aWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2Ny
aXB0PgorZGVzY3JpcHRpb24oIlRlc3RzIEJpcXVhZCBoaWdocGFzcyBmaWx0ZXIuIik7CisKK2Z1
bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
eworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisgICAgCisgICAgd2lu
ZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworICAgICAgICAKKyAgICAvLyBDcmVhdGUgb2ZmbGlu
ZSBhdWRpbyBjb250ZXh0LgorICAgIHZhciBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4
dCgyLCBzYW1wbGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisKKyAg
ICAvLyBEdW1teSBmaWx0ZXIgdG8gZ2V0IGZpbHRlciB0eXBlIGNvbnN0YW50CisgICAgdmFyIGYg
PSBjb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpOworCisgICAgLy8gVGhlIGZpbHRlcnMgd2Ug
d2FudCB0byB0ZXN0LgorICAgIHZhciBmaWx0ZXJQYXJhbWV0ZXJzID0gW3tjdXRvZmYgOiAwLCAg
ICBxIDogMSwgZ2FpbiA6IDEgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2Zm
IDogMSwgICAgcSA6IDEsIGdhaW4gOiAxIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
e2N1dG9mZiA6IDAuMjUsIHEgOiAxLCBnYWluIDogMSB9LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXTsKKworICAgIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgZi5ISUdIUEFTUywgZmls
dGVyUGFyYW1ldGVycyk7Cit9CisKK3J1blRlc3QoKTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRy
dWU7CisKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1oaWdoc2hlbGYtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWhpZ2hzaGVsZi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NGU4NjM0MzU5N2RiMDI1ZWZhMjg3NTkzYzJmYTlhNjJkM2UxMjhhMgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1oaWdoc2hlbGYtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMTEgQEAKK1Rlc3RzIEJpcXVhZCBoaWdoc2hlbGYgZmlsdGVyLgorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgUmVuZGVyZWQgb3V0cHV0IGRpZCBub3QgaGF2ZSBp
bmZpbml0aWVzIG9yIE5hTnMuCitQQVNTIEhpZ2hzaGVsZiBmaWx0ZXIgcmVzcG9uc2UgaXMgY29y
cmVjdC4KK1BBU1MgVGVzdCBzaWduYWwgd2FzIGNvcnJlY3RseSBmaWx0ZXJlZC4KK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtaGlnaHNoZWxmLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJhdWRpby9iaXF1YWQtaGlnaHNoZWxmLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjI0OTdmYTBjMmNiODdi
NDkyMWIzNTNhOTJiYWM4NWJhMzdiYjQ3MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYmF1ZGlvL2JpcXVhZC1oaWdoc2hlbGYuaHRtbApAQCAtMCwwICsxLDQ5IEBACis8IURPQ1RZ
UEUgaHRtbD4KKworPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0i
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy9iaXF1YWQtdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5Pgor
Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyBCaXF1YWQgaGlnaHNoZWxmIGZpbHRlci4i
KTsKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKyAgICAK
KyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisgICAgICAgIAorICAgIC8vIENyZWF0
ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuCisgICAgdmFyIGNvbnRleHQgPSBuZXcgd2Via2l0QXVk
aW9Db250ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRl
KTsKKworICAgIC8vIER1bW15IGZpbHRlciB0byBnZXQgZmlsdGVyIHR5cGUgY29uc3RhbnQKKyAg
ICB2YXIgZiA9IGNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7CisKKyAgICAvLyBUaGUgZmls
dGVycyB3ZSB3YW50IHRvIHRlc3QuCisgICAgdmFyIGZpbHRlclBhcmFtZXRlcnMgPSBbe2N1dG9m
ZiA6IDAsICAgIHEgOiAxMCwgZ2FpbiA6IDEwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAge2N1dG9mZiA6IDEsICAgIHEgOiAxMCwgZ2FpbiA6IDEwIH0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAge2N1dG9mZiA6IDAuMjUsIHEgOiAxMCwgZ2FpbiA6IDEwIH0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICBdOworCisgICAgY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCBm
LkhJR0hTSEVMRiwgZmlsdGVyUGFyYW1ldGVycyk7Cit9CisKK3J1blRlc3QoKTsKK3N1Y2Nlc3Nm
dWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1sb3dwYXNzLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1sb3dwYXNzLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44NmJmMDEzMGM4YWVlYmQxNjA1Mjg5MmM5YzQwOTBhNmFjNzNkNGJmCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWxvd3Bhc3MtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1Rlc3RzIEJpcXVhZCBsb3dwYXNzIGZpbHRlci4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIFJlbmRlcmVkIG91dHB1dCBkaWQgbm90
IGhhdmUgaW5maW5pdGllcyBvciBOYU5zLgorUEFTUyBMb3dwYXNzIGZpbHRlciByZXNwb25zZSBp
cyBjb3JyZWN0LgorUEFTUyBUZXN0IHNpZ25hbCB3YXMgY29ycmVjdGx5IGZpbHRlcmVkLgorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1sb3dwYXNzLmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJhdWRpby9iaXF1YWQtbG93cGFzcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJjMGEzM2I5Y2IxNTAw
YzhmOTA0Zjc4NTRiZjg1ODc5ZGMzYTc3MDcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJhdWRpby9iaXF1YWQtbG93cGFzcy5odG1sCkBAIC0wLDAgKzEsNDggQEAKKzwhRE9DVFlQ
RSBodG1sPgorCis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIu
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL2JpcXVhZC10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisK
KzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pgor
Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3RzIEJpcXVhZCBsb3dwYXNzIGZpbHRlci4iKTsK
KworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKyAgICAKKyAg
ICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisgICAgICAgIAorICAgIC8vIENyZWF0ZSBv
ZmZsaW5lIGF1ZGlvIGNvbnRleHQuCisgICAgdmFyIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9D
b250ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsK
KworICAgIC8vIER1bW15IGZpbHRlciB0byBnZXQgZmlsdGVyIHR5cGUgY29uc3RhbnQKKyAgICB2
YXIgZiA9IGNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7CisKKyAgICAvLyBUaGUgZmlsdGVy
cyB3ZSB3YW50IHRvIHRlc3QuCisgICAgdmFyIGZpbHRlclBhcmFtZXRlcnMgPSBbe2N1dG9mZiA6
IDAsICAgIHEgOiAxLCBnYWluIDogMSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtj
dXRvZmYgOiAxLCAgICBxIDogMSwgZ2FpbiA6IDEgfSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7Y3V0b2ZmIDogMC4yNSwgcSA6IDEsIGdhaW4gOiAxIH0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICBdOworICAgIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgZi5MT1dQQVNTLCBm
aWx0ZXJQYXJhbWV0ZXJzKTsKK30KKworcnVuVGVzdCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWxvd3NoZWxmLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1sb3dzaGVsZi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OTdmNTAwMmZmZTE3NjkzMjU2NTljM2I2ZDdjNWY0ZmVhOGI1Y2ZmYwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1sb3dzaGVsZi1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSwxMSBAQAorVGVzdHMgQmlxdWFkIGxvd3NoZWxmIGZpbHRlci4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCitQQVNTIFJlbmRlcmVkIG91dHB1dCBkaWQgbm90IGhhdmUgaW5m
aW5pdGllcyBvciBOYU5zLgorUEFTUyBMb3dzaGVsZiBmaWx0ZXIgcmVzcG9uc2UgaXMgY29ycmVj
dC4KK1BBU1MgVGVzdCBzaWduYWwgd2FzIGNvcnJlY3RseSBmaWx0ZXJlZC4KK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtbG93c2hlbGYuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1
ZGlvL2JpcXVhZC1sb3dzaGVsZi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhjNzVmOWMzZjY5NDM2YmYzZGUz
M2ZmMjQwZDBlOTM5YmYxN2U3NTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJh
dWRpby9iaXF1YWQtbG93c2hlbGYuaHRtbApAQCAtMCwwICsxLDQ5IEBACis8IURPQ1RZUEUgaHRt
bD4KKworPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNl
cy9iaXF1YWQtdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorCis8ZGl2
IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNj
cmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyBCaXF1YWQgbG93c2hlbGYgZmlsdGVyLiIpOworCitm
dW5jdGlvbiBydW5UZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorICAgIAorICAgIHdp
bmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKyAgICAgICAgCisgICAgLy8gQ3JlYXRlIG9mZmxp
bmUgYXVkaW8gY29udGV4dC4KKyAgICB2YXIgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRl
eHQoMiwgc2FtcGxlUmF0ZSAqIHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOworCisg
ICAgLy8gRHVtbXkgZmlsdGVyIHRvIGdldCBmaWx0ZXIgdHlwZSBjb25zdGFudAorICAgIHZhciBm
ID0gY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTsKKworICAgIC8vIFRoZSBmaWx0ZXJzIHdl
IHdhbnQgdG8gdGVzdC4KKyAgICB2YXIgZmlsdGVyUGFyYW1ldGVycyA9IFt7Y3V0b2ZmIDogMCwg
ICAgcSA6IDEwLCBnYWluIDogMTAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0
b2ZmIDogMSwgICAgcSA6IDEwLCBnYWluIDogMTAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7Y3V0b2ZmIDogMC4yNSwgcSA6IDEwLCBnYWluIDogMTAgfSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF07CisKKyAgICBjcmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsIGYuTE9XU0hF
TEYsIGZpbHRlclBhcmFtZXRlcnMpOworfQorCitydW5UZXN0KCk7CitzdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtbm90Y2gtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLW5vdGNoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
ZjQ2MzVhOGRjM2E3MzIxMWY4ZGE2MWQ3MjhjYTgxZmQwMDFhNzI1Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLW5vdGNoLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDExIEBACitUZXN0cyBCaXF1YWQgbm90Y2ggZmlsdGVyLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKK1BBU1MgUmVuZGVyZWQgb3V0cHV0IGRpZCBub3QgaGF2ZSBpbmZpbml0aWVz
IG9yIE5hTnMuCitQQVNTIE5vdGNoIGZpbHRlciByZXNwb25zZSBpcyBjb3JyZWN0LgorUEFTUyBU
ZXN0IHNpZ25hbCB3YXMgY29ycmVjdGx5IGZpbHRlcmVkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmF1ZGlvL2JpcXVhZC1ub3RjaC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLW5v
dGNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMjAxYTA4ZDA3MDFlYWYxNzE4ODViNjg5MTlhYTEzMGU0YTdi
ZjE2NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1ub3Rj
aC5odG1sCkBAIC0wLDAgKzEsNDkgQEAKKzwhRE9DVFlQRSBodG1sPgorCis8aHRtbD4KKzxoZWFk
PgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2JpcXVhZC10ZXN0aW5nLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisKKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48
L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24o
IlRlc3RzIEJpcXVhZCBub3RjaCBmaWx0ZXIuIik7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7Cisg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndh
aXRVbnRpbERvbmUoKTsKKyAgICB9CisgICAgCisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0
cnVlOworICAgICAgICAKKyAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBjb250ZXh0LgorICAg
IHZhciBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1wbGVSYXRlICogcmVu
ZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisKKyAgICAvLyBEdW1teSBmaWx0ZXIgdG8g
Z2V0IGZpbHRlciB0eXBlIGNvbnN0YW50CisgICAgdmFyIGYgPSBjb250ZXh0LmNyZWF0ZUJpcXVh
ZEZpbHRlcigpOworCisgICAgdmFyIGZpbHRlclBhcmFtZXRlcnMgPSBbe2N1dG9mZiA6IDAsICAg
IHEgOiAxMCwgZ2FpbiA6IDEgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2Zm
IDogMSwgICAgcSA6IDEwLCBnYWluIDogMSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHtjdXRvZmYgOiAuNSwgICBxIDogIDAsIGdhaW4gOiAxIH0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAge2N1dG9mZiA6IDAuMjUsIHEgOiAxMCwgZ2FpbiA6IDEgfSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF07CisKKyAgICBjcmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsIGYuTk9U
Q0gsIGZpbHRlclBhcmFtZXRlcnMpOworfQorCitydW5UZXN0KCk7CitzdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtcGVha2luZy1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtcGVha2luZy1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNGU4MzYyNzFmZDhiOWYxMDY2YTBmNWFiZjBlZDkzOTM3NDc4MmQ2NQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1wZWFraW5nLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDExIEBACitUZXN0cyBCaXF1YWQgcGVha2luZyBmaWx0ZXIuCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBSZW5kZXJlZCBvdXRwdXQgZGlkIG5vdCBoYXZlIGlu
ZmluaXRpZXMgb3IgTmFOcy4KK1BBU1MgUGVha2luZyBmaWx0ZXIgcmVzcG9uc2UgaXMgY29ycmVj
dC4KK1BBU1MgVGVzdCBzaWduYWwgd2FzIGNvcnJlY3RseSBmaWx0ZXJlZC4KK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtcGVha2luZy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vYmlxdWFkLXBlYWtpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YTA0NDgzNGFlZGNmZjU3YmQzMjIx
MDZmNWExYjk1YTdkZDQ1N2U0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vYmlxdWFkLXBlYWtpbmcuaHRtbApAQCAtMCwwICsxLDUwIEBACis8IURPQ1RZUEUgaHRtbD4K
KworPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
YXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9i
aXF1YWQtdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorCis8ZGl2IGlk
PSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlw
dD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyBCaXF1YWQgcGVha2luZyBmaWx0ZXIuIik7CisKK2Z1bmN0
aW9uIHJ1blRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewor
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisgICAgCisgICAgd2luZG93
LmpzVGVzdElzQXN5bmMgPSB0cnVlOworICAgICAgICAKKyAgICAvLyBDcmVhdGUgb2ZmbGluZSBh
dWRpbyBjb250ZXh0LgorICAgIHZhciBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgy
LCBzYW1wbGVSYXRlICogcmVuZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisKKyAgICAv
LyBEdW1teSBmaWx0ZXIgdG8gZ2V0IGZpbHRlciB0eXBlIGNvbnN0YW50CisgICAgdmFyIGYgPSBj
b250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpOworCisgICAgLy8gVGhlIGZpbHRlcnMgd2Ugd2Fu
dCB0byB0ZXN0LgorICAgIHZhciBmaWx0ZXJQYXJhbWV0ZXJzID0gW3tjdXRvZmYgOiAwLCAgICBx
IDogMTAsIGdhaW4gOiAxMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYg
OiAxLCAgICBxIDogMTAsIGdhaW4gOiAxMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHtjdXRvZmYgOiAuNSwgICBxIDogIDAsIGdhaW4gOiAxMCB9LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHtjdXRvZmYgOiAwLjI1LCBxIDogMTAsIGdhaW4gOiAxMCB9LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXTsKKworICAgIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgZi5Q
RUFLSU5HLCBmaWx0ZXJQYXJhbWV0ZXJzKTsKK30KKworcnVuVGVzdCgpOworc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2JpcXVhZC10ZXN0aW5nLmpz
IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2JpcXVhZC10ZXN0aW5nLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjAwMDgyM2QwYTAxOTM1YTJiN2I1NTRmMzYxMmJlYTFjOTlhZTNmOGUKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYmlxdWFkLXRlc3Rpbmcu
anMKQEAgLTAsMCArMSw1NDkgQEAKKy8vIEdsb2JhbHMsIHRvIG1ha2UgdGVzdGluZyBhbmQgZGVi
dWdnaW5nIGVhc2llci4KK3ZhciBjb250ZXh0OwordmFyIGZpbHRlcjsKK3ZhciBzaWduYWw7Cit2
YXIgcmVuZGVyZWRCdWZmZXI7Cit2YXIgcmVuZGVyZWREYXRhOworCit2YXIgc2FtcGxlUmF0ZSA9
IDQ0MTAwLjA7Cit2YXIgcHVsc2VMZW5ndGhGcmFtZXMgPSAuMSAqIHNhbXBsZVJhdGU7CisKKy8v
IE1heGltdW0gYWxsb3dlZCBlcnJvciBmb3IgdGhlIHRlc3QgdG8gc3VjY2VlZC4gIEV4cGVyaW1l
bnRhbGx5IGRldGVybWluZWQuIAordmFyIG1heEFsbG93ZWRFcnJvciA9IDUuOWUtODsKKworLy8g
VGhpcyBtdXN0IGJlIGxhcmdlIGVub3VnaCBzbyB0aGF0IHRoZSBmaWx0ZXJlZCByZXN1bHQgaXMK
Ky8vIGVzc2VudGlhbGx5IHplcm8uICBTZWUgY29tbWVudHMgZm9yIGNyZWF0ZVRlc3RBbmRSdW4u
Cit2YXIgdGltZVN0ZXAgPSAuMTsKKworLy8gTWF4aW11bSBudW1iZXIgb2YgZmlsdGVycyB3ZSBj
YW4gcHJvY2VzcyAobW9zdGx5IGZvciBzZXR0aW5nIHRoZQorLy8gcmVuZGVyIGxlbmd0aCBjb3Jy
ZWN0bHkuKQordmFyIG1heEZpbHRlcnMgPSA1OworCisvLyBIb3cgbG9uZyB0byByZW5kZXIuICBN
dXN0IGJlIGxvbmcgZW5vdWdoIGZvciBhbGwgb2YgdGhlIGZpbHRlcnMgd2UKKy8vIHdhbnQgdG8g
dGVzdC4KK3ZhciByZW5kZXJMZW5ndGhTZWNvbmRzID0gdGltZVN0ZXAgKiAobWF4RmlsdGVycyAr
IDEpIDsKKwordmFyIHJlbmRlckxlbmd0aFNhbXBsZXMgPSBNYXRoLnJvdW5kKHJlbmRlckxlbmd0
aFNlY29uZHMgKiBzYW1wbGVSYXRlKTsKKworLy8gTnVtYmVyIG9mIGZpbHRlcnMgdGhhdCB3aWxs
IGJlIHByb2Nlc3NlZC4KK3ZhciBuRmlsdGVyczsKKworLy8gQSBiaXF1YWQgZmlsdGVyIGhhcyBh
IHotdHJhbnNmb3JtIG9mCisvLyBIKHopID0gKGIwICsgYjEgLyB6ICsgYjIgLyB6XjIpIC8gKDEg
KyBhMSAvIHogKyBhMiAvIHpeMikKKy8vCisvLyBUaGUgZm9ybXVsYXMgZm9yIHRoZSB2YXJpb3Vz
IGZpbHRlcnMgd2VyZSB0YWtlbiBmcm9tCisvLyBodHRwOi8vd3d3Lm11c2ljZHNwLm9yZy9maWxl
cy9BdWRpby1FUS1Db29rYm9vay50eHQuCisKKworLy8gTG93cGFzcyBmaWx0ZXIuCitmdW5jdGlv
biBjcmVhdGVMb3dwYXNzRmlsdGVyKGZyZXEsIHEsIGdhaW4pIHsKKyAgICB2YXIgYjA7CisgICAg
dmFyIGIxOworICAgIHZhciBiMjsKKyAgICB2YXIgYTE7CisgICAgdmFyIGEyOworCisgICAgaWYg
KGZyZXEgPT0gMSkgeworICAgICAgICAvLyBUaGUgZm9ybXVsYSBiZWxvdyB3b3JrcywgZXhjZXB0
IGZvciByb3VuZG9mZi4gIFdoZW4gZnJlcSA9IDEsCisgICAgICAgIC8vIHRoZSBmaWx0ZXIgaXMg
anVzdCBhIHdpcmUsIHNvIGhhcmR3aXJlIHRoZSBjb2VmZmljaWVudHMuCisgICAgICAgIGIwID0g
MTsKKyAgICAgICAgYjEgPSAwOworICAgICAgICBiMiA9IDA7CisgICAgICAgIGExID0gMDsKKyAg
ICAgICAgYTIgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhciBnID0gTWF0aC5wb3coMTAs
IHEgLyAyMCk7CisgICAgICAgIHZhciBkID0gTWF0aC5zcXJ0KCg0IC0gTWF0aC5zcXJ0KDE2IC0g
MTYgLyAoZyAqIGcpKSkgLyAyKTsKKyAgICAgICAgdmFyIHRoZXRhID0gTWF0aC5QSSAqIGZyZXE7
CisgICAgICAgIHZhciBzbiA9IGQgKiBNYXRoLnNpbih0aGV0YSkgLyAyOworICAgICAgICB2YXIg
YmV0YSA9IDAuNSAqICgxIC0gc24pIC8gKDEgKyBzbik7CisgICAgICAgIHZhciBnYW1tYSA9ICgw
LjUgKyBiZXRhKSAqIE1hdGguY29zKHRoZXRhKTsKKyAgICAgICAgdmFyIGFscGhhID0gMC4yNSAq
ICgwLjUgKyBiZXRhIC0gZ2FtbWEpOworCisgICAgICAgIGIwID0gMiAqIGFscGhhOworICAgICAg
ICBiMSA9IDQgKiBhbHBoYTsKKyAgICAgICAgYjIgPSAyICogYWxwaGE7CisgICAgICAgIGExID0g
MiAqICgtZ2FtbWEpOworICAgICAgICBhMiA9IDIgKiBiZXRhOworICAgIH0KKworICAgIHJldHVy
biB7YjAgOiBiMCwgYjEgOiBiMSwgYjIgOiBiMiwgYTEgOiBhMSwgYTIgOiBhMn07Cit9CisKK2Z1
bmN0aW9uIGNyZWF0ZUhpZ2hwYXNzRmlsdGVyKGZyZXEsIHEsIGdhaW4pIHsKKyAgICB2YXIgYjA7
CisgICAgdmFyIGIxOworICAgIHZhciBiMjsKKyAgICB2YXIgYTE7CisgICAgdmFyIGEyOworCisg
ICAgaWYgKGZyZXEgPT0gMSkgeworICAgICAgICAvLyBUaGUgZmlsdGVyIGlzIDAKKyAgICAgICAg
YjAgPSAwOworICAgICAgICBiMSA9IDA7CisgICAgICAgIGIyID0gMDsKKyAgICAgICAgYTEgPSAw
OworICAgICAgICBhMiA9IDA7CisgICAgfSBlbHNlIGlmIChmcmVxID09IDApIHsKKyAgICAgICAg
Ly8gVGhlIGZpbHRlciBpcyAxLiAgQ29tcHV0YXRpb24gb2YgY29lZmZpY2llbnRzIGJlbG93IGlz
IG9rLCBidXQKKyAgICAgICAgLy8gdGhlcmUncyBhIHBvbGUgYXQgMSBhbmQgYSB6ZXJvIGF0IDEs
IHNvIHJvdW5kLW9mZiBjb3VsZCBtYWtlCisgICAgICAgIC8vIHRoZSBmaWx0ZXIgdW5zdGFibGUu
CisgICAgICAgIGIwID0gMTsKKyAgICAgICAgYjEgPSAwOworICAgICAgICBiMiA9IDA7CisgICAg
ICAgIGExID0gMDsKKyAgICAgICAgYTIgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhciBn
ID0gTWF0aC5wb3coMTAsIHEgLyAyMCk7CisgICAgICAgIHZhciBkID0gTWF0aC5zcXJ0KCg0IC0g
TWF0aC5zcXJ0KDE2IC0gMTYgLyAoZyAqIGcpKSkgLyAyKTsKKyAgICAgICAgdmFyIHRoZXRhID0g
TWF0aC5QSSAqIGZyZXE7CisgICAgICAgIHZhciBzbiA9IGQgKiBNYXRoLnNpbih0aGV0YSkgLyAy
OworICAgICAgICB2YXIgYmV0YSA9IDAuNSAqICgxIC0gc24pIC8gKDEgKyBzbik7CisgICAgICAg
IHZhciBnYW1tYSA9ICgwLjUgKyBiZXRhKSAqIE1hdGguY29zKHRoZXRhKTsKKyAgICAgICAgdmFy
IGFscGhhID0gMC4yNSAqICgwLjUgKyBiZXRhICsgZ2FtbWEpOworCisgICAgICAgIGIwID0gMiAq
IGFscGhhOworICAgICAgICBiMSA9IC00ICogYWxwaGE7CisgICAgICAgIGIyID0gMiAqIGFscGhh
OworICAgICAgICBhMSA9IDIgKiAoLWdhbW1hKTsKKyAgICAgICAgYTIgPSAyICogYmV0YTsKKyAg
ICB9CisKKyAgICByZXR1cm4ge2IwIDogYjAsIGIxIDogYjEsIGIyIDogYjIsIGExIDogYTEsIGEy
IDogYTJ9OworfQorCitmdW5jdGlvbiBub3JtYWxpemVGaWx0ZXJDb2VmZmljaWVudHMoYjAsIGIx
LCBiMiwgYTAsIGExLCBhMikgeworICAgIHZhciBzY2FsZSA9IDEgLyBhMDsKKworICAgIHJldHVy
biB7YjAgOiBiMCAqIHNjYWxlLAorICAgICAgICAgICAgYjEgOiBiMSAqIHNjYWxlLAorICAgICAg
ICAgICAgYjIgOiBiMiAqIHNjYWxlLAorICAgICAgICAgICAgYTEgOiBhMSAqIHNjYWxlLAorICAg
ICAgICAgICAgYTIgOiBhMiAqIHNjYWxlfTsKK30KKworZnVuY3Rpb24gY3JlYXRlQmFuZHBhc3NG
aWx0ZXIoZnJlcSwgcSwgZ2FpbikgeworICAgIHZhciBiMDsKKyAgICB2YXIgYjE7CisgICAgdmFy
IGIyOworICAgIHZhciBhMDsKKyAgICB2YXIgYTE7CisgICAgdmFyIGEyOworICAgIHZhciBjb2Vm
OworCisgICAgaWYgKGZyZXEgPiAwICYmIGZyZXEgPCAxKSB7CisgICAgICAgIHZhciB3MCA9IE1h
dGguUEkgKiBmcmVxOworICAgICAgICBpZiAocSA+IDApIHsKKyAgICAgICAgICAgIHZhciBhbHBo
YSA9IE1hdGguc2luKHcwKSAvICgyICogcSk7CisgICAgICAgICAgICB2YXIgayA9IE1hdGguY29z
KHcwKTsKKworICAgICAgICAgICAgYjAgPSBhbHBoYTsKKyAgICAgICAgICAgIGIxID0gMDsKKyAg
ICAgICAgICAgIGIyID0gLWFscGhhOworICAgICAgICAgICAgYTAgPSAxICsgYWxwaGE7CisgICAg
ICAgICAgICBhMSA9IC0yICogazsKKyAgICAgICAgICAgIGEyID0gMSAtIGFscGhhOworCisgICAg
ICAgICAgICBjb2VmID0gbm9ybWFsaXplRmlsdGVyQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEw
LCBhMSwgYTIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gcSA9IDAsIGFuZCBm
cmVxdWVuY3kgaXMgbm90IDAgb3IgMS4gIFRoZSBhYm92ZSBmb3JtdWxhIGhhcyBhCisgICAgICAg
ICAgICAvLyBkaXZpZGUgYnkgemVybyBwcm9ibGVtLiAgVGhlIGxpbWl0IG9mIHRoZSB6LXRyYW5z
Zm9ybSBhcyBxCisgICAgICAgICAgICAvLyBhcHByb2FjaGVzIDAgaXMgMSwgc28gc2V0IHRoZSBm
aWx0ZXIgdGhhdCB3YXkuCisgICAgICAgICAgICBjb2VmID0ge2IwIDogMSwgYjEgOiAwLCBiMiA6
IDAsIGExIDogMCwgYTIgOiAwfTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IFdoZW4gZnJlcSA9IDAgb3IgMSwgdGhlIHotdHJhbnNmb3JtIGlzIGlkZW50aWNhbGx5IDAsCisg
ICAgICAgIC8vIGluZGVwZW5kZW50IG9mIHEuCisgICAgICAgIGNvZWYgPSB7YjAgOiAwLCBiMSA6
IDAsIGIyIDogMCwgYTEgOiAwLCBhMiA6IDB9CisgICAgfQorICAKKyAgICByZXR1cm4gY29lZjsK
K30KKworZnVuY3Rpb24gY3JlYXRlTG93U2hlbGZGaWx0ZXIoZnJlcSwgcSwgZ2FpbikgeworICAg
IC8vIHEgbm90IHVzZWQKKyAgICB2YXIgYjA7CisgICAgdmFyIGIxOworICAgIHZhciBiMjsKKyAg
ICB2YXIgYTA7CisgICAgdmFyIGExOworICAgIHZhciBhMjsKKyAgICB2YXIgY29lZjsKKyAgCisg
ICAgdmFyIFMgPSAxOworICAgIHZhciBBID0gTWF0aC5wb3coMTAsIGdhaW4gLyA0MCk7CisKKyAg
ICBpZiAoZnJlcSA9PSAxKSB7CisgICAgICAgIC8vIFRoZSBmaWx0ZXIgaXMganVzdCBhIGNvbnN0
YW50IGdhaW4KKyAgICAgICAgY29lZiA9IHtiMCA6IEEgKiBBLCBiMSA6IDAsIGIyIDogMCwgYTEg
OiAwLCBhMiA6IDB9OyAgCisgICAgfSBlbHNlIGlmIChmcmVxID09IDApIHsKKyAgICAgICAgLy8g
VGhlIGZpbHRlciBpcyAxCisgICAgICAgIGNvZWYgPSB7YjAgOiAxLCBiMSA6IDAsIGIyIDogMCwg
YTEgOiAwLCBhMiA6IDB9OyAgCisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIHcwID0gTWF0aC5Q
SSAqIGZyZXE7CisgICAgICAgIHZhciBhbHBoYSA9IDEgLyAyICogTWF0aC5zaW4odzApICogTWF0
aC5zcXJ0KChBICsgMSAvIEEpICogKDEgLyBTIC0gMSkrMik7CisgICAgICAgIHZhciBrID0gTWF0
aC5jb3ModzApOworICAgICAgICB2YXIgazIgPSAyICogTWF0aC5zcXJ0KEEpICogYWxwaGE7Cisg
ICAgICAgIHZhciBBcDEgPSBBICsgMTsKKyAgICAgICAgdmFyIEFtMSA9IEEgLSAxOworCisgICAg
ICAgIGIwID0gQSAqIChBcDEgLSBBbTEgKiBrICsgazIpOworICAgICAgICBiMSA9IDIgKiBBICog
KEFtMSAtIEFwMSAqIGspOworICAgICAgICBiMiA9IEEgKiAoQXAxIC0gQW0xICogayAtIGsyKTsK
KyAgICAgICAgYTAgPSBBcDEgKyBBbTEgKiBrICsgazI7CisgICAgICAgIGExID0gLTIgKiAoQW0x
ICsgQXAxICogayk7CisgICAgICAgIGEyID0gQXAxICsgQW0xICogayAtIGsyOworICAgICAgICBj
b2VmID0gbm9ybWFsaXplRmlsdGVyQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIp
OworICAgIH0KKworICAgIHJldHVybiBjb2VmOworfQorCitmdW5jdGlvbiBjcmVhdGVIaWdoU2hl
bGZGaWx0ZXIoZnJlcSwgcSwgZ2FpbikgeworICAgIC8vIHEgbm90IHVzZWQKKyAgICB2YXIgYjA7
CisgICAgdmFyIGIxOworICAgIHZhciBiMjsKKyAgICB2YXIgYTA7CisgICAgdmFyIGExOworICAg
IHZhciBhMjsKKyAgICB2YXIgY29lZjsKKworICAgIHZhciBBID0gTWF0aC5wb3coMTAsIGdhaW4g
LyA0MCk7CisKKyAgICBpZiAoZnJlcSA9PSAxKSB7CisgICAgICAgIC8vIFdoZW4gZnJlcSA9IDEs
IHRoZSB6LXRyYW5zZm9ybSBpcyAxCisgICAgICAgIGNvZWYgPSB7YjAgOiAxLCBiMSA6IDAsIGIy
IDogMCwgYTEgOiAwLCBhMiA6IDB9OworICAgIH0gZWxzZSBpZiAoZnJlcSA+IDApIHsKKyAgICAg
ICAgdmFyIHcwID0gTWF0aC5QSSAqIGZyZXE7CisgICAgICAgIHZhciBTID0gMTsKKyAgICAgICAg
dmFyIGFscGhhID0gMC41ICogTWF0aC5zaW4odzApICogTWF0aC5zcXJ0KChBICsgMSAvIEEpICog
KDEgLyBTIC0gMSkgKyAyKTsKKyAgICAgICAgdmFyIGsgPSBNYXRoLmNvcyh3MCk7CisgICAgICAg
IHZhciBrMiA9IDIgKiBNYXRoLnNxcnQoQSkgKiBhbHBoYTsKKyAgICAgICAgdmFyIEFwMSA9IEEg
KyAxOworICAgICAgICB2YXIgQW0xID0gQSAtIDE7CisKKyAgICAgICAgYjAgPSBBICogKEFwMSAr
IEFtMSAqIGsgKyBrMik7CisgICAgICAgIGIxID0gLTIgKiBBICogKEFtMSArIEFwMSAqIGspOwor
ICAgICAgICBiMiA9IEEgKiAoQXAxICsgQW0xICogayAtIGsyKTsKKyAgICAgICAgYTAgPSBBcDEg
LSBBbTEgKiBrICsgazI7CisgICAgICAgIGExID0gMiAqIChBbTEgLSBBcDEqayk7CisgICAgICAg
IGEyID0gQXAxIC0gQW0xICogay1rMjsKKworICAgICAgICBjb2VmID0gbm9ybWFsaXplRmlsdGVy
Q29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIFdoZW4gZnJlcSA9IDAsIHRoZSBmaWx0ZXIgaXMganVzdCBhIGdhaW4KKyAgICAgICAg
Y29lZiA9IHtiMCA6IEEgKiBBLCBiMSA6IDAsIGIyIDogMCwgYTEgOiAwLCBhMiA6IDB9OworICAg
IH0KKworICAgIHJldHVybiBjb2VmOworfQorCitmdW5jdGlvbiBjcmVhdGVQZWFraW5nRmlsdGVy
KGZyZXEsIHEsIGdhaW4pIHsKKyAgICB2YXIgYjA7CisgICAgdmFyIGIxOworICAgIHZhciBiMjsK
KyAgICB2YXIgYTA7CisgICAgdmFyIGExOworICAgIHZhciBhMjsKKyAgICB2YXIgY29lZjsKKwor
ICAgIHZhciBBID0gTWF0aC5wb3coMTAsIGdhaW4gLyA0MCk7CisKKyAgICBpZiAoZnJlcSA+IDAg
JiYgZnJlcSA8IDEpIHsKKyAgICAgICAgaWYgKHEgPiAwKSB7CisgICAgICAgICAgICB2YXIgdzAg
PSBNYXRoLlBJICogZnJlcTsKKyAgICAgICAgICAgIHZhciBhbHBoYSA9IE1hdGguc2luKHcwKSAv
ICgyICogcSk7CisgICAgICAgICAgICB2YXIgayA9IE1hdGguY29zKHcwKTsKKworICAgICAgICAg
ICAgYjAgPSAxICsgYWxwaGEgKiBBOworICAgICAgICAgICAgYjEgPSAtMiAqIGs7CisgICAgICAg
ICAgICBiMiA9IDEgLSBhbHBoYSAqIEE7CisgICAgICAgICAgICBhMCA9IDEgKyBhbHBoYSAvIEE7
CisgICAgICAgICAgICBhMSA9IC0yICogazsKKyAgICAgICAgICAgIGEyID0gMSAtIGFscGhhIC8g
QTsKKyAgCisgICAgICAgICAgICBjb2VmID0gbm9ybWFsaXplRmlsdGVyQ29lZmZpY2llbnRzKGIw
LCBiMSwgYjIsIGEwLCBhMSwgYTIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8g
cSA9IDAsIHdlIGhhdmUgYSBkaXZpZGUgYnkgemVybyBwcm9ibGVtIGluIHRoZSBmb3JtdWxhcwor
ICAgICAgICAgICAgLy8gYWJvdmUuICBCdXQgaWYgd2UgbG9vayBhdCB0aGUgei10cmFuc2Zvcm0s
IHdlIHNlZSB0aGF0IHRoZQorICAgICAgICAgICAgLy8gbGltaXQgYXMgcSBhcHByb2FjaGVzIDAg
aXMgQV4yLgorICAgICAgICAgICAgY29lZiA9IHtiMCA6IEEgKiBBLCBiMSA6IDAsIGIyIDogMCwg
YTEgOiAwLCBhMiA6IDB9OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gZnJl
cSA9IDAgb3IgMSwgdGhlIHotdHJhbnNmb3JtIGlzIDEKKyAgICAgICAgY29lZiA9IHtiMCA6IDEs
IGIxIDogMCwgYjIgOiAwLCBhMSA6IDAsIGEyIDogMH07CisgICAgfQorCisgICAgcmV0dXJuIGNv
ZWY7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZU5vdGNoRmlsdGVyKGZyZXEsIHEsIGdhaW4pIHsKKyAg
ICB2YXIgYjA7CisgICAgdmFyIGIxOworICAgIHZhciBiMjsKKyAgICB2YXIgYTA7CisgICAgdmFy
IGExOworICAgIHZhciBhMjsKKyAgICB2YXIgY29lZjsKKworICAgIGlmIChmcmVxID4gMCAmJiBm
cmVxIDwgMSkgeworICAgICAgICBpZiAocSA+IDApIHsKKyAgICAgICAgICAgIHZhciB3MCA9IE1h
dGguUEkgKiBmcmVxOworICAgICAgICAgICAgdmFyIGFscGhhID0gTWF0aC5zaW4odzApIC8gKDIg
KiBxKTsKKyAgICAgICAgICAgIHZhciBrID0gTWF0aC5jb3ModzApOworCisgICAgICAgICAgICBi
MCA9IDE7CisgICAgICAgICAgICBiMSA9IC0yICogazsKKyAgICAgICAgICAgIGIyID0gMTsKKyAg
ICAgICAgICAgIGEwID0gMSArIGFscGhhOworICAgICAgICAgICAgYTEgPSAtMiAqIGs7CisgICAg
ICAgICAgICBhMiA9IDEgLSBhbHBoYTsKKyAgICAgICAgICAgIGNvZWYgPSBub3JtYWxpemVGaWx0
ZXJDb2VmZmljaWVudHMoYjAsIGIxLCBiMiwgYTAsIGExLCBhMik7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBXaGVuIHEgPSAwLCB3ZSBnZXQgYSBkaXZpZGUgYnkgemVybyBhYm92
ZS4gIFRoZSBsaW1pdCBvZiB0aGUKKyAgICAgICAgICAgIC8vIHotdHJhbnNmb3JtIGFzIHEgYXBw
cm9hY2hlcyAwIGlzIDAsIHNvIHNldCB0aGUgY29lZmZpY2llbnRzCisgICAgICAgICAgICAvLyBh
cHByb3ByaWF0ZWx5LgorICAgICAgICAgICAgY29lZiA9IHtiMCA6IDAsIGIxIDogMCwgYjIgOiAw
LCBhMSA6IDAsIGEyIDogMH07CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBX
aGVuIGZyZXEgPSAwIG9yIDEsIHRoZSB6LXRyYW5zZm9ybSBpcyAxCisgICAgICAgIGNvZWYgPSB7
YjAgOiAxLCBiMSA6IDAsIGIyIDogMCwgYTEgOiAwLCBhMiA6IDB9OworICAgIH0KKworICAgIHJl
dHVybiBjb2VmOworfQorCitmdW5jdGlvbiBjcmVhdGVBbGxwYXNzRmlsdGVyKGZyZXEsIHEsIGdh
aW4pIHsKKyAgICB2YXIgYjA7CisgICAgdmFyIGIxOworICAgIHZhciBiMjsKKyAgICB2YXIgYTA7
CisgICAgdmFyIGExOworICAgIHZhciBhMjsKKyAgICB2YXIgY29lZjsKKworICAgIGlmIChmcmVx
ID4gMCAmJiBmcmVxIDwgMSkgeworICAgICAgICBpZiAocSA+IDApIHsKKyAgICAgICAgICAgIHZh
ciB3MCA9IE1hdGguUEkgKiBmcmVxOworICAgICAgICAgICAgdmFyIGFscGhhID0gTWF0aC5zaW4o
dzApIC8gKDIgKiBxKTsKKyAgICAgICAgICAgIHZhciBrID0gTWF0aC5jb3ModzApOworCisgICAg
ICAgICAgICBiMCA9IDEgLSBhbHBoYTsKKyAgICAgICAgICAgIGIxID0gLTIgKiBrOworICAgICAg
ICAgICAgYjIgPSAxICsgYWxwaGE7CisgICAgICAgICAgICBhMCA9IDEgKyBhbHBoYTsKKyAgICAg
ICAgICAgIGExID0gLTIgKiBrOworICAgICAgICAgICAgYTIgPSAxIC0gYWxwaGE7CisgICAgICAg
ICAgICBjb2VmID0gbm9ybWFsaXplRmlsdGVyQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBh
MSwgYTIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gcSA9IDAKKyAgICAgICAg
ICAgIGNvZWYgPSB7YjAgOiAtMSwgYjEgOiAwLCBiMiA6IDAsIGExIDogMCwgYTIgOiAwfTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGNvZWYgPSB7YjAgOiAxLCBiMSA6IDAsIGIy
IDogMCwgYTEgOiAwLCBhMiA6IDB9OworICAgIH0KKworICAgIHJldHVybiBjb2VmOworfQorCisv
LyBBcnJheSBvZiBmdW5jdGlvbnMgdG8gY29tcHV0ZSB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4g
IFRoaXMgbXVzdAorLy8gYmUgYXJyYW5lZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgZmlsdGVy
IHR5cGVzIGluIHRoZSBpZGwgZmlsZS4KK3ZhciBmaWx0ZXJDcmVhdG9yRnVuY3Rpb24gPSBbY3Jl
YXRlTG93cGFzc0ZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlSGln
aHBhc3NGaWx0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUJhbmRwYXNz
RmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVMb3dTaGVsZkZpbHRl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlSGlnaFNoZWxmRmlsdGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVQZWFraW5nRmlsdGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVOb3RjaEZpbHRlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3JlYXRlQWxscGFzc0ZpbHRlcl07CisKK3ZhciBmaWx0ZXJUeXBlTmFt
ZSA9IFsiTG93cGFzcyBmaWx0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICJIaWdocGFzcyBm
aWx0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICJCYW5kcGFzcyBmaWx0ZXIiLAorICAgICAg
ICAgICAgICAgICAgICAgICJMb3dzaGVsZiBmaWx0ZXIiLAorICAgICAgICAgICAgICAgICAgICAg
ICJIaWdoc2hlbGYgZmlsdGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAiUGVha2luZyBmaWx0
ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICJOb3RjaCBmaWx0ZXIiLAorICAgICAgICAgICAg
ICAgICAgICAgICJBbGxwYXNzIGZpbHRlciJdOworCitmdW5jdGlvbiBjcmVhdGVGaWx0ZXIoZmls
dGVyVHlwZSwgZnJlcSwgcSwgZ2FpbikgeworICAgIHJldHVybiBmaWx0ZXJDcmVhdG9yRnVuY3Rp
b25bZmlsdGVyVHlwZV0oZnJlcSwgcSwgZ2Fpbik7Cit9CisKK2Z1bmN0aW9uIGZpbHRlckRhdGEo
ZmlsdGVyQ29lZiwgc2lnbmFsLCBsZW4pIHsKKyAgICB2YXIgeSA9IG5ldyBBcnJheShsZW4pOwor
ICAgIHZhciBiMCA9IGZpbHRlckNvZWYuYjA7CisgICAgdmFyIGIxID0gZmlsdGVyQ29lZi5iMTsK
KyAgICB2YXIgYjIgPSBmaWx0ZXJDb2VmLmIyOworICAgIHZhciBhMSA9IGZpbHRlckNvZWYuYTE7
CisgICAgdmFyIGEyID0gZmlsdGVyQ29lZi4gYTI7CisKKyAgICAvLyBQcmltZSB0aGUgcHVtcC4g
KEFzc3VtZXMgdGhlIHNpZ25hbCBoYXMgbGVuZ3RoID49IDIhKQorICAgIHlbMF0gPSBiMCAqIHNp
Z25hbFswXTsKKyAgICB5WzFdID0gYjAgKiBzaWduYWxbMV0gKyBiMSAqIHNpZ25hbFswXSAtIGEx
ICogeVswXTsKKworICAgIC8vIEZpbHRlciBhbGwgb2YgdGhlIHNpZ25hbCB0aGF0IHdlIGhhdmUu
CisgICAgZm9yICh2YXIgayA9IDI7IGsgPCBNYXRoLm1pbihzaWduYWwubGVuZ3RoLCBsZW4pOyAr
K2spIHsKKyAgICAgICAgeVtrXSA9IGIwICogc2lnbmFsW2tdICsgYjEgKiBzaWduYWxbay0xXSAr
IGIyICogc2lnbmFsW2stMl0gLSBhMSAqIHlbay0xXSAtIGEyICogeVtrLTJdOworICAgIH0KKwor
ICAgIC8vIElmIHdlIG5lZWQgdG8gZmlsdGVyIG1vcmUsIGJ1dCBkb24ndCBoYXZlIGFueSBzaWdu
YWwgbGVmdCwKKyAgICAvLyBhc3N1bWUgdGhlIHNpZ25hbCBpcyB6ZXJvLgorICAgIGZvciAodmFy
IGsgPSBzaWduYWwubGVuZ3RoOyBrIDwgbGVuOyArK2spIHsKKyAgICAgICAgeVtrXSA9IC0gYTEg
KiB5W2stMV0gLSBhMiAqIHlbay0yXTsKKyAgICB9CisKKyAgICByZXR1cm4geTsKK30KKworZnVu
Y3Rpb24gY3JlYXRlSW1wdWxzZUJ1ZmZlcihjb250ZXh0LCBsZW5ndGgpIHsKKyAgICB2YXIgaW1w
dWxzZSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyKDEsIGxlbmd0aCwgY29udGV4dC5zYW1wbGVSYXRl
KTsKKyAgICB2YXIgZGF0YSA9IGltcHVsc2UuZ2V0Q2hhbm5lbERhdGEoMCk7CisgICAgZm9yICh2
YXIgayA9IDE7IGsgPCBkYXRhLmxlbmd0aDsgKytrKSB7CisgICAgICAgIGRhdGFba10gPSAwOwor
ICAgIH0KKyAgICBkYXRhWzBdID0gMTsKKworICAgIHJldHVybiBpbXB1bHNlOworfQorCisKK2Z1
bmN0aW9uIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgZmlsdGVyVHlwZSwgZmlsdGVyUGFyYW1l
dGVycykgeworICAgIC8vIFRvIHRlc3QgdGhlIGZpbHRlcnMsIHdlIGFwcGx5IGEgc2lnbmFsIChh
biBpbXB1bHNlKSB0byBlYWNoIG9mCisgICAgLy8gdGhlIHNwZWNpZmllZCBmaWx0ZXJzLCB3aXRo
IGVhY2ggc2lnbmFsIHN0YXJ0aW5nIGF0IGEgZGlmZmVyZW50CisgICAgLy8gdGltZS4gIFRoZSBv
dXRwdXQgb2YgdGhlIGZpbHRlcnMgaXMgc3VtbWVkIHRvZ2V0aGVyIGF0IHRoZQorICAgIC8vIG91
dHB1dC4gIFRodXMgZm9yIGZpbHRlciBrLCB0aGUgc2lnbmFsIGlucHV0IHRvIHRoZSBmaWx0ZXIK
KyAgICAvLyBzdGFydHMgYXQgdGltZSBrICogdGltZVN0ZXAuICBGb3IgdGhpcyB0byB3b3JrIHdl
bGwsIHRpbWVTdGVwCisgICAgLy8gbXVzdCBiZSBsYXJnZSBlbm91Z2ggZm9yIHRoZSBvdXRwdXQg
b2YgZWFjaCBmaWx0ZXIgdG8gaGF2ZQorICAgIC8vIGRlY2F5ZWQgdG8gemVybyB3aXRoIHRpbWVT
dGVwIHNlY29uZHMuICBUaGF0IHdheSB0aGUgZmlsdGVyCisgICAgLy8gb3V0cHV0cyBkb24ndCBp
bnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyLgorICAgIAorICAgIG5GaWx0ZXJzID0gTWF0aC5taW4o
ZmlsdGVyUGFyYW1ldGVycy5sZW5ndGgsIG1heEZpbHRlcnMpOworCisgICAgc2lnbmFsID0gbmV3
IEFycmF5KG5GaWx0ZXJzKTsKKyAgICBmaWx0ZXIgPSBuZXcgQXJyYXkobkZpbHRlcnMpOworCisg
ICAgaW1wdWxzZSA9IGNyZWF0ZUltcHVsc2VCdWZmZXIoY29udGV4dCwgcHVsc2VMZW5ndGhGcmFt
ZXMpOworCisgICAgLy8gQ3JlYXRlIGFsbCBvZiB0aGUgc2lnbmFsIHNvdXJjZXMgYW5kIGZpbHRl
cnMgdGhhdCB3ZSBuZWVkLgorICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbkZpbHRlcnM7ICsraykg
eworICAgICAgICBzaWduYWxba10gPSBjb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOworICAg
ICAgICBzaWduYWxba10uYnVmZmVyID0gaW1wdWxzZTsKKworICAgICAgICBmaWx0ZXJba10gPSBj
b250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigpOworICAgICAgICBmaWx0ZXJba10udHlwZSA9IGZp
bHRlclR5cGU7CisgICAgICAgIGZpbHRlcltrXS5mcmVxdWVuY3kudmFsdWUgPSBjb250ZXh0LnNh
bXBsZVJhdGUgLyAyICogZmlsdGVyUGFyYW1ldGVyc1trXS5jdXRvZmY7CisgICAgICAgIGZpbHRl
cltrXS5RLnZhbHVlID0gZmlsdGVyUGFyYW1ldGVyc1trXS5xOworICAgICAgICBmaWx0ZXJba10u
Z2Fpbi52YWx1ZSA9IGZpbHRlclBhcmFtZXRlcnNba10uZ2FpbjsKKworICAgICAgICBzaWduYWxb
a10uY29ubmVjdChmaWx0ZXJba10pOworICAgICAgICBmaWx0ZXJba10uY29ubmVjdChjb250ZXh0
LmRlc3RpbmF0aW9uKTsKKworICAgICAgICBzaWduYWxba10ubm90ZU9uKHRpbWVTdGVwICogayk7
CisgICAgfQorCisgICAgY29udGV4dC5vbmNvbXBsZXRlID0gY2hlY2tGaWx0ZXJSZXNwb25zZShm
aWx0ZXJUeXBlLCBmaWx0ZXJQYXJhbWV0ZXJzKTsKKyAgICBjb250ZXh0LnN0YXJ0UmVuZGVyaW5n
KCk7Cit9CisKK2Z1bmN0aW9uIGFkZFNpZ25hbChkZXN0LCBzcmMsIGRlc3RPZmZzZXQpIHsKKyAg
ICAvLyBBZGQgc3JjIHRvIGRlc3QgYXQgdGhlIGdpdmVuIGRlc3Qgb2Zmc2V0LgorICAgIGZvciAo
dmFyIGsgPSBkZXN0T2Zmc2V0LCBqID0gMDsgayA8IGRlc3QubGVuZ3RoLCBqIDwgc3JjLmxlbmd0
aDsgKytrLCArK2opIHsKKyAgICAgICAgZGVzdFtrXSArPSBzcmNbal07CisgICAgfQorfQorCitm
dW5jdGlvbiBnZW5lcmF0ZVJlZmVyZW5jZShmaWx0ZXJUeXBlLCBmaWx0ZXJQYXJhbWV0ZXJzKSB7
CisgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheShyZW5kZXJMZW5ndGhTYW1wbGVzKTsKKyAgICB2
YXIgZGF0YSA9IG5ldyBBcnJheShyZW5kZXJMZW5ndGhTYW1wbGVzKTsKKyAgICAvLyBJbml0aWFs
aXplIHRoZSByZXN1bHQgYXJyYXkgYW5kIGRhdGEuCisgICAgZm9yICh2YXIgayA9IDA7IGsgPCBy
ZXN1bHQubGVuZ3RoOyArK2spIHsKKyAgICAgICAgcmVzdWx0W2tdID0gMDsKKyAgICAgICAgZGF0
YVtrXSA9IDA7CisgICAgfQorICAgIC8vIE1ha2UgZGF0YSBhbiBpbXB1bHNlLgorICAgIGRhdGFb
MF0gPSAxOworICAgIAorICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbkZpbHRlcnM7ICsraykgewor
ICAgICAgICAvLyBGaWx0ZXIgYW4gaW1wdWxzZQorICAgICAgICB2YXIgZmlsdGVyQ29lZiA9IGNy
ZWF0ZUZpbHRlcihmaWx0ZXJUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaWx0ZXJQYXJhbWV0ZXJzW2tdLmN1dG9mZiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1ldGVyc1trXS5xLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbWV0ZXJzW2tdLmdhaW4pOworICAgICAgICB2
YXIgeSA9IGZpbHRlckRhdGEoZmlsdGVyQ29lZiwgZGF0YSwgcmVuZGVyTGVuZ3RoU2FtcGxlcyk7
CisKKyAgICAgICAgLy8gQWNjdW11bGF0ZSB0aGlzIGZpbHRlcmVkIGRhdGEgaW50byB0aGUgZmlu
YWwgb3V0cHV0IGF0IHRoZSBkZXNpcmVkIG9mZnNldC4KKyAgICAgICAgYWRkU2lnbmFsKHJlc3Vs
dCwgeSwgTWF0aC5yb3VuZCh0aW1lU3RlcCAqIGsgKiBzYW1wbGVSYXRlKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8gVHJ1ZSBpZiB0aGUgbnVtYmVyIGlzIG5vdCBhbiBp
bmZpbml0eSBvciBOYU4KK2Z1bmN0aW9uIGlzVmFsaWROdW1iZXIoeCkgeworICAgIHJldHVybiAh
aXNOYU4oeCkgJiYgKHggIT0gSW5maW5pdHkpICYmICh4ICE9IC1JbmZpbml0eSk7Cit9CisKK2Z1
bmN0aW9uIGNoZWNrRmlsdGVyUmVzcG9uc2UoZmlsdGVyVHlwZSwgZmlsdGVyUGFyYW1ldGVycykg
eworICAgIHJldHVybiBmdW5jdGlvbihldmVudCkgeworICAgICAgICByZW5kZXJlZEJ1ZmZlciA9
IGV2ZW50LnJlbmRlcmVkQnVmZmVyOworICAgICAgICByZW5kZXJlZERhdGEgPSByZW5kZXJlZEJ1
ZmZlci5nZXRDaGFubmVsRGF0YSgwKTsKKworICAgICAgICByZWZlcmVuY2UgPSBnZW5lcmF0ZVJl
ZmVyZW5jZShmaWx0ZXJUeXBlLCBmaWx0ZXJQYXJhbWV0ZXJzKTsKKyAgICAgICAgCisgICAgICAg
IHZhciBsZW4gPSBNYXRoLm1pbihyZW5kZXJlZERhdGEubGVuZ3RoLCByZWZlcmVuY2UubGVuZ3Ro
KTsKKworICAgICAgICB2YXIgc3VjY2VzcyA9IHRydWU7CisKKyAgICAgICAgLy8gTWF4aW11bSBl
cnJvciBiZXR3ZWVuIHJlbmRlcmVkIGRhdGEgYW5kIGV4cGVjdGVkIGRhdGEKKyAgICAgICAgdmFy
IG1heEVycm9yID0gMDsKKworICAgICAgICAvLyBTYW1wbGUgb2Zmc2V0IHdoZXJlIHRoZSBtYXhp
bXVtIGVycm9yIG9jY3VycmVkLgorICAgICAgICB2YXIgbWF4UG9zaXRpb24gPSAwOworCisgICAg
ICAgIC8vIE51bWJlciBvZiBpbmZpbml0aWVzIG9yIE5hTnMgdGhhdCBvY2N1cnJlZCBpbiB0aGUg
cmVuZGVyZWQgZGF0YS4KKyAgICAgICAgdmFyIGludmFsaWROdW1iZXJDb3VudCA9IDA7CisKKyAg
ICAgICAgaWYgKG5GaWx0ZXJzICE9IGZpbHRlclBhcmFtZXRlcnMubGVuZ3RoKSB7CisgICAgICAg
ICAgICB0ZXN0RmFpbGVkKCJUZXN0IHdhbnRlZCAiICsgZmlsdGVyUGFyYW1ldGVycy5sZW5ndGgg
KyAiIGZpbHRlcnMgYnV0IG9ubHkgIiArIG1heEZpbHRlcnMgKyAiIGFsbG93ZWQuIik7CisgICAg
ICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBDb21wYXJl
IHRoZSByZW5kZXJlZCBzaWduYWwgd2l0aCBvdXIgcmVmZXJlbmNlLCBrZWVwaW5nCisgICAgICAg
IC8vIHRyYWNrIG9mIHRoZSBtYXhpbXVtIGRpZmZlcmVuY2UgKGFuZCB0aGUgb2Zmc2V0IG9mIHRo
ZSBtYXgKKyAgICAgICAgLy8gZGlmZmVyZW5jZS4pICBDaGVjayBmb3IgYmFkIG51bWJlcnMgaW4g
dGhlIHJlbmRlcmVkIG91dHB1dAorICAgICAgICAvLyB0b28uICBUaGVyZSBzaG91bGRuJ3QgYmUg
YW55LgorICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGxlbjsgKytrKSB7CisgICAgICAgICAg
ICB2YXIgZXJyID0gTWF0aC5hYnMocmVuZGVyZWREYXRhW2tdIC0gcmVmZXJlbmNlW2tdKTsKKyAg
ICAgICAgICAgIGlmIChlcnIgPiBtYXhFcnJvcikgeworICAgICAgICAgICAgICAgIG1heEVycm9y
ID0gZXJyOworICAgICAgICAgICAgICAgIG1heFBvc2l0aW9uID0gazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICghaXNWYWxpZE51bWJlcihyZW5kZXJlZERhdGFba10pKSB7CisgICAg
ICAgICAgICAgICAgKytpbnZhbGlkTnVtYmVyQ291bnQ7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBpZiAoaW52YWxpZE51bWJlckNvdW50ID4gMCkgeworICAgICAgICAgICAg
dGVzdEZhaWxlZCgiUmVuZGVyZWQgb3V0cHV0IGhhcyAiICsgaW52YWxpZE51bWJlckNvdW50ICsg
IiBpbmZpbml0aWVzIG9yIE5hTnMuIik7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJSZW5kZXJlZCBvdXRwdXQg
ZGlkIG5vdCBoYXZlIGluZmluaXRpZXMgb3IgTmFOcy4iKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKG1heEVycm9yIDw9IG1heEFsbG93ZWRFcnJvcikgeworICAgICAgICAgICAg
dGVzdFBhc3NlZChmaWx0ZXJUeXBlTmFtZVtmaWx0ZXJUeXBlXSArICIgcmVzcG9uc2UgaXMgY29y
cmVjdC4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoZmlsdGVy
VHlwZU5hbWVbZmlsdGVyVHlwZV0gKyAiIHJlc3BvbnNlIGlzIGluY29ycmVjdC4gIE1heCBlcnIg
PSAiICsgbWF4RXJyb3IgKyAiIGF0ICIgKyBtYXhQb3NpdGlvbiArICIuICBUaHJlc2hvbGQgPSAi
ICsgbWF4QWxsb3dlZEVycm9yKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHRlc3RQ
YXNzZWQoIlRlc3Qgc2lnbmFsIHdhcyBjb3JyZWN0bHkgZmlsdGVyZWQuIik7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJUZXN0IHNpZ25hbCB3YXMgbm90IGNvcnJl
Y3RseSBmaWx0ZXJlZC4iKTsKKyAgICAgICAgfQorICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAg
ICB9Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124977</attachid>
            <date>2012-02-01 11:19:04 -0800</date>
            <delta_ts>2012-02-01 13:31:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71413-20120201111903.patch</filename>
            <type>text/plain</type>
            <size>52203</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTU5ODEzZTYzNjhlYmJk
YjVmMmIyZWY5NjNjYzVjYzI1NmNlNmYxZi4uMjdhYWMwNWFjOThkYWNhZTMwNTU4MGU4YzgwMTA3
YTU0ODJjZTY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDExLTExLTA3ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBDaGVjayBwYXJhbWV0ZXJzIHRv
IGJpcXVhZCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MTQxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3RzIGFkZGVkIGZvciBlYWNoIGZpbHRlciB0eXBlIGFuZCBmb3IgdGhlIGxpbWl0
aW5nIGNhc2VzIGZvcgorICAgICAgICBlYWNoIGZpbHRlciB0eXBlLgorCisgICAgICAgICogcGxh
dGZvcm0vYXVkaW8vQmlxdWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6c2V0TG93
cGFzc1BhcmFtcyk6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWQ6OnNldEhpZ2hwYXNzUGFyYW1z
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6c2V0TG93U2hlbGZQYXJhbXMpOgorICAgICAg
ICAoV2ViQ29yZTo6QmlxdWFkOjpzZXRIaWdoU2hlbGZQYXJhbXMpOgorICAgICAgICAoV2ViQ29y
ZTo6QmlxdWFkOjpzZXRQZWFraW5nUGFyYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6
c2V0QWxscGFzc1BhcmFtcyk6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWQ6OnNldE5vdGNoUGFy
YW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6c2V0QmFuZHBhc3NQYXJhbXMpOgorICAg
ICAgICBDaGVjayBmb3IgaW52YWxpZCBwYXJhbWV0ZXJzIGFuZCBjbGlwIHRoZW0gdG8gc29tZXRo
aW5nIHNlbnNpYmxlLgorICAgICAgICBBbHNvIGNoZWNrIGZvciB0aGUgbGltaXRpbmcgY2FzZXMg
YW5kIHRyeSB0byB1c2UgdGhlIGxpbWl0aW5nIGZvcm0KKyAgICAgICAgb2YgdGhlIHotdHJhbnNm
b3JtIGZvciB0aGUgYmlxdWFkLiAgU29tZSBpc3N1ZXMgY2Fubm90IGJlCisgICAgICAgIGNvbnNp
c3RlbnRseSBoYW5kbGVkIGJlY2F1c2UgdGhlIHotdHJhbnNmb3JtIGlzIG5vdCBjb250aW51b3Vz
IGFzCisgICAgICAgIHRoZSBwYXJhbWV0ZXJzIGFwcHJvYWNoIHRoZSBsaW1pdC4KKwogMjAxMi0w
MS0zMSAgUGFibG8gRmxvdXJldCAgPHBhYmxvZkBtb3Rvcm9sYS5jb20+CiAKICAgICAgICAgRml4
IGNvbXBpbGF0aW9uIGVycm9ycyBvbiBidWlsZC13ZWJraXQgLS1kZWJ1ZyAtLW5vLXdvcmtlcnMg
b24gbWFjLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFk
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHAKaW5kZXggOGRj
MWY0ZmI2OWU3MTEyYmJiMTYwZDk3ZDEzM2MwMGVjODkwYTYyOS4uZTA2ZjkzNzE5NTgwY2NkZTc1
YzMwOTQ4ZWMyYmUyZjk5MTBlOGM3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vQmlxdWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9C
aXF1YWQuY3BwCkBAIC0xODgsNDMgKzE4OCw4NSBAQCB2b2lkIEJpcXVhZDo6cmVzZXQoKQogdm9p
ZCBCaXF1YWQ6OnNldExvd3Bhc3NQYXJhbXMoZG91YmxlIGN1dG9mZiwgZG91YmxlIHJlc29uYW5j
ZSkKIHsKICAgICByZXNvbmFuY2UgPSBzdGQ6Om1heCgwLjAsIHJlc29uYW5jZSk7IC8vIGNhbid0
IGdvIG5lZ2F0aXZlCi0KKyAgICAvLyBMaW1pdCBjdXRvZmYgdG8gMCB0byAxLgorICAgIGN1dG9m
ZiA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oY3V0b2ZmLCAxLjApKTsKKyAgICAKICAgICBkb3Vi
bGUgZyA9IHBvdygxMC4wLCAwLjA1ICogcmVzb25hbmNlKTsKICAgICBkb3VibGUgZCA9IHNxcnQo
KDQgLSBzcXJ0KDE2IC0gMTYgLyAoZyAqIGcpKSkgLyAyKTsKIAotICAgIC8vIENvbXB1dGUgYmlx
dWFkIGNvZWZmaWNpZW50cyBmb3IgbG9wYXNzIGZpbHRlcgotICAgIGRvdWJsZSB0aGV0YSA9IHBp
RG91YmxlICogY3V0b2ZmOwotICAgIGRvdWJsZSBzbiA9IDAuNSAqIGQgKiBzaW4odGhldGEpOwot
ICAgIGRvdWJsZSBiZXRhID0gMC41ICogKDEgLSBzbikgLyAoMSArIHNuKTsKLSAgICBkb3VibGUg
Z2FtbWEgPSAoMC41ICsgYmV0YSkgKiBjb3ModGhldGEpOwotICAgIGRvdWJsZSBhbHBoYSA9IDAu
MjUgKiAoMC41ICsgYmV0YSAtIGdhbW1hKTsKLQotICAgIG1fYjAgPSAyICogYWxwaGE7Ci0gICAg
bV9iMSA9IDIgKiAyICogYWxwaGE7Ci0gICAgbV9iMiA9IDIgKiBhbHBoYTsKLSAgICBtX2ExID0g
MiAqIC1nYW1tYTsKLSAgICBtX2EyID0gMiAqIGJldGE7CisgICAgaWYgKGN1dG9mZiA9PSAxKSB7
CisgICAgICAgIC8vIFdoZW4gY3V0b2ZmIGlzIDEsIHRoZSB6LXRyYW5zZm9ybSBpcyAxLgorICAg
ICAgICBtX2IwID0gMTsKKyAgICAgICAgbV9iMSA9IDA7CisgICAgICAgIG1fYjIgPSAwOworICAg
ICAgICBtX2ExID0gMDsKKyAgICAgICAgbV9hMiA9IDA7CisgICAgICAKKyAgICB9IGVsc2UgaWYg
KGN1dG9mZiA+IDApIHsKKyAgICAgICAgLy8gQ29tcHV0ZSBiaXF1YWQgY29lZmZpY2llbnRzIGZv
ciBsb3Bhc3MgZmlsdGVyCisgICAgICAgIGRvdWJsZSB0aGV0YSA9IHBpRG91YmxlICogY3V0b2Zm
OworICAgICAgICBkb3VibGUgc24gPSAwLjUgKiBkICogc2luKHRoZXRhKTsKKyAgICAgICAgZG91
YmxlIGJldGEgPSAwLjUgKiAoMSAtIHNuKSAvICgxICsgc24pOworICAgICAgICBkb3VibGUgZ2Ft
bWEgPSAoMC41ICsgYmV0YSkgKiBjb3ModGhldGEpOworICAgICAgICBkb3VibGUgYWxwaGEgPSAw
LjI1ICogKDAuNSArIGJldGEgLSBnYW1tYSk7CisKKyAgICAgICAgbV9iMCA9IDIgKiBhbHBoYTsK
KyAgICAgICAgbV9iMSA9IDIgKiAyICogYWxwaGE7CisgICAgICAgIG1fYjIgPSAyICogYWxwaGE7
CisgICAgICAgIG1fYTEgPSAyICogLWdhbW1hOworICAgICAgICBtX2EyID0gMiAqIGJldGE7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2hlbiBjdXRvZmYgaXMgemVybywgbm90aGluZyBnZXRz
IHRocm91Z2ggdGhlIGZpbHRlciwgc28gc2V0CisgICAgICAgIC8vIGNvZWZmaWNpZW50cyB1cCBj
b3JyZWN0bHkuCisgICAgICAgIG1fYjAgPSAwOworICAgICAgICBtX2IxID0gMDsKKyAgICAgICAg
bV9iMiA9IDA7CisgICAgICAgIG1fYTEgPSAwOworICAgICAgICBtX2EyID0gMDsKKyAgICB9CiB9
CiAKIHZvaWQgQmlxdWFkOjpzZXRIaWdocGFzc1BhcmFtcyhkb3VibGUgY3V0b2ZmLCBkb3VibGUg
cmVzb25hbmNlKQogewogICAgIHJlc29uYW5jZSA9IHN0ZDo6bWF4KDAuMCwgcmVzb25hbmNlKTsg
Ly8gY2FuJ3QgZ28gbmVnYXRpdmUKIAorICAgIC8vIExpbWl0IGN1dG9mZiB0byAwIHRvIDEuCisg
ICAgY3V0b2ZmID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbihjdXRvZmYsIDEuMCkpOworCiAgICAg
ZG91YmxlIGcgPSBwb3coMTAuMCwgMC4wNSAqIHJlc29uYW5jZSk7CiAgICAgZG91YmxlIGQgPSBz
cXJ0KCg0IC0gc3FydCgxNiAtIDE2IC8gKGcgKiBnKSkpIC8gMik7CiAKLSAgICAvLyBDb21wdXRl
IGJpcXVhZCBjb2VmZmljaWVudHMgZm9yIGhpZ2hwYXNzIGZpbHRlcgotICAgIGRvdWJsZSB0aGV0
YSA9IHBpRG91YmxlICogY3V0b2ZmOwotICAgIGRvdWJsZSBzbiA9IDAuNSAqIGQgKiBzaW4odGhl
dGEpOwotICAgIGRvdWJsZSBiZXRhID0gMC41ICogKDEgLSBzbikgLyAoMSArIHNuKTsKLSAgICBk
b3VibGUgZ2FtbWEgPSAoMC41ICsgYmV0YSkgKiBjb3ModGhldGEpOwotICAgIGRvdWJsZSBhbHBo
YSA9IDAuMjUgKiAoMC41ICsgYmV0YSArIGdhbW1hKTsKLQotICAgIG1fYjAgPSAyICogYWxwaGE7
Ci0gICAgbV9iMSA9IDIgKiAtMiAqIGFscGhhOwotICAgIG1fYjIgPSAyICogYWxwaGE7Ci0gICAg
bV9hMSA9IDIgKiAtZ2FtbWE7Ci0gICAgbV9hMiA9IDIgKiBiZXRhOworICAgIGlmIChjdXRvZmYg
PT0gMSkgeworICAgICAgICAvLyBUaGUgei10cmFuc2Zvcm0gaXMgMC4KKyAgICAgICAgbV9iMCA9
IDA7CisgICAgICAgIG1fYjEgPSAwOworICAgICAgICBtX2IyID0gMDsKKyAgICAgICAgbV9hMSA9
IDA7CisgICAgICAgIG1fYTIgPSAwOworICAgIH0gZWxzZSBpZiAoY3V0b2ZmID4gMCkgeworICAg
ICAgICAvLyBDb21wdXRlIGJpcXVhZCBjb2VmZmljaWVudHMgZm9yIGhpZ2hwYXNzIGZpbHRlcgor
ICAgICAgICBkb3VibGUgdGhldGEgPSBwaURvdWJsZSAqIGN1dG9mZjsKKyAgICAgICAgZG91Ymxl
IHNuID0gMC41ICogZCAqIHNpbih0aGV0YSk7CisgICAgICAgIGRvdWJsZSBiZXRhID0gMC41ICog
KDEgLSBzbikgLyAoMSArIHNuKTsKKyAgICAgICAgZG91YmxlIGdhbW1hID0gKDAuNSArIGJldGEp
ICogY29zKHRoZXRhKTsKKyAgICAgICAgZG91YmxlIGFscGhhID0gMC4yNSAqICgwLjUgKyBiZXRh
ICsgZ2FtbWEpOworCisgICAgICAgIG1fYjAgPSAyICogYWxwaGE7CisgICAgICAgIG1fYjEgPSAy
ICogLTIgKiBhbHBoYTsKKyAgICAgICAgbV9iMiA9IDIgKiBhbHBoYTsKKyAgICAgICAgbV9hMSA9
IDIgKiAtZ2FtbWE7CisgICAgICAgIG1fYTIgPSAyICogYmV0YTsKKyAgICB9IGVsc2UgeworICAg
ICAgLy8gV2hlbiBjdXRvZmYgaXMgemVybywgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGJlY2F1c2Ug
dGhlIGFib3ZlCisgICAgICAvLyBnaXZlcyBhIHF1YWRyYXRpYyBkaXZpZGVkIGJ5IHRoZSBzYW1l
IHF1YWRyYXRpYywgd2l0aCBwb2xlcworICAgICAgLy8gYW5kIHplcm9zIG9uIHRoZSB1bml0IGNp
cmNsZSBpbiB0aGUgc2FtZSBwbGFjZS4gV2hlbiBjdXRvZmYKKyAgICAgIC8vIGlzIHplcm8sIHRo
ZSB6LXRyYW5zZm9ybSBpcyAxLgorICAgICAgbV9iMCA9IDE7CisgICAgICBtX2IxID0gMDsKKyAg
ICAgIG1fYjIgPSAwOworICAgICAgbV9hMSA9IDA7CisgICAgICBtX2EyID0gMDsKKyAgICB9CiB9
CiAKIHZvaWQgQmlxdWFkOjpzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKGRvdWJsZSBiMCwgZG91
YmxlIGIxLCBkb3VibGUgYjIsIGRvdWJsZSBhMCwgZG91YmxlIGExLCBkb3VibGUgYTIpCkBAIC0y
NDAsMTE5ICsyODIsMjIyIEBAIHZvaWQgQmlxdWFkOjpzZXROb3JtYWxpemVkQ29lZmZpY2llbnRz
KGRvdWJsZSBiMCwgZG91YmxlIGIxLCBkb3VibGUgYjIsIGRvdWJsZSBhCiAKIHZvaWQgQmlxdWFk
OjpzZXRMb3dTaGVsZlBhcmFtcyhkb3VibGUgZnJlcXVlbmN5LCBkb3VibGUgZGJHYWluKQogewot
ICAgIGRvdWJsZSB3MCA9IHBpRG91YmxlICogZnJlcXVlbmN5OwotCisgICAgLy8gQ2xpcCBmcmVx
dWVuY2llcyB0byBiZXR3ZWVuIDAgYW5kIDEsIGluY2x1c2l2ZS4KKyAgICBmcmVxdWVuY3kgPSBz
dGQ6Om1heCgwLjAsIHN0ZDo6bWluKGZyZXF1ZW5jeSwgMS4wKSk7CisgICAgCiAgICAgZG91Ymxl
IEEgPSBwb3coMTAuMCwgZGJHYWluIC8gNDApOwotICAgIGRvdWJsZSBTID0gMTsgLy8gZmlsdGVy
IHNsb3BlICgxIGlzIG1heCB2YWx1ZSkKLSAgICBkb3VibGUgYWxwaGEgPSAwLjUgKiBzaW4odzAp
ICogc3FydCgoQSArIDEgLyBBKSAqICgxIC8gUyAtIDEpICsgMik7CiAKLSAgICBkb3VibGUgayA9
IGNvcyh3MCk7Ci0gICAgZG91YmxlIGsyID0gMiAqIHNxcnQoQSkgKiBhbHBoYTsKLQotICAgIGRv
dWJsZSBhUGx1c09uZSA9IEEgKyAxOwotICAgIGRvdWJsZSBhTWludXNPbmUgPSBBIC0gMTsKLSAg
ICAKLSAgICBkb3VibGUgYjAgPSBBICogKGFQbHVzT25lIC0gYU1pbnVzT25lICogayArIGsyKTsK
LSAgICBkb3VibGUgYjEgPSAyICogQSAqIChhTWludXNPbmUgLSBhUGx1c09uZSAqIGspOwotICAg
IGRvdWJsZSBiMiA9IEEgKiAoYVBsdXNPbmUgLSBhTWludXNPbmUgKiBrIC0gazIpOwotICAgIGRv
dWJsZSBhMCA9IGFQbHVzT25lICsgYU1pbnVzT25lICogayArIGsyOwotICAgIGRvdWJsZSBhMSA9
IC0yICogKGFNaW51c09uZSArIGFQbHVzT25lICogayk7Ci0gICAgZG91YmxlIGEyID0gYVBsdXNP
bmUgKyBhTWludXNPbmUgKiBrIC0gazI7Ci0KLSAgICBzZXROb3JtYWxpemVkQ29lZmZpY2llbnRz
KGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOworICAgIGlmIChmcmVxdWVuY3kgPT0gMSkgeworICAg
ICAgICAvLyBUaGUgei10cmFuc2Zvcm0gaXMgYSBjb25zdGFudCBnYWluLgorICAgICAgICBzZXRO
b3JtYWxpemVkQ29lZmZpY2llbnRzKEEgKiBBLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDEsIDAsIDApOworICAgIH0gZWxzZSBpZiAoZnJlcXVlbmN5ID4gMCkgewor
ICAgICAgICBkb3VibGUgdzAgPSBwaURvdWJsZSAqIGZyZXF1ZW5jeTsKKyAgICAgICAgZG91Ymxl
IFMgPSAxOyAvLyBmaWx0ZXIgc2xvcGUgKDEgaXMgbWF4IHZhbHVlKQorICAgICAgICBkb3VibGUg
YWxwaGEgPSAwLjUgKiBzaW4odzApICogc3FydCgoQSArIDEgLyBBKSAqICgxIC8gUyAtIDEpICsg
Mik7CisgICAgICAgIGRvdWJsZSBrID0gY29zKHcwKTsKKyAgICAgICAgZG91YmxlIGsyID0gMiAq
IHNxcnQoQSkgKiBhbHBoYTsKKyAgICAgICAgZG91YmxlIGFQbHVzT25lID0gQSArIDE7CisgICAg
ICAgIGRvdWJsZSBhTWludXNPbmUgPSBBIC0gMTsKKworICAgICAgICBkb3VibGUgYjAgPSBBICog
KGFQbHVzT25lIC0gYU1pbnVzT25lICogayArIGsyKTsKKyAgICAgICAgZG91YmxlIGIxID0gMiAq
IEEgKiAoYU1pbnVzT25lIC0gYVBsdXNPbmUgKiBrKTsKKyAgICAgICAgZG91YmxlIGIyID0gQSAq
IChhUGx1c09uZSAtIGFNaW51c09uZSAqIGsgLSBrMik7CisgICAgICAgIGRvdWJsZSBhMCA9IGFQ
bHVzT25lICsgYU1pbnVzT25lICogayArIGsyOworICAgICAgICBkb3VibGUgYTEgPSAtMiAqIChh
TWludXNPbmUgKyBhUGx1c09uZSAqIGspOworICAgICAgICBkb3VibGUgYTIgPSBhUGx1c09uZSAr
IGFNaW51c09uZSAqIGsgLSBrMjsKKworICAgICAgICBzZXROb3JtYWxpemVkQ29lZmZpY2llbnRz
KGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdoZW4g
ZnJlcXVlbmN5IGlzIDAsIHRoZSB6LXRyYW5zZm9ybSBpcyAxLgorICAgICAgICBzZXROb3JtYWxp
emVkQ29lZmZpY2llbnRzKDEsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMSwgMCwgMCk7CisgICAgfQogfQogCiB2b2lkIEJpcXVhZDo6c2V0SGlnaFNoZWxmUGFyYW1z
KGRvdWJsZSBmcmVxdWVuY3ksIGRvdWJsZSBkYkdhaW4pCiB7Ci0gICAgZG91YmxlIHcwID0gcGlE
b3VibGUgKiBmcmVxdWVuY3k7CisgICAgLy8gQ2xpcCBmcmVxdWVuY2llcyB0byBiZXR3ZWVuIDAg
YW5kIDEsIGluY2x1c2l2ZS4KKyAgICBmcmVxdWVuY3kgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWlu
KGZyZXF1ZW5jeSwgMS4wKSk7CiAKICAgICBkb3VibGUgQSA9IHBvdygxMC4wLCBkYkdhaW4gLyA0
MCk7Ci0gICAgZG91YmxlIFMgPSAxOyAvLyBmaWx0ZXIgc2xvcGUgKDEgaXMgbWF4IHZhbHVlKQot
ICAgIGRvdWJsZSBhbHBoYSA9IDAuNSAqIHNpbih3MCkgKiBzcXJ0KChBICsgMSAvIEEpICogKDEg
LyBTIC0gMSkgKyAyKTsKIAotICAgIGRvdWJsZSBrID0gY29zKHcwKTsKLSAgICBkb3VibGUgazIg
PSAyICogc3FydChBKSAqIGFscGhhOwotCi0gICAgZG91YmxlIGFQbHVzT25lID0gQSArIDE7Ci0g
ICAgZG91YmxlIGFNaW51c09uZSA9IEEgLSAxOwotICAgIAotICAgIGRvdWJsZSBiMCA9IEEgKiAo
YVBsdXNPbmUgKyBhTWludXNPbmUgKiBrICsgazIpOwotICAgIGRvdWJsZSBiMSA9IC0yICogQSAq
IChhTWludXNPbmUgKyBhUGx1c09uZSAqIGspOwotICAgIGRvdWJsZSBiMiA9IEEgKiAoYVBsdXNP
bmUgKyBhTWludXNPbmUgKiBrIC0gazIpOwotICAgIGRvdWJsZSBhMCA9IGFQbHVzT25lIC0gYU1p
bnVzT25lICogayArIGsyOwotICAgIGRvdWJsZSBhMSA9IDIgKiAoYU1pbnVzT25lIC0gYVBsdXNP
bmUgKiBrKTsKLSAgICBkb3VibGUgYTIgPSBhUGx1c09uZSAtIGFNaW51c09uZSAqIGsgLSBrMjsK
LQotICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoYjAsIGIxLCBiMiwgYTAsIGExLCBhMik7
CisgICAgaWYgKGZyZXF1ZW5jeSA9PSAxKSB7CisgICAgICAgIC8vIFRoZSB6LXRyYW5zZm9ybSBp
cyAxLgorICAgICAgICBzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKDEsIDAsIDAsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCk7CisgICAgfSBlbHNlIGlmIChmcmVx
dWVuY3kgPiAwKSB7CisgICAgICAgIGRvdWJsZSB3MCA9IHBpRG91YmxlICogZnJlcXVlbmN5Owor
ICAgICAgICBkb3VibGUgUyA9IDE7IC8vIGZpbHRlciBzbG9wZSAoMSBpcyBtYXggdmFsdWUpCisg
ICAgICAgIGRvdWJsZSBhbHBoYSA9IDAuNSAqIHNpbih3MCkgKiBzcXJ0KChBICsgMSAvIEEpICog
KDEgLyBTIC0gMSkgKyAyKTsKKyAgICAgICAgZG91YmxlIGsgPSBjb3ModzApOworICAgICAgICBk
b3VibGUgazIgPSAyICogc3FydChBKSAqIGFscGhhOworICAgICAgICBkb3VibGUgYVBsdXNPbmUg
PSBBICsgMTsKKyAgICAgICAgZG91YmxlIGFNaW51c09uZSA9IEEgLSAxOworCisgICAgICAgIGRv
dWJsZSBiMCA9IEEgKiAoYVBsdXNPbmUgKyBhTWludXNPbmUgKiBrICsgazIpOworICAgICAgICBk
b3VibGUgYjEgPSAtMiAqIEEgKiAoYU1pbnVzT25lICsgYVBsdXNPbmUgKiBrKTsKKyAgICAgICAg
ZG91YmxlIGIyID0gQSAqIChhUGx1c09uZSArIGFNaW51c09uZSAqIGsgLSBrMik7CisgICAgICAg
IGRvdWJsZSBhMCA9IGFQbHVzT25lIC0gYU1pbnVzT25lICogayArIGsyOworICAgICAgICBkb3Vi
bGUgYTEgPSAyICogKGFNaW51c09uZSAtIGFQbHVzT25lICogayk7CisgICAgICAgIGRvdWJsZSBh
MiA9IGFQbHVzT25lIC0gYU1pbnVzT25lICogayAtIGsyOworCisgICAgICAgIHNldE5vcm1hbGl6
ZWRDb2VmZmljaWVudHMoYjAsIGIxLCBiMiwgYTAsIGExLCBhMik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gV2hlbiBmcmVxdWVuY3kgPSAwLCB0aGUgZmlsdGVyIGlzIGp1c3QgYSBnYWluLCBB
XjIuCisgICAgICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoQSAqIEEsIDAsIDAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCk7CisgICAgfQogfQogCiB2b2lk
IEJpcXVhZDo6c2V0UGVha2luZ1BhcmFtcyhkb3VibGUgZnJlcXVlbmN5LCBkb3VibGUgUSwgZG91
YmxlIGRiR2FpbikKIHsKLSAgICBkb3VibGUgdzAgPSBwaURvdWJsZSAqIGZyZXF1ZW5jeTsKLSAg
ICBkb3VibGUgYWxwaGEgPSBzaW4odzApIC8gKDIgKiBRKTsKLSAgICBkb3VibGUgQSA9IHBvdygx
MC4wLCBkYkdhaW4gLyA0MCk7CisgICAgLy8gQ2xpcCBmcmVxdWVuY2llcyB0byBiZXR3ZWVuIDAg
YW5kIDEsIGluY2x1c2l2ZS4KKyAgICBmcmVxdWVuY3kgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWlu
KGZyZXF1ZW5jeSwgMS4wKSk7CiAKLSAgICBkb3VibGUgayA9IGNvcyh3MCk7CisgICAgLy8gRG9u
J3QgbGV0IFEgZ28gbmVnYXRpdmUsIHdoaWNoIGNhdXNlcyBhbiB1bnN0YWJsZSBmaWx0ZXIuCisg
ICAgUSA9IHN0ZDo6bWF4KDAuMCwgUSk7CiAKLSAgICBkb3VibGUgYjAgPSAxICsgYWxwaGEgKiBB
OwotICAgIGRvdWJsZSBiMSA9IC0yICogazsKLSAgICBkb3VibGUgYjIgPSAxIC0gYWxwaGEgKiBB
OwotICAgIGRvdWJsZSBhMCA9IDEgKyBhbHBoYSAvIEE7Ci0gICAgZG91YmxlIGExID0gLTIgKiBr
OwotICAgIGRvdWJsZSBhMiA9IDEgLSBhbHBoYSAvIEE7CisgICAgZG91YmxlIEEgPSBwb3coMTAu
MCwgZGJHYWluIC8gNDApOwogCi0gICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhiMCwgYjEs
IGIyLCBhMCwgYTEsIGEyKTsKKyAgICBpZiAoZnJlcXVlbmN5ID4gMCAmJiBmcmVxdWVuY3kgPCAx
KSB7CisgICAgICAgIGlmIChRID4gMCkgeworICAgICAgICAgICAgZG91YmxlIHcwID0gcGlEb3Vi
bGUgKiBmcmVxdWVuY3k7CisgICAgICAgICAgICBkb3VibGUgYWxwaGEgPSBzaW4odzApIC8gKDIg
KiBRKTsKKyAgICAgICAgICAgIGRvdWJsZSBrID0gY29zKHcwKTsKKworICAgICAgICAgICAgZG91
YmxlIGIwID0gMSArIGFscGhhICogQTsKKyAgICAgICAgICAgIGRvdWJsZSBiMSA9IC0yICogazsK
KyAgICAgICAgICAgIGRvdWJsZSBiMiA9IDEgLSBhbHBoYSAqIEE7CisgICAgICAgICAgICBkb3Vi
bGUgYTAgPSAxICsgYWxwaGEgLyBBOworICAgICAgICAgICAgZG91YmxlIGExID0gLTIgKiBrOwor
ICAgICAgICAgICAgZG91YmxlIGEyID0gMSAtIGFscGhhIC8gQTsKKworICAgICAgICAgICAgc2V0
Tm9ybWFsaXplZENvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdoZW4gUSA9IDAsIHRoZSBhYm92ZSBmb3JtdWxhcyBo
YXZlIHByb2JsZW1zLiBJZiB3ZSBsb29rIGF0CisgICAgICAgICAgICAvLyB0aGUgei10cmFuc2Zv
cm0sIHdlIGNhbiBzZWUgdGhhdCB0aGUgbGltaXQgYXMgUS0+MCBpcyBBXjIsIHNvCisgICAgICAg
ICAgICAvLyBzZXQgdGhlIGZpbHRlciB0aGF0IHdheS4KKyAgICAgICAgICAgIHNldE5vcm1hbGl6
ZWRDb2VmZmljaWVudHMoQSAqIEEsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDEsIDAsIDApOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
V2hlbiBmcmVxdWVuY3kgaXMgMCBvciAxLCB0aGUgei10cmFuc2Zvcm0gaXMgMS4KKyAgICAgICAg
c2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cygxLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDEsIDAsIDApOworICAgIH0KIH0KIAogdm9pZCBCaXF1YWQ6OnNldEFsbHBh
c3NQYXJhbXMoZG91YmxlIGZyZXF1ZW5jeSwgZG91YmxlIFEpCiB7Ci0gICAgZG91YmxlIHcwID0g
cGlEb3VibGUgKiBmcmVxdWVuY3k7Ci0gICAgZG91YmxlIGFscGhhID0gc2luKHcwKSAvICgyICog
USk7Ci0KLSAgICBkb3VibGUgayA9IGNvcyh3MCk7Ci0KLSAgICBkb3VibGUgYjAgPSAxIC0gYWxw
aGE7Ci0gICAgZG91YmxlIGIxID0gLTIgKiBrOwotICAgIGRvdWJsZSBiMiA9IDEgKyBhbHBoYTsK
LSAgICBkb3VibGUgYTAgPSAxICsgYWxwaGE7Ci0gICAgZG91YmxlIGExID0gLTIgKiBrOwotICAg
IGRvdWJsZSBhMiA9IDEgLSBhbHBoYTsKLQotICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMo
YjAsIGIxLCBiMiwgYTAsIGExLCBhMik7CisgICAgLy8gQ2xpcCBmcmVxdWVuY2llcyB0byBiZXR3
ZWVuIDAgYW5kIDEsIGluY2x1c2l2ZS4KKyAgICBmcmVxdWVuY3kgPSBzdGQ6Om1heCgwLjAsIHN0
ZDo6bWluKGZyZXF1ZW5jeSwgMS4wKSk7CisKKyAgICAvLyBEb24ndCBsZXQgUSBnbyBuZWdhdGl2
ZSwgd2hpY2ggY2F1c2VzIGFuIHVuc3RhYmxlIGZpbHRlci4KKyAgICBRID0gc3RkOjptYXgoMC4w
LCBRKTsKKworICAgIGlmIChmcmVxdWVuY3kgPiAwICYmIGZyZXF1ZW5jeSA8IDEpIHsKKyAgICAg
ICAgaWYgKFEgPiAwKSB7CisgICAgICAgICAgICBkb3VibGUgdzAgPSBwaURvdWJsZSAqIGZyZXF1
ZW5jeTsKKyAgICAgICAgICAgIGRvdWJsZSBhbHBoYSA9IHNpbih3MCkgLyAoMiAqIFEpOworICAg
ICAgICAgICAgZG91YmxlIGsgPSBjb3ModzApOworCisgICAgICAgICAgICBkb3VibGUgYjAgPSAx
IC0gYWxwaGE7CisgICAgICAgICAgICBkb3VibGUgYjEgPSAtMiAqIGs7CisgICAgICAgICAgICBk
b3VibGUgYjIgPSAxICsgYWxwaGE7CisgICAgICAgICAgICBkb3VibGUgYTAgPSAxICsgYWxwaGE7
CisgICAgICAgICAgICBkb3VibGUgYTEgPSAtMiAqIGs7CisgICAgICAgICAgICBkb3VibGUgYTIg
PSAxIC0gYWxwaGE7CisKKyAgICAgICAgICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoYjAs
IGIxLCBiMiwgYTAsIGExLCBhMik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBX
aGVuIFEgPSAwLCB0aGUgYWJvdmUgZm9ybXVsYXMgaGF2ZSBwcm9ibGVtcy4gSWYgd2UgbG9vayBh
dAorICAgICAgICAgICAgLy8gdGhlIHotdHJhbnNmb3JtLCB3ZSBjYW4gc2VlIHRoYXQgdGhlIGxp
bWl0IGFzIFEtPjAgaXMgLTEsIHNvCisgICAgICAgICAgICAvLyBzZXQgdGhlIGZpbHRlciB0aGF0
IHdheS4KKyAgICAgICAgICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoLTEsIDAsIDAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDAsIDApOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2hlbiBmcmVxdWVuY3kgaXMgMCBvciAxLCB0aGUg
ei10cmFuc2Zvcm0gaXMgMS4KKyAgICAgICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cygxLCAw
LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDAsIDApOworICAgIH0K
IH0KIAogdm9pZCBCaXF1YWQ6OnNldE5vdGNoUGFyYW1zKGRvdWJsZSBmcmVxdWVuY3ksIGRvdWJs
ZSBRKQogewotICAgIGRvdWJsZSB3MCA9IHBpRG91YmxlICogZnJlcXVlbmN5OwotICAgIGRvdWJs
ZSBhbHBoYSA9IHNpbih3MCkgLyAoMiAqIFEpOwotCi0gICAgZG91YmxlIGsgPSBjb3ModzApOwot
Ci0gICAgZG91YmxlIGIwID0gMTsKLSAgICBkb3VibGUgYjEgPSAtMiAqIGs7Ci0gICAgZG91Ymxl
IGIyID0gMTsKLSAgICBkb3VibGUgYTAgPSAxICsgYWxwaGE7Ci0gICAgZG91YmxlIGExID0gLTIg
KiBrOwotICAgIGRvdWJsZSBhMiA9IDEgLSBhbHBoYTsKLQotICAgIHNldE5vcm1hbGl6ZWRDb2Vm
ZmljaWVudHMoYjAsIGIxLCBiMiwgYTAsIGExLCBhMik7CisgICAgLy8gQ2xpcCBmcmVxdWVuY2ll
cyB0byBiZXR3ZWVuIDAgYW5kIDEsIGluY2x1c2l2ZS4KKyAgICBmcmVxdWVuY3kgPSBzdGQ6Om1h
eCgwLjAsIHN0ZDo6bWluKGZyZXF1ZW5jeSwgMS4wKSk7CisKKyAgICAvLyBEb24ndCBsZXQgUSBn
byBuZWdhdGl2ZSwgd2hpY2ggY2F1c2VzIGFuIHVuc3RhYmxlIGZpbHRlci4KKyAgICBRID0gc3Rk
OjptYXgoMC4wLCBRKTsKKworICAgIGlmIChmcmVxdWVuY3kgPiAwICYmIGZyZXF1ZW5jeSA8IDEp
IHsKKyAgICAgICAgaWYgKFEgPiAwKSB7CisgICAgICAgICAgICBkb3VibGUgdzAgPSBwaURvdWJs
ZSAqIGZyZXF1ZW5jeTsKKyAgICAgICAgICAgIGRvdWJsZSBhbHBoYSA9IHNpbih3MCkgLyAoMiAq
IFEpOworICAgICAgICAgICAgZG91YmxlIGsgPSBjb3ModzApOworCisgICAgICAgICAgICBkb3Vi
bGUgYjAgPSAxOworICAgICAgICAgICAgZG91YmxlIGIxID0gLTIgKiBrOworICAgICAgICAgICAg
ZG91YmxlIGIyID0gMTsKKyAgICAgICAgICAgIGRvdWJsZSBhMCA9IDEgKyBhbHBoYTsKKyAgICAg
ICAgICAgIGRvdWJsZSBhMSA9IC0yICogazsKKyAgICAgICAgICAgIGRvdWJsZSBhMiA9IDEgLSBh
bHBoYTsKKworICAgICAgICAgICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhiMCwgYjEsIGIy
LCBhMCwgYTEsIGEyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdoZW4gUSA9
IDAsIHRoZSBhYm92ZSBmb3JtdWxhcyBoYXZlIHByb2JsZW1zLiBJZiB3ZSBsb29rIGF0CisgICAg
ICAgICAgICAvLyB0aGUgei10cmFuc2Zvcm0sIHdlIGNhbiBzZWUgdGhhdCB0aGUgbGltaXQgYXMg
US0+MCBpcyAwLCBzbworICAgICAgICAgICAgLy8gc2V0IHRoZSBmaWx0ZXIgdGhhdCB3YXkuCisg
ICAgICAgICAgICBzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKDAsIDAsIDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDAsIDApOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgLy8gV2hlbiBmcmVxdWVuY3kgaXMgMCBvciAxLCB0aGUgei10cmFuc2Zv
cm0gaXMgMS4KKyAgICAgICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cygxLCAwLCAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDAsIDApOworICAgIH0KIH0KIAogdm9p
ZCBCaXF1YWQ6OnNldEJhbmRwYXNzUGFyYW1zKGRvdWJsZSBmcmVxdWVuY3ksIGRvdWJsZSBRKQog
ewotICAgIGRvdWJsZSB3MCA9IHBpRG91YmxlICogZnJlcXVlbmN5OwotICAgIGRvdWJsZSBhbHBo
YSA9IHNpbih3MCkgLyAoMiAqIFEpOworICAgIC8vIE5vIG5lZ2F0aXZlIGZyZXF1ZW5jaWVzIGFs
bG93ZWQuCisgICAgZnJlcXVlbmN5ID0gc3RkOjptYXgoMC4wLCBmcmVxdWVuY3kpOworCisgICAg
Ly8gRG9uJ3QgbGV0IFEgZ28gbmVnYXRpdmUsIHdoaWNoIGNhdXNlcyBhbiB1bnN0YWJsZSBmaWx0
ZXIuCisgICAgUSA9IHN0ZDo6bWF4KDAuMCwgUSk7CiAKLSAgICBkb3VibGUgayA9IGNvcyh3MCk7
CisgICAgaWYgKGZyZXF1ZW5jeSA+IDAgJiYgZnJlcXVlbmN5IDwgMSkgeworICAgICAgICBkb3Vi
bGUgdzAgPSBwaURvdWJsZSAqIGZyZXF1ZW5jeTsKKyAgICAgICAgaWYgKFEgPiAwKSB7CisgICAg
ICAgICAgICBkb3VibGUgYWxwaGEgPSBzaW4odzApIC8gKDIgKiBRKTsKKyAgICAgICAgICAgIGRv
dWJsZSBrID0gY29zKHcwKTsKICAgICAKLSAgICBkb3VibGUgYjAgPSBhbHBoYTsKLSAgICBkb3Vi
bGUgYjEgPSAwOwotICAgIGRvdWJsZSBiMiA9IC1hbHBoYTsKLSAgICBkb3VibGUgYTAgPSAxICsg
YWxwaGE7Ci0gICAgZG91YmxlIGExID0gLTIgKiBrOwotICAgIGRvdWJsZSBhMiA9IDEgLSBhbHBo
YTsKLQotICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoYjAsIGIxLCBiMiwgYTAsIGExLCBh
Mik7CisgICAgICAgICAgICBkb3VibGUgYjAgPSBhbHBoYTsKKyAgICAgICAgICAgIGRvdWJsZSBi
MSA9IDA7CisgICAgICAgICAgICBkb3VibGUgYjIgPSAtYWxwaGE7CisgICAgICAgICAgICBkb3Vi
bGUgYTAgPSAxICsgYWxwaGE7CisgICAgICAgICAgICBkb3VibGUgYTEgPSAtMiAqIGs7CisgICAg
ICAgICAgICBkb3VibGUgYTIgPSAxIC0gYWxwaGE7CisKKyAgICAgICAgICAgIHNldE5vcm1hbGl6
ZWRDb2VmZmljaWVudHMoYjAsIGIxLCBiMiwgYTAsIGExLCBhMik7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBXaGVuIFEgPSAwLCB0aGUgYWJvdmUgZm9ybXVsYXMgaGF2ZSBwcm9i
bGVtcy4gSWYgd2UgbG9vayBhdAorICAgICAgICAgICAgLy8gdGhlIHotdHJhbnNmb3JtLCB3ZSBj
YW4gc2VlIHRoYXQgdGhlIGxpbWl0IGFzIFEtPjAgaXMgMSwgc28KKyAgICAgICAgICAgIC8vIHNl
dCB0aGUgZmlsdGVyIHRoYXQgd2F5LgorICAgICAgICAgICAgc2V0Tm9ybWFsaXplZENvZWZmaWNp
ZW50cygxLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAw
LCAwKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdoZW4gdGhlIGN1dG9m
ZiBpcyB6ZXJvLCB0aGUgei10cmFuc2Zvcm0gYXBwcm9hY2hlcyAwLCBpZiBRCisgICAgICAgIC8v
ID4gMC4gV2hlbiBib3RoIFEgYW5kIGN1dG9mZiBhcmUgemVybywgdGhlIHotdHJhbnNmb3JtIGlz
CisgICAgICAgIC8vIHByZXR0eSBtdWNoIHVuZGVmaW5lZC4gV2hhdCBzaG91bGQgd2UgZG8gaW4g
dGhpcyBjYXNlPworICAgICAgICAvLyBGb3Igbm93LCBqdXN0IG1ha2UgdGhlIGZpbHRlciAwLiBX
aGVuIHRoZSBjdXRvZmYgaXMgMSwgdGhlCisgICAgICAgIC8vIHotdHJhbnNmb3JtIGFsc28gYXBw
cm9hY2hlcyAwLgorICAgICAgICBzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKDAsIDAsIDAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCk7CisgICAgfQogfQogCiB2
b2lkIEJpcXVhZDo6c2V0WmVyb1BvbGVQYWlycyhjb25zdCBDb21wbGV4ICZ6ZXJvLCBjb25zdCBD
b21wbGV4ICZwb2xlKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDk4NWU1ZTI4OTM0MjAxMDA2ODQ4MDAxNTAyNDVhMDdiNmVl
MDQ0YjcuLjA5MjliNGYyNWE0MmMyZjFkMWQyM2RmNGI4MTEwNjU0MGIxYjU1MDIgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyOCBAQAorMjAxMi0wMS0xMyAgUmF5bW9uZCBUb3kgIDxydG95QGNocm9taXVtLm9y
Zz4KKworICAgICAgICBDaGVjayBwYXJhbWV0ZXJzIHRvIGJpcXVhZCBmaWx0ZXJzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTQxMworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgKiB3ZWJhdWRp
by9iaXF1YWQtYWxscGFzcy1leHBlY3RlZC50eHQ6IEFkZGVkCisgICAgICAgICogd2ViYXVkaW8v
YmlxdWFkLWFsbHBhc3MuaHRtbDogQWRkZWQKKyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWQtYmFu
ZHBhc3MtZXhwZWN0ZWQudHh0OiBBZGRlZAorICAgICAgICAqIHdlYmF1ZGlvL2JpcXVhZC1iYW5k
cGFzcy5odG1sOiBBZGRlZAorICAgICAgICAqIHdlYmF1ZGlvL2JpcXVhZC1oaWdocGFzcy1leHBl
Y3RlZC50eHQ6IEFkZGVkCisgICAgICAgICogd2ViYXVkaW8vYmlxdWFkLWhpZ2hwYXNzLmh0bWw6
IEFkZGVkCisgICAgICAgICogd2ViYXVkaW8vYmlxdWFkLWhpZ2hzaGVsZi1leHBlY3RlZC50eHQ6
IEFkZGVkCisgICAgICAgICogd2ViYXVkaW8vYmlxdWFkLWhpZ2hzaGVsZi5odG1sOiBBZGRlZAor
ICAgICAgICAqIHdlYmF1ZGlvL2JpcXVhZC1sb3dwYXNzLWV4cGVjdGVkLnR4dDogQWRkZWQKKyAg
ICAgICAgKiB3ZWJhdWRpby9iaXF1YWQtbG93cGFzcy5odG1sOiBBZGRlZAorICAgICAgICAqIHdl
YmF1ZGlvL2JpcXVhZC1sb3dzaGVsZi1leHBlY3RlZC50eHQ6IEFkZGVkCisgICAgICAgICogd2Vi
YXVkaW8vYmlxdWFkLWxvd3NoZWxmLmh0bWw6IEFkZGVkCisgICAgICAgICogd2ViYXVkaW8vYmlx
dWFkLW5vdGNoLWV4cGVjdGVkLnR4dDogQWRkZWQKKyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWQt
bm90Y2guaHRtbDogQWRkZWQKKyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWQtcGVha2luZy1leHBl
Y3RlZC50eHQ6IEFkZGVkCisgICAgICAgICogd2ViYXVkaW8vYmlxdWFkLXBlYWtpbmcuaHRtbDog
QWRkZWQKKyAgICAgICAgKiB3ZWJhdWRpby9yZXNvdXJjZXMvYmlxdWFkLXRlc3RpbmcuanM6IEFk
ZGVkCisKIDIwMTItMDEtMzEgIFl1em8gRnVqaXNoaW1hICA8eXV6b0Bnb29nbGUuY29tPgogCiAg
ICAgICAgIFtDaHJvbWl1bV0gVW5yZXZpZXdlZCB0ZXN0IGV4cGVjdGF0aW9uIGNoYW5nZS4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1hbGxwYXNzLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1hbGxwYXNzLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41Mjk2MTMyZjJkYzYzZGJmODEzZmY0YzU0ZWI3N2U2ZDE1MGFkZTY2Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWFsbHBhc3MtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMTEgQEAKK1Rlc3RzIEJpcXVhZCBhbGxwYXNzIGZpbHRlci4KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIFJlbmRlcmVkIG91dHB1dCBkaWQgbm90IGhh
dmUgaW5maW5pdGllcyBvciBOYU5zLgorUEFTUyBBbGxwYXNzIGZpbHRlciByZXNwb25zZSBpcyBj
b3JyZWN0LgorUEFTUyBUZXN0IHNpZ25hbCB3YXMgY29ycmVjdGx5IGZpbHRlcmVkLgorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1hbGxwYXNzLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJhdWRpby9iaXF1YWQtYWxscGFzcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2NjI4ZmU0YjBkNjE2ZTBh
MTQ3MDRjYzMxYjc5NzAxYTFkNTI4OTkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJhdWRpby9iaXF1YWQtYWxscGFzcy5odG1sCkBAIC0wLDAgKzEsNDggQEAKKzwhRE9DVFlQRSBo
dG1sPgorCis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9InJlc291
cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL2JpcXVhZC10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisKKzxk
aXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8
c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3RzIEJpcXVhZCBhbGxwYXNzIGZpbHRlci4iKTsKKwor
ZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0KKyAgICAKKyAgICB3
aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisgICAgICAgIAorICAgIC8vIENyZWF0ZSBvZmZs
aW5lIGF1ZGlvIGNvbnRleHQuCisgICAgdmFyIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250
ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsKKwor
ICAgIC8vIER1bW15IGZpbHRlciB0byBnZXQgZmlsdGVyIHR5cGUgY29uc3RhbnQKKyAgICB2YXIg
ZiA9IGNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7CisKKyAgICB2YXIgZmlsdGVyUGFyYW1l
dGVycyA9IFt7Y3V0b2ZmIDogMCwgICAgcSA6IDEwLCBnYWluIDogMSB9LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAxLCAgICBxIDogMTAsIGdhaW4gOiAxIH0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6IC41LCAgIHEgOiAgMCwgZ2FpbiA6IDEg
fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogMC4yNSwgcSA6IDEwLCBn
YWluIDogMSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgXTsKKyAgICBjcmVhdGVUZXN0
QW5kUnVuKGNvbnRleHQsIGYuQUxMUEFTUywgZmlsdGVyUGFyYW1ldGVycyk7Cit9CisKK3J1blRl
c3QoKTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0PgorCis8c2NyaXB0
IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1i
YW5kcGFzcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtYmFuZHBh
c3MtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiYjk3ZDRhYmVlOTcwNmEwODZiZWQ0ODdmZWI0
NjZmNWM0YjlkOGYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1
YWQtYmFuZHBhc3MtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1Rlc3RzIEJpcXVhZCBi
YW5kcGFzcyBmaWx0ZXIuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBSZW5k
ZXJlZCBvdXRwdXQgZGlkIG5vdCBoYXZlIGluZmluaXRpZXMgb3IgTmFOcy4KK1BBU1MgQmFuZHBh
c3MgZmlsdGVyIHJlc3BvbnNlIGlzIGNvcnJlY3QuCitQQVNTIFRlc3Qgc2lnbmFsIHdhcyBjb3Jy
ZWN0bHkgZmlsdGVyZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWJhbmRw
YXNzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtYmFuZHBhc3MuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zYjE1NDUyNTU0YTZjOTQ0NTA4YWEwM2U1Y2M1ZjdlMzA2ZjI3ZGY3Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWJhbmRwYXNzLmh0bWwKQEAg
LTAsMCArMSw1MCBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxodG1sPgorPGhlYWQ+Cis8bGluayBy
ZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIi8+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYmlxdWFkLXRlc3RpbmcuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorCis8Ym9keT4KKworPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgQmlx
dWFkIGJhbmRwYXNzIGZpbHRlci4iKTsKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworICAgIH0KKyAgICAKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Cisg
ICAgICAgIAorICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuCisgICAgdmFyIGNv
bnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJMZW5n
dGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsKKworICAgIC8vIER1bW15IGZpbHRlciB0byBnZXQgZmls
dGVyIHR5cGUgY29uc3RhbnQKKyAgICB2YXIgZiA9IGNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVy
KCk7CisKKyAgICAvLyBUaGUgZmlsdGVycyB3ZSB3YW50IHRvIHRlc3QuCisgICAgdmFyIGZpbHRl
clBhcmFtZXRlcnMgPSBbe2N1dG9mZiA6IDAsICAgIHEgOiAwLCBnYWluIDogMSB9LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAxLCAgICBxIDogMCwgZ2FpbiA6IDEgfSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogMC41LCAgcSA6IDAsIGdhaW4g
OiAxIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6IDAuMjUsIHEgOiAx
LCBnYWluIDogMSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgXTsKKworICAgIGNyZWF0
ZVRlc3RBbmRSdW4oY29udGV4dCwgZi5CQU5EUEFTUywgZmlsdGVyUGFyYW1ldGVycyk7Cit9CisK
K3J1blRlc3QoKTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0PgorCis8
c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Jp
cXVhZC1oaWdocGFzcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQt
aGlnaHBhc3MtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzZTZmYjU4MmNkNjhlZjgzYjVlYzM2
NGRjNzFhMGIwYjcyMjA0ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRp
by9iaXF1YWQtaGlnaHBhc3MtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1Rlc3RzIEJp
cXVhZCBoaWdocGFzcyBmaWx0ZXIuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFT
UyBSZW5kZXJlZCBvdXRwdXQgZGlkIG5vdCBoYXZlIGluZmluaXRpZXMgb3IgTmFOcy4KK1BBU1Mg
SGlnaHBhc3MgZmlsdGVyIHJlc3BvbnNlIGlzIGNvcnJlY3QuCitQQVNTIFRlc3Qgc2lnbmFsIHdh
cyBjb3JyZWN0bHkgZmlsdGVyZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFk
LWhpZ2hwYXNzLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtaGlnaHBhc3MuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zMGI3ZGVhZDhmNzlhODNhNzBmMzU3YjRiM2IzNmYyYmY2YzdkNjY3Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWhpZ2hwYXNzLmh0
bWwKQEAgLTAsMCArMSw0OSBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxodG1sPgorPGhlYWQ+Cis8
bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
c3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYmlxdWFkLXRlc3RpbmcuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKworPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVz
dHMgQmlxdWFkIGhpZ2hwYXNzIGZpbHRlci4iKTsKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2Fp
dFVudGlsRG9uZSgpOworICAgIH0KKyAgICAKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRy
dWU7CisgICAgICAgIAorICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuCisgICAg
dmFyIGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5k
ZXJMZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsKKworICAgIC8vIER1bW15IGZpbHRlciB0byBn
ZXQgZmlsdGVyIHR5cGUgY29uc3RhbnQKKyAgICB2YXIgZiA9IGNvbnRleHQuY3JlYXRlQmlxdWFk
RmlsdGVyKCk7CisKKyAgICAvLyBUaGUgZmlsdGVycyB3ZSB3YW50IHRvIHRlc3QuCisgICAgdmFy
IGZpbHRlclBhcmFtZXRlcnMgPSBbe2N1dG9mZiA6IDAsICAgIHEgOiAxLCBnYWluIDogMSB9LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAxLCAgICBxIDogMSwgZ2FpbiA6
IDEgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogMC4yNSwgcSA6IDEs
IGdhaW4gOiAxIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBdOworCisgICAgY3JlYXRl
VGVzdEFuZFJ1bihjb250ZXh0LCBmLkhJR0hQQVNTLCBmaWx0ZXJQYXJhbWV0ZXJzKTsKK30KKwor
cnVuVGVzdCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxz
Y3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlx
dWFkLWhpZ2hzaGVsZi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQt
aGlnaHNoZWxmLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZTg2MzQzNTk3ZGIwMjVlZmEyODc1
OTNjMmZhOWE2MmQzZTEyOGEyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vYmlxdWFkLWhpZ2hzaGVsZi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMSBAQAorVGVzdHMg
QmlxdWFkIGhpZ2hzaGVsZiBmaWx0ZXIuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
UEFTUyBSZW5kZXJlZCBvdXRwdXQgZGlkIG5vdCBoYXZlIGluZmluaXRpZXMgb3IgTmFOcy4KK1BB
U1MgSGlnaHNoZWxmIGZpbHRlciByZXNwb25zZSBpcyBjb3JyZWN0LgorUEFTUyBUZXN0IHNpZ25h
bCB3YXMgY29ycmVjdGx5IGZpbHRlcmVkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Jp
cXVhZC1oaWdoc2hlbGYuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1oaWdoc2hl
bGYuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42MjQ5N2ZhMGMyY2I4N2I0OTIxYjM1M2E5MmJhYzg1YmEzN2Ji
NDcxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWhpZ2hz
aGVsZi5odG1sCkBAIC0wLDAgKzEsNDkgQEAKKzwhRE9DVFlQRSBodG1sPgorCis8aHRtbD4KKzxo
ZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5n
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2JpcXVhZC10ZXN0aW5n
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisKKzxkaXYgaWQ9ImRlc2NyaXB0aW9u
Ij48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRp
b24oIlRlc3RzIEJpcXVhZCBoaWdoc2hlbGYgZmlsdGVyLiIpOworCitmdW5jdGlvbiBydW5UZXN0
KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorICAgIAorICAgIHdpbmRvdy5qc1Rlc3RJc0Fz
eW5jID0gdHJ1ZTsKKyAgICAgICAgCisgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4
dC4KKyAgICB2YXIgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgc2FtcGxlUmF0
ZSAqIHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOworCisgICAgLy8gRHVtbXkgZmls
dGVyIHRvIGdldCBmaWx0ZXIgdHlwZSBjb25zdGFudAorICAgIHZhciBmID0gY29udGV4dC5jcmVh
dGVCaXF1YWRGaWx0ZXIoKTsKKworICAgIC8vIFRoZSBmaWx0ZXJzIHdlIHdhbnQgdG8gdGVzdC4K
KyAgICB2YXIgZmlsdGVyUGFyYW1ldGVycyA9IFt7Y3V0b2ZmIDogMCwgICAgcSA6IDEwLCBnYWlu
IDogMTAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogMSwgICAgcSA6
IDEwLCBnYWluIDogMTAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDog
MC4yNSwgcSA6IDEwLCBnYWluIDogMTAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF07
CisKKyAgICBjcmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsIGYuSElHSFNIRUxGLCBmaWx0ZXJQYXJh
bWV0ZXJzKTsKK30KKworcnVuVGVzdCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKwor
PC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vYmlxdWFkLWxvd3Bhc3MtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vYmlxdWFkLWxvd3Bhc3MtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2YmYwMTMwYzhh
ZWViZDE2MDUyODkyYzljNDA5MGE2YWM3M2Q0YmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9iaXF1YWQtbG93cGFzcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMSBA
QAorVGVzdHMgQmlxdWFkIGxvd3Bhc3MgZmlsdGVyLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKK1BBU1MgUmVuZGVyZWQgb3V0cHV0IGRpZCBub3QgaGF2ZSBpbmZpbml0aWVzIG9yIE5h
TnMuCitQQVNTIExvd3Bhc3MgZmlsdGVyIHJlc3BvbnNlIGlzIGNvcnJlY3QuCitQQVNTIFRlc3Qg
c2lnbmFsIHdhcyBjb3JyZWN0bHkgZmlsdGVyZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vYmlxdWFkLWxvd3Bhc3MuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1sb3dw
YXNzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMmMwYTMzYjljYjE1MDBjOGY5MDRmNzg1NGJmODU4NzlkYzNh
NzcwNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1sb3dw
YXNzLmh0bWwKQEAgLTAsMCArMSw0OCBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxodG1sPgorPGhl
YWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3Rpbmcu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYmlxdWFkLXRlc3Rpbmcu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKworPGRpdiBpZD0iZGVzY3JpcHRpb24i
PjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlv
bigiVGVzdHMgQmlxdWFkIGxvd3Bhc3MgZmlsdGVyLiIpOworCitmdW5jdGlvbiBydW5UZXN0KCkg
eworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7CisgICAgfQorICAgIAorICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5j
ID0gdHJ1ZTsKKyAgICAgICAgCisgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dC4K
KyAgICB2YXIgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgc2FtcGxlUmF0ZSAq
IHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOworCisgICAgLy8gRHVtbXkgZmlsdGVy
IHRvIGdldCBmaWx0ZXIgdHlwZSBjb25zdGFudAorICAgIHZhciBmID0gY29udGV4dC5jcmVhdGVC
aXF1YWRGaWx0ZXIoKTsKKworICAgIC8vIFRoZSBmaWx0ZXJzIHdlIHdhbnQgdG8gdGVzdC4KKyAg
ICB2YXIgZmlsdGVyUGFyYW1ldGVycyA9IFt7Y3V0b2ZmIDogMCwgICAgcSA6IDEsIGdhaW4gOiAx
IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6IDEsICAgIHEgOiAxLCBn
YWluIDogMSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAwLjI1LCBx
IDogMSwgZ2FpbiA6IDEgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF07CisgICAgY3Jl
YXRlVGVzdEFuZFJ1bihjb250ZXh0LCBmLkxPV1BBU1MsIGZpbHRlclBhcmFtZXRlcnMpOworfQor
CitydW5UZXN0KCk7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKwor
PHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9i
aXF1YWQtbG93c2hlbGYtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFk
LWxvd3NoZWxmLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45N2Y1MDAyZmZlMTc2OTMyNTY1OWMz
YjZkN2M1ZjRmZWE4YjVjZmZjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vYmlxdWFkLWxvd3NoZWxmLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDExIEBACitUZXN0cyBC
aXF1YWQgbG93c2hlbGYgZmlsdGVyLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BB
U1MgUmVuZGVyZWQgb3V0cHV0IGRpZCBub3QgaGF2ZSBpbmZpbml0aWVzIG9yIE5hTnMuCitQQVNT
IExvd3NoZWxmIGZpbHRlciByZXNwb25zZSBpcyBjb3JyZWN0LgorUEFTUyBUZXN0IHNpZ25hbCB3
YXMgY29ycmVjdGx5IGZpbHRlcmVkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVh
ZC1sb3dzaGVsZi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWxvd3NoZWxmLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOGM3NWY5YzNmNjk0MzZiZjNkZTMzZmYyNDBkMGU5MzliZjE3ZTc1Mgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1sb3dzaGVsZi5o
dG1sCkBAIC0wLDAgKzEsNDkgQEAKKzwhRE9DVFlQRSBodG1sPgorCis8aHRtbD4KKzxoZWFkPgor
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2JpcXVhZC10ZXN0aW5nLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisKKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rp
dj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRl
c3RzIEJpcXVhZCBsb3dzaGVsZiBmaWx0ZXIuIik7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7Cisg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndh
aXRVbnRpbERvbmUoKTsKKyAgICB9CisgICAgCisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0
cnVlOworICAgICAgICAKKyAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBjb250ZXh0LgorICAg
IHZhciBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1wbGVSYXRlICogcmVu
ZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisKKyAgICAvLyBEdW1teSBmaWx0ZXIgdG8g
Z2V0IGZpbHRlciB0eXBlIGNvbnN0YW50CisgICAgdmFyIGYgPSBjb250ZXh0LmNyZWF0ZUJpcXVh
ZEZpbHRlcigpOworCisgICAgLy8gVGhlIGZpbHRlcnMgd2Ugd2FudCB0byB0ZXN0LgorICAgIHZh
ciBmaWx0ZXJQYXJhbWV0ZXJzID0gW3tjdXRvZmYgOiAwLCAgICBxIDogMTAsIGdhaW4gOiAxMCB9
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAxLCAgICBxIDogMTAsIGdh
aW4gOiAxMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAwLjI1LCBx
IDogMTAsIGdhaW4gOiAxMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgXTsKKworICAg
IGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgZi5MT1dTSEVMRiwgZmlsdGVyUGFyYW1ldGVycyk7
Cit9CisKK3J1blRlc3QoKTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0
PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1
ZGlvL2JpcXVhZC1ub3RjaC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1
YWQtbm90Y2gtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmNDYzNWE4ZGMzYTczMjExZjhkYTYx
ZDcyOGNhODFmZDAwMWE3MjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRp
by9iaXF1YWQtbm90Y2gtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1Rlc3RzIEJpcXVh
ZCBub3RjaCBmaWx0ZXIuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBSZW5k
ZXJlZCBvdXRwdXQgZGlkIG5vdCBoYXZlIGluZmluaXRpZXMgb3IgTmFOcy4KK1BBU1MgTm90Y2gg
ZmlsdGVyIHJlc3BvbnNlIGlzIGNvcnJlY3QuCitQQVNTIFRlc3Qgc2lnbmFsIHdhcyBjb3JyZWN0
bHkgZmlsdGVyZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLW5vdGNoLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtbm90Y2guaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
MDFhMDhkMDcwMWVhZjE3MTg4NWI2ODkxOWFhMTMwZTRhN2JmMTY0Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLW5vdGNoLmh0bWwKQEAgLTAsMCArMSw0OSBA
QAorPCFET0NUWVBFIGh0bWw+CisKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvYmlxdWFkLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
Cis8Ym9keT4KKworPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgQmlxdWFkIG5vdGNoIGZp
bHRlci4iKTsKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0K
KyAgICAKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisgICAgICAgIAorICAgIC8v
IENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuCisgICAgdmFyIGNvbnRleHQgPSBuZXcgd2Vi
a2l0QXVkaW9Db250ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJMZW5ndGhTZWNvbmRzLCBzYW1w
bGVSYXRlKTsKKworICAgIC8vIER1bW15IGZpbHRlciB0byBnZXQgZmlsdGVyIHR5cGUgY29uc3Rh
bnQKKyAgICB2YXIgZiA9IGNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVyKCk7CisKKyAgICB2YXIg
ZmlsdGVyUGFyYW1ldGVycyA9IFt7Y3V0b2ZmIDogMCwgICAgcSA6IDEwLCBnYWluIDogMSB9LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAxLCAgICBxIDogMTAsIGdhaW4g
OiAxIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6IC41LCAgIHEgOiAg
MCwgZ2FpbiA6IDEgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogMC4y
NSwgcSA6IDEwLCBnYWluIDogMSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgXTsKKwor
ICAgIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgZi5OT1RDSCwgZmlsdGVyUGFyYW1ldGVycyk7
Cit9CisKK3J1blRlc3QoKTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0
PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1
ZGlvL2JpcXVhZC1wZWFraW5nLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2Jp
cXVhZC1wZWFraW5nLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZTgzNjI3MWZkOGI5ZjEwNjZh
MGY1YWJmMGVkOTM5Mzc0NzgyZDY1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vi
YXVkaW8vYmlxdWFkLXBlYWtpbmctZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1Rlc3Rz
IEJpcXVhZCBwZWFraW5nIGZpbHRlci4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQ
QVNTIFJlbmRlcmVkIG91dHB1dCBkaWQgbm90IGhhdmUgaW5maW5pdGllcyBvciBOYU5zLgorUEFT
UyBQZWFraW5nIGZpbHRlciByZXNwb25zZSBpcyBjb3JyZWN0LgorUEFTUyBUZXN0IHNpZ25hbCB3
YXMgY29ycmVjdGx5IGZpbHRlcmVkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVh
ZC1wZWFraW5nLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtcGVha2luZy5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjZhMDQ0ODM0YWVkY2ZmNTdiZDMyMjEwNmY1YTFiOTVhN2RkNDU3ZTQKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtcGVha2luZy5odG1s
CkBAIC0wLDAgKzEsNTAgQEAKKzwhRE9DVFlQRSBodG1sPgorCis8aHRtbD4KKzxoZWFkPgorPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0
eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2JpcXVhZC10ZXN0aW5nLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisKKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4K
KzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3Rz
IEJpcXVhZCBwZWFraW5nIGZpbHRlci4iKTsKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOworICAgIH0KKyAgICAKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7
CisgICAgICAgIAorICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuCisgICAgdmFy
IGNvbnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJM
ZW5ndGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsKKworICAgIC8vIER1bW15IGZpbHRlciB0byBnZXQg
ZmlsdGVyIHR5cGUgY29uc3RhbnQKKyAgICB2YXIgZiA9IGNvbnRleHQuY3JlYXRlQmlxdWFkRmls
dGVyKCk7CisKKyAgICAvLyBUaGUgZmlsdGVycyB3ZSB3YW50IHRvIHRlc3QuCisgICAgdmFyIGZp
bHRlclBhcmFtZXRlcnMgPSBbe2N1dG9mZiA6IDAsICAgIHEgOiAxMCwgZ2FpbiA6IDEwIH0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6IDEsICAgIHEgOiAxMCwgZ2FpbiA6
IDEwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6IC41LCAgIHEgOiAg
MCwgZ2FpbiA6IDEwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6IDAu
MjUsIHEgOiAxMCwgZ2FpbiA6IDEwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBdOwor
CisgICAgY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCBmLlBFQUtJTkcsIGZpbHRlclBhcmFtZXRl
cnMpOworfQorCitydW5UZXN0KCk7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3Nj
cmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJhdWRpby9yZXNvdXJjZXMvYmlxdWFkLXRlc3RpbmcuanMgYi9MYXlvdXRUZXN0cy93ZWJhdWRp
by9yZXNvdXJjZXMvYmlxdWFkLXRlc3RpbmcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTg3MjFiM2Q2YmFlZGRm
MWFjNGIwODhiOTNkNWMzMGNlMWMxNzM0YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3dlYmF1ZGlvL3Jlc291cmNlcy9iaXF1YWQtdGVzdGluZy5qcwpAQCAtMCwwICsxLDU0OSBAQAor
Ly8gR2xvYmFscywgdG8gbWFrZSB0ZXN0aW5nIGFuZCBkZWJ1Z2dpbmcgZWFzaWVyLgordmFyIGNv
bnRleHQ7Cit2YXIgZmlsdGVyOwordmFyIHNpZ25hbDsKK3ZhciByZW5kZXJlZEJ1ZmZlcjsKK3Zh
ciByZW5kZXJlZERhdGE7CisKK3ZhciBzYW1wbGVSYXRlID0gNDQxMDAuMDsKK3ZhciBwdWxzZUxl
bmd0aEZyYW1lcyA9IC4xICogc2FtcGxlUmF0ZTsKKworLy8gTWF4aW11bSBhbGxvd2VkIGVycm9y
IGZvciB0aGUgdGVzdCB0byBzdWNjZWVkLiAgRXhwZXJpbWVudGFsbHkgZGV0ZXJtaW5lZC4gCit2
YXIgbWF4QWxsb3dlZEVycm9yID0gNS45ZS04OworCisvLyBUaGlzIG11c3QgYmUgbGFyZ2UgZW5v
dWdoIHNvIHRoYXQgdGhlIGZpbHRlcmVkIHJlc3VsdCBpcworLy8gZXNzZW50aWFsbHkgemVyby4g
IFNlZSBjb21tZW50cyBmb3IgY3JlYXRlVGVzdEFuZFJ1bi4KK3ZhciB0aW1lU3RlcCA9IC4xOwor
CisvLyBNYXhpbXVtIG51bWJlciBvZiBmaWx0ZXJzIHdlIGNhbiBwcm9jZXNzIChtb3N0bHkgZm9y
IHNldHRpbmcgdGhlCisvLyByZW5kZXIgbGVuZ3RoIGNvcnJlY3RseS4pCit2YXIgbWF4RmlsdGVy
cyA9IDU7CisKKy8vIEhvdyBsb25nIHRvIHJlbmRlci4gIE11c3QgYmUgbG9uZyBlbm91Z2ggZm9y
IGFsbCBvZiB0aGUgZmlsdGVycyB3ZQorLy8gd2FudCB0byB0ZXN0LgordmFyIHJlbmRlckxlbmd0
aFNlY29uZHMgPSB0aW1lU3RlcCAqIChtYXhGaWx0ZXJzICsgMSkgOworCit2YXIgcmVuZGVyTGVu
Z3RoU2FtcGxlcyA9IE1hdGgucm91bmQocmVuZGVyTGVuZ3RoU2Vjb25kcyAqIHNhbXBsZVJhdGUp
OworCisvLyBOdW1iZXIgb2YgZmlsdGVycyB0aGF0IHdpbGwgYmUgcHJvY2Vzc2VkLgordmFyIG5G
aWx0ZXJzOworCisvLyBBIGJpcXVhZCBmaWx0ZXIgaGFzIGEgei10cmFuc2Zvcm0gb2YKKy8vIEgo
eikgPSAoYjAgKyBiMSAvIHogKyBiMiAvIHpeMikgLyAoMSArIGExIC8geiArIGEyIC8gel4yKQor
Ly8KKy8vIFRoZSBmb3JtdWxhcyBmb3IgdGhlIHZhcmlvdXMgZmlsdGVycyB3ZXJlIHRha2VuIGZy
b20KKy8vIGh0dHA6Ly93d3cubXVzaWNkc3Aub3JnL2ZpbGVzL0F1ZGlvLUVRLUNvb2tib29rLnR4
dC4KKworCisvLyBMb3dwYXNzIGZpbHRlci4KK2Z1bmN0aW9uIGNyZWF0ZUxvd3Bhc3NGaWx0ZXIo
ZnJlcSwgcSwgZ2FpbikgeworICAgIHZhciBiMDsKKyAgICB2YXIgYjE7CisgICAgdmFyIGIyOwor
ICAgIHZhciBhMTsKKyAgICB2YXIgYTI7CisKKyAgICBpZiAoZnJlcSA9PSAxKSB7CisgICAgICAg
IC8vIFRoZSBmb3JtdWxhIGJlbG93IHdvcmtzLCBleGNlcHQgZm9yIHJvdW5kb2ZmLiAgV2hlbiBm
cmVxID0gMSwKKyAgICAgICAgLy8gdGhlIGZpbHRlciBpcyBqdXN0IGEgd2lyZSwgc28gaGFyZHdp
cmUgdGhlIGNvZWZmaWNpZW50cy4KKyAgICAgICAgYjAgPSAxOworICAgICAgICBiMSA9IDA7Cisg
ICAgICAgIGIyID0gMDsKKyAgICAgICAgYTEgPSAwOworICAgICAgICBhMiA9IDA7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgdmFyIGcgPSBNYXRoLnBvdygxMCwgcSAvIDIwKTsKKyAgICAgICAgdmFy
IGQgPSBNYXRoLnNxcnQoKDQgLSBNYXRoLnNxcnQoMTYgLSAxNiAvIChnICogZykpKSAvIDIpOwor
ICAgICAgICB2YXIgdGhldGEgPSBNYXRoLlBJICogZnJlcTsKKyAgICAgICAgdmFyIHNuID0gZCAq
IE1hdGguc2luKHRoZXRhKSAvIDI7CisgICAgICAgIHZhciBiZXRhID0gMC41ICogKDEgLSBzbikg
LyAoMSArIHNuKTsKKyAgICAgICAgdmFyIGdhbW1hID0gKDAuNSArIGJldGEpICogTWF0aC5jb3Mo
dGhldGEpOworICAgICAgICB2YXIgYWxwaGEgPSAwLjI1ICogKDAuNSArIGJldGEgLSBnYW1tYSk7
CisKKyAgICAgICAgYjAgPSAyICogYWxwaGE7CisgICAgICAgIGIxID0gNCAqIGFscGhhOworICAg
ICAgICBiMiA9IDIgKiBhbHBoYTsKKyAgICAgICAgYTEgPSAyICogKC1nYW1tYSk7CisgICAgICAg
IGEyID0gMiAqIGJldGE7CisgICAgfQorCisgICAgcmV0dXJuIHtiMCA6IGIwLCBiMSA6IGIxLCBi
MiA6IGIyLCBhMSA6IGExLCBhMiA6IGEyfTsKK30KKworZnVuY3Rpb24gY3JlYXRlSGlnaHBhc3NG
aWx0ZXIoZnJlcSwgcSwgZ2FpbikgeworICAgIHZhciBiMDsKKyAgICB2YXIgYjE7CisgICAgdmFy
IGIyOworICAgIHZhciBhMTsKKyAgICB2YXIgYTI7CisKKyAgICBpZiAoZnJlcSA9PSAxKSB7Cisg
ICAgICAgIC8vIFRoZSBmaWx0ZXIgaXMgMAorICAgICAgICBiMCA9IDA7CisgICAgICAgIGIxID0g
MDsKKyAgICAgICAgYjIgPSAwOworICAgICAgICBhMSA9IDA7CisgICAgICAgIGEyID0gMDsKKyAg
ICB9IGVsc2UgaWYgKGZyZXEgPT0gMCkgeworICAgICAgICAvLyBUaGUgZmlsdGVyIGlzIDEuICBD
b21wdXRhdGlvbiBvZiBjb2VmZmljaWVudHMgYmVsb3cgaXMgb2ssIGJ1dAorICAgICAgICAvLyB0
aGVyZSdzIGEgcG9sZSBhdCAxIGFuZCBhIHplcm8gYXQgMSwgc28gcm91bmQtb2ZmIGNvdWxkIG1h
a2UKKyAgICAgICAgLy8gdGhlIGZpbHRlciB1bnN0YWJsZS4KKyAgICAgICAgYjAgPSAxOworICAg
ICAgICBiMSA9IDA7CisgICAgICAgIGIyID0gMDsKKyAgICAgICAgYTEgPSAwOworICAgICAgICBh
MiA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFyIGcgPSBNYXRoLnBvdygxMCwgcSAvIDIw
KTsKKyAgICAgICAgdmFyIGQgPSBNYXRoLnNxcnQoKDQgLSBNYXRoLnNxcnQoMTYgLSAxNiAvIChn
ICogZykpKSAvIDIpOworICAgICAgICB2YXIgdGhldGEgPSBNYXRoLlBJICogZnJlcTsKKyAgICAg
ICAgdmFyIHNuID0gZCAqIE1hdGguc2luKHRoZXRhKSAvIDI7CisgICAgICAgIHZhciBiZXRhID0g
MC41ICogKDEgLSBzbikgLyAoMSArIHNuKTsKKyAgICAgICAgdmFyIGdhbW1hID0gKDAuNSArIGJl
dGEpICogTWF0aC5jb3ModGhldGEpOworICAgICAgICB2YXIgYWxwaGEgPSAwLjI1ICogKDAuNSAr
IGJldGEgKyBnYW1tYSk7CisKKyAgICAgICAgYjAgPSAyICogYWxwaGE7CisgICAgICAgIGIxID0g
LTQgKiBhbHBoYTsKKyAgICAgICAgYjIgPSAyICogYWxwaGE7CisgICAgICAgIGExID0gMiAqICgt
Z2FtbWEpOworICAgICAgICBhMiA9IDIgKiBiZXRhOworICAgIH0KKworICAgIHJldHVybiB7YjAg
OiBiMCwgYjEgOiBiMSwgYjIgOiBiMiwgYTEgOiBhMSwgYTIgOiBhMn07Cit9CisKK2Z1bmN0aW9u
IG5vcm1hbGl6ZUZpbHRlckNvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKSB7Cisg
ICAgdmFyIHNjYWxlID0gMSAvIGEwOworCisgICAgcmV0dXJuIHtiMCA6IGIwICogc2NhbGUsCisg
ICAgICAgICAgICBiMSA6IGIxICogc2NhbGUsCisgICAgICAgICAgICBiMiA6IGIyICogc2NhbGUs
CisgICAgICAgICAgICBhMSA6IGExICogc2NhbGUsCisgICAgICAgICAgICBhMiA6IGEyICogc2Nh
bGV9OworfQorCitmdW5jdGlvbiBjcmVhdGVCYW5kcGFzc0ZpbHRlcihmcmVxLCBxLCBnYWluKSB7
CisgICAgdmFyIGIwOworICAgIHZhciBiMTsKKyAgICB2YXIgYjI7CisgICAgdmFyIGEwOworICAg
IHZhciBhMTsKKyAgICB2YXIgYTI7CisgICAgdmFyIGNvZWY7CisKKyAgICBpZiAoZnJlcSA+IDAg
JiYgZnJlcSA8IDEpIHsKKyAgICAgICAgdmFyIHcwID0gTWF0aC5QSSAqIGZyZXE7CisgICAgICAg
IGlmIChxID4gMCkgeworICAgICAgICAgICAgdmFyIGFscGhhID0gTWF0aC5zaW4odzApIC8gKDIg
KiBxKTsKKyAgICAgICAgICAgIHZhciBrID0gTWF0aC5jb3ModzApOworCisgICAgICAgICAgICBi
MCA9IGFscGhhOworICAgICAgICAgICAgYjEgPSAwOworICAgICAgICAgICAgYjIgPSAtYWxwaGE7
CisgICAgICAgICAgICBhMCA9IDEgKyBhbHBoYTsKKyAgICAgICAgICAgIGExID0gLTIgKiBrOwor
ICAgICAgICAgICAgYTIgPSAxIC0gYWxwaGE7CisKKyAgICAgICAgICAgIGNvZWYgPSBub3JtYWxp
emVGaWx0ZXJDb2VmZmljaWVudHMoYjAsIGIxLCBiMiwgYTAsIGExLCBhMik7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAvLyBxID0gMCwgYW5kIGZyZXF1ZW5jeSBpcyBub3QgMCBvciAx
LiAgVGhlIGFib3ZlIGZvcm11bGEgaGFzIGEKKyAgICAgICAgICAgIC8vIGRpdmlkZSBieSB6ZXJv
IHByb2JsZW0uICBUaGUgbGltaXQgb2YgdGhlIHotdHJhbnNmb3JtIGFzIHEKKyAgICAgICAgICAg
IC8vIGFwcHJvYWNoZXMgMCBpcyAxLCBzbyBzZXQgdGhlIGZpbHRlciB0aGF0IHdheS4KKyAgICAg
ICAgICAgIGNvZWYgPSB7YjAgOiAxLCBiMSA6IDAsIGIyIDogMCwgYTEgOiAwLCBhMiA6IDB9Owor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2hlbiBmcmVxID0gMCBvciAxLCB0
aGUgei10cmFuc2Zvcm0gaXMgaWRlbnRpY2FsbHkgMCwKKyAgICAgICAgLy8gaW5kZXBlbmRlbnQg
b2YgcS4KKyAgICAgICAgY29lZiA9IHtiMCA6IDAsIGIxIDogMCwgYjIgOiAwLCBhMSA6IDAsIGEy
IDogMH0KKyAgICB9CisgIAorICAgIHJldHVybiBjb2VmOworfQorCitmdW5jdGlvbiBjcmVhdGVM
b3dTaGVsZkZpbHRlcihmcmVxLCBxLCBnYWluKSB7CisgICAgLy8gcSBub3QgdXNlZAorICAgIHZh
ciBiMDsKKyAgICB2YXIgYjE7CisgICAgdmFyIGIyOworICAgIHZhciBhMDsKKyAgICB2YXIgYTE7
CisgICAgdmFyIGEyOworICAgIHZhciBjb2VmOworICAKKyAgICB2YXIgUyA9IDE7CisgICAgdmFy
IEEgPSBNYXRoLnBvdygxMCwgZ2FpbiAvIDQwKTsKKworICAgIGlmIChmcmVxID09IDEpIHsKKyAg
ICAgICAgLy8gVGhlIGZpbHRlciBpcyBqdXN0IGEgY29uc3RhbnQgZ2FpbgorICAgICAgICBjb2Vm
ID0ge2IwIDogQSAqIEEsIGIxIDogMCwgYjIgOiAwLCBhMSA6IDAsIGEyIDogMH07ICAKKyAgICB9
IGVsc2UgaWYgKGZyZXEgPT0gMCkgeworICAgICAgICAvLyBUaGUgZmlsdGVyIGlzIDEKKyAgICAg
ICAgY29lZiA9IHtiMCA6IDEsIGIxIDogMCwgYjIgOiAwLCBhMSA6IDAsIGEyIDogMH07ICAKKyAg
ICB9IGVsc2UgeworICAgICAgICB2YXIgdzAgPSBNYXRoLlBJICogZnJlcTsKKyAgICAgICAgdmFy
IGFscGhhID0gMSAvIDIgKiBNYXRoLnNpbih3MCkgKiBNYXRoLnNxcnQoKEEgKyAxIC8gQSkgKiAo
MSAvIFMgLSAxKSsyKTsKKyAgICAgICAgdmFyIGsgPSBNYXRoLmNvcyh3MCk7CisgICAgICAgIHZh
ciBrMiA9IDIgKiBNYXRoLnNxcnQoQSkgKiBhbHBoYTsKKyAgICAgICAgdmFyIEFwMSA9IEEgKyAx
OworICAgICAgICB2YXIgQW0xID0gQSAtIDE7CisKKyAgICAgICAgYjAgPSBBICogKEFwMSAtIEFt
MSAqIGsgKyBrMik7CisgICAgICAgIGIxID0gMiAqIEEgKiAoQW0xIC0gQXAxICogayk7CisgICAg
ICAgIGIyID0gQSAqIChBcDEgLSBBbTEgKiBrIC0gazIpOworICAgICAgICBhMCA9IEFwMSArIEFt
MSAqIGsgKyBrMjsKKyAgICAgICAgYTEgPSAtMiAqIChBbTEgKyBBcDEgKiBrKTsKKyAgICAgICAg
YTIgPSBBcDEgKyBBbTEgKiBrIC0gazI7CisgICAgICAgIGNvZWYgPSBub3JtYWxpemVGaWx0ZXJD
b2VmZmljaWVudHMoYjAsIGIxLCBiMiwgYTAsIGExLCBhMik7CisgICAgfQorCisgICAgcmV0dXJu
IGNvZWY7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZUhpZ2hTaGVsZkZpbHRlcihmcmVxLCBxLCBnYWlu
KSB7CisgICAgLy8gcSBub3QgdXNlZAorICAgIHZhciBiMDsKKyAgICB2YXIgYjE7CisgICAgdmFy
IGIyOworICAgIHZhciBhMDsKKyAgICB2YXIgYTE7CisgICAgdmFyIGEyOworICAgIHZhciBjb2Vm
OworCisgICAgdmFyIEEgPSBNYXRoLnBvdygxMCwgZ2FpbiAvIDQwKTsKKworICAgIGlmIChmcmVx
ID09IDEpIHsKKyAgICAgICAgLy8gV2hlbiBmcmVxID0gMSwgdGhlIHotdHJhbnNmb3JtIGlzIDEK
KyAgICAgICAgY29lZiA9IHtiMCA6IDEsIGIxIDogMCwgYjIgOiAwLCBhMSA6IDAsIGEyIDogMH07
CisgICAgfSBlbHNlIGlmIChmcmVxID4gMCkgeworICAgICAgICB2YXIgdzAgPSBNYXRoLlBJICog
ZnJlcTsKKyAgICAgICAgdmFyIFMgPSAxOworICAgICAgICB2YXIgYWxwaGEgPSAwLjUgKiBNYXRo
LnNpbih3MCkgKiBNYXRoLnNxcnQoKEEgKyAxIC8gQSkgKiAoMSAvIFMgLSAxKSArIDIpOworICAg
ICAgICB2YXIgayA9IE1hdGguY29zKHcwKTsKKyAgICAgICAgdmFyIGsyID0gMiAqIE1hdGguc3Fy
dChBKSAqIGFscGhhOworICAgICAgICB2YXIgQXAxID0gQSArIDE7CisgICAgICAgIHZhciBBbTEg
PSBBIC0gMTsKKworICAgICAgICBiMCA9IEEgKiAoQXAxICsgQW0xICogayArIGsyKTsKKyAgICAg
ICAgYjEgPSAtMiAqIEEgKiAoQW0xICsgQXAxICogayk7CisgICAgICAgIGIyID0gQSAqIChBcDEg
KyBBbTEgKiBrIC0gazIpOworICAgICAgICBhMCA9IEFwMSAtIEFtMSAqIGsgKyBrMjsKKyAgICAg
ICAgYTEgPSAyICogKEFtMSAtIEFwMSprKTsKKyAgICAgICAgYTIgPSBBcDEgLSBBbTEgKiBrLWsy
OworCisgICAgICAgIGNvZWYgPSBub3JtYWxpemVGaWx0ZXJDb2VmZmljaWVudHMoYjAsIGIxLCBi
MiwgYTAsIGExLCBhMik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2hlbiBmcmVxID0gMCwg
dGhlIGZpbHRlciBpcyBqdXN0IGEgZ2FpbgorICAgICAgICBjb2VmID0ge2IwIDogQSAqIEEsIGIx
IDogMCwgYjIgOiAwLCBhMSA6IDAsIGEyIDogMH07CisgICAgfQorCisgICAgcmV0dXJuIGNvZWY7
Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVBlYWtpbmdGaWx0ZXIoZnJlcSwgcSwgZ2FpbikgeworICAg
IHZhciBiMDsKKyAgICB2YXIgYjE7CisgICAgdmFyIGIyOworICAgIHZhciBhMDsKKyAgICB2YXIg
YTE7CisgICAgdmFyIGEyOworICAgIHZhciBjb2VmOworCisgICAgdmFyIEEgPSBNYXRoLnBvdygx
MCwgZ2FpbiAvIDQwKTsKKworICAgIGlmIChmcmVxID4gMCAmJiBmcmVxIDwgMSkgeworICAgICAg
ICBpZiAocSA+IDApIHsKKyAgICAgICAgICAgIHZhciB3MCA9IE1hdGguUEkgKiBmcmVxOworICAg
ICAgICAgICAgdmFyIGFscGhhID0gTWF0aC5zaW4odzApIC8gKDIgKiBxKTsKKyAgICAgICAgICAg
IHZhciBrID0gTWF0aC5jb3ModzApOworCisgICAgICAgICAgICBiMCA9IDEgKyBhbHBoYSAqIEE7
CisgICAgICAgICAgICBiMSA9IC0yICogazsKKyAgICAgICAgICAgIGIyID0gMSAtIGFscGhhICog
QTsKKyAgICAgICAgICAgIGEwID0gMSArIGFscGhhIC8gQTsKKyAgICAgICAgICAgIGExID0gLTIg
KiBrOworICAgICAgICAgICAgYTIgPSAxIC0gYWxwaGEgLyBBOworICAKKyAgICAgICAgICAgIGNv
ZWYgPSBub3JtYWxpemVGaWx0ZXJDb2VmZmljaWVudHMoYjAsIGIxLCBiMiwgYTAsIGExLCBhMik7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBxID0gMCwgd2UgaGF2ZSBhIGRpdmlk
ZSBieSB6ZXJvIHByb2JsZW0gaW4gdGhlIGZvcm11bGFzCisgICAgICAgICAgICAvLyBhYm92ZS4g
IEJ1dCBpZiB3ZSBsb29rIGF0IHRoZSB6LXRyYW5zZm9ybSwgd2Ugc2VlIHRoYXQgdGhlCisgICAg
ICAgICAgICAvLyBsaW1pdCBhcyBxIGFwcHJvYWNoZXMgMCBpcyBBXjIuCisgICAgICAgICAgICBj
b2VmID0ge2IwIDogQSAqIEEsIGIxIDogMCwgYjIgOiAwLCBhMSA6IDAsIGEyIDogMH07CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBmcmVxID0gMCBvciAxLCB0aGUgei10cmFu
c2Zvcm0gaXMgMQorICAgICAgICBjb2VmID0ge2IwIDogMSwgYjEgOiAwLCBiMiA6IDAsIGExIDog
MCwgYTIgOiAwfTsKKyAgICB9CisKKyAgICByZXR1cm4gY29lZjsKK30KKworZnVuY3Rpb24gY3Jl
YXRlTm90Y2hGaWx0ZXIoZnJlcSwgcSwgZ2FpbikgeworICAgIHZhciBiMDsKKyAgICB2YXIgYjE7
CisgICAgdmFyIGIyOworICAgIHZhciBhMDsKKyAgICB2YXIgYTE7CisgICAgdmFyIGEyOworICAg
IHZhciBjb2VmOworCisgICAgaWYgKGZyZXEgPiAwICYmIGZyZXEgPCAxKSB7CisgICAgICAgIGlm
IChxID4gMCkgeworICAgICAgICAgICAgdmFyIHcwID0gTWF0aC5QSSAqIGZyZXE7CisgICAgICAg
ICAgICB2YXIgYWxwaGEgPSBNYXRoLnNpbih3MCkgLyAoMiAqIHEpOworICAgICAgICAgICAgdmFy
IGsgPSBNYXRoLmNvcyh3MCk7CisKKyAgICAgICAgICAgIGIwID0gMTsKKyAgICAgICAgICAgIGIx
ID0gLTIgKiBrOworICAgICAgICAgICAgYjIgPSAxOworICAgICAgICAgICAgYTAgPSAxICsgYWxw
aGE7CisgICAgICAgICAgICBhMSA9IC0yICogazsKKyAgICAgICAgICAgIGEyID0gMSAtIGFscGhh
OworICAgICAgICAgICAgY29lZiA9IG5vcm1hbGl6ZUZpbHRlckNvZWZmaWNpZW50cyhiMCwgYjEs
IGIyLCBhMCwgYTEsIGEyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdoZW4g
cSA9IDAsIHdlIGdldCBhIGRpdmlkZSBieSB6ZXJvIGFib3ZlLiAgVGhlIGxpbWl0IG9mIHRoZQor
ICAgICAgICAgICAgLy8gei10cmFuc2Zvcm0gYXMgcSBhcHByb2FjaGVzIDAgaXMgMCwgc28gc2V0
IHRoZSBjb2VmZmljaWVudHMKKyAgICAgICAgICAgIC8vIGFwcHJvcHJpYXRlbHkuCisgICAgICAg
ICAgICBjb2VmID0ge2IwIDogMCwgYjEgOiAwLCBiMiA6IDAsIGExIDogMCwgYTIgOiAwfTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdoZW4gZnJlcSA9IDAgb3IgMSwgdGhl
IHotdHJhbnNmb3JtIGlzIDEKKyAgICAgICAgY29lZiA9IHtiMCA6IDEsIGIxIDogMCwgYjIgOiAw
LCBhMSA6IDAsIGEyIDogMH07CisgICAgfQorCisgICAgcmV0dXJuIGNvZWY7Cit9CisKK2Z1bmN0
aW9uIGNyZWF0ZUFsbHBhc3NGaWx0ZXIoZnJlcSwgcSwgZ2FpbikgeworICAgIHZhciBiMDsKKyAg
ICB2YXIgYjE7CisgICAgdmFyIGIyOworICAgIHZhciBhMDsKKyAgICB2YXIgYTE7CisgICAgdmFy
IGEyOworICAgIHZhciBjb2VmOworCisgICAgaWYgKGZyZXEgPiAwICYmIGZyZXEgPCAxKSB7Cisg
ICAgICAgIGlmIChxID4gMCkgeworICAgICAgICAgICAgdmFyIHcwID0gTWF0aC5QSSAqIGZyZXE7
CisgICAgICAgICAgICB2YXIgYWxwaGEgPSBNYXRoLnNpbih3MCkgLyAoMiAqIHEpOworICAgICAg
ICAgICAgdmFyIGsgPSBNYXRoLmNvcyh3MCk7CisKKyAgICAgICAgICAgIGIwID0gMSAtIGFscGhh
OworICAgICAgICAgICAgYjEgPSAtMiAqIGs7CisgICAgICAgICAgICBiMiA9IDEgKyBhbHBoYTsK
KyAgICAgICAgICAgIGEwID0gMSArIGFscGhhOworICAgICAgICAgICAgYTEgPSAtMiAqIGs7Cisg
ICAgICAgICAgICBhMiA9IDEgLSBhbHBoYTsKKyAgICAgICAgICAgIGNvZWYgPSBub3JtYWxpemVG
aWx0ZXJDb2VmZmljaWVudHMoYjAsIGIxLCBiMiwgYTAsIGExLCBhMik7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBxID0gMAorICAgICAgICAgICAgY29lZiA9IHtiMCA6IC0xLCBi
MSA6IDAsIGIyIDogMCwgYTEgOiAwLCBhMiA6IDB9OworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgY29lZiA9IHtiMCA6IDEsIGIxIDogMCwgYjIgOiAwLCBhMSA6IDAsIGEyIDogMH07
CisgICAgfQorCisgICAgcmV0dXJuIGNvZWY7Cit9CisKKy8vIEFycmF5IG9mIGZ1bmN0aW9ucyB0
byBjb21wdXRlIHRoZSBmaWx0ZXIgY29lZmZpY2llbnRzLiAgVGhpcyBtdXN0CisvLyBiZSBhcnJh
bmVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBmaWx0ZXIgdHlwZXMgaW4gdGhlIGlkbCBmaWxl
LgordmFyIGZpbHRlckNyZWF0b3JGdW5jdGlvbiA9IFtjcmVhdGVMb3dwYXNzRmlsdGVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVIaWdocGFzc0ZpbHRlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQmFuZHBhc3NGaWx0ZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNyZWF0ZUxvd1NoZWxmRmlsdGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjcmVhdGVIaWdoU2hlbGZGaWx0ZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNyZWF0ZVBlYWtpbmdGaWx0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNyZWF0ZU5vdGNoRmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVB
bGxwYXNzRmlsdGVyXTsKKwordmFyIGZpbHRlclR5cGVOYW1lID0gWyJMb3dwYXNzIGZpbHRlciIs
CisgICAgICAgICAgICAgICAgICAgICAgIkhpZ2hwYXNzIGZpbHRlciIsCisgICAgICAgICAgICAg
ICAgICAgICAgIkJhbmRwYXNzIGZpbHRlciIsCisgICAgICAgICAgICAgICAgICAgICAgIkxvd3No
ZWxmIGZpbHRlciIsCisgICAgICAgICAgICAgICAgICAgICAgIkhpZ2hzaGVsZiBmaWx0ZXIiLAor
ICAgICAgICAgICAgICAgICAgICAgICJQZWFraW5nIGZpbHRlciIsCisgICAgICAgICAgICAgICAg
ICAgICAgIk5vdGNoIGZpbHRlciIsCisgICAgICAgICAgICAgICAgICAgICAgIkFsbHBhc3MgZmls
dGVyIl07CisKK2Z1bmN0aW9uIGNyZWF0ZUZpbHRlcihmaWx0ZXJUeXBlLCBmcmVxLCBxLCBnYWlu
KSB7CisgICAgcmV0dXJuIGZpbHRlckNyZWF0b3JGdW5jdGlvbltmaWx0ZXJUeXBlXShmcmVxLCBx
LCBnYWluKTsKK30KKworZnVuY3Rpb24gZmlsdGVyRGF0YShmaWx0ZXJDb2VmLCBzaWduYWwsIGxl
bikgeworICAgIHZhciB5ID0gbmV3IEFycmF5KGxlbik7CisgICAgdmFyIGIwID0gZmlsdGVyQ29l
Zi5iMDsKKyAgICB2YXIgYjEgPSBmaWx0ZXJDb2VmLmIxOworICAgIHZhciBiMiA9IGZpbHRlckNv
ZWYuYjI7CisgICAgdmFyIGExID0gZmlsdGVyQ29lZi5hMTsKKyAgICB2YXIgYTIgPSBmaWx0ZXJD
b2VmLiBhMjsKKworICAgIC8vIFByaW1lIHRoZSBwdW1wLiAoQXNzdW1lcyB0aGUgc2lnbmFsIGhh
cyBsZW5ndGggPj0gMiEpCisgICAgeVswXSA9IGIwICogc2lnbmFsWzBdOworICAgIHlbMV0gPSBi
MCAqIHNpZ25hbFsxXSArIGIxICogc2lnbmFsWzBdIC0gYTEgKiB5WzBdOworCisgICAgLy8gRmls
dGVyIGFsbCBvZiB0aGUgc2lnbmFsIHRoYXQgd2UgaGF2ZS4KKyAgICBmb3IgKHZhciBrID0gMjsg
ayA8IE1hdGgubWluKHNpZ25hbC5sZW5ndGgsIGxlbik7ICsraykgeworICAgICAgICB5W2tdID0g
YjAgKiBzaWduYWxba10gKyBiMSAqIHNpZ25hbFtrLTFdICsgYjIgKiBzaWduYWxbay0yXSAtIGEx
ICogeVtrLTFdIC0gYTIgKiB5W2stMl07CisgICAgfQorCisgICAgLy8gSWYgd2UgbmVlZCB0byBm
aWx0ZXIgbW9yZSwgYnV0IGRvbid0IGhhdmUgYW55IHNpZ25hbCBsZWZ0LAorICAgIC8vIGFzc3Vt
ZSB0aGUgc2lnbmFsIGlzIHplcm8uCisgICAgZm9yICh2YXIgayA9IHNpZ25hbC5sZW5ndGg7IGsg
PCBsZW47ICsraykgeworICAgICAgICB5W2tdID0gLSBhMSAqIHlbay0xXSAtIGEyICogeVtrLTJd
OworICAgIH0KKworICAgIHJldHVybiB5OworfQorCitmdW5jdGlvbiBjcmVhdGVJbXB1bHNlQnVm
ZmVyKGNvbnRleHQsIGxlbmd0aCkgeworICAgIHZhciBpbXB1bHNlID0gY29udGV4dC5jcmVhdGVC
dWZmZXIoMSwgbGVuZ3RoLCBjb250ZXh0LnNhbXBsZVJhdGUpOworICAgIHZhciBkYXRhID0gaW1w
dWxzZS5nZXRDaGFubmVsRGF0YSgwKTsKKyAgICBmb3IgKHZhciBrID0gMTsgayA8IGRhdGEubGVu
Z3RoOyArK2spIHsKKyAgICAgICAgZGF0YVtrXSA9IDA7CisgICAgfQorICAgIGRhdGFbMF0gPSAx
OworCisgICAgcmV0dXJuIGltcHVsc2U7Cit9CisKKworZnVuY3Rpb24gY3JlYXRlVGVzdEFuZFJ1
bihjb250ZXh0LCBmaWx0ZXJUeXBlLCBmaWx0ZXJQYXJhbWV0ZXJzKSB7CisgICAgLy8gVG8gdGVz
dCB0aGUgZmlsdGVycywgd2UgYXBwbHkgYSBzaWduYWwgKGFuIGltcHVsc2UpIHRvIGVhY2ggb2YK
KyAgICAvLyB0aGUgc3BlY2lmaWVkIGZpbHRlcnMsIHdpdGggZWFjaCBzaWduYWwgc3RhcnRpbmcg
YXQgYSBkaWZmZXJlbnQKKyAgICAvLyB0aW1lLiAgVGhlIG91dHB1dCBvZiB0aGUgZmlsdGVycyBp
cyBzdW1tZWQgdG9nZXRoZXIgYXQgdGhlCisgICAgLy8gb3V0cHV0LiAgVGh1cyBmb3IgZmlsdGVy
IGssIHRoZSBzaWduYWwgaW5wdXQgdG8gdGhlIGZpbHRlcgorICAgIC8vIHN0YXJ0cyBhdCB0aW1l
IGsgKiB0aW1lU3RlcC4gIEZvciB0aGlzIHRvIHdvcmsgd2VsbCwgdGltZVN0ZXAKKyAgICAvLyBt
dXN0IGJlIGxhcmdlIGVub3VnaCBmb3IgdGhlIG91dHB1dCBvZiBlYWNoIGZpbHRlciB0byBoYXZl
CisgICAgLy8gZGVjYXllZCB0byB6ZXJvIHdpdGggdGltZVN0ZXAgc2Vjb25kcy4gIFRoYXQgd2F5
IHRoZSBmaWx0ZXIKKyAgICAvLyBvdXRwdXRzIGRvbid0IGludGVyZmVyZSB3aXRoIGVhY2ggb3Ro
ZXIuCisgICAgCisgICAgbkZpbHRlcnMgPSBNYXRoLm1pbihmaWx0ZXJQYXJhbWV0ZXJzLmxlbmd0
aCwgbWF4RmlsdGVycyk7CisKKyAgICBzaWduYWwgPSBuZXcgQXJyYXkobkZpbHRlcnMpOworICAg
IGZpbHRlciA9IG5ldyBBcnJheShuRmlsdGVycyk7CisKKyAgICBpbXB1bHNlID0gY3JlYXRlSW1w
dWxzZUJ1ZmZlcihjb250ZXh0LCBwdWxzZUxlbmd0aEZyYW1lcyk7CisKKyAgICAvLyBDcmVhdGUg
YWxsIG9mIHRoZSBzaWduYWwgc291cmNlcyBhbmQgZmlsdGVycyB0aGF0IHdlIG5lZWQuCisgICAg
Zm9yICh2YXIgayA9IDA7IGsgPCBuRmlsdGVyczsgKytrKSB7CisgICAgICAgIHNpZ25hbFtrXSA9
IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7CisgICAgICAgIHNpZ25hbFtrXS5idWZmZXIg
PSBpbXB1bHNlOworCisgICAgICAgIGZpbHRlcltrXSA9IGNvbnRleHQuY3JlYXRlQmlxdWFkRmls
dGVyKCk7CisgICAgICAgIGZpbHRlcltrXS50eXBlID0gZmlsdGVyVHlwZTsKKyAgICAgICAgZmls
dGVyW2tdLmZyZXF1ZW5jeS52YWx1ZSA9IGNvbnRleHQuc2FtcGxlUmF0ZSAvIDIgKiBmaWx0ZXJQ
YXJhbWV0ZXJzW2tdLmN1dG9mZjsKKyAgICAgICAgZmlsdGVyW2tdLlEudmFsdWUgPSBmaWx0ZXJQ
YXJhbWV0ZXJzW2tdLnE7CisgICAgICAgIGZpbHRlcltrXS5nYWluLnZhbHVlID0gZmlsdGVyUGFy
YW1ldGVyc1trXS5nYWluOworCisgICAgICAgIHNpZ25hbFtrXS5jb25uZWN0KGZpbHRlcltrXSk7
CisgICAgICAgIGZpbHRlcltrXS5jb25uZWN0KGNvbnRleHQuZGVzdGluYXRpb24pOworCisgICAg
ICAgIHNpZ25hbFtrXS5ub3RlT24odGltZVN0ZXAgKiBrKTsKKyAgICB9CisKKyAgICBjb250ZXh0
Lm9uY29tcGxldGUgPSBjaGVja0ZpbHRlclJlc3BvbnNlKGZpbHRlclR5cGUsIGZpbHRlclBhcmFt
ZXRlcnMpOworICAgIGNvbnRleHQuc3RhcnRSZW5kZXJpbmcoKTsKK30KKworZnVuY3Rpb24gYWRk
U2lnbmFsKGRlc3QsIHNyYywgZGVzdE9mZnNldCkgeworICAgIC8vIEFkZCBzcmMgdG8gZGVzdCBh
dCB0aGUgZ2l2ZW4gZGVzdCBvZmZzZXQuCisgICAgZm9yICh2YXIgayA9IGRlc3RPZmZzZXQsIGog
PSAwOyBrIDwgZGVzdC5sZW5ndGgsIGogPCBzcmMubGVuZ3RoOyArK2ssICsraikgeworICAgICAg
ICBkZXN0W2tdICs9IHNyY1tqXTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGdlbmVyYXRlUmVmZXJl
bmNlKGZpbHRlclR5cGUsIGZpbHRlclBhcmFtZXRlcnMpIHsKKyAgICB2YXIgcmVzdWx0ID0gbmV3
IEFycmF5KHJlbmRlckxlbmd0aFNhbXBsZXMpOworICAgIHZhciBkYXRhID0gbmV3IEFycmF5KHJl
bmRlckxlbmd0aFNhbXBsZXMpOworICAgIC8vIEluaXRpYWxpemUgdGhlIHJlc3VsdCBhcnJheSBh
bmQgZGF0YS4KKyAgICBmb3IgKHZhciBrID0gMDsgayA8IHJlc3VsdC5sZW5ndGg7ICsraykgewor
ICAgICAgICByZXN1bHRba10gPSAwOworICAgICAgICBkYXRhW2tdID0gMDsKKyAgICB9CisgICAg
Ly8gTWFrZSBkYXRhIGFuIGltcHVsc2UuCisgICAgZGF0YVswXSA9IDE7CisgICAgCisgICAgZm9y
ICh2YXIgayA9IDA7IGsgPCBuRmlsdGVyczsgKytrKSB7CisgICAgICAgIC8vIEZpbHRlciBhbiBp
bXB1bHNlCisgICAgICAgIHZhciBmaWx0ZXJDb2VmID0gY3JlYXRlRmlsdGVyKGZpbHRlclR5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtZXRlcnNb
a10uY3V0b2ZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQ
YXJhbWV0ZXJzW2tdLnEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
bHRlclBhcmFtZXRlcnNba10uZ2Fpbik7CisgICAgICAgIHZhciB5ID0gZmlsdGVyRGF0YShmaWx0
ZXJDb2VmLCBkYXRhLCByZW5kZXJMZW5ndGhTYW1wbGVzKTsKKworICAgICAgICAvLyBBY2N1bXVs
YXRlIHRoaXMgZmlsdGVyZWQgZGF0YSBpbnRvIHRoZSBmaW5hbCBvdXRwdXQgYXQgdGhlIGRlc2ly
ZWQgb2Zmc2V0LgorICAgICAgICBhZGRTaWduYWwocmVzdWx0LCB5LCB0aW1lVG9TYW1wbGVGcmFt
ZSh0aW1lU3RlcCAqIGssIHNhbXBsZVJhdGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCisvLyBUcnVlIGlmIHRoZSBudW1iZXIgaXMgbm90IGFuIGluZmluaXR5IG9yIE5hTgor
ZnVuY3Rpb24gaXNWYWxpZE51bWJlcih4KSB7CisgICAgcmV0dXJuICFpc05hTih4KSAmJiAoeCAh
PSBJbmZpbml0eSkgJiYgKHggIT0gLUluZmluaXR5KTsKK30KKworZnVuY3Rpb24gY2hlY2tGaWx0
ZXJSZXNwb25zZShmaWx0ZXJUeXBlLCBmaWx0ZXJQYXJhbWV0ZXJzKSB7CisgICAgcmV0dXJuIGZ1
bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIHJlbmRlcmVkQnVmZmVyID0gZXZlbnQucmVuZGVyZWRC
dWZmZXI7CisgICAgICAgIHJlbmRlcmVkRGF0YSA9IHJlbmRlcmVkQnVmZmVyLmdldENoYW5uZWxE
YXRhKDApOworCisgICAgICAgIHJlZmVyZW5jZSA9IGdlbmVyYXRlUmVmZXJlbmNlKGZpbHRlclR5
cGUsIGZpbHRlclBhcmFtZXRlcnMpOworICAgICAgICAKKyAgICAgICAgdmFyIGxlbiA9IE1hdGgu
bWluKHJlbmRlcmVkRGF0YS5sZW5ndGgsIHJlZmVyZW5jZS5sZW5ndGgpOworCisgICAgICAgIHZh
ciBzdWNjZXNzID0gdHJ1ZTsKKworICAgICAgICAvLyBNYXhpbXVtIGVycm9yIGJldHdlZW4gcmVu
ZGVyZWQgZGF0YSBhbmQgZXhwZWN0ZWQgZGF0YQorICAgICAgICB2YXIgbWF4RXJyb3IgPSAwOwor
CisgICAgICAgIC8vIFNhbXBsZSBvZmZzZXQgd2hlcmUgdGhlIG1heGltdW0gZXJyb3Igb2NjdXJy
ZWQuCisgICAgICAgIHZhciBtYXhQb3NpdGlvbiA9IDA7CisKKyAgICAgICAgLy8gTnVtYmVyIG9m
IGluZmluaXRpZXMgb3IgTmFOcyB0aGF0IG9jY3VycmVkIGluIHRoZSByZW5kZXJlZCBkYXRhLgor
ICAgICAgICB2YXIgaW52YWxpZE51bWJlckNvdW50ID0gMDsKKworICAgICAgICBpZiAobkZpbHRl
cnMgIT0gZmlsdGVyUGFyYW1ldGVycy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQo
IlRlc3Qgd2FudGVkICIgKyBmaWx0ZXJQYXJhbWV0ZXJzLmxlbmd0aCArICIgZmlsdGVycyBidXQg
b25seSAiICsgbWF4RmlsdGVycyArICIgYWxsb3dlZC4iKTsKKyAgICAgICAgICAgIHN1Y2Nlc3Mg
PSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENvbXBhcmUgdGhlIHJlbmRlcmVkIHNp
Z25hbCB3aXRoIG91ciByZWZlcmVuY2UsIGtlZXBpbmcKKyAgICAgICAgLy8gdHJhY2sgb2YgdGhl
IG1heGltdW0gZGlmZmVyZW5jZSAoYW5kIHRoZSBvZmZzZXQgb2YgdGhlIG1heAorICAgICAgICAv
LyBkaWZmZXJlbmNlLikgIENoZWNrIGZvciBiYWQgbnVtYmVycyBpbiB0aGUgcmVuZGVyZWQgb3V0
cHV0CisgICAgICAgIC8vIHRvby4gIFRoZXJlIHNob3VsZG4ndCBiZSBhbnkuCisgICAgICAgIGZv
ciAodmFyIGsgPSAwOyBrIDwgbGVuOyArK2spIHsKKyAgICAgICAgICAgIHZhciBlcnIgPSBNYXRo
LmFicyhyZW5kZXJlZERhdGFba10gLSByZWZlcmVuY2Vba10pOworICAgICAgICAgICAgaWYgKGVy
ciA+IG1heEVycm9yKSB7CisgICAgICAgICAgICAgICAgbWF4RXJyb3IgPSBlcnI7CisgICAgICAg
ICAgICAgICAgbWF4UG9zaXRpb24gPSBrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KCFpc1ZhbGlkTnVtYmVyKHJlbmRlcmVkRGF0YVtrXSkpIHsKKyAgICAgICAgICAgICAgICArK2lu
dmFsaWROdW1iZXJDb3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlm
IChpbnZhbGlkTnVtYmVyQ291bnQgPiAwKSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJSZW5k
ZXJlZCBvdXRwdXQgaGFzICIgKyBpbnZhbGlkTnVtYmVyQ291bnQgKyAiIGluZmluaXRpZXMgb3Ig
TmFOcy4iKTsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIHRlc3RQYXNzZWQoIlJlbmRlcmVkIG91dHB1dCBkaWQgbm90IGhhdmUgaW5m
aW5pdGllcyBvciBOYU5zLiIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobWF4
RXJyb3IgPD0gbWF4QWxsb3dlZEVycm9yKSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKGZpbHRl
clR5cGVOYW1lW2ZpbHRlclR5cGVdICsgIiByZXNwb25zZSBpcyBjb3JyZWN0LiIpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgdGVzdEZhaWxlZChmaWx0ZXJUeXBlTmFtZVtmaWx0ZXJU
eXBlXSArICIgcmVzcG9uc2UgaXMgaW5jb3JyZWN0LiAgTWF4IGVyciA9ICIgKyBtYXhFcnJvciAr
ICIgYXQgIiArIG1heFBvc2l0aW9uICsgIi4gIFRocmVzaG9sZCA9ICIgKyBtYXhBbGxvd2VkRXJy
b3IpOworICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAgdGVzdFBhc3NlZCgiVGVzdCBzaWdu
YWwgd2FzIGNvcnJlY3RseSBmaWx0ZXJlZC4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHRlc3RGYWlsZWQoIlRlc3Qgc2lnbmFsIHdhcyBub3QgY29ycmVjdGx5IGZpbHRlcmVkLiIp
OworICAgICAgICB9CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125004</attachid>
            <date>2012-02-01 13:31:18 -0800</date>
            <delta_ts>2012-02-02 20:09:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71413-20120201133117.patch</filename>
            <type>text/plain</type>
            <size>52198</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTU5ODEzZTYzNjhlYmJk
YjVmMmIyZWY5NjNjYzVjYzI1NmNlNmYxZi4uMjdhYWMwNWFjOThkYWNhZTMwNTU4MGU4YzgwMTA3
YTU0ODJjZTY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDExLTExLTA3ICBSYXlt
b25kIFRveSAgPHJ0b3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBDaGVjayBwYXJhbWV0ZXJzIHRv
IGJpcXVhZCBmaWx0ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MTQxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRlc3RzIGFkZGVkIGZvciBlYWNoIGZpbHRlciB0eXBlIGFuZCBmb3IgdGhlIGxpbWl0
aW5nIGNhc2VzIGZvcgorICAgICAgICBlYWNoIGZpbHRlciB0eXBlLgorCisgICAgICAgICogcGxh
dGZvcm0vYXVkaW8vQmlxdWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6c2V0TG93
cGFzc1BhcmFtcyk6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWQ6OnNldEhpZ2hwYXNzUGFyYW1z
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6c2V0TG93U2hlbGZQYXJhbXMpOgorICAgICAg
ICAoV2ViQ29yZTo6QmlxdWFkOjpzZXRIaWdoU2hlbGZQYXJhbXMpOgorICAgICAgICAoV2ViQ29y
ZTo6QmlxdWFkOjpzZXRQZWFraW5nUGFyYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6
c2V0QWxscGFzc1BhcmFtcyk6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWQ6OnNldE5vdGNoUGFy
YW1zKToKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6c2V0QmFuZHBhc3NQYXJhbXMpOgorICAg
ICAgICBDaGVjayBmb3IgaW52YWxpZCBwYXJhbWV0ZXJzIGFuZCBjbGlwIHRoZW0gdG8gc29tZXRo
aW5nIHNlbnNpYmxlLgorICAgICAgICBBbHNvIGNoZWNrIGZvciB0aGUgbGltaXRpbmcgY2FzZXMg
YW5kIHRyeSB0byB1c2UgdGhlIGxpbWl0aW5nIGZvcm0KKyAgICAgICAgb2YgdGhlIHotdHJhbnNm
b3JtIGZvciB0aGUgYmlxdWFkLiAgU29tZSBpc3N1ZXMgY2Fubm90IGJlCisgICAgICAgIGNvbnNp
c3RlbnRseSBoYW5kbGVkIGJlY2F1c2UgdGhlIHotdHJhbnNmb3JtIGlzIG5vdCBjb250aW51b3Vz
IGFzCisgICAgICAgIHRoZSBwYXJhbWV0ZXJzIGFwcHJvYWNoIHRoZSBsaW1pdC4KKwogMjAxMi0w
MS0zMSAgUGFibG8gRmxvdXJldCAgPHBhYmxvZkBtb3Rvcm9sYS5jb20+CiAKICAgICAgICAgRml4
IGNvbXBpbGF0aW9uIGVycm9ycyBvbiBidWlsZC13ZWJraXQgLS1kZWJ1ZyAtLW5vLXdvcmtlcnMg
b24gbWFjLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFk
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHAKaW5kZXggOGRj
MWY0ZmI2OWU3MTEyYmJiMTYwZDk3ZDEzM2MwMGVjODkwYTYyOS4uY2ZlZTljZmQ5NTI3YmFmOThj
NDRiODgzNzQ1ZWYxYWQzNjQ5OTU1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vQmlxdWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9C
aXF1YWQuY3BwCkBAIC0xODgsNDMgKzE4OCw4NCBAQCB2b2lkIEJpcXVhZDo6cmVzZXQoKQogdm9p
ZCBCaXF1YWQ6OnNldExvd3Bhc3NQYXJhbXMoZG91YmxlIGN1dG9mZiwgZG91YmxlIHJlc29uYW5j
ZSkKIHsKICAgICByZXNvbmFuY2UgPSBzdGQ6Om1heCgwLjAsIHJlc29uYW5jZSk7IC8vIGNhbid0
IGdvIG5lZ2F0aXZlCi0KKyAgICAvLyBMaW1pdCBjdXRvZmYgdG8gMCB0byAxLgorICAgIGN1dG9m
ZiA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oY3V0b2ZmLCAxLjApKTsKKyAgICAKICAgICBkb3Vi
bGUgZyA9IHBvdygxMC4wLCAwLjA1ICogcmVzb25hbmNlKTsKICAgICBkb3VibGUgZCA9IHNxcnQo
KDQgLSBzcXJ0KDE2IC0gMTYgLyAoZyAqIGcpKSkgLyAyKTsKIAotICAgIC8vIENvbXB1dGUgYmlx
dWFkIGNvZWZmaWNpZW50cyBmb3IgbG9wYXNzIGZpbHRlcgotICAgIGRvdWJsZSB0aGV0YSA9IHBp
RG91YmxlICogY3V0b2ZmOwotICAgIGRvdWJsZSBzbiA9IDAuNSAqIGQgKiBzaW4odGhldGEpOwot
ICAgIGRvdWJsZSBiZXRhID0gMC41ICogKDEgLSBzbikgLyAoMSArIHNuKTsKLSAgICBkb3VibGUg
Z2FtbWEgPSAoMC41ICsgYmV0YSkgKiBjb3ModGhldGEpOwotICAgIGRvdWJsZSBhbHBoYSA9IDAu
MjUgKiAoMC41ICsgYmV0YSAtIGdhbW1hKTsKLQotICAgIG1fYjAgPSAyICogYWxwaGE7Ci0gICAg
bV9iMSA9IDIgKiAyICogYWxwaGE7Ci0gICAgbV9iMiA9IDIgKiBhbHBoYTsKLSAgICBtX2ExID0g
MiAqIC1nYW1tYTsKLSAgICBtX2EyID0gMiAqIGJldGE7CisgICAgaWYgKGN1dG9mZiA9PSAxKSB7
CisgICAgICAgIC8vIFdoZW4gY3V0b2ZmIGlzIDEsIHRoZSB6LXRyYW5zZm9ybSBpcyAxLgorICAg
ICAgICBtX2IwID0gMTsKKyAgICAgICAgbV9iMSA9IDA7CisgICAgICAgIG1fYjIgPSAwOworICAg
ICAgICBtX2ExID0gMDsKKyAgICAgICAgbV9hMiA9IDA7CisgICAgfSBlbHNlIGlmIChjdXRvZmYg
PiAwKSB7CisgICAgICAgIC8vIENvbXB1dGUgYmlxdWFkIGNvZWZmaWNpZW50cyBmb3IgbG93cGFz
cyBmaWx0ZXIKKyAgICAgICAgZG91YmxlIHRoZXRhID0gcGlEb3VibGUgKiBjdXRvZmY7CisgICAg
ICAgIGRvdWJsZSBzbiA9IDAuNSAqIGQgKiBzaW4odGhldGEpOworICAgICAgICBkb3VibGUgYmV0
YSA9IDAuNSAqICgxIC0gc24pIC8gKDEgKyBzbik7CisgICAgICAgIGRvdWJsZSBnYW1tYSA9ICgw
LjUgKyBiZXRhKSAqIGNvcyh0aGV0YSk7CisgICAgICAgIGRvdWJsZSBhbHBoYSA9IDAuMjUgKiAo
MC41ICsgYmV0YSAtIGdhbW1hKTsKKworICAgICAgICBtX2IwID0gMiAqIGFscGhhOworICAgICAg
ICBtX2IxID0gMiAqIDIgKiBhbHBoYTsKKyAgICAgICAgbV9iMiA9IDIgKiBhbHBoYTsKKyAgICAg
ICAgbV9hMSA9IDIgKiAtZ2FtbWE7CisgICAgICAgIG1fYTIgPSAyICogYmV0YTsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBXaGVuIGN1dG9mZiBpcyB6ZXJvLCBub3RoaW5nIGdldHMgdGhyb3Vn
aCB0aGUgZmlsdGVyLCBzbyBzZXQKKyAgICAgICAgLy8gY29lZmZpY2llbnRzIHVwIGNvcnJlY3Rs
eS4KKyAgICAgICAgbV9iMCA9IDA7CisgICAgICAgIG1fYjEgPSAwOworICAgICAgICBtX2IyID0g
MDsKKyAgICAgICAgbV9hMSA9IDA7CisgICAgICAgIG1fYTIgPSAwOworICAgIH0KIH0KIAogdm9p
ZCBCaXF1YWQ6OnNldEhpZ2hwYXNzUGFyYW1zKGRvdWJsZSBjdXRvZmYsIGRvdWJsZSByZXNvbmFu
Y2UpCiB7CiAgICAgcmVzb25hbmNlID0gc3RkOjptYXgoMC4wLCByZXNvbmFuY2UpOyAvLyBjYW4n
dCBnbyBuZWdhdGl2ZQogCisgICAgLy8gTGltaXQgY3V0b2ZmIHRvIDAgdG8gMS4KKyAgICBjdXRv
ZmYgPSBzdGQ6Om1heCgwLjAsIHN0ZDo6bWluKGN1dG9mZiwgMS4wKSk7CisKICAgICBkb3VibGUg
ZyA9IHBvdygxMC4wLCAwLjA1ICogcmVzb25hbmNlKTsKICAgICBkb3VibGUgZCA9IHNxcnQoKDQg
LSBzcXJ0KDE2IC0gMTYgLyAoZyAqIGcpKSkgLyAyKTsKIAotICAgIC8vIENvbXB1dGUgYmlxdWFk
IGNvZWZmaWNpZW50cyBmb3IgaGlnaHBhc3MgZmlsdGVyCi0gICAgZG91YmxlIHRoZXRhID0gcGlE
b3VibGUgKiBjdXRvZmY7Ci0gICAgZG91YmxlIHNuID0gMC41ICogZCAqIHNpbih0aGV0YSk7Ci0g
ICAgZG91YmxlIGJldGEgPSAwLjUgKiAoMSAtIHNuKSAvICgxICsgc24pOwotICAgIGRvdWJsZSBn
YW1tYSA9ICgwLjUgKyBiZXRhKSAqIGNvcyh0aGV0YSk7Ci0gICAgZG91YmxlIGFscGhhID0gMC4y
NSAqICgwLjUgKyBiZXRhICsgZ2FtbWEpOwotCi0gICAgbV9iMCA9IDIgKiBhbHBoYTsKLSAgICBt
X2IxID0gMiAqIC0yICogYWxwaGE7Ci0gICAgbV9iMiA9IDIgKiBhbHBoYTsKLSAgICBtX2ExID0g
MiAqIC1nYW1tYTsKLSAgICBtX2EyID0gMiAqIGJldGE7CisgICAgaWYgKGN1dG9mZiA9PSAxKSB7
CisgICAgICAgIC8vIFRoZSB6LXRyYW5zZm9ybSBpcyAwLgorICAgICAgICBtX2IwID0gMDsKKyAg
ICAgICAgbV9iMSA9IDA7CisgICAgICAgIG1fYjIgPSAwOworICAgICAgICBtX2ExID0gMDsKKyAg
ICAgICAgbV9hMiA9IDA7CisgICAgfSBlbHNlIGlmIChjdXRvZmYgPiAwKSB7CisgICAgICAgIC8v
IENvbXB1dGUgYmlxdWFkIGNvZWZmaWNpZW50cyBmb3IgaGlnaHBhc3MgZmlsdGVyCisgICAgICAg
IGRvdWJsZSB0aGV0YSA9IHBpRG91YmxlICogY3V0b2ZmOworICAgICAgICBkb3VibGUgc24gPSAw
LjUgKiBkICogc2luKHRoZXRhKTsKKyAgICAgICAgZG91YmxlIGJldGEgPSAwLjUgKiAoMSAtIHNu
KSAvICgxICsgc24pOworICAgICAgICBkb3VibGUgZ2FtbWEgPSAoMC41ICsgYmV0YSkgKiBjb3Mo
dGhldGEpOworICAgICAgICBkb3VibGUgYWxwaGEgPSAwLjI1ICogKDAuNSArIGJldGEgKyBnYW1t
YSk7CisKKyAgICAgICAgbV9iMCA9IDIgKiBhbHBoYTsKKyAgICAgICAgbV9iMSA9IDIgKiAtMiAq
IGFscGhhOworICAgICAgICBtX2IyID0gMiAqIGFscGhhOworICAgICAgICBtX2ExID0gMiAqIC1n
YW1tYTsKKyAgICAgICAgbV9hMiA9IDIgKiBiZXRhOworICAgIH0gZWxzZSB7CisgICAgICAvLyBX
aGVuIGN1dG9mZiBpcyB6ZXJvLCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYmVjYXVzZSB0aGUgYWJv
dmUKKyAgICAgIC8vIGdpdmVzIGEgcXVhZHJhdGljIGRpdmlkZWQgYnkgdGhlIHNhbWUgcXVhZHJh
dGljLCB3aXRoIHBvbGVzCisgICAgICAvLyBhbmQgemVyb3Mgb24gdGhlIHVuaXQgY2lyY2xlIGlu
IHRoZSBzYW1lIHBsYWNlLiBXaGVuIGN1dG9mZgorICAgICAgLy8gaXMgemVybywgdGhlIHotdHJh
bnNmb3JtIGlzIDEuCisgICAgICBtX2IwID0gMTsKKyAgICAgIG1fYjEgPSAwOworICAgICAgbV9i
MiA9IDA7CisgICAgICBtX2ExID0gMDsKKyAgICAgIG1fYTIgPSAwOworICAgIH0KIH0KIAogdm9p
ZCBCaXF1YWQ6OnNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoZG91YmxlIGIwLCBkb3VibGUgYjEs
IGRvdWJsZSBiMiwgZG91YmxlIGEwLCBkb3VibGUgYTEsIGRvdWJsZSBhMikKQEAgLTI0MCwxMTkg
KzI4MSwyMjIgQEAgdm9pZCBCaXF1YWQ6OnNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoZG91Ymxl
IGIwLCBkb3VibGUgYjEsIGRvdWJsZSBiMiwgZG91YmxlIGEKIAogdm9pZCBCaXF1YWQ6OnNldExv
d1NoZWxmUGFyYW1zKGRvdWJsZSBmcmVxdWVuY3ksIGRvdWJsZSBkYkdhaW4pCiB7Ci0gICAgZG91
YmxlIHcwID0gcGlEb3VibGUgKiBmcmVxdWVuY3k7Ci0KKyAgICAvLyBDbGlwIGZyZXF1ZW5jaWVz
IHRvIGJldHdlZW4gMCBhbmQgMSwgaW5jbHVzaXZlLgorICAgIGZyZXF1ZW5jeSA9IHN0ZDo6bWF4
KDAuMCwgc3RkOjptaW4oZnJlcXVlbmN5LCAxLjApKTsKKyAgICAKICAgICBkb3VibGUgQSA9IHBv
dygxMC4wLCBkYkdhaW4gLyA0MCk7Ci0gICAgZG91YmxlIFMgPSAxOyAvLyBmaWx0ZXIgc2xvcGUg
KDEgaXMgbWF4IHZhbHVlKQotICAgIGRvdWJsZSBhbHBoYSA9IDAuNSAqIHNpbih3MCkgKiBzcXJ0
KChBICsgMSAvIEEpICogKDEgLyBTIC0gMSkgKyAyKTsKIAotICAgIGRvdWJsZSBrID0gY29zKHcw
KTsKLSAgICBkb3VibGUgazIgPSAyICogc3FydChBKSAqIGFscGhhOwotCi0gICAgZG91YmxlIGFQ
bHVzT25lID0gQSArIDE7Ci0gICAgZG91YmxlIGFNaW51c09uZSA9IEEgLSAxOwotICAgIAotICAg
IGRvdWJsZSBiMCA9IEEgKiAoYVBsdXNPbmUgLSBhTWludXNPbmUgKiBrICsgazIpOwotICAgIGRv
dWJsZSBiMSA9IDIgKiBBICogKGFNaW51c09uZSAtIGFQbHVzT25lICogayk7Ci0gICAgZG91Ymxl
IGIyID0gQSAqIChhUGx1c09uZSAtIGFNaW51c09uZSAqIGsgLSBrMik7Ci0gICAgZG91YmxlIGEw
ID0gYVBsdXNPbmUgKyBhTWludXNPbmUgKiBrICsgazI7Ci0gICAgZG91YmxlIGExID0gLTIgKiAo
YU1pbnVzT25lICsgYVBsdXNPbmUgKiBrKTsKLSAgICBkb3VibGUgYTIgPSBhUGx1c09uZSArIGFN
aW51c09uZSAqIGsgLSBrMjsKLQotICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoYjAsIGIx
LCBiMiwgYTAsIGExLCBhMik7CisgICAgaWYgKGZyZXF1ZW5jeSA9PSAxKSB7CisgICAgICAgIC8v
IFRoZSB6LXRyYW5zZm9ybSBpcyBhIGNvbnN0YW50IGdhaW4uCisgICAgICAgIHNldE5vcm1hbGl6
ZWRDb2VmZmljaWVudHMoQSAqIEEsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMSwgMCwgMCk7CisgICAgfSBlbHNlIGlmIChmcmVxdWVuY3kgPiAwKSB7CisgICAgICAg
IGRvdWJsZSB3MCA9IHBpRG91YmxlICogZnJlcXVlbmN5OworICAgICAgICBkb3VibGUgUyA9IDE7
IC8vIGZpbHRlciBzbG9wZSAoMSBpcyBtYXggdmFsdWUpCisgICAgICAgIGRvdWJsZSBhbHBoYSA9
IDAuNSAqIHNpbih3MCkgKiBzcXJ0KChBICsgMSAvIEEpICogKDEgLyBTIC0gMSkgKyAyKTsKKyAg
ICAgICAgZG91YmxlIGsgPSBjb3ModzApOworICAgICAgICBkb3VibGUgazIgPSAyICogc3FydChB
KSAqIGFscGhhOworICAgICAgICBkb3VibGUgYVBsdXNPbmUgPSBBICsgMTsKKyAgICAgICAgZG91
YmxlIGFNaW51c09uZSA9IEEgLSAxOworCisgICAgICAgIGRvdWJsZSBiMCA9IEEgKiAoYVBsdXNP
bmUgLSBhTWludXNPbmUgKiBrICsgazIpOworICAgICAgICBkb3VibGUgYjEgPSAyICogQSAqIChh
TWludXNPbmUgLSBhUGx1c09uZSAqIGspOworICAgICAgICBkb3VibGUgYjIgPSBBICogKGFQbHVz
T25lIC0gYU1pbnVzT25lICogayAtIGsyKTsKKyAgICAgICAgZG91YmxlIGEwID0gYVBsdXNPbmUg
KyBhTWludXNPbmUgKiBrICsgazI7CisgICAgICAgIGRvdWJsZSBhMSA9IC0yICogKGFNaW51c09u
ZSArIGFQbHVzT25lICogayk7CisgICAgICAgIGRvdWJsZSBhMiA9IGFQbHVzT25lICsgYU1pbnVz
T25lICogayAtIGsyOworCisgICAgICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoYjAsIGIx
LCBiMiwgYTAsIGExLCBhMik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2hlbiBmcmVxdWVu
Y3kgaXMgMCwgdGhlIHotdHJhbnNmb3JtIGlzIDEuCisgICAgICAgIHNldE5vcm1hbGl6ZWRDb2Vm
ZmljaWVudHMoMSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAw
LCAwKTsKKyAgICB9CiB9CiAKIHZvaWQgQmlxdWFkOjpzZXRIaWdoU2hlbGZQYXJhbXMoZG91Ymxl
IGZyZXF1ZW5jeSwgZG91YmxlIGRiR2FpbikKIHsKLSAgICBkb3VibGUgdzAgPSBwaURvdWJsZSAq
IGZyZXF1ZW5jeTsKKyAgICAvLyBDbGlwIGZyZXF1ZW5jaWVzIHRvIGJldHdlZW4gMCBhbmQgMSwg
aW5jbHVzaXZlLgorICAgIGZyZXF1ZW5jeSA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oZnJlcXVl
bmN5LCAxLjApKTsKIAogICAgIGRvdWJsZSBBID0gcG93KDEwLjAsIGRiR2FpbiAvIDQwKTsKLSAg
ICBkb3VibGUgUyA9IDE7IC8vIGZpbHRlciBzbG9wZSAoMSBpcyBtYXggdmFsdWUpCi0gICAgZG91
YmxlIGFscGhhID0gMC41ICogc2luKHcwKSAqIHNxcnQoKEEgKyAxIC8gQSkgKiAoMSAvIFMgLSAx
KSArIDIpOwogCi0gICAgZG91YmxlIGsgPSBjb3ModzApOwotICAgIGRvdWJsZSBrMiA9IDIgKiBz
cXJ0KEEpICogYWxwaGE7Ci0KLSAgICBkb3VibGUgYVBsdXNPbmUgPSBBICsgMTsKLSAgICBkb3Vi
bGUgYU1pbnVzT25lID0gQSAtIDE7Ci0gICAgCi0gICAgZG91YmxlIGIwID0gQSAqIChhUGx1c09u
ZSArIGFNaW51c09uZSAqIGsgKyBrMik7Ci0gICAgZG91YmxlIGIxID0gLTIgKiBBICogKGFNaW51
c09uZSArIGFQbHVzT25lICogayk7Ci0gICAgZG91YmxlIGIyID0gQSAqIChhUGx1c09uZSArIGFN
aW51c09uZSAqIGsgLSBrMik7Ci0gICAgZG91YmxlIGEwID0gYVBsdXNPbmUgLSBhTWludXNPbmUg
KiBrICsgazI7Ci0gICAgZG91YmxlIGExID0gMiAqIChhTWludXNPbmUgLSBhUGx1c09uZSAqIGsp
OwotICAgIGRvdWJsZSBhMiA9IGFQbHVzT25lIC0gYU1pbnVzT25lICogayAtIGsyOwotCi0gICAg
c2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAgICBp
ZiAoZnJlcXVlbmN5ID09IDEpIHsKKyAgICAgICAgLy8gVGhlIHotdHJhbnNmb3JtIGlzIDEuCisg
ICAgICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoMSwgMCwgMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxLCAwLCAwKTsKKyAgICB9IGVsc2UgaWYgKGZyZXF1ZW5jeSA+
IDApIHsKKyAgICAgICAgZG91YmxlIHcwID0gcGlEb3VibGUgKiBmcmVxdWVuY3k7CisgICAgICAg
IGRvdWJsZSBTID0gMTsgLy8gZmlsdGVyIHNsb3BlICgxIGlzIG1heCB2YWx1ZSkKKyAgICAgICAg
ZG91YmxlIGFscGhhID0gMC41ICogc2luKHcwKSAqIHNxcnQoKEEgKyAxIC8gQSkgKiAoMSAvIFMg
LSAxKSArIDIpOworICAgICAgICBkb3VibGUgayA9IGNvcyh3MCk7CisgICAgICAgIGRvdWJsZSBr
MiA9IDIgKiBzcXJ0KEEpICogYWxwaGE7CisgICAgICAgIGRvdWJsZSBhUGx1c09uZSA9IEEgKyAx
OworICAgICAgICBkb3VibGUgYU1pbnVzT25lID0gQSAtIDE7CisKKyAgICAgICAgZG91YmxlIGIw
ID0gQSAqIChhUGx1c09uZSArIGFNaW51c09uZSAqIGsgKyBrMik7CisgICAgICAgIGRvdWJsZSBi
MSA9IC0yICogQSAqIChhTWludXNPbmUgKyBhUGx1c09uZSAqIGspOworICAgICAgICBkb3VibGUg
YjIgPSBBICogKGFQbHVzT25lICsgYU1pbnVzT25lICogayAtIGsyKTsKKyAgICAgICAgZG91Ymxl
IGEwID0gYVBsdXNPbmUgLSBhTWludXNPbmUgKiBrICsgazI7CisgICAgICAgIGRvdWJsZSBhMSA9
IDIgKiAoYU1pbnVzT25lIC0gYVBsdXNPbmUgKiBrKTsKKyAgICAgICAgZG91YmxlIGEyID0gYVBs
dXNPbmUgLSBhTWludXNPbmUgKiBrIC0gazI7CisKKyAgICAgICAgc2V0Tm9ybWFsaXplZENvZWZm
aWNpZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBXaGVuIGZyZXF1ZW5jeSA9IDAsIHRoZSBmaWx0ZXIgaXMganVzdCBhIGdhaW4sIEFeMi4KKyAg
ICAgICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhBICogQSwgMCwgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAxLCAwLCAwKTsKKyAgICB9CiB9CiAKIHZvaWQgQmlxdWFk
OjpzZXRQZWFraW5nUGFyYW1zKGRvdWJsZSBmcmVxdWVuY3ksIGRvdWJsZSBRLCBkb3VibGUgZGJH
YWluKQogewotICAgIGRvdWJsZSB3MCA9IHBpRG91YmxlICogZnJlcXVlbmN5OwotICAgIGRvdWJs
ZSBhbHBoYSA9IHNpbih3MCkgLyAoMiAqIFEpOwotICAgIGRvdWJsZSBBID0gcG93KDEwLjAsIGRi
R2FpbiAvIDQwKTsKKyAgICAvLyBDbGlwIGZyZXF1ZW5jaWVzIHRvIGJldHdlZW4gMCBhbmQgMSwg
aW5jbHVzaXZlLgorICAgIGZyZXF1ZW5jeSA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oZnJlcXVl
bmN5LCAxLjApKTsKIAotICAgIGRvdWJsZSBrID0gY29zKHcwKTsKKyAgICAvLyBEb24ndCBsZXQg
USBnbyBuZWdhdGl2ZSwgd2hpY2ggY2F1c2VzIGFuIHVuc3RhYmxlIGZpbHRlci4KKyAgICBRID0g
c3RkOjptYXgoMC4wLCBRKTsKIAotICAgIGRvdWJsZSBiMCA9IDEgKyBhbHBoYSAqIEE7Ci0gICAg
ZG91YmxlIGIxID0gLTIgKiBrOwotICAgIGRvdWJsZSBiMiA9IDEgLSBhbHBoYSAqIEE7Ci0gICAg
ZG91YmxlIGEwID0gMSArIGFscGhhIC8gQTsKLSAgICBkb3VibGUgYTEgPSAtMiAqIGs7Ci0gICAg
ZG91YmxlIGEyID0gMSAtIGFscGhhIC8gQTsKKyAgICBkb3VibGUgQSA9IHBvdygxMC4wLCBkYkdh
aW4gLyA0MCk7CiAKLSAgICBzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEw
LCBhMSwgYTIpOworICAgIGlmIChmcmVxdWVuY3kgPiAwICYmIGZyZXF1ZW5jeSA8IDEpIHsKKyAg
ICAgICAgaWYgKFEgPiAwKSB7CisgICAgICAgICAgICBkb3VibGUgdzAgPSBwaURvdWJsZSAqIGZy
ZXF1ZW5jeTsKKyAgICAgICAgICAgIGRvdWJsZSBhbHBoYSA9IHNpbih3MCkgLyAoMiAqIFEpOwor
ICAgICAgICAgICAgZG91YmxlIGsgPSBjb3ModzApOworCisgICAgICAgICAgICBkb3VibGUgYjAg
PSAxICsgYWxwaGEgKiBBOworICAgICAgICAgICAgZG91YmxlIGIxID0gLTIgKiBrOworICAgICAg
ICAgICAgZG91YmxlIGIyID0gMSAtIGFscGhhICogQTsKKyAgICAgICAgICAgIGRvdWJsZSBhMCA9
IDEgKyBhbHBoYSAvIEE7CisgICAgICAgICAgICBkb3VibGUgYTEgPSAtMiAqIGs7CisgICAgICAg
ICAgICBkb3VibGUgYTIgPSAxIC0gYWxwaGEgLyBBOworCisgICAgICAgICAgICBzZXROb3JtYWxp
emVkQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLy8gV2hlbiBRID0gMCwgdGhlIGFib3ZlIGZvcm11bGFzIGhhdmUgcHJv
YmxlbXMuIElmIHdlIGxvb2sgYXQKKyAgICAgICAgICAgIC8vIHRoZSB6LXRyYW5zZm9ybSwgd2Ug
Y2FuIHNlZSB0aGF0IHRoZSBsaW1pdCBhcyBRLT4wIGlzIEFeMiwgc28KKyAgICAgICAgICAgIC8v
IHNldCB0aGUgZmlsdGVyIHRoYXQgd2F5LgorICAgICAgICAgICAgc2V0Tm9ybWFsaXplZENvZWZm
aWNpZW50cyhBICogQSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMSwgMCwgMCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXaGVuIGZy
ZXF1ZW5jeSBpcyAwIG9yIDEsIHRoZSB6LXRyYW5zZm9ybSBpcyAxLgorICAgICAgICBzZXROb3Jt
YWxpemVkQ29lZmZpY2llbnRzKDEsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMSwgMCwgMCk7CisgICAgfQogfQogCiB2b2lkIEJpcXVhZDo6c2V0QWxscGFzc1BhcmFt
cyhkb3VibGUgZnJlcXVlbmN5LCBkb3VibGUgUSkKIHsKLSAgICBkb3VibGUgdzAgPSBwaURvdWJs
ZSAqIGZyZXF1ZW5jeTsKLSAgICBkb3VibGUgYWxwaGEgPSBzaW4odzApIC8gKDIgKiBRKTsKLQot
ICAgIGRvdWJsZSBrID0gY29zKHcwKTsKLQotICAgIGRvdWJsZSBiMCA9IDEgLSBhbHBoYTsKLSAg
ICBkb3VibGUgYjEgPSAtMiAqIGs7Ci0gICAgZG91YmxlIGIyID0gMSArIGFscGhhOwotICAgIGRv
dWJsZSBhMCA9IDEgKyBhbHBoYTsKLSAgICBkb3VibGUgYTEgPSAtMiAqIGs7Ci0gICAgZG91Ymxl
IGEyID0gMSAtIGFscGhhOwotCi0gICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhiMCwgYjEs
IGIyLCBhMCwgYTEsIGEyKTsKKyAgICAvLyBDbGlwIGZyZXF1ZW5jaWVzIHRvIGJldHdlZW4gMCBh
bmQgMSwgaW5jbHVzaXZlLgorICAgIGZyZXF1ZW5jeSA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4o
ZnJlcXVlbmN5LCAxLjApKTsKKworICAgIC8vIERvbid0IGxldCBRIGdvIG5lZ2F0aXZlLCB3aGlj
aCBjYXVzZXMgYW4gdW5zdGFibGUgZmlsdGVyLgorICAgIFEgPSBzdGQ6Om1heCgwLjAsIFEpOwor
CisgICAgaWYgKGZyZXF1ZW5jeSA+IDAgJiYgZnJlcXVlbmN5IDwgMSkgeworICAgICAgICBpZiAo
USA+IDApIHsKKyAgICAgICAgICAgIGRvdWJsZSB3MCA9IHBpRG91YmxlICogZnJlcXVlbmN5Owor
ICAgICAgICAgICAgZG91YmxlIGFscGhhID0gc2luKHcwKSAvICgyICogUSk7CisgICAgICAgICAg
ICBkb3VibGUgayA9IGNvcyh3MCk7CisKKyAgICAgICAgICAgIGRvdWJsZSBiMCA9IDEgLSBhbHBo
YTsKKyAgICAgICAgICAgIGRvdWJsZSBiMSA9IC0yICogazsKKyAgICAgICAgICAgIGRvdWJsZSBi
MiA9IDEgKyBhbHBoYTsKKyAgICAgICAgICAgIGRvdWJsZSBhMCA9IDEgKyBhbHBoYTsKKyAgICAg
ICAgICAgIGRvdWJsZSBhMSA9IC0yICogazsKKyAgICAgICAgICAgIGRvdWJsZSBhMiA9IDEgLSBh
bHBoYTsKKworICAgICAgICAgICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhiMCwgYjEsIGIy
LCBhMCwgYTEsIGEyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdoZW4gUSA9
IDAsIHRoZSBhYm92ZSBmb3JtdWxhcyBoYXZlIHByb2JsZW1zLiBJZiB3ZSBsb29rIGF0CisgICAg
ICAgICAgICAvLyB0aGUgei10cmFuc2Zvcm0sIHdlIGNhbiBzZWUgdGhhdCB0aGUgbGltaXQgYXMg
US0+MCBpcyAtMSwgc28KKyAgICAgICAgICAgIC8vIHNldCB0aGUgZmlsdGVyIHRoYXQgd2F5Lgor
ICAgICAgICAgICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cygtMSwgMCwgMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCk7CisgICAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgICAvLyBXaGVuIGZyZXF1ZW5jeSBpcyAwIG9yIDEsIHRoZSB6LXRyYW5z
Zm9ybSBpcyAxLgorICAgICAgICBzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKDEsIDAsIDAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCk7CisgICAgfQogfQogCiB2
b2lkIEJpcXVhZDo6c2V0Tm90Y2hQYXJhbXMoZG91YmxlIGZyZXF1ZW5jeSwgZG91YmxlIFEpCiB7
Ci0gICAgZG91YmxlIHcwID0gcGlEb3VibGUgKiBmcmVxdWVuY3k7Ci0gICAgZG91YmxlIGFscGhh
ID0gc2luKHcwKSAvICgyICogUSk7Ci0KLSAgICBkb3VibGUgayA9IGNvcyh3MCk7Ci0KLSAgICBk
b3VibGUgYjAgPSAxOwotICAgIGRvdWJsZSBiMSA9IC0yICogazsKLSAgICBkb3VibGUgYjIgPSAx
OwotICAgIGRvdWJsZSBhMCA9IDEgKyBhbHBoYTsKLSAgICBkb3VibGUgYTEgPSAtMiAqIGs7Ci0g
ICAgZG91YmxlIGEyID0gMSAtIGFscGhhOwotCi0gICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50
cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAgICAvLyBDbGlwIGZyZXF1ZW5jaWVzIHRvIGJl
dHdlZW4gMCBhbmQgMSwgaW5jbHVzaXZlLgorICAgIGZyZXF1ZW5jeSA9IHN0ZDo6bWF4KDAuMCwg
c3RkOjptaW4oZnJlcXVlbmN5LCAxLjApKTsKKworICAgIC8vIERvbid0IGxldCBRIGdvIG5lZ2F0
aXZlLCB3aGljaCBjYXVzZXMgYW4gdW5zdGFibGUgZmlsdGVyLgorICAgIFEgPSBzdGQ6Om1heCgw
LjAsIFEpOworCisgICAgaWYgKGZyZXF1ZW5jeSA+IDAgJiYgZnJlcXVlbmN5IDwgMSkgeworICAg
ICAgICBpZiAoUSA+IDApIHsKKyAgICAgICAgICAgIGRvdWJsZSB3MCA9IHBpRG91YmxlICogZnJl
cXVlbmN5OworICAgICAgICAgICAgZG91YmxlIGFscGhhID0gc2luKHcwKSAvICgyICogUSk7Cisg
ICAgICAgICAgICBkb3VibGUgayA9IGNvcyh3MCk7CisKKyAgICAgICAgICAgIGRvdWJsZSBiMCA9
IDE7CisgICAgICAgICAgICBkb3VibGUgYjEgPSAtMiAqIGs7CisgICAgICAgICAgICBkb3VibGUg
YjIgPSAxOworICAgICAgICAgICAgZG91YmxlIGEwID0gMSArIGFscGhhOworICAgICAgICAgICAg
ZG91YmxlIGExID0gLTIgKiBrOworICAgICAgICAgICAgZG91YmxlIGEyID0gMSAtIGFscGhhOwor
CisgICAgICAgICAgICBzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBh
MSwgYTIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2hlbiBRID0gMCwgdGhl
IGFib3ZlIGZvcm11bGFzIGhhdmUgcHJvYmxlbXMuIElmIHdlIGxvb2sgYXQKKyAgICAgICAgICAg
IC8vIHRoZSB6LXRyYW5zZm9ybSwgd2UgY2FuIHNlZSB0aGF0IHRoZSBsaW1pdCBhcyBRLT4wIGlz
IDAsIHNvCisgICAgICAgICAgICAvLyBzZXQgdGhlIGZpbHRlciB0aGF0IHdheS4KKyAgICAgICAg
ICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBXaGVuIGZyZXF1ZW5jeSBpcyAwIG9yIDEsIHRoZSB6LXRyYW5zZm9ybSBpcyAx
LgorICAgICAgICBzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKDEsIDAsIDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCk7CisgICAgfQogfQogCiB2b2lkIEJpcXVh
ZDo6c2V0QmFuZHBhc3NQYXJhbXMoZG91YmxlIGZyZXF1ZW5jeSwgZG91YmxlIFEpCiB7Ci0gICAg
ZG91YmxlIHcwID0gcGlEb3VibGUgKiBmcmVxdWVuY3k7Ci0gICAgZG91YmxlIGFscGhhID0gc2lu
KHcwKSAvICgyICogUSk7CisgICAgLy8gTm8gbmVnYXRpdmUgZnJlcXVlbmNpZXMgYWxsb3dlZC4K
KyAgICBmcmVxdWVuY3kgPSBzdGQ6Om1heCgwLjAsIGZyZXF1ZW5jeSk7CisKKyAgICAvLyBEb24n
dCBsZXQgUSBnbyBuZWdhdGl2ZSwgd2hpY2ggY2F1c2VzIGFuIHVuc3RhYmxlIGZpbHRlci4KKyAg
ICBRID0gc3RkOjptYXgoMC4wLCBRKTsKIAotICAgIGRvdWJsZSBrID0gY29zKHcwKTsKKyAgICBp
ZiAoZnJlcXVlbmN5ID4gMCAmJiBmcmVxdWVuY3kgPCAxKSB7CisgICAgICAgIGRvdWJsZSB3MCA9
IHBpRG91YmxlICogZnJlcXVlbmN5OworICAgICAgICBpZiAoUSA+IDApIHsKKyAgICAgICAgICAg
IGRvdWJsZSBhbHBoYSA9IHNpbih3MCkgLyAoMiAqIFEpOworICAgICAgICAgICAgZG91YmxlIGsg
PSBjb3ModzApOwogICAgIAotICAgIGRvdWJsZSBiMCA9IGFscGhhOwotICAgIGRvdWJsZSBiMSA9
IDA7Ci0gICAgZG91YmxlIGIyID0gLWFscGhhOwotICAgIGRvdWJsZSBhMCA9IDEgKyBhbHBoYTsK
LSAgICBkb3VibGUgYTEgPSAtMiAqIGs7Ci0gICAgZG91YmxlIGEyID0gMSAtIGFscGhhOwotCi0g
ICAgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAg
ICAgICAgICAgIGRvdWJsZSBiMCA9IGFscGhhOworICAgICAgICAgICAgZG91YmxlIGIxID0gMDsK
KyAgICAgICAgICAgIGRvdWJsZSBiMiA9IC1hbHBoYTsKKyAgICAgICAgICAgIGRvdWJsZSBhMCA9
IDEgKyBhbHBoYTsKKyAgICAgICAgICAgIGRvdWJsZSBhMSA9IC0yICogazsKKyAgICAgICAgICAg
IGRvdWJsZSBhMiA9IDEgLSBhbHBoYTsKKworICAgICAgICAgICAgc2V0Tm9ybWFsaXplZENvZWZm
aWNpZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIC8vIFdoZW4gUSA9IDAsIHRoZSBhYm92ZSBmb3JtdWxhcyBoYXZlIHByb2JsZW1zLiBJ
ZiB3ZSBsb29rIGF0CisgICAgICAgICAgICAvLyB0aGUgei10cmFuc2Zvcm0sIHdlIGNhbiBzZWUg
dGhhdCB0aGUgbGltaXQgYXMgUS0+MCBpcyAxLCBzbworICAgICAgICAgICAgLy8gc2V0IHRoZSBm
aWx0ZXIgdGhhdCB3YXkuCisgICAgICAgICAgICBzZXROb3JtYWxpemVkQ29lZmZpY2llbnRzKDEs
IDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDAsIDApOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2hlbiB0aGUgY3V0b2ZmIGlzIHpl
cm8sIHRoZSB6LXRyYW5zZm9ybSBhcHByb2FjaGVzIDAsIGlmIFEKKyAgICAgICAgLy8gPiAwLiBX
aGVuIGJvdGggUSBhbmQgY3V0b2ZmIGFyZSB6ZXJvLCB0aGUgei10cmFuc2Zvcm0gaXMKKyAgICAg
ICAgLy8gcHJldHR5IG11Y2ggdW5kZWZpbmVkLiBXaGF0IHNob3VsZCB3ZSBkbyBpbiB0aGlzIGNh
c2U/CisgICAgICAgIC8vIEZvciBub3csIGp1c3QgbWFrZSB0aGUgZmlsdGVyIDAuIFdoZW4gdGhl
IGN1dG9mZiBpcyAxLCB0aGUKKyAgICAgICAgLy8gei10cmFuc2Zvcm0gYWxzbyBhcHByb2FjaGVz
IDAuCisgICAgICAgIHNldE5vcm1hbGl6ZWRDb2VmZmljaWVudHMoMCwgMCwgMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAwLCAwKTsKKyAgICB9CiB9CiAKIHZvaWQgQmlx
dWFkOjpzZXRaZXJvUG9sZVBhaXJzKGNvbnN0IENvbXBsZXggJnplcm8sIGNvbnN0IENvbXBsZXgg
JnBvbGUpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggOTg1ZTVlMjg5MzQyMDEwMDY4NDgwMDE1MDI0NWEwN2I2ZWUwNDRiNy4u
MDkyOWI0ZjI1YTQyYzJmMWQxZDIzZGY0YjgxMTA2NTQwYjFiNTUwMiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI4IEBACisyMDEyLTAxLTEzICBSYXltb25kIFRveSAgPHJ0b3lAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIENoZWNrIHBhcmFtZXRlcnMgdG8gYmlxdWFkIGZpbHRlcnMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNDEzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICAqIHdlYmF1ZGlvL2JpcXVh
ZC1hbGxwYXNzLWV4cGVjdGVkLnR4dDogQWRkZWQKKyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWQt
YWxscGFzcy5odG1sOiBBZGRlZAorICAgICAgICAqIHdlYmF1ZGlvL2JpcXVhZC1iYW5kcGFzcy1l
eHBlY3RlZC50eHQ6IEFkZGVkCisgICAgICAgICogd2ViYXVkaW8vYmlxdWFkLWJhbmRwYXNzLmh0
bWw6IEFkZGVkCisgICAgICAgICogd2ViYXVkaW8vYmlxdWFkLWhpZ2hwYXNzLWV4cGVjdGVkLnR4
dDogQWRkZWQKKyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWQtaGlnaHBhc3MuaHRtbDogQWRkZWQK
KyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWQtaGlnaHNoZWxmLWV4cGVjdGVkLnR4dDogQWRkZWQK
KyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWQtaGlnaHNoZWxmLmh0bWw6IEFkZGVkCisgICAgICAg
ICogd2ViYXVkaW8vYmlxdWFkLWxvd3Bhc3MtZXhwZWN0ZWQudHh0OiBBZGRlZAorICAgICAgICAq
IHdlYmF1ZGlvL2JpcXVhZC1sb3dwYXNzLmh0bWw6IEFkZGVkCisgICAgICAgICogd2ViYXVkaW8v
YmlxdWFkLWxvd3NoZWxmLWV4cGVjdGVkLnR4dDogQWRkZWQKKyAgICAgICAgKiB3ZWJhdWRpby9i
aXF1YWQtbG93c2hlbGYuaHRtbDogQWRkZWQKKyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWQtbm90
Y2gtZXhwZWN0ZWQudHh0OiBBZGRlZAorICAgICAgICAqIHdlYmF1ZGlvL2JpcXVhZC1ub3RjaC5o
dG1sOiBBZGRlZAorICAgICAgICAqIHdlYmF1ZGlvL2JpcXVhZC1wZWFraW5nLWV4cGVjdGVkLnR4
dDogQWRkZWQKKyAgICAgICAgKiB3ZWJhdWRpby9iaXF1YWQtcGVha2luZy5odG1sOiBBZGRlZAor
ICAgICAgICAqIHdlYmF1ZGlvL3Jlc291cmNlcy9iaXF1YWQtdGVzdGluZy5qczogQWRkZWQKKwog
MjAxMi0wMS0zMSAgWXV6byBGdWppc2hpbWEgIDx5dXpvQGdvb2dsZS5jb20+CiAKICAgICAgICAg
W0Nocm9taXVtXSBVbnJldmlld2VkIHRlc3QgZXhwZWN0YXRpb24gY2hhbmdlLgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWFsbHBhc3MtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWFsbHBhc3MtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjUyOTYxMzJmMmRjNjNkYmY4MTNmZjRjNTRlYjc3ZTZkMTUwYWRlNjYKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtYWxscGFzcy1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSwxMSBAQAorVGVzdHMgQmlxdWFkIGFsbHBhc3MgZmlsdGVyLgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKK1BBU1MgUmVuZGVyZWQgb3V0cHV0IGRpZCBub3QgaGF2ZSBpbmZp
bml0aWVzIG9yIE5hTnMuCitQQVNTIEFsbHBhc3MgZmlsdGVyIHJlc3BvbnNlIGlzIGNvcnJlY3Qu
CitQQVNTIFRlc3Qgc2lnbmFsIHdhcyBjb3JyZWN0bHkgZmlsdGVyZWQuCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWFsbHBhc3MuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlv
L2JpcXVhZC1hbGxwYXNzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjY2MjhmZTRiMGQ2MTZlMGExNDcwNGNj
MzFiNzk3MDFhMWQ1Mjg5OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlv
L2JpcXVhZC1hbGxwYXNzLmh0bWwKQEAgLTAsMCArMSw0OCBAQAorPCFET0NUWVBFIGh0bWw+CisK
KzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1
ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYmlx
dWFkLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKworPGRpdiBpZD0i
ZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+
CitkZXNjcmlwdGlvbigiVGVzdHMgQmlxdWFkIGFsbHBhc3MgZmlsdGVyLiIpOworCitmdW5jdGlv
biBydW5UZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorICAgIAorICAgIHdpbmRvdy5q
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKyAgICAgICAgCisgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVk
aW8gY29udGV4dC4KKyAgICB2YXIgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwg
c2FtcGxlUmF0ZSAqIHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOworCisgICAgLy8g
RHVtbXkgZmlsdGVyIHRvIGdldCBmaWx0ZXIgdHlwZSBjb25zdGFudAorICAgIHZhciBmID0gY29u
dGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTsKKworICAgIHZhciBmaWx0ZXJQYXJhbWV0ZXJzID0g
W3tjdXRvZmYgOiAwLCAgICBxIDogMTAsIGdhaW4gOiAxIH0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAge2N1dG9mZiA6IDEsICAgIHEgOiAxMCwgZ2FpbiA6IDEgfSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogLjUsICAgcSA6ICAwLCBnYWluIDogMSB9LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAwLjI1LCBxIDogMTAsIGdhaW4gOiAx
IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBdOworICAgIGNyZWF0ZVRlc3RBbmRSdW4o
Y29udGV4dCwgZi5BTExQQVNTLCBmaWx0ZXJQYXJhbWV0ZXJzKTsKK30KKworcnVuVGVzdCgpOwor
c3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIu
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWJhbmRwYXNz
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1iYW5kcGFzcy1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMGJiOTdkNGFiZWU5NzA2YTA4NmJlZDQ4N2ZlYjQ2NmY1YzRi
OWQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1iYW5k
cGFzcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMSBAQAorVGVzdHMgQmlxdWFkIGJhbmRwYXNz
IGZpbHRlci4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIFJlbmRlcmVkIG91
dHB1dCBkaWQgbm90IGhhdmUgaW5maW5pdGllcyBvciBOYU5zLgorUEFTUyBCYW5kcGFzcyBmaWx0
ZXIgcmVzcG9uc2UgaXMgY29ycmVjdC4KK1BBU1MgVGVzdCBzaWduYWwgd2FzIGNvcnJlY3RseSBm
aWx0ZXJlZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtYmFuZHBhc3MuaHRt
bCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1iYW5kcGFzcy5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjNiMTU0NTI1NTRhNmM5NDQ1MDhhYTAzZTVjYzVmN2UzMDZmMjdkZjcKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtYmFuZHBhc3MuaHRtbApAQCAtMCwwICsx
LDUwIEBACis8IURPQ1RZUEUgaHRtbD4KKworPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgaHJlZj0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9iaXF1YWQtdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+CisKKzxib2R5PgorCis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyBCaXF1YWQgYmFu
ZHBhc3MgZmlsdGVyLiIpOworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
CisgICAgfQorICAgIAorICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKyAgICAgICAg
CisgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dC4KKyAgICB2YXIgY29udGV4dCA9
IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgc2FtcGxlUmF0ZSAqIHJlbmRlckxlbmd0aFNlY29u
ZHMsIHNhbXBsZVJhdGUpOworCisgICAgLy8gRHVtbXkgZmlsdGVyIHRvIGdldCBmaWx0ZXIgdHlw
ZSBjb25zdGFudAorICAgIHZhciBmID0gY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTsKKwor
ICAgIC8vIFRoZSBmaWx0ZXJzIHdlIHdhbnQgdG8gdGVzdC4KKyAgICB2YXIgZmlsdGVyUGFyYW1l
dGVycyA9IFt7Y3V0b2ZmIDogMCwgICAgcSA6IDAsIGdhaW4gOiAxIH0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAge2N1dG9mZiA6IDEsICAgIHEgOiAwLCBnYWluIDogMSB9LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAwLjUsICBxIDogMCwgZ2FpbiA6IDEgfSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogMC4yNSwgcSA6IDEsIGdhaW4g
OiAxIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBdOworCisgICAgY3JlYXRlVGVzdEFu
ZFJ1bihjb250ZXh0LCBmLkJBTkRQQVNTLCBmaWx0ZXJQYXJhbWV0ZXJzKTsKK30KKworcnVuVGVz
dCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxzY3JpcHQg
c3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWhp
Z2hwYXNzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1oaWdocGFz
cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNlNmZiNTgyY2Q2OGVmODNiNWVjMzY0ZGM3MWEw
YjBiNzIyMDRmZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVh
ZC1oaWdocGFzcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMSBAQAorVGVzdHMgQmlxdWFkIGhp
Z2hwYXNzIGZpbHRlci4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIFJlbmRl
cmVkIG91dHB1dCBkaWQgbm90IGhhdmUgaW5maW5pdGllcyBvciBOYU5zLgorUEFTUyBIaWdocGFz
cyBmaWx0ZXIgcmVzcG9uc2UgaXMgY29ycmVjdC4KK1BBU1MgVGVzdCBzaWduYWwgd2FzIGNvcnJl
Y3RseSBmaWx0ZXJlZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtaGlnaHBh
c3MuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1oaWdocGFzcy5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjMwYjdkZWFkOGY3OWE4M2E3MGYzNTdiNGIzYjM2ZjJiZjZjN2Q2NjcKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtaGlnaHBhc3MuaHRtbApAQCAt
MCwwICsxLDQ5IEBACis8IURPQ1RZUEUgaHRtbD4KKworPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiLz4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9iaXF1YWQtdGVzdGluZy5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+CisKKzxib2R5PgorCis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyBCaXF1
YWQgaGlnaHBhc3MgZmlsdGVyLiIpOworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7CisgICAgfQorICAgIAorICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKyAg
ICAgICAgCisgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dC4KKyAgICB2YXIgY29u
dGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgc2FtcGxlUmF0ZSAqIHJlbmRlckxlbmd0
aFNlY29uZHMsIHNhbXBsZVJhdGUpOworCisgICAgLy8gRHVtbXkgZmlsdGVyIHRvIGdldCBmaWx0
ZXIgdHlwZSBjb25zdGFudAorICAgIHZhciBmID0gY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIo
KTsKKworICAgIC8vIFRoZSBmaWx0ZXJzIHdlIHdhbnQgdG8gdGVzdC4KKyAgICB2YXIgZmlsdGVy
UGFyYW1ldGVycyA9IFt7Y3V0b2ZmIDogMCwgICAgcSA6IDEsIGdhaW4gOiAxIH0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6IDEsICAgIHEgOiAxLCBnYWluIDogMSB9LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAwLjI1LCBxIDogMSwgZ2FpbiA6
IDEgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF07CisKKyAgICBjcmVhdGVUZXN0QW5k
UnVuKGNvbnRleHQsIGYuSElHSFBBU1MsIGZpbHRlclBhcmFtZXRlcnMpOworfQorCitydW5UZXN0
KCk7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3NjcmlwdD4KKworPHNjcmlwdCBz
cmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtaGln
aHNoZWxmLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1oaWdoc2hl
bGYtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlODYzNDM1OTdkYjAyNWVmYTI4NzU5M2MyZmE5
YTYyZDNlMTI4YTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1
YWQtaGlnaHNoZWxmLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDExIEBACitUZXN0cyBCaXF1YWQg
aGlnaHNoZWxmIGZpbHRlci4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIFJl
bmRlcmVkIG91dHB1dCBkaWQgbm90IGhhdmUgaW5maW5pdGllcyBvciBOYU5zLgorUEFTUyBIaWdo
c2hlbGYgZmlsdGVyIHJlc3BvbnNlIGlzIGNvcnJlY3QuCitQQVNTIFRlc3Qgc2lnbmFsIHdhcyBj
b3JyZWN0bHkgZmlsdGVyZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWhp
Z2hzaGVsZi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWhpZ2hzaGVsZi5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjYyNDk3ZmEwYzJjYjg3YjQ5MjFiMzUzYTkyYmFjODViYTM3YmI0NzEKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtaGlnaHNoZWxmLmh0
bWwKQEAgLTAsMCArMSw0OSBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxodG1sPgorPGhlYWQ+Cis8
bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
c3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYmlxdWFkLXRlc3RpbmcuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKworPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2
PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVz
dHMgQmlxdWFkIGhpZ2hzaGVsZiBmaWx0ZXIuIik7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7Cisg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndh
aXRVbnRpbERvbmUoKTsKKyAgICB9CisgICAgCisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0
cnVlOworICAgICAgICAKKyAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBjb250ZXh0LgorICAg
IHZhciBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1wbGVSYXRlICogcmVu
ZGVyTGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisKKyAgICAvLyBEdW1teSBmaWx0ZXIgdG8g
Z2V0IGZpbHRlciB0eXBlIGNvbnN0YW50CisgICAgdmFyIGYgPSBjb250ZXh0LmNyZWF0ZUJpcXVh
ZEZpbHRlcigpOworCisgICAgLy8gVGhlIGZpbHRlcnMgd2Ugd2FudCB0byB0ZXN0LgorICAgIHZh
ciBmaWx0ZXJQYXJhbWV0ZXJzID0gW3tjdXRvZmYgOiAwLCAgICBxIDogMTAsIGdhaW4gOiAxMCB9
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAxLCAgICBxIDogMTAsIGdh
aW4gOiAxMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAwLjI1LCBx
IDogMTAsIGdhaW4gOiAxMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgXTsKKworICAg
IGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgZi5ISUdIU0hFTEYsIGZpbHRlclBhcmFtZXRlcnMp
OworfQorCitydW5UZXN0KCk7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCis8L3Njcmlw
dD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJh
dWRpby9iaXF1YWQtbG93cGFzcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9i
aXF1YWQtbG93cGFzcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODZiZjAxMzBjOGFlZWJkMTYw
NTI4OTJjOWM0MDkwYTZhYzczZDRiZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YmF1ZGlvL2JpcXVhZC1sb3dwYXNzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDExIEBACitUZXN0
cyBCaXF1YWQgbG93cGFzcyBmaWx0ZXIuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
UEFTUyBSZW5kZXJlZCBvdXRwdXQgZGlkIG5vdCBoYXZlIGluZmluaXRpZXMgb3IgTmFOcy4KK1BB
U1MgTG93cGFzcyBmaWx0ZXIgcmVzcG9uc2UgaXMgY29ycmVjdC4KK1BBU1MgVGVzdCBzaWduYWwg
d2FzIGNvcnJlY3RseSBmaWx0ZXJlZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1
YWQtbG93cGFzcy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWxvd3Bhc3MuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yYzBhMzNiOWNiMTUwMGM4ZjkwNGY3ODU0YmY4NTg3OWRjM2E3NzA3Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWxvd3Bhc3MuaHRt
bApAQCAtMCwwICsxLDQ4IEBACis8IURPQ1RZUEUgaHRtbD4KKworPGh0bWw+Cis8aGVhZD4KKzxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1z
dHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9iaXF1YWQtdGVzdGluZy5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5PgorCis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+
Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0
cyBCaXF1YWQgbG93cGFzcyBmaWx0ZXIuIik7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKKyAgICB9CisgICAgCisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVl
OworICAgICAgICAKKyAgICAvLyBDcmVhdGUgb2ZmbGluZSBhdWRpbyBjb250ZXh0LgorICAgIHZh
ciBjb250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1wbGVSYXRlICogcmVuZGVy
TGVuZ3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisKKyAgICAvLyBEdW1teSBmaWx0ZXIgdG8gZ2V0
IGZpbHRlciB0eXBlIGNvbnN0YW50CisgICAgdmFyIGYgPSBjb250ZXh0LmNyZWF0ZUJpcXVhZEZp
bHRlcigpOworCisgICAgLy8gVGhlIGZpbHRlcnMgd2Ugd2FudCB0byB0ZXN0LgorICAgIHZhciBm
aWx0ZXJQYXJhbWV0ZXJzID0gW3tjdXRvZmYgOiAwLCAgICBxIDogMSwgZ2FpbiA6IDEgfSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogMSwgICAgcSA6IDEsIGdhaW4gOiAx
IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6IDAuMjUsIHEgOiAxLCBn
YWluIDogMSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgXTsKKyAgICBjcmVhdGVUZXN0
QW5kUnVuKGNvbnRleHQsIGYuTE9XUEFTUywgZmlsdGVyUGFyYW1ldGVycyk7Cit9CisKK3J1blRl
c3QoKTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0PgorCis8c2NyaXB0
IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1s
b3dzaGVsZi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtbG93c2hl
bGYtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3ZjUwMDJmZmUxNzY5MzI1NjU5YzNiNmQ3YzVm
NGZlYThiNWNmZmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1
YWQtbG93c2hlbGYtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTEgQEAKK1Rlc3RzIEJpcXVhZCBs
b3dzaGVsZiBmaWx0ZXIuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBSZW5k
ZXJlZCBvdXRwdXQgZGlkIG5vdCBoYXZlIGluZmluaXRpZXMgb3IgTmFOcy4KK1BBU1MgTG93c2hl
bGYgZmlsdGVyIHJlc3BvbnNlIGlzIGNvcnJlY3QuCitQQVNTIFRlc3Qgc2lnbmFsIHdhcyBjb3Jy
ZWN0bHkgZmlsdGVyZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWxvd3No
ZWxmLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtbG93c2hlbGYuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44Yzc1ZjljM2Y2OTQzNmJmM2RlMzNmZjI0MGQwZTkzOWJmMTdlNzUyCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLWxvd3NoZWxmLmh0bWwKQEAg
LTAsMCArMSw0OSBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxodG1sPgorPGhlYWQ+Cis8bGluayBy
ZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUu
Y3NzIi8+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYmlxdWFkLXRlc3RpbmcuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorCis8Ym9keT4KKworPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgQmlx
dWFkIGxvd3NoZWxmIGZpbHRlci4iKTsKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOworICAgIH0KKyAgICAKKyAgICB3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7Cisg
ICAgICAgIAorICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuCisgICAgdmFyIGNv
bnRleHQgPSBuZXcgd2Via2l0QXVkaW9Db250ZXh0KDIsIHNhbXBsZVJhdGUgKiByZW5kZXJMZW5n
dGhTZWNvbmRzLCBzYW1wbGVSYXRlKTsKKworICAgIC8vIER1bW15IGZpbHRlciB0byBnZXQgZmls
dGVyIHR5cGUgY29uc3RhbnQKKyAgICB2YXIgZiA9IGNvbnRleHQuY3JlYXRlQmlxdWFkRmlsdGVy
KCk7CisKKyAgICAvLyBUaGUgZmlsdGVycyB3ZSB3YW50IHRvIHRlc3QuCisgICAgdmFyIGZpbHRl
clBhcmFtZXRlcnMgPSBbe2N1dG9mZiA6IDAsICAgIHEgOiAxMCwgZ2FpbiA6IDEwIH0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6IDEsICAgIHEgOiAxMCwgZ2FpbiA6IDEw
IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6IDAuMjUsIHEgOiAxMCwg
Z2FpbiA6IDEwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBdOworCisgICAgY3JlYXRl
VGVzdEFuZFJ1bihjb250ZXh0LCBmLkxPV1NIRUxGLCBmaWx0ZXJQYXJhbWV0ZXJzKTsKK30KKwor
cnVuVGVzdCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxz
Y3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlx
dWFkLW5vdGNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1ub3Rj
aC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGY0NjM1YThkYzNhNzMyMTFmOGRhNjFkNzI4Y2E4
MWZkMDAxYTcyNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVh
ZC1ub3RjaC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMSBAQAorVGVzdHMgQmlxdWFkIG5vdGNo
IGZpbHRlci4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIFJlbmRlcmVkIG91
dHB1dCBkaWQgbm90IGhhdmUgaW5maW5pdGllcyBvciBOYU5zLgorUEFTUyBOb3RjaCBmaWx0ZXIg
cmVzcG9uc2UgaXMgY29ycmVjdC4KK1BBU1MgVGVzdCBzaWduYWwgd2FzIGNvcnJlY3RseSBmaWx0
ZXJlZC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtbm90Y2guaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1ub3RjaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIwMWEwOGQw
NzAxZWFmMTcxODg1YjY4OTE5YWExMzBlNGE3YmYxNjQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJhdWRpby9iaXF1YWQtbm90Y2guaHRtbApAQCAtMCwwICsxLDQ5IEBACis8IURP
Q1RZUEUgaHRtbD4KKworPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJl
Zj0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
ZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy9iaXF1YWQtdGVzdGluZy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5
PgorCis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyBCaXF1YWQgbm90Y2ggZmlsdGVyLiIp
OworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorICAgIAor
ICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKyAgICAgICAgCisgICAgLy8gQ3JlYXRl
IG9mZmxpbmUgYXVkaW8gY29udGV4dC4KKyAgICB2YXIgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRp
b0NvbnRleHQoMiwgc2FtcGxlUmF0ZSAqIHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUp
OworCisgICAgLy8gRHVtbXkgZmlsdGVyIHRvIGdldCBmaWx0ZXIgdHlwZSBjb25zdGFudAorICAg
IHZhciBmID0gY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTsKKworICAgIHZhciBmaWx0ZXJQ
YXJhbWV0ZXJzID0gW3tjdXRvZmYgOiAwLCAgICBxIDogMTAsIGdhaW4gOiAxIH0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAge2N1dG9mZiA6IDEsICAgIHEgOiAxMCwgZ2FpbiA6IDEgfSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogLjUsICAgcSA6ICAwLCBnYWlu
IDogMSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjdXRvZmYgOiAwLjI1LCBxIDog
MTAsIGdhaW4gOiAxIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBdOworCisgICAgY3Jl
YXRlVGVzdEFuZFJ1bihjb250ZXh0LCBmLk5PVENILCBmaWx0ZXJQYXJhbWV0ZXJzKTsKK30KKwor
cnVuVGVzdCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworPC9zY3JpcHQ+CisKKzxz
Y3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlx
dWFkLXBlYWtpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLXBl
YWtpbmctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlODM2MjcxZmQ4YjlmMTA2NmEwZjVhYmYw
ZWQ5MzkzNzQ3ODJkNjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9i
aXF1YWQtcGVha2luZy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMSBAQAorVGVzdHMgQmlxdWFk
IHBlYWtpbmcgZmlsdGVyLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1MgUmVu
ZGVyZWQgb3V0cHV0IGRpZCBub3QgaGF2ZSBpbmZpbml0aWVzIG9yIE5hTnMuCitQQVNTIFBlYWtp
bmcgZmlsdGVyIHJlc3BvbnNlIGlzIGNvcnJlY3QuCitQQVNTIFRlc3Qgc2lnbmFsIHdhcyBjb3Jy
ZWN0bHkgZmlsdGVyZWQuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vYmlxdWFkLXBlYWtp
bmcuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1wZWFraW5nLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNmEwNDQ4MzRhZWRjZmY1N2JkMzIyMTA2ZjVhMWI5NWE3ZGQ0NTdlNAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL2JpcXVhZC1wZWFraW5nLmh0bWwKQEAgLTAs
MCArMSw1MCBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ii8+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYmlxdWFkLXRlc3RpbmcuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorCis8Ym9keT4KKworPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgQmlxdWFk
IHBlYWtpbmcgZmlsdGVyLiIpOworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25l
KCk7CisgICAgfQorICAgIAorICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKyAgICAg
ICAgCisgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dC4KKyAgICB2YXIgY29udGV4
dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgc2FtcGxlUmF0ZSAqIHJlbmRlckxlbmd0aFNl
Y29uZHMsIHNhbXBsZVJhdGUpOworCisgICAgLy8gRHVtbXkgZmlsdGVyIHRvIGdldCBmaWx0ZXIg
dHlwZSBjb25zdGFudAorICAgIHZhciBmID0gY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKTsK
KworICAgIC8vIFRoZSBmaWx0ZXJzIHdlIHdhbnQgdG8gdGVzdC4KKyAgICB2YXIgZmlsdGVyUGFy
YW1ldGVycyA9IFt7Y3V0b2ZmIDogMCwgICAgcSA6IDEwLCBnYWluIDogMTAgfSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogMSwgICAgcSA6IDEwLCBnYWluIDogMTAgfSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogLjUsICAgcSA6ICAwLCBnYWlu
IDogMTAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y3V0b2ZmIDogMC4yNSwgcSA6
IDEwLCBnYWluIDogMTAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF07CisKKyAgICBj
cmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsIGYuUEVBS0lORywgZmlsdGVyUGFyYW1ldGVycyk7Cit9
CisKK3J1blRlc3QoKTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0Pgor
Cis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlv
L3Jlc291cmNlcy9iaXF1YWQtdGVzdGluZy5qcyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291
cmNlcy9iaXF1YWQtdGVzdGluZy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iODVlMGM5YzJkYmM5ZjI3NTM2YWQ2
NDUxZDcxMjJhODFiMzk4ZTM3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVk
aW8vcmVzb3VyY2VzL2JpcXVhZC10ZXN0aW5nLmpzCkBAIC0wLDAgKzEsNTQ5IEBACisvLyBHbG9i
YWxzLCB0byBtYWtlIHRlc3RpbmcgYW5kIGRlYnVnZ2luZyBlYXNpZXIuCit2YXIgY29udGV4dDsK
K3ZhciBmaWx0ZXI7Cit2YXIgc2lnbmFsOwordmFyIHJlbmRlcmVkQnVmZmVyOwordmFyIHJlbmRl
cmVkRGF0YTsKKwordmFyIHNhbXBsZVJhdGUgPSA0NDEwMC4wOwordmFyIHB1bHNlTGVuZ3RoRnJh
bWVzID0gLjEgKiBzYW1wbGVSYXRlOworCisvLyBNYXhpbXVtIGFsbG93ZWQgZXJyb3IgZm9yIHRo
ZSB0ZXN0IHRvIHN1Y2NlZWQuICBFeHBlcmltZW50YWxseSBkZXRlcm1pbmVkLiAKK3ZhciBtYXhB
bGxvd2VkRXJyb3IgPSA1LjllLTg7CisKKy8vIFRoaXMgbXVzdCBiZSBsYXJnZSBlbm91Z2ggc28g
dGhhdCB0aGUgZmlsdGVyZWQgcmVzdWx0IGlzCisvLyBlc3NlbnRpYWxseSB6ZXJvLiAgU2VlIGNv
bW1lbnRzIGZvciBjcmVhdGVUZXN0QW5kUnVuLgordmFyIHRpbWVTdGVwID0gLjE7CisKKy8vIE1h
eGltdW0gbnVtYmVyIG9mIGZpbHRlcnMgd2UgY2FuIHByb2Nlc3MgKG1vc3RseSBmb3Igc2V0dGlu
ZyB0aGUKKy8vIHJlbmRlciBsZW5ndGggY29ycmVjdGx5LikKK3ZhciBtYXhGaWx0ZXJzID0gNTsK
KworLy8gSG93IGxvbmcgdG8gcmVuZGVyLiAgTXVzdCBiZSBsb25nIGVub3VnaCBmb3IgYWxsIG9m
IHRoZSBmaWx0ZXJzIHdlCisvLyB3YW50IHRvIHRlc3QuCit2YXIgcmVuZGVyTGVuZ3RoU2Vjb25k
cyA9IHRpbWVTdGVwICogKG1heEZpbHRlcnMgKyAxKSA7CisKK3ZhciByZW5kZXJMZW5ndGhTYW1w
bGVzID0gTWF0aC5yb3VuZChyZW5kZXJMZW5ndGhTZWNvbmRzICogc2FtcGxlUmF0ZSk7CisKKy8v
IE51bWJlciBvZiBmaWx0ZXJzIHRoYXQgd2lsbCBiZSBwcm9jZXNzZWQuCit2YXIgbkZpbHRlcnM7
CisKKy8vIEEgYmlxdWFkIGZpbHRlciBoYXMgYSB6LXRyYW5zZm9ybSBvZgorLy8gSCh6KSA9IChi
MCArIGIxIC8geiArIGIyIC8gel4yKSAvICgxICsgYTEgLyB6ICsgYTIgLyB6XjIpCisvLworLy8g
VGhlIGZvcm11bGFzIGZvciB0aGUgdmFyaW91cyBmaWx0ZXJzIHdlcmUgdGFrZW4gZnJvbQorLy8g
aHR0cDovL3d3dy5tdXNpY2RzcC5vcmcvZmlsZXMvQXVkaW8tRVEtQ29va2Jvb2sudHh0LgorCisK
Ky8vIExvd3Bhc3MgZmlsdGVyLgorZnVuY3Rpb24gY3JlYXRlTG93cGFzc0ZpbHRlcihmcmVxLCBx
LCBnYWluKSB7CisgICAgdmFyIGIwOworICAgIHZhciBiMTsKKyAgICB2YXIgYjI7CisgICAgdmFy
IGExOworICAgIHZhciBhMjsKKworICAgIGlmIChmcmVxID09IDEpIHsKKyAgICAgICAgLy8gVGhl
IGZvcm11bGEgYmVsb3cgd29ya3MsIGV4Y2VwdCBmb3Igcm91bmRvZmYuICBXaGVuIGZyZXEgPSAx
LAorICAgICAgICAvLyB0aGUgZmlsdGVyIGlzIGp1c3QgYSB3aXJlLCBzbyBoYXJkd2lyZSB0aGUg
Y29lZmZpY2llbnRzLgorICAgICAgICBiMCA9IDE7CisgICAgICAgIGIxID0gMDsKKyAgICAgICAg
YjIgPSAwOworICAgICAgICBhMSA9IDA7CisgICAgICAgIGEyID0gMDsKKyAgICB9IGVsc2Ugewor
ICAgICAgICB2YXIgZyA9IE1hdGgucG93KDEwLCBxIC8gMjApOworICAgICAgICB2YXIgZCA9IE1h
dGguc3FydCgoNCAtIE1hdGguc3FydCgxNiAtIDE2IC8gKGcgKiBnKSkpIC8gMik7CisgICAgICAg
IHZhciB0aGV0YSA9IE1hdGguUEkgKiBmcmVxOworICAgICAgICB2YXIgc24gPSBkICogTWF0aC5z
aW4odGhldGEpIC8gMjsKKyAgICAgICAgdmFyIGJldGEgPSAwLjUgKiAoMSAtIHNuKSAvICgxICsg
c24pOworICAgICAgICB2YXIgZ2FtbWEgPSAoMC41ICsgYmV0YSkgKiBNYXRoLmNvcyh0aGV0YSk7
CisgICAgICAgIHZhciBhbHBoYSA9IDAuMjUgKiAoMC41ICsgYmV0YSAtIGdhbW1hKTsKKworICAg
ICAgICBiMCA9IDIgKiBhbHBoYTsKKyAgICAgICAgYjEgPSA0ICogYWxwaGE7CisgICAgICAgIGIy
ID0gMiAqIGFscGhhOworICAgICAgICBhMSA9IDIgKiAoLWdhbW1hKTsKKyAgICAgICAgYTIgPSAy
ICogYmV0YTsKKyAgICB9CisKKyAgICByZXR1cm4ge2IwIDogYjAsIGIxIDogYjEsIGIyIDogYjIs
IGExIDogYTEsIGEyIDogYTJ9OworfQorCitmdW5jdGlvbiBjcmVhdGVIaWdocGFzc0ZpbHRlcihm
cmVxLCBxLCBnYWluKSB7CisgICAgdmFyIGIwOworICAgIHZhciBiMTsKKyAgICB2YXIgYjI7Cisg
ICAgdmFyIGExOworICAgIHZhciBhMjsKKworICAgIGlmIChmcmVxID09IDEpIHsKKyAgICAgICAg
Ly8gVGhlIGZpbHRlciBpcyAwCisgICAgICAgIGIwID0gMDsKKyAgICAgICAgYjEgPSAwOworICAg
ICAgICBiMiA9IDA7CisgICAgICAgIGExID0gMDsKKyAgICAgICAgYTIgPSAwOworICAgIH0gZWxz
ZSBpZiAoZnJlcSA9PSAwKSB7CisgICAgICAgIC8vIFRoZSBmaWx0ZXIgaXMgMS4gIENvbXB1dGF0
aW9uIG9mIGNvZWZmaWNpZW50cyBiZWxvdyBpcyBvaywgYnV0CisgICAgICAgIC8vIHRoZXJlJ3Mg
YSBwb2xlIGF0IDEgYW5kIGEgemVybyBhdCAxLCBzbyByb3VuZC1vZmYgY291bGQgbWFrZQorICAg
ICAgICAvLyB0aGUgZmlsdGVyIHVuc3RhYmxlLgorICAgICAgICBiMCA9IDE7CisgICAgICAgIGIx
ID0gMDsKKyAgICAgICAgYjIgPSAwOworICAgICAgICBhMSA9IDA7CisgICAgICAgIGEyID0gMDsK
KyAgICB9IGVsc2UgeworICAgICAgICB2YXIgZyA9IE1hdGgucG93KDEwLCBxIC8gMjApOworICAg
ICAgICB2YXIgZCA9IE1hdGguc3FydCgoNCAtIE1hdGguc3FydCgxNiAtIDE2IC8gKGcgKiBnKSkp
IC8gMik7CisgICAgICAgIHZhciB0aGV0YSA9IE1hdGguUEkgKiBmcmVxOworICAgICAgICB2YXIg
c24gPSBkICogTWF0aC5zaW4odGhldGEpIC8gMjsKKyAgICAgICAgdmFyIGJldGEgPSAwLjUgKiAo
MSAtIHNuKSAvICgxICsgc24pOworICAgICAgICB2YXIgZ2FtbWEgPSAoMC41ICsgYmV0YSkgKiBN
YXRoLmNvcyh0aGV0YSk7CisgICAgICAgIHZhciBhbHBoYSA9IDAuMjUgKiAoMC41ICsgYmV0YSAr
IGdhbW1hKTsKKworICAgICAgICBiMCA9IDIgKiBhbHBoYTsKKyAgICAgICAgYjEgPSAtNCAqIGFs
cGhhOworICAgICAgICBiMiA9IDIgKiBhbHBoYTsKKyAgICAgICAgYTEgPSAyICogKC1nYW1tYSk7
CisgICAgICAgIGEyID0gMiAqIGJldGE7CisgICAgfQorCisgICAgcmV0dXJuIHtiMCA6IGIwLCBi
MSA6IGIxLCBiMiA6IGIyLCBhMSA6IGExLCBhMiA6IGEyfTsKK30KKworZnVuY3Rpb24gbm9ybWFs
aXplRmlsdGVyQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpIHsKKyAgICB2YXIg
c2NhbGUgPSAxIC8gYTA7CisKKyAgICByZXR1cm4ge2IwIDogYjAgKiBzY2FsZSwKKyAgICAgICAg
ICAgIGIxIDogYjEgKiBzY2FsZSwKKyAgICAgICAgICAgIGIyIDogYjIgKiBzY2FsZSwKKyAgICAg
ICAgICAgIGExIDogYTEgKiBzY2FsZSwKKyAgICAgICAgICAgIGEyIDogYTIgKiBzY2FsZX07Cit9
CisKK2Z1bmN0aW9uIGNyZWF0ZUJhbmRwYXNzRmlsdGVyKGZyZXEsIHEsIGdhaW4pIHsKKyAgICB2
YXIgYjA7CisgICAgdmFyIGIxOworICAgIHZhciBiMjsKKyAgICB2YXIgYTA7CisgICAgdmFyIGEx
OworICAgIHZhciBhMjsKKyAgICB2YXIgY29lZjsKKworICAgIGlmIChmcmVxID4gMCAmJiBmcmVx
IDwgMSkgeworICAgICAgICB2YXIgdzAgPSBNYXRoLlBJICogZnJlcTsKKyAgICAgICAgaWYgKHEg
PiAwKSB7CisgICAgICAgICAgICB2YXIgYWxwaGEgPSBNYXRoLnNpbih3MCkgLyAoMiAqIHEpOwor
ICAgICAgICAgICAgdmFyIGsgPSBNYXRoLmNvcyh3MCk7CisKKyAgICAgICAgICAgIGIwID0gYWxw
aGE7CisgICAgICAgICAgICBiMSA9IDA7CisgICAgICAgICAgICBiMiA9IC1hbHBoYTsKKyAgICAg
ICAgICAgIGEwID0gMSArIGFscGhhOworICAgICAgICAgICAgYTEgPSAtMiAqIGs7CisgICAgICAg
ICAgICBhMiA9IDEgLSBhbHBoYTsKKworICAgICAgICAgICAgY29lZiA9IG5vcm1hbGl6ZUZpbHRl
ckNvZWZmaWNpZW50cyhiMCwgYjEsIGIyLCBhMCwgYTEsIGEyKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vIHEgPSAwLCBhbmQgZnJlcXVlbmN5IGlzIG5vdCAwIG9yIDEuICBUaGUg
YWJvdmUgZm9ybXVsYSBoYXMgYQorICAgICAgICAgICAgLy8gZGl2aWRlIGJ5IHplcm8gcHJvYmxl
bS4gIFRoZSBsaW1pdCBvZiB0aGUgei10cmFuc2Zvcm0gYXMgcQorICAgICAgICAgICAgLy8gYXBw
cm9hY2hlcyAwIGlzIDEsIHNvIHNldCB0aGUgZmlsdGVyIHRoYXQgd2F5LgorICAgICAgICAgICAg
Y29lZiA9IHtiMCA6IDEsIGIxIDogMCwgYjIgOiAwLCBhMSA6IDAsIGEyIDogMH07CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXaGVuIGZyZXEgPSAwIG9yIDEsIHRoZSB6LXRy
YW5zZm9ybSBpcyBpZGVudGljYWxseSAwLAorICAgICAgICAvLyBpbmRlcGVuZGVudCBvZiBxLgor
ICAgICAgICBjb2VmID0ge2IwIDogMCwgYjEgOiAwLCBiMiA6IDAsIGExIDogMCwgYTIgOiAwfQor
ICAgIH0KKyAgCisgICAgcmV0dXJuIGNvZWY7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZUxvd1NoZWxm
RmlsdGVyKGZyZXEsIHEsIGdhaW4pIHsKKyAgICAvLyBxIG5vdCB1c2VkCisgICAgdmFyIGIwOwor
ICAgIHZhciBiMTsKKyAgICB2YXIgYjI7CisgICAgdmFyIGEwOworICAgIHZhciBhMTsKKyAgICB2
YXIgYTI7CisgICAgdmFyIGNvZWY7CisgIAorICAgIHZhciBTID0gMTsKKyAgICB2YXIgQSA9IE1h
dGgucG93KDEwLCBnYWluIC8gNDApOworCisgICAgaWYgKGZyZXEgPT0gMSkgeworICAgICAgICAv
LyBUaGUgZmlsdGVyIGlzIGp1c3QgYSBjb25zdGFudCBnYWluCisgICAgICAgIGNvZWYgPSB7YjAg
OiBBICogQSwgYjEgOiAwLCBiMiA6IDAsIGExIDogMCwgYTIgOiAwfTsgIAorICAgIH0gZWxzZSBp
ZiAoZnJlcSA9PSAwKSB7CisgICAgICAgIC8vIFRoZSBmaWx0ZXIgaXMgMQorICAgICAgICBjb2Vm
ID0ge2IwIDogMSwgYjEgOiAwLCBiMiA6IDAsIGExIDogMCwgYTIgOiAwfTsgIAorICAgIH0gZWxz
ZSB7CisgICAgICAgIHZhciB3MCA9IE1hdGguUEkgKiBmcmVxOworICAgICAgICB2YXIgYWxwaGEg
PSAxIC8gMiAqIE1hdGguc2luKHcwKSAqIE1hdGguc3FydCgoQSArIDEgLyBBKSAqICgxIC8gUyAt
IDEpICsgMik7CisgICAgICAgIHZhciBrID0gTWF0aC5jb3ModzApOworICAgICAgICB2YXIgazIg
PSAyICogTWF0aC5zcXJ0KEEpICogYWxwaGE7CisgICAgICAgIHZhciBBcDEgPSBBICsgMTsKKyAg
ICAgICAgdmFyIEFtMSA9IEEgLSAxOworCisgICAgICAgIGIwID0gQSAqIChBcDEgLSBBbTEgKiBr
ICsgazIpOworICAgICAgICBiMSA9IDIgKiBBICogKEFtMSAtIEFwMSAqIGspOworICAgICAgICBi
MiA9IEEgKiAoQXAxIC0gQW0xICogayAtIGsyKTsKKyAgICAgICAgYTAgPSBBcDEgKyBBbTEgKiBr
ICsgazI7CisgICAgICAgIGExID0gLTIgKiAoQW0xICsgQXAxICogayk7CisgICAgICAgIGEyID0g
QXAxICsgQW0xICogayAtIGsyOworICAgICAgICBjb2VmID0gbm9ybWFsaXplRmlsdGVyQ29lZmZp
Y2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOworICAgIH0KKworICAgIHJldHVybiBjb2Vm
OworfQorCitmdW5jdGlvbiBjcmVhdGVIaWdoU2hlbGZGaWx0ZXIoZnJlcSwgcSwgZ2Fpbikgewor
ICAgIC8vIHEgbm90IHVzZWQKKyAgICB2YXIgYjA7CisgICAgdmFyIGIxOworICAgIHZhciBiMjsK
KyAgICB2YXIgYTA7CisgICAgdmFyIGExOworICAgIHZhciBhMjsKKyAgICB2YXIgY29lZjsKKwor
ICAgIHZhciBBID0gTWF0aC5wb3coMTAsIGdhaW4gLyA0MCk7CisKKyAgICBpZiAoZnJlcSA9PSAx
KSB7CisgICAgICAgIC8vIFdoZW4gZnJlcSA9IDEsIHRoZSB6LXRyYW5zZm9ybSBpcyAxCisgICAg
ICAgIGNvZWYgPSB7YjAgOiAxLCBiMSA6IDAsIGIyIDogMCwgYTEgOiAwLCBhMiA6IDB9OworICAg
IH0gZWxzZSBpZiAoZnJlcSA+IDApIHsKKyAgICAgICAgdmFyIHcwID0gTWF0aC5QSSAqIGZyZXE7
CisgICAgICAgIHZhciBTID0gMTsKKyAgICAgICAgdmFyIGFscGhhID0gMC41ICogTWF0aC5zaW4o
dzApICogTWF0aC5zcXJ0KChBICsgMSAvIEEpICogKDEgLyBTIC0gMSkgKyAyKTsKKyAgICAgICAg
dmFyIGsgPSBNYXRoLmNvcyh3MCk7CisgICAgICAgIHZhciBrMiA9IDIgKiBNYXRoLnNxcnQoQSkg
KiBhbHBoYTsKKyAgICAgICAgdmFyIEFwMSA9IEEgKyAxOworICAgICAgICB2YXIgQW0xID0gQSAt
IDE7CisKKyAgICAgICAgYjAgPSBBICogKEFwMSArIEFtMSAqIGsgKyBrMik7CisgICAgICAgIGIx
ID0gLTIgKiBBICogKEFtMSArIEFwMSAqIGspOworICAgICAgICBiMiA9IEEgKiAoQXAxICsgQW0x
ICogayAtIGsyKTsKKyAgICAgICAgYTAgPSBBcDEgLSBBbTEgKiBrICsgazI7CisgICAgICAgIGEx
ID0gMiAqIChBbTEgLSBBcDEqayk7CisgICAgICAgIGEyID0gQXAxIC0gQW0xICogay1rMjsKKwor
ICAgICAgICBjb2VmID0gbm9ybWFsaXplRmlsdGVyQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEw
LCBhMSwgYTIpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFdoZW4gZnJlcSA9IDAsIHRoZSBm
aWx0ZXIgaXMganVzdCBhIGdhaW4KKyAgICAgICAgY29lZiA9IHtiMCA6IEEgKiBBLCBiMSA6IDAs
IGIyIDogMCwgYTEgOiAwLCBhMiA6IDB9OworICAgIH0KKworICAgIHJldHVybiBjb2VmOworfQor
CitmdW5jdGlvbiBjcmVhdGVQZWFraW5nRmlsdGVyKGZyZXEsIHEsIGdhaW4pIHsKKyAgICB2YXIg
YjA7CisgICAgdmFyIGIxOworICAgIHZhciBiMjsKKyAgICB2YXIgYTA7CisgICAgdmFyIGExOwor
ICAgIHZhciBhMjsKKyAgICB2YXIgY29lZjsKKworICAgIHZhciBBID0gTWF0aC5wb3coMTAsIGdh
aW4gLyA0MCk7CisKKyAgICBpZiAoZnJlcSA+IDAgJiYgZnJlcSA8IDEpIHsKKyAgICAgICAgaWYg
KHEgPiAwKSB7CisgICAgICAgICAgICB2YXIgdzAgPSBNYXRoLlBJICogZnJlcTsKKyAgICAgICAg
ICAgIHZhciBhbHBoYSA9IE1hdGguc2luKHcwKSAvICgyICogcSk7CisgICAgICAgICAgICB2YXIg
ayA9IE1hdGguY29zKHcwKTsKKworICAgICAgICAgICAgYjAgPSAxICsgYWxwaGEgKiBBOworICAg
ICAgICAgICAgYjEgPSAtMiAqIGs7CisgICAgICAgICAgICBiMiA9IDEgLSBhbHBoYSAqIEE7Cisg
ICAgICAgICAgICBhMCA9IDEgKyBhbHBoYSAvIEE7CisgICAgICAgICAgICBhMSA9IC0yICogazsK
KyAgICAgICAgICAgIGEyID0gMSAtIGFscGhhIC8gQTsKKyAgCisgICAgICAgICAgICBjb2VmID0g
bm9ybWFsaXplRmlsdGVyQ29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gcSA9IDAsIHdlIGhhdmUgYSBkaXZpZGUgYnkg
emVybyBwcm9ibGVtIGluIHRoZSBmb3JtdWxhcworICAgICAgICAgICAgLy8gYWJvdmUuICBCdXQg
aWYgd2UgbG9vayBhdCB0aGUgei10cmFuc2Zvcm0sIHdlIHNlZSB0aGF0IHRoZQorICAgICAgICAg
ICAgLy8gbGltaXQgYXMgcSBhcHByb2FjaGVzIDAgaXMgQV4yLgorICAgICAgICAgICAgY29lZiA9
IHtiMCA6IEEgKiBBLCBiMSA6IDAsIGIyIDogMCwgYTEgOiAwLCBhMiA6IDB9OworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gZnJlcSA9IDAgb3IgMSwgdGhlIHotdHJhbnNmb3Jt
IGlzIDEKKyAgICAgICAgY29lZiA9IHtiMCA6IDEsIGIxIDogMCwgYjIgOiAwLCBhMSA6IDAsIGEy
IDogMH07CisgICAgfQorCisgICAgcmV0dXJuIGNvZWY7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZU5v
dGNoRmlsdGVyKGZyZXEsIHEsIGdhaW4pIHsKKyAgICB2YXIgYjA7CisgICAgdmFyIGIxOworICAg
IHZhciBiMjsKKyAgICB2YXIgYTA7CisgICAgdmFyIGExOworICAgIHZhciBhMjsKKyAgICB2YXIg
Y29lZjsKKworICAgIGlmIChmcmVxID4gMCAmJiBmcmVxIDwgMSkgeworICAgICAgICBpZiAocSA+
IDApIHsKKyAgICAgICAgICAgIHZhciB3MCA9IE1hdGguUEkgKiBmcmVxOworICAgICAgICAgICAg
dmFyIGFscGhhID0gTWF0aC5zaW4odzApIC8gKDIgKiBxKTsKKyAgICAgICAgICAgIHZhciBrID0g
TWF0aC5jb3ModzApOworCisgICAgICAgICAgICBiMCA9IDE7CisgICAgICAgICAgICBiMSA9IC0y
ICogazsKKyAgICAgICAgICAgIGIyID0gMTsKKyAgICAgICAgICAgIGEwID0gMSArIGFscGhhOwor
ICAgICAgICAgICAgYTEgPSAtMiAqIGs7CisgICAgICAgICAgICBhMiA9IDEgLSBhbHBoYTsKKyAg
ICAgICAgICAgIGNvZWYgPSBub3JtYWxpemVGaWx0ZXJDb2VmZmljaWVudHMoYjAsIGIxLCBiMiwg
YTAsIGExLCBhMik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXaGVuIHEgPSAw
LCB3ZSBnZXQgYSBkaXZpZGUgYnkgemVybyBhYm92ZS4gIFRoZSBsaW1pdCBvZiB0aGUKKyAgICAg
ICAgICAgIC8vIHotdHJhbnNmb3JtIGFzIHEgYXBwcm9hY2hlcyAwIGlzIDAsIHNvIHNldCB0aGUg
Y29lZmZpY2llbnRzCisgICAgICAgICAgICAvLyBhcHByb3ByaWF0ZWx5LgorICAgICAgICAgICAg
Y29lZiA9IHtiMCA6IDAsIGIxIDogMCwgYjIgOiAwLCBhMSA6IDAsIGEyIDogMH07CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXaGVuIGZyZXEgPSAwIG9yIDEsIHRoZSB6LXRy
YW5zZm9ybSBpcyAxCisgICAgICAgIGNvZWYgPSB7YjAgOiAxLCBiMSA6IDAsIGIyIDogMCwgYTEg
OiAwLCBhMiA6IDB9OworICAgIH0KKworICAgIHJldHVybiBjb2VmOworfQorCitmdW5jdGlvbiBj
cmVhdGVBbGxwYXNzRmlsdGVyKGZyZXEsIHEsIGdhaW4pIHsKKyAgICB2YXIgYjA7CisgICAgdmFy
IGIxOworICAgIHZhciBiMjsKKyAgICB2YXIgYTA7CisgICAgdmFyIGExOworICAgIHZhciBhMjsK
KyAgICB2YXIgY29lZjsKKworICAgIGlmIChmcmVxID4gMCAmJiBmcmVxIDwgMSkgeworICAgICAg
ICBpZiAocSA+IDApIHsKKyAgICAgICAgICAgIHZhciB3MCA9IE1hdGguUEkgKiBmcmVxOworICAg
ICAgICAgICAgdmFyIGFscGhhID0gTWF0aC5zaW4odzApIC8gKDIgKiBxKTsKKyAgICAgICAgICAg
IHZhciBrID0gTWF0aC5jb3ModzApOworCisgICAgICAgICAgICBiMCA9IDEgLSBhbHBoYTsKKyAg
ICAgICAgICAgIGIxID0gLTIgKiBrOworICAgICAgICAgICAgYjIgPSAxICsgYWxwaGE7CisgICAg
ICAgICAgICBhMCA9IDEgKyBhbHBoYTsKKyAgICAgICAgICAgIGExID0gLTIgKiBrOworICAgICAg
ICAgICAgYTIgPSAxIC0gYWxwaGE7CisgICAgICAgICAgICBjb2VmID0gbm9ybWFsaXplRmlsdGVy
Q29lZmZpY2llbnRzKGIwLCBiMSwgYjIsIGEwLCBhMSwgYTIpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gcSA9IDAKKyAgICAgICAgICAgIGNvZWYgPSB7YjAgOiAtMSwgYjEgOiAw
LCBiMiA6IDAsIGExIDogMCwgYTIgOiAwfTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGNvZWYgPSB7YjAgOiAxLCBiMSA6IDAsIGIyIDogMCwgYTEgOiAwLCBhMiA6IDB9OworICAg
IH0KKworICAgIHJldHVybiBjb2VmOworfQorCisvLyBBcnJheSBvZiBmdW5jdGlvbnMgdG8gY29t
cHV0ZSB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4gIFRoaXMgbXVzdAorLy8gYmUgYXJyYW5lZCBp
biB0aGUgc2FtZSBvcmRlciBhcyB0aGUgZmlsdGVyIHR5cGVzIGluIHRoZSBpZGwgZmlsZS4KK3Zh
ciBmaWx0ZXJDcmVhdG9yRnVuY3Rpb24gPSBbY3JlYXRlTG93cGFzc0ZpbHRlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY3JlYXRlSGlnaHBhc3NGaWx0ZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNyZWF0ZUJhbmRwYXNzRmlsdGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjcmVhdGVMb3dTaGVsZkZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY3JlYXRlSGlnaFNoZWxmRmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjcmVhdGVQZWFraW5nRmlsdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVh
dGVOb3RjaEZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQWxscGFz
c0ZpbHRlcl07CisKK3ZhciBmaWx0ZXJUeXBlTmFtZSA9IFsiTG93cGFzcyBmaWx0ZXIiLAorICAg
ICAgICAgICAgICAgICAgICAgICJIaWdocGFzcyBmaWx0ZXIiLAorICAgICAgICAgICAgICAgICAg
ICAgICJCYW5kcGFzcyBmaWx0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICJMb3dzaGVsZiBm
aWx0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICJIaWdoc2hlbGYgZmlsdGVyIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAiUGVha2luZyBmaWx0ZXIiLAorICAgICAgICAgICAgICAgICAgICAg
ICJOb3RjaCBmaWx0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICJBbGxwYXNzIGZpbHRlciJd
OworCitmdW5jdGlvbiBjcmVhdGVGaWx0ZXIoZmlsdGVyVHlwZSwgZnJlcSwgcSwgZ2Fpbikgewor
ICAgIHJldHVybiBmaWx0ZXJDcmVhdG9yRnVuY3Rpb25bZmlsdGVyVHlwZV0oZnJlcSwgcSwgZ2Fp
bik7Cit9CisKK2Z1bmN0aW9uIGZpbHRlckRhdGEoZmlsdGVyQ29lZiwgc2lnbmFsLCBsZW4pIHsK
KyAgICB2YXIgeSA9IG5ldyBBcnJheShsZW4pOworICAgIHZhciBiMCA9IGZpbHRlckNvZWYuYjA7
CisgICAgdmFyIGIxID0gZmlsdGVyQ29lZi5iMTsKKyAgICB2YXIgYjIgPSBmaWx0ZXJDb2VmLmIy
OworICAgIHZhciBhMSA9IGZpbHRlckNvZWYuYTE7CisgICAgdmFyIGEyID0gZmlsdGVyQ29lZi4g
YTI7CisKKyAgICAvLyBQcmltZSB0aGUgcHVtcC4gKEFzc3VtZXMgdGhlIHNpZ25hbCBoYXMgbGVu
Z3RoID49IDIhKQorICAgIHlbMF0gPSBiMCAqIHNpZ25hbFswXTsKKyAgICB5WzFdID0gYjAgKiBz
aWduYWxbMV0gKyBiMSAqIHNpZ25hbFswXSAtIGExICogeVswXTsKKworICAgIC8vIEZpbHRlciBh
bGwgb2YgdGhlIHNpZ25hbCB0aGF0IHdlIGhhdmUuCisgICAgZm9yICh2YXIgayA9IDI7IGsgPCBN
YXRoLm1pbihzaWduYWwubGVuZ3RoLCBsZW4pOyArK2spIHsKKyAgICAgICAgeVtrXSA9IGIwICog
c2lnbmFsW2tdICsgYjEgKiBzaWduYWxbay0xXSArIGIyICogc2lnbmFsW2stMl0gLSBhMSAqIHlb
ay0xXSAtIGEyICogeVtrLTJdOworICAgIH0KKworICAgIC8vIElmIHdlIG5lZWQgdG8gZmlsdGVy
IG1vcmUsIGJ1dCBkb24ndCBoYXZlIGFueSBzaWduYWwgbGVmdCwKKyAgICAvLyBhc3N1bWUgdGhl
IHNpZ25hbCBpcyB6ZXJvLgorICAgIGZvciAodmFyIGsgPSBzaWduYWwubGVuZ3RoOyBrIDwgbGVu
OyArK2spIHsKKyAgICAgICAgeVtrXSA9IC0gYTEgKiB5W2stMV0gLSBhMiAqIHlbay0yXTsKKyAg
ICB9CisKKyAgICByZXR1cm4geTsKK30KKworZnVuY3Rpb24gY3JlYXRlSW1wdWxzZUJ1ZmZlcihj
b250ZXh0LCBsZW5ndGgpIHsKKyAgICB2YXIgaW1wdWxzZSA9IGNvbnRleHQuY3JlYXRlQnVmZmVy
KDEsIGxlbmd0aCwgY29udGV4dC5zYW1wbGVSYXRlKTsKKyAgICB2YXIgZGF0YSA9IGltcHVsc2Uu
Z2V0Q2hhbm5lbERhdGEoMCk7CisgICAgZm9yICh2YXIgayA9IDE7IGsgPCBkYXRhLmxlbmd0aDsg
KytrKSB7CisgICAgICAgIGRhdGFba10gPSAwOworICAgIH0KKyAgICBkYXRhWzBdID0gMTsKKwor
ICAgIHJldHVybiBpbXB1bHNlOworfQorCisKK2Z1bmN0aW9uIGNyZWF0ZVRlc3RBbmRSdW4oY29u
dGV4dCwgZmlsdGVyVHlwZSwgZmlsdGVyUGFyYW1ldGVycykgeworICAgIC8vIFRvIHRlc3QgdGhl
IGZpbHRlcnMsIHdlIGFwcGx5IGEgc2lnbmFsIChhbiBpbXB1bHNlKSB0byBlYWNoIG9mCisgICAg
Ly8gdGhlIHNwZWNpZmllZCBmaWx0ZXJzLCB3aXRoIGVhY2ggc2lnbmFsIHN0YXJ0aW5nIGF0IGEg
ZGlmZmVyZW50CisgICAgLy8gdGltZS4gIFRoZSBvdXRwdXQgb2YgdGhlIGZpbHRlcnMgaXMgc3Vt
bWVkIHRvZ2V0aGVyIGF0IHRoZQorICAgIC8vIG91dHB1dC4gIFRodXMgZm9yIGZpbHRlciBrLCB0
aGUgc2lnbmFsIGlucHV0IHRvIHRoZSBmaWx0ZXIKKyAgICAvLyBzdGFydHMgYXQgdGltZSBrICog
dGltZVN0ZXAuICBGb3IgdGhpcyB0byB3b3JrIHdlbGwsIHRpbWVTdGVwCisgICAgLy8gbXVzdCBi
ZSBsYXJnZSBlbm91Z2ggZm9yIHRoZSBvdXRwdXQgb2YgZWFjaCBmaWx0ZXIgdG8gaGF2ZQorICAg
IC8vIGRlY2F5ZWQgdG8gemVybyB3aXRoIHRpbWVTdGVwIHNlY29uZHMuICBUaGF0IHdheSB0aGUg
ZmlsdGVyCisgICAgLy8gb3V0cHV0cyBkb24ndCBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyLgor
ICAgIAorICAgIG5GaWx0ZXJzID0gTWF0aC5taW4oZmlsdGVyUGFyYW1ldGVycy5sZW5ndGgsIG1h
eEZpbHRlcnMpOworCisgICAgc2lnbmFsID0gbmV3IEFycmF5KG5GaWx0ZXJzKTsKKyAgICBmaWx0
ZXIgPSBuZXcgQXJyYXkobkZpbHRlcnMpOworCisgICAgaW1wdWxzZSA9IGNyZWF0ZUltcHVsc2VC
dWZmZXIoY29udGV4dCwgcHVsc2VMZW5ndGhGcmFtZXMpOworCisgICAgLy8gQ3JlYXRlIGFsbCBv
ZiB0aGUgc2lnbmFsIHNvdXJjZXMgYW5kIGZpbHRlcnMgdGhhdCB3ZSBuZWVkLgorICAgIGZvciAo
dmFyIGsgPSAwOyBrIDwgbkZpbHRlcnM7ICsraykgeworICAgICAgICBzaWduYWxba10gPSBjb250
ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpOworICAgICAgICBzaWduYWxba10uYnVmZmVyID0gaW1w
dWxzZTsKKworICAgICAgICBmaWx0ZXJba10gPSBjb250ZXh0LmNyZWF0ZUJpcXVhZEZpbHRlcigp
OworICAgICAgICBmaWx0ZXJba10udHlwZSA9IGZpbHRlclR5cGU7CisgICAgICAgIGZpbHRlcltr
XS5mcmVxdWVuY3kudmFsdWUgPSBjb250ZXh0LnNhbXBsZVJhdGUgLyAyICogZmlsdGVyUGFyYW1l
dGVyc1trXS5jdXRvZmY7CisgICAgICAgIGZpbHRlcltrXS5RLnZhbHVlID0gZmlsdGVyUGFyYW1l
dGVyc1trXS5xOworICAgICAgICBmaWx0ZXJba10uZ2Fpbi52YWx1ZSA9IGZpbHRlclBhcmFtZXRl
cnNba10uZ2FpbjsKKworICAgICAgICBzaWduYWxba10uY29ubmVjdChmaWx0ZXJba10pOworICAg
ICAgICBmaWx0ZXJba10uY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKTsKKworICAgICAgICBz
aWduYWxba10ubm90ZU9uKHRpbWVTdGVwICogayk7CisgICAgfQorCisgICAgY29udGV4dC5vbmNv
bXBsZXRlID0gY2hlY2tGaWx0ZXJSZXNwb25zZShmaWx0ZXJUeXBlLCBmaWx0ZXJQYXJhbWV0ZXJz
KTsKKyAgICBjb250ZXh0LnN0YXJ0UmVuZGVyaW5nKCk7Cit9CisKK2Z1bmN0aW9uIGFkZFNpZ25h
bChkZXN0LCBzcmMsIGRlc3RPZmZzZXQpIHsKKyAgICAvLyBBZGQgc3JjIHRvIGRlc3QgYXQgdGhl
IGdpdmVuIGRlc3Qgb2Zmc2V0LgorICAgIGZvciAodmFyIGsgPSBkZXN0T2Zmc2V0LCBqID0gMDsg
ayA8IGRlc3QubGVuZ3RoLCBqIDwgc3JjLmxlbmd0aDsgKytrLCArK2opIHsKKyAgICAgICAgZGVz
dFtrXSArPSBzcmNbal07CisgICAgfQorfQorCitmdW5jdGlvbiBnZW5lcmF0ZVJlZmVyZW5jZShm
aWx0ZXJUeXBlLCBmaWx0ZXJQYXJhbWV0ZXJzKSB7CisgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJh
eShyZW5kZXJMZW5ndGhTYW1wbGVzKTsKKyAgICB2YXIgZGF0YSA9IG5ldyBBcnJheShyZW5kZXJM
ZW5ndGhTYW1wbGVzKTsKKyAgICAvLyBJbml0aWFsaXplIHRoZSByZXN1bHQgYXJyYXkgYW5kIGRh
dGEuCisgICAgZm9yICh2YXIgayA9IDA7IGsgPCByZXN1bHQubGVuZ3RoOyArK2spIHsKKyAgICAg
ICAgcmVzdWx0W2tdID0gMDsKKyAgICAgICAgZGF0YVtrXSA9IDA7CisgICAgfQorICAgIC8vIE1h
a2UgZGF0YSBhbiBpbXB1bHNlLgorICAgIGRhdGFbMF0gPSAxOworICAgIAorICAgIGZvciAodmFy
IGsgPSAwOyBrIDwgbkZpbHRlcnM7ICsraykgeworICAgICAgICAvLyBGaWx0ZXIgYW4gaW1wdWxz
ZQorICAgICAgICB2YXIgZmlsdGVyQ29lZiA9IGNyZWF0ZUZpbHRlcihmaWx0ZXJUeXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbWV0ZXJzW2tdLmN1
dG9mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUGFyYW1l
dGVyc1trXS5xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQ
YXJhbWV0ZXJzW2tdLmdhaW4pOworICAgICAgICB2YXIgeSA9IGZpbHRlckRhdGEoZmlsdGVyQ29l
ZiwgZGF0YSwgcmVuZGVyTGVuZ3RoU2FtcGxlcyk7CisKKyAgICAgICAgLy8gQWNjdW11bGF0ZSB0
aGlzIGZpbHRlcmVkIGRhdGEgaW50byB0aGUgZmluYWwgb3V0cHV0IGF0IHRoZSBkZXNpcmVkIG9m
ZnNldC4KKyAgICAgICAgYWRkU2lnbmFsKHJlc3VsdCwgeSwgdGltZVRvU2FtcGxlRnJhbWUodGlt
ZVN0ZXAgKiBrLCBzYW1wbGVSYXRlKSk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworLy8gVHJ1ZSBpZiB0aGUgbnVtYmVyIGlzIG5vdCBhbiBpbmZpbml0eSBvciBOYU4KK2Z1bmN0
aW9uIGlzVmFsaWROdW1iZXIoeCkgeworICAgIHJldHVybiAhaXNOYU4oeCkgJiYgKHggIT0gSW5m
aW5pdHkpICYmICh4ICE9IC1JbmZpbml0eSk7Cit9CisKK2Z1bmN0aW9uIGNoZWNrRmlsdGVyUmVz
cG9uc2UoZmlsdGVyVHlwZSwgZmlsdGVyUGFyYW1ldGVycykgeworICAgIHJldHVybiBmdW5jdGlv
bihldmVudCkgeworICAgICAgICByZW5kZXJlZEJ1ZmZlciA9IGV2ZW50LnJlbmRlcmVkQnVmZmVy
OworICAgICAgICByZW5kZXJlZERhdGEgPSByZW5kZXJlZEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgw
KTsKKworICAgICAgICByZWZlcmVuY2UgPSBnZW5lcmF0ZVJlZmVyZW5jZShmaWx0ZXJUeXBlLCBm
aWx0ZXJQYXJhbWV0ZXJzKTsKKyAgICAgICAgCisgICAgICAgIHZhciBsZW4gPSBNYXRoLm1pbihy
ZW5kZXJlZERhdGEubGVuZ3RoLCByZWZlcmVuY2UubGVuZ3RoKTsKKworICAgICAgICB2YXIgc3Vj
Y2VzcyA9IHRydWU7CisKKyAgICAgICAgLy8gTWF4aW11bSBlcnJvciBiZXR3ZWVuIHJlbmRlcmVk
IGRhdGEgYW5kIGV4cGVjdGVkIGRhdGEKKyAgICAgICAgdmFyIG1heEVycm9yID0gMDsKKworICAg
ICAgICAvLyBTYW1wbGUgb2Zmc2V0IHdoZXJlIHRoZSBtYXhpbXVtIGVycm9yIG9jY3VycmVkLgor
ICAgICAgICB2YXIgbWF4UG9zaXRpb24gPSAwOworCisgICAgICAgIC8vIE51bWJlciBvZiBpbmZp
bml0aWVzIG9yIE5hTnMgdGhhdCBvY2N1cnJlZCBpbiB0aGUgcmVuZGVyZWQgZGF0YS4KKyAgICAg
ICAgdmFyIGludmFsaWROdW1iZXJDb3VudCA9IDA7CisKKyAgICAgICAgaWYgKG5GaWx0ZXJzICE9
IGZpbHRlclBhcmFtZXRlcnMubGVuZ3RoKSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJUZXN0
IHdhbnRlZCAiICsgZmlsdGVyUGFyYW1ldGVycy5sZW5ndGggKyAiIGZpbHRlcnMgYnV0IG9ubHkg
IiArIG1heEZpbHRlcnMgKyAiIGFsbG93ZWQuIik7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBDb21wYXJlIHRoZSByZW5kZXJlZCBzaWduYWwg
d2l0aCBvdXIgcmVmZXJlbmNlLCBrZWVwaW5nCisgICAgICAgIC8vIHRyYWNrIG9mIHRoZSBtYXhp
bXVtIGRpZmZlcmVuY2UgKGFuZCB0aGUgb2Zmc2V0IG9mIHRoZSBtYXgKKyAgICAgICAgLy8gZGlm
ZmVyZW5jZS4pICBDaGVjayBmb3IgYmFkIG51bWJlcnMgaW4gdGhlIHJlbmRlcmVkIG91dHB1dAor
ICAgICAgICAvLyB0b28uICBUaGVyZSBzaG91bGRuJ3QgYmUgYW55LgorICAgICAgICBmb3IgKHZh
ciBrID0gMDsgayA8IGxlbjsgKytrKSB7CisgICAgICAgICAgICB2YXIgZXJyID0gTWF0aC5hYnMo
cmVuZGVyZWREYXRhW2tdIC0gcmVmZXJlbmNlW2tdKTsKKyAgICAgICAgICAgIGlmIChlcnIgPiBt
YXhFcnJvcikgeworICAgICAgICAgICAgICAgIG1heEVycm9yID0gZXJyOworICAgICAgICAgICAg
ICAgIG1heFBvc2l0aW9uID0gazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghaXNW
YWxpZE51bWJlcihyZW5kZXJlZERhdGFba10pKSB7CisgICAgICAgICAgICAgICAgKytpbnZhbGlk
TnVtYmVyQ291bnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW52
YWxpZE51bWJlckNvdW50ID4gMCkgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiUmVuZGVyZWQg
b3V0cHV0IGhhcyAiICsgaW52YWxpZE51bWJlckNvdW50ICsgIiBpbmZpbml0aWVzIG9yIE5hTnMu
Iik7CisgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB0ZXN0UGFzc2VkKCJSZW5kZXJlZCBvdXRwdXQgZGlkIG5vdCBoYXZlIGluZmluaXRp
ZXMgb3IgTmFOcy4iKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1heEVycm9y
IDw9IG1heEFsbG93ZWRFcnJvcikgeworICAgICAgICAgICAgdGVzdFBhc3NlZChmaWx0ZXJUeXBl
TmFtZVtmaWx0ZXJUeXBlXSArICIgcmVzcG9uc2UgaXMgY29ycmVjdC4iKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoZmlsdGVyVHlwZU5hbWVbZmlsdGVyVHlwZV0g
KyAiIHJlc3BvbnNlIGlzIGluY29ycmVjdC4gIE1heCBlcnIgPSAiICsgbWF4RXJyb3IgKyAiIGF0
ICIgKyBtYXhQb3NpdGlvbiArICIuICBUaHJlc2hvbGQgPSAiICsgbWF4QWxsb3dlZEVycm9yKTsK
KyAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIlRlc3Qgc2lnbmFsIHdh
cyBjb3JyZWN0bHkgZmlsdGVyZWQuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0
ZXN0RmFpbGVkKCJUZXN0IHNpZ25hbCB3YXMgbm90IGNvcnJlY3RseSBmaWx0ZXJlZC4iKTsKKyAg
ICAgICAgfQorICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9Cit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>