<?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>81092</bug_id>
          
          <creation_ts>2012-03-14 01:57:13 -0700</creation_ts>
          <short_desc>add stereo source support in EqualPowerPanner</short_desc>
          <delta_ts>2012-04-11 12:32:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Audio</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Wei James (wistoch)">james.wei</reporter>
          <assigned_to name="Wei James (wistoch)">james.wei</assigned_to>
          <cc>crogers</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>578255</commentid>
    <comment_count>0</comment_count>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2012-03-14 01:57:13 -0700</bug_when>
    <thetext>add stereo source support in EqualPowerPanner</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578262</commentid>
    <comment_count>1</comment_count>
      <attachid>131810</attachid>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2012-03-14 02:05:30 -0700</bug_when>
    <thetext>Created attachment 131810
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578671</commentid>
    <comment_count>2</comment_count>
      <attachid>131810</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-14 12:51:08 -0700</bug_when>
    <thetext>Comment on attachment 131810
Patch

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

James, thanks for thinking about this and working on it!

&gt; Source/WebCore/platform/audio/EqualPowerPanner.cpp:112
&gt; +        *destinationR++ = static_cast&lt;float&gt;((inputL + inputR) / 2 * gainR);

There&apos;s a better technique for panning stereo sources where the stereo information is not lost.  Here&apos;s how the algorithm works:

* If the azimuth is 0 then pass the signal through unchanged: sourceL -&gt; destL, sourceR -&gt; destR
* If the azimuth is -90 then only pass the left: sourceL -&gt; destL, silence -&gt; destR
* If the azimuth is +90 then only pass the right: silence -&gt; destL, sourceR -&gt; destR
* If -90 &lt;= azimuth &lt;= 0 then: sourceL -&gt; destL, and &quot;equal-power pan&quot; sourceR by transforming the &quot;azimuth&quot; value from the range -90 -&gt; 0 into the range -90 -&gt; +90 and then use the normal equal-power panning equation as in mono
* if  0 &lt;= azimuth &lt;= +90 then similar to previous case but reverse the roles of left and right

It should be possible to code this algorithm so that the logic is clear to read and understand.

Also, I would create a separate code-path for the simple mono case (that&apos;s in the current code)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579122</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-14 21:57:14 -0700</bug_when>
    <thetext>I&apos;m sorry, I made a mistake about the fully panned -90 and +90 positions.  In these cases, please follow the panning rules in the last two steps.  I hope this gives the general idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581650</commentid>
    <comment_count>4</comment_count>
      <attachid>132548</attachid>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2012-03-18 23:44:05 -0700</bug_when>
    <thetext>Created attachment 132548
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582047</commentid>
    <comment_count>5</comment_count>
      <attachid>132548</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-19 12:26:09 -0700</bug_when>
    <thetext>Comment on attachment 132548
Patch

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

James, thanks for the updated patch:

&gt; Source/WebCore/platform/audio/EqualPowerPanner.cpp:99
&gt; +            desiredGainR = sin(0.5 * piDouble * desiredPanPosition);

This is close, but is not accounting for the right channel&apos;s contribution to the mix completely.  For example, consider if azimuth==-90.  With this current code the right channel will not even appear in the mix at all.  But what we want is for the right channel input to appear in the mix completely panned to the left (and summed with the left channel).

outputL = inputL + inputR * cos(0.5 * piDouble * desiredPanPosition);
outputR = inputR * sin(0.5 * piDouble * desiredPanPosition);

And similarly for the 0-&gt;+90 case below (with roles of left and right reversed)

It will probably be easiest to write this code if you use separate while loops for the mono vs. stereo cases replacing the while() loop on line 124.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582880</commentid>
    <comment_count>6</comment_count>
      <attachid>132548</attachid>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2012-03-20 02:42:29 -0700</bug_when>
    <thetext>Comment on attachment 132548
Patch

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

&gt;&gt; Source/WebCore/platform/audio/EqualPowerPanner.cpp:99
&gt;&gt; +            desiredGainR = sin(0.5 * piDouble * desiredPanPosition);
&gt; 
&gt; This is close, but is not accounting for the right channel&apos;s contribution to the mix completely.  For example, consider if azimuth==-90.  With this current code the right channel will not even appear in the mix at all.  But what we want is for the right channel input to appear in the mix completely panned to the left (and summed with the left channel).
&gt; 
&gt; outputL = inputL + inputR * cos(0.5 * piDouble * desiredPanPosition);
&gt; outputR = inputR * sin(0.5 * piDouble * desiredPanPosition);
&gt; 
&gt; And similarly for the 0-&gt;+90 case below (with roles of left and right reversed)
&gt; 
&gt; It will probably be easiest to write this code if you use separate while loops for the mono vs. stereo cases replacing the while() loop on line 124.

thanks for the guidance. I will fix it. thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582881</commentid>
    <comment_count>7</comment_count>
      <attachid>132783</attachid>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2012-03-20 02:43:25 -0700</bug_when>
    <thetext>Created attachment 132783
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583198</commentid>
    <comment_count>8</comment_count>
      <attachid>132783</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-03-20 10:29:51 -0700</bug_when>
    <thetext>Comment on attachment 132783
Patch

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

&gt; Source/WebCore/platform/audio/EqualPowerPanner.cpp:54
&gt; +    unsigned inputChannelNumber = inputBus-&gt;numberOfChannels();

inputChannelNumber -&gt; numberOfChannels    (or numberOfInputChannels)

&gt; Source/WebCore/platform/audio/EqualPowerPanner.cpp:125
&gt; +            float inputR = *sourceR++;

Why are we accessing two inputs (inputL and inputR) when this is the mono case?

&gt; Source/WebCore/platform/audio/EqualPowerPanner.cpp:148
&gt; +                *destinationR++ = static_cast&lt;float&gt;(inputR + inputR * gainR);

I think this should be (inputR + inputL * gainR)

Also please check layout test below to see why it was passing with this mistake

&gt; LayoutTests/webaudio/resources/panner-model-testing.js:66
&gt; +    channelNumber = sourceChannelNumber;

sourceChannelNumber -&gt; numberOfSourceChannels
channelNumber -&gt; numberOfChannels</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583891</commentid>
    <comment_count>9</comment_count>
      <attachid>132989</attachid>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2012-03-21 01:34:52 -0700</bug_when>
    <thetext>Created attachment 132989
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583892</commentid>
    <comment_count>10</comment_count>
      <attachid>132783</attachid>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2012-03-21 01:37:48 -0700</bug_when>
    <thetext>Comment on attachment 132783
Patch

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

&gt;&gt; Source/WebCore/platform/audio/EqualPowerPanner.cpp:54
&gt;&gt; +    unsigned inputChannelNumber = inputBus-&gt;numberOfChannels();
&gt; 
&gt; inputChannelNumber -&gt; numberOfChannels    (or numberOfInputChannels)

fixed. thanks

&gt;&gt; Source/WebCore/platform/audio/EqualPowerPanner.cpp:125
&gt;&gt; +            float inputR = *sourceR++;
&gt; 
&gt; Why are we accessing two inputs (inputL and inputR) when this is the mono case?

In previous patch, I want to reduce the code redundancy so merge three while loop into one. 

fixed in this patch. thanks.

&gt;&gt; Source/WebCore/platform/audio/EqualPowerPanner.cpp:148
&gt;&gt; +                *destinationR++ = static_cast&lt;float&gt;(inputR + inputR * gainR);
&gt; 
&gt; I think this should be (inputR + inputL * gainR)
&gt; 
&gt; Also please check layout test below to see why it was passing with this mistake

sorry for this mistake. fixed. 

because both inputL and inputR have the same value. so the test pass without error.

&gt;&gt; LayoutTests/webaudio/resources/panner-model-testing.js:66
&gt;&gt; +    channelNumber = sourceChannelNumber;
&gt; 
&gt; sourceChannelNumber -&gt; numberOfSourceChannels
&gt; channelNumber -&gt; numberOfChannels

fixed. thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600154</commentid>
    <comment_count>11</comment_count>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2012-04-11 02:27:15 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 132783 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132783&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/audio/EqualPowerPanner.cpp:54
&gt; &gt;&gt; +    unsigned inputChannelNumber = inputBus-&gt;numberOfChannels();
&gt; &gt; 
&gt; &gt; inputChannelNumber -&gt; numberOfChannels    (or numberOfInputChannels)
&gt; 
&gt; fixed. thanks
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/audio/EqualPowerPanner.cpp:125
&gt; &gt;&gt; +            float inputR = *sourceR++;
&gt; &gt; 
&gt; &gt; Why are we accessing two inputs (inputL and inputR) when this is the mono case?
&gt; 
&gt; In previous patch, I want to reduce the code redundancy so merge three while loop into one. 
&gt; 
&gt; fixed in this patch. thanks.
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/audio/EqualPowerPanner.cpp:148
&gt; &gt;&gt; +                *destinationR++ = static_cast&lt;float&gt;(inputR + inputR * gainR);
&gt; &gt; 
&gt; &gt; I think this should be (inputR + inputL * gainR)
&gt; &gt; 
&gt; &gt; Also please check layout test below to see why it was passing with this mistake
&gt; 
&gt; sorry for this mistake. fixed. 
&gt; 
&gt; because both inputL and inputR have the same value. so the test pass without error.
&gt; 
&gt; &gt;&gt; LayoutTests/webaudio/resources/panner-model-testing.js:66
&gt; &gt;&gt; +    channelNumber = sourceChannelNumber;
&gt; &gt; 
&gt; &gt; sourceChannelNumber -&gt; numberOfSourceChannels
&gt; &gt; channelNumber -&gt; numberOfChannels
&gt; 
&gt; fixed. thanks

chris, is this patch ok? thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600463</commentid>
    <comment_count>12</comment_count>
      <attachid>132989</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-04-11 12:02:55 -0700</bug_when>
    <thetext>Comment on attachment 132989
Patch

Thanks James!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600492</commentid>
    <comment_count>13</comment_count>
      <attachid>132989</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-11 12:32:52 -0700</bug_when>
    <thetext>Comment on attachment 132989
Patch

Clearing flags on attachment: 132989

Committed r113889: &lt;http://trac.webkit.org/changeset/113889&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600493</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-11 12:32:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>131810</attachid>
            <date>2012-03-14 02:05:30 -0700</date>
            <delta_ts>2012-03-18 23:44:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81092-20120314170525.patch</filename>
            <type>text/plain</type>
            <size>9706</size>
            <attacher name="Wei James (wistoch)">james.wei</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMTI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTg5NTMzNzRlOGQ0ODhk
ZjE0NTM5ODJiMTUxMDhkNzUyN2EzOTM5ZC4uNGFmYjUwNjJjYTgxMTExMmNkN2ZiOTQ1Nzc3ODFm
ODNmOGYxOTM3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAzLTE0ICBXZWkg
SmFtZXMgIDxqYW1lcy53ZWlAaW50ZWwuY29tPgorCisgICAgICAgIGFkZCBzdGVyZW8gc291cmNl
IHN1cHBvcnQgaW4gRXF1YWxQb3dlclBhbm5lcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODEwOTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUZXN0OiB3ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci1zdGVy
ZW8uaHRtbAorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRXF1YWxQb3dlclBhbm5lci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpFcXVhbFBvd2VyUGFubmVyOjpwYW4pOgorCiAyMDEyLTAzLTA3
ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkLCByb2xsaW5nIG91dCByMTEwMTI2LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vRXF1YWxQb3dlclBhbm5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmNwcAppbmRleCBhMmQyZGZmNGMwMDBhODJi
ZjQ0ODgzOWQxMjBkM2QyNjk2ZGZiZWQ1Li5lYWI1MzRlOTVlNGExM2ZkNzBjODk5MDg3MTQ4ZWU2
ZjZiMmNiNDVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9FcXVh
bFBvd2VyUGFubmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9FcXVh
bFBvd2VyUGFubmVyLmNwcApAQCAtNTEsOCArNTEsOCBAQCBFcXVhbFBvd2VyUGFubmVyOjpFcXVh
bFBvd2VyUGFubmVyKGZsb2F0IHNhbXBsZVJhdGUpCiAKIHZvaWQgRXF1YWxQb3dlclBhbm5lcjo6
cGFuKGRvdWJsZSBhemltdXRoLCBkb3VibGUgLyplbGV2YXRpb24qLywgY29uc3QgQXVkaW9CdXMq
IGlucHV0QnVzLCBBdWRpb0J1cyogb3V0cHV0QnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQog
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgc3RlcmVvIHNvdXJjZXMKLSAgICBib29sIGlzSW5w
dXRTYWZlID0gaW5wdXRCdXMgJiYgaW5wdXRCdXMtPm51bWJlck9mQ2hhbm5lbHMoKSA9PSAxICYm
IGZyYW1lc1RvUHJvY2VzcyA8PSBpbnB1dEJ1cy0+bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgbnVt
YmVyT2ZJbnB1dENoYW5uZWxzID0gaW5wdXRCdXMtPm51bWJlck9mQ2hhbm5lbHMoKTsKKyAgICBi
b29sIGlzSW5wdXRTYWZlID0gaW5wdXRCdXMgJiYgKG51bWJlck9mSW5wdXRDaGFubmVscyA9PSAx
IHx8IG51bWJlck9mSW5wdXRDaGFubmVscyA9PSAyKSAmJiBmcmFtZXNUb1Byb2Nlc3MgPD0gaW5w
dXRCdXMtPmxlbmd0aCgpOwogICAgIEFTU0VSVChpc0lucHV0U2FmZSk7CiAgICAgaWYgKCFpc0lu
cHV0U2FmZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNjIsMTIgKzYyLDEyIEBAIHZvaWQgRXF1YWxQ
b3dlclBhbm5lcjo6cGFuKGRvdWJsZSBhemltdXRoLCBkb3VibGUgLyplbGV2YXRpb24qLywgY29u
c3QgQXVkaW9CdXMqCiAgICAgaWYgKCFpc091dHB1dFNhZmUpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGNvbnN0IEF1ZGlvQ2hhbm5lbCogY2hhbm5lbCA9IGlucHV0QnVzLT5jaGFubmVsKDApOwot
ICAgIGNvbnN0IGZsb2F0KiBzb3VyY2VQID0gY2hhbm5lbC0+ZGF0YSgpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICBjb25zdCBmbG9hdCogc291cmNlTCA9IGlucHV0QnVzLT5j
aGFubmVsKDApLT5kYXRhKCk7CisgICAgY29uc3QgZmxvYXQqIHNvdXJjZVIgPSBudW1iZXJPZklu
cHV0Q2hhbm5lbHMgPiAxID8gaW5wdXRCdXMtPmNoYW5uZWwoMSktPmRhdGEoKSA6IHNvdXJjZUw7
CiAgICAgZmxvYXQqIGRlc3RpbmF0aW9uTCA9IG91dHB1dEJ1cy0+Y2hhbm5lbEJ5VHlwZShBdWRp
b0J1czo6Q2hhbm5lbExlZnQpLT5tdXRhYmxlRGF0YSgpOwogICAgIGZsb2F0KiBkZXN0aW5hdGlv
blIgPSBvdXRwdXRCdXMtPmNoYW5uZWxCeVR5cGUoQXVkaW9CdXM6OkNoYW5uZWxSaWdodCktPm11
dGFibGVEYXRhKCk7CiAKLSAgICBpZiAoIXNvdXJjZVAgfHwgIWRlc3RpbmF0aW9uTCB8fCAhZGVz
dGluYXRpb25SKQorICAgIGlmICghc291cmNlTCB8fCAhc291cmNlUiB8fCAhZGVzdGluYXRpb25M
IHx8ICFkZXN0aW5hdGlvblIpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIENsYW1wIGF6aW11
dGggdG8gYWxsb3dlZCByYW5nZSBvZiAtMTgwIC0+ICsxODAuCkBAIC0xMDQsMTEgKzEwNCwxMiBA
QCB2b2lkIEVxdWFsUG93ZXJQYW5uZXI6OnBhbihkb3VibGUgYXppbXV0aCwgZG91YmxlIC8qZWxl
dmF0aW9uKi8sIGNvbnN0IEF1ZGlvQnVzKgogICAgIGludCBuID0gZnJhbWVzVG9Qcm9jZXNzOwog
CiAgICAgd2hpbGUgKG4tLSkgewotICAgICAgICBmbG9hdCBpbnB1dCA9ICpzb3VyY2VQKys7Cisg
ICAgICAgIGZsb2F0IGlucHV0TCA9ICpzb3VyY2VMKys7CisgICAgICAgIGZsb2F0IGlucHV0UiA9
ICpzb3VyY2VSKys7CiAgICAgICAgIGdhaW5MICs9IChkZXNpcmVkR2FpbkwgLSBnYWluTCkgKiBT
bW9vdGhpbmdDb25zdGFudDsKICAgICAgICAgZ2FpblIgKz0gKGRlc2lyZWRHYWluUiAtIGdhaW5S
KSAqIFNtb290aGluZ0NvbnN0YW50OwotICAgICAgICAqZGVzdGluYXRpb25MKysgPSBzdGF0aWNf
Y2FzdDxmbG9hdD4oaW5wdXQgKiBnYWluTCk7Ci0gICAgICAgICpkZXN0aW5hdGlvblIrKyA9IHN0
YXRpY19jYXN0PGZsb2F0PihpbnB1dCAqIGdhaW5SKTsKKyAgICAgICAgKmRlc3RpbmF0aW9uTCsr
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChpbnB1dEwgKyBpbnB1dFIpIC8gMiAqIGdhaW5MKTsKKyAg
ICAgICAgKmRlc3RpbmF0aW9uUisrID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KChpbnB1dEwgKyBpbnB1
dFIpIC8gMiAqIGdhaW5SKTsKICAgICB9CiAKICAgICBtX2dhaW5MID0gZ2Fpbkw7CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
ZGYzYzliZTYxMzE5MjdjOGFjZTc0ZmVmMTg5MWMwNzMzZmQyOGQ5ZS4uYWEzMzBmZTc4YmE0NWM5
N2FjMmVkMmQ2ZjliNGU0Y2ZjZDBiYmM0OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEyLTAz
LTE0ICBXZWkgSmFtZXMgIDxqYW1lcy53ZWlAaW50ZWwuY29tPgorCisgICAgICAgIGFkZCBzdGVy
ZW8gc291cmNlIHN1cHBvcnQgaW4gRXF1YWxQb3dlclBhbm5lcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODEwOTIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdlYmF1ZGlvL3Bhbm5lci1lcXVhbHBvd2Vy
LXN0ZXJlby1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmF1ZGlvL3Bhbm5lci1l
cXVhbHBvd2VyLXN0ZXJlby5odG1sOiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJhdWRpby9w
YW5uZXItZXF1YWxwb3dlci5odG1sLgorICAgICAgICAqIHdlYmF1ZGlvL3Bhbm5lci1lcXVhbHBv
d2VyLmh0bWw6CisgICAgICAgICogd2ViYXVkaW8vcmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanM6
CisgICAgICAgIChjcmVhdGVTdGVyZW9JbXB1bHNlQnVmZmVyKToKKyAgICAgICAgKiB3ZWJhdWRp
by9yZXNvdXJjZXMvcGFubmVyLW1vZGVsLXRlc3RpbmcuanM6CisgICAgICAgIChjcmVhdGVHcmFw
aCk6CisgICAgICAgIChjcmVhdGVUZXN0QW5kUnVuKToKKwogMjAxMi0wMy0wNyAgU2hlcmlmZiBC
b3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjExMDEyNi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Bh
bm5lci1lcXVhbHBvd2VyLXN0ZXJlby1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRp
by9wYW5uZXItZXF1YWxwb3dlci1zdGVyZW8tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5ODdj
NzJlMjVkM2U1OWQ2MGVmNjExNmQ5Mjk4YjA5MTJmMzIwNTgKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci1zdGVyZW8tZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMTMgQEAKK1Rlc3QgZXF1YWwtcG93ZXIgcGFubmVyIG1vZGVsIG9mIEF1ZGlv
UGFubmVyTm9kZSB3aXRoIHN0ZXJlbyBzb3VyY2UuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworUEFTUyBOdW1iZXIgb2YgaW1wdWxzZXMgbWF0Y2hlcyB0aGUgbnVtYmVyIG9mIHBhbm5l
ciBub2Rlcy4KK1BBU1MgQWxsIGltcHVsc2VzIGF0IGV4cGVjdGVkIG9mZnNldHMuCitQQVNTIExl
ZnQgY2hhbm5lbCBnYWluIHZhbHVlcyBhcmUgY29ycmVjdC4KK1BBU1MgUmlnaHQgY2hhbm5lbCBn
YWluIHZhbHVlcyBhcmUgY29ycmVjdC4KK1BBU1MgRXF1YWxQb3dlciBwYW5uZXIgdGVzdCBwYXNz
ZWQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci1zdGVyZW8u
aHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Bhbm5lci1lcXVhbHBvd2VyLXN0ZXJlby5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmQzMWM2OWM2MDc0ZTA0YmY3MmVmMGRlNjkxOTRiNTJkMWM5ODNmYzYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci1z
dGVyZW8uaHRtbApAQCAtMCwwICsxLDQ0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1cz
Qy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorICA8aGVhZD4KKyAg
ICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3Qtc3R5bGUuY3NzIi8+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5n
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcGFubmVy
LW1vZGVsLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICA8L2hlYWQ+CisKKyAgPGJvZHk+CisgICAg
PGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorCisgICAgPHNjcmlwdD4KKyAgICAgIGRlc2NyaXB0aW9uKCJUZXN0IGVxdWFsLXBvd2VyIHBh
bm5lciBtb2RlbCBvZiBBdWRpb1Bhbm5lck5vZGUgd2l0aCBzdGVyZW8gc291cmNlLiIpOworCisg
ICAgICAvLyBUbyB0ZXN0IHRoZSBwYW5uZXIsIHdlIGNyZWF0ZSBhIG51bWJlciBvZiBwYW5uZXIg
bm9kZXMKKyAgICAgIC8vIGVxdWFsbHkgc3BhY2VkIG9uIGEgc2VtaWNpcmNsZSBhdCB1bml0IGRp
c3RhbmNlLiAgVGhlCisgICAgICAvLyBzZW1pY2lyY2xlIGNvdmVycyB0aGUgYXppbXV0aCByYW5n
ZSBmcm9tIC05MCB0byA5MCBkZWcsCisgICAgICAvLyBjb3ZlcmluZyBmdWxsIGxlZnQgdG8gZnVs
bCByaWdodC4gIEVhY2ggc291cmNlIGlzIGFuIGltcHVsc2UKKyAgICAgIC8vIHR1cm5pbmcgYXQg
YSBkaWZmZXJlbnQgdGltZSBhbmQgd2UgY2hlY2sgdGhhdCB0aGUgcmVuZGVyZWQKKyAgICAgIC8v
IGltcHVsc2UgaGFzIHRoZSBleHBlY3RlZCBnYWluLgorICAgICAgZnVuY3Rpb24gcnVuVGVzdCgp
IHsKKyAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgIH0KKworICAg
ICAgICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworICAgICAgICAgIC8vIENyZWF0
ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuCisgICAgICAgICAgY29udGV4dCA9IG5ldyB3ZWJraXRB
dWRpb0NvbnRleHQoMiwgc2FtcGxlUmF0ZSAqIHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJh
dGUpOworCisgICAgICAgICAgY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCBub2Rlc1RvQ3JlYXRl
LCAyKTsKKyAgICAgIH0KKworICAgICAgcnVuVGVzdCgpOworICAgICAgc3VjY2Vzc2Z1bGx5UGFy
c2VkID0gdHJ1ZTsKKworICAgIDwvc2NyaXB0PgorCisgICAgPHNjcmlwdCBzcmM9Ii4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisgIDwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Bhbm5lci1lcXVhbHBvd2VyLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci5odG1sCmluZGV4IDVl
YTJiMzMwM2Y0MmRkMGM5MDVjNjVlNTU2MDQ0ZmQ3NDk2MjA5MzQuLjI4MmY5MDY3Y2MzZjkwMWZj
Y2NiOWIxYTVjYzkyYmJlNWFiMWNhYzkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmF1ZGlv
L3Bhbm5lci1lcXVhbHBvd2VyLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcGFubmVy
LWVxdWFscG93ZXIuaHRtbApAQCAtMzEsNyArMzEsNyBAQAogICAgICAgICAgIC8vIENyZWF0ZSBv
ZmZsaW5lIGF1ZGlvIGNvbnRleHQuCiAgICAgICAgICAgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRp
b0NvbnRleHQoMiwgc2FtcGxlUmF0ZSAqIHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUp
OwogCi0gICAgICAgICAgY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCBub2Rlc1RvQ3JlYXRlKTsK
KyAgICAgICAgICBjcmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsIG5vZGVzVG9DcmVhdGUsIDEpOwog
ICAgICAgfQogCiAgICAgICBydW5UZXN0KCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJh
dWRpby9yZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jl
c291cmNlcy9hdWRpby10ZXN0aW5nLmpzCmluZGV4IGFmMGFkMjdhMjMyZTI1OWNkODFmZTUzM2Q1
NzRhN2UyOTVjY2RmODcuLmQwNzYyMGQzY2RjZjMxN2JiZGY4MTk1MGYzYzQ3ZjBhMzgxYWI0NzUg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9hdWRpby10ZXN0aW5n
LmpzCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9hdWRpby10ZXN0aW5nLmpz
CkBAIC0xMTUsNiArMTE1LDIzIEBAIGZ1bmN0aW9uIGNyZWF0ZUltcHVsc2VCdWZmZXIoY29udGV4
dCwgc2FtcGxlRnJhbWVMZW5ndGgpIHsKICAgICByZXR1cm4gYXVkaW9CdWZmZXI7CiB9CiAKKy8v
IENyZWF0ZSBhIHN0ZXJlbyBpbXB1bHNlIGluIGEgYnVmZmVyIG9mIGxlbmd0aCBzYW1wbGVGcmFt
ZUxlbmd0aAorZnVuY3Rpb24gY3JlYXRlU3RlcmVvSW1wdWxzZUJ1ZmZlcihjb250ZXh0LCBzYW1w
bGVGcmFtZUxlbmd0aCkgeworICAgIHZhciBhdWRpb0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlQnVm
ZmVyKDIsIHNhbXBsZUZyYW1lTGVuZ3RoLCBjb250ZXh0LnNhbXBsZVJhdGUpOworICAgIHZhciBu
ID0gYXVkaW9CdWZmZXIubGVuZ3RoOworICAgIHZhciBkYXRhTCA9IGF1ZGlvQnVmZmVyLmdldENo
YW5uZWxEYXRhKDApOworICAgIHZhciBkYXRhUiA9IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRh
KDEpOworCisgICAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyArK2spIHsKKyAgICAgICAgZGF0YUxb
a10gPSAwOworICAgICAgICBkYXRhUltrXSA9IDA7CisgICAgfQorICAgIGRhdGFMWzBdID0gMTsK
KyAgICBkYXRhUlswXSA9IDE7CisKKyAgICByZXR1cm4gYXVkaW9CdWZmZXI7Cit9CisKIC8vIENv
bnZlcnQgdGltZSAoaW4gc2Vjb25kcykgdG8gc2FtcGxlIGZyYW1lcy4KIGZ1bmN0aW9uIHRpbWVU
b1NhbXBsZUZyYW1lKHRpbWUsIHNhbXBsZVJhdGUpIHsKICAgICByZXR1cm4gTWF0aC5mbG9vcigw
LjUgKyB0aW1lICogc2FtcGxlUmF0ZSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRp
by9yZXNvdXJjZXMvcGFubmVyLW1vZGVsLXRlc3RpbmcuanMgYi9MYXlvdXRUZXN0cy93ZWJhdWRp
by9yZXNvdXJjZXMvcGFubmVyLW1vZGVsLXRlc3RpbmcuanMKaW5kZXggYzhlNzMzYzgzNDYwZjkw
ZGIwYzQ4MWU2NDc5YWIyYTQxNDBkNTYwNi4uY2Y2NzM5OGE3N2RhZDA2MWExMzRhMTA0ZWRmNmQ2
NmI3ODkzYTY1MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL3Bh
bm5lci1tb2RlbC10ZXN0aW5nLmpzCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNl
cy9wYW5uZXItbW9kZWwtdGVzdGluZy5qcwpAQCAtMSw1ICsxLDcgQEAKIHZhciBzYW1wbGVSYXRl
ID0gNDQxMDAuMDsKIAordmFyIHNvdXJjZUNoYW5uZWxOdW1iZXIgPSAwOworCiAvLyBUaW1lIHN0
ZXAgd2hlbiBlYWNoIHBhbm5lciBub2RlIHN0YXJ0cy4KIHZhciB0aW1lU3RlcCA9IDAuMDAxOwog
CkBAIC0zMyw3ICszNSwxMCBAQCBmdW5jdGlvbiBjcmVhdGVHcmFwaChjb250ZXh0LCBub2RlQ291
bnQpIHsKICAgICAvLyB0byBpbmNsdWRlIGJvdGggMCBhbmQgMTgwIGRlZy4KICAgICB2YXIgYW5n
bGVTdGVwID0gTWF0aC5QSSAvIChub2RlQ291bnQgLSAxKTsKIAotICAgIGltcHVsc2UgPSBjcmVh
dGVJbXB1bHNlQnVmZmVyKGNvbnRleHQsIHB1bHNlTGVuZ3RoRnJhbWVzKTsKKyAgICBpZiAoY2hh
bm5lbE51bWJlciA9PSAyKQorICAgICAgICBpbXB1bHNlID0gY3JlYXRlU3RlcmVvSW1wdWxzZUJ1
ZmZlcihjb250ZXh0LCBwdWxzZUxlbmd0aEZyYW1lcyk7CisgICAgZWxzZQorICAgICAgICBpbXB1
bHNlID0gY3JlYXRlSW1wdWxzZUJ1ZmZlcihjb250ZXh0LCBwdWxzZUxlbmd0aEZyYW1lcyk7CiAK
ICAgICBmb3IgKHZhciBrID0gMDsgayA8IG5vZGVDb3VudDsgKytrKSB7CiAgICAgICAgIGJ1ZmZl
clNvdXJjZVtrXSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7CkBAIC01Niw3ICs2MSw5
IEBAIGZ1bmN0aW9uIGNyZWF0ZUdyYXBoKGNvbnRleHQsIG5vZGVDb3VudCkgewogICAgIH0KIH0K
IAotZnVuY3Rpb24gY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCBub2RlQ291bnQpIHsKK2Z1bmN0
aW9uIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgbm9kZUNvdW50LCBzb3VyY2VDaGFubmVsTnVt
YmVyKSB7CisgICAgY2hhbm5lbE51bWJlciA9IHNvdXJjZUNoYW5uZWxOdW1iZXI7CisKICAgICBj
cmVhdGVHcmFwaChjb250ZXh0LCBub2RlQ291bnQpOwogCiAgICAgY29udGV4dC5vbmNvbXBsZXRl
ID0gY2hlY2tSZXN1bHQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132548</attachid>
            <date>2012-03-18 23:44:05 -0700</date>
            <delta_ts>2012-03-20 02:43:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81092-20120319144400.patch</filename>
            <type>text/plain</type>
            <size>13338</size>
            <attacher name="Wei James (wistoch)">james.wei</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwODI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTk2NjZmZTVmNjE4MDVk
NWI1ODI0YmYzZTYxODg3MmMwNjQxNWQzNS4uZDdlYTE1YTM0ZjIyYTRhYTAyNDllYjQxMTFiOTM1
OTJiZDc3YjE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAzLTE4ICBXZWkg
SmFtZXMgIDxqYW1lcy53ZWlAaW50ZWwuY29tPgorCisgICAgICAgIGFkZCBzdGVyZW8gc291cmNl
IHN1cHBvcnQgaW4gRXF1YWxQb3dlclBhbm5lcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODEwOTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUZXN0OiB3ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci1zdGVy
ZW8uaHRtbAorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRXF1YWxQb3dlclBhbm5lci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpFcXVhbFBvd2VyUGFubmVyOjpwYW4pOgorCiAyMDEyLTAzLTE0
ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgQVhEZXNj
cmlwdGlvbiBmb3IgSFRNTDUgZm9vdGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0VxdWFsUG93ZXJQYW5uZXIuY3BwCmluZGV4IGEyZDJkZmY0YzAwMGE4MmJmNDQ4ODM5
ZDEyMGQzZDI2OTZkZmJlZDUuLjlkOWU0MzA3NzcxYTcwMDZlYmRmNGFjMGFiNDQ2NTRmYzlhOTZk
MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0VxdWFsUG93ZXJQ
YW5uZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0VxdWFsUG93ZXJQ
YW5uZXIuY3BwCkBAIC01MSw4ICs1MSw4IEBAIEVxdWFsUG93ZXJQYW5uZXI6OkVxdWFsUG93ZXJQ
YW5uZXIoZmxvYXQgc2FtcGxlUmF0ZSkKIAogdm9pZCBFcXVhbFBvd2VyUGFubmVyOjpwYW4oZG91
YmxlIGF6aW11dGgsIGRvdWJsZSAvKmVsZXZhdGlvbiovLCBjb25zdCBBdWRpb0J1cyogaW5wdXRC
dXMsIEF1ZGlvQnVzKiBvdXRwdXRCdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCiB7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudCBzdGVyZW8gc291cmNlcwotICAgIGJvb2wgaXNJbnB1dFNhZmUg
PSBpbnB1dEJ1cyAmJiBpbnB1dEJ1cy0+bnVtYmVyT2ZDaGFubmVscygpID09IDEgJiYgZnJhbWVz
VG9Qcm9jZXNzIDw9IGlucHV0QnVzLT5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBpbnB1dENoYW5u
ZWxOdW1iZXIgPSBpbnB1dEJ1cy0+bnVtYmVyT2ZDaGFubmVscygpOworICAgIGJvb2wgaXNJbnB1
dFNhZmUgPSBpbnB1dEJ1cyAmJiAoaW5wdXRDaGFubmVsTnVtYmVyID09IDEgfHwgaW5wdXRDaGFu
bmVsTnVtYmVyID09IDIpICYmIGZyYW1lc1RvUHJvY2VzcyA8PSBpbnB1dEJ1cy0+bGVuZ3RoKCk7
CiAgICAgQVNTRVJUKGlzSW5wdXRTYWZlKTsKICAgICBpZiAoIWlzSW5wdXRTYWZlKQogICAgICAg
ICByZXR1cm47CkBAIC02MiwxNCArNjIsMTQgQEAgdm9pZCBFcXVhbFBvd2VyUGFubmVyOjpwYW4o
ZG91YmxlIGF6aW11dGgsIGRvdWJsZSAvKmVsZXZhdGlvbiovLCBjb25zdCBBdWRpb0J1cyoKICAg
ICBpZiAoIWlzT3V0cHV0U2FmZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgQXVkaW9D
aGFubmVsKiBjaGFubmVsID0gaW5wdXRCdXMtPmNoYW5uZWwoMCk7Ci0gICAgY29uc3QgZmxvYXQq
IHNvdXJjZVAgPSBjaGFubmVsLT5kYXRhKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgIGNvbnN0IGZsb2F0KiBzb3VyY2VMID0gaW5wdXRCdXMtPmNoYW5uZWwoMCktPmRhdGEo
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgY29uc3QgZmxvYXQqIHNvdXJj
ZVIgPSBpbnB1dENoYW5uZWxOdW1iZXIgPiAxID8gaW5wdXRCdXMtPmNoYW5uZWwoMSktPmRhdGEo
KSA6IHNvdXJjZUw7CiAgICAgZmxvYXQqIGRlc3RpbmF0aW9uTCA9IG91dHB1dEJ1cy0+Y2hhbm5l
bEJ5VHlwZShBdWRpb0J1czo6Q2hhbm5lbExlZnQpLT5tdXRhYmxlRGF0YSgpOwogICAgIGZsb2F0
KiBkZXN0aW5hdGlvblIgPSBvdXRwdXRCdXMtPmNoYW5uZWxCeVR5cGUoQXVkaW9CdXM6OkNoYW5u
ZWxSaWdodCktPm11dGFibGVEYXRhKCk7Ci0KLSAgICBpZiAoIXNvdXJjZVAgfHwgIWRlc3RpbmF0
aW9uTCB8fCAhZGVzdGluYXRpb25SKQorICAgIAorICAgIGlmICghc291cmNlTCB8fCAhc291cmNl
UiB8fCAhZGVzdGluYXRpb25MIHx8ICFkZXN0aW5hdGlvblIpCiAgICAgICAgIHJldHVybjsKLQor
ICAgIAogICAgIC8vIENsYW1wIGF6aW11dGggdG8gYWxsb3dlZCByYW5nZSBvZiAtMTgwIC0+ICsx
ODAuCiAgICAgYXppbXV0aCA9IG1heCgtMTgwLjAsIGF6aW11dGgpOwogICAgIGF6aW11dGggPSBt
aW4oMTgwLjAsIGF6aW11dGgpOwpAQCAtODAsMzUgKzgwLDU0IEBAIHZvaWQgRXF1YWxQb3dlclBh
bm5lcjo6cGFuKGRvdWJsZSBhemltdXRoLCBkb3VibGUgLyplbGV2YXRpb24qLywgY29uc3QgQXVk
aW9CdXMqCiAgICAgICAgIGF6aW11dGggPSAtMTgwIC0gYXppbXV0aDsKICAgICBlbHNlIGlmIChh
emltdXRoID4gOTApCiAgICAgICAgIGF6aW11dGggPSAxODAgLSBhemltdXRoOwotICAgIAotICAg
IC8vIFBhbiBzbW9vdGhseSBmcm9tIGxlZnQgdG8gcmlnaHQgd2l0aCBhemltdXRoIGdvaW5nIGZy
b20gLTkwIC0+ICs5MCBkZWdyZWVzLgotICAgIGRvdWJsZSBkZXNpcmVkUGFuUG9zaXRpb24gPSAo
YXppbXV0aCArIDkwKSAvIDE4MDsKLQotICAgIGRvdWJsZSBkZXNpcmVkR2FpbkwgPSBjb3MoMC41
ICogcGlEb3VibGUgKiBkZXNpcmVkUGFuUG9zaXRpb24pOwotICAgIGRvdWJsZSBkZXNpcmVkR2Fp
blIgPSBzaW4oMC41ICogcGlEb3VibGUgKiBkZXNpcmVkUGFuUG9zaXRpb24pOwogCisgICAgZG91
YmxlIGRlc2lyZWRQYW5Qb3NpdGlvbjsKKyAgICBkb3VibGUgZGVzaXJlZEdhaW5MOworICAgIGRv
dWJsZSBkZXNpcmVkR2FpblI7CisKKyAgICBpZiAoaW5wdXRDaGFubmVsTnVtYmVyID09IDEpIHsg
Ly8gRm9yIG1vbm8gc291cmNlIGNhc2UuCisgICAgICAgIC8vIFBhbiBzbW9vdGhseSBmcm9tIGxl
ZnQgdG8gcmlnaHQgd2l0aCBhemltdXRoIGdvaW5nIGZyb20gLTkwIC0+ICs5MCBkZWdyZWVzLgor
ICAgICAgICBkZXNpcmVkUGFuUG9zaXRpb24gPSAoYXppbXV0aCArIDkwKSAvIDE4MDsKKyAgICAg
ICAgZGVzaXJlZEdhaW5MID0gY29zKDAuNSAqIHBpRG91YmxlICogZGVzaXJlZFBhblBvc2l0aW9u
KTsKKyAgICAgICAgZGVzaXJlZEdhaW5SID0gc2luKDAuNSAqIHBpRG91YmxlICogZGVzaXJlZFBh
blBvc2l0aW9uKTsKKyAgICB9IGVsc2UgeyAvLyBGb3Igc3RlcmVvIHNvdXJjZSBjYXNlLgorICAg
ICAgICBpZiAoYXppbXV0aCA8PSAwKSB7IC8vIGZyb20gLTkwIC0+IDAKKyAgICAgICAgICAgIC8v
IHNvdXJjZUwgLT4gZGVzdEwgYW5kICJlcXVhbC1wb3dlciBwYW4iIHNvdXJjZVIgYXMgaW4gbW9u
byBjYXNlCisgICAgICAgICAgICAvLyBieSB0cmFuc2Zvcm1pbmcgdGhlICJhemltdXRoIiB2YWx1
ZSBmcm9tIC05MCAtPiAwIGRlZ3JlZXMgaW50byB0aGUgcmFuZ2UgLTkwIC0+ICs5MC4KKyAgICAg
ICAgICAgIGRlc2lyZWRQYW5Qb3NpdGlvbiA9IChhemltdXRoICsgOTApIC8gOTA7CisgICAgICAg
ICAgICBkZXNpcmVkR2FpbkwgPSAxOworICAgICAgICAgICAgZGVzaXJlZEdhaW5SID0gc2luKDAu
NSAqIHBpRG91YmxlICogZGVzaXJlZFBhblBvc2l0aW9uKTsKKyAgICAgICAgfSBlbHNlIHsgLy8g
ZnJvbSAwIC0+ICs5MAorICAgICAgICAgICAgLy8gc291cmNlUiAtPiBkZXN0UiBhbmQgImVxdWFs
LXBvd2VyIHBhbiIgc291cmNlTCBhcyBpbiBtb25vIGNhc2UKKyAgICAgICAgICAgIC8vIGJ5IHRy
YW5zZm9ybWluZyB0aGUgImF6aW11dGgiIHZhbHVlIGZyb20gMCAtPiArOTAgZGVncmVlcyBpbnRv
IHRoZSByYW5nZSAtOTAgLT4gKzkwLgorICAgICAgICAgICAgZGVzaXJlZFBhblBvc2l0aW9uID0g
YXppbXV0aCAvIDkwOworICAgICAgICAgICAgZGVzaXJlZEdhaW5MID0gY29zKDAuNSAqIHBpRG91
YmxlICogZGVzaXJlZFBhblBvc2l0aW9uKTsKKyAgICAgICAgICAgIGRlc2lyZWRHYWluUiA9IDE7
CisgICAgICAgIH0KKyAgICB9CisgICAKICAgICAvLyBEb24ndCBkZS16aXBwZXIgb24gZmlyc3Qg
cmVuZGVyIGNhbGwuCiAgICAgaWYgKG1faXNGaXJzdFJlbmRlcikgewogICAgICAgICBtX2lzRmly
c3RSZW5kZXIgPSBmYWxzZTsKICAgICAgICAgbV9nYWluTCA9IGRlc2lyZWRHYWluTDsKICAgICAg
ICAgbV9nYWluUiA9IGRlc2lyZWRHYWluUjsKICAgICB9Ci0KKyAgICAKICAgICAvLyBDYWNoZSBp
biBsb2NhbCB2YXJpYWJsZXMuCiAgICAgZG91YmxlIGdhaW5MID0gbV9nYWluTDsKICAgICBkb3Vi
bGUgZ2FpblIgPSBtX2dhaW5SOwotCisgICAgCiAgICAgLy8gR2V0IGxvY2FsIGNvcHkgb2Ygc21v
b3RoaW5nIGNvbnN0YW50LgogICAgIGNvbnN0IGRvdWJsZSBTbW9vdGhpbmdDb25zdGFudCA9IG1f
c21vb3RoaW5nQ29uc3RhbnQ7Ci0KKyAgICAKICAgICBpbnQgbiA9IGZyYW1lc1RvUHJvY2VzczsK
LQogICAgIHdoaWxlIChuLS0pIHsKLSAgICAgICAgZmxvYXQgaW5wdXQgPSAqc291cmNlUCsrOwor
ICAgICAgICBmbG9hdCBpbnB1dEwgPSAqc291cmNlTCsrOworICAgICAgICBmbG9hdCBpbnB1dFIg
PSAqc291cmNlUisrOwogICAgICAgICBnYWluTCArPSAoZGVzaXJlZEdhaW5MIC0gZ2FpbkwpICog
U21vb3RoaW5nQ29uc3RhbnQ7CiAgICAgICAgIGdhaW5SICs9IChkZXNpcmVkR2FpblIgLSBnYWlu
UikgKiBTbW9vdGhpbmdDb25zdGFudDsKLSAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGlucHV0ICogZ2FpbkwpOwotICAgICAgICAqZGVzdGluYXRpb25SKysgPSBz
dGF0aWNfY2FzdDxmbG9hdD4oaW5wdXQgKiBnYWluUik7CisgICAgICAgICpkZXN0aW5hdGlvbkwr
KyA9IHN0YXRpY19jYXN0PGZsb2F0PihpbnB1dEwgKiBnYWluTCk7CisgICAgICAgICpkZXN0aW5h
dGlvblIrKyA9IHN0YXRpY19jYXN0PGZsb2F0PihpbnB1dFIgKiBnYWluUik7CiAgICAgfQogCiAg
ICAgbV9nYWluTCA9IGdhaW5MOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDJiNWNkZTk0NzU2YTRlYzU3NjhiZTYzMDc2Zjk1
MmJkZDEzNGRhNGUuLjA0ZWIyZjY2ZmZiMWMyMDZhMTViZmYyMTQxZTJiYTc5OTI5YzhjY2YgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMi0wMy0xOCAgV2VpIEphbWVzICA8amFtZXMud2VpQGlu
dGVsLmNvbT4KKworICAgICAgICBhZGQgc3RlcmVvIHNvdXJjZSBzdXBwb3J0IGluIEVxdWFsUG93
ZXJQYW5uZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTgxMDkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiB3ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci1zdGVyZW8tZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiB3ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci1zdGVyZW8uaHRtbDogQ29waWVk
IGZyb20gTGF5b3V0VGVzdHMvd2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXIuaHRtbC4KKyAgICAg
ICAgKiB3ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci5odG1sOgorICAgICAgICAqIHdlYmF1ZGlv
L3Jlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzOgorICAgICAgICAoY3JlYXRlU3RlcmVvSW1wdWxz
ZUJ1ZmZlcik6CisgICAgICAgICogd2ViYXVkaW8vcmVzb3VyY2VzL3Bhbm5lci1tb2RlbC10ZXN0
aW5nLmpzOgorICAgICAgICAoY3JlYXRlR3JhcGgpOgorICAgICAgICAoY3JlYXRlVGVzdEFuZFJ1
bik6CisgICAgICAgIChlcXVhbFBvd2VyR2Fpbik6CisgICAgICAgIChjaGVja1Jlc3VsdCk6CisK
IDIwMTItMDMtMTQgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAg
ICAgICBBWERlc2NyaXB0aW9uIGZvciBIVE1MNSBmb290ZXIgYW5kIEFSSUEgcm9sZSBjb250ZW50
aW5mbyBpbmNvcnJlY3QKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Bhbm5lci1l
cXVhbHBvd2VyLXN0ZXJlby1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9wYW5u
ZXItZXF1YWxwb3dlci1zdGVyZW8tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5ODdjNzJlMjVk
M2U1OWQ2MGVmNjExNmQ5Mjk4YjA5MTJmMzIwNTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci1zdGVyZW8tZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsMTMgQEAKK1Rlc3QgZXF1YWwtcG93ZXIgcGFubmVyIG1vZGVsIG9mIEF1ZGlvUGFubmVy
Tm9kZSB3aXRoIHN0ZXJlbyBzb3VyY2UuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
UEFTUyBOdW1iZXIgb2YgaW1wdWxzZXMgbWF0Y2hlcyB0aGUgbnVtYmVyIG9mIHBhbm5lciBub2Rl
cy4KK1BBU1MgQWxsIGltcHVsc2VzIGF0IGV4cGVjdGVkIG9mZnNldHMuCitQQVNTIExlZnQgY2hh
bm5lbCBnYWluIHZhbHVlcyBhcmUgY29ycmVjdC4KK1BBU1MgUmlnaHQgY2hhbm5lbCBnYWluIHZh
bHVlcyBhcmUgY29ycmVjdC4KK1BBU1MgRXF1YWxQb3dlciBwYW5uZXIgdGVzdCBwYXNzZWQKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci1zdGVyZW8uaHRtbCBi
L0xheW91dFRlc3RzL3dlYmF1ZGlvL3Bhbm5lci1lcXVhbHBvd2VyLXN0ZXJlby5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQzMWM2OWM2MDc0ZTA0YmY3MmVmMGRlNjkxOTRiNTJkMWM5ODNmYzYKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci1zdGVyZW8u
aHRtbApAQCAtMCwwICsxLDQ0IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFRE
IEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPgorICA8aGVhZD4KKyAgICA8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5
bGUuY3NzIi8+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcGFubmVyLW1vZGVs
LXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICA8L2hlYWQ+CisKKyAgPGJvZHk+CisgICAgPGRpdiBp
ZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCisg
ICAgPHNjcmlwdD4KKyAgICAgIGRlc2NyaXB0aW9uKCJUZXN0IGVxdWFsLXBvd2VyIHBhbm5lciBt
b2RlbCBvZiBBdWRpb1Bhbm5lck5vZGUgd2l0aCBzdGVyZW8gc291cmNlLiIpOworCisgICAgICAv
LyBUbyB0ZXN0IHRoZSBwYW5uZXIsIHdlIGNyZWF0ZSBhIG51bWJlciBvZiBwYW5uZXIgbm9kZXMK
KyAgICAgIC8vIGVxdWFsbHkgc3BhY2VkIG9uIGEgc2VtaWNpcmNsZSBhdCB1bml0IGRpc3RhbmNl
LiAgVGhlCisgICAgICAvLyBzZW1pY2lyY2xlIGNvdmVycyB0aGUgYXppbXV0aCByYW5nZSBmcm9t
IC05MCB0byA5MCBkZWcsCisgICAgICAvLyBjb3ZlcmluZyBmdWxsIGxlZnQgdG8gZnVsbCByaWdo
dC4gIEVhY2ggc291cmNlIGlzIGFuIGltcHVsc2UKKyAgICAgIC8vIHR1cm5pbmcgYXQgYSBkaWZm
ZXJlbnQgdGltZSBhbmQgd2UgY2hlY2sgdGhhdCB0aGUgcmVuZGVyZWQKKyAgICAgIC8vIGltcHVs
c2UgaGFzIHRoZSBleHBlY3RlZCBnYWluLgorICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAg
ICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgIH0KKworICAgICAgICAg
IHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworICAgICAgICAgIC8vIENyZWF0ZSBvZmZs
aW5lIGF1ZGlvIGNvbnRleHQuCisgICAgICAgICAgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0Nv
bnRleHQoMiwgc2FtcGxlUmF0ZSAqIHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOwor
CisgICAgICAgICAgY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCBub2Rlc1RvQ3JlYXRlLCAyKTsK
KyAgICAgIH0KKworICAgICAgcnVuVGVzdCgpOworICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0g
dHJ1ZTsKKworICAgIDwvc2NyaXB0PgorCisgICAgPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Bhbm5lci1lcXVhbHBvd2VyLmh0bWwgYi9M
YXlvdXRUZXN0cy93ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci5odG1sCmluZGV4IDVlYTJiMzMw
M2Y0MmRkMGM5MDVjNjVlNTU2MDQ0ZmQ3NDk2MjA5MzQuLjI4MmY5MDY3Y2MzZjkwMWZjY2NiOWIx
YTVjYzkyYmJlNWFiMWNhYzkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Bhbm5l
ci1lcXVhbHBvd2VyLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcGFubmVyLWVxdWFs
cG93ZXIuaHRtbApAQCAtMzEsNyArMzEsNyBAQAogICAgICAgICAgIC8vIENyZWF0ZSBvZmZsaW5l
IGF1ZGlvIGNvbnRleHQuCiAgICAgICAgICAgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRl
eHQoMiwgc2FtcGxlUmF0ZSAqIHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOwogCi0g
ICAgICAgICAgY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCBub2Rlc1RvQ3JlYXRlKTsKKyAgICAg
ICAgICBjcmVhdGVUZXN0QW5kUnVuKGNvbnRleHQsIG5vZGVzVG9DcmVhdGUsIDEpOwogICAgICAg
fQogCiAgICAgICBydW5UZXN0KCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9y
ZXNvdXJjZXMvYXVkaW8tdGVzdGluZy5qcyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNl
cy9hdWRpby10ZXN0aW5nLmpzCmluZGV4IGFmMGFkMjdhMjMyZTI1OWNkODFmZTUzM2Q1NzRhN2Uy
OTVjY2RmODcuLmQwNzYyMGQzY2RjZjMxN2JiZGY4MTk1MGYzYzQ3ZjBhMzgxYWI0NzUgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzCisr
KyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzCkBAIC0x
MTUsNiArMTE1LDIzIEBAIGZ1bmN0aW9uIGNyZWF0ZUltcHVsc2VCdWZmZXIoY29udGV4dCwgc2Ft
cGxlRnJhbWVMZW5ndGgpIHsKICAgICByZXR1cm4gYXVkaW9CdWZmZXI7CiB9CiAKKy8vIENyZWF0
ZSBhIHN0ZXJlbyBpbXB1bHNlIGluIGEgYnVmZmVyIG9mIGxlbmd0aCBzYW1wbGVGcmFtZUxlbmd0
aAorZnVuY3Rpb24gY3JlYXRlU3RlcmVvSW1wdWxzZUJ1ZmZlcihjb250ZXh0LCBzYW1wbGVGcmFt
ZUxlbmd0aCkgeworICAgIHZhciBhdWRpb0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlQnVmZmVyKDIs
IHNhbXBsZUZyYW1lTGVuZ3RoLCBjb250ZXh0LnNhbXBsZVJhdGUpOworICAgIHZhciBuID0gYXVk
aW9CdWZmZXIubGVuZ3RoOworICAgIHZhciBkYXRhTCA9IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxE
YXRhKDApOworICAgIHZhciBkYXRhUiA9IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDEpOwor
CisgICAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyArK2spIHsKKyAgICAgICAgZGF0YUxba10gPSAw
OworICAgICAgICBkYXRhUltrXSA9IDA7CisgICAgfQorICAgIGRhdGFMWzBdID0gMTsKKyAgICBk
YXRhUlswXSA9IDE7CisKKyAgICByZXR1cm4gYXVkaW9CdWZmZXI7Cit9CisKIC8vIENvbnZlcnQg
dGltZSAoaW4gc2Vjb25kcykgdG8gc2FtcGxlIGZyYW1lcy4KIGZ1bmN0aW9uIHRpbWVUb1NhbXBs
ZUZyYW1lKHRpbWUsIHNhbXBsZVJhdGUpIHsKICAgICByZXR1cm4gTWF0aC5mbG9vcigwLjUgKyB0
aW1lICogc2FtcGxlUmF0ZSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNv
dXJjZXMvcGFubmVyLW1vZGVsLXRlc3RpbmcuanMgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNv
dXJjZXMvcGFubmVyLW1vZGVsLXRlc3RpbmcuanMKaW5kZXggYzhlNzMzYzgzNDYwZjkwZGIwYzQ4
MWU2NDc5YWIyYTQxNDBkNTYwNi4uMmZhYzg1NWZhNDc0YWQ5OTQ4OTZkYTUwZDZjY2Y0MTBjY2E3
YmVmZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL3Bhbm5lci1t
b2RlbC10ZXN0aW5nLmpzCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9wYW5u
ZXItbW9kZWwtdGVzdGluZy5qcwpAQCAtMSw1ICsxLDcgQEAKIHZhciBzYW1wbGVSYXRlID0gNDQx
MDAuMDsKIAordmFyIGNoYW5uZWxOdW1iZXIgPSAxOworCiAvLyBUaW1lIHN0ZXAgd2hlbiBlYWNo
IHBhbm5lciBub2RlIHN0YXJ0cy4KIHZhciB0aW1lU3RlcCA9IDAuMDAxOwogCkBAIC0zMyw3ICsz
NSwxMSBAQCBmdW5jdGlvbiBjcmVhdGVHcmFwaChjb250ZXh0LCBub2RlQ291bnQpIHsKICAgICAv
LyB0byBpbmNsdWRlIGJvdGggMCBhbmQgMTgwIGRlZy4KICAgICB2YXIgYW5nbGVTdGVwID0gTWF0
aC5QSSAvIChub2RlQ291bnQgLSAxKTsKIAotICAgIGltcHVsc2UgPSBjcmVhdGVJbXB1bHNlQnVm
ZmVyKGNvbnRleHQsIHB1bHNlTGVuZ3RoRnJhbWVzKTsKKyAgICBpZiAoY2hhbm5lbE51bWJlciA9
PSAyKSB7CisgICAgICAgIGltcHVsc2UgPSBjcmVhdGVTdGVyZW9JbXB1bHNlQnVmZmVyKGNvbnRl
eHQsIHB1bHNlTGVuZ3RoRnJhbWVzKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBpbXB1bHNl
ID0gY3JlYXRlSW1wdWxzZUJ1ZmZlcihjb250ZXh0LCBwdWxzZUxlbmd0aEZyYW1lcyk7CiAKICAg
ICBmb3IgKHZhciBrID0gMDsgayA8IG5vZGVDb3VudDsgKytrKSB7CiAgICAgICAgIGJ1ZmZlclNv
dXJjZVtrXSA9IGNvbnRleHQuY3JlYXRlQnVmZmVyU291cmNlKCk7CkBAIC01Niw3ICs2Miw5IEBA
IGZ1bmN0aW9uIGNyZWF0ZUdyYXBoKGNvbnRleHQsIG5vZGVDb3VudCkgewogICAgIH0KIH0KIAot
ZnVuY3Rpb24gY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0LCBub2RlQ291bnQpIHsKK2Z1bmN0aW9u
IGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwgbm9kZUNvdW50LCBzb3VyY2VDaGFubmVsTnVtYmVy
KSB7CisgICAgY2hhbm5lbE51bWJlciA9IHNvdXJjZUNoYW5uZWxOdW1iZXI7CisKICAgICBjcmVh
dGVHcmFwaChjb250ZXh0LCBub2RlQ291bnQpOwogCiAgICAgY29udGV4dC5vbmNvbXBsZXRlID0g
Y2hlY2tSZXN1bHQ7CkBAIC03NCwxMiArODIsMzAgQEAgZnVuY3Rpb24gYW5nbGVUb0F6aW11dGgo
YW5nbGUpIHsKIGZ1bmN0aW9uIGVxdWFsUG93ZXJHYWluKGFuZ2xlKSB7CiAgICAgdmFyIGF6aW11
dGggPSBhbmdsZVRvQXppbXV0aChhbmdsZSk7CiAKLSAgICB2YXIgcGFuUG9zaXRpb24gPSAoYXpp
bXV0aCArIDkwKSAvIDE4MDsKKyAgICBpZiAoY2hhbm5lbE51bWJlciA9PSAxKSB7CisgICAgICAg
IHZhciBwYW5Qb3NpdGlvbiA9IChhemltdXRoICsgOTApIC8gMTgwOwogCi0gICAgdmFyIGdhaW5M
ID0gTWF0aC5jb3MoMC41ICogTWF0aC5QSSAqIHBhblBvc2l0aW9uKTsKLSAgICB2YXIgZ2FpblIg
PSBNYXRoLnNpbigwLjUgKiBNYXRoLlBJICogcGFuUG9zaXRpb24pOworICAgICAgICB2YXIgZ2Fp
bkwgPSBNYXRoLmNvcygwLjUgKiBNYXRoLlBJICogcGFuUG9zaXRpb24pOworICAgICAgICB2YXIg
Z2FpblIgPSBNYXRoLnNpbigwLjUgKiBNYXRoLlBJICogcGFuUG9zaXRpb24pOwogCi0gICAgcmV0
dXJuIHsgbGVmdCA6IGdhaW5MLCByaWdodCA6IGdhaW5SIH07CisgICAgICAgIHJldHVybiB7IGxl
ZnQgOiBnYWluTCwgcmlnaHQgOiBnYWluUiB9OworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChh
emltdXRoIDw9IDApIHsKKyAgICAgICAgICAgIHZhciBwYW5Qb3NpdGlvbiA9IChhemltdXRoICsg
OTApIC8gOTA7CisgICAgCisgICAgICAgICAgICB2YXIgZ2FpbkwgPSAxOworICAgICAgICAgICAg
dmFyIGdhaW5SID0gTWF0aC5zaW4oMC41ICogTWF0aC5QSSAqIHBhblBvc2l0aW9uKTsKKyAgICAK
KyAgICAgICAgICAgIHJldHVybiB7IGxlZnQgOiBnYWluTCwgcmlnaHQgOiBnYWluUiB9OworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIHBhblBvc2l0aW9uID0gYXppbXV0aCAvIDkw
OworICAgIAorICAgICAgICAgICAgdmFyIGdhaW5MID0gTWF0aC5jb3MoMC41ICogTWF0aC5QSSAq
IHBhblBvc2l0aW9uKTsKKyAgICAgICAgICAgIHZhciBnYWluUiA9IDE7CisgICAgCisgICAgICAg
ICAgICByZXR1cm4geyBsZWZ0IDogZ2FpbkwsIHJpZ2h0IDogZ2FpblIgfTsKKyAgICAgICAgfQor
ICAgIH0KIH0KIAogZnVuY3Rpb24gY2hlY2tSZXN1bHQoZXZlbnQpIHsKQEAgLTkwLDcgKzExNiw3
IEBAIGZ1bmN0aW9uIGNoZWNrUmVzdWx0KGV2ZW50KSB7CiAgICAgLy8gVGhlIG1heCBlcnJvciB3
ZSBhbGxvdyBiZXR3ZWVuIHRoZSByZW5kZXJlZCBpbXB1bHNlIGFuZCB0aGUKICAgICAvLyBleHBl
Y3RlZCB2YWx1ZS4gIFRoaXMgdmFsdWUgaXMgZXhwZXJpbWVudGFsbHkgZGV0ZXJtaW5lZC4gIFNl
dAogICAgIC8vIHRvIDAgdG8gbWFrZSB0aGUgdGVzdCBmYWlsIHRvIHNlZSB3aGF0IHRoZSBhY3R1
YWwgZXJyb3IgaXMuCi0gICAgdmFyIG1heEFsbG93ZWRFcnJvciA9IDYuNGUtNzsKKyAgICB2YXIg
bWF4QWxsb3dlZEVycm9yID0gMS4zZS02OwogICAKICAgICB2YXIgc3VjY2VzcyA9IHRydWU7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132783</attachid>
            <date>2012-03-20 02:43:25 -0700</date>
            <delta_ts>2012-03-21 01:37:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81092-20120320174321.patch</filename>
            <type>text/plain</type>
            <size>14426</size>
            <attacher name="Wei James (wistoch)">james.wei</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwODI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTk2NjZmZTVmNjE4MDVk
NWI1ODI0YmYzZTYxODg3MmMwNjQxNWQzNS4uZDdlYTE1YTM0ZjIyYTRhYTAyNDllYjQxMTFiOTM1
OTJiZDc3YjE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAzLTE4ICBXZWkg
SmFtZXMgIDxqYW1lcy53ZWlAaW50ZWwuY29tPgorCisgICAgICAgIGFkZCBzdGVyZW8gc291cmNl
IHN1cHBvcnQgaW4gRXF1YWxQb3dlclBhbm5lcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODEwOTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUZXN0OiB3ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci1zdGVy
ZW8uaHRtbAorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRXF1YWxQb3dlclBhbm5lci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpFcXVhbFBvd2VyUGFubmVyOjpwYW4pOgorCiAyMDEyLTAzLTE0
ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgQVhEZXNj
cmlwdGlvbiBmb3IgSFRNTDUgZm9vdGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9FcXVhbFBvd2VyUGFubmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0VxdWFsUG93ZXJQYW5uZXIuY3BwCmluZGV4IGEyZDJkZmY0YzAwMGE4MmJmNDQ4ODM5
ZDEyMGQzZDI2OTZkZmJlZDUuLjFlOGNjZDI0MGY3ZmZiOWJhNDFhMDllMWU0Zjc5NDMxOTFhNWRk
ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0VxdWFsUG93ZXJQ
YW5uZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0VxdWFsUG93ZXJQ
YW5uZXIuY3BwCkBAIC01MSw4ICs1MSw4IEBAIEVxdWFsUG93ZXJQYW5uZXI6OkVxdWFsUG93ZXJQ
YW5uZXIoZmxvYXQgc2FtcGxlUmF0ZSkKIAogdm9pZCBFcXVhbFBvd2VyUGFubmVyOjpwYW4oZG91
YmxlIGF6aW11dGgsIGRvdWJsZSAvKmVsZXZhdGlvbiovLCBjb25zdCBBdWRpb0J1cyogaW5wdXRC
dXMsIEF1ZGlvQnVzKiBvdXRwdXRCdXMsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCiB7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudCBzdGVyZW8gc291cmNlcwotICAgIGJvb2wgaXNJbnB1dFNhZmUg
PSBpbnB1dEJ1cyAmJiBpbnB1dEJ1cy0+bnVtYmVyT2ZDaGFubmVscygpID09IDEgJiYgZnJhbWVz
VG9Qcm9jZXNzIDw9IGlucHV0QnVzLT5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBpbnB1dENoYW5u
ZWxOdW1iZXIgPSBpbnB1dEJ1cy0+bnVtYmVyT2ZDaGFubmVscygpOworICAgIGJvb2wgaXNJbnB1
dFNhZmUgPSBpbnB1dEJ1cyAmJiAoaW5wdXRDaGFubmVsTnVtYmVyID09IDEgfHwgaW5wdXRDaGFu
bmVsTnVtYmVyID09IDIpICYmIGZyYW1lc1RvUHJvY2VzcyA8PSBpbnB1dEJ1cy0+bGVuZ3RoKCk7
CiAgICAgQVNTRVJUKGlzSW5wdXRTYWZlKTsKICAgICBpZiAoIWlzSW5wdXRTYWZlKQogICAgICAg
ICByZXR1cm47CkBAIC02MiwxNCArNjIsMTQgQEAgdm9pZCBFcXVhbFBvd2VyUGFubmVyOjpwYW4o
ZG91YmxlIGF6aW11dGgsIGRvdWJsZSAvKmVsZXZhdGlvbiovLCBjb25zdCBBdWRpb0J1cyoKICAg
ICBpZiAoIWlzT3V0cHV0U2FmZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgQXVkaW9D
aGFubmVsKiBjaGFubmVsID0gaW5wdXRCdXMtPmNoYW5uZWwoMCk7Ci0gICAgY29uc3QgZmxvYXQq
IHNvdXJjZVAgPSBjaGFubmVsLT5kYXRhKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgIGNvbnN0IGZsb2F0KiBzb3VyY2VMID0gaW5wdXRCdXMtPmNoYW5uZWwoMCktPmRhdGEo
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgY29uc3QgZmxvYXQqIHNvdXJj
ZVIgPSBpbnB1dENoYW5uZWxOdW1iZXIgPiAxID8gaW5wdXRCdXMtPmNoYW5uZWwoMSktPmRhdGEo
KSA6IHNvdXJjZUw7CiAgICAgZmxvYXQqIGRlc3RpbmF0aW9uTCA9IG91dHB1dEJ1cy0+Y2hhbm5l
bEJ5VHlwZShBdWRpb0J1czo6Q2hhbm5lbExlZnQpLT5tdXRhYmxlRGF0YSgpOwogICAgIGZsb2F0
KiBkZXN0aW5hdGlvblIgPSBvdXRwdXRCdXMtPmNoYW5uZWxCeVR5cGUoQXVkaW9CdXM6OkNoYW5u
ZWxSaWdodCktPm11dGFibGVEYXRhKCk7Ci0KLSAgICBpZiAoIXNvdXJjZVAgfHwgIWRlc3RpbmF0
aW9uTCB8fCAhZGVzdGluYXRpb25SKQorICAgIAorICAgIGlmICghc291cmNlTCB8fCAhc291cmNl
UiB8fCAhZGVzdGluYXRpb25MIHx8ICFkZXN0aW5hdGlvblIpCiAgICAgICAgIHJldHVybjsKLQor
ICAgIAogICAgIC8vIENsYW1wIGF6aW11dGggdG8gYWxsb3dlZCByYW5nZSBvZiAtMTgwIC0+ICsx
ODAuCiAgICAgYXppbXV0aCA9IG1heCgtMTgwLjAsIGF6aW11dGgpOwogICAgIGF6aW11dGggPSBt
aW4oMTgwLjAsIGF6aW11dGgpOwpAQCAtODAsMzUgKzgwLDc0IEBAIHZvaWQgRXF1YWxQb3dlclBh
bm5lcjo6cGFuKGRvdWJsZSBhemltdXRoLCBkb3VibGUgLyplbGV2YXRpb24qLywgY29uc3QgQXVk
aW9CdXMqCiAgICAgICAgIGF6aW11dGggPSAtMTgwIC0gYXppbXV0aDsKICAgICBlbHNlIGlmIChh
emltdXRoID4gOTApCiAgICAgICAgIGF6aW11dGggPSAxODAgLSBhemltdXRoOwotICAgIAotICAg
IC8vIFBhbiBzbW9vdGhseSBmcm9tIGxlZnQgdG8gcmlnaHQgd2l0aCBhemltdXRoIGdvaW5nIGZy
b20gLTkwIC0+ICs5MCBkZWdyZWVzLgotICAgIGRvdWJsZSBkZXNpcmVkUGFuUG9zaXRpb24gPSAo
YXppbXV0aCArIDkwKSAvIDE4MDsKIAotICAgIGRvdWJsZSBkZXNpcmVkR2FpbkwgPSBjb3MoMC41
ICogcGlEb3VibGUgKiBkZXNpcmVkUGFuUG9zaXRpb24pOwotICAgIGRvdWJsZSBkZXNpcmVkR2Fp
blIgPSBzaW4oMC41ICogcGlEb3VibGUgKiBkZXNpcmVkUGFuUG9zaXRpb24pOworICAgIGRvdWJs
ZSBkZXNpcmVkUGFuUG9zaXRpb247CisgICAgZG91YmxlIGRlc2lyZWRHYWluTDsKKyAgICBkb3Vi
bGUgZGVzaXJlZEdhaW5SOworCisgICAgaWYgKGlucHV0Q2hhbm5lbE51bWJlciA9PSAxKSB7IC8v
IEZvciBtb25vIHNvdXJjZSBjYXNlLgorICAgICAgICAvLyBQYW4gc21vb3RobHkgZnJvbSBsZWZ0
IHRvIHJpZ2h0IHdpdGggYXppbXV0aCBnb2luZyBmcm9tIC05MCAtPiArOTAgZGVncmVlcy4KKyAg
ICAgICAgZGVzaXJlZFBhblBvc2l0aW9uID0gKGF6aW11dGggKyA5MCkgLyAxODA7CisgICAgfSBl
bHNlIHsgLy8gRm9yIHN0ZXJlbyBzb3VyY2UgY2FzZS4KKyAgICAgICAgaWYgKGF6aW11dGggPD0g
MCkgeyAvLyBmcm9tIC05MCAtPiAwCisgICAgICAgICAgICAvLyBzb3VyY2VMIC0+IGRlc3RMIGFu
ZCAiZXF1YWwtcG93ZXIgcGFuIiBzb3VyY2VSIGFzIGluIG1vbm8gY2FzZQorICAgICAgICAgICAg
Ly8gYnkgdHJhbnNmb3JtaW5nIHRoZSAiYXppbXV0aCIgdmFsdWUgZnJvbSAtOTAgLT4gMCBkZWdy
ZWVzIGludG8gdGhlIHJhbmdlIC05MCAtPiArOTAuCisgICAgICAgICAgICBkZXNpcmVkUGFuUG9z
aXRpb24gPSAoYXppbXV0aCArIDkwKSAvIDkwOworICAgICAgICB9IGVsc2UgeyAvLyBmcm9tIDAg
LT4gKzkwCisgICAgICAgICAgICAvLyBzb3VyY2VSIC0+IGRlc3RSIGFuZCAiZXF1YWwtcG93ZXIg
cGFuIiBzb3VyY2VMIGFzIGluIG1vbm8gY2FzZQorICAgICAgICAgICAgLy8gYnkgdHJhbnNmb3Jt
aW5nIHRoZSAiYXppbXV0aCIgdmFsdWUgZnJvbSAwIC0+ICs5MCBkZWdyZWVzIGludG8gdGhlIHJh
bmdlIC05MCAtPiArOTAuCisgICAgICAgICAgICBkZXNpcmVkUGFuUG9zaXRpb24gPSBhemltdXRo
IC8gOTA7CisgICAgICAgIH0KKyAgICB9CiAKKyAgICBkZXNpcmVkR2FpbkwgPSBjb3MoMC41ICog
cGlEb3VibGUgKiBkZXNpcmVkUGFuUG9zaXRpb24pOworICAgIGRlc2lyZWRHYWluUiA9IHNpbigw
LjUgKiBwaURvdWJsZSAqIGRlc2lyZWRQYW5Qb3NpdGlvbik7CisgICAKICAgICAvLyBEb24ndCBk
ZS16aXBwZXIgb24gZmlyc3QgcmVuZGVyIGNhbGwuCiAgICAgaWYgKG1faXNGaXJzdFJlbmRlcikg
ewogICAgICAgICBtX2lzRmlyc3RSZW5kZXIgPSBmYWxzZTsKICAgICAgICAgbV9nYWluTCA9IGRl
c2lyZWRHYWluTDsKICAgICAgICAgbV9nYWluUiA9IGRlc2lyZWRHYWluUjsKICAgICB9Ci0KKyAg
ICAKICAgICAvLyBDYWNoZSBpbiBsb2NhbCB2YXJpYWJsZXMuCiAgICAgZG91YmxlIGdhaW5MID0g
bV9nYWluTDsKICAgICBkb3VibGUgZ2FpblIgPSBtX2dhaW5SOwotCisgICAgCiAgICAgLy8gR2V0
IGxvY2FsIGNvcHkgb2Ygc21vb3RoaW5nIGNvbnN0YW50LgogICAgIGNvbnN0IGRvdWJsZSBTbW9v
dGhpbmdDb25zdGFudCA9IG1fc21vb3RoaW5nQ29uc3RhbnQ7Ci0KKyAgICAKICAgICBpbnQgbiA9
IGZyYW1lc1RvUHJvY2VzczsKIAotICAgIHdoaWxlIChuLS0pIHsKLSAgICAgICAgZmxvYXQgaW5w
dXQgPSAqc291cmNlUCsrOwotICAgICAgICBnYWluTCArPSAoZGVzaXJlZEdhaW5MIC0gZ2Fpbkwp
ICogU21vb3RoaW5nQ29uc3RhbnQ7Ci0gICAgICAgIGdhaW5SICs9IChkZXNpcmVkR2FpblIgLSBn
YWluUikgKiBTbW9vdGhpbmdDb25zdGFudDsKLSAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGlucHV0ICogZ2FpbkwpOwotICAgICAgICAqZGVzdGluYXRpb25SKysg
PSBzdGF0aWNfY2FzdDxmbG9hdD4oaW5wdXQgKiBnYWluUik7CisgICAgaWYgKGlucHV0Q2hhbm5l
bE51bWJlciA9PSAxKSB7IC8vIEZvciBtb25vIHNvdXJjZSBjYXNlLgorICAgICAgICB3aGlsZSAo
bi0tKSB7CisgICAgICAgICAgICBmbG9hdCBpbnB1dEwgPSAqc291cmNlTCsrOworICAgICAgICAg
ICAgZmxvYXQgaW5wdXRSID0gKnNvdXJjZVIrKzsKKyAgICAgICAgICAgIGdhaW5MICs9IChkZXNp
cmVkR2FpbkwgLSBnYWluTCkgKiBTbW9vdGhpbmdDb25zdGFudDsKKyAgICAgICAgICAgIGdhaW5S
ICs9IChkZXNpcmVkR2FpblIgLSBnYWluUikgKiBTbW9vdGhpbmdDb25zdGFudDsKKyAgICAgICAg
ICAgICpkZXN0aW5hdGlvbkwrKyA9IHN0YXRpY19jYXN0PGZsb2F0PihpbnB1dEwgKiBnYWluTCk7
CisgICAgICAgICAgICAqZGVzdGluYXRpb25SKysgPSBzdGF0aWNfY2FzdDxmbG9hdD4oaW5wdXRS
ICogZ2FpblIpOworICAgICAgICB9CisgICAgfSBlbHNlIHsgLy8gRm9yIHN0ZXJlbyBzb3VyY2Ug
Y2FzZS4KKyAgICAgICAgaWYgKGF6aW11dGggPD0gMCkgeyAvLyBmcm9tIC05MCAtPiAwCisgICAg
ICAgICAgICB3aGlsZSAobi0tKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgaW5wdXRMID0gKnNv
dXJjZUwrKzsKKyAgICAgICAgICAgICAgICBmbG9hdCBpbnB1dFIgPSAqc291cmNlUisrOworICAg
ICAgICAgICAgICAgIGdhaW5MICs9IChkZXNpcmVkR2FpbkwgLSBnYWluTCkgKiBTbW9vdGhpbmdD
b25zdGFudDsKKyAgICAgICAgICAgICAgICBnYWluUiArPSAoZGVzaXJlZEdhaW5SIC0gZ2FpblIp
ICogU21vb3RoaW5nQ29uc3RhbnQ7CisgICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGlucHV0TCArIGlucHV0UiAqIGdhaW5MKTsKKyAgICAgICAgICAg
ICAgICAqZGVzdGluYXRpb25SKysgPSBzdGF0aWNfY2FzdDxmbG9hdD4oaW5wdXRSICogZ2FpblIp
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeyAvLyBmcm9tIDAgLT4gKzkwCisgICAg
ICAgICAgICB3aGlsZSAobi0tKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgaW5wdXRMID0gKnNv
dXJjZUwrKzsKKyAgICAgICAgICAgICAgICBmbG9hdCBpbnB1dFIgPSAqc291cmNlUisrOworICAg
ICAgICAgICAgICAgIGdhaW5MICs9IChkZXNpcmVkR2FpbkwgLSBnYWluTCkgKiBTbW9vdGhpbmdD
b25zdGFudDsKKyAgICAgICAgICAgICAgICBnYWluUiArPSAoZGVzaXJlZEdhaW5SIC0gZ2FpblIp
ICogU21vb3RoaW5nQ29uc3RhbnQ7CisgICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGlucHV0TCAqIGdhaW5MKTsKKyAgICAgICAgICAgICAgICAqZGVz
dGluYXRpb25SKysgPSBzdGF0aWNfY2FzdDxmbG9hdD4oaW5wdXRSICsgaW5wdXRSICogZ2FpblIp
OworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAgbV9nYWluTCA9IGdhaW5M
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDJiNWNkZTk0NzU2YTRlYzU3NjhiZTYzMDc2Zjk1MmJkZDEzNGRhNGUuLjA0ZWIy
ZjY2ZmZiMWMyMDZhMTViZmYyMTQxZTJiYTc5OTI5YzhjY2YgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBA
QAorMjAxMi0wMy0xOCAgV2VpIEphbWVzICA8amFtZXMud2VpQGludGVsLmNvbT4KKworICAgICAg
ICBhZGQgc3RlcmVvIHNvdXJjZSBzdXBwb3J0IGluIEVxdWFsUG93ZXJQYW5uZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgxMDkyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3ZWJhdWRpby9wYW5uZXIt
ZXF1YWxwb3dlci1zdGVyZW8tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRp
by9wYW5uZXItZXF1YWxwb3dlci1zdGVyZW8uaHRtbDogQ29waWVkIGZyb20gTGF5b3V0VGVzdHMv
d2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXIuaHRtbC4KKyAgICAgICAgKiB3ZWJhdWRpby9wYW5u
ZXItZXF1YWxwb3dlci5odG1sOgorICAgICAgICAqIHdlYmF1ZGlvL3Jlc291cmNlcy9hdWRpby10
ZXN0aW5nLmpzOgorICAgICAgICAoY3JlYXRlU3RlcmVvSW1wdWxzZUJ1ZmZlcik6CisgICAgICAg
ICogd2ViYXVkaW8vcmVzb3VyY2VzL3Bhbm5lci1tb2RlbC10ZXN0aW5nLmpzOgorICAgICAgICAo
Y3JlYXRlR3JhcGgpOgorICAgICAgICAoY3JlYXRlVGVzdEFuZFJ1bik6CisgICAgICAgIChlcXVh
bFBvd2VyR2Fpbik6CisgICAgICAgIChjaGVja1Jlc3VsdCk6CisKIDIwMTItMDMtMTQgIENocmlz
IEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBBWERlc2NyaXB0aW9u
IGZvciBIVE1MNSBmb290ZXIgYW5kIEFSSUEgcm9sZSBjb250ZW50aW5mbyBpbmNvcnJlY3QKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Bhbm5lci1lcXVhbHBvd2VyLXN0ZXJlby1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci1zdGVy
ZW8tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU5ODdjNzJlMjVkM2U1OWQ2MGVmNjExNmQ5Mjk4
YjA5MTJmMzIwNTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9wYW5u
ZXItZXF1YWxwb3dlci1zdGVyZW8tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTMgQEAKK1Rlc3Qg
ZXF1YWwtcG93ZXIgcGFubmVyIG1vZGVsIG9mIEF1ZGlvUGFubmVyTm9kZSB3aXRoIHN0ZXJlbyBz
b3VyY2UuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworUEFTUyBOdW1iZXIgb2YgaW1w
dWxzZXMgbWF0Y2hlcyB0aGUgbnVtYmVyIG9mIHBhbm5lciBub2Rlcy4KK1BBU1MgQWxsIGltcHVs
c2VzIGF0IGV4cGVjdGVkIG9mZnNldHMuCitQQVNTIExlZnQgY2hhbm5lbCBnYWluIHZhbHVlcyBh
cmUgY29ycmVjdC4KK1BBU1MgUmlnaHQgY2hhbm5lbCBnYWluIHZhbHVlcyBhcmUgY29ycmVjdC4K
K1BBU1MgRXF1YWxQb3dlciBwYW5uZXIgdGVzdCBwYXNzZWQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci1zdGVyZW8uaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1
ZGlvL3Bhbm5lci1lcXVhbHBvd2VyLXN0ZXJlby5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzMWM2OWM2MDc0
ZTA0YmY3MmVmMGRlNjkxOTRiNTJkMWM5ODNmYzYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci1zdGVyZW8uaHRtbApAQCAtMCwwICsxLDQ0
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0
aW9uYWwvL0VOIj4KKzxodG1sPgorICA8aGVhZD4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQi
IGhyZWY9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+CisgICAgPHNj
cmlwdCBzcmM9InJlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIj48L3NjcmlwdD4KKyAgICA8c2Ny
aXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcGFubmVyLW1vZGVsLXRlc3RpbmcuanMiPjwvc2Ny
aXB0PgorICA8L2hlYWQ+CisKKyAgPGJvZHk+CisgICAgPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwv
ZGl2PgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCisgICAgPHNjcmlwdD4KKyAgICAg
IGRlc2NyaXB0aW9uKCJUZXN0IGVxdWFsLXBvd2VyIHBhbm5lciBtb2RlbCBvZiBBdWRpb1Bhbm5l
ck5vZGUgd2l0aCBzdGVyZW8gc291cmNlLiIpOworCisgICAgICAvLyBUbyB0ZXN0IHRoZSBwYW5u
ZXIsIHdlIGNyZWF0ZSBhIG51bWJlciBvZiBwYW5uZXIgbm9kZXMKKyAgICAgIC8vIGVxdWFsbHkg
c3BhY2VkIG9uIGEgc2VtaWNpcmNsZSBhdCB1bml0IGRpc3RhbmNlLiAgVGhlCisgICAgICAvLyBz
ZW1pY2lyY2xlIGNvdmVycyB0aGUgYXppbXV0aCByYW5nZSBmcm9tIC05MCB0byA5MCBkZWcsCisg
ICAgICAvLyBjb3ZlcmluZyBmdWxsIGxlZnQgdG8gZnVsbCByaWdodC4gIEVhY2ggc291cmNlIGlz
IGFuIGltcHVsc2UKKyAgICAgIC8vIHR1cm5pbmcgYXQgYSBkaWZmZXJlbnQgdGltZSBhbmQgd2Ug
Y2hlY2sgdGhhdCB0aGUgcmVuZGVyZWQKKyAgICAgIC8vIGltcHVsc2UgaGFzIHRoZSBleHBlY3Rl
ZCBnYWluLgorICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAgICAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2Fp
dFVudGlsRG9uZSgpOworICAgICAgICAgIH0KKworICAgICAgICAgIHdpbmRvdy5qc1Rlc3RJc0Fz
eW5jID0gdHJ1ZTsKKworICAgICAgICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQu
CisgICAgICAgICAgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgc2FtcGxlUmF0
ZSAqIHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOworCisgICAgICAgICAgY3JlYXRl
VGVzdEFuZFJ1bihjb250ZXh0LCBub2Rlc1RvQ3JlYXRlLCAyKTsKKyAgICAgIH0KKworICAgICAg
cnVuVGVzdCgpOworICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworICAgIDwvc2Ny
aXB0PgorCisgICAgPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmF1ZGlvL3Bhbm5lci1lcXVhbHBvd2VyLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhdWRp
by9wYW5uZXItZXF1YWxwb3dlci5odG1sCmluZGV4IDVlYTJiMzMwM2Y0MmRkMGM5MDVjNjVlNTU2
MDQ0ZmQ3NDk2MjA5MzQuLjI4MmY5MDY3Y2MzZjkwMWZjY2NiOWIxYTVjYzkyYmJlNWFiMWNhYzkg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Bhbm5lci1lcXVhbHBvd2VyLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXIuaHRtbApAQCAtMzEs
NyArMzEsNyBAQAogICAgICAgICAgIC8vIENyZWF0ZSBvZmZsaW5lIGF1ZGlvIGNvbnRleHQuCiAg
ICAgICAgICAgY29udGV4dCA9IG5ldyB3ZWJraXRBdWRpb0NvbnRleHQoMiwgc2FtcGxlUmF0ZSAq
IHJlbmRlckxlbmd0aFNlY29uZHMsIHNhbXBsZVJhdGUpOwogCi0gICAgICAgICAgY3JlYXRlVGVz
dEFuZFJ1bihjb250ZXh0LCBub2Rlc1RvQ3JlYXRlKTsKKyAgICAgICAgICBjcmVhdGVUZXN0QW5k
UnVuKGNvbnRleHQsIG5vZGVzVG9DcmVhdGUsIDEpOwogICAgICAgfQogCiAgICAgICBydW5UZXN0
KCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvYXVkaW8tdGVz
dGluZy5qcyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9hdWRpby10ZXN0aW5nLmpz
CmluZGV4IGFmMGFkMjdhMjMyZTI1OWNkODFmZTUzM2Q1NzRhN2UyOTVjY2RmODcuLmQwNzYyMGQz
Y2RjZjMxN2JiZGY4MTk1MGYzYzQ3ZjBhMzgxYWI0NzUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3dlYmF1ZGlvL3Jlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzCisrKyBiL0xheW91dFRlc3RzL3dl
YmF1ZGlvL3Jlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzCkBAIC0xMTUsNiArMTE1LDIzIEBAIGZ1
bmN0aW9uIGNyZWF0ZUltcHVsc2VCdWZmZXIoY29udGV4dCwgc2FtcGxlRnJhbWVMZW5ndGgpIHsK
ICAgICByZXR1cm4gYXVkaW9CdWZmZXI7CiB9CiAKKy8vIENyZWF0ZSBhIHN0ZXJlbyBpbXB1bHNl
IGluIGEgYnVmZmVyIG9mIGxlbmd0aCBzYW1wbGVGcmFtZUxlbmd0aAorZnVuY3Rpb24gY3JlYXRl
U3RlcmVvSW1wdWxzZUJ1ZmZlcihjb250ZXh0LCBzYW1wbGVGcmFtZUxlbmd0aCkgeworICAgIHZh
ciBhdWRpb0J1ZmZlciA9IGNvbnRleHQuY3JlYXRlQnVmZmVyKDIsIHNhbXBsZUZyYW1lTGVuZ3Ro
LCBjb250ZXh0LnNhbXBsZVJhdGUpOworICAgIHZhciBuID0gYXVkaW9CdWZmZXIubGVuZ3RoOwor
ICAgIHZhciBkYXRhTCA9IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDApOworICAgIHZhciBk
YXRhUiA9IGF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKDEpOworCisgICAgZm9yICh2YXIgayA9
IDA7IGsgPCBuOyArK2spIHsKKyAgICAgICAgZGF0YUxba10gPSAwOworICAgICAgICBkYXRhUltr
XSA9IDA7CisgICAgfQorICAgIGRhdGFMWzBdID0gMTsKKyAgICBkYXRhUlswXSA9IDE7CisKKyAg
ICByZXR1cm4gYXVkaW9CdWZmZXI7Cit9CisKIC8vIENvbnZlcnQgdGltZSAoaW4gc2Vjb25kcykg
dG8gc2FtcGxlIGZyYW1lcy4KIGZ1bmN0aW9uIHRpbWVUb1NhbXBsZUZyYW1lKHRpbWUsIHNhbXBs
ZVJhdGUpIHsKICAgICByZXR1cm4gTWF0aC5mbG9vcigwLjUgKyB0aW1lICogc2FtcGxlUmF0ZSk7
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvcGFubmVyLW1vZGVs
LXRlc3RpbmcuanMgYi9MYXlvdXRUZXN0cy93ZWJhdWRpby9yZXNvdXJjZXMvcGFubmVyLW1vZGVs
LXRlc3RpbmcuanMKaW5kZXggYzhlNzMzYzgzNDYwZjkwZGIwYzQ4MWU2NDc5YWIyYTQxNDBkNTYw
Ni4uNDRiOGNjMTI0OTYwMGYyZmQ1ZDUyYmNlZGU5NWVjYmEzNDIzNDhiZSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL3Bhbm5lci1tb2RlbC10ZXN0aW5nLmpzCisr
KyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9wYW5uZXItbW9kZWwtdGVzdGluZy5q
cwpAQCAtMSw1ICsxLDcgQEAKIHZhciBzYW1wbGVSYXRlID0gNDQxMDAuMDsKIAordmFyIGNoYW5u
ZWxOdW1iZXIgPSAxOworCiAvLyBUaW1lIHN0ZXAgd2hlbiBlYWNoIHBhbm5lciBub2RlIHN0YXJ0
cy4KIHZhciB0aW1lU3RlcCA9IDAuMDAxOwogCkBAIC0zMyw3ICszNSwxMSBAQCBmdW5jdGlvbiBj
cmVhdGVHcmFwaChjb250ZXh0LCBub2RlQ291bnQpIHsKICAgICAvLyB0byBpbmNsdWRlIGJvdGgg
MCBhbmQgMTgwIGRlZy4KICAgICB2YXIgYW5nbGVTdGVwID0gTWF0aC5QSSAvIChub2RlQ291bnQg
LSAxKTsKIAotICAgIGltcHVsc2UgPSBjcmVhdGVJbXB1bHNlQnVmZmVyKGNvbnRleHQsIHB1bHNl
TGVuZ3RoRnJhbWVzKTsKKyAgICBpZiAoY2hhbm5lbE51bWJlciA9PSAyKSB7CisgICAgICAgIGlt
cHVsc2UgPSBjcmVhdGVTdGVyZW9JbXB1bHNlQnVmZmVyKGNvbnRleHQsIHB1bHNlTGVuZ3RoRnJh
bWVzKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBpbXB1bHNlID0gY3JlYXRlSW1wdWxzZUJ1
ZmZlcihjb250ZXh0LCBwdWxzZUxlbmd0aEZyYW1lcyk7CiAKICAgICBmb3IgKHZhciBrID0gMDsg
ayA8IG5vZGVDb3VudDsgKytrKSB7CiAgICAgICAgIGJ1ZmZlclNvdXJjZVtrXSA9IGNvbnRleHQu
Y3JlYXRlQnVmZmVyU291cmNlKCk7CkBAIC01Niw3ICs2Miw5IEBAIGZ1bmN0aW9uIGNyZWF0ZUdy
YXBoKGNvbnRleHQsIG5vZGVDb3VudCkgewogICAgIH0KIH0KIAotZnVuY3Rpb24gY3JlYXRlVGVz
dEFuZFJ1bihjb250ZXh0LCBub2RlQ291bnQpIHsKK2Z1bmN0aW9uIGNyZWF0ZVRlc3RBbmRSdW4o
Y29udGV4dCwgbm9kZUNvdW50LCBzb3VyY2VDaGFubmVsTnVtYmVyKSB7CisgICAgY2hhbm5lbE51
bWJlciA9IHNvdXJjZUNoYW5uZWxOdW1iZXI7CisKICAgICBjcmVhdGVHcmFwaChjb250ZXh0LCBu
b2RlQ291bnQpOwogCiAgICAgY29udGV4dC5vbmNvbXBsZXRlID0gY2hlY2tSZXN1bHQ7CkBAIC03
NCwxMiArODIsMzAgQEAgZnVuY3Rpb24gYW5nbGVUb0F6aW11dGgoYW5nbGUpIHsKIGZ1bmN0aW9u
IGVxdWFsUG93ZXJHYWluKGFuZ2xlKSB7CiAgICAgdmFyIGF6aW11dGggPSBhbmdsZVRvQXppbXV0
aChhbmdsZSk7CiAKLSAgICB2YXIgcGFuUG9zaXRpb24gPSAoYXppbXV0aCArIDkwKSAvIDE4MDsK
KyAgICBpZiAoY2hhbm5lbE51bWJlciA9PSAxKSB7CisgICAgICAgIHZhciBwYW5Qb3NpdGlvbiA9
IChhemltdXRoICsgOTApIC8gMTgwOwogCi0gICAgdmFyIGdhaW5MID0gTWF0aC5jb3MoMC41ICog
TWF0aC5QSSAqIHBhblBvc2l0aW9uKTsKLSAgICB2YXIgZ2FpblIgPSBNYXRoLnNpbigwLjUgKiBN
YXRoLlBJICogcGFuUG9zaXRpb24pOworICAgICAgICB2YXIgZ2FpbkwgPSBNYXRoLmNvcygwLjUg
KiBNYXRoLlBJICogcGFuUG9zaXRpb24pOworICAgICAgICB2YXIgZ2FpblIgPSBNYXRoLnNpbigw
LjUgKiBNYXRoLlBJICogcGFuUG9zaXRpb24pOwogCi0gICAgcmV0dXJuIHsgbGVmdCA6IGdhaW5M
LCByaWdodCA6IGdhaW5SIH07CisgICAgICAgIHJldHVybiB7IGxlZnQgOiBnYWluTCwgcmlnaHQg
OiBnYWluUiB9OworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChhemltdXRoIDw9IDApIHsKKyAg
ICAgICAgICAgIHZhciBwYW5Qb3NpdGlvbiA9IChhemltdXRoICsgOTApIC8gOTA7CisgICAgCisg
ICAgICAgICAgICB2YXIgZ2FpbkwgPSAxICsgTWF0aC5jb3MoMC41ICogTWF0aC5QSSAqIHBhblBv
c2l0aW9uKTsKKyAgICAgICAgICAgIHZhciBnYWluUiA9IE1hdGguc2luKDAuNSAqIE1hdGguUEkg
KiBwYW5Qb3NpdGlvbik7CisgICAgCisgICAgICAgICAgICByZXR1cm4geyBsZWZ0IDogZ2Fpbkws
IHJpZ2h0IDogZ2FpblIgfTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBwYW5Q
b3NpdGlvbiA9IGF6aW11dGggLyA5MDsKKyAgICAKKyAgICAgICAgICAgIHZhciBnYWluTCA9IE1h
dGguY29zKDAuNSAqIE1hdGguUEkgKiBwYW5Qb3NpdGlvbik7CisgICAgICAgICAgICB2YXIgZ2Fp
blIgPSAxICsgTWF0aC5zaW4oMC41ICogTWF0aC5QSSAqIHBhblBvc2l0aW9uKTsKKyAgICAKKyAg
ICAgICAgICAgIHJldHVybiB7IGxlZnQgOiBnYWluTCwgcmlnaHQgOiBnYWluUiB9OworICAgICAg
ICB9CisgICAgfQogfQogCiBmdW5jdGlvbiBjaGVja1Jlc3VsdChldmVudCkgewpAQCAtOTAsNyAr
MTE2LDcgQEAgZnVuY3Rpb24gY2hlY2tSZXN1bHQoZXZlbnQpIHsKICAgICAvLyBUaGUgbWF4IGVy
cm9yIHdlIGFsbG93IGJldHdlZW4gdGhlIHJlbmRlcmVkIGltcHVsc2UgYW5kIHRoZQogICAgIC8v
IGV4cGVjdGVkIHZhbHVlLiAgVGhpcyB2YWx1ZSBpcyBleHBlcmltZW50YWxseSBkZXRlcm1pbmVk
LiAgU2V0CiAgICAgLy8gdG8gMCB0byBtYWtlIHRoZSB0ZXN0IGZhaWwgdG8gc2VlIHdoYXQgdGhl
IGFjdHVhbCBlcnJvciBpcy4KLSAgICB2YXIgbWF4QWxsb3dlZEVycm9yID0gNi40ZS03OworICAg
IHZhciBtYXhBbGxvd2VkRXJyb3IgPSAxLjNlLTY7CiAgIAogICAgIHZhciBzdWNjZXNzID0gdHJ1
ZTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132989</attachid>
            <date>2012-03-21 01:34:52 -0700</date>
            <delta_ts>2012-04-11 12:32:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-81092-20120321163448.patch</filename>
            <type>text/plain</type>
            <size>14431</size>
            <attacher name="Wei James (wistoch)">james.wei</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExNTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmM1N2Q1NmE0NmMzZTgw
NWY0ZWVjNTY4OWVmZTYwZGE2YWI0MWUyMC4uMDA2ZjFjNTNkMzA4MWQ0NzcwYzUyY2FhNmJhYTg4
ODU0ZTAzOWE4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAzLTIxICBXZWkg
SmFtZXMgIDxqYW1lcy53ZWlAaW50ZWwuY29tPgorCisgICAgICAgIGFkZCBzdGVyZW8gc291cmNl
IHN1cHBvcnQgaW4gRXF1YWxQb3dlclBhbm5lcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODEwOTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUZXN0OiB3ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci1zdGVy
ZW8uaHRtbAorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRXF1YWxQb3dlclBhbm5lci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpFcXVhbFBvd2VyUGFubmVyOjpwYW4pOgorCiAyMDEyLTAzLTIx
ICBDaGFybGVzIFdlaSAgPGNoYXJsZXMud2VpQHRvcmNobW9iaWxlLmNvbS5jbj4KIAogICAgICAg
ICBbQmxhY2tCZXJyeV0gUmVtb3ZlIHJlZHVuZGFudCBjb2RlIGluIFNvY2tldFN0cmVhbUhhbmRs
ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0VxdWFsUG93ZXJQ
YW5uZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRXF1YWxQb3dlclBhbm5l
ci5jcHAKaW5kZXggYTJkMmRmZjRjMDAwYTgyYmY0NDg4MzlkMTIwZDNkMjY5NmRmYmVkNS4uOTAz
NTM2Nzg2Mzc2NTE3YjZjMWYzNDQwOGM3Y2I5NDBlNzkzMzVlZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRXF1YWxQb3dlclBhbm5lci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRXF1YWxQb3dlclBhbm5lci5jcHAKQEAgLTUxLDggKzUx
LDggQEAgRXF1YWxQb3dlclBhbm5lcjo6RXF1YWxQb3dlclBhbm5lcihmbG9hdCBzYW1wbGVSYXRl
KQogCiB2b2lkIEVxdWFsUG93ZXJQYW5uZXI6OnBhbihkb3VibGUgYXppbXV0aCwgZG91YmxlIC8q
ZWxldmF0aW9uKi8sIGNvbnN0IEF1ZGlvQnVzKiBpbnB1dEJ1cywgQXVkaW9CdXMqIG91dHB1dEJ1
cywgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKIHsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHN0
ZXJlbyBzb3VyY2VzCi0gICAgYm9vbCBpc0lucHV0U2FmZSA9IGlucHV0QnVzICYmIGlucHV0QnVz
LT5udW1iZXJPZkNoYW5uZWxzKCkgPT0gMSAmJiBmcmFtZXNUb1Byb2Nlc3MgPD0gaW5wdXRCdXMt
Pmxlbmd0aCgpOworICAgIHVuc2lnbmVkIG51bWJlck9mSW5wdXRDaGFubmVscyA9IGlucHV0QnVz
LT5udW1iZXJPZkNoYW5uZWxzKCk7CisgICAgYm9vbCBpc0lucHV0U2FmZSA9IGlucHV0QnVzICYm
IChudW1iZXJPZklucHV0Q2hhbm5lbHMgPT0gMSB8fCBudW1iZXJPZklucHV0Q2hhbm5lbHMgPT0g
MikgJiYgZnJhbWVzVG9Qcm9jZXNzIDw9IGlucHV0QnVzLT5sZW5ndGgoKTsKICAgICBBU1NFUlQo
aXNJbnB1dFNhZmUpOwogICAgIGlmICghaXNJbnB1dFNhZmUpCiAgICAgICAgIHJldHVybjsKQEAg
LTYyLDE0ICs2MiwxNCBAQCB2b2lkIEVxdWFsUG93ZXJQYW5uZXI6OnBhbihkb3VibGUgYXppbXV0
aCwgZG91YmxlIC8qZWxldmF0aW9uKi8sIGNvbnN0IEF1ZGlvQnVzKgogICAgIGlmICghaXNPdXRw
dXRTYWZlKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBBdWRpb0NoYW5uZWwqIGNoYW5u
ZWwgPSBpbnB1dEJ1cy0+Y2hhbm5lbCgwKTsKLSAgICBjb25zdCBmbG9hdCogc291cmNlUCA9IGNo
YW5uZWwtPmRhdGEoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgY29uc3Qg
ZmxvYXQqIHNvdXJjZUwgPSBpbnB1dEJ1cy0+Y2hhbm5lbCgwKS0+ZGF0YSgpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICBjb25zdCBmbG9hdCogc291cmNlUiA9IG51bWJlck9m
SW5wdXRDaGFubmVscyA+IDEgPyBpbnB1dEJ1cy0+Y2hhbm5lbCgxKS0+ZGF0YSgpIDogc291cmNl
TDsKICAgICBmbG9hdCogZGVzdGluYXRpb25MID0gb3V0cHV0QnVzLT5jaGFubmVsQnlUeXBlKEF1
ZGlvQnVzOjpDaGFubmVsTGVmdCktPm11dGFibGVEYXRhKCk7CiAgICAgZmxvYXQqIGRlc3RpbmF0
aW9uUiA9IG91dHB1dEJ1cy0+Y2hhbm5lbEJ5VHlwZShBdWRpb0J1czo6Q2hhbm5lbFJpZ2h0KS0+
bXV0YWJsZURhdGEoKTsKLQotICAgIGlmICghc291cmNlUCB8fCAhZGVzdGluYXRpb25MIHx8ICFk
ZXN0aW5hdGlvblIpCisgICAgCisgICAgaWYgKCFzb3VyY2VMIHx8ICFzb3VyY2VSIHx8ICFkZXN0
aW5hdGlvbkwgfHwgIWRlc3RpbmF0aW9uUikKICAgICAgICAgcmV0dXJuOwotCisgICAgCiAgICAg
Ly8gQ2xhbXAgYXppbXV0aCB0byBhbGxvd2VkIHJhbmdlIG9mIC0xODAgLT4gKzE4MC4KICAgICBh
emltdXRoID0gbWF4KC0xODAuMCwgYXppbXV0aCk7CiAgICAgYXppbXV0aCA9IG1pbigxODAuMCwg
YXppbXV0aCk7CkBAIC04MCwzNSArODAsNzMgQEAgdm9pZCBFcXVhbFBvd2VyUGFubmVyOjpwYW4o
ZG91YmxlIGF6aW11dGgsIGRvdWJsZSAvKmVsZXZhdGlvbiovLCBjb25zdCBBdWRpb0J1cyoKICAg
ICAgICAgYXppbXV0aCA9IC0xODAgLSBhemltdXRoOwogICAgIGVsc2UgaWYgKGF6aW11dGggPiA5
MCkKICAgICAgICAgYXppbXV0aCA9IDE4MCAtIGF6aW11dGg7Ci0gICAgCi0gICAgLy8gUGFuIHNt
b290aGx5IGZyb20gbGVmdCB0byByaWdodCB3aXRoIGF6aW11dGggZ29pbmcgZnJvbSAtOTAgLT4g
KzkwIGRlZ3JlZXMuCi0gICAgZG91YmxlIGRlc2lyZWRQYW5Qb3NpdGlvbiA9IChhemltdXRoICsg
OTApIC8gMTgwOwogCi0gICAgZG91YmxlIGRlc2lyZWRHYWluTCA9IGNvcygwLjUgKiBwaURvdWJs
ZSAqIGRlc2lyZWRQYW5Qb3NpdGlvbik7Ci0gICAgZG91YmxlIGRlc2lyZWRHYWluUiA9IHNpbigw
LjUgKiBwaURvdWJsZSAqIGRlc2lyZWRQYW5Qb3NpdGlvbik7CisgICAgZG91YmxlIGRlc2lyZWRQ
YW5Qb3NpdGlvbjsKKyAgICBkb3VibGUgZGVzaXJlZEdhaW5MOworICAgIGRvdWJsZSBkZXNpcmVk
R2FpblI7CisKKyAgICBpZiAobnVtYmVyT2ZJbnB1dENoYW5uZWxzID09IDEpIHsgLy8gRm9yIG1v
bm8gc291cmNlIGNhc2UuCisgICAgICAgIC8vIFBhbiBzbW9vdGhseSBmcm9tIGxlZnQgdG8gcmln
aHQgd2l0aCBhemltdXRoIGdvaW5nIGZyb20gLTkwIC0+ICs5MCBkZWdyZWVzLgorICAgICAgICBk
ZXNpcmVkUGFuUG9zaXRpb24gPSAoYXppbXV0aCArIDkwKSAvIDE4MDsKKyAgICB9IGVsc2UgeyAv
LyBGb3Igc3RlcmVvIHNvdXJjZSBjYXNlLgorICAgICAgICBpZiAoYXppbXV0aCA8PSAwKSB7IC8v
IGZyb20gLTkwIC0+IDAKKyAgICAgICAgICAgIC8vIHNvdXJjZUwgLT4gZGVzdEwgYW5kICJlcXVh
bC1wb3dlciBwYW4iIHNvdXJjZVIgYXMgaW4gbW9ubyBjYXNlCisgICAgICAgICAgICAvLyBieSB0
cmFuc2Zvcm1pbmcgdGhlICJhemltdXRoIiB2YWx1ZSBmcm9tIC05MCAtPiAwIGRlZ3JlZXMgaW50
byB0aGUgcmFuZ2UgLTkwIC0+ICs5MC4KKyAgICAgICAgICAgIGRlc2lyZWRQYW5Qb3NpdGlvbiA9
IChhemltdXRoICsgOTApIC8gOTA7CisgICAgICAgIH0gZWxzZSB7IC8vIGZyb20gMCAtPiArOTAK
KyAgICAgICAgICAgIC8vIHNvdXJjZVIgLT4gZGVzdFIgYW5kICJlcXVhbC1wb3dlciBwYW4iIHNv
dXJjZUwgYXMgaW4gbW9ubyBjYXNlCisgICAgICAgICAgICAvLyBieSB0cmFuc2Zvcm1pbmcgdGhl
ICJhemltdXRoIiB2YWx1ZSBmcm9tIDAgLT4gKzkwIGRlZ3JlZXMgaW50byB0aGUgcmFuZ2UgLTkw
IC0+ICs5MC4KKyAgICAgICAgICAgIGRlc2lyZWRQYW5Qb3NpdGlvbiA9IGF6aW11dGggLyA5MDsK
KyAgICAgICAgfQorICAgIH0KIAorICAgIGRlc2lyZWRHYWluTCA9IGNvcygwLjUgKiBwaURvdWJs
ZSAqIGRlc2lyZWRQYW5Qb3NpdGlvbik7CisgICAgZGVzaXJlZEdhaW5SID0gc2luKDAuNSAqIHBp
RG91YmxlICogZGVzaXJlZFBhblBvc2l0aW9uKTsKKyAgIAogICAgIC8vIERvbid0IGRlLXppcHBl
ciBvbiBmaXJzdCByZW5kZXIgY2FsbC4KICAgICBpZiAobV9pc0ZpcnN0UmVuZGVyKSB7CiAgICAg
ICAgIG1faXNGaXJzdFJlbmRlciA9IGZhbHNlOwogICAgICAgICBtX2dhaW5MID0gZGVzaXJlZEdh
aW5MOwogICAgICAgICBtX2dhaW5SID0gZGVzaXJlZEdhaW5SOwogICAgIH0KLQorICAgIAogICAg
IC8vIENhY2hlIGluIGxvY2FsIHZhcmlhYmxlcy4KICAgICBkb3VibGUgZ2FpbkwgPSBtX2dhaW5M
OwogICAgIGRvdWJsZSBnYWluUiA9IG1fZ2FpblI7Ci0KKyAgICAKICAgICAvLyBHZXQgbG9jYWwg
Y29weSBvZiBzbW9vdGhpbmcgY29uc3RhbnQuCiAgICAgY29uc3QgZG91YmxlIFNtb290aGluZ0Nv
bnN0YW50ID0gbV9zbW9vdGhpbmdDb25zdGFudDsKLQorICAgIAogICAgIGludCBuID0gZnJhbWVz
VG9Qcm9jZXNzOwogCi0gICAgd2hpbGUgKG4tLSkgewotICAgICAgICBmbG9hdCBpbnB1dCA9ICpz
b3VyY2VQKys7Ci0gICAgICAgIGdhaW5MICs9IChkZXNpcmVkR2FpbkwgLSBnYWluTCkgKiBTbW9v
dGhpbmdDb25zdGFudDsKLSAgICAgICAgZ2FpblIgKz0gKGRlc2lyZWRHYWluUiAtIGdhaW5SKSAq
IFNtb290aGluZ0NvbnN0YW50OwotICAgICAgICAqZGVzdGluYXRpb25MKysgPSBzdGF0aWNfY2Fz
dDxmbG9hdD4oaW5wdXQgKiBnYWluTCk7Ci0gICAgICAgICpkZXN0aW5hdGlvblIrKyA9IHN0YXRp
Y19jYXN0PGZsb2F0PihpbnB1dCAqIGdhaW5SKTsKKyAgICBpZiAobnVtYmVyT2ZJbnB1dENoYW5u
ZWxzID09IDEpIHsgLy8gRm9yIG1vbm8gc291cmNlIGNhc2UuCisgICAgICAgIHdoaWxlIChuLS0p
IHsKKyAgICAgICAgICAgIGZsb2F0IGlucHV0TCA9ICpzb3VyY2VMKys7CisgICAgICAgICAgICBn
YWluTCArPSAoZGVzaXJlZEdhaW5MIC0gZ2FpbkwpICogU21vb3RoaW5nQ29uc3RhbnQ7CisgICAg
ICAgICAgICBnYWluUiArPSAoZGVzaXJlZEdhaW5SIC0gZ2FpblIpICogU21vb3RoaW5nQ29uc3Rh
bnQ7CisgICAgICAgICAgICAqZGVzdGluYXRpb25MKysgPSBzdGF0aWNfY2FzdDxmbG9hdD4oaW5w
dXRMICogZ2FpbkwpOworICAgICAgICAgICAgKmRlc3RpbmF0aW9uUisrID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGlucHV0TCAqIGdhaW5SKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7IC8vIEZvciBz
dGVyZW8gc291cmNlIGNhc2UuCisgICAgICAgIGlmIChhemltdXRoIDw9IDApIHsgLy8gZnJvbSAt
OTAgLT4gMAorICAgICAgICAgICAgd2hpbGUgKG4tLSkgeworICAgICAgICAgICAgICAgIGZsb2F0
IGlucHV0TCA9ICpzb3VyY2VMKys7CisgICAgICAgICAgICAgICAgZmxvYXQgaW5wdXRSID0gKnNv
dXJjZVIrKzsKKyAgICAgICAgICAgICAgICBnYWluTCArPSAoZGVzaXJlZEdhaW5MIC0gZ2Fpbkwp
ICogU21vb3RoaW5nQ29uc3RhbnQ7CisgICAgICAgICAgICAgICAgZ2FpblIgKz0gKGRlc2lyZWRH
YWluUiAtIGdhaW5SKSAqIFNtb290aGluZ0NvbnN0YW50OworICAgICAgICAgICAgICAgICpkZXN0
aW5hdGlvbkwrKyA9IHN0YXRpY19jYXN0PGZsb2F0PihpbnB1dEwgKyBpbnB1dFIgKiBnYWluTCk7
CisgICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uUisrID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGlu
cHV0UiAqIGdhaW5SKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsgLy8gZnJvbSAw
IC0+ICs5MAorICAgICAgICAgICAgd2hpbGUgKG4tLSkgeworICAgICAgICAgICAgICAgIGZsb2F0
IGlucHV0TCA9ICpzb3VyY2VMKys7CisgICAgICAgICAgICAgICAgZmxvYXQgaW5wdXRSID0gKnNv
dXJjZVIrKzsKKyAgICAgICAgICAgICAgICBnYWluTCArPSAoZGVzaXJlZEdhaW5MIC0gZ2Fpbkwp
ICogU21vb3RoaW5nQ29uc3RhbnQ7CisgICAgICAgICAgICAgICAgZ2FpblIgKz0gKGRlc2lyZWRH
YWluUiAtIGdhaW5SKSAqIFNtb290aGluZ0NvbnN0YW50OworICAgICAgICAgICAgICAgICpkZXN0
aW5hdGlvbkwrKyA9IHN0YXRpY19jYXN0PGZsb2F0PihpbnB1dEwgKiBnYWluTCk7CisgICAgICAg
ICAgICAgICAgKmRlc3RpbmF0aW9uUisrID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGlucHV0UiArIGlu
cHV0TCAqIGdhaW5SKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIG1f
Z2FpbkwgPSBnYWluTDsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCBmODVlOGQwZGEyZDg3ZWIxMWE1N2EyMjM5YWZkNjMyNTQx
MGVmODQzLi5kNjQxOTMyNjM2NDdmOWE4ZmZmODc1OGY3ZDQzY2IwMDE1MGMyNzczIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMTItMDMtMjEgIFdlaSBKYW1lcyAgPGphbWVzLndlaUBpbnRlbC5j
b20+CisKKyAgICAgICAgYWRkIHN0ZXJlbyBzb3VyY2Ugc3VwcG9ydCBpbiBFcXVhbFBvd2VyUGFu
bmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTA5
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2Vi
YXVkaW8vcGFubmVyLWVxdWFscG93ZXItc3RlcmVvLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogd2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXItc3RlcmVvLmh0bWw6IENvcGllZCBmcm9t
IExheW91dFRlc3RzL3dlYmF1ZGlvL3Bhbm5lci1lcXVhbHBvd2VyLmh0bWwuCisgICAgICAgICog
d2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXIuaHRtbDoKKyAgICAgICAgKiB3ZWJhdWRpby9yZXNv
dXJjZXMvYXVkaW8tdGVzdGluZy5qczoKKyAgICAgICAgKGNyZWF0ZVN0ZXJlb0ltcHVsc2VCdWZm
ZXIpOgorICAgICAgICAqIHdlYmF1ZGlvL3Jlc291cmNlcy9wYW5uZXItbW9kZWwtdGVzdGluZy5q
czoKKyAgICAgICAgKGNyZWF0ZUdyYXBoKToKKyAgICAgICAgKGNyZWF0ZVRlc3RBbmRSdW4pOgor
ICAgICAgICAoZXF1YWxQb3dlckdhaW4pOgorICAgICAgICAoY2hlY2tSZXN1bHQpOgorCiAyMDEy
LTAzLTIxICBLZWlzaGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgogCiAgICAgICAgIFtj
aHJvbWl1bV0gUmViYXNlbGluZSB0ZXN0cyBhZnRlciByMTExNDk3LgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXItc3RlcmVvLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3dlYmF1ZGlvL3Bhbm5lci1lcXVhbHBvd2VyLXN0ZXJlby1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNTk4N2M3MmUyNWQzZTU5ZDYwZWY2MTE2ZDkyOThiMDkxMmYzMjA1OAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Bhbm5lci1lcXVhbHBvd2Vy
LXN0ZXJlby1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMyBAQAorVGVzdCBlcXVhbC1wb3dlciBw
YW5uZXIgbW9kZWwgb2YgQXVkaW9QYW5uZXJOb2RlIHdpdGggc3RlcmVvIHNvdXJjZS4KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitQQVNTIE51bWJlciBvZiBpbXB1bHNlcyBtYXRjaGVz
IHRoZSBudW1iZXIgb2YgcGFubmVyIG5vZGVzLgorUEFTUyBBbGwgaW1wdWxzZXMgYXQgZXhwZWN0
ZWQgb2Zmc2V0cy4KK1BBU1MgTGVmdCBjaGFubmVsIGdhaW4gdmFsdWVzIGFyZSBjb3JyZWN0Lgor
UEFTUyBSaWdodCBjaGFubmVsIGdhaW4gdmFsdWVzIGFyZSBjb3JyZWN0LgorUEFTUyBFcXVhbFBv
d2VyIHBhbm5lciB0ZXN0IHBhc3NlZAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Bhbm5l
ci1lcXVhbHBvd2VyLXN0ZXJlby5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcGFubmVyLWVx
dWFscG93ZXItc3RlcmVvLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDMxYzY5YzYwNzRlMDRiZjcyZWYwZGU2
OTE5NGI1MmQxYzk4M2ZjNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmF1ZGlv
L3Bhbm5lci1lcXVhbHBvd2VyLXN0ZXJlby5odG1sCkBAIC0wLDAgKzEsNDQgQEAKKzwhRE9DVFlQ
RSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgor
PGh0bWw+CisgIDxoZWFkPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKyAgICA8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9InJlc291cmNlcy9wYW5uZXItbW9kZWwtdGVzdGluZy5qcyI+PC9zY3JpcHQ+CisgIDwvaGVh
ZD4KKworICA8Ym9keT4KKyAgICA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+CisgICAgPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+CisKKyAgICA8c2NyaXB0PgorICAgICAgZGVzY3JpcHRpb24o
IlRlc3QgZXF1YWwtcG93ZXIgcGFubmVyIG1vZGVsIG9mIEF1ZGlvUGFubmVyTm9kZSB3aXRoIHN0
ZXJlbyBzb3VyY2UuIik7CisKKyAgICAgIC8vIFRvIHRlc3QgdGhlIHBhbm5lciwgd2UgY3JlYXRl
IGEgbnVtYmVyIG9mIHBhbm5lciBub2RlcworICAgICAgLy8gZXF1YWxseSBzcGFjZWQgb24gYSBz
ZW1pY2lyY2xlIGF0IHVuaXQgZGlzdGFuY2UuICBUaGUKKyAgICAgIC8vIHNlbWljaXJjbGUgY292
ZXJzIHRoZSBhemltdXRoIHJhbmdlIGZyb20gLTkwIHRvIDkwIGRlZywKKyAgICAgIC8vIGNvdmVy
aW5nIGZ1bGwgbGVmdCB0byBmdWxsIHJpZ2h0LiAgRWFjaCBzb3VyY2UgaXMgYW4gaW1wdWxzZQor
ICAgICAgLy8gdHVybmluZyBhdCBhIGRpZmZlcmVudCB0aW1lIGFuZCB3ZSBjaGVjayB0aGF0IHRo
ZSByZW5kZXJlZAorICAgICAgLy8gaW1wdWxzZSBoYXMgdGhlIGV4cGVjdGVkIGdhaW4uCisgICAg
ICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
CisgICAgICAgICAgfQorCisgICAgICAgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwor
CisgICAgICAgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dC4KKyAgICAgICAgICBj
b250ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1wbGVSYXRlICogcmVuZGVyTGVu
Z3RoU2Vjb25kcywgc2FtcGxlUmF0ZSk7CisKKyAgICAgICAgICBjcmVhdGVUZXN0QW5kUnVuKGNv
bnRleHQsIG5vZGVzVG9DcmVhdGUsIDIpOworICAgICAgfQorCisgICAgICBydW5UZXN0KCk7Cisg
ICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCisgICAgPC9zY3JpcHQ+CisKKyAgICA8
c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8v
cGFubmVyLWVxdWFscG93ZXIuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Bhbm5lci1lcXVh
bHBvd2VyLmh0bWwKaW5kZXggNWVhMmIzMzAzZjQyZGQwYzkwNWM2NWU1NTYwNDRmZDc0OTYyMDkz
NC4uMjgyZjkwNjdjYzNmOTAxZmNjY2I5YjFhNWNjOTJiYmU1YWIxY2FjOSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vcGFubmVyLWVxdWFscG93ZXIuaHRtbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9wYW5uZXItZXF1YWxwb3dlci5odG1sCkBAIC0zMSw3ICszMSw3IEBACiAg
ICAgICAgICAgLy8gQ3JlYXRlIG9mZmxpbmUgYXVkaW8gY29udGV4dC4KICAgICAgICAgICBjb250
ZXh0ID0gbmV3IHdlYmtpdEF1ZGlvQ29udGV4dCgyLCBzYW1wbGVSYXRlICogcmVuZGVyTGVuZ3Ro
U2Vjb25kcywgc2FtcGxlUmF0ZSk7CiAKLSAgICAgICAgICBjcmVhdGVUZXN0QW5kUnVuKGNvbnRl
eHQsIG5vZGVzVG9DcmVhdGUpOworICAgICAgICAgIGNyZWF0ZVRlc3RBbmRSdW4oY29udGV4dCwg
bm9kZXNUb0NyZWF0ZSwgMSk7CiAgICAgICB9CiAKICAgICAgIHJ1blRlc3QoKTsKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9hdWRpby10ZXN0aW5nLmpzIGIvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMKaW5kZXggYWYwYWQy
N2EyMzJlMjU5Y2Q4MWZlNTMzZDU3NGE3ZTI5NWNjZGY4Ny4uZDA3NjIwZDNjZGNmMzE3YmJkZjgx
OTUwZjNjNDdmMGEzODFhYjQ3NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVz
b3VyY2VzL2F1ZGlvLXRlc3RpbmcuanMKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3Vy
Y2VzL2F1ZGlvLXRlc3RpbmcuanMKQEAgLTExNSw2ICsxMTUsMjMgQEAgZnVuY3Rpb24gY3JlYXRl
SW1wdWxzZUJ1ZmZlcihjb250ZXh0LCBzYW1wbGVGcmFtZUxlbmd0aCkgewogICAgIHJldHVybiBh
dWRpb0J1ZmZlcjsKIH0KIAorLy8gQ3JlYXRlIGEgc3RlcmVvIGltcHVsc2UgaW4gYSBidWZmZXIg
b2YgbGVuZ3RoIHNhbXBsZUZyYW1lTGVuZ3RoCitmdW5jdGlvbiBjcmVhdGVTdGVyZW9JbXB1bHNl
QnVmZmVyKGNvbnRleHQsIHNhbXBsZUZyYW1lTGVuZ3RoKSB7CisgICAgdmFyIGF1ZGlvQnVmZmVy
ID0gY29udGV4dC5jcmVhdGVCdWZmZXIoMiwgc2FtcGxlRnJhbWVMZW5ndGgsIGNvbnRleHQuc2Ft
cGxlUmF0ZSk7CisgICAgdmFyIG4gPSBhdWRpb0J1ZmZlci5sZW5ndGg7CisgICAgdmFyIGRhdGFM
ID0gYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoMCk7CisgICAgdmFyIGRhdGFSID0gYXVkaW9C
dWZmZXIuZ2V0Q2hhbm5lbERhdGEoMSk7CisKKyAgICBmb3IgKHZhciBrID0gMDsgayA8IG47ICsr
aykgeworICAgICAgICBkYXRhTFtrXSA9IDA7CisgICAgICAgIGRhdGFSW2tdID0gMDsKKyAgICB9
CisgICAgZGF0YUxbMF0gPSAxOworICAgIGRhdGFSWzBdID0gMTsKKworICAgIHJldHVybiBhdWRp
b0J1ZmZlcjsKK30KKwogLy8gQ29udmVydCB0aW1lIChpbiBzZWNvbmRzKSB0byBzYW1wbGUgZnJh
bWVzLgogZnVuY3Rpb24gdGltZVRvU2FtcGxlRnJhbWUodGltZSwgc2FtcGxlUmF0ZSkgewogICAg
IHJldHVybiBNYXRoLmZsb29yKDAuNSArIHRpbWUgKiBzYW1wbGVSYXRlKTsKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9wYW5uZXItbW9kZWwtdGVzdGluZy5qcyBi
L0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9wYW5uZXItbW9kZWwtdGVzdGluZy5qcwpp
bmRleCBjOGU3MzNjODM0NjBmOTBkYjBjNDgxZTY0NzlhYjJhNDE0MGQ1NjA2Li4xODg4ODAwZmUx
MGM4NjBmN2M1MTIxZWY5YjcxZjhmZWY1MjIzZTNhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93
ZWJhdWRpby9yZXNvdXJjZXMvcGFubmVyLW1vZGVsLXRlc3RpbmcuanMKKysrIGIvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vcmVzb3VyY2VzL3Bhbm5lci1tb2RlbC10ZXN0aW5nLmpzCkBAIC0xLDUgKzEs
NyBAQAogdmFyIHNhbXBsZVJhdGUgPSA0NDEwMC4wOwogCit2YXIgbnVtYmVyT2ZDaGFubmVscyA9
IDE7CisKIC8vIFRpbWUgc3RlcCB3aGVuIGVhY2ggcGFubmVyIG5vZGUgc3RhcnRzLgogdmFyIHRp
bWVTdGVwID0gMC4wMDE7CiAKQEAgLTMzLDcgKzM1LDExIEBAIGZ1bmN0aW9uIGNyZWF0ZUdyYXBo
KGNvbnRleHQsIG5vZGVDb3VudCkgewogICAgIC8vIHRvIGluY2x1ZGUgYm90aCAwIGFuZCAxODAg
ZGVnLgogICAgIHZhciBhbmdsZVN0ZXAgPSBNYXRoLlBJIC8gKG5vZGVDb3VudCAtIDEpOwogCi0g
ICAgaW1wdWxzZSA9IGNyZWF0ZUltcHVsc2VCdWZmZXIoY29udGV4dCwgcHVsc2VMZW5ndGhGcmFt
ZXMpOworICAgIGlmIChudW1iZXJPZkNoYW5uZWxzID09IDIpIHsKKyAgICAgICAgaW1wdWxzZSA9
IGNyZWF0ZVN0ZXJlb0ltcHVsc2VCdWZmZXIoY29udGV4dCwgcHVsc2VMZW5ndGhGcmFtZXMpOwor
ICAgIH0KKyAgICBlbHNlCisgICAgICAgIGltcHVsc2UgPSBjcmVhdGVJbXB1bHNlQnVmZmVyKGNv
bnRleHQsIHB1bHNlTGVuZ3RoRnJhbWVzKTsKIAogICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbm9k
ZUNvdW50OyArK2spIHsKICAgICAgICAgYnVmZmVyU291cmNlW2tdID0gY29udGV4dC5jcmVhdGVC
dWZmZXJTb3VyY2UoKTsKQEAgLTU2LDcgKzYyLDkgQEAgZnVuY3Rpb24gY3JlYXRlR3JhcGgoY29u
dGV4dCwgbm9kZUNvdW50KSB7CiAgICAgfQogfQogCi1mdW5jdGlvbiBjcmVhdGVUZXN0QW5kUnVu
KGNvbnRleHQsIG5vZGVDb3VudCkgeworZnVuY3Rpb24gY3JlYXRlVGVzdEFuZFJ1bihjb250ZXh0
LCBub2RlQ291bnQsIG51bWJlck9mU291cmNlQ2hhbm5lbHMpIHsKKyAgICBudW1iZXJPZkNoYW5u
ZWxzID0gbnVtYmVyT2ZTb3VyY2VDaGFubmVsczsKKwogICAgIGNyZWF0ZUdyYXBoKGNvbnRleHQs
IG5vZGVDb3VudCk7CiAKICAgICBjb250ZXh0Lm9uY29tcGxldGUgPSBjaGVja1Jlc3VsdDsKQEAg
LTc0LDEyICs4MiwzMCBAQCBmdW5jdGlvbiBhbmdsZVRvQXppbXV0aChhbmdsZSkgewogZnVuY3Rp
b24gZXF1YWxQb3dlckdhaW4oYW5nbGUpIHsKICAgICB2YXIgYXppbXV0aCA9IGFuZ2xlVG9Bemlt
dXRoKGFuZ2xlKTsKIAotICAgIHZhciBwYW5Qb3NpdGlvbiA9IChhemltdXRoICsgOTApIC8gMTgw
OworICAgIGlmIChudW1iZXJPZkNoYW5uZWxzID09IDEpIHsKKyAgICAgICAgdmFyIHBhblBvc2l0
aW9uID0gKGF6aW11dGggKyA5MCkgLyAxODA7CiAKLSAgICB2YXIgZ2FpbkwgPSBNYXRoLmNvcygw
LjUgKiBNYXRoLlBJICogcGFuUG9zaXRpb24pOwotICAgIHZhciBnYWluUiA9IE1hdGguc2luKDAu
NSAqIE1hdGguUEkgKiBwYW5Qb3NpdGlvbik7CisgICAgICAgIHZhciBnYWluTCA9IE1hdGguY29z
KDAuNSAqIE1hdGguUEkgKiBwYW5Qb3NpdGlvbik7CisgICAgICAgIHZhciBnYWluUiA9IE1hdGgu
c2luKDAuNSAqIE1hdGguUEkgKiBwYW5Qb3NpdGlvbik7CiAKLSAgICByZXR1cm4geyBsZWZ0IDog
Z2FpbkwsIHJpZ2h0IDogZ2FpblIgfTsKKyAgICAgICAgcmV0dXJuIHsgbGVmdCA6IGdhaW5MLCBy
aWdodCA6IGdhaW5SIH07CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGF6aW11dGggPD0gMCkg
eworICAgICAgICAgICAgdmFyIHBhblBvc2l0aW9uID0gKGF6aW11dGggKyA5MCkgLyA5MDsKKyAg
ICAKKyAgICAgICAgICAgIHZhciBnYWluTCA9IDEgKyBNYXRoLmNvcygwLjUgKiBNYXRoLlBJICog
cGFuUG9zaXRpb24pOworICAgICAgICAgICAgdmFyIGdhaW5SID0gTWF0aC5zaW4oMC41ICogTWF0
aC5QSSAqIHBhblBvc2l0aW9uKTsKKyAgICAKKyAgICAgICAgICAgIHJldHVybiB7IGxlZnQgOiBn
YWluTCwgcmlnaHQgOiBnYWluUiB9OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFy
IHBhblBvc2l0aW9uID0gYXppbXV0aCAvIDkwOworICAgIAorICAgICAgICAgICAgdmFyIGdhaW5M
ID0gTWF0aC5jb3MoMC41ICogTWF0aC5QSSAqIHBhblBvc2l0aW9uKTsKKyAgICAgICAgICAgIHZh
ciBnYWluUiA9IDEgKyBNYXRoLnNpbigwLjUgKiBNYXRoLlBJICogcGFuUG9zaXRpb24pOworICAg
IAorICAgICAgICAgICAgcmV0dXJuIHsgbGVmdCA6IGdhaW5MLCByaWdodCA6IGdhaW5SIH07Cisg
ICAgICAgIH0KKyAgICB9CiB9CiAKIGZ1bmN0aW9uIGNoZWNrUmVzdWx0KGV2ZW50KSB7CkBAIC05
MCw3ICsxMTYsNyBAQCBmdW5jdGlvbiBjaGVja1Jlc3VsdChldmVudCkgewogICAgIC8vIFRoZSBt
YXggZXJyb3Igd2UgYWxsb3cgYmV0d2VlbiB0aGUgcmVuZGVyZWQgaW1wdWxzZSBhbmQgdGhlCiAg
ICAgLy8gZXhwZWN0ZWQgdmFsdWUuICBUaGlzIHZhbHVlIGlzIGV4cGVyaW1lbnRhbGx5IGRldGVy
bWluZWQuICBTZXQKICAgICAvLyB0byAwIHRvIG1ha2UgdGhlIHRlc3QgZmFpbCB0byBzZWUgd2hh
dCB0aGUgYWN0dWFsIGVycm9yIGlzLgotICAgIHZhciBtYXhBbGxvd2VkRXJyb3IgPSA2LjRlLTc7
CisgICAgdmFyIG1heEFsbG93ZWRFcnJvciA9IDEuM2UtNjsKICAgCiAgICAgdmFyIHN1Y2Nlc3Mg
PSB0cnVlOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>