<?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>29292</bug_id>
          
          <creation_ts>2009-09-15 21:53:15 -0700</creation_ts>
          <short_desc>[HTML5][Forms] Support for &lt;textarea maxlength=N&gt;</short_desc>
          <delta_ts>2009-09-30 14:32:08 -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>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#attr-fe-maxlength</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>27454</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Tamura">tkent</reporter>
          <assigned_to name="Kent Tamura">tkent</assigned_to>
          <cc>darin</cc>
    
    <cc>michelangelo</cc>
    
    <cc>pkasting</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>147470</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-09-15 21:53:15 -0700</bug_when>
    <thetext>As discussed in Bug#27454, the maxlength attribute will limit user-input length, and won&apos;t truncate a value set to the .value IDL attribute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147727</commentid>
    <comment_count>1</comment_count>
      <attachid>39679</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-09-16 20:18:31 -0700</bug_when>
    <thetext>Created attachment 39679
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147893</commentid>
    <comment_count>2</comment_count>
      <attachid>39679</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-09-17 12:37:34 -0700</bug_when>
    <thetext>Comment on attachment 39679
Proposed patch

&gt; +    if (!hasAttribute(maxlengthAttr))
&gt; +        return;
&gt; +    bool ok;
&gt; +    unsigned maxLength = getAttribute(maxlengthAttr).string().toUInt(&amp;ok);
&gt; +    if (!ok)
&gt; +        return;

It&apos;s a shame to do two hash table lookups here for the maxlength attribute. And there&apos;s no reason for that check. toUInt will give false for &quot;ok&quot; when maxlengthAttr is null, so I believe the hasAttribute check is unnecessary extra work.

&gt; +    int currentLength = InputElement::numGraphemeClusters(toRenderTextControl(renderer())-&gt;text().impl());
&gt; +    int selectionLength = InputElement::numGraphemeClusters(plainText(document()-&gt;frame()-&gt;selection()-&gt;selection().toNormalizedRange().get()).impl());

I think these functions should just be public functions, perhaps in PlatformString.h, rather than members of the InputElement class. It also seems inconvenient to have to pass them StringImpl* rather than just a String. As we make these functions more public it makes sense to me to make them more normal functions and less special-purpose.

&gt; +    if (newLength &lt; static_cast&lt;int&gt;(proposedValue.length())) {
&gt; +        String string = proposedValue;
&gt; +        return string.left(newLength);
&gt; +    }
&gt; +    return proposedValue;

This can just be written:

    return proposedValue.left(newLength);

The left function already has optimization for the case where the length is &gt;= the length of the string, and you don&apos;t need to redo it.

&gt; +    bool ok;
&gt; +    unsigned maxLength = getAttribute(maxlengthAttr).string().toUInt(&amp;ok);
&gt; +    return ok ? maxLength : 0;

toUInt already guarantees it will return 0 if the string can&apos;t be parsed, so you can just write:

    return getAttribute(maxlengthAttr).string().toUInt();

&gt; +    static String sanitizeUserInputValue(const String&amp;, int);

It&apos;s not good to leave out the argument name here for the int. It&apos;s clear what this int would be. So it needs a name.

I&apos;m going to say review- because I think at least some of my suggestions above really ought to be done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148004</commentid>
    <comment_count>3</comment_count>
      <attachid>39745</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-09-17 19:30:23 -0700</bug_when>
    <thetext>Created attachment 39745
Proposed patch (rev.2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148005</commentid>
    <comment_count>4</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-09-17 19:32:53 -0700</bug_when>
    <thetext>(In reply to comment #2)

Thank you for the helpful comments.

&gt; (From update of attachment 39679 [details])
&gt; &gt; +    if (!hasAttribute(maxlengthAttr))
&gt; &gt; +        return;
&gt; &gt; +    bool ok;
&gt; &gt; +    unsigned maxLength = getAttribute(maxlengthAttr).string().toUInt(&amp;ok);
&gt; &gt; +    if (!ok)
&gt; &gt; +        return;
&gt; 
&gt; It&apos;s a shame to do two hash table lookups here for the maxlength attribute. And
&gt; there&apos;s no reason for that check. toUInt will give false for &quot;ok&quot; when
&gt; maxlengthAttr is null, so I believe the hasAttribute check is unnecessary extra
&gt; work.

Removed hasAttribute().


&gt; &gt; +    int currentLength = InputElement::numGraphemeClusters(toRenderTextControl(renderer())-&gt;text().impl());
&gt; &gt; +    int selectionLength = InputElement::numGraphemeClusters(plainText(document()-&gt;frame()-&gt;selection()-&gt;selection().toNormalizedRange().get()).impl());
&gt; 
&gt; I think these functions should just be public functions, perhaps in
&gt; PlatformString.h, rather than members of the InputElement class. It also seems
&gt; inconvenient to have to pass them StringImpl* rather than just a String. As we
&gt; make these functions more public it makes sense to me to make them more normal
&gt; functions and less special-purpose.

Moved the grapheme functions to String class.


&gt; &gt; +    if (newLength &lt; static_cast&lt;int&gt;(proposedValue.length())) {
&gt; &gt; +        String string = proposedValue;
&gt; &gt; +        return string.left(newLength);
&gt; &gt; +    }
&gt; &gt; +    return proposedValue;
&gt; 
&gt; This can just be written:
&gt; 
&gt;     return proposedValue.left(newLength);

Done.


&gt; &gt; +    bool ok;
&gt; &gt; +    unsigned maxLength = getAttribute(maxlengthAttr).string().toUInt(&amp;ok);
&gt; &gt; +    return ok ? maxLength : 0;
&gt; 
&gt; toUInt already guarantees it will return 0 if the string can&apos;t be parsed, so
&gt; you can just write:
&gt; 
&gt;     return getAttribute(maxlengthAttr).string().toUInt();

Done.


&gt; &gt; +    static String sanitizeUserInputValue(const String&amp;, int);
&gt; 
&gt; It&apos;s not good to leave out the argument name here for the int. It&apos;s clear what
&gt; this int would be. So it needs a name.

Added the argument name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148216</commentid>
    <comment_count>5</comment_count>
      <attachid>39745</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-09-18 09:48:00 -0700</bug_when>
    <thetext>Comment on attachment 39745
Proposed patch (rev.2)

&gt; +    if (isEmpty())
&gt; +        return 0;

This special case for empty and null strings is not needed.

&gt; +    TextBreakIterator* it = characterBreakIterator(characters(), length());
&gt; +    if (!it)
&gt; +        return 0;

This is not new code, but it&apos;s really non-useful to return 0 here. It would be way better to just return length().

&gt; +    if (isEmpty())
&gt; +        return 0;

This special case for empty and null strings is not needed.

&gt; +    TextBreakIterator* it = characterBreakIterator(characters(), length());
&gt; +    if (!it)
&gt; +        return 0;

This is not new code, but it&apos;s really non-useful to return 0 here. It would be better to return min(length(), numGraphemeClusters).

r=me as-is, though</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148241</commentid>
    <comment_count>6</comment_count>
      <attachid>39769</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-09-18 10:54:14 -0700</bug_when>
    <thetext>Created attachment 39769
Proposed patch (rev.3)

Clean up String::numGraphemeClusters() and String::numCharactersInGraphemeClusters() for Comment #5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148251</commentid>
    <comment_count>7</comment_count>
      <attachid>39769</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-09-18 11:13:35 -0700</bug_when>
    <thetext>Comment on attachment 39769
Proposed patch (rev.3)

&gt; +    unsigned maxLength = static_cast&lt;unsigned&gt;(data.maxLength());  // maxLength() never be negative.

Coding style says one space before the &quot;//&quot;.

The grammar here is wrong. It could be &quot;can never be negative&quot; or &quot;never is negative&quot; instead.

&gt; +    unsigned appendableLength =  maxLength &gt; baseLength ? maxLength - baseLength : 0;

Extra space here after the equal sign.

Another way to write this is:

    max(maxLength, baseLength) - baseLength

Your way is probably clearer, though.

&gt; +    TextBreakIterator* it = characterBreakIterator(characters(), length());
&gt; +    if (!it)
&gt; +        return length();

The value length() is not right here. It should be min(length(), numGraphemeClusters) instead.

I&apos;m going to say review+ because realistically characterBreakIterator will not return 0 so that comment is not important.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148261</commentid>
    <comment_count>8</comment_count>
      <attachid>39769</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-18 11:43:36 -0700</bug_when>
    <thetext>Comment on attachment 39769
Proposed patch (rev.3)

Darin had review comments, so this can&apos;t be auto-committed unless you post a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148273</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-09-18 11:53:24 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Darin had review comments, so this can&apos;t be auto-committed unless you post a
&gt; new patch.

My comments are optional, though. We could land it as-is if Kent wants to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148330</commentid>
    <comment_count>10</comment_count>
      <attachid>39781</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-09-18 13:06:48 -0700</bug_when>
    <thetext>Created attachment 39781
Proposed patch (rev.4)

&gt; &gt; +    unsigned maxLength = static_cast&lt;unsigned&gt;(data.maxLength());  // maxLength() never be negative.
&gt; Coding style says one space before the &quot;//&quot;.

Fixed.

&gt; The grammar here is wrong. It could be &quot;can never be negative&quot; or &quot;never is
&gt; negative&quot; instead.

Fixed.

&gt; &gt; +    unsigned appendableLength =  maxLength &gt; baseLength ? maxLength - baseLength : 0;
&gt; Extra space here after the equal sign.

Fixed.

&gt; &gt; +    TextBreakIterator* it = characterBreakIterator(characters(), length());
&gt; The value length() is not right here. It should be min(length(),
&gt; numGraphemeClusters) instead.

I don&apos;t think so.
Suppose that the string is &quot;\ud800\udc00&quot;, of which length() is 2 and has 1 grapheme.  numCharactersInGraphmeClusters(1) with this string should return 2.  If we specified min(length(), nmGraphemeClusters) to characerBreakIterator(), the result would be 1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148389</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-09-18 14:28:16 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Suppose that the string is &quot;\ud800\udc00&quot;, of which length() is 2 and has 1
&gt; grapheme.  numCharactersInGraphmeClusters(1) with this string should return 2. 
&gt; If we specified min(length(), nmGraphemeClusters) to characerBreakIterator(),
&gt; the result would be 1.

But the whole point is that when the iterator can&apos;t be created we have to assume that each character is a separate grapheme cluster because we don’t know any better.

Suppose that the string is &quot;ab&quot;. numCharactersInGraphemeClusters(1) should return 1, not 2. If we specify length(), the result would be 2.

Obviously we can’t handle things correctly without the character iterator, but it seems clear that treating the entire string as one giant grapheme cluster is not the way to go. And that’s what returning length() does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148449</commentid>
    <comment_count>12</comment_count>
      <attachid>39807</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-09-18 17:53:38 -0700</bug_when>
    <thetext>Created attachment 39807
Proposed patch (rev.5)

&gt; Suppose that the string is &quot;ab&quot;. numCharactersInGraphemeClusters(1) should
&gt; return 1, not 2. If we specify length(), the result would be 2.

ok, I changed it to:

unsigned String::numCharactersInGraphemeClusters(unsigned numGraphemeClusters) const
{
    TextBreakIterator* it = characterBreakIterator(characters(), length());
    if (!it)
        return min(length(), numGraphemeClusters);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148717</commentid>
    <comment_count>13</comment_count>
      <attachid>39855</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-09-21 09:23:00 -0700</bug_when>
    <thetext>Created attachment 39855
Proposed patch (rev.6)

 resources/ -&gt; script-tests/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148927</commentid>
    <comment_count>14</comment_count>
      <attachid>39745</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-21 18:29:54 -0700</bug_when>
    <thetext>Comment on attachment 39745
Proposed patch (rev.2)

Removing Darin&apos;s r+ from this obsolete patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>148928</commentid>
    <comment_count>15</comment_count>
      <attachid>39769</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-21 18:30:04 -0700</bug_when>
    <thetext>Comment on attachment 39769
Proposed patch (rev.3)

Removing Darin&apos;s r+ from this obsolete patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149432</commentid>
    <comment_count>16</comment_count>
      <attachid>39855</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-23 10:28:47 -0700</bug_when>
    <thetext>Comment on attachment 39855
Proposed patch (rev.6)

Darin reviewed the previous patch, so it should be easy for him to r+ this one.  I&apos;d like to leave it for him to do that.  I would need to read up to make sure that your numCharactersInGraphemeClusters changes are OK.... especially since they&apos;re not explained in the ChangeLog. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149635</commentid>
    <comment_count>17</comment_count>
      <attachid>39855</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-23 19:55:49 -0700</bug_when>
    <thetext>Comment on attachment 39855
Proposed patch (rev.6)

Clearing flags on attachment: 39855

Committed r48698: &lt;http://trac.webkit.org/changeset/48698&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>150439</commentid>
    <comment_count>18</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2009-09-27 18:01:12 -0700</bug_when>
    <thetext>The patch was landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151358</commentid>
    <comment_count>19</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-09-30 14:32:08 -0700</bug_when>
    <thetext>This broke Facebook.  See bug 29922.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39679</attachid>
            <date>2009-09-16 20:18:31 -0700</date>
            <delta_ts>2009-09-17 19:30:23 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>0001-Proposed-patch.patch</filename>
            <type>text/plain</type>
            <size>15086</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">RnJvbSBlZWEzODJlMzhiZjBlZDczZDhlZjRlNDMwYWViOWQ2MmVjNWVjMjA3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLZW50IFRhbXVyYSA8dGtlbnRAY2hyb21pdW0ub3JnPgpEYXRl
OiBUaHUsIDE3IFNlcCAyMDA5IDA5OjAzOjQ2ICswOTAwClN1YmplY3Q6IFtQQVRDSF0gUHJvcG9z
ZWQgcGF0Y2gKCi0tLQogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDExICsrCiAuLi4vZmFzdC9mb3Jtcy9yZXNvdXJjZXMvdGV4dGFyZWEtbWF4
bGVuZ3RoLmpzICAgICB8ICAxMjAgKysrKysrKysrKysrKysrKysrKysKIC4uLi9mYXN0L2Zvcm1z
L3RleHRhcmVhLW1heGxlbmd0aC1leHBlY3RlZC50eHQgICAgIHwgICAzMSArKysrKwogTGF5b3V0
VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS1tYXhsZW5ndGguaHRtbCAgICAgfCAgIDEzICsrCiBX
ZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjIg
KysrKwogV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcCAgICAgICAgICAgICAgICAgICAgICAg
fCAgICA0ICstCiBXZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuaCAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgIDMgKwogV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwICAgICAg
ICAgICAgICAgfCAgIDQ1ICsrKysrKysrCiBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVu
dC5oICAgICAgICAgICAgICAgICB8ICAgIDUgKwogV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVs
ZW1lbnQuaWRsICAgICAgICAgICAgICAgfCAgICAxICsKIDEwIGZpbGVzIGNoYW5nZWQsIDI1MyBp
bnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRl
c3RzL2Zhc3QvZm9ybXMvcmVzb3VyY2VzL3RleHRhcmVhLW1heGxlbmd0aC5qcwogY3JlYXRlIG1v
ZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvdGV4dGFyZWEtbWF4bGVuZ3RoLWV4cGVj
dGVkLnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvdGV4dGFy
ZWEtbWF4bGVuZ3RoLmh0bWwKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZTc5ZjQ0MS4uODQxNDY1YyAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE0IEBACisyMDA5LTA5LTE2ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0cyBm
b3IgbWF4TGVuZ3RoIG9mIDx0ZXh0YXJlYT4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI5MjkyCisKKyAgICAgICAgKiBmYXN0L2Zvcm1zL3Jlc291cmNl
cy90ZXh0YXJlYS1tYXhsZW5ndGguanM6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvdGV4
dGFyZWEtbWF4bGVuZ3RoLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jt
cy90ZXh0YXJlYS1tYXhsZW5ndGguaHRtbDogQWRkZWQuCisKIDIwMDktMDktMTUgIEtlbnQgVGFt
dXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2Vp
ZGVsLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9yZXNvdXJjZXMvdGV4dGFy
ZWEtbWF4bGVuZ3RoLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9yZXNvdXJjZXMvdGV4dGFy
ZWEtbWF4bGVuZ3RoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZjBm
NWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3Jlc291cmNlcy90
ZXh0YXJlYS1tYXhsZW5ndGguanMKQEAgLTAsMCArMSwxMjAgQEAKK2Rlc2NyaXB0aW9uKCdUZXN0
cyBmb3IgSFRNTFRleHRBcmVhRWxlbWVudC5tYXhMZW5ndGggYmVoYXZpb3JzLicpOworCit2YXIg
dGV4dEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpOworZG9jdW1lbnQu
Ym9keS5hcHBlbmRDaGlsZCh0ZXh0QXJlYSk7CisKKy8vIE5vIG1heGxlbmd0aCBhdHRyaWJ1dGUK
K3Nob3VsZEJlKCd0ZXh0QXJlYS5tYXhMZW5ndGgnLCAnMCcpOworCisvLyBJbnZhbGlkIG1heGxl
bmd0aCBhdHRyaWJ1dGVzCit0ZXh0QXJlYS5zZXRBdHRyaWJ1dGUoJ21heGxlbmd0aCcsICctMycp
Oworc2hvdWxkQmUoJ3RleHRBcmVhLm1heExlbmd0aCcsICcwJyk7Cit0ZXh0QXJlYS5zZXRBdHRy
aWJ1dGUoJ21heGxlbmd0aCcsICd4eXonKTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS5tYXhMZW5ndGgn
LCAnMCcpOworCisvLyBWYWxpZCBtYXhsZW5ndGggYXR0cmlidXRlcwordGV4dEFyZWEuc2V0QXR0
cmlidXRlKCdtYXhsZW5ndGgnLCAnMScpOworc2hvdWxkQmUoJ3RleHRBcmVhLm1heExlbmd0aCcs
ICcxJyk7Cit0ZXh0QXJlYS5zZXRBdHRyaWJ1dGUoJ21heGxlbmd0aCcsICcyNTYnKTsKK3Nob3Vs
ZEJlKCd0ZXh0QXJlYS5tYXhMZW5ndGgnLCAnMjU2Jyk7CisKKy8vIFNldCB2YWx1ZXMgdG8gLm1h
eExlbmd0aAordGV4dEFyZWEubWF4TGVuZ3RoID0gMTM7CitzaG91bGRCZSgndGV4dEFyZWEuZ2V0
QXR0cmlidXRlKCJtYXhsZW5ndGgiKScsICciMTMiJyk7CisKK3RleHRBcmVhLm1heExlbmd0aCA9
IC0xOworc2hvdWxkQmUoJ3RleHRBcmVhLm1heExlbmd0aCcsICc0Mjk0OTY3Mjk1Jyk7CitzaG91
bGRCZSgndGV4dEFyZWEuZ2V0QXR0cmlidXRlKCJtYXhsZW5ndGgiKScsICciNDI5NDk2NzI5NSIn
KTsKKworLy8gbWF4TGVuZ3RoIGRvZXNuJ3QgdHJ1bmNhdGUgdGhlIGRlZmF1bHQgdmFsdWUuCit0
ZXh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7Cit0ZXh0QXJlYS5z
ZXRBdHRyaWJ1dGUoJ21heGxlbmd0aCcsICczJyk7Cit0ZXh0QXJlYS5pbm5lckhUTUwgPSAnYWJj
ZCc7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRleHRBcmVhKTsKK3Nob3VsZEJlKCd0ZXh0
QXJlYS52YWx1ZScsICciYWJjZCInKTsKKworLy8gbWF4TGVuZ3RoIGRvZXNuJ3QgdHJ1bmNhdGUg
LnZhbHVlCit0ZXh0QXJlYS5tYXhMZW5ndGggPSAzOwordGV4dEFyZWEudmFsdWUgPSAnYWJjZGUn
Oworc2hvdWxkQmUoJ3RleHRBcmVhLnZhbHVlJywgJyJhYmNkZSInKTsKKworLy8gU2V0IHVwIGZv
ciB1c2VyLWlucHV0IHRlc3RzCitmdW5jdGlvbiBjcmVhdGVGb2N1c2VkVGV4dEFyZWFXaXRoTWF4
TGVuZ3RoMygpIHsKKyAgICBpZiAodGV4dEFyZWEpCisgICAgICAgIGRvY3VtZW50LmJvZHkucmVt
b3ZlQ2hpbGQodGV4dEFyZWEpOworICAgIHRleHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgndGV4dGFyZWEnKTsKKyAgICB0ZXh0QXJlYS5zZXRBdHRyaWJ1dGUoJ21heGxlbmd0aCcsICcz
Jyk7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXh0QXJlYSk7CisgICAgdGV4dEFy
ZWEuZm9jdXMoKTsKK30KKworLy8gSW5zZXJ0IHRleHQgb2Ygd2hpY2ggbGVuZ3RoIGlzIG1heExl
bmd0aC4KK2NyZWF0ZUZvY3VzZWRUZXh0QXJlYVdpdGhNYXhMZW5ndGgzKCk7Citkb2N1bWVudC5l
eGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnYWJjJyk7CitzaG91bGRCZSgndGV4dEFy
ZWEudmFsdWUnLCAnImFiYyInKTsKKworLy8gVHJ5IHRvIGFkZCBjaGFyYWN0ZXJzIHRvIG1heExl
bmd0aCBjaGFyYWN0ZXJzLgorY3JlYXRlRm9jdXNlZFRleHRBcmVhV2l0aE1heExlbmd0aDMoKTsK
K3RleHRBcmVhLnZhbHVlID0gJ2FiYyc7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4
dCcsIGZhbHNlLCAnZGVmJyk7CitzaG91bGRCZSgndGV4dEFyZWEudmFsdWUnLCAnImFiYyInKTsK
KworLy8gUmVwbGFjZSB0ZXh0CitjcmVhdGVGb2N1c2VkVGV4dEFyZWFXaXRoTWF4TGVuZ3RoMygp
OwordGV4dEFyZWEudmFsdWUgPSAnYWJjJzsKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdzZWxlY3RB
bGwnKTsKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdkZWYnKTsK
K3Nob3VsZEJlKCd0ZXh0QXJlYS52YWx1ZScsICciZGVmIicpOworCisvLyBFeGlzdGluZyB2YWx1
ZSBpcyBsb25nZXIgdGhhbiBtYXhMZW5ndGguICBXZSBjYW4ndCBhZGQgdGV4dC4KK2NyZWF0ZUZv
Y3VzZWRUZXh0QXJlYVdpdGhNYXhMZW5ndGgzKCk7Cit0ZXh0QXJlYS52YWx1ZSA9ICdhYmNkZWYn
OworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ2doaScpOworc2hv
dWxkQmUoJ3RleHRBcmVhLnZhbHVlJywgJyJhYmNkZWYiJyk7CisKKy8vIFdlIGNhbiBkZWxldGUg
YSBjaGFyYWN0ZXIgaW4gdGhlIGxvbmdlciB2YWx1ZS4KK2NyZWF0ZUZvY3VzZWRUZXh0QXJlYVdp
dGhNYXhMZW5ndGgzKCk7Cit0ZXh0QXJlYS52YWx1ZSA9ICdhYmNkZWYnOworZG9jdW1lbnQuZXhl
Y0NvbW1hbmQoJ2RlbGV0ZScpOworc2hvdWxkQmUoJ3RleHRBcmVhLnZhbHVlJywgJyJhYmNkZSIn
KTsKKworLy8gQSBsaW5lYnJlYWsgaXMgMSBjaGFyYWN0ZXIuCitjcmVhdGVGb2N1c2VkVGV4dEFy
ZWFXaXRoTWF4TGVuZ3RoMygpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBm
YWxzZSwgJ0EnKTsKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRMaW5lQnJlYWsnKTsKK2Rv
Y3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdCJyk7CitzaG91bGRCZSgn
dGV4dEFyZWEudmFsdWUnLCAnIkFcXG5CIicpOworCisvLyBBY2NvcmRpbmcgdG8gdGhlIEhUTUw1
IHNwZWNpZmljYXRpb24sIG1heExlbmd0aCBpcyBjb2RlLXBvaW50IGxlbmd0aC4KKy8vIEhvd2V2
ZXIgV2ViS2l0IGhhbmRsZXMgaXQgYXMgZ3JhcGhlbWUgbGVuZ3RoLgorCisvLyBmYW5jeVggc2hv
dWxkIGJlIHRyZWF0ZWQgYXMgMSBncmFwaGVtZS4KK3ZhciBmYW5jeVggPSAieFx1MDMwNVx1MDMz
MiI7Ly8gKyBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4MzA1KSArIFN0cmluZy5mcm9tQ2hhckNvZGUo
MHgzMzIpOworLy8gdTEwMDAwIGlzIG9uZSBjaGFyYWN0ZXIgY29uc2lzdGVkIG9mIGEgc3Vycm9n
YXRlIHBhaXIuCit2YXIgdTEwMDAwID0gIlx1ZDgwMFx1ZGMwMCI7CisKKy8vIEluc2VydHMgNSBj
b2RlLXBvaW50cyBpbiBVVEYtMTYKK2NyZWF0ZUZvY3VzZWRUZXh0QXJlYVdpdGhNYXhMZW5ndGgz
KCk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQUInICsgZmFu
Y3lYKTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS52YWx1ZScsICciQUIiICsgZmFuY3lYJyk7CitzaG91
bGRCZSgndGV4dEFyZWEudmFsdWUubGVuZ3RoJywgJzUnKTsKKworY3JlYXRlRm9jdXNlZFRleHRB
cmVhV2l0aE1heExlbmd0aDMoKTsKK3RleHRBcmVhLnZhbHVlID0gJ0FCJyArIGZhbmN5WDsKK3Rl
eHRBcmVhLnNldFNlbGVjdGlvblJhbmdlKDIsIDUpOyAgLy8gU2VsZWN0IGZhbmN5WAorZG9jdW1l
bnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0NERScpOworc2hvdWxkQmUoJ3Rl
eHRBcmVhLnZhbHVlJywgJyJBQkMiJyk7CisKKy8vIEluc2VydHMgNCBjb2RlLXBvaW50cyBpbiBV
VEYtMTYKK2NyZWF0ZUZvY3VzZWRUZXh0QXJlYVdpdGhNYXhMZW5ndGgzKCk7Citkb2N1bWVudC5l
eGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQUInICsgdTEwMDAwKTsKK3Nob3VsZEJl
KCd0ZXh0QXJlYS52YWx1ZScsICciQUIiICsgdTEwMDAwJyk7CitzaG91bGRCZSgndGV4dEFyZWEu
dmFsdWUubGVuZ3RoJywgJzQnKTsKKworY3JlYXRlRm9jdXNlZFRleHRBcmVhV2l0aE1heExlbmd0
aDMoKTsKK3RleHRBcmVhLnZhbHVlID0gJ0FCJyArIHUxMDAwMDsKK3RleHRBcmVhLnNldFNlbGVj
dGlvblJhbmdlKDIsIDQpOyAgLy8gU2VsZWN0IHUxMDAwMAorZG9jdW1lbnQuZXhlY0NvbW1hbmQo
J2luc2VydFRleHQnLCBmYWxzZSwgJ0NERScpOworc2hvdWxkQmUoJ3RleHRBcmVhLnZhbHVlJywg
JyJBQkMiJyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS1tYXhsZW5ndGgtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS1tYXhsZW5ndGgtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMWFhMTcKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3RleHRhcmVhLW1heGxlbmd0aC1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwzMSBAQAorVGVzdHMgZm9yIEhUTUxUZXh0QXJlYUVsZW1lbnQubWF4TGVu
Z3RoIGJlaGF2aW9ycy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgdGV4
dEFyZWEubWF4TGVuZ3RoIGlzIDAKK1BBU1MgdGV4dEFyZWEubWF4TGVuZ3RoIGlzIDAKK1BBU1Mg
dGV4dEFyZWEubWF4TGVuZ3RoIGlzIDAKK1BBU1MgdGV4dEFyZWEubWF4TGVuZ3RoIGlzIDEKK1BB
U1MgdGV4dEFyZWEubWF4TGVuZ3RoIGlzIDI1NgorUEFTUyB0ZXh0QXJlYS5nZXRBdHRyaWJ1dGUo
Im1heGxlbmd0aCIpIGlzICIxMyIKK1BBU1MgdGV4dEFyZWEubWF4TGVuZ3RoIGlzIDQyOTQ5Njcy
OTUKK1BBU1MgdGV4dEFyZWEuZ2V0QXR0cmlidXRlKCJtYXhsZW5ndGgiKSBpcyAiNDI5NDk2NzI5
NSIKK1BBU1MgdGV4dEFyZWEudmFsdWUgaXMgImFiY2QiCitQQVNTIHRleHRBcmVhLnZhbHVlIGlz
ICJhYmNkZSIKK1BBU1MgdGV4dEFyZWEudmFsdWUgaXMgImFiYyIKK1BBU1MgdGV4dEFyZWEudmFs
dWUgaXMgImFiYyIKK1BBU1MgdGV4dEFyZWEudmFsdWUgaXMgImRlZiIKK1BBU1MgdGV4dEFyZWEu
dmFsdWUgaXMgImFiY2RlZiIKK1BBU1MgdGV4dEFyZWEudmFsdWUgaXMgImFiY2RlIgorUEFTUyB0
ZXh0QXJlYS52YWx1ZSBpcyAiQVxuQiIKK1BBU1MgdGV4dEFyZWEudmFsdWUgaXMgIkFCIiArIGZh
bmN5WAorUEFTUyB0ZXh0QXJlYS52YWx1ZS5sZW5ndGggaXMgNQorUEFTUyB0ZXh0QXJlYS52YWx1
ZSBpcyAiQUJDIgorUEFTUyB0ZXh0QXJlYS52YWx1ZSBpcyAiQUIiICsgdTEwMDAwCitQQVNTIHRl
eHRBcmVhLnZhbHVlLmxlbmd0aCBpcyA0CitQQVNTIHRleHRBcmVhLnZhbHVlIGlzICJBQkMiCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS1tYXhsZW5ndGguaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvZm9ybXMvdGV4dGFyZWEtbWF4bGVuZ3RoLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc1ODVmMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZm9ybXMvdGV4dGFyZWEtbWF4bGVuZ3RoLmh0bWwKQEAgLTAsMCArMSwxMyBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNv
dXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9
ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvdGV4dGFyZWEtbWF4bGVuZ3RoLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5NmU1NWE2Li4wMWZhZDA5IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDA5LTA5LTE2
ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdXBwb3J0IGZvciBtYXhMZW5ndGggb2YgPHRl
eHRhcmVhPgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjkyOTIKKworICAgICAgICBUZXN0OiBmYXN0L2Zvcm1zL3RleHRhcmVhLW1heGxlbmd0aC5odG1s
CisKKyAgICAgICAgKiBkb20vSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
cHV0RWxlbWVudDo6bnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnB1dEVsZW1lbnQ6Om51bUdyYXBoZW1lQ2x1c3RlcnMpOgorICAgICAgICAqIGRv
bS9JbnB1dEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpoYW5kbGVCZWZv
cmVUZXh0SW5zZXJ0ZWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVt
ZW50OjpzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0
QXJlYUVsZW1lbnQ6Om1heExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFF
bGVtZW50OjpzZXRNYXhMZW5ndGgpOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVu
dC5oOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5pZGw6CisKIDIwMDktMDkt
MTUgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNw
cCBiL1dlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5jcHAKaW5kZXggOTc3OTNlMi4uZmVjMjM5ZSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2Rv
bS9JbnB1dEVsZW1lbnQuY3BwCkBAIC0xNTksNyArMTU5LDcgQEAgdm9pZCBJbnB1dEVsZW1lbnQ6
OnNldFZhbHVlRnJvbVJlbmRlcmVyKElucHV0RWxlbWVudERhdGEmIGRhdGEsIElucHV0RWxlbWVu
dCogaW4KICAgICBub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKGVsZW1lbnQpOwogfQogCi1zdGF0aWMg
aW50IG51bUNoYXJhY3RlcnNJbkdyYXBoZW1lQ2x1c3RlcnMoU3RyaW5nSW1wbCogcywgaW50IG51
bUdyYXBoZW1lQ2x1c3RlcnMpCitpbnQgSW5wdXRFbGVtZW50OjpudW1DaGFyYWN0ZXJzSW5HcmFw
aGVtZUNsdXN0ZXJzKFN0cmluZ0ltcGwqIHMsIGludCBudW1HcmFwaGVtZUNsdXN0ZXJzKQogewog
ICAgIGlmICghcykKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDcsNyArMjA3LDcgQEAgU3RyaW5n
IElucHV0RWxlbWVudDo6c2FuaXRpemVVc2VySW5wdXRWYWx1ZShjb25zdCBJbnB1dEVsZW1lbnQq
IGlucHV0RWxlbWVudCwgY28KICAgICByZXR1cm4gc3RyaW5nOwogfQogCi1zdGF0aWMgaW50IG51
bUdyYXBoZW1lQ2x1c3RlcnMoU3RyaW5nSW1wbCogcykKK2ludCBJbnB1dEVsZW1lbnQ6Om51bUdy
YXBoZW1lQ2x1c3RlcnMoU3RyaW5nSW1wbCogcykKIHsKICAgICBpZiAoIXMpCiAgICAgICAgIHJl
dHVybiAwOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmggYi9XZWJDb3Jl
L2RvbS9JbnB1dEVsZW1lbnQuaAppbmRleCA3NDZlNGYyLi5iN2ZhY2UwIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuaAorKysgYi9XZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQu
aApAQCAtNjMsNiArNjMsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IGludCBzX21heGlt
dW1MZW5ndGg7CiAgICAgc3RhdGljIGNvbnN0IGludCBzX2RlZmF1bHRTaXplOwogCisgICAgc3Rh
dGljIGludCBudW1HcmFwaGVtZUNsdXN0ZXJzKFN0cmluZ0ltcGwqKTsKKyAgICBzdGF0aWMgaW50
IG51bUNoYXJhY3RlcnNJbkdyYXBoZW1lQ2x1c3RlcnMoU3RyaW5nSW1wbCosIGludCk7CisKIHBy
b3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaEZvY3VzRXZlbnQoSW5wdXRFbGVtZW50
KiwgRWxlbWVudCopOwogICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KElucHV0RWxl
bWVudCosIEVsZW1lbnQqKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFF
bGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAppbmRleCBk
M2ZjODk3Li45NmNmZmJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxl
bWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCkBAIC0y
Niw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVh
RWxlbWVudC5oIgogCisjaW5jbHVkZSAiQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCIKICNpbmNs
dWRlICJDaHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKQEAgLTM1LDEyICszNiwxNCBAQAogI2luY2x1ZGUgIkZvcm1EYXRh
TGlzdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5j
bHVkZSAiSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiTWFwcGVkQXR0cmlidXRlLmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmUuaCIKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgi
CiAjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUg
IlZpc2libGVTZWxlY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAg
LTI3MCwxMCArMjczLDQwIEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6ZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKHJlbmRlcmVyKCkgJiYgKGV2ZW50LT5p
c01vdXNlRXZlbnQoKSB8fCBldmVudC0+aXNEcmFnRXZlbnQoKSB8fCBldmVudC0+aXNXaGVlbEV2
ZW50KCkgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50KSkKICAgICAg
ICAgdG9SZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZShyZW5kZXJlcigpKS0+Zm9yd2FyZEV2ZW50
KGV2ZW50KTsKKyAgICBlbHNlIGlmIChyZW5kZXJlcigpICYmIGV2ZW50LT5pc0JlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50KCkpCisgICAgICAgIGhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KHN0
YXRpY19jYXN0PEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50Kj4oZXZlbnQpKTsKIAogICAgIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwog
fQogCit2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2
ZW50KEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KiBldmVudCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
ZXZlbnQpOworICAgIEFTU0VSVChyZW5kZXJlcigpKTsKKyAgICBpZiAoIWhhc0F0dHJpYnV0ZSht
YXhsZW5ndGhBdHRyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGJvb2wgb2s7CisgICAgdW5zaWdu
ZWQgbWF4TGVuZ3RoID0gZ2V0QXR0cmlidXRlKG1heGxlbmd0aEF0dHIpLnN0cmluZygpLnRvVUlu
dCgmb2spOworICAgIGlmICghb2spCisgICAgICAgIHJldHVybjsKKworICAgIGludCBjdXJyZW50
TGVuZ3RoID0gSW5wdXRFbGVtZW50OjpudW1HcmFwaGVtZUNsdXN0ZXJzKHRvUmVuZGVyVGV4dENv
bnRyb2wocmVuZGVyZXIoKSktPnRleHQoKS5pbXBsKCkpOworICAgIGludCBzZWxlY3Rpb25MZW5n
dGggPSBJbnB1dEVsZW1lbnQ6Om51bUdyYXBoZW1lQ2x1c3RlcnMocGxhaW5UZXh0KGRvY3VtZW50
KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpKS5pbXBsKCkpOworICAgIGludCBiYXNlTGVuZ3RoID0gY3VycmVudExlbmd0aCAtIHNl
bGVjdGlvbkxlbmd0aDsKKyAgICBpbnQgYXBwZW5kYWJsZUxlbmd0aCA9IG1heExlbmd0aCAtIGJh
c2VMZW5ndGg7CisgICAgZXZlbnQtPnNldFRleHQoc2FuaXRpemVVc2VySW5wdXRWYWx1ZShldmVu
dC0+dGV4dCgpLCBhcHBlbmRhYmxlTGVuZ3RoKSk7Cit9CisKK1N0cmluZyBIVE1MVGV4dEFyZWFF
bGVtZW50OjpzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1
ZSwgaW50IG1heExlbmd0aCkKK3sKKyAgICBpbnQgbmV3TGVuZ3RoID0gSW5wdXRFbGVtZW50Ojpu
dW1DaGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0ZXJzKHByb3Bvc2VkVmFsdWUuaW1wbCgpLCBtYXhM
ZW5ndGgpOworICAgIGlmIChuZXdMZW5ndGggPCBzdGF0aWNfY2FzdDxpbnQ+KHByb3Bvc2VkVmFs
dWUubGVuZ3RoKCkpKSB7CisgICAgICAgIFN0cmluZyBzdHJpbmcgPSBwcm9wb3NlZFZhbHVlOwor
ICAgICAgICByZXR1cm4gc3RyaW5nLmxlZnQobmV3TGVuZ3RoKTsKKyAgICB9CisgICAgcmV0dXJu
IHByb3Bvc2VkVmFsdWU7Cit9CisKIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6cmVuZGVyZXJX
aWxsQmVEZXN0cm95ZWQoKQogewogICAgIHVwZGF0ZVZhbHVlKCk7CkBAIC0zNzQsNiArNDA3LDE4
IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6c2V0RGVmYXVsdFZhbHVlKGNvbnN0IFN0cmlu
ZyYgZGVmYXVsdFZhbHVlKQogICAgIHNldFZhbHVlKHZhbHVlKTsKIH0KIAordW5zaWduZWQgSFRN
TFRleHRBcmVhRWxlbWVudDo6bWF4TGVuZ3RoKCkgY29uc3QKK3sKKyAgICBib29sIG9rOworICAg
IHVuc2lnbmVkIG1heExlbmd0aCA9IGdldEF0dHJpYnV0ZShtYXhsZW5ndGhBdHRyKS5zdHJpbmco
KS50b1VJbnQoJm9rKTsKKyAgICByZXR1cm4gb2sgPyBtYXhMZW5ndGggOiAwOworfQorCit2b2lk
IEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldE1heExlbmd0aCh1bnNpZ25lZCBuZXdWYWx1ZSkKK3sK
KyAgICBzZXRBdHRyaWJ1dGUobWF4bGVuZ3RoQXR0ciwgU3RyaW5nOjpudW1iZXIobmV3VmFsdWUp
KTsKK30KKwogdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjphY2Nlc3NLZXlBY3Rpb24oYm9vbCkK
IHsKICAgICBmb2N1cygpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVs
ZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmgKaW5kZXggMWY1Y2I5
MS4uYjJhZDI0OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQu
aAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oCkBAIC0yOCw2ICsyOCw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQmVmb3JlVGV4dEluc2VydGVkRXZl
bnQ7CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogCiBjbGFzcyBIVE1MVGV4dEFyZWFFbGVtZW50
IDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUgewpAQCAtNzgsNiArNzks
OCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGRlZmF1bHRWYWx1ZSgpIGNvbnN0OwogICAgIHZvaWQg
c2V0RGVmYXVsdFZhbHVlKGNvbnN0IFN0cmluZyYpOwogICAgIGludCB0ZXh0TGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gdmFsdWUoKS5sZW5ndGgoKTsgfQorICAgIHVuc2lnbmVkIG1heExlbmd0aCgp
IGNvbnN0OworICAgIHZvaWQgc2V0TWF4TGVuZ3RoKHVuc2lnbmVkKTsKICAgICAKICAgICB2b2lk
IHJlbmRlcmVyV2lsbEJlRGVzdHJveWVkKCk7CiAgICAgCkBAIC05OSw2ICsxMDIsOCBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIGVudW0gV3JhcE1ldGhvZCB7IE5vV3JhcCwgU29mdFdyYXAsIEhh
cmRXcmFwIH07CiAKKyAgICB2b2lkIGhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KEJlZm9y
ZVRleHRJbnNlcnRlZEV2ZW50KikgY29uc3Q7CisgICAgc3RhdGljIFN0cmluZyBzYW5pdGl6ZVVz
ZXJJbnB1dFZhbHVlKGNvbnN0IFN0cmluZyYsIGludCk7CiAgICAgdm9pZCB1cGRhdGVWYWx1ZSgp
IGNvbnN0OwogICAgIHZvaWQgdXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGJvb2wgcGxhY2Vo
b2xkZXJWYWx1ZUNoYW5nZWQpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEZvY3VzRXZlbnQo
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmlkbCBiL1dl
YkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmlkbAppbmRleCA2ZDI3ZjU0Li44NDU4M2Y1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5pZGwKKysrIGIv
V2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaWRsCkBAIC0zNCw2ICszNCw3IEBAIG1v
ZHVsZSBodG1sIHsKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlICBsb25nICAgICAgICAgICAg
ICAgICBjb2xzOwogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgIGJvb2xlYW4gICAgICAgICAg
ICAgIGRpc2FibGVkOwogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgIGJvb2xlYW4gICAgICAg
ICAgICAgIGF1dG9mb2N1czsKKyAgICAgICAgICAgICAgICAgYXR0cmlidXRlICB1bnNpZ25lZCBs
b25nICAgICAgICBtYXhMZW5ndGg7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSAgW0NvbnZl
cnROdWxsVG9OdWxsU3RyaW5nXSBET01TdHJpbmcgICAgICAgICAgICBuYW1lOwogICAgICAgICAg
ICAgICAgICBhdHRyaWJ1dGUgIFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZywgUmVmbGVjdF0gRE9N
U3RyaW5nICAgcGxhY2Vob2xkZXI7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSAgYm9vbGVh
biAgICAgICAgICAgICAgcmVhZE9ubHk7Ci0tIAoxLjYuMy4zCgo=
</data>
<flag name="review"
          id="20801"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39745</attachid>
            <date>2009-09-17 19:30:23 -0700</date>
            <delta_ts>2009-09-21 18:29:54 -0700</delta_ts>
            <desc>Proposed patch (rev.2)</desc>
            <filename>0001-Proposed-patch.patch</filename>
            <type>text/plain</type>
            <size>20114</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">RnJvbSBlYzgxZjRjNGFmNzIyZDM5MTJmMjMzOGYyODRiOWY0OGY5NzBkMjI1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLZW50IFRhbXVyYSA8dGtlbnRAY2hyb21pdW0ub3JnPgpEYXRl
OiBUaHUsIDE3IFNlcCAyMDA5IDA5OjAzOjQ2ICswOTAwClN1YmplY3Q6IFtQQVRDSF0gUHJvcG9z
ZWQgcGF0Y2gKCi0tLQogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDEyICsrCiAuLi4vZmFzdC9mb3Jtcy9yZXNvdXJjZXMvdGV4dGFyZWEtbWF4
bGVuZ3RoLmpzICAgICB8ICAxMjAgKysrKysrKysrKysrKysrKysrKysKIC4uLi9mYXN0L2Zvcm1z
L3RleHRhcmVhLW1heGxlbmd0aC1leHBlY3RlZC50eHQgICAgIHwgICAzMSArKysrKwogTGF5b3V0
VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS1tYXhsZW5ndGguaHRtbCAgICAgfCAgIDEzICsrCiBX
ZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjcg
KysrKysKIFdlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5jcHAgICAgICAgICAgICAgICAgICAgICAg
IHwgICA1NiArKy0tLS0tLS0tCiBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAg
ICAgICAgICAgICAgICB8ICAgMzcgKysrKysrCiBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxl
bWVudC5oICAgICAgICAgICAgICAgICB8ICAgIDUgKwogV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJl
YUVsZW1lbnQuaWRsICAgICAgICAgICAgICAgfCAgICAxICsKIFdlYkNvcmUvcGxhdGZvcm0vdGV4
dC9QbGF0Zm9ybVN0cmluZy5oICAgICAgICAgICAgIHwgICAgOCArKwogV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1N0cmluZy5jcHAgICAgICAgICAgICAgICAgICAgfCAgIDMyICsrKysrCiAxMSBmaWxl
cyBjaGFuZ2VkLCAyOTUgaW5zZXJ0aW9ucygrKSwgNDcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9yZXNvdXJjZXMvdGV4dGFyZWEtbWF4bGVu
Z3RoLmpzCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJl
YS1tYXhsZW5ndGgtZXhwZWN0ZWQudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMv
ZmFzdC9mb3Jtcy90ZXh0YXJlYS1tYXhsZW5ndGguaHRtbAoKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBmYmUzMzdkLi5iYmY2
ODAzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMDktMTcgIEtlbnQgVGFtdXJhICA8dGtl
bnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3RzIGZvciBtYXhMZW5ndGggb2YgPHRleHRhcmVhPgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkyOTIKKworICAgICAgICAqIGZh
c3QvZm9ybXMvcmVzb3VyY2VzL3RleHRhcmVhLW1heGxlbmd0aC5qczogQWRkZWQuCisgICAgICAg
IChjcmVhdGVGb2N1c2VkVGV4dEFyZWFXaXRoTWF4TGVuZ3RoMyk6CisgICAgICAgICogZmFzdC9m
b3Jtcy90ZXh0YXJlYS1tYXhsZW5ndGgtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2Zvcm1zL3RleHRhcmVhLW1heGxlbmd0aC5odG1sOiBBZGRlZC4KKwogMjAwOS0wOS0xNyAg
QnJpYW4gV2VpbnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUnViYmVy
LXN0YW1wZWQgYnkgU3RldmUgRmFsa2VuYnVyZy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZm9ybXMvcmVzb3VyY2VzL3RleHRhcmVhLW1heGxlbmd0aC5qcyBiL0xheW91dFRlc3RzL2Zh
c3QvZm9ybXMvcmVzb3VyY2VzL3RleHRhcmVhLW1heGxlbmd0aC5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi43Y2YwZjVkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9yZXNvdXJjZXMvdGV4dGFyZWEtbWF4bGVuZ3RoLmpzCkBAIC0wLDAgKzEs
MTIwIEBACitkZXNjcmlwdGlvbignVGVzdHMgZm9yIEhUTUxUZXh0QXJlYUVsZW1lbnQubWF4TGVu
Z3RoIGJlaGF2aW9ycy4nKTsKKwordmFyIHRleHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgndGV4dGFyZWEnKTsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4dEFyZWEpOworCisv
LyBObyBtYXhsZW5ndGggYXR0cmlidXRlCitzaG91bGRCZSgndGV4dEFyZWEubWF4TGVuZ3RoJywg
JzAnKTsKKworLy8gSW52YWxpZCBtYXhsZW5ndGggYXR0cmlidXRlcwordGV4dEFyZWEuc2V0QXR0
cmlidXRlKCdtYXhsZW5ndGgnLCAnLTMnKTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS5tYXhMZW5ndGgn
LCAnMCcpOwordGV4dEFyZWEuc2V0QXR0cmlidXRlKCdtYXhsZW5ndGgnLCAneHl6Jyk7CitzaG91
bGRCZSgndGV4dEFyZWEubWF4TGVuZ3RoJywgJzAnKTsKKworLy8gVmFsaWQgbWF4bGVuZ3RoIGF0
dHJpYnV0ZXMKK3RleHRBcmVhLnNldEF0dHJpYnV0ZSgnbWF4bGVuZ3RoJywgJzEnKTsKK3Nob3Vs
ZEJlKCd0ZXh0QXJlYS5tYXhMZW5ndGgnLCAnMScpOwordGV4dEFyZWEuc2V0QXR0cmlidXRlKCdt
YXhsZW5ndGgnLCAnMjU2Jyk7CitzaG91bGRCZSgndGV4dEFyZWEubWF4TGVuZ3RoJywgJzI1Nicp
OworCisvLyBTZXQgdmFsdWVzIHRvIC5tYXhMZW5ndGgKK3RleHRBcmVhLm1heExlbmd0aCA9IDEz
Oworc2hvdWxkQmUoJ3RleHRBcmVhLmdldEF0dHJpYnV0ZSgibWF4bGVuZ3RoIiknLCAnIjEzIicp
OworCit0ZXh0QXJlYS5tYXhMZW5ndGggPSAtMTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS5tYXhMZW5n
dGgnLCAnNDI5NDk2NzI5NScpOworc2hvdWxkQmUoJ3RleHRBcmVhLmdldEF0dHJpYnV0ZSgibWF4
bGVuZ3RoIiknLCAnIjQyOTQ5NjcyOTUiJyk7CisKKy8vIG1heExlbmd0aCBkb2Vzbid0IHRydW5j
YXRlIHRoZSBkZWZhdWx0IHZhbHVlLgordGV4dEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCd0ZXh0YXJlYScpOwordGV4dEFyZWEuc2V0QXR0cmlidXRlKCdtYXhsZW5ndGgnLCAnMycpOwor
dGV4dEFyZWEuaW5uZXJIVE1MID0gJ2FiY2QnOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0
ZXh0QXJlYSk7CitzaG91bGRCZSgndGV4dEFyZWEudmFsdWUnLCAnImFiY2QiJyk7CisKKy8vIG1h
eExlbmd0aCBkb2Vzbid0IHRydW5jYXRlIC52YWx1ZQordGV4dEFyZWEubWF4TGVuZ3RoID0gMzsK
K3RleHRBcmVhLnZhbHVlID0gJ2FiY2RlJzsKK3Nob3VsZEJlKCd0ZXh0QXJlYS52YWx1ZScsICci
YWJjZGUiJyk7CisKKy8vIFNldCB1cCBmb3IgdXNlci1pbnB1dCB0ZXN0cworZnVuY3Rpb24gY3Jl
YXRlRm9jdXNlZFRleHRBcmVhV2l0aE1heExlbmd0aDMoKSB7CisgICAgaWYgKHRleHRBcmVhKQor
ICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRleHRBcmVhKTsKKyAgICB0ZXh0QXJl
YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7CisgICAgdGV4dEFyZWEuc2V0
QXR0cmlidXRlKCdtYXhsZW5ndGgnLCAnMycpOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp
bGQodGV4dEFyZWEpOworICAgIHRleHRBcmVhLmZvY3VzKCk7Cit9CisKKy8vIEluc2VydCB0ZXh0
IG9mIHdoaWNoIGxlbmd0aCBpcyBtYXhMZW5ndGguCitjcmVhdGVGb2N1c2VkVGV4dEFyZWFXaXRo
TWF4TGVuZ3RoMygpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwg
J2FiYycpOworc2hvdWxkQmUoJ3RleHRBcmVhLnZhbHVlJywgJyJhYmMiJyk7CisKKy8vIFRyeSB0
byBhZGQgY2hhcmFjdGVycyB0byBtYXhMZW5ndGggY2hhcmFjdGVycy4KK2NyZWF0ZUZvY3VzZWRU
ZXh0QXJlYVdpdGhNYXhMZW5ndGgzKCk7Cit0ZXh0QXJlYS52YWx1ZSA9ICdhYmMnOworZG9jdW1l
bnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ2RlZicpOworc2hvdWxkQmUoJ3Rl
eHRBcmVhLnZhbHVlJywgJyJhYmMiJyk7CisKKy8vIFJlcGxhY2UgdGV4dAorY3JlYXRlRm9jdXNl
ZFRleHRBcmVhV2l0aE1heExlbmd0aDMoKTsKK3RleHRBcmVhLnZhbHVlID0gJ2FiYyc7Citkb2N1
bWVudC5leGVjQ29tbWFuZCgnc2VsZWN0QWxsJyk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5z
ZXJ0VGV4dCcsIGZhbHNlLCAnZGVmJyk7CitzaG91bGRCZSgndGV4dEFyZWEudmFsdWUnLCAnImRl
ZiInKTsKKworLy8gRXhpc3RpbmcgdmFsdWUgaXMgbG9uZ2VyIHRoYW4gbWF4TGVuZ3RoLiAgV2Ug
Y2FuJ3QgYWRkIHRleHQuCitjcmVhdGVGb2N1c2VkVGV4dEFyZWFXaXRoTWF4TGVuZ3RoMygpOwor
dGV4dEFyZWEudmFsdWUgPSAnYWJjZGVmJzsKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRU
ZXh0JywgZmFsc2UsICdnaGknKTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS52YWx1ZScsICciYWJjZGVm
IicpOworCisvLyBXZSBjYW4gZGVsZXRlIGEgY2hhcmFjdGVyIGluIHRoZSBsb25nZXIgdmFsdWUu
CitjcmVhdGVGb2N1c2VkVGV4dEFyZWFXaXRoTWF4TGVuZ3RoMygpOwordGV4dEFyZWEudmFsdWUg
PSAnYWJjZGVmJzsKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdkZWxldGUnKTsKK3Nob3VsZEJlKCd0
ZXh0QXJlYS52YWx1ZScsICciYWJjZGUiJyk7CisKKy8vIEEgbGluZWJyZWFrIGlzIDEgY2hhcmFj
dGVyLgorY3JlYXRlRm9jdXNlZFRleHRBcmVhV2l0aE1heExlbmd0aDMoKTsKK2RvY3VtZW50LmV4
ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdBJyk7Citkb2N1bWVudC5leGVjQ29tbWFu
ZCgnaW5zZXJ0TGluZUJyZWFrJyk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcs
IGZhbHNlLCAnQicpOworc2hvdWxkQmUoJ3RleHRBcmVhLnZhbHVlJywgJyJBXFxuQiInKTsKKwor
Ly8gQWNjb3JkaW5nIHRvIHRoZSBIVE1MNSBzcGVjaWZpY2F0aW9uLCBtYXhMZW5ndGggaXMgY29k
ZS1wb2ludCBsZW5ndGguCisvLyBIb3dldmVyIFdlYktpdCBoYW5kbGVzIGl0IGFzIGdyYXBoZW1l
IGxlbmd0aC4KKworLy8gZmFuY3lYIHNob3VsZCBiZSB0cmVhdGVkIGFzIDEgZ3JhcGhlbWUuCit2
YXIgZmFuY3lYID0gInhcdTAzMDVcdTAzMzIiOy8vICsgU3RyaW5nLmZyb21DaGFyQ29kZSgweDMw
NSkgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4MzMyKTsKKy8vIHUxMDAwMCBpcyBvbmUgY2hhcmFj
dGVyIGNvbnNpc3RlZCBvZiBhIHN1cnJvZ2F0ZSBwYWlyLgordmFyIHUxMDAwMCA9ICJcdWQ4MDBc
dWRjMDAiOworCisvLyBJbnNlcnRzIDUgY29kZS1wb2ludHMgaW4gVVRGLTE2CitjcmVhdGVGb2N1
c2VkVGV4dEFyZWFXaXRoTWF4TGVuZ3RoMygpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2Vy
dFRleHQnLCBmYWxzZSwgJ0FCJyArIGZhbmN5WCk7CitzaG91bGRCZSgndGV4dEFyZWEudmFsdWUn
LCAnIkFCIiArIGZhbmN5WCcpOworc2hvdWxkQmUoJ3RleHRBcmVhLnZhbHVlLmxlbmd0aCcsICc1
Jyk7CisKK2NyZWF0ZUZvY3VzZWRUZXh0QXJlYVdpdGhNYXhMZW5ndGgzKCk7Cit0ZXh0QXJlYS52
YWx1ZSA9ICdBQicgKyBmYW5jeVg7Cit0ZXh0QXJlYS5zZXRTZWxlY3Rpb25SYW5nZSgyLCA1KTsg
IC8vIFNlbGVjdCBmYW5jeVgKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFs
c2UsICdDREUnKTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS52YWx1ZScsICciQUJDIicpOworCisvLyBJ
bnNlcnRzIDQgY29kZS1wb2ludHMgaW4gVVRGLTE2CitjcmVhdGVGb2N1c2VkVGV4dEFyZWFXaXRo
TWF4TGVuZ3RoMygpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwg
J0FCJyArIHUxMDAwMCk7CitzaG91bGRCZSgndGV4dEFyZWEudmFsdWUnLCAnIkFCIiArIHUxMDAw
MCcpOworc2hvdWxkQmUoJ3RleHRBcmVhLnZhbHVlLmxlbmd0aCcsICc0Jyk7CisKK2NyZWF0ZUZv
Y3VzZWRUZXh0QXJlYVdpdGhNYXhMZW5ndGgzKCk7Cit0ZXh0QXJlYS52YWx1ZSA9ICdBQicgKyB1
MTAwMDA7Cit0ZXh0QXJlYS5zZXRTZWxlY3Rpb25SYW5nZSgyLCA0KTsgIC8vIFNlbGVjdCB1MTAw
MDAKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdDREUnKTsKK3No
b3VsZEJlKCd0ZXh0QXJlYS52YWx1ZScsICciQUJDIicpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFy
c2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvdGV4dGFyZWEt
bWF4bGVuZ3RoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvdGV4dGFyZWEt
bWF4bGVuZ3RoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5iZDFhYTE3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy90ZXh0
YXJlYS1tYXhsZW5ndGgtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzEgQEAKK1Rlc3RzIGZvciBI
VE1MVGV4dEFyZWFFbGVtZW50Lm1heExlbmd0aCBiZWhhdmlvcnMuCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitQQVNTIHRleHRBcmVhLm1heExlbmd0aCBpcyAwCitQQVNTIHRleHRB
cmVhLm1heExlbmd0aCBpcyAwCitQQVNTIHRleHRBcmVhLm1heExlbmd0aCBpcyAwCitQQVNTIHRl
eHRBcmVhLm1heExlbmd0aCBpcyAxCitQQVNTIHRleHRBcmVhLm1heExlbmd0aCBpcyAyNTYKK1BB
U1MgdGV4dEFyZWEuZ2V0QXR0cmlidXRlKCJtYXhsZW5ndGgiKSBpcyAiMTMiCitQQVNTIHRleHRB
cmVhLm1heExlbmd0aCBpcyA0Mjk0OTY3Mjk1CitQQVNTIHRleHRBcmVhLmdldEF0dHJpYnV0ZSgi
bWF4bGVuZ3RoIikgaXMgIjQyOTQ5NjcyOTUiCitQQVNTIHRleHRBcmVhLnZhbHVlIGlzICJhYmNk
IgorUEFTUyB0ZXh0QXJlYS52YWx1ZSBpcyAiYWJjZGUiCitQQVNTIHRleHRBcmVhLnZhbHVlIGlz
ICJhYmMiCitQQVNTIHRleHRBcmVhLnZhbHVlIGlzICJhYmMiCitQQVNTIHRleHRBcmVhLnZhbHVl
IGlzICJkZWYiCitQQVNTIHRleHRBcmVhLnZhbHVlIGlzICJhYmNkZWYiCitQQVNTIHRleHRBcmVh
LnZhbHVlIGlzICJhYmNkZSIKK1BBU1MgdGV4dEFyZWEudmFsdWUgaXMgIkFcbkIiCitQQVNTIHRl
eHRBcmVhLnZhbHVlIGlzICJBQiIgKyBmYW5jeVgKK1BBU1MgdGV4dEFyZWEudmFsdWUubGVuZ3Ro
IGlzIDUKK1BBU1MgdGV4dEFyZWEudmFsdWUgaXMgIkFCQyIKK1BBU1MgdGV4dEFyZWEudmFsdWUg
aXMgIkFCIiArIHUxMDAwMAorUEFTUyB0ZXh0QXJlYS52YWx1ZS5sZW5ndGggaXMgNAorUEFTUyB0
ZXh0QXJlYS52YWx1ZSBpcyAiQUJDIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvdGV4
dGFyZWEtbWF4bGVuZ3RoLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3RleHRhcmVhLW1h
eGxlbmd0aC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NTg1ZjIK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3RleHRhcmVhLW1heGxl
bmd0aC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVU
Ri8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQi
IGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3RleHRhcmVhLW1heGxlbmd0aC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2VmYzQyMy4uZjFlOTE0MiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwzMCBAQAorMjAwOS0wOS0xNyAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBT
dXBwb3J0IGZvciBtYXhMZW5ndGggb2YgPHRleHRhcmVhPgorICAgICAgICAtIE1vdmUgbnVtR3Jh
cGhlbWVDbHVzdGVycygpIGFuZCBudW1DaGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0ZXJzKCkgZnJv
bSBJbnB1dEVsZW1lbnQgdG8gU3RyaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjkyOTIKKworCisgICAgICAgIFRlc3Q6IGZhc3QvZm9ybXMvdGV4
dGFyZWEtbWF4bGVuZ3RoLmh0bWwKKworICAgICAgICAqIGRvbS9JbnB1dEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50OjpzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVk
RXZlbnQpOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJbnNl
cnRlZEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNhbml0
aXplVXNlcklucHV0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVu
dDo6bWF4TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNl
dE1heExlbmd0aCk6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50Lmg6CisgICAg
ICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmlkbDoKKyAgICAgICAgKiBwbGF0Zm9ybS90
ZXh0L1BsYXRmb3JtU3RyaW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nOjpudW1HcmFwaGVtZUNsdXN0ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0cmluZzo6bnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycyk6CisK
IDIwMDktMDktMTcgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
ZG9tL0lucHV0RWxlbWVudC5jcHAgYi9XZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCmluZGV4
IDk3NzkzZTIuLjNhNWU5MjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5j
cHAKKysrIGIvV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcApAQCAtMzQsNyArMzQsNiBAQAog
I2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgogI2luY2x1ZGUgIlNlbGVj
dGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJU
ZXh0QnJlYWtJdGVyYXRvci5oIgogCiAjaWYgRU5BQkxFKFdNTCkKICNpbmNsdWRlICJXTUxJbnB1
dEVsZW1lbnQuaCIKQEAgLTE1OSwyMyArMTU4LDYgQEAgdm9pZCBJbnB1dEVsZW1lbnQ6OnNldFZh
bHVlRnJvbVJlbmRlcmVyKElucHV0RWxlbWVudERhdGEmIGRhdGEsIElucHV0RWxlbWVudCogaW4K
ICAgICBub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKGVsZW1lbnQpOwogfQogCi1zdGF0aWMgaW50IG51
bUNoYXJhY3RlcnNJbkdyYXBoZW1lQ2x1c3RlcnMoU3RyaW5nSW1wbCogcywgaW50IG51bUdyYXBo
ZW1lQ2x1c3RlcnMpCi17Ci0gICAgaWYgKCFzKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFRl
eHRCcmVha0l0ZXJhdG9yKiBpdCA9IGNoYXJhY3RlckJyZWFrSXRlcmF0b3Iocy0+Y2hhcmFjdGVy
cygpLCBzLT5sZW5ndGgoKSk7Ci0gICAgaWYgKCFpdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG51bUdyYXBoZW1lQ2x1c3RlcnM7ICsraSkgewotICAgICAg
ICBpZiAodGV4dEJyZWFrTmV4dChpdCkgPT0gVGV4dEJyZWFrRG9uZSkKLSAgICAgICAgICAgIHJl
dHVybiBzLT5sZW5ndGgoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGV4dEJyZWFrQ3VycmVudChp
dCk7Ci19Ci0KIFN0cmluZyBJbnB1dEVsZW1lbnQ6OnNhbml0aXplVmFsdWUoY29uc3QgSW5wdXRF
bGVtZW50KiBpbnB1dEVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkKIHsKICAg
ICByZXR1cm4gSW5wdXRFbGVtZW50OjpzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKGlucHV0RWxlbWVu
dCwgcHJvcG9zZWRWYWx1ZSwgc19tYXhpbXVtTGVuZ3RoKTsKQEAgLTE5MSwzNiArMTczLDE1IEBA
IFN0cmluZyBJbnB1dEVsZW1lbnQ6OnNhbml0aXplVXNlcklucHV0VmFsdWUoY29uc3QgSW5wdXRF
bGVtZW50KiBpbnB1dEVsZW1lbnQsIGNvCiAgICAgc3RyaW5nLnJlcGxhY2UoJ1xyJywgJyAnKTsK
ICAgICBzdHJpbmcucmVwbGFjZSgnXG4nLCAnICcpOwogCi0gICAgU3RyaW5nSW1wbCogcyA9IHN0
cmluZy5pbXBsKCk7Ci0gICAgaW50IG5ld0xlbmd0aCA9IG51bUNoYXJhY3RlcnNJbkdyYXBoZW1l
Q2x1c3RlcnMocywgbWF4TGVuZ3RoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5ld0xlbmd0
aDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFVDaGFyJiBjdXJyZW50ID0gKCpzKVtpXTsKKyAgICB1
bnNpZ25lZCBuZXdMZW5ndGggPSBzdHJpbmcubnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVy
cyhtYXhMZW5ndGgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuZXdMZW5ndGg7ICsr
aSkgeworICAgICAgICBjb25zdCBVQ2hhciBjdXJyZW50ID0gc3RyaW5nW2ldOwogICAgICAgICBp
ZiAoY3VycmVudCA8ICcgJyAmJiBjdXJyZW50ICE9ICdcdCcpIHsKICAgICAgICAgICAgIG5ld0xl
bmd0aCA9IGk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLQotICAgIGlm
IChuZXdMZW5ndGggPCBzdGF0aWNfY2FzdDxpbnQ+KHN0cmluZy5sZW5ndGgoKSkpCi0gICAgICAg
IHJldHVybiBzdHJpbmcubGVmdChuZXdMZW5ndGgpOwotCi0gICAgcmV0dXJuIHN0cmluZzsKLX0K
LQotc3RhdGljIGludCBudW1HcmFwaGVtZUNsdXN0ZXJzKFN0cmluZ0ltcGwqIHMpCi17Ci0gICAg
aWYgKCFzKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdCA9
IGNoYXJhY3RlckJyZWFrSXRlcmF0b3Iocy0+Y2hhcmFjdGVycygpLCBzLT5sZW5ndGgoKSk7Ci0g
ICAgaWYgKCFpdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpbnQgbnVtID0gMDsKLSAgICB3
aGlsZSAodGV4dEJyZWFrTmV4dChpdCkgIT0gVGV4dEJyZWFrRG9uZSkKLSAgICAgICAgKytudW07
Ci0KLSAgICByZXR1cm4gbnVtOworICAgIHJldHVybiBzdHJpbmcubGVmdChuZXdMZW5ndGgpOwog
fQogCiB2b2lkIElucHV0RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoSW5w
dXRFbGVtZW50RGF0YSYgZGF0YSwgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQsIEVsZW1lbnQq
IGVsZW1lbnQsIEV2ZW50KiBldmVudCkKQEAgLTIzMSwxNSArMTkyLDE2IEBAIHZvaWQgSW5wdXRF
bGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChJbnB1dEVsZW1lbnREYXRhJiBk
YXRhLCBJbnB1dEVsCiAgICAgLy8gV2UgdXNlIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6
dGV4dCgpIGluc3RlYWQgb2YgSW5wdXRFbGVtZW50Ojp2YWx1ZSgpCiAgICAgLy8gYmVjYXVzZSB0
aGV5IGNhbiBiZSBtaXNtYXRjaGVkIGJ5IHNhbml0aXplVmFsdWUoKSBpbgogICAgIC8vIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6c3VidHJlZUhhc0NoYW5nZWQoKSBpbiBzb21lIGNhc2Vz
LgotICAgIGludCBvbGRMZW5ndGggPSBudW1HcmFwaGVtZUNsdXN0ZXJzKHRvUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lKGVsZW1lbnQtPnJlbmRlcmVyKCkpLT50ZXh0KCkuaW1wbCgpKTsKKyAg
ICB1bnNpZ25lZCBvbGRMZW5ndGggPSB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShlbGVt
ZW50LT5yZW5kZXJlcigpKS0+dGV4dCgpLm51bUdyYXBoZW1lQ2x1c3RlcnMoKTsKIAogICAgIC8v
IHNlbGVjdGlvbigpIG1heSBiZSBhIHByZS1lZGl0IHRleHQuCi0gICAgaW50IHNlbGVjdGlvbkxl
bmd0aCA9IG51bUdyYXBoZW1lQ2x1c3RlcnMocGxhaW5UZXh0KGVsZW1lbnQtPmRvY3VtZW50KCkt
PmZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdl
dCgpKS5pbXBsKCkpOworICAgIHVuc2lnbmVkIHNlbGVjdGlvbkxlbmd0aCA9IHBsYWluVGV4dChl
bGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkubnVtR3JhcGhlbWVDbHVzdGVycygpOwogICAgIEFTU0VS
VChvbGRMZW5ndGggPj0gc2VsZWN0aW9uTGVuZ3RoKTsKIAogICAgIC8vIFNlbGVjdGVkIGNoYXJh
Y3RlcnMgd2lsbCBiZSByZW1vdmVkIGJ5IHRoZSBuZXh0IHRleHQgZXZlbnQuCi0gICAgaW50IGJh
c2VMZW5ndGggPSBvbGRMZW5ndGggLSBzZWxlY3Rpb25MZW5ndGg7Ci0gICAgaW50IGFwcGVuZGFi
bGVMZW5ndGggPSBkYXRhLm1heExlbmd0aCgpIC0gYmFzZUxlbmd0aDsKKyAgICB1bnNpZ25lZCBi
YXNlTGVuZ3RoID0gb2xkTGVuZ3RoIC0gc2VsZWN0aW9uTGVuZ3RoOworICAgIHVuc2lnbmVkIG1h
eExlbmd0aCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkYXRhLm1heExlbmd0aCgpKTsgIC8vIG1h
eExlbmd0aCgpIG5ldmVyIGJlIG5lZ2F0aXZlLgorICAgIHVuc2lnbmVkIGFwcGVuZGFibGVMZW5n
dGggPSAgbWF4TGVuZ3RoID4gYmFzZUxlbmd0aCA/IG1heExlbmd0aCAtIGJhc2VMZW5ndGggOiAw
OwogCiAgICAgLy8gVHJ1bmNhdGUgdGhlIGluc2VydGVkIHRleHQgdG8gYXZvaWQgdmlvbGF0aW5n
IHRoZSBtYXhMZW5ndGggYW5kIG90aGVyIGNvbnN0cmFpbnRzLgogICAgIEJlZm9yZVRleHRJbnNl
cnRlZEV2ZW50KiB0ZXh0RXZlbnQgPSBzdGF0aWNfY2FzdDxCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dCo+KGV2ZW50KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50
LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAppbmRleCBkM2ZjODk3
Li4zY2Y0ODUyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5j
cHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCkBAIC0yNiw2ICsy
Niw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVu
dC5oIgogCisjaW5jbHVkZSAiQmVmb3JlVGV4dEluc2VydGVkRXZlbnQuaCIKICNpbmNsdWRlICJD
aHJvbWVDbGllbnQuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKQEAgLTM1LDEyICszNiwxNCBAQAogI2luY2x1ZGUgIkZvcm1EYXRhTGlzdC5o
IgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAi
SW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiTWFwcGVkQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dENv
bnRyb2xNdWx0aUxpbmUuaCIKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAjaW5j
bHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlZpc2li
bGVTZWxlY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTI3MCwx
MCArMjczLDM0IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCogZXZlbnQpCiB7CiAgICAgaWYgKHJlbmRlcmVyKCkgJiYgKGV2ZW50LT5pc01vdXNl
RXZlbnQoKSB8fCBldmVudC0+aXNEcmFnRXZlbnQoKSB8fCBldmVudC0+aXNXaGVlbEV2ZW50KCkg
fHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmx1ckV2ZW50KSkKICAgICAgICAgdG9S
ZW5kZXJUZXh0Q29udHJvbE11bHRpTGluZShyZW5kZXJlcigpKS0+Zm9yd2FyZEV2ZW50KGV2ZW50
KTsKKyAgICBlbHNlIGlmIChyZW5kZXJlcigpICYmIGV2ZW50LT5pc0JlZm9yZVRleHRJbnNlcnRl
ZEV2ZW50KCkpCisgICAgICAgIGhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KHN0YXRpY19j
YXN0PEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50Kj4oZXZlbnQpKTsKIAogICAgIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnRXaXRoU3RhdGU6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZlbnQpOwogfQogCit2
b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KEJl
Zm9yZVRleHRJbnNlcnRlZEV2ZW50KiBldmVudCkgY29uc3QKK3sKKyAgICBBU1NFUlQoZXZlbnQp
OworICAgIEFTU0VSVChyZW5kZXJlcigpKTsKKyAgICBib29sIG9rOworICAgIHVuc2lnbmVkIG1h
eExlbmd0aCA9IGdldEF0dHJpYnV0ZShtYXhsZW5ndGhBdHRyKS5zdHJpbmcoKS50b1VJbnQoJm9r
KTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBjdXJyZW50
TGVuZ3RoID0gdG9SZW5kZXJUZXh0Q29udHJvbChyZW5kZXJlcigpKS0+dGV4dCgpLm51bUdyYXBo
ZW1lQ2x1c3RlcnMoKTsKKyAgICB1bnNpZ25lZCBzZWxlY3Rpb25MZW5ndGggPSBwbGFpblRleHQo
ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCkpLm51bUdyYXBoZW1lQ2x1c3RlcnMoKTsKKyAgICBBU1NFUlQoY3VycmVu
dExlbmd0aCA+PSBzZWxlY3Rpb25MZW5ndGgpOworICAgIHVuc2lnbmVkIGJhc2VMZW5ndGggPSBj
dXJyZW50TGVuZ3RoIC0gc2VsZWN0aW9uTGVuZ3RoOworICAgIHVuc2lnbmVkIGFwcGVuZGFibGVM
ZW5ndGggPSBtYXhMZW5ndGggPiBiYXNlTGVuZ3RoID8gbWF4TGVuZ3RoIC0gYmFzZUxlbmd0aCA6
IDA7CisgICAgZXZlbnQtPnNldFRleHQoc2FuaXRpemVVc2VySW5wdXRWYWx1ZShldmVudC0+dGV4
dCgpLCBhcHBlbmRhYmxlTGVuZ3RoKSk7Cit9CisKK1N0cmluZyBIVE1MVGV4dEFyZWFFbGVtZW50
OjpzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSwgdW5z
aWduZWQgbWF4TGVuZ3RoKQoreworICAgIHJldHVybiBwcm9wb3NlZFZhbHVlLmxlZnQocHJvcG9z
ZWRWYWx1ZS5udW1DaGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0ZXJzKG1heExlbmd0aCkpOworfQor
CiB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnJlbmRlcmVyV2lsbEJlRGVzdHJveWVkKCkKIHsK
ICAgICB1cGRhdGVWYWx1ZSgpOwpAQCAtMzc0LDYgKzQwMSwxNiBAQCB2b2lkIEhUTUxUZXh0QXJl
YUVsZW1lbnQ6OnNldERlZmF1bHRWYWx1ZShjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSkKICAg
ICBzZXRWYWx1ZSh2YWx1ZSk7CiB9CiAKK3Vuc2lnbmVkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6Om1h
eExlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldEF0dHJpYnV0ZShtYXhsZW5ndGhBdHRy
KS5zdHJpbmcoKS50b1VJbnQoKTsKK30KKwordm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpzZXRN
YXhMZW5ndGgodW5zaWduZWQgbmV3VmFsdWUpCit7CisgICAgc2V0QXR0cmlidXRlKG1heGxlbmd0
aEF0dHIsIFN0cmluZzo6bnVtYmVyKG5ld1ZhbHVlKSk7Cit9CisKIHZvaWQgSFRNTFRleHRBcmVh
RWxlbWVudDo6YWNjZXNzS2V5QWN0aW9uKGJvb2wpCiB7CiAgICAgZm9jdXMoKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRN
TFRleHRBcmVhRWxlbWVudC5oCmluZGV4IDFmNWNiOTEuLmZiZjUxOWQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuaApAQCAtMjgsNiArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK2NsYXNzIEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50OwogY2xhc3MgVmlzaWJsZVNlbGVjdGlv
bjsKIAogY2xhc3MgSFRNTFRleHRBcmVhRWxlbWVudCA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50V2l0aFN0YXRlIHsKQEAgLTc4LDYgKzc5LDggQEAgcHVibGljOgogICAgIFN0cmluZyBk
ZWZhdWx0VmFsdWUoKSBjb25zdDsKICAgICB2b2lkIHNldERlZmF1bHRWYWx1ZShjb25zdCBTdHJp
bmcmKTsKICAgICBpbnQgdGV4dExlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHZhbHVlKCkubGVuZ3Ro
KCk7IH0KKyAgICB1bnNpZ25lZCBtYXhMZW5ndGgoKSBjb25zdDsKKyAgICB2b2lkIHNldE1heExl
bmd0aCh1bnNpZ25lZCk7CiAgICAgCiAgICAgdm9pZCByZW5kZXJlcldpbGxCZURlc3Ryb3llZCgp
OwogICAgIApAQCAtOTksNiArMTAyLDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBlbnVtIFdy
YXBNZXRob2QgeyBOb1dyYXAsIFNvZnRXcmFwLCBIYXJkV3JhcCB9OwogCisgICAgdm9pZCBoYW5k
bGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCopIGNvbnN0
OworICAgIHN0YXRpYyBTdHJpbmcgc2FuaXRpemVVc2VySW5wdXRWYWx1ZShjb25zdCBTdHJpbmcm
LCB1bnNpZ25lZCBtYXhMZW5ndGgpOwogICAgIHZvaWQgdXBkYXRlVmFsdWUoKSBjb25zdDsKICAg
ICB2b2lkIHVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShib29sIHBsYWNlaG9sZGVyVmFsdWVD
aGFuZ2VkKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hGb2N1c0V2ZW50KCk7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5pZGwgYi9XZWJDb3JlL2h0bWwv
SFRNTFRleHRBcmVhRWxlbWVudC5pZGwKaW5kZXggNmQyN2Y1NC4uODQ1ODNmNSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaWRsCisrKyBiL1dlYkNvcmUvaHRt
bC9IVE1MVGV4dEFyZWFFbGVtZW50LmlkbApAQCAtMzQsNiArMzQsNyBAQCBtb2R1bGUgaHRtbCB7
CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSAgbG9uZyAgICAgICAgICAgICAgICAgY29sczsK
ICAgICAgICAgICAgICAgICAgYXR0cmlidXRlICBib29sZWFuICAgICAgICAgICAgICBkaXNhYmxl
ZDsKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlICBib29sZWFuICAgICAgICAgICAgICBhdXRv
Zm9jdXM7CisgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSAgdW5zaWduZWQgbG9uZyAgICAgICAg
bWF4TGVuZ3RoOwogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgIFtDb252ZXJ0TnVsbFRvTnVs
bFN0cmluZ10gRE9NU3RyaW5nICAgICAgICAgICAgbmFtZTsKICAgICAgICAgICAgICAgICAgYXR0
cmlidXRlICBbQ29udmVydE51bGxUb051bGxTdHJpbmcsIFJlZmxlY3RdIERPTVN0cmluZyAgIHBs
YWNlaG9sZGVyOwogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgIGJvb2xlYW4gICAgICAgICAg
ICAgIHJlYWRPbmx5OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3Jt
U3RyaW5nLmggYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaAppbmRleCAy
NThiMjhkLi5iOWI0MDc4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZv
cm1TdHJpbmcuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaApA
QCAtMjU0LDYgKzI1NCwxNCBAQCBwdWJsaWM6CiAgICAgLy8gRGV0ZXJtaW5lcyB0aGUgd3JpdGlu
ZyBkaXJlY3Rpb24gdXNpbmcgdGhlIFVuaWNvZGUgQmlkaSBBbGdvcml0aG0gcnVsZXMgUDIgYW5k
IFAzLgogICAgIFdURjo6VW5pY29kZTo6RGlyZWN0aW9uIGRlZmF1bHRXcml0aW5nRGlyZWN0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9pbXBsID8gbV9pbXBsLT5kZWZhdWx0V3JpdGluZ0RpcmVjdGlv
bigpIDogV1RGOjpVbmljb2RlOjpMZWZ0VG9SaWdodDsgfQogCisgICAgLy8gQ291bnRzIHRoZSBu
dW1iZXIgb2YgZ3JhcGhlbWUgY2x1c3RlcnMuIEEgc3Vycm9nYXRlIHBhaXIgb3IgYSBzZXF1ZW5j
ZQorICAgIC8vIG9mIGEgbm9uLWNvbWJpbmluZyBjaGFyYWN0ZXIgYW5kIGZvbGxvd2luZyBjb21i
aW5pbmcgY2hhcmFjdGVycyBpcworICAgIC8vIGNvdW50ZWQgYXMgMSBncmFwaGVtZSBjbHVzdGVy
LgorICAgIHVuc2lnbmVkIG51bUdyYXBoZW1lQ2x1c3RlcnMoKSBjb25zdDsKKyAgICAvLyBSZXR1
cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3aGljaCB3aWxsIGJlIGxlc3MgdGhhbiBvciBl
cXVhbCB0bworICAgIC8vIHRoZSBzcGVjaWZpZWQgZ3JhcGhlbWUgY2x1c3RlciBsZW5ndGguCisg
ICAgdW5zaWduZWQgbnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycyh1bnNpZ25lZCkgY29u
c3Q7CisKIHByaXZhdGU6CiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1faW1wbDsKIH07CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9TdHJpbmcuY3BwCmluZGV4IDI3MzA5MzkuLjk3MzQ4YzEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9TdHJpbmcuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2lu
Y2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIlN0cmluZ0J1ZmZlci5oIgorI2lu
Y2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCiAj
aW5jbHVkZSA8d3RmL2R0b2EuaD4KICNpbmNsdWRlIDxsaW1pdHM+CkBAIC05MjEsNiArOTIyLDM3
IEBAIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB1dGY4QnVmZmVyKGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQogICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKGJ1ZmZlcik7CiB9CiAK
K3Vuc2lnbmVkIFN0cmluZzo6bnVtR3JhcGhlbWVDbHVzdGVycygpIGNvbnN0Cit7CisgICAgaWYg
KGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBUZXh0QnJlYWtJdGVyYXRvciog
aXQgPSBjaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKGNoYXJhY3RlcnMoKSwgbGVuZ3RoKCkpOworICAg
IGlmICghaXQpCisgICAgICAgIHJldHVybiAwOworCisgICAgdW5zaWduZWQgbnVtID0gMDsKKyAg
ICB3aGlsZSAodGV4dEJyZWFrTmV4dChpdCkgIT0gVGV4dEJyZWFrRG9uZSkKKyAgICAgICAgKytu
dW07CisgICAgcmV0dXJuIG51bTsKK30KKwordW5zaWduZWQgU3RyaW5nOjpudW1DaGFyYWN0ZXJz
SW5HcmFwaGVtZUNsdXN0ZXJzKHVuc2lnbmVkIG51bUdyYXBoZW1lQ2x1c3RlcnMpIGNvbnN0Cit7
CisgICAgaWYgKGlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBUZXh0QnJlYWtJ
dGVyYXRvciogaXQgPSBjaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKGNoYXJhY3RlcnMoKSwgbGVuZ3Ro
KCkpOworICAgIGlmICghaXQpCisgICAgICAgIHJldHVybiAwOworCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG51bUdyYXBoZW1lQ2x1c3RlcnM7ICsraSkgeworICAgICAgICBpZiAodGV4
dEJyZWFrTmV4dChpdCkgPT0gVGV4dEJyZWFrRG9uZSkKKyAgICAgICAgICAgIHJldHVybiBsZW5n
dGgoKTsKKyAgICB9CisgICAgcmV0dXJuIHRleHRCcmVha0N1cnJlbnQoaXQpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNpZm5kZWYgTkRFQlVHCi0tIAoxLjYuMy4zCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39769</attachid>
            <date>2009-09-18 10:54:14 -0700</date>
            <delta_ts>2009-09-21 18:30:04 -0700</delta_ts>
            <desc>Proposed patch (rev.3)</desc>
            <filename>0001-Proposed-patch.patch</filename>
            <type>text/plain</type>
            <size>20039</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">RnJvbSBiOTI1MmYwNzlhNmYxZDI3NDJkZTA2Y2I4M2NkMjAwZDNiZDQ2MzAwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLZW50IFRhbXVyYSA8dGtlbnRAY2hyb21pdW0ub3JnPgpEYXRl
OiBTYXQsIDE5IFNlcCAyMDA5IDAyOjUxOjM3ICswOTAwClN1YmplY3Q6IFtQQVRDSF0gUHJvcG9z
ZWQgcGF0Y2gKCi0tLQogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDEyICsrCiAuLi4vZmFzdC9mb3Jtcy9yZXNvdXJjZXMvdGV4dGFyZWEtbWF4
bGVuZ3RoLmpzICAgICB8ICAxMjAgKysrKysrKysrKysrKysrKysrKysKIC4uLi9mYXN0L2Zvcm1z
L3RleHRhcmVhLW1heGxlbmd0aC1leHBlY3RlZC50eHQgICAgIHwgICAzMSArKysrKwogTGF5b3V0
VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS1tYXhsZW5ndGguaHRtbCAgICAgfCAgIDEzICsrCiBX
ZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjYg
KysrKwogV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcCAgICAgICAgICAgICAgICAgICAgICAg
fCAgIDU2ICsrLS0tLS0tLS0KIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcCAg
ICAgICAgICAgICAgIHwgICAzNyArKysrKysKIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVt
ZW50LmggICAgICAgICAgICAgICAgIHwgICAgNSArCiBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVh
RWxlbWVudC5pZGwgICAgICAgICAgICAgICB8ICAgIDEgKwogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1BsYXRmb3JtU3RyaW5nLmggICAgICAgICAgICAgfCAgICA4ICsrCiBXZWJDb3JlL3BsYXRmb3Jt
L3RleHQvU3RyaW5nLmNwcCAgICAgICAgICAgICAgICAgICB8ICAgMjYgKysrKwogMTEgZmlsZXMg
Y2hhbmdlZCwgMjg4IGluc2VydGlvbnMoKyksIDQ3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg
MTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvcmVzb3VyY2VzL3RleHRhcmVhLW1heGxlbmd0
aC5qcwogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvdGV4dGFyZWEt
bWF4bGVuZ3RoLWV4cGVjdGVkLnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zh
c3QvZm9ybXMvdGV4dGFyZWEtbWF4bGVuZ3RoLmh0bWwKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMzAwODYzMy4uMjE0MGRm
NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDA5LTA5LTE3ICBLZW50IFRhbXVyYSAgPHRrZW50
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUZXN0cyBmb3IgbWF4TGVuZ3RoIGF0dHJpYnV0ZSBvZiA8dGV4dGFyZWE+CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTI5MgorCisgICAg
ICAgICogZmFzdC9mb3Jtcy9yZXNvdXJjZXMvdGV4dGFyZWEtbWF4bGVuZ3RoLmpzOiBBZGRlZC4K
KyAgICAgICAgKGNyZWF0ZUZvY3VzZWRUZXh0QXJlYVdpdGhNYXhMZW5ndGgzKToKKyAgICAgICAg
KiBmYXN0L2Zvcm1zL3RleHRhcmVhLW1heGxlbmd0aC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZm9ybXMvdGV4dGFyZWEtbWF4bGVuZ3RoLmh0bWw6IEFkZGVkLgorCiAyMDA5
LTA5LTE4ICBTdGV2ZSBCbG9jayAgPHN0ZXZlYmxvY2tAZ29vZ2xlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2Zvcm1zL3Jlc291cmNlcy90ZXh0YXJlYS1tYXhsZW5ndGguanMgYi9MYXlvdXRUZXN0cy9mYXN0
L2Zvcm1zL3Jlc291cmNlcy90ZXh0YXJlYS1tYXhsZW5ndGguanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uN2NmMGY1ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZm9ybXMvcmVzb3VyY2VzL3RleHRhcmVhLW1heGxlbmd0aC5qcwpAQCAtMCwwICsxLDEy
MCBAQAorZGVzY3JpcHRpb24oJ1Rlc3RzIGZvciBIVE1MVGV4dEFyZWFFbGVtZW50Lm1heExlbmd0
aCBiZWhhdmlvcnMuJyk7CisKK3ZhciB0ZXh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J3RleHRhcmVhJyk7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRleHRBcmVhKTsKKworLy8g
Tm8gbWF4bGVuZ3RoIGF0dHJpYnV0ZQorc2hvdWxkQmUoJ3RleHRBcmVhLm1heExlbmd0aCcsICcw
Jyk7CisKKy8vIEludmFsaWQgbWF4bGVuZ3RoIGF0dHJpYnV0ZXMKK3RleHRBcmVhLnNldEF0dHJp
YnV0ZSgnbWF4bGVuZ3RoJywgJy0zJyk7CitzaG91bGRCZSgndGV4dEFyZWEubWF4TGVuZ3RoJywg
JzAnKTsKK3RleHRBcmVhLnNldEF0dHJpYnV0ZSgnbWF4bGVuZ3RoJywgJ3h5eicpOworc2hvdWxk
QmUoJ3RleHRBcmVhLm1heExlbmd0aCcsICcwJyk7CisKKy8vIFZhbGlkIG1heGxlbmd0aCBhdHRy
aWJ1dGVzCit0ZXh0QXJlYS5zZXRBdHRyaWJ1dGUoJ21heGxlbmd0aCcsICcxJyk7CitzaG91bGRC
ZSgndGV4dEFyZWEubWF4TGVuZ3RoJywgJzEnKTsKK3RleHRBcmVhLnNldEF0dHJpYnV0ZSgnbWF4
bGVuZ3RoJywgJzI1NicpOworc2hvdWxkQmUoJ3RleHRBcmVhLm1heExlbmd0aCcsICcyNTYnKTsK
KworLy8gU2V0IHZhbHVlcyB0byAubWF4TGVuZ3RoCit0ZXh0QXJlYS5tYXhMZW5ndGggPSAxMzsK
K3Nob3VsZEJlKCd0ZXh0QXJlYS5nZXRBdHRyaWJ1dGUoIm1heGxlbmd0aCIpJywgJyIxMyInKTsK
KwordGV4dEFyZWEubWF4TGVuZ3RoID0gLTE7CitzaG91bGRCZSgndGV4dEFyZWEubWF4TGVuZ3Ro
JywgJzQyOTQ5NjcyOTUnKTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS5nZXRBdHRyaWJ1dGUoIm1heGxl
bmd0aCIpJywgJyI0Mjk0OTY3Mjk1IicpOworCisvLyBtYXhMZW5ndGggZG9lc24ndCB0cnVuY2F0
ZSB0aGUgZGVmYXVsdCB2YWx1ZS4KK3RleHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
dGV4dGFyZWEnKTsKK3RleHRBcmVhLnNldEF0dHJpYnV0ZSgnbWF4bGVuZ3RoJywgJzMnKTsKK3Rl
eHRBcmVhLmlubmVySFRNTCA9ICdhYmNkJzsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4
dEFyZWEpOworc2hvdWxkQmUoJ3RleHRBcmVhLnZhbHVlJywgJyJhYmNkIicpOworCisvLyBtYXhM
ZW5ndGggZG9lc24ndCB0cnVuY2F0ZSAudmFsdWUKK3RleHRBcmVhLm1heExlbmd0aCA9IDM7Cit0
ZXh0QXJlYS52YWx1ZSA9ICdhYmNkZSc7CitzaG91bGRCZSgndGV4dEFyZWEudmFsdWUnLCAnImFi
Y2RlIicpOworCisvLyBTZXQgdXAgZm9yIHVzZXItaW5wdXQgdGVzdHMKK2Z1bmN0aW9uIGNyZWF0
ZUZvY3VzZWRUZXh0QXJlYVdpdGhNYXhMZW5ndGgzKCkgeworICAgIGlmICh0ZXh0QXJlYSkKKyAg
ICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXh0QXJlYSk7CisgICAgdGV4dEFyZWEg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpOworICAgIHRleHRBcmVhLnNldEF0
dHJpYnV0ZSgnbWF4bGVuZ3RoJywgJzMnKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KHRleHRBcmVhKTsKKyAgICB0ZXh0QXJlYS5mb2N1cygpOworfQorCisvLyBJbnNlcnQgdGV4dCBv
ZiB3aGljaCBsZW5ndGggaXMgbWF4TGVuZ3RoLgorY3JlYXRlRm9jdXNlZFRleHRBcmVhV2l0aE1h
eExlbmd0aDMoKTsKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdh
YmMnKTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS52YWx1ZScsICciYWJjIicpOworCisvLyBUcnkgdG8g
YWRkIGNoYXJhY3RlcnMgdG8gbWF4TGVuZ3RoIGNoYXJhY3RlcnMuCitjcmVhdGVGb2N1c2VkVGV4
dEFyZWFXaXRoTWF4TGVuZ3RoMygpOwordGV4dEFyZWEudmFsdWUgPSAnYWJjJzsKK2RvY3VtZW50
LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdkZWYnKTsKK3Nob3VsZEJlKCd0ZXh0
QXJlYS52YWx1ZScsICciYWJjIicpOworCisvLyBSZXBsYWNlIHRleHQKK2NyZWF0ZUZvY3VzZWRU
ZXh0QXJlYVdpdGhNYXhMZW5ndGgzKCk7Cit0ZXh0QXJlYS52YWx1ZSA9ICdhYmMnOworZG9jdW1l
bnQuZXhlY0NvbW1hbmQoJ3NlbGVjdEFsbCcpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2Vy
dFRleHQnLCBmYWxzZSwgJ2RlZicpOworc2hvdWxkQmUoJ3RleHRBcmVhLnZhbHVlJywgJyJkZWYi
Jyk7CisKKy8vIEV4aXN0aW5nIHZhbHVlIGlzIGxvbmdlciB0aGFuIG1heExlbmd0aC4gIFdlIGNh
bid0IGFkZCB0ZXh0LgorY3JlYXRlRm9jdXNlZFRleHRBcmVhV2l0aE1heExlbmd0aDMoKTsKK3Rl
eHRBcmVhLnZhbHVlID0gJ2FiY2RlZic7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4
dCcsIGZhbHNlLCAnZ2hpJyk7CitzaG91bGRCZSgndGV4dEFyZWEudmFsdWUnLCAnImFiY2RlZiIn
KTsKKworLy8gV2UgY2FuIGRlbGV0ZSBhIGNoYXJhY3RlciBpbiB0aGUgbG9uZ2VyIHZhbHVlLgor
Y3JlYXRlRm9jdXNlZFRleHRBcmVhV2l0aE1heExlbmd0aDMoKTsKK3RleHRBcmVhLnZhbHVlID0g
J2FiY2RlZic7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnZGVsZXRlJyk7CitzaG91bGRCZSgndGV4
dEFyZWEudmFsdWUnLCAnImFiY2RlIicpOworCisvLyBBIGxpbmVicmVhayBpcyAxIGNoYXJhY3Rl
ci4KK2NyZWF0ZUZvY3VzZWRUZXh0QXJlYVdpdGhNYXhMZW5ndGgzKCk7Citkb2N1bWVudC5leGVj
Q29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQScpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQo
J2luc2VydExpbmVCcmVhaycpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBm
YWxzZSwgJ0InKTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS52YWx1ZScsICciQVxcbkIiJyk7CisKKy8v
IEFjY29yZGluZyB0byB0aGUgSFRNTDUgc3BlY2lmaWNhdGlvbiwgbWF4TGVuZ3RoIGlzIGNvZGUt
cG9pbnQgbGVuZ3RoLgorLy8gSG93ZXZlciBXZWJLaXQgaGFuZGxlcyBpdCBhcyBncmFwaGVtZSBs
ZW5ndGguCisKKy8vIGZhbmN5WCBzaG91bGQgYmUgdHJlYXRlZCBhcyAxIGdyYXBoZW1lLgordmFy
IGZhbmN5WCA9ICJ4XHUwMzA1XHUwMzMyIjsvLyArIFN0cmluZy5mcm9tQ2hhckNvZGUoMHgzMDUp
ICsgU3RyaW5nLmZyb21DaGFyQ29kZSgweDMzMik7CisvLyB1MTAwMDAgaXMgb25lIGNoYXJhY3Rl
ciBjb25zaXN0ZWQgb2YgYSBzdXJyb2dhdGUgcGFpci4KK3ZhciB1MTAwMDAgPSAiXHVkODAwXHVk
YzAwIjsKKworLy8gSW5zZXJ0cyA1IGNvZGUtcG9pbnRzIGluIFVURi0xNgorY3JlYXRlRm9jdXNl
ZFRleHRBcmVhV2l0aE1heExlbmd0aDMoKTsKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRU
ZXh0JywgZmFsc2UsICdBQicgKyBmYW5jeVgpOworc2hvdWxkQmUoJ3RleHRBcmVhLnZhbHVlJywg
JyJBQiIgKyBmYW5jeVgnKTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS52YWx1ZS5sZW5ndGgnLCAnNScp
OworCitjcmVhdGVGb2N1c2VkVGV4dEFyZWFXaXRoTWF4TGVuZ3RoMygpOwordGV4dEFyZWEudmFs
dWUgPSAnQUInICsgZmFuY3lYOwordGV4dEFyZWEuc2V0U2VsZWN0aW9uUmFuZ2UoMiwgNSk7ICAv
LyBTZWxlY3QgZmFuY3lYCitkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNl
LCAnQ0RFJyk7CitzaG91bGRCZSgndGV4dEFyZWEudmFsdWUnLCAnIkFCQyInKTsKKworLy8gSW5z
ZXJ0cyA0IGNvZGUtcG9pbnRzIGluIFVURi0xNgorY3JlYXRlRm9jdXNlZFRleHRBcmVhV2l0aE1h
eExlbmd0aDMoKTsKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdB
QicgKyB1MTAwMDApOworc2hvdWxkQmUoJ3RleHRBcmVhLnZhbHVlJywgJyJBQiIgKyB1MTAwMDAn
KTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS52YWx1ZS5sZW5ndGgnLCAnNCcpOworCitjcmVhdGVGb2N1
c2VkVGV4dEFyZWFXaXRoTWF4TGVuZ3RoMygpOwordGV4dEFyZWEudmFsdWUgPSAnQUInICsgdTEw
MDAwOwordGV4dEFyZWEuc2V0U2VsZWN0aW9uUmFuZ2UoMiwgNCk7ICAvLyBTZWxlY3QgdTEwMDAw
Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQ0RFJyk7CitzaG91
bGRCZSgndGV4dEFyZWEudmFsdWUnLCAnIkFCQyInKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3RleHRhcmVhLW1h
eGxlbmd0aC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3RleHRhcmVhLW1h
eGxlbmd0aC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YmQxYWExNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvdGV4dGFy
ZWEtbWF4bGVuZ3RoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMxIEBACitUZXN0cyBmb3IgSFRN
TFRleHRBcmVhRWxlbWVudC5tYXhMZW5ndGggYmVoYXZpb3JzLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyB0ZXh0QXJlYS5tYXhMZW5ndGggaXMgMAorUEFTUyB0ZXh0QXJl
YS5tYXhMZW5ndGggaXMgMAorUEFTUyB0ZXh0QXJlYS5tYXhMZW5ndGggaXMgMAorUEFTUyB0ZXh0
QXJlYS5tYXhMZW5ndGggaXMgMQorUEFTUyB0ZXh0QXJlYS5tYXhMZW5ndGggaXMgMjU2CitQQVNT
IHRleHRBcmVhLmdldEF0dHJpYnV0ZSgibWF4bGVuZ3RoIikgaXMgIjEzIgorUEFTUyB0ZXh0QXJl
YS5tYXhMZW5ndGggaXMgNDI5NDk2NzI5NQorUEFTUyB0ZXh0QXJlYS5nZXRBdHRyaWJ1dGUoIm1h
eGxlbmd0aCIpIGlzICI0Mjk0OTY3Mjk1IgorUEFTUyB0ZXh0QXJlYS52YWx1ZSBpcyAiYWJjZCIK
K1BBU1MgdGV4dEFyZWEudmFsdWUgaXMgImFiY2RlIgorUEFTUyB0ZXh0QXJlYS52YWx1ZSBpcyAi
YWJjIgorUEFTUyB0ZXh0QXJlYS52YWx1ZSBpcyAiYWJjIgorUEFTUyB0ZXh0QXJlYS52YWx1ZSBp
cyAiZGVmIgorUEFTUyB0ZXh0QXJlYS52YWx1ZSBpcyAiYWJjZGVmIgorUEFTUyB0ZXh0QXJlYS52
YWx1ZSBpcyAiYWJjZGUiCitQQVNTIHRleHRBcmVhLnZhbHVlIGlzICJBXG5CIgorUEFTUyB0ZXh0
QXJlYS52YWx1ZSBpcyAiQUIiICsgZmFuY3lYCitQQVNTIHRleHRBcmVhLnZhbHVlLmxlbmd0aCBp
cyA1CitQQVNTIHRleHRBcmVhLnZhbHVlIGlzICJBQkMiCitQQVNTIHRleHRBcmVhLnZhbHVlIGlz
ICJBQiIgKyB1MTAwMDAKK1BBU1MgdGV4dEFyZWEudmFsdWUubGVuZ3RoIGlzIDQKK1BBU1MgdGV4
dEFyZWEudmFsdWUgaXMgIkFCQyIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3RleHRh
cmVhLW1heGxlbmd0aC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS1tYXhs
ZW5ndGguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzU4NWYyCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS1tYXhsZW5n
dGguaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYv
L0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBo
cmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXh0YXJlYS1tYXhsZW5ndGguanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGRmMzhiMDYuLmZmOWZlMzEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjkgQEAKKzIwMDktMDktMTcgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gU3Vw
cG9ydCBmb3IgbWF4TGVuZ3RoIG9mIDx0ZXh0YXJlYT4KKyAgICAgICAgLSBNb3ZlIG51bUdyYXBo
ZW1lQ2x1c3RlcnMoKSBhbmQgbnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycygpIGZyb20g
SW5wdXRFbGVtZW50IHRvIFN0cmluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI5MjkyCisKKyAgICAgICAgVGVzdDogZmFzdC9mb3Jtcy90ZXh0YXJl
YS1tYXhsZW5ndGguaHRtbAorCisgICAgICAgICogZG9tL0lucHV0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OnNhbml0aXplVXNlcklucHV0VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dCk6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVk
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6c2FuaXRpemVV
c2VySW5wdXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50Ojpt
YXhMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6c2V0TWF4
TGVuZ3RoKToKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaDoKKyAgICAgICAg
KiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaWRsOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQv
UGxhdGZvcm1TdHJpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHJpbmc6Om51bUdyYXBoZW1lQ2x1c3RlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6U3RyaW5nOjpudW1DaGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0ZXJzKToKKwogMjAw
OS0wOS0xOCAgU3RldmUgQmxvY2sgIDxzdGV2ZWJsb2NrQGdvb2dsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vSW5w
dXRFbGVtZW50LmNwcCBiL1dlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5jcHAKaW5kZXggOTc3OTNl
Mi4uM2E1ZTkyNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAorKysg
Yi9XZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVk
ZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlRleHRCcmVh
a0l0ZXJhdG9yLmgiCiAKICNpZiBFTkFCTEUoV01MKQogI2luY2x1ZGUgIldNTElucHV0RWxlbWVu
dC5oIgpAQCAtMTU5LDIzICsxNTgsNiBAQCB2b2lkIElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9t
UmVuZGVyZXIoSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgSW5wdXRFbGVtZW50KiBpbgogICAgIG5v
dGlmeUZvcm1TdGF0ZUNoYW5nZWQoZWxlbWVudCk7CiB9CiAKLXN0YXRpYyBpbnQgbnVtQ2hhcmFj
dGVyc0luR3JhcGhlbWVDbHVzdGVycyhTdHJpbmdJbXBsKiBzLCBpbnQgbnVtR3JhcGhlbWVDbHVz
dGVycykKLXsKLSAgICBpZiAoIXMpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgVGV4dEJyZWFr
SXRlcmF0b3IqIGl0ID0gY2hhcmFjdGVyQnJlYWtJdGVyYXRvcihzLT5jaGFyYWN0ZXJzKCksIHMt
Pmxlbmd0aCgpKTsKLSAgICBpZiAoIWl0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtR3JhcGhlbWVDbHVzdGVyczsgKytpKSB7Ci0gICAgICAgIGlmICh0
ZXh0QnJlYWtOZXh0KGl0KSA9PSBUZXh0QnJlYWtEb25lKQotICAgICAgICAgICAgcmV0dXJuIHMt
Pmxlbmd0aCgpOwotICAgIH0KLQotICAgIHJldHVybiB0ZXh0QnJlYWtDdXJyZW50KGl0KTsKLX0K
LQogU3RyaW5nIElucHV0RWxlbWVudDo6c2FuaXRpemVWYWx1ZShjb25zdCBJbnB1dEVsZW1lbnQq
IGlucHV0RWxlbWVudCwgY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKQogewogICAgIHJldHVy
biBJbnB1dEVsZW1lbnQ6OnNhbml0aXplVXNlcklucHV0VmFsdWUoaW5wdXRFbGVtZW50LCBwcm9w
b3NlZFZhbHVlLCBzX21heGltdW1MZW5ndGgpOwpAQCAtMTkxLDM2ICsxNzMsMTUgQEAgU3RyaW5n
IElucHV0RWxlbWVudDo6c2FuaXRpemVVc2VySW5wdXRWYWx1ZShjb25zdCBJbnB1dEVsZW1lbnQq
IGlucHV0RWxlbWVudCwgY28KICAgICBzdHJpbmcucmVwbGFjZSgnXHInLCAnICcpOwogICAgIHN0
cmluZy5yZXBsYWNlKCdcbicsICcgJyk7CiAKLSAgICBTdHJpbmdJbXBsKiBzID0gc3RyaW5nLmlt
cGwoKTsKLSAgICBpbnQgbmV3TGVuZ3RoID0gbnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVy
cyhzLCBtYXhMZW5ndGgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmV3TGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgY29uc3QgVUNoYXImIGN1cnJlbnQgPSAoKnMpW2ldOworICAgIHVuc2lnbmVk
IG5ld0xlbmd0aCA9IHN0cmluZy5udW1DaGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0ZXJzKG1heExl
bmd0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5ld0xlbmd0aDsgKytpKSB7Cisg
ICAgICAgIGNvbnN0IFVDaGFyIGN1cnJlbnQgPSBzdHJpbmdbaV07CiAgICAgICAgIGlmIChjdXJy
ZW50IDwgJyAnICYmIGN1cnJlbnQgIT0gJ1x0JykgewogICAgICAgICAgICAgbmV3TGVuZ3RoID0g
aTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQotCi0gICAgaWYgKG5ld0xl
bmd0aCA8IHN0YXRpY19jYXN0PGludD4oc3RyaW5nLmxlbmd0aCgpKSkKLSAgICAgICAgcmV0dXJu
IHN0cmluZy5sZWZ0KG5ld0xlbmd0aCk7Ci0KLSAgICByZXR1cm4gc3RyaW5nOwotfQotCi1zdGF0
aWMgaW50IG51bUdyYXBoZW1lQ2x1c3RlcnMoU3RyaW5nSW1wbCogcykKLXsKLSAgICBpZiAoIXMp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ID0gY2hhcmFj
dGVyQnJlYWtJdGVyYXRvcihzLT5jaGFyYWN0ZXJzKCksIHMtPmxlbmd0aCgpKTsKLSAgICBpZiAo
IWl0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGludCBudW0gPSAwOwotICAgIHdoaWxlICh0
ZXh0QnJlYWtOZXh0KGl0KSAhPSBUZXh0QnJlYWtEb25lKQotICAgICAgICArK251bTsKLQotICAg
IHJldHVybiBudW07CisgICAgcmV0dXJuIHN0cmluZy5sZWZ0KG5ld0xlbmd0aCk7CiB9CiAKIHZv
aWQgSW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChJbnB1dEVsZW1l
bnREYXRhJiBkYXRhLCBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgRWxlbWVudCogZWxlbWVu
dCwgRXZlbnQqIGV2ZW50KQpAQCAtMjMxLDE1ICsxOTIsMTYgQEAgdm9pZCBJbnB1dEVsZW1lbnQ6
OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KElucHV0RWxlbWVudERhdGEmIGRhdGEsIElu
cHV0RWwKICAgICAvLyBXZSB1c2UgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0KCkg
aW5zdGVhZCBvZiBJbnB1dEVsZW1lbnQ6OnZhbHVlKCkKICAgICAvLyBiZWNhdXNlIHRoZXkgY2Fu
IGJlIG1pc21hdGNoZWQgYnkgc2FuaXRpemVWYWx1ZSgpIGluCiAgICAgLy8gUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpzdWJ0cmVlSGFzQ2hhbmdlZCgpIGluIHNvbWUgY2FzZXMuCi0gICAg
aW50IG9sZExlbmd0aCA9IG51bUdyYXBoZW1lQ2x1c3RlcnModG9SZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUoZWxlbWVudC0+cmVuZGVyZXIoKSktPnRleHQoKS5pbXBsKCkpOworICAgIHVuc2ln
bmVkIG9sZExlbmd0aCA9IHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKGVsZW1lbnQtPnJl
bmRlcmVyKCkpLT50ZXh0KCkubnVtR3JhcGhlbWVDbHVzdGVycygpOwogCiAgICAgLy8gc2VsZWN0
aW9uKCkgbWF5IGJlIGEgcHJlLWVkaXQgdGV4dC4KLSAgICBpbnQgc2VsZWN0aW9uTGVuZ3RoID0g
bnVtR3JhcGhlbWVDbHVzdGVycyhwbGFpblRleHQoZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUo
KS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpLmlt
cGwoKSk7CisgICAgdW5zaWduZWQgc2VsZWN0aW9uTGVuZ3RoID0gcGxhaW5UZXh0KGVsZW1lbnQt
PmRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpKS5udW1HcmFwaGVtZUNsdXN0ZXJzKCk7CiAgICAgQVNTRVJUKG9sZExl
bmd0aCA+PSBzZWxlY3Rpb25MZW5ndGgpOwogCiAgICAgLy8gU2VsZWN0ZWQgY2hhcmFjdGVycyB3
aWxsIGJlIHJlbW92ZWQgYnkgdGhlIG5leHQgdGV4dCBldmVudC4KLSAgICBpbnQgYmFzZUxlbmd0
aCA9IG9sZExlbmd0aCAtIHNlbGVjdGlvbkxlbmd0aDsKLSAgICBpbnQgYXBwZW5kYWJsZUxlbmd0
aCA9IGRhdGEubWF4TGVuZ3RoKCkgLSBiYXNlTGVuZ3RoOworICAgIHVuc2lnbmVkIGJhc2VMZW5n
dGggPSBvbGRMZW5ndGggLSBzZWxlY3Rpb25MZW5ndGg7CisgICAgdW5zaWduZWQgbWF4TGVuZ3Ro
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRhdGEubWF4TGVuZ3RoKCkpOyAgLy8gbWF4TGVuZ3Ro
KCkgbmV2ZXIgYmUgbmVnYXRpdmUuCisgICAgdW5zaWduZWQgYXBwZW5kYWJsZUxlbmd0aCA9ICBt
YXhMZW5ndGggPiBiYXNlTGVuZ3RoID8gbWF4TGVuZ3RoIC0gYmFzZUxlbmd0aCA6IDA7CiAKICAg
ICAvLyBUcnVuY2F0ZSB0aGUgaW5zZXJ0ZWQgdGV4dCB0byBhdm9pZCB2aW9sYXRpbmcgdGhlIG1h
eExlbmd0aCBhbmQgb3RoZXIgY29uc3RyYWludHMuCiAgICAgQmVmb3JlVGV4dEluc2VydGVkRXZl
bnQqIHRleHRFdmVudCA9IHN0YXRpY19jYXN0PEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50Kj4oZXZl
bnQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwIGIv
V2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCmluZGV4IGQzZmM4OTcuLjNjZjQ4
NTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAorKysg
Yi9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAK
KyNpbmNsdWRlICJCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oIgogI2luY2x1ZGUgIkNocm9tZUNs
aWVudC5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgpAQCAtMzUsMTIgKzM2LDE0IEBACiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCiAjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJJbnB1dEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJNYXBwZWRBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJQYWdlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbE11
bHRpTGluZS5oIgogI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJU
ZXh0LmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVNlbGVj
dGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtMjcwLDEwICsyNzMs
MzQgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50
KiBldmVudCkKIHsKICAgICBpZiAocmVuZGVyZXIoKSAmJiAoZXZlbnQtPmlzTW91c2VFdmVudCgp
IHx8IGV2ZW50LT5pc0RyYWdFdmVudCgpIHx8IGV2ZW50LT5pc1doZWVsRXZlbnQoKSB8fCBldmVu
dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQpKQogICAgICAgICB0b1JlbmRlclRl
eHRDb250cm9sTXVsdGlMaW5lKHJlbmRlcmVyKCkpLT5mb3J3YXJkRXZlbnQoZXZlbnQpOworICAg
IGVsc2UgaWYgKHJlbmRlcmVyKCkgJiYgZXZlbnQtPmlzQmVmb3JlVGV4dEluc2VydGVkRXZlbnQo
KSkKKyAgICAgICAgaGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoc3RhdGljX2Nhc3Q8QmVm
b3JlVGV4dEluc2VydGVkRXZlbnQqPihldmVudCkpOwogCiAgICAgSFRNTEZvcm1Db250cm9sRWxl
bWVudFdpdGhTdGF0ZTo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CiB9CiAKK3ZvaWQgSFRN
TFRleHRBcmVhRWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoQmVmb3JlVGV4
dEluc2VydGVkRXZlbnQqIGV2ZW50KSBjb25zdAoreworICAgIEFTU0VSVChldmVudCk7CisgICAg
QVNTRVJUKHJlbmRlcmVyKCkpOworICAgIGJvb2wgb2s7CisgICAgdW5zaWduZWQgbWF4TGVuZ3Ro
ID0gZ2V0QXR0cmlidXRlKG1heGxlbmd0aEF0dHIpLnN0cmluZygpLnRvVUludCgmb2spOworICAg
IGlmICghb2spCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGgg
PSB0b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT50ZXh0KCkubnVtR3JhcGhlbWVDbHVz
dGVycygpOworICAgIHVuc2lnbmVkIHNlbGVjdGlvbkxlbmd0aCA9IHBsYWluVGV4dChkb2N1bWVu
dCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSkubnVtR3JhcGhlbWVDbHVzdGVycygpOworICAgIEFTU0VSVChjdXJyZW50TGVuZ3Ro
ID49IHNlbGVjdGlvbkxlbmd0aCk7CisgICAgdW5zaWduZWQgYmFzZUxlbmd0aCA9IGN1cnJlbnRM
ZW5ndGggLSBzZWxlY3Rpb25MZW5ndGg7CisgICAgdW5zaWduZWQgYXBwZW5kYWJsZUxlbmd0aCA9
IG1heExlbmd0aCA+IGJhc2VMZW5ndGggPyBtYXhMZW5ndGggLSBiYXNlTGVuZ3RoIDogMDsKKyAg
ICBldmVudC0+c2V0VGV4dChzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKGV2ZW50LT50ZXh0KCksIGFw
cGVuZGFibGVMZW5ndGgpKTsKK30KKworU3RyaW5nIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNhbml0
aXplVXNlcklucHV0VmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlLCB1bnNpZ25lZCBt
YXhMZW5ndGgpCit7CisgICAgcmV0dXJuIHByb3Bvc2VkVmFsdWUubGVmdChwcm9wb3NlZFZhbHVl
Lm51bUNoYXJhY3RlcnNJbkdyYXBoZW1lQ2x1c3RlcnMobWF4TGVuZ3RoKSk7Cit9CisKIHZvaWQg
SFRNTFRleHRBcmVhRWxlbWVudDo6cmVuZGVyZXJXaWxsQmVEZXN0cm95ZWQoKQogewogICAgIHVw
ZGF0ZVZhbHVlKCk7CkBAIC0zNzQsNiArNDAxLDE2IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVu
dDo6c2V0RGVmYXVsdFZhbHVlKGNvbnN0IFN0cmluZyYgZGVmYXVsdFZhbHVlKQogICAgIHNldFZh
bHVlKHZhbHVlKTsKIH0KIAordW5zaWduZWQgSFRNTFRleHRBcmVhRWxlbWVudDo6bWF4TGVuZ3Ro
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG1heGxlbmd0aEF0dHIpLnN0cmlu
ZygpLnRvVUludCgpOworfQorCit2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldE1heExlbmd0
aCh1bnNpZ25lZCBuZXdWYWx1ZSkKK3sKKyAgICBzZXRBdHRyaWJ1dGUobWF4bGVuZ3RoQXR0ciwg
U3RyaW5nOjpudW1iZXIobmV3VmFsdWUpKTsKK30KKwogdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50
OjphY2Nlc3NLZXlBY3Rpb24oYm9vbCkKIHsKICAgICBmb2N1cygpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFy
ZWFFbGVtZW50LmgKaW5kZXggMWY1Y2I5MS4uZmJmNTE5ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9o
dG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVh
RWxlbWVudC5oCkBAIC0yOCw2ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xh
c3MgQmVmb3JlVGV4dEluc2VydGVkRXZlbnQ7CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogCiBj
bGFzcyBIVE1MVGV4dEFyZWFFbGVtZW50IDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRX
aXRoU3RhdGUgewpAQCAtNzgsNiArNzksOCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGRlZmF1bHRW
YWx1ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0RGVmYXVsdFZhbHVlKGNvbnN0IFN0cmluZyYpOwog
ICAgIGludCB0ZXh0TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gdmFsdWUoKS5sZW5ndGgoKTsgfQor
ICAgIHVuc2lnbmVkIG1heExlbmd0aCgpIGNvbnN0OworICAgIHZvaWQgc2V0TWF4TGVuZ3RoKHVu
c2lnbmVkKTsKICAgICAKICAgICB2b2lkIHJlbmRlcmVyV2lsbEJlRGVzdHJveWVkKCk7CiAgICAg
CkBAIC05OSw2ICsxMDIsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGVudW0gV3JhcE1ldGhv
ZCB7IE5vV3JhcCwgU29mdFdyYXAsIEhhcmRXcmFwIH07CiAKKyAgICB2b2lkIGhhbmRsZUJlZm9y
ZVRleHRJbnNlcnRlZEV2ZW50KEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KikgY29uc3Q7CisgICAg
c3RhdGljIFN0cmluZyBzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKGNvbnN0IFN0cmluZyYsIHVuc2ln
bmVkIG1heExlbmd0aCk7CiAgICAgdm9pZCB1cGRhdGVWYWx1ZSgpIGNvbnN0OwogICAgIHZvaWQg
dXBkYXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGJvb2wgcGxhY2Vob2xkZXJWYWx1ZUNoYW5nZWQp
OwogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEZvY3VzRXZlbnQoKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmlkbCBiL1dlYkNvcmUvaHRtbC9IVE1MVGV4
dEFyZWFFbGVtZW50LmlkbAppbmRleCA2ZDI3ZjU0Li44NDU4M2Y1IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5pZGwKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuaWRsCkBAIC0zNCw2ICszNCw3IEBAIG1vZHVsZSBodG1sIHsKICAgICAg
ICAgICAgICAgICAgYXR0cmlidXRlICBsb25nICAgICAgICAgICAgICAgICBjb2xzOwogICAgICAg
ICAgICAgICAgICBhdHRyaWJ1dGUgIGJvb2xlYW4gICAgICAgICAgICAgIGRpc2FibGVkOwogICAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGUgIGJvb2xlYW4gICAgICAgICAgICAgIGF1dG9mb2N1czsK
KyAgICAgICAgICAgICAgICAgYXR0cmlidXRlICB1bnNpZ25lZCBsb25nICAgICAgICBtYXhMZW5n
dGg7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSAgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5n
XSBET01TdHJpbmcgICAgICAgICAgICBuYW1lOwogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUg
IFtDb252ZXJ0TnVsbFRvTnVsbFN0cmluZywgUmVmbGVjdF0gRE9NU3RyaW5nICAgcGxhY2Vob2xk
ZXI7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSAgYm9vbGVhbiAgICAgICAgICAgICAgcmVh
ZE9ubHk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCmluZGV4IDI1OGIyOGQu
LmI5YjQwNzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmlu
Zy5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCkBAIC0yNTQs
NiArMjU0LDE0IEBAIHB1YmxpYzoKICAgICAvLyBEZXRlcm1pbmVzIHRoZSB3cml0aW5nIGRpcmVj
dGlvbiB1c2luZyB0aGUgVW5pY29kZSBCaWRpIEFsZ29yaXRobSBydWxlcyBQMiBhbmQgUDMuCiAg
ICAgV1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24oKSBjb25z
dCB7IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKCkgOiBX
VEY6OlVuaWNvZGU6OkxlZnRUb1JpZ2h0OyB9CiAKKyAgICAvLyBDb3VudHMgdGhlIG51bWJlciBv
ZiBncmFwaGVtZSBjbHVzdGVycy4gQSBzdXJyb2dhdGUgcGFpciBvciBhIHNlcXVlbmNlCisgICAg
Ly8gb2YgYSBub24tY29tYmluaW5nIGNoYXJhY3RlciBhbmQgZm9sbG93aW5nIGNvbWJpbmluZyBj
aGFyYWN0ZXJzIGlzCisgICAgLy8gY291bnRlZCBhcyAxIGdyYXBoZW1lIGNsdXN0ZXIuCisgICAg
dW5zaWduZWQgbnVtR3JhcGhlbWVDbHVzdGVycygpIGNvbnN0OworICAgIC8vIFJldHVybnMgdGhl
IG51bWJlciBvZiBjaGFyYWN0ZXJzIHdoaWNoIHdpbGwgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRv
CisgICAgLy8gdGhlIHNwZWNpZmllZCBncmFwaGVtZSBjbHVzdGVyIGxlbmd0aC4KKyAgICB1bnNp
Z25lZCBudW1DaGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0ZXJzKHVuc2lnbmVkKSBjb25zdDsKKwog
cHJpdmF0ZToKICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9pbXBsOwogfTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1N0cmluZy5jcHAKaW5kZXggMjczMDkzOS4uOTIxYTk5YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmlu
Zy5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAi
RmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiU3RyaW5nQnVmZmVyLmgiCisjaW5jbHVkZSAi
VGV4dEJyZWFrSXRlcmF0b3IuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRl
IDx3dGYvZHRvYS5oPgogI2luY2x1ZGUgPGxpbWl0cz4KQEAgLTkyMSw2ICs5MjIsMzEgQEAgUGFz
c1JlZlB0cjxTaGFyZWRCdWZmZXI+IHV0ZjhCdWZmZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAg
ICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IoYnVmZmVyKTsKIH0KIAordW5zaWdu
ZWQgU3RyaW5nOjpudW1HcmFwaGVtZUNsdXN0ZXJzKCkgY29uc3QKK3sKKyAgICBUZXh0QnJlYWtJ
dGVyYXRvciogaXQgPSBjaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKGNoYXJhY3RlcnMoKSwgbGVuZ3Ro
KCkpOworICAgIGlmICghaXQpCisgICAgICAgIHJldHVybiBsZW5ndGgoKTsKKworICAgIHVuc2ln
bmVkIG51bSA9IDA7CisgICAgd2hpbGUgKHRleHRCcmVha05leHQoaXQpICE9IFRleHRCcmVha0Rv
bmUpCisgICAgICAgICsrbnVtOworICAgIHJldHVybiBudW07Cit9CisKK3Vuc2lnbmVkIFN0cmlu
Zzo6bnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycyh1bnNpZ25lZCBudW1HcmFwaGVtZUNs
dXN0ZXJzKSBjb25zdAoreworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdCA9IGNoYXJhY3RlckJy
ZWFrSXRlcmF0b3IoY2hhcmFjdGVycygpLCBsZW5ndGgoKSk7CisgICAgaWYgKCFpdCkKKyAgICAg
ICAgcmV0dXJuIGxlbmd0aCgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdy
YXBoZW1lQ2x1c3RlcnM7ICsraSkgeworICAgICAgICBpZiAodGV4dEJyZWFrTmV4dChpdCkgPT0g
VGV4dEJyZWFrRG9uZSkKKyAgICAgICAgICAgIHJldHVybiBsZW5ndGgoKTsKKyAgICB9CisgICAg
cmV0dXJuIHRleHRCcmVha0N1cnJlbnQoaXQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNpZm5kZWYgTkRFQlVHCi0tIAoxLjYuMy4zCgo=
</data>
<flag name="commit-queue"
          id="20894"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39781</attachid>
            <date>2009-09-18 13:06:48 -0700</date>
            <delta_ts>2009-09-18 17:53:38 -0700</delta_ts>
            <desc>Proposed patch (rev.4)</desc>
            <filename>0001-Proposed-patch.patch</filename>
            <type>text/plain</type>
            <size>20041</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">RnJvbSAwOGUxZTYzY2JmOTcxMDY4YWE0Y2RmMGU4NjQ2NTQwNzk0ZjM2YWZmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLZW50IFRhbXVyYSA8dGtlbnRAY2hyb21pdW0ub3JnPgpEYXRl
OiBTYXQsIDE5IFNlcCAyMDA5IDAyOjUxOjM3ICswOTAwClN1YmplY3Q6IFtQQVRDSF0gUHJvcG9z
ZWQgcGF0Y2gKCi0tLQogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDEyICsrCiAuLi4vZmFzdC9mb3Jtcy9yZXNvdXJjZXMvdGV4dGFyZWEtbWF4
bGVuZ3RoLmpzICAgICB8ICAxMjAgKysrKysrKysrKysrKysrKysrKysKIC4uLi9mYXN0L2Zvcm1z
L3RleHRhcmVhLW1heGxlbmd0aC1leHBlY3RlZC50eHQgICAgIHwgICAzMSArKysrKwogTGF5b3V0
VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS1tYXhsZW5ndGguaHRtbCAgICAgfCAgIDEzICsrCiBX
ZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjYg
KysrKwogV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcCAgICAgICAgICAgICAgICAgICAgICAg
fCAgIDU2ICsrLS0tLS0tLS0KIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcCAg
ICAgICAgICAgICAgIHwgICAzNyArKysrKysKIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVt
ZW50LmggICAgICAgICAgICAgICAgIHwgICAgNSArCiBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVh
RWxlbWVudC5pZGwgICAgICAgICAgICAgICB8ICAgIDEgKwogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1BsYXRmb3JtU3RyaW5nLmggICAgICAgICAgICAgfCAgICA4ICsrCiBXZWJDb3JlL3BsYXRmb3Jt
L3RleHQvU3RyaW5nLmNwcCAgICAgICAgICAgICAgICAgICB8ICAgMjYgKysrKwogMTEgZmlsZXMg
Y2hhbmdlZCwgMjg4IGluc2VydGlvbnMoKyksIDQ3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg
MTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvcmVzb3VyY2VzL3RleHRhcmVhLW1heGxlbmd0
aC5qcwogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvdGV4dGFyZWEt
bWF4bGVuZ3RoLWV4cGVjdGVkLnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zh
c3QvZm9ybXMvdGV4dGFyZWEtbWF4bGVuZ3RoLmh0bWwKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMzAwODYzMy4uMjE0MGRm
NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDA5LTA5LTE3ICBLZW50IFRhbXVyYSAgPHRrZW50
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUZXN0cyBmb3IgbWF4TGVuZ3RoIGF0dHJpYnV0ZSBvZiA8dGV4dGFyZWE+CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTI5MgorCisgICAg
ICAgICogZmFzdC9mb3Jtcy9yZXNvdXJjZXMvdGV4dGFyZWEtbWF4bGVuZ3RoLmpzOiBBZGRlZC4K
KyAgICAgICAgKGNyZWF0ZUZvY3VzZWRUZXh0QXJlYVdpdGhNYXhMZW5ndGgzKToKKyAgICAgICAg
KiBmYXN0L2Zvcm1zL3RleHRhcmVhLW1heGxlbmd0aC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZm9ybXMvdGV4dGFyZWEtbWF4bGVuZ3RoLmh0bWw6IEFkZGVkLgorCiAyMDA5
LTA5LTE4ICBTdGV2ZSBCbG9jayAgPHN0ZXZlYmxvY2tAZ29vZ2xlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2Zvcm1zL3Jlc291cmNlcy90ZXh0YXJlYS1tYXhsZW5ndGguanMgYi9MYXlvdXRUZXN0cy9mYXN0
L2Zvcm1zL3Jlc291cmNlcy90ZXh0YXJlYS1tYXhsZW5ndGguanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uN2NmMGY1ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZm9ybXMvcmVzb3VyY2VzL3RleHRhcmVhLW1heGxlbmd0aC5qcwpAQCAtMCwwICsxLDEy
MCBAQAorZGVzY3JpcHRpb24oJ1Rlc3RzIGZvciBIVE1MVGV4dEFyZWFFbGVtZW50Lm1heExlbmd0
aCBiZWhhdmlvcnMuJyk7CisKK3ZhciB0ZXh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J3RleHRhcmVhJyk7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRleHRBcmVhKTsKKworLy8g
Tm8gbWF4bGVuZ3RoIGF0dHJpYnV0ZQorc2hvdWxkQmUoJ3RleHRBcmVhLm1heExlbmd0aCcsICcw
Jyk7CisKKy8vIEludmFsaWQgbWF4bGVuZ3RoIGF0dHJpYnV0ZXMKK3RleHRBcmVhLnNldEF0dHJp
YnV0ZSgnbWF4bGVuZ3RoJywgJy0zJyk7CitzaG91bGRCZSgndGV4dEFyZWEubWF4TGVuZ3RoJywg
JzAnKTsKK3RleHRBcmVhLnNldEF0dHJpYnV0ZSgnbWF4bGVuZ3RoJywgJ3h5eicpOworc2hvdWxk
QmUoJ3RleHRBcmVhLm1heExlbmd0aCcsICcwJyk7CisKKy8vIFZhbGlkIG1heGxlbmd0aCBhdHRy
aWJ1dGVzCit0ZXh0QXJlYS5zZXRBdHRyaWJ1dGUoJ21heGxlbmd0aCcsICcxJyk7CitzaG91bGRC
ZSgndGV4dEFyZWEubWF4TGVuZ3RoJywgJzEnKTsKK3RleHRBcmVhLnNldEF0dHJpYnV0ZSgnbWF4
bGVuZ3RoJywgJzI1NicpOworc2hvdWxkQmUoJ3RleHRBcmVhLm1heExlbmd0aCcsICcyNTYnKTsK
KworLy8gU2V0IHZhbHVlcyB0byAubWF4TGVuZ3RoCit0ZXh0QXJlYS5tYXhMZW5ndGggPSAxMzsK
K3Nob3VsZEJlKCd0ZXh0QXJlYS5nZXRBdHRyaWJ1dGUoIm1heGxlbmd0aCIpJywgJyIxMyInKTsK
KwordGV4dEFyZWEubWF4TGVuZ3RoID0gLTE7CitzaG91bGRCZSgndGV4dEFyZWEubWF4TGVuZ3Ro
JywgJzQyOTQ5NjcyOTUnKTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS5nZXRBdHRyaWJ1dGUoIm1heGxl
bmd0aCIpJywgJyI0Mjk0OTY3Mjk1IicpOworCisvLyBtYXhMZW5ndGggZG9lc24ndCB0cnVuY2F0
ZSB0aGUgZGVmYXVsdCB2YWx1ZS4KK3RleHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
dGV4dGFyZWEnKTsKK3RleHRBcmVhLnNldEF0dHJpYnV0ZSgnbWF4bGVuZ3RoJywgJzMnKTsKK3Rl
eHRBcmVhLmlubmVySFRNTCA9ICdhYmNkJzsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4
dEFyZWEpOworc2hvdWxkQmUoJ3RleHRBcmVhLnZhbHVlJywgJyJhYmNkIicpOworCisvLyBtYXhM
ZW5ndGggZG9lc24ndCB0cnVuY2F0ZSAudmFsdWUKK3RleHRBcmVhLm1heExlbmd0aCA9IDM7Cit0
ZXh0QXJlYS52YWx1ZSA9ICdhYmNkZSc7CitzaG91bGRCZSgndGV4dEFyZWEudmFsdWUnLCAnImFi
Y2RlIicpOworCisvLyBTZXQgdXAgZm9yIHVzZXItaW5wdXQgdGVzdHMKK2Z1bmN0aW9uIGNyZWF0
ZUZvY3VzZWRUZXh0QXJlYVdpdGhNYXhMZW5ndGgzKCkgeworICAgIGlmICh0ZXh0QXJlYSkKKyAg
ICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXh0QXJlYSk7CisgICAgdGV4dEFyZWEg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpOworICAgIHRleHRBcmVhLnNldEF0
dHJpYnV0ZSgnbWF4bGVuZ3RoJywgJzMnKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KHRleHRBcmVhKTsKKyAgICB0ZXh0QXJlYS5mb2N1cygpOworfQorCisvLyBJbnNlcnQgdGV4dCBv
ZiB3aGljaCBsZW5ndGggaXMgbWF4TGVuZ3RoLgorY3JlYXRlRm9jdXNlZFRleHRBcmVhV2l0aE1h
eExlbmd0aDMoKTsKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdh
YmMnKTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS52YWx1ZScsICciYWJjIicpOworCisvLyBUcnkgdG8g
YWRkIGNoYXJhY3RlcnMgdG8gbWF4TGVuZ3RoIGNoYXJhY3RlcnMuCitjcmVhdGVGb2N1c2VkVGV4
dEFyZWFXaXRoTWF4TGVuZ3RoMygpOwordGV4dEFyZWEudmFsdWUgPSAnYWJjJzsKK2RvY3VtZW50
LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdkZWYnKTsKK3Nob3VsZEJlKCd0ZXh0
QXJlYS52YWx1ZScsICciYWJjIicpOworCisvLyBSZXBsYWNlIHRleHQKK2NyZWF0ZUZvY3VzZWRU
ZXh0QXJlYVdpdGhNYXhMZW5ndGgzKCk7Cit0ZXh0QXJlYS52YWx1ZSA9ICdhYmMnOworZG9jdW1l
bnQuZXhlY0NvbW1hbmQoJ3NlbGVjdEFsbCcpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2Vy
dFRleHQnLCBmYWxzZSwgJ2RlZicpOworc2hvdWxkQmUoJ3RleHRBcmVhLnZhbHVlJywgJyJkZWYi
Jyk7CisKKy8vIEV4aXN0aW5nIHZhbHVlIGlzIGxvbmdlciB0aGFuIG1heExlbmd0aC4gIFdlIGNh
bid0IGFkZCB0ZXh0LgorY3JlYXRlRm9jdXNlZFRleHRBcmVhV2l0aE1heExlbmd0aDMoKTsKK3Rl
eHRBcmVhLnZhbHVlID0gJ2FiY2RlZic7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4
dCcsIGZhbHNlLCAnZ2hpJyk7CitzaG91bGRCZSgndGV4dEFyZWEudmFsdWUnLCAnImFiY2RlZiIn
KTsKKworLy8gV2UgY2FuIGRlbGV0ZSBhIGNoYXJhY3RlciBpbiB0aGUgbG9uZ2VyIHZhbHVlLgor
Y3JlYXRlRm9jdXNlZFRleHRBcmVhV2l0aE1heExlbmd0aDMoKTsKK3RleHRBcmVhLnZhbHVlID0g
J2FiY2RlZic7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnZGVsZXRlJyk7CitzaG91bGRCZSgndGV4
dEFyZWEudmFsdWUnLCAnImFiY2RlIicpOworCisvLyBBIGxpbmVicmVhayBpcyAxIGNoYXJhY3Rl
ci4KK2NyZWF0ZUZvY3VzZWRUZXh0QXJlYVdpdGhNYXhMZW5ndGgzKCk7Citkb2N1bWVudC5leGVj
Q29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQScpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQo
J2luc2VydExpbmVCcmVhaycpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBm
YWxzZSwgJ0InKTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS52YWx1ZScsICciQVxcbkIiJyk7CisKKy8v
IEFjY29yZGluZyB0byB0aGUgSFRNTDUgc3BlY2lmaWNhdGlvbiwgbWF4TGVuZ3RoIGlzIGNvZGUt
cG9pbnQgbGVuZ3RoLgorLy8gSG93ZXZlciBXZWJLaXQgaGFuZGxlcyBpdCBhcyBncmFwaGVtZSBs
ZW5ndGguCisKKy8vIGZhbmN5WCBzaG91bGQgYmUgdHJlYXRlZCBhcyAxIGdyYXBoZW1lLgordmFy
IGZhbmN5WCA9ICJ4XHUwMzA1XHUwMzMyIjsvLyArIFN0cmluZy5mcm9tQ2hhckNvZGUoMHgzMDUp
ICsgU3RyaW5nLmZyb21DaGFyQ29kZSgweDMzMik7CisvLyB1MTAwMDAgaXMgb25lIGNoYXJhY3Rl
ciBjb25zaXN0ZWQgb2YgYSBzdXJyb2dhdGUgcGFpci4KK3ZhciB1MTAwMDAgPSAiXHVkODAwXHVk
YzAwIjsKKworLy8gSW5zZXJ0cyA1IGNvZGUtcG9pbnRzIGluIFVURi0xNgorY3JlYXRlRm9jdXNl
ZFRleHRBcmVhV2l0aE1heExlbmd0aDMoKTsKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRU
ZXh0JywgZmFsc2UsICdBQicgKyBmYW5jeVgpOworc2hvdWxkQmUoJ3RleHRBcmVhLnZhbHVlJywg
JyJBQiIgKyBmYW5jeVgnKTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS52YWx1ZS5sZW5ndGgnLCAnNScp
OworCitjcmVhdGVGb2N1c2VkVGV4dEFyZWFXaXRoTWF4TGVuZ3RoMygpOwordGV4dEFyZWEudmFs
dWUgPSAnQUInICsgZmFuY3lYOwordGV4dEFyZWEuc2V0U2VsZWN0aW9uUmFuZ2UoMiwgNSk7ICAv
LyBTZWxlY3QgZmFuY3lYCitkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNl
LCAnQ0RFJyk7CitzaG91bGRCZSgndGV4dEFyZWEudmFsdWUnLCAnIkFCQyInKTsKKworLy8gSW5z
ZXJ0cyA0IGNvZGUtcG9pbnRzIGluIFVURi0xNgorY3JlYXRlRm9jdXNlZFRleHRBcmVhV2l0aE1h
eExlbmd0aDMoKTsKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdB
QicgKyB1MTAwMDApOworc2hvdWxkQmUoJ3RleHRBcmVhLnZhbHVlJywgJyJBQiIgKyB1MTAwMDAn
KTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS52YWx1ZS5sZW5ndGgnLCAnNCcpOworCitjcmVhdGVGb2N1
c2VkVGV4dEFyZWFXaXRoTWF4TGVuZ3RoMygpOwordGV4dEFyZWEudmFsdWUgPSAnQUInICsgdTEw
MDAwOwordGV4dEFyZWEuc2V0U2VsZWN0aW9uUmFuZ2UoMiwgNCk7ICAvLyBTZWxlY3QgdTEwMDAw
Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQ0RFJyk7CitzaG91
bGRCZSgndGV4dEFyZWEudmFsdWUnLCAnIkFCQyInKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3RleHRhcmVhLW1h
eGxlbmd0aC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3RleHRhcmVhLW1h
eGxlbmd0aC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YmQxYWExNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvdGV4dGFy
ZWEtbWF4bGVuZ3RoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMxIEBACitUZXN0cyBmb3IgSFRN
TFRleHRBcmVhRWxlbWVudC5tYXhMZW5ndGggYmVoYXZpb3JzLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyB0ZXh0QXJlYS5tYXhMZW5ndGggaXMgMAorUEFTUyB0ZXh0QXJl
YS5tYXhMZW5ndGggaXMgMAorUEFTUyB0ZXh0QXJlYS5tYXhMZW5ndGggaXMgMAorUEFTUyB0ZXh0
QXJlYS5tYXhMZW5ndGggaXMgMQorUEFTUyB0ZXh0QXJlYS5tYXhMZW5ndGggaXMgMjU2CitQQVNT
IHRleHRBcmVhLmdldEF0dHJpYnV0ZSgibWF4bGVuZ3RoIikgaXMgIjEzIgorUEFTUyB0ZXh0QXJl
YS5tYXhMZW5ndGggaXMgNDI5NDk2NzI5NQorUEFTUyB0ZXh0QXJlYS5nZXRBdHRyaWJ1dGUoIm1h
eGxlbmd0aCIpIGlzICI0Mjk0OTY3Mjk1IgorUEFTUyB0ZXh0QXJlYS52YWx1ZSBpcyAiYWJjZCIK
K1BBU1MgdGV4dEFyZWEudmFsdWUgaXMgImFiY2RlIgorUEFTUyB0ZXh0QXJlYS52YWx1ZSBpcyAi
YWJjIgorUEFTUyB0ZXh0QXJlYS52YWx1ZSBpcyAiYWJjIgorUEFTUyB0ZXh0QXJlYS52YWx1ZSBp
cyAiZGVmIgorUEFTUyB0ZXh0QXJlYS52YWx1ZSBpcyAiYWJjZGVmIgorUEFTUyB0ZXh0QXJlYS52
YWx1ZSBpcyAiYWJjZGUiCitQQVNTIHRleHRBcmVhLnZhbHVlIGlzICJBXG5CIgorUEFTUyB0ZXh0
QXJlYS52YWx1ZSBpcyAiQUIiICsgZmFuY3lYCitQQVNTIHRleHRBcmVhLnZhbHVlLmxlbmd0aCBp
cyA1CitQQVNTIHRleHRBcmVhLnZhbHVlIGlzICJBQkMiCitQQVNTIHRleHRBcmVhLnZhbHVlIGlz
ICJBQiIgKyB1MTAwMDAKK1BBU1MgdGV4dEFyZWEudmFsdWUubGVuZ3RoIGlzIDQKK1BBU1MgdGV4
dEFyZWEudmFsdWUgaXMgIkFCQyIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3RleHRh
cmVhLW1heGxlbmd0aC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS1tYXhs
ZW5ndGguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzU4NWYyCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS1tYXhsZW5n
dGguaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYv
L0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBo
cmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXh0YXJlYS1tYXhsZW5ndGguanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGRmMzhiMDYuLmZmOWZlMzEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjkgQEAKKzIwMDktMDktMTcgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gU3Vw
cG9ydCBmb3IgbWF4TGVuZ3RoIG9mIDx0ZXh0YXJlYT4KKyAgICAgICAgLSBNb3ZlIG51bUdyYXBo
ZW1lQ2x1c3RlcnMoKSBhbmQgbnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycygpIGZyb20g
SW5wdXRFbGVtZW50IHRvIFN0cmluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI5MjkyCisKKyAgICAgICAgVGVzdDogZmFzdC9mb3Jtcy90ZXh0YXJl
YS1tYXhsZW5ndGguaHRtbAorCisgICAgICAgICogZG9tL0lucHV0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OnNhbml0aXplVXNlcklucHV0VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dCk6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVk
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6c2FuaXRpemVV
c2VySW5wdXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50Ojpt
YXhMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6c2V0TWF4
TGVuZ3RoKToKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaDoKKyAgICAgICAg
KiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaWRsOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQv
UGxhdGZvcm1TdHJpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHJpbmc6Om51bUdyYXBoZW1lQ2x1c3RlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6U3RyaW5nOjpudW1DaGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0ZXJzKToKKwogMjAw
OS0wOS0xOCAgU3RldmUgQmxvY2sgIDxzdGV2ZWJsb2NrQGdvb2dsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vSW5w
dXRFbGVtZW50LmNwcCBiL1dlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5jcHAKaW5kZXggOTc3OTNl
Mi4uODc1ZDlmMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAorKysg
Yi9XZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVk
ZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlRleHRCcmVh
a0l0ZXJhdG9yLmgiCiAKICNpZiBFTkFCTEUoV01MKQogI2luY2x1ZGUgIldNTElucHV0RWxlbWVu
dC5oIgpAQCAtMTU5LDIzICsxNTgsNiBAQCB2b2lkIElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9t
UmVuZGVyZXIoSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgSW5wdXRFbGVtZW50KiBpbgogICAgIG5v
dGlmeUZvcm1TdGF0ZUNoYW5nZWQoZWxlbWVudCk7CiB9CiAKLXN0YXRpYyBpbnQgbnVtQ2hhcmFj
dGVyc0luR3JhcGhlbWVDbHVzdGVycyhTdHJpbmdJbXBsKiBzLCBpbnQgbnVtR3JhcGhlbWVDbHVz
dGVycykKLXsKLSAgICBpZiAoIXMpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgVGV4dEJyZWFr
SXRlcmF0b3IqIGl0ID0gY2hhcmFjdGVyQnJlYWtJdGVyYXRvcihzLT5jaGFyYWN0ZXJzKCksIHMt
Pmxlbmd0aCgpKTsKLSAgICBpZiAoIWl0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtR3JhcGhlbWVDbHVzdGVyczsgKytpKSB7Ci0gICAgICAgIGlmICh0
ZXh0QnJlYWtOZXh0KGl0KSA9PSBUZXh0QnJlYWtEb25lKQotICAgICAgICAgICAgcmV0dXJuIHMt
Pmxlbmd0aCgpOwotICAgIH0KLQotICAgIHJldHVybiB0ZXh0QnJlYWtDdXJyZW50KGl0KTsKLX0K
LQogU3RyaW5nIElucHV0RWxlbWVudDo6c2FuaXRpemVWYWx1ZShjb25zdCBJbnB1dEVsZW1lbnQq
IGlucHV0RWxlbWVudCwgY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKQogewogICAgIHJldHVy
biBJbnB1dEVsZW1lbnQ6OnNhbml0aXplVXNlcklucHV0VmFsdWUoaW5wdXRFbGVtZW50LCBwcm9w
b3NlZFZhbHVlLCBzX21heGltdW1MZW5ndGgpOwpAQCAtMTkxLDM2ICsxNzMsMTUgQEAgU3RyaW5n
IElucHV0RWxlbWVudDo6c2FuaXRpemVVc2VySW5wdXRWYWx1ZShjb25zdCBJbnB1dEVsZW1lbnQq
IGlucHV0RWxlbWVudCwgY28KICAgICBzdHJpbmcucmVwbGFjZSgnXHInLCAnICcpOwogICAgIHN0
cmluZy5yZXBsYWNlKCdcbicsICcgJyk7CiAKLSAgICBTdHJpbmdJbXBsKiBzID0gc3RyaW5nLmlt
cGwoKTsKLSAgICBpbnQgbmV3TGVuZ3RoID0gbnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVy
cyhzLCBtYXhMZW5ndGgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmV3TGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgY29uc3QgVUNoYXImIGN1cnJlbnQgPSAoKnMpW2ldOworICAgIHVuc2lnbmVk
IG5ld0xlbmd0aCA9IHN0cmluZy5udW1DaGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0ZXJzKG1heExl
bmd0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5ld0xlbmd0aDsgKytpKSB7Cisg
ICAgICAgIGNvbnN0IFVDaGFyIGN1cnJlbnQgPSBzdHJpbmdbaV07CiAgICAgICAgIGlmIChjdXJy
ZW50IDwgJyAnICYmIGN1cnJlbnQgIT0gJ1x0JykgewogICAgICAgICAgICAgbmV3TGVuZ3RoID0g
aTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQotCi0gICAgaWYgKG5ld0xl
bmd0aCA8IHN0YXRpY19jYXN0PGludD4oc3RyaW5nLmxlbmd0aCgpKSkKLSAgICAgICAgcmV0dXJu
IHN0cmluZy5sZWZ0KG5ld0xlbmd0aCk7Ci0KLSAgICByZXR1cm4gc3RyaW5nOwotfQotCi1zdGF0
aWMgaW50IG51bUdyYXBoZW1lQ2x1c3RlcnMoU3RyaW5nSW1wbCogcykKLXsKLSAgICBpZiAoIXMp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ID0gY2hhcmFj
dGVyQnJlYWtJdGVyYXRvcihzLT5jaGFyYWN0ZXJzKCksIHMtPmxlbmd0aCgpKTsKLSAgICBpZiAo
IWl0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGludCBudW0gPSAwOwotICAgIHdoaWxlICh0
ZXh0QnJlYWtOZXh0KGl0KSAhPSBUZXh0QnJlYWtEb25lKQotICAgICAgICArK251bTsKLQotICAg
IHJldHVybiBudW07CisgICAgcmV0dXJuIHN0cmluZy5sZWZ0KG5ld0xlbmd0aCk7CiB9CiAKIHZv
aWQgSW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChJbnB1dEVsZW1l
bnREYXRhJiBkYXRhLCBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgRWxlbWVudCogZWxlbWVu
dCwgRXZlbnQqIGV2ZW50KQpAQCAtMjMxLDE1ICsxOTIsMTYgQEAgdm9pZCBJbnB1dEVsZW1lbnQ6
OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KElucHV0RWxlbWVudERhdGEmIGRhdGEsIElu
cHV0RWwKICAgICAvLyBXZSB1c2UgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0KCkg
aW5zdGVhZCBvZiBJbnB1dEVsZW1lbnQ6OnZhbHVlKCkKICAgICAvLyBiZWNhdXNlIHRoZXkgY2Fu
IGJlIG1pc21hdGNoZWQgYnkgc2FuaXRpemVWYWx1ZSgpIGluCiAgICAgLy8gUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpzdWJ0cmVlSGFzQ2hhbmdlZCgpIGluIHNvbWUgY2FzZXMuCi0gICAg
aW50IG9sZExlbmd0aCA9IG51bUdyYXBoZW1lQ2x1c3RlcnModG9SZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUoZWxlbWVudC0+cmVuZGVyZXIoKSktPnRleHQoKS5pbXBsKCkpOworICAgIHVuc2ln
bmVkIG9sZExlbmd0aCA9IHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKGVsZW1lbnQtPnJl
bmRlcmVyKCkpLT50ZXh0KCkubnVtR3JhcGhlbWVDbHVzdGVycygpOwogCiAgICAgLy8gc2VsZWN0
aW9uKCkgbWF5IGJlIGEgcHJlLWVkaXQgdGV4dC4KLSAgICBpbnQgc2VsZWN0aW9uTGVuZ3RoID0g
bnVtR3JhcGhlbWVDbHVzdGVycyhwbGFpblRleHQoZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUo
KS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpLmlt
cGwoKSk7CisgICAgdW5zaWduZWQgc2VsZWN0aW9uTGVuZ3RoID0gcGxhaW5UZXh0KGVsZW1lbnQt
PmRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpKS5udW1HcmFwaGVtZUNsdXN0ZXJzKCk7CiAgICAgQVNTRVJUKG9sZExl
bmd0aCA+PSBzZWxlY3Rpb25MZW5ndGgpOwogCiAgICAgLy8gU2VsZWN0ZWQgY2hhcmFjdGVycyB3
aWxsIGJlIHJlbW92ZWQgYnkgdGhlIG5leHQgdGV4dCBldmVudC4KLSAgICBpbnQgYmFzZUxlbmd0
aCA9IG9sZExlbmd0aCAtIHNlbGVjdGlvbkxlbmd0aDsKLSAgICBpbnQgYXBwZW5kYWJsZUxlbmd0
aCA9IGRhdGEubWF4TGVuZ3RoKCkgLSBiYXNlTGVuZ3RoOworICAgIHVuc2lnbmVkIGJhc2VMZW5n
dGggPSBvbGRMZW5ndGggLSBzZWxlY3Rpb25MZW5ndGg7CisgICAgdW5zaWduZWQgbWF4TGVuZ3Ro
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRhdGEubWF4TGVuZ3RoKCkpOyAvLyBtYXhMZW5ndGgo
KSBjYW4gbmV2ZXIgYmUgbmVnYXRpdmUuCisgICAgdW5zaWduZWQgYXBwZW5kYWJsZUxlbmd0aCA9
IG1heExlbmd0aCA+IGJhc2VMZW5ndGggPyBtYXhMZW5ndGggLSBiYXNlTGVuZ3RoIDogMDsKIAog
ICAgIC8vIFRydW5jYXRlIHRoZSBpbnNlcnRlZCB0ZXh0IHRvIGF2b2lkIHZpb2xhdGluZyB0aGUg
bWF4TGVuZ3RoIGFuZCBvdGhlciBjb25zdHJhaW50cy4KICAgICBCZWZvcmVUZXh0SW5zZXJ0ZWRF
dmVudCogdGV4dEV2ZW50ID0gc3RhdGljX2Nhc3Q8QmVmb3JlVGV4dEluc2VydGVkRXZlbnQqPihl
dmVudCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAg
Yi9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKaW5kZXggZDNmYzg5Ny4uM2Nm
NDg1MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCisr
KyBiL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcApAQCAtMjYsNiArMjYsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIK
IAorI2luY2x1ZGUgIkJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmgiCiAjaW5jbHVkZSAiQ2hyb21l
Q2xpZW50LmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCkBAIC0zNSwxMiArMzYsMTQgQEAKICNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIklucHV0
RWxlbWVudC5oIgogI2luY2x1ZGUgIk1hcHBlZEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9s
TXVsdGlMaW5lLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUg
IlRleHQuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlU2Vs
ZWN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC0yNzAsMTAgKzI3
MywzNCBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQqIGV2ZW50KQogewogICAgIGlmIChyZW5kZXJlcigpICYmIChldmVudC0+aXNNb3VzZUV2ZW50
KCkgfHwgZXZlbnQtPmlzRHJhZ0V2ZW50KCkgfHwgZXZlbnQtPmlzV2hlZWxFdmVudCgpIHx8IGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmJsdXJFdmVudCkpCiAgICAgICAgIHRvUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmUocmVuZGVyZXIoKSktPmZvcndhcmRFdmVudChldmVudCk7Cisg
ICAgZWxzZSBpZiAocmVuZGVyZXIoKSAmJiBldmVudC0+aXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dCgpKQorICAgICAgICBoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChzdGF0aWNfY2FzdDxC
ZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCo+KGV2ZW50KSk7CiAKICAgICBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50V2l0aFN0YXRlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKIH0KIAordm9pZCBI
VE1MVGV4dEFyZWFFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChCZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudCogZXZlbnQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGV2ZW50KTsKKyAg
ICBBU1NFUlQocmVuZGVyZXIoKSk7CisgICAgYm9vbCBvazsKKyAgICB1bnNpZ25lZCBtYXhMZW5n
dGggPSBnZXRBdHRyaWJ1dGUobWF4bGVuZ3RoQXR0cikuc3RyaW5nKCkudG9VSW50KCZvayk7Cisg
ICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgY3VycmVudExlbmd0
aCA9IHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnRleHQoKS5udW1HcmFwaGVtZUNs
dXN0ZXJzKCk7CisgICAgdW5zaWduZWQgc2VsZWN0aW9uTGVuZ3RoID0gcGxhaW5UZXh0KGRvY3Vt
ZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpLmdldCgpKS5udW1HcmFwaGVtZUNsdXN0ZXJzKCk7CisgICAgQVNTRVJUKGN1cnJlbnRMZW5n
dGggPj0gc2VsZWN0aW9uTGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBiYXNlTGVuZ3RoID0gY3VycmVu
dExlbmd0aCAtIHNlbGVjdGlvbkxlbmd0aDsKKyAgICB1bnNpZ25lZCBhcHBlbmRhYmxlTGVuZ3Ro
ID0gbWF4TGVuZ3RoID4gYmFzZUxlbmd0aCA/IG1heExlbmd0aCAtIGJhc2VMZW5ndGggOiAwOwor
ICAgIGV2ZW50LT5zZXRUZXh0KHNhbml0aXplVXNlcklucHV0VmFsdWUoZXZlbnQtPnRleHQoKSwg
YXBwZW5kYWJsZUxlbmd0aCkpOworfQorCitTdHJpbmcgSFRNTFRleHRBcmVhRWxlbWVudDo6c2Fu
aXRpemVVc2VySW5wdXRWYWx1ZShjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUsIHVuc2lnbmVk
IG1heExlbmd0aCkKK3sKKyAgICByZXR1cm4gcHJvcG9zZWRWYWx1ZS5sZWZ0KHByb3Bvc2VkVmFs
dWUubnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycyhtYXhMZW5ndGgpKTsKK30KKwogdm9p
ZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpyZW5kZXJlcldpbGxCZURlc3Ryb3llZCgpCiB7CiAgICAg
dXBkYXRlVmFsdWUoKTsKQEAgLTM3NCw2ICs0MDEsMTYgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVt
ZW50OjpzZXREZWZhdWx0VmFsdWUoY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUpCiAgICAgc2V0
VmFsdWUodmFsdWUpOwogfQogCit1bnNpZ25lZCBIVE1MVGV4dEFyZWFFbGVtZW50OjptYXhMZW5n
dGgoKSBjb25zdAoreworICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobWF4bGVuZ3RoQXR0cikuc3Ry
aW5nKCkudG9VSW50KCk7Cit9CisKK3ZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6c2V0TWF4TGVu
Z3RoKHVuc2lnbmVkIG5ld1ZhbHVlKQoreworICAgIHNldEF0dHJpYnV0ZShtYXhsZW5ndGhBdHRy
LCBTdHJpbmc6Om51bWJlcihuZXdWYWx1ZSkpOworfQorCiB2b2lkIEhUTUxUZXh0QXJlYUVsZW1l
bnQ6OmFjY2Vzc0tleUFjdGlvbihib29sKQogewogICAgIGZvY3VzKCk7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxUZXh0
QXJlYUVsZW1lbnQuaAppbmRleCAxZjVjYjkxLi5mYmY1MTlkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFy
ZWFFbGVtZW50LmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDsKIGNsYXNzIFZpc2libGVTZWxlY3Rpb247CiAK
IGNsYXNzIEhUTUxUZXh0QXJlYUVsZW1lbnQgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxlbWVu
dFdpdGhTdGF0ZSB7CkBAIC03OCw2ICs3OSw4IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgZGVmYXVs
dFZhbHVlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXREZWZhdWx0VmFsdWUoY29uc3QgU3RyaW5nJik7
CiAgICAgaW50IHRleHRMZW5ndGgoKSBjb25zdCB7IHJldHVybiB2YWx1ZSgpLmxlbmd0aCgpOyB9
CisgICAgdW5zaWduZWQgbWF4TGVuZ3RoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRNYXhMZW5ndGgo
dW5zaWduZWQpOwogICAgIAogICAgIHZvaWQgcmVuZGVyZXJXaWxsQmVEZXN0cm95ZWQoKTsKICAg
ICAKQEAgLTk5LDYgKzEwMiw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZW51bSBXcmFwTWV0
aG9kIHsgTm9XcmFwLCBTb2Z0V3JhcCwgSGFyZFdyYXAgfTsKIAorICAgIHZvaWQgaGFuZGxlQmVm
b3JlVGV4dEluc2VydGVkRXZlbnQoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQqKSBjb25zdDsKKyAg
ICBzdGF0aWMgU3RyaW5nIHNhbml0aXplVXNlcklucHV0VmFsdWUoY29uc3QgU3RyaW5nJiwgdW5z
aWduZWQgbWF4TGVuZ3RoKTsKICAgICB2b2lkIHVwZGF0ZVZhbHVlKCkgY29uc3Q7CiAgICAgdm9p
ZCB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoYm9vbCBwbGFjZWhvbGRlclZhbHVlQ2hhbmdl
ZCk7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9jdXNFdmVudCgpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaWRsIGIvV2ViQ29yZS9odG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuaWRsCmluZGV4IDZkMjdmNTQuLjg0NTgzZjUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmlkbAorKysgYi9XZWJDb3JlL2h0bWwvSFRN
TFRleHRBcmVhRWxlbWVudC5pZGwKQEAgLTM0LDYgKzM0LDcgQEAgbW9kdWxlIGh0bWwgewogICAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGUgIGxvbmcgICAgICAgICAgICAgICAgIGNvbHM7CiAgICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZSAgYm9vbGVhbiAgICAgICAgICAgICAgZGlzYWJsZWQ7CiAg
ICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSAgYm9vbGVhbiAgICAgICAgICAgICAgYXV0b2ZvY3Vz
OworICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgIHVuc2lnbmVkIGxvbmcgICAgICAgIG1heExl
bmd0aDsKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlICBbQ29udmVydE51bGxUb051bGxTdHJp
bmddIERPTVN0cmluZyAgICAgICAgICAgIG5hbWU7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0
ZSAgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nLCBSZWZsZWN0XSBET01TdHJpbmcgICBwbGFjZWhv
bGRlcjsKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlICBib29sZWFuICAgICAgICAgICAgICBy
ZWFkT25seTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmlu
Zy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmgKaW5kZXggMjU4YjI4
ZC4uYjliNDA3OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3Ry
aW5nLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmgKQEAgLTI1
NCw2ICsyNTQsMTQgQEAgcHVibGljOgogICAgIC8vIERldGVybWluZXMgdGhlIHdyaXRpbmcgZGly
ZWN0aW9uIHVzaW5nIHRoZSBVbmljb2RlIEJpZGkgQWxnb3JpdGhtIHJ1bGVzIFAyIGFuZCBQMy4K
ICAgICBXVEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBkZWZhdWx0V3JpdGluZ0RpcmVjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+ZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24oKSA6
IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQ7IH0KIAorICAgIC8vIENvdW50cyB0aGUgbnVtYmVy
IG9mIGdyYXBoZW1lIGNsdXN0ZXJzLiBBIHN1cnJvZ2F0ZSBwYWlyIG9yIGEgc2VxdWVuY2UKKyAg
ICAvLyBvZiBhIG5vbi1jb21iaW5pbmcgY2hhcmFjdGVyIGFuZCBmb2xsb3dpbmcgY29tYmluaW5n
IGNoYXJhY3RlcnMgaXMKKyAgICAvLyBjb3VudGVkIGFzIDEgZ3JhcGhlbWUgY2x1c3Rlci4KKyAg
ICB1bnNpZ25lZCBudW1HcmFwaGVtZUNsdXN0ZXJzKCkgY29uc3Q7CisgICAgLy8gUmV0dXJucyB0
aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd2hpY2ggd2lsbCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwg
dG8KKyAgICAvLyB0aGUgc3BlY2lmaWVkIGdyYXBoZW1lIGNsdXN0ZXIgbGVuZ3RoLgorICAgIHVu
c2lnbmVkIG51bUNoYXJhY3RlcnNJbkdyYXBoZW1lQ2x1c3RlcnModW5zaWduZWQpIGNvbnN0Owor
CiBwcml2YXRlOgogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBtX2ltcGw7CiB9OwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvU3RyaW5nLmNwcAppbmRleCAyNzMwOTM5Li45MjFhOTliIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvU3RyaW5nLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3Ry
aW5nLmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRl
ICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJTdHJpbmdCdWZmZXIuaCIKKyNpbmNsdWRl
ICJUZXh0QnJlYWtJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1
ZGUgPHd0Zi9kdG9hLmg+CiAjaW5jbHVkZSA8bGltaXRzPgpAQCAtOTIxLDYgKzkyMiwzMSBAQCBQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdXRmOEJ1ZmZlcihjb25zdCBTdHJpbmcmIHN0cmluZykK
ICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjphZG9wdFZlY3RvcihidWZmZXIpOwogfQogCit1bnNp
Z25lZCBTdHJpbmc6Om51bUdyYXBoZW1lQ2x1c3RlcnMoKSBjb25zdAoreworICAgIFRleHRCcmVh
a0l0ZXJhdG9yKiBpdCA9IGNoYXJhY3RlckJyZWFrSXRlcmF0b3IoY2hhcmFjdGVycygpLCBsZW5n
dGgoKSk7CisgICAgaWYgKCFpdCkKKyAgICAgICAgcmV0dXJuIGxlbmd0aCgpOworCisgICAgdW5z
aWduZWQgbnVtID0gMDsKKyAgICB3aGlsZSAodGV4dEJyZWFrTmV4dChpdCkgIT0gVGV4dEJyZWFr
RG9uZSkKKyAgICAgICAgKytudW07CisgICAgcmV0dXJuIG51bTsKK30KKwordW5zaWduZWQgU3Ry
aW5nOjpudW1DaGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0ZXJzKHVuc2lnbmVkIG51bUdyYXBoZW1l
Q2x1c3RlcnMpIGNvbnN0Cit7CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ID0gY2hhcmFjdGVy
QnJlYWtJdGVyYXRvcihjaGFyYWN0ZXJzKCksIGxlbmd0aCgpKTsKKyAgICBpZiAoIWl0KQorICAg
ICAgICByZXR1cm4gbGVuZ3RoKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
R3JhcGhlbWVDbHVzdGVyczsgKytpKSB7CisgICAgICAgIGlmICh0ZXh0QnJlYWtOZXh0KGl0KSA9
PSBUZXh0QnJlYWtEb25lKQorICAgICAgICAgICAgcmV0dXJuIGxlbmd0aCgpOworICAgIH0KKyAg
ICByZXR1cm4gdGV4dEJyZWFrQ3VycmVudChpdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2lmbmRlZiBOREVCVUcKLS0gCjEuNi4zLjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39807</attachid>
            <date>2009-09-18 17:53:38 -0700</date>
            <delta_ts>2009-09-21 09:23:00 -0700</delta_ts>
            <desc>Proposed patch (rev.5)</desc>
            <filename>0001-Proposed-patch.patch</filename>
            <type>text/plain</type>
            <size>20067</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">RnJvbSA4NzNmYTk3ZTRiMDk3MzVjNDc4YjA0ZWUxNjhlYmY0M2FlZDNmNTdlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLZW50IFRhbXVyYSA8dGtlbnRAY2hyb21pdW0ub3JnPgpEYXRl
OiBTYXQsIDE5IFNlcCAyMDA5IDAyOjUxOjM3ICswOTAwClN1YmplY3Q6IFtQQVRDSF0gUHJvcG9z
ZWQgcGF0Y2gKCi0tLQogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDEyICsrCiAuLi4vZmFzdC9mb3Jtcy9yZXNvdXJjZXMvdGV4dGFyZWEtbWF4
bGVuZ3RoLmpzICAgICB8ICAxMjAgKysrKysrKysrKysrKysrKysrKysKIC4uLi9mYXN0L2Zvcm1z
L3RleHRhcmVhLW1heGxlbmd0aC1leHBlY3RlZC50eHQgICAgIHwgICAzMSArKysrKwogTGF5b3V0
VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS1tYXhsZW5ndGguaHRtbCAgICAgfCAgIDEzICsrCiBX
ZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjYg
KysrKwogV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcCAgICAgICAgICAgICAgICAgICAgICAg
fCAgIDU2ICsrLS0tLS0tLS0KIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcCAg
ICAgICAgICAgICAgIHwgICAzNyArKysrKysKIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVt
ZW50LmggICAgICAgICAgICAgICAgIHwgICAgNSArCiBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVh
RWxlbWVudC5pZGwgICAgICAgICAgICAgICB8ICAgIDEgKwogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1BsYXRmb3JtU3RyaW5nLmggICAgICAgICAgICAgfCAgICA4ICsrCiBXZWJDb3JlL3BsYXRmb3Jt
L3RleHQvU3RyaW5nLmNwcCAgICAgICAgICAgICAgICAgICB8ICAgMjYgKysrKwogMTEgZmlsZXMg
Y2hhbmdlZCwgMjg4IGluc2VydGlvbnMoKyksIDQ3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg
MTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvcmVzb3VyY2VzL3RleHRhcmVhLW1heGxlbmd0
aC5qcwogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvdGV4dGFyZWEt
bWF4bGVuZ3RoLWV4cGVjdGVkLnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zh
c3QvZm9ybXMvdGV4dGFyZWEtbWF4bGVuZ3RoLmh0bWwKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMzAwODYzMy4uMjE0MGRm
NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDA5LTA5LTE3ICBLZW50IFRhbXVyYSAgPHRrZW50
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUZXN0cyBmb3IgbWF4TGVuZ3RoIGF0dHJpYnV0ZSBvZiA8dGV4dGFyZWE+CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTI5MgorCisgICAg
ICAgICogZmFzdC9mb3Jtcy9yZXNvdXJjZXMvdGV4dGFyZWEtbWF4bGVuZ3RoLmpzOiBBZGRlZC4K
KyAgICAgICAgKGNyZWF0ZUZvY3VzZWRUZXh0QXJlYVdpdGhNYXhMZW5ndGgzKToKKyAgICAgICAg
KiBmYXN0L2Zvcm1zL3RleHRhcmVhLW1heGxlbmd0aC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZm9ybXMvdGV4dGFyZWEtbWF4bGVuZ3RoLmh0bWw6IEFkZGVkLgorCiAyMDA5
LTA5LTE4ICBTdGV2ZSBCbG9jayAgPHN0ZXZlYmxvY2tAZ29vZ2xlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2Zvcm1zL3Jlc291cmNlcy90ZXh0YXJlYS1tYXhsZW5ndGguanMgYi9MYXlvdXRUZXN0cy9mYXN0
L2Zvcm1zL3Jlc291cmNlcy90ZXh0YXJlYS1tYXhsZW5ndGguanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uN2NmMGY1ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZm9ybXMvcmVzb3VyY2VzL3RleHRhcmVhLW1heGxlbmd0aC5qcwpAQCAtMCwwICsxLDEy
MCBAQAorZGVzY3JpcHRpb24oJ1Rlc3RzIGZvciBIVE1MVGV4dEFyZWFFbGVtZW50Lm1heExlbmd0
aCBiZWhhdmlvcnMuJyk7CisKK3ZhciB0ZXh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J3RleHRhcmVhJyk7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRleHRBcmVhKTsKKworLy8g
Tm8gbWF4bGVuZ3RoIGF0dHJpYnV0ZQorc2hvdWxkQmUoJ3RleHRBcmVhLm1heExlbmd0aCcsICcw
Jyk7CisKKy8vIEludmFsaWQgbWF4bGVuZ3RoIGF0dHJpYnV0ZXMKK3RleHRBcmVhLnNldEF0dHJp
YnV0ZSgnbWF4bGVuZ3RoJywgJy0zJyk7CitzaG91bGRCZSgndGV4dEFyZWEubWF4TGVuZ3RoJywg
JzAnKTsKK3RleHRBcmVhLnNldEF0dHJpYnV0ZSgnbWF4bGVuZ3RoJywgJ3h5eicpOworc2hvdWxk
QmUoJ3RleHRBcmVhLm1heExlbmd0aCcsICcwJyk7CisKKy8vIFZhbGlkIG1heGxlbmd0aCBhdHRy
aWJ1dGVzCit0ZXh0QXJlYS5zZXRBdHRyaWJ1dGUoJ21heGxlbmd0aCcsICcxJyk7CitzaG91bGRC
ZSgndGV4dEFyZWEubWF4TGVuZ3RoJywgJzEnKTsKK3RleHRBcmVhLnNldEF0dHJpYnV0ZSgnbWF4
bGVuZ3RoJywgJzI1NicpOworc2hvdWxkQmUoJ3RleHRBcmVhLm1heExlbmd0aCcsICcyNTYnKTsK
KworLy8gU2V0IHZhbHVlcyB0byAubWF4TGVuZ3RoCit0ZXh0QXJlYS5tYXhMZW5ndGggPSAxMzsK
K3Nob3VsZEJlKCd0ZXh0QXJlYS5nZXRBdHRyaWJ1dGUoIm1heGxlbmd0aCIpJywgJyIxMyInKTsK
KwordGV4dEFyZWEubWF4TGVuZ3RoID0gLTE7CitzaG91bGRCZSgndGV4dEFyZWEubWF4TGVuZ3Ro
JywgJzQyOTQ5NjcyOTUnKTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS5nZXRBdHRyaWJ1dGUoIm1heGxl
bmd0aCIpJywgJyI0Mjk0OTY3Mjk1IicpOworCisvLyBtYXhMZW5ndGggZG9lc24ndCB0cnVuY2F0
ZSB0aGUgZGVmYXVsdCB2YWx1ZS4KK3RleHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
dGV4dGFyZWEnKTsKK3RleHRBcmVhLnNldEF0dHJpYnV0ZSgnbWF4bGVuZ3RoJywgJzMnKTsKK3Rl
eHRBcmVhLmlubmVySFRNTCA9ICdhYmNkJzsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4
dEFyZWEpOworc2hvdWxkQmUoJ3RleHRBcmVhLnZhbHVlJywgJyJhYmNkIicpOworCisvLyBtYXhM
ZW5ndGggZG9lc24ndCB0cnVuY2F0ZSAudmFsdWUKK3RleHRBcmVhLm1heExlbmd0aCA9IDM7Cit0
ZXh0QXJlYS52YWx1ZSA9ICdhYmNkZSc7CitzaG91bGRCZSgndGV4dEFyZWEudmFsdWUnLCAnImFi
Y2RlIicpOworCisvLyBTZXQgdXAgZm9yIHVzZXItaW5wdXQgdGVzdHMKK2Z1bmN0aW9uIGNyZWF0
ZUZvY3VzZWRUZXh0QXJlYVdpdGhNYXhMZW5ndGgzKCkgeworICAgIGlmICh0ZXh0QXJlYSkKKyAg
ICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXh0QXJlYSk7CisgICAgdGV4dEFyZWEg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpOworICAgIHRleHRBcmVhLnNldEF0
dHJpYnV0ZSgnbWF4bGVuZ3RoJywgJzMnKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KHRleHRBcmVhKTsKKyAgICB0ZXh0QXJlYS5mb2N1cygpOworfQorCisvLyBJbnNlcnQgdGV4dCBv
ZiB3aGljaCBsZW5ndGggaXMgbWF4TGVuZ3RoLgorY3JlYXRlRm9jdXNlZFRleHRBcmVhV2l0aE1h
eExlbmd0aDMoKTsKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdh
YmMnKTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS52YWx1ZScsICciYWJjIicpOworCisvLyBUcnkgdG8g
YWRkIGNoYXJhY3RlcnMgdG8gbWF4TGVuZ3RoIGNoYXJhY3RlcnMuCitjcmVhdGVGb2N1c2VkVGV4
dEFyZWFXaXRoTWF4TGVuZ3RoMygpOwordGV4dEFyZWEudmFsdWUgPSAnYWJjJzsKK2RvY3VtZW50
LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdkZWYnKTsKK3Nob3VsZEJlKCd0ZXh0
QXJlYS52YWx1ZScsICciYWJjIicpOworCisvLyBSZXBsYWNlIHRleHQKK2NyZWF0ZUZvY3VzZWRU
ZXh0QXJlYVdpdGhNYXhMZW5ndGgzKCk7Cit0ZXh0QXJlYS52YWx1ZSA9ICdhYmMnOworZG9jdW1l
bnQuZXhlY0NvbW1hbmQoJ3NlbGVjdEFsbCcpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2Vy
dFRleHQnLCBmYWxzZSwgJ2RlZicpOworc2hvdWxkQmUoJ3RleHRBcmVhLnZhbHVlJywgJyJkZWYi
Jyk7CisKKy8vIEV4aXN0aW5nIHZhbHVlIGlzIGxvbmdlciB0aGFuIG1heExlbmd0aC4gIFdlIGNh
bid0IGFkZCB0ZXh0LgorY3JlYXRlRm9jdXNlZFRleHRBcmVhV2l0aE1heExlbmd0aDMoKTsKK3Rl
eHRBcmVhLnZhbHVlID0gJ2FiY2RlZic7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4
dCcsIGZhbHNlLCAnZ2hpJyk7CitzaG91bGRCZSgndGV4dEFyZWEudmFsdWUnLCAnImFiY2RlZiIn
KTsKKworLy8gV2UgY2FuIGRlbGV0ZSBhIGNoYXJhY3RlciBpbiB0aGUgbG9uZ2VyIHZhbHVlLgor
Y3JlYXRlRm9jdXNlZFRleHRBcmVhV2l0aE1heExlbmd0aDMoKTsKK3RleHRBcmVhLnZhbHVlID0g
J2FiY2RlZic7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnZGVsZXRlJyk7CitzaG91bGRCZSgndGV4
dEFyZWEudmFsdWUnLCAnImFiY2RlIicpOworCisvLyBBIGxpbmVicmVhayBpcyAxIGNoYXJhY3Rl
ci4KK2NyZWF0ZUZvY3VzZWRUZXh0QXJlYVdpdGhNYXhMZW5ndGgzKCk7Citkb2N1bWVudC5leGVj
Q29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQScpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQo
J2luc2VydExpbmVCcmVhaycpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBm
YWxzZSwgJ0InKTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS52YWx1ZScsICciQVxcbkIiJyk7CisKKy8v
IEFjY29yZGluZyB0byB0aGUgSFRNTDUgc3BlY2lmaWNhdGlvbiwgbWF4TGVuZ3RoIGlzIGNvZGUt
cG9pbnQgbGVuZ3RoLgorLy8gSG93ZXZlciBXZWJLaXQgaGFuZGxlcyBpdCBhcyBncmFwaGVtZSBs
ZW5ndGguCisKKy8vIGZhbmN5WCBzaG91bGQgYmUgdHJlYXRlZCBhcyAxIGdyYXBoZW1lLgordmFy
IGZhbmN5WCA9ICJ4XHUwMzA1XHUwMzMyIjsvLyArIFN0cmluZy5mcm9tQ2hhckNvZGUoMHgzMDUp
ICsgU3RyaW5nLmZyb21DaGFyQ29kZSgweDMzMik7CisvLyB1MTAwMDAgaXMgb25lIGNoYXJhY3Rl
ciBjb25zaXN0ZWQgb2YgYSBzdXJyb2dhdGUgcGFpci4KK3ZhciB1MTAwMDAgPSAiXHVkODAwXHVk
YzAwIjsKKworLy8gSW5zZXJ0cyA1IGNvZGUtcG9pbnRzIGluIFVURi0xNgorY3JlYXRlRm9jdXNl
ZFRleHRBcmVhV2l0aE1heExlbmd0aDMoKTsKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRU
ZXh0JywgZmFsc2UsICdBQicgKyBmYW5jeVgpOworc2hvdWxkQmUoJ3RleHRBcmVhLnZhbHVlJywg
JyJBQiIgKyBmYW5jeVgnKTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS52YWx1ZS5sZW5ndGgnLCAnNScp
OworCitjcmVhdGVGb2N1c2VkVGV4dEFyZWFXaXRoTWF4TGVuZ3RoMygpOwordGV4dEFyZWEudmFs
dWUgPSAnQUInICsgZmFuY3lYOwordGV4dEFyZWEuc2V0U2VsZWN0aW9uUmFuZ2UoMiwgNSk7ICAv
LyBTZWxlY3QgZmFuY3lYCitkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNl
LCAnQ0RFJyk7CitzaG91bGRCZSgndGV4dEFyZWEudmFsdWUnLCAnIkFCQyInKTsKKworLy8gSW5z
ZXJ0cyA0IGNvZGUtcG9pbnRzIGluIFVURi0xNgorY3JlYXRlRm9jdXNlZFRleHRBcmVhV2l0aE1h
eExlbmd0aDMoKTsKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdB
QicgKyB1MTAwMDApOworc2hvdWxkQmUoJ3RleHRBcmVhLnZhbHVlJywgJyJBQiIgKyB1MTAwMDAn
KTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS52YWx1ZS5sZW5ndGgnLCAnNCcpOworCitjcmVhdGVGb2N1
c2VkVGV4dEFyZWFXaXRoTWF4TGVuZ3RoMygpOwordGV4dEFyZWEudmFsdWUgPSAnQUInICsgdTEw
MDAwOwordGV4dEFyZWEuc2V0U2VsZWN0aW9uUmFuZ2UoMiwgNCk7ICAvLyBTZWxlY3QgdTEwMDAw
Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnQ0RFJyk7CitzaG91
bGRCZSgndGV4dEFyZWEudmFsdWUnLCAnIkFCQyInKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3RleHRhcmVhLW1h
eGxlbmd0aC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3RleHRhcmVhLW1h
eGxlbmd0aC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YmQxYWExNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvdGV4dGFy
ZWEtbWF4bGVuZ3RoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMxIEBACitUZXN0cyBmb3IgSFRN
TFRleHRBcmVhRWxlbWVudC5tYXhMZW5ndGggYmVoYXZpb3JzLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyB0ZXh0QXJlYS5tYXhMZW5ndGggaXMgMAorUEFTUyB0ZXh0QXJl
YS5tYXhMZW5ndGggaXMgMAorUEFTUyB0ZXh0QXJlYS5tYXhMZW5ndGggaXMgMAorUEFTUyB0ZXh0
QXJlYS5tYXhMZW5ndGggaXMgMQorUEFTUyB0ZXh0QXJlYS5tYXhMZW5ndGggaXMgMjU2CitQQVNT
IHRleHRBcmVhLmdldEF0dHJpYnV0ZSgibWF4bGVuZ3RoIikgaXMgIjEzIgorUEFTUyB0ZXh0QXJl
YS5tYXhMZW5ndGggaXMgNDI5NDk2NzI5NQorUEFTUyB0ZXh0QXJlYS5nZXRBdHRyaWJ1dGUoIm1h
eGxlbmd0aCIpIGlzICI0Mjk0OTY3Mjk1IgorUEFTUyB0ZXh0QXJlYS52YWx1ZSBpcyAiYWJjZCIK
K1BBU1MgdGV4dEFyZWEudmFsdWUgaXMgImFiY2RlIgorUEFTUyB0ZXh0QXJlYS52YWx1ZSBpcyAi
YWJjIgorUEFTUyB0ZXh0QXJlYS52YWx1ZSBpcyAiYWJjIgorUEFTUyB0ZXh0QXJlYS52YWx1ZSBp
cyAiZGVmIgorUEFTUyB0ZXh0QXJlYS52YWx1ZSBpcyAiYWJjZGVmIgorUEFTUyB0ZXh0QXJlYS52
YWx1ZSBpcyAiYWJjZGUiCitQQVNTIHRleHRBcmVhLnZhbHVlIGlzICJBXG5CIgorUEFTUyB0ZXh0
QXJlYS52YWx1ZSBpcyAiQUIiICsgZmFuY3lYCitQQVNTIHRleHRBcmVhLnZhbHVlLmxlbmd0aCBp
cyA1CitQQVNTIHRleHRBcmVhLnZhbHVlIGlzICJBQkMiCitQQVNTIHRleHRBcmVhLnZhbHVlIGlz
ICJBQiIgKyB1MTAwMDAKK1BBU1MgdGV4dEFyZWEudmFsdWUubGVuZ3RoIGlzIDQKK1BBU1MgdGV4
dEFyZWEudmFsdWUgaXMgIkFCQyIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3RleHRh
cmVhLW1heGxlbmd0aC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS1tYXhs
ZW5ndGguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzU4NWYyCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS1tYXhsZW5n
dGguaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYv
L0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBo
cmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy90ZXh0YXJlYS1tYXhsZW5ndGguanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGRmMzhiMDYuLmZmOWZlMzEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjkgQEAKKzIwMDktMDktMTcgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gU3Vw
cG9ydCBmb3IgbWF4TGVuZ3RoIG9mIDx0ZXh0YXJlYT4KKyAgICAgICAgLSBNb3ZlIG51bUdyYXBo
ZW1lQ2x1c3RlcnMoKSBhbmQgbnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycygpIGZyb20g
SW5wdXRFbGVtZW50IHRvIFN0cmluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI5MjkyCisKKyAgICAgICAgVGVzdDogZmFzdC9mb3Jtcy90ZXh0YXJl
YS1tYXhsZW5ndGguaHRtbAorCisgICAgICAgICogZG9tL0lucHV0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OnNhbml0aXplVXNlcklucHV0VmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dCk6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVk
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6c2FuaXRpemVV
c2VySW5wdXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50Ojpt
YXhMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6c2V0TWF4
TGVuZ3RoKToKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaDoKKyAgICAgICAg
KiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaWRsOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQv
UGxhdGZvcm1TdHJpbmcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHJpbmc6Om51bUdyYXBoZW1lQ2x1c3RlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6U3RyaW5nOjpudW1DaGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0ZXJzKToKKwogMjAw
OS0wOS0xOCAgU3RldmUgQmxvY2sgIDxzdGV2ZWJsb2NrQGdvb2dsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vSW5w
dXRFbGVtZW50LmNwcCBiL1dlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5jcHAKaW5kZXggOTc3OTNl
Mi4uODc1ZDlmMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcAorKysg
Yi9XZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVk
ZSAiUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgiCiAjaW5jbHVkZSAiU2VsZWN0aW9uQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlRleHRCcmVh
a0l0ZXJhdG9yLmgiCiAKICNpZiBFTkFCTEUoV01MKQogI2luY2x1ZGUgIldNTElucHV0RWxlbWVu
dC5oIgpAQCAtMTU5LDIzICsxNTgsNiBAQCB2b2lkIElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9t
UmVuZGVyZXIoSW5wdXRFbGVtZW50RGF0YSYgZGF0YSwgSW5wdXRFbGVtZW50KiBpbgogICAgIG5v
dGlmeUZvcm1TdGF0ZUNoYW5nZWQoZWxlbWVudCk7CiB9CiAKLXN0YXRpYyBpbnQgbnVtQ2hhcmFj
dGVyc0luR3JhcGhlbWVDbHVzdGVycyhTdHJpbmdJbXBsKiBzLCBpbnQgbnVtR3JhcGhlbWVDbHVz
dGVycykKLXsKLSAgICBpZiAoIXMpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgVGV4dEJyZWFr
SXRlcmF0b3IqIGl0ID0gY2hhcmFjdGVyQnJlYWtJdGVyYXRvcihzLT5jaGFyYWN0ZXJzKCksIHMt
Pmxlbmd0aCgpKTsKLSAgICBpZiAoIWl0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtR3JhcGhlbWVDbHVzdGVyczsgKytpKSB7Ci0gICAgICAgIGlmICh0
ZXh0QnJlYWtOZXh0KGl0KSA9PSBUZXh0QnJlYWtEb25lKQotICAgICAgICAgICAgcmV0dXJuIHMt
Pmxlbmd0aCgpOwotICAgIH0KLQotICAgIHJldHVybiB0ZXh0QnJlYWtDdXJyZW50KGl0KTsKLX0K
LQogU3RyaW5nIElucHV0RWxlbWVudDo6c2FuaXRpemVWYWx1ZShjb25zdCBJbnB1dEVsZW1lbnQq
IGlucHV0RWxlbWVudCwgY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlKQogewogICAgIHJldHVy
biBJbnB1dEVsZW1lbnQ6OnNhbml0aXplVXNlcklucHV0VmFsdWUoaW5wdXRFbGVtZW50LCBwcm9w
b3NlZFZhbHVlLCBzX21heGltdW1MZW5ndGgpOwpAQCAtMTkxLDM2ICsxNzMsMTUgQEAgU3RyaW5n
IElucHV0RWxlbWVudDo6c2FuaXRpemVVc2VySW5wdXRWYWx1ZShjb25zdCBJbnB1dEVsZW1lbnQq
IGlucHV0RWxlbWVudCwgY28KICAgICBzdHJpbmcucmVwbGFjZSgnXHInLCAnICcpOwogICAgIHN0
cmluZy5yZXBsYWNlKCdcbicsICcgJyk7CiAKLSAgICBTdHJpbmdJbXBsKiBzID0gc3RyaW5nLmlt
cGwoKTsKLSAgICBpbnQgbmV3TGVuZ3RoID0gbnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVy
cyhzLCBtYXhMZW5ndGgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmV3TGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgY29uc3QgVUNoYXImIGN1cnJlbnQgPSAoKnMpW2ldOworICAgIHVuc2lnbmVk
IG5ld0xlbmd0aCA9IHN0cmluZy5udW1DaGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0ZXJzKG1heExl
bmd0aCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5ld0xlbmd0aDsgKytpKSB7Cisg
ICAgICAgIGNvbnN0IFVDaGFyIGN1cnJlbnQgPSBzdHJpbmdbaV07CiAgICAgICAgIGlmIChjdXJy
ZW50IDwgJyAnICYmIGN1cnJlbnQgIT0gJ1x0JykgewogICAgICAgICAgICAgbmV3TGVuZ3RoID0g
aTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQotCi0gICAgaWYgKG5ld0xl
bmd0aCA8IHN0YXRpY19jYXN0PGludD4oc3RyaW5nLmxlbmd0aCgpKSkKLSAgICAgICAgcmV0dXJu
IHN0cmluZy5sZWZ0KG5ld0xlbmd0aCk7Ci0KLSAgICByZXR1cm4gc3RyaW5nOwotfQotCi1zdGF0
aWMgaW50IG51bUdyYXBoZW1lQ2x1c3RlcnMoU3RyaW5nSW1wbCogcykKLXsKLSAgICBpZiAoIXMp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ID0gY2hhcmFj
dGVyQnJlYWtJdGVyYXRvcihzLT5jaGFyYWN0ZXJzKCksIHMtPmxlbmd0aCgpKTsKLSAgICBpZiAo
IWl0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGludCBudW0gPSAwOwotICAgIHdoaWxlICh0
ZXh0QnJlYWtOZXh0KGl0KSAhPSBUZXh0QnJlYWtEb25lKQotICAgICAgICArK251bTsKLQotICAg
IHJldHVybiBudW07CisgICAgcmV0dXJuIHN0cmluZy5sZWZ0KG5ld0xlbmd0aCk7CiB9CiAKIHZv
aWQgSW5wdXRFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChJbnB1dEVsZW1l
bnREYXRhJiBkYXRhLCBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCwgRWxlbWVudCogZWxlbWVu
dCwgRXZlbnQqIGV2ZW50KQpAQCAtMjMxLDE1ICsxOTIsMTYgQEAgdm9pZCBJbnB1dEVsZW1lbnQ6
OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KElucHV0RWxlbWVudERhdGEmIGRhdGEsIElu
cHV0RWwKICAgICAvLyBXZSB1c2UgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjp0ZXh0KCkg
aW5zdGVhZCBvZiBJbnB1dEVsZW1lbnQ6OnZhbHVlKCkKICAgICAvLyBiZWNhdXNlIHRoZXkgY2Fu
IGJlIG1pc21hdGNoZWQgYnkgc2FuaXRpemVWYWx1ZSgpIGluCiAgICAgLy8gUmVuZGVyVGV4dENv
bnRyb2xTaW5nbGVMaW5lOjpzdWJ0cmVlSGFzQ2hhbmdlZCgpIGluIHNvbWUgY2FzZXMuCi0gICAg
aW50IG9sZExlbmd0aCA9IG51bUdyYXBoZW1lQ2x1c3RlcnModG9SZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUoZWxlbWVudC0+cmVuZGVyZXIoKSktPnRleHQoKS5pbXBsKCkpOworICAgIHVuc2ln
bmVkIG9sZExlbmd0aCA9IHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lKGVsZW1lbnQtPnJl
bmRlcmVyKCkpLT50ZXh0KCkubnVtR3JhcGhlbWVDbHVzdGVycygpOwogCiAgICAgLy8gc2VsZWN0
aW9uKCkgbWF5IGJlIGEgcHJlLWVkaXQgdGV4dC4KLSAgICBpbnQgc2VsZWN0aW9uTGVuZ3RoID0g
bnVtR3JhcGhlbWVDbHVzdGVycyhwbGFpblRleHQoZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUo
KS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpLmlt
cGwoKSk7CisgICAgdW5zaWduZWQgc2VsZWN0aW9uTGVuZ3RoID0gcGxhaW5UZXh0KGVsZW1lbnQt
PmRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpKS5udW1HcmFwaGVtZUNsdXN0ZXJzKCk7CiAgICAgQVNTRVJUKG9sZExl
bmd0aCA+PSBzZWxlY3Rpb25MZW5ndGgpOwogCiAgICAgLy8gU2VsZWN0ZWQgY2hhcmFjdGVycyB3
aWxsIGJlIHJlbW92ZWQgYnkgdGhlIG5leHQgdGV4dCBldmVudC4KLSAgICBpbnQgYmFzZUxlbmd0
aCA9IG9sZExlbmd0aCAtIHNlbGVjdGlvbkxlbmd0aDsKLSAgICBpbnQgYXBwZW5kYWJsZUxlbmd0
aCA9IGRhdGEubWF4TGVuZ3RoKCkgLSBiYXNlTGVuZ3RoOworICAgIHVuc2lnbmVkIGJhc2VMZW5n
dGggPSBvbGRMZW5ndGggLSBzZWxlY3Rpb25MZW5ndGg7CisgICAgdW5zaWduZWQgbWF4TGVuZ3Ro
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGRhdGEubWF4TGVuZ3RoKCkpOyAvLyBtYXhMZW5ndGgo
KSBjYW4gbmV2ZXIgYmUgbmVnYXRpdmUuCisgICAgdW5zaWduZWQgYXBwZW5kYWJsZUxlbmd0aCA9
IG1heExlbmd0aCA+IGJhc2VMZW5ndGggPyBtYXhMZW5ndGggLSBiYXNlTGVuZ3RoIDogMDsKIAog
ICAgIC8vIFRydW5jYXRlIHRoZSBpbnNlcnRlZCB0ZXh0IHRvIGF2b2lkIHZpb2xhdGluZyB0aGUg
bWF4TGVuZ3RoIGFuZCBvdGhlciBjb25zdHJhaW50cy4KICAgICBCZWZvcmVUZXh0SW5zZXJ0ZWRF
dmVudCogdGV4dEV2ZW50ID0gc3RhdGljX2Nhc3Q8QmVmb3JlVGV4dEluc2VydGVkRXZlbnQqPihl
dmVudCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAg
Yi9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKaW5kZXggZDNmYzg5Ny4uM2Nm
NDg1MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCisr
KyBiL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcApAQCAtMjYsNiArMjYsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIK
IAorI2luY2x1ZGUgIkJlZm9yZVRleHRJbnNlcnRlZEV2ZW50LmgiCiAjaW5jbHVkZSAiQ2hyb21l
Q2xpZW50LmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCkBAIC0zNSwxMiArMzYsMTQgQEAKICNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIklucHV0
RWxlbWVudC5oIgogI2luY2x1ZGUgIk1hcHBlZEF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9s
TXVsdGlMaW5lLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUg
IlRleHQuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlU2Vs
ZWN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC0yNzAsMTAgKzI3
MywzNCBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZl
bnQqIGV2ZW50KQogewogICAgIGlmIChyZW5kZXJlcigpICYmIChldmVudC0+aXNNb3VzZUV2ZW50
KCkgfHwgZXZlbnQtPmlzRHJhZ0V2ZW50KCkgfHwgZXZlbnQtPmlzV2hlZWxFdmVudCgpIHx8IGV2
ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmJsdXJFdmVudCkpCiAgICAgICAgIHRvUmVuZGVy
VGV4dENvbnRyb2xNdWx0aUxpbmUocmVuZGVyZXIoKSktPmZvcndhcmRFdmVudChldmVudCk7Cisg
ICAgZWxzZSBpZiAocmVuZGVyZXIoKSAmJiBldmVudC0+aXNCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVu
dCgpKQorICAgICAgICBoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChzdGF0aWNfY2FzdDxC
ZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCo+KGV2ZW50KSk7CiAKICAgICBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50V2l0aFN0YXRlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50KTsKIH0KIAordm9pZCBI
VE1MVGV4dEFyZWFFbGVtZW50OjpoYW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChCZWZvcmVU
ZXh0SW5zZXJ0ZWRFdmVudCogZXZlbnQpIGNvbnN0Cit7CisgICAgQVNTRVJUKGV2ZW50KTsKKyAg
ICBBU1NFUlQocmVuZGVyZXIoKSk7CisgICAgYm9vbCBvazsKKyAgICB1bnNpZ25lZCBtYXhMZW5n
dGggPSBnZXRBdHRyaWJ1dGUobWF4bGVuZ3RoQXR0cikuc3RyaW5nKCkudG9VSW50KCZvayk7Cisg
ICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgY3VycmVudExlbmd0
aCA9IHRvUmVuZGVyVGV4dENvbnRyb2wocmVuZGVyZXIoKSktPnRleHQoKS5udW1HcmFwaGVtZUNs
dXN0ZXJzKCk7CisgICAgdW5zaWduZWQgc2VsZWN0aW9uTGVuZ3RoID0gcGxhaW5UZXh0KGRvY3Vt
ZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpLmdldCgpKS5udW1HcmFwaGVtZUNsdXN0ZXJzKCk7CisgICAgQVNTRVJUKGN1cnJlbnRMZW5n
dGggPj0gc2VsZWN0aW9uTGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBiYXNlTGVuZ3RoID0gY3VycmVu
dExlbmd0aCAtIHNlbGVjdGlvbkxlbmd0aDsKKyAgICB1bnNpZ25lZCBhcHBlbmRhYmxlTGVuZ3Ro
ID0gbWF4TGVuZ3RoID4gYmFzZUxlbmd0aCA/IG1heExlbmd0aCAtIGJhc2VMZW5ndGggOiAwOwor
ICAgIGV2ZW50LT5zZXRUZXh0KHNhbml0aXplVXNlcklucHV0VmFsdWUoZXZlbnQtPnRleHQoKSwg
YXBwZW5kYWJsZUxlbmd0aCkpOworfQorCitTdHJpbmcgSFRNTFRleHRBcmVhRWxlbWVudDo6c2Fu
aXRpemVVc2VySW5wdXRWYWx1ZShjb25zdCBTdHJpbmcmIHByb3Bvc2VkVmFsdWUsIHVuc2lnbmVk
IG1heExlbmd0aCkKK3sKKyAgICByZXR1cm4gcHJvcG9zZWRWYWx1ZS5sZWZ0KHByb3Bvc2VkVmFs
dWUubnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycyhtYXhMZW5ndGgpKTsKK30KKwogdm9p
ZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpyZW5kZXJlcldpbGxCZURlc3Ryb3llZCgpCiB7CiAgICAg
dXBkYXRlVmFsdWUoKTsKQEAgLTM3NCw2ICs0MDEsMTYgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVt
ZW50OjpzZXREZWZhdWx0VmFsdWUoY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUpCiAgICAgc2V0
VmFsdWUodmFsdWUpOwogfQogCit1bnNpZ25lZCBIVE1MVGV4dEFyZWFFbGVtZW50OjptYXhMZW5n
dGgoKSBjb25zdAoreworICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobWF4bGVuZ3RoQXR0cikuc3Ry
aW5nKCkudG9VSW50KCk7Cit9CisKK3ZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6c2V0TWF4TGVu
Z3RoKHVuc2lnbmVkIG5ld1ZhbHVlKQoreworICAgIHNldEF0dHJpYnV0ZShtYXhsZW5ndGhBdHRy
LCBTdHJpbmc6Om51bWJlcihuZXdWYWx1ZSkpOworfQorCiB2b2lkIEhUTUxUZXh0QXJlYUVsZW1l
bnQ6OmFjY2Vzc0tleUFjdGlvbihib29sKQogewogICAgIGZvY3VzKCk7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxUZXh0
QXJlYUVsZW1lbnQuaAppbmRleCAxZjVjYjkxLi5mYmY1MTlkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFy
ZWFFbGVtZW50LmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudDsKIGNsYXNzIFZpc2libGVTZWxlY3Rpb247CiAK
IGNsYXNzIEhUTUxUZXh0QXJlYUVsZW1lbnQgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxlbWVu
dFdpdGhTdGF0ZSB7CkBAIC03OCw2ICs3OSw4IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgZGVmYXVs
dFZhbHVlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXREZWZhdWx0VmFsdWUoY29uc3QgU3RyaW5nJik7
CiAgICAgaW50IHRleHRMZW5ndGgoKSBjb25zdCB7IHJldHVybiB2YWx1ZSgpLmxlbmd0aCgpOyB9
CisgICAgdW5zaWduZWQgbWF4TGVuZ3RoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRNYXhMZW5ndGgo
dW5zaWduZWQpOwogICAgIAogICAgIHZvaWQgcmVuZGVyZXJXaWxsQmVEZXN0cm95ZWQoKTsKICAg
ICAKQEAgLTk5LDYgKzEwMiw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgZW51bSBXcmFwTWV0
aG9kIHsgTm9XcmFwLCBTb2Z0V3JhcCwgSGFyZFdyYXAgfTsKIAorICAgIHZvaWQgaGFuZGxlQmVm
b3JlVGV4dEluc2VydGVkRXZlbnQoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQqKSBjb25zdDsKKyAg
ICBzdGF0aWMgU3RyaW5nIHNhbml0aXplVXNlcklucHV0VmFsdWUoY29uc3QgU3RyaW5nJiwgdW5z
aWduZWQgbWF4TGVuZ3RoKTsKICAgICB2b2lkIHVwZGF0ZVZhbHVlKCkgY29uc3Q7CiAgICAgdm9p
ZCB1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoYm9vbCBwbGFjZWhvbGRlclZhbHVlQ2hhbmdl
ZCk7CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRm9jdXNFdmVudCgpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaWRsIGIvV2ViQ29yZS9odG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuaWRsCmluZGV4IDZkMjdmNTQuLjg0NTgzZjUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmlkbAorKysgYi9XZWJDb3JlL2h0bWwvSFRN
TFRleHRBcmVhRWxlbWVudC5pZGwKQEAgLTM0LDYgKzM0LDcgQEAgbW9kdWxlIGh0bWwgewogICAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGUgIGxvbmcgICAgICAgICAgICAgICAgIGNvbHM7CiAgICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZSAgYm9vbGVhbiAgICAgICAgICAgICAgZGlzYWJsZWQ7CiAg
ICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSAgYm9vbGVhbiAgICAgICAgICAgICAgYXV0b2ZvY3Vz
OworICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgIHVuc2lnbmVkIGxvbmcgICAgICAgIG1heExl
bmd0aDsKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlICBbQ29udmVydE51bGxUb051bGxTdHJp
bmddIERPTVN0cmluZyAgICAgICAgICAgIG5hbWU7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0
ZSAgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nLCBSZWZsZWN0XSBET01TdHJpbmcgICBwbGFjZWhv
bGRlcjsKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlICBib29sZWFuICAgICAgICAgICAgICBy
ZWFkT25seTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmlu
Zy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmgKaW5kZXggMjU4YjI4
ZC4uYjliNDA3OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3Ry
aW5nLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmgKQEAgLTI1
NCw2ICsyNTQsMTQgQEAgcHVibGljOgogICAgIC8vIERldGVybWluZXMgdGhlIHdyaXRpbmcgZGly
ZWN0aW9uIHVzaW5nIHRoZSBVbmljb2RlIEJpZGkgQWxnb3JpdGhtIHJ1bGVzIFAyIGFuZCBQMy4K
ICAgICBXVEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBkZWZhdWx0V3JpdGluZ0RpcmVjdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1faW1wbCA/IG1faW1wbC0+ZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24oKSA6
IFdURjo6VW5pY29kZTo6TGVmdFRvUmlnaHQ7IH0KIAorICAgIC8vIENvdW50cyB0aGUgbnVtYmVy
IG9mIGdyYXBoZW1lIGNsdXN0ZXJzLiBBIHN1cnJvZ2F0ZSBwYWlyIG9yIGEgc2VxdWVuY2UKKyAg
ICAvLyBvZiBhIG5vbi1jb21iaW5pbmcgY2hhcmFjdGVyIGFuZCBmb2xsb3dpbmcgY29tYmluaW5n
IGNoYXJhY3RlcnMgaXMKKyAgICAvLyBjb3VudGVkIGFzIDEgZ3JhcGhlbWUgY2x1c3Rlci4KKyAg
ICB1bnNpZ25lZCBudW1HcmFwaGVtZUNsdXN0ZXJzKCkgY29uc3Q7CisgICAgLy8gUmV0dXJucyB0
aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd2hpY2ggd2lsbCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwg
dG8KKyAgICAvLyB0aGUgc3BlY2lmaWVkIGdyYXBoZW1lIGNsdXN0ZXIgbGVuZ3RoLgorICAgIHVu
c2lnbmVkIG51bUNoYXJhY3RlcnNJbkdyYXBoZW1lQ2x1c3RlcnModW5zaWduZWQpIGNvbnN0Owor
CiBwcml2YXRlOgogICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBtX2ltcGw7CiB9OwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvU3RyaW5nLmNwcAppbmRleCAyNzMwOTM5Li5lODkyZWY2IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvU3RyaW5nLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvU3Ry
aW5nLmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRl
ICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJTdHJpbmdCdWZmZXIuaCIKKyNpbmNsdWRl
ICJUZXh0QnJlYWtJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1
ZGUgPHd0Zi9kdG9hLmg+CiAjaW5jbHVkZSA8bGltaXRzPgpAQCAtOTIxLDYgKzkyMiwzMSBAQCBQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdXRmOEJ1ZmZlcihjb25zdCBTdHJpbmcmIHN0cmluZykK
ICAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjphZG9wdFZlY3RvcihidWZmZXIpOwogfQogCit1bnNp
Z25lZCBTdHJpbmc6Om51bUdyYXBoZW1lQ2x1c3RlcnMoKSBjb25zdAoreworICAgIFRleHRCcmVh
a0l0ZXJhdG9yKiBpdCA9IGNoYXJhY3RlckJyZWFrSXRlcmF0b3IoY2hhcmFjdGVycygpLCBsZW5n
dGgoKSk7CisgICAgaWYgKCFpdCkKKyAgICAgICAgcmV0dXJuIGxlbmd0aCgpOworCisgICAgdW5z
aWduZWQgbnVtID0gMDsKKyAgICB3aGlsZSAodGV4dEJyZWFrTmV4dChpdCkgIT0gVGV4dEJyZWFr
RG9uZSkKKyAgICAgICAgKytudW07CisgICAgcmV0dXJuIG51bTsKK30KKwordW5zaWduZWQgU3Ry
aW5nOjpudW1DaGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0ZXJzKHVuc2lnbmVkIG51bUdyYXBoZW1l
Q2x1c3RlcnMpIGNvbnN0Cit7CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIGl0ID0gY2hhcmFjdGVy
QnJlYWtJdGVyYXRvcihjaGFyYWN0ZXJzKCksIGxlbmd0aCgpKTsKKyAgICBpZiAoIWl0KQorICAg
ICAgICByZXR1cm4gbWluKGxlbmd0aCgpLCBudW1HcmFwaGVtZUNsdXN0ZXJzKTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HcmFwaGVtZUNsdXN0ZXJzOyArK2kpIHsKKyAgICAg
ICAgaWYgKHRleHRCcmVha05leHQoaXQpID09IFRleHRCcmVha0RvbmUpCisgICAgICAgICAgICBy
ZXR1cm4gbGVuZ3RoKCk7CisgICAgfQorICAgIHJldHVybiB0ZXh0QnJlYWtDdXJyZW50KGl0KTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaWZuZGVmIE5ERUJVRwotLSAKMS42LjMu
MwoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39855</attachid>
            <date>2009-09-21 09:23:00 -0700</date>
            <delta_ts>2009-09-23 19:55:48 -0700</delta_ts>
            <desc>Proposed patch (rev.6)</desc>
            <filename>0001-Proposed-patch.patch</filename>
            <type>text/plain</type>
            <size>20062</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">RnJvbSA3NDljMDg4ZjA2MzkwZWFhN2I5Zjc4OWQ5NGM1MTczZGNkMGE1MWI5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLZW50IFRhbXVyYSA8dGtlbnRAY2hyb21pdW0ub3JnPgpEYXRl
OiBTYXQsIDE5IFNlcCAyMDA5IDAyOjUxOjM3ICswOTAwClN1YmplY3Q6IFtQQVRDSF0gUHJvcG9z
ZWQgcGF0Y2gKCi0tLQogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDExICsrCiAuLi4vZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvdGV4dGFyZWEt
bWF4bGVuZ3RoLmpzICB8ICAxMjAgKysrKysrKysrKysrKysrKysrKysKIC4uLi9mYXN0L2Zvcm1z
L3RleHRhcmVhLW1heGxlbmd0aC1leHBlY3RlZC50eHQgICAgIHwgICAzMSArKysrKwogTGF5b3V0
VGVzdHMvZmFzdC9mb3Jtcy90ZXh0YXJlYS1tYXhsZW5ndGguaHRtbCAgICAgfCAgIDEzICsrCiBX
ZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjYg
KysrKwogV2ViQ29yZS9kb20vSW5wdXRFbGVtZW50LmNwcCAgICAgICAgICAgICAgICAgICAgICAg
fCAgIDU2ICsrLS0tLS0tLS0KIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcCAg
ICAgICAgICAgICAgIHwgICAzNyArKysrKysKIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVt
ZW50LmggICAgICAgICAgICAgICAgIHwgICAgNSArCiBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVh
RWxlbWVudC5pZGwgICAgICAgICAgICAgICB8ICAgIDEgKwogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1BsYXRmb3JtU3RyaW5nLmggICAgICAgICAgICAgfCAgICA4ICsrCiBXZWJDb3JlL3BsYXRmb3Jt
L3RleHQvU3RyaW5nLmNwcCAgICAgICAgICAgICAgICAgICB8ICAgMjYgKysrKwogMTEgZmlsZXMg
Y2hhbmdlZCwgMjg3IGluc2VydGlvbnMoKyksIDQ3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg
MTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL3RleHRhcmVhLW1heGxl
bmd0aC5qcwogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZm9ybXMvdGV4dGFy
ZWEtbWF4bGVuZ3RoLWV4cGVjdGVkLnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3Rz
L2Zhc3QvZm9ybXMvdGV4dGFyZWEtbWF4bGVuZ3RoLmh0bWwKCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMTA3ZjAwYi4uZTAx
NDhkMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDA5LTA5LTIxICBLZW50IFRhbXVyYSAgPHRr
ZW50QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUZXN0cyBmb3IgbWF4TGVuZ3RoIG9mIDx0ZXh0YXJlYT4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MjkyCisKKyAgICAgICAgKiBm
YXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy90ZXh0YXJlYS1tYXhsZW5ndGguanM6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZm9ybXMvdGV4dGFyZWEtbWF4bGVuZ3RoLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9mb3Jtcy90ZXh0YXJlYS1tYXhsZW5ndGguaHRtbDogQWRkZWQuCisK
IDIwMDktMDktMjAgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBNYWNpZWogU3RhY2hvd2lhay4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZm9ybXMvc2NyaXB0LXRlc3RzL3RleHRhcmVhLW1heGxlbmd0aC5qcyBiL0xheW91dFRlc3Rz
L2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL3RleHRhcmVhLW1heGxlbmd0aC5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2YwZjVkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvdGV4dGFyZWEtbWF4bGVuZ3RoLmpzCkBA
IC0wLDAgKzEsMTIwIEBACitkZXNjcmlwdGlvbignVGVzdHMgZm9yIEhUTUxUZXh0QXJlYUVsZW1l
bnQubWF4TGVuZ3RoIGJlaGF2aW9ycy4nKTsKKwordmFyIHRleHRBcmVhID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgndGV4dGFyZWEnKTsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4dEFy
ZWEpOworCisvLyBObyBtYXhsZW5ndGggYXR0cmlidXRlCitzaG91bGRCZSgndGV4dEFyZWEubWF4
TGVuZ3RoJywgJzAnKTsKKworLy8gSW52YWxpZCBtYXhsZW5ndGggYXR0cmlidXRlcwordGV4dEFy
ZWEuc2V0QXR0cmlidXRlKCdtYXhsZW5ndGgnLCAnLTMnKTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS5t
YXhMZW5ndGgnLCAnMCcpOwordGV4dEFyZWEuc2V0QXR0cmlidXRlKCdtYXhsZW5ndGgnLCAneHl6
Jyk7CitzaG91bGRCZSgndGV4dEFyZWEubWF4TGVuZ3RoJywgJzAnKTsKKworLy8gVmFsaWQgbWF4
bGVuZ3RoIGF0dHJpYnV0ZXMKK3RleHRBcmVhLnNldEF0dHJpYnV0ZSgnbWF4bGVuZ3RoJywgJzEn
KTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS5tYXhMZW5ndGgnLCAnMScpOwordGV4dEFyZWEuc2V0QXR0
cmlidXRlKCdtYXhsZW5ndGgnLCAnMjU2Jyk7CitzaG91bGRCZSgndGV4dEFyZWEubWF4TGVuZ3Ro
JywgJzI1NicpOworCisvLyBTZXQgdmFsdWVzIHRvIC5tYXhMZW5ndGgKK3RleHRBcmVhLm1heExl
bmd0aCA9IDEzOworc2hvdWxkQmUoJ3RleHRBcmVhLmdldEF0dHJpYnV0ZSgibWF4bGVuZ3RoIikn
LCAnIjEzIicpOworCit0ZXh0QXJlYS5tYXhMZW5ndGggPSAtMTsKK3Nob3VsZEJlKCd0ZXh0QXJl
YS5tYXhMZW5ndGgnLCAnNDI5NDk2NzI5NScpOworc2hvdWxkQmUoJ3RleHRBcmVhLmdldEF0dHJp
YnV0ZSgibWF4bGVuZ3RoIiknLCAnIjQyOTQ5NjcyOTUiJyk7CisKKy8vIG1heExlbmd0aCBkb2Vz
bid0IHRydW5jYXRlIHRoZSBkZWZhdWx0IHZhbHVlLgordGV4dEFyZWEgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCd0ZXh0YXJlYScpOwordGV4dEFyZWEuc2V0QXR0cmlidXRlKCdtYXhsZW5ndGgn
LCAnMycpOwordGV4dEFyZWEuaW5uZXJIVE1MID0gJ2FiY2QnOworZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZCh0ZXh0QXJlYSk7CitzaG91bGRCZSgndGV4dEFyZWEudmFsdWUnLCAnImFiY2QiJyk7
CisKKy8vIG1heExlbmd0aCBkb2Vzbid0IHRydW5jYXRlIC52YWx1ZQordGV4dEFyZWEubWF4TGVu
Z3RoID0gMzsKK3RleHRBcmVhLnZhbHVlID0gJ2FiY2RlJzsKK3Nob3VsZEJlKCd0ZXh0QXJlYS52
YWx1ZScsICciYWJjZGUiJyk7CisKKy8vIFNldCB1cCBmb3IgdXNlci1pbnB1dCB0ZXN0cworZnVu
Y3Rpb24gY3JlYXRlRm9jdXNlZFRleHRBcmVhV2l0aE1heExlbmd0aDMoKSB7CisgICAgaWYgKHRl
eHRBcmVhKQorICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRleHRBcmVhKTsKKyAg
ICB0ZXh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7CisgICAgdGV4
dEFyZWEuc2V0QXR0cmlidXRlKCdtYXhsZW5ndGgnLCAnMycpOworICAgIGRvY3VtZW50LmJvZHku
YXBwZW5kQ2hpbGQodGV4dEFyZWEpOworICAgIHRleHRBcmVhLmZvY3VzKCk7Cit9CisKKy8vIElu
c2VydCB0ZXh0IG9mIHdoaWNoIGxlbmd0aCBpcyBtYXhMZW5ndGguCitjcmVhdGVGb2N1c2VkVGV4
dEFyZWFXaXRoTWF4TGVuZ3RoMygpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQn
LCBmYWxzZSwgJ2FiYycpOworc2hvdWxkQmUoJ3RleHRBcmVhLnZhbHVlJywgJyJhYmMiJyk7CisK
Ky8vIFRyeSB0byBhZGQgY2hhcmFjdGVycyB0byBtYXhMZW5ndGggY2hhcmFjdGVycy4KK2NyZWF0
ZUZvY3VzZWRUZXh0QXJlYVdpdGhNYXhMZW5ndGgzKCk7Cit0ZXh0QXJlYS52YWx1ZSA9ICdhYmMn
OworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ2RlZicpOworc2hv
dWxkQmUoJ3RleHRBcmVhLnZhbHVlJywgJyJhYmMiJyk7CisKKy8vIFJlcGxhY2UgdGV4dAorY3Jl
YXRlRm9jdXNlZFRleHRBcmVhV2l0aE1heExlbmd0aDMoKTsKK3RleHRBcmVhLnZhbHVlID0gJ2Fi
Yyc7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnc2VsZWN0QWxsJyk7Citkb2N1bWVudC5leGVjQ29t
bWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCAnZGVmJyk7CitzaG91bGRCZSgndGV4dEFyZWEudmFs
dWUnLCAnImRlZiInKTsKKworLy8gRXhpc3RpbmcgdmFsdWUgaXMgbG9uZ2VyIHRoYW4gbWF4TGVu
Z3RoLiAgV2UgY2FuJ3QgYWRkIHRleHQuCitjcmVhdGVGb2N1c2VkVGV4dEFyZWFXaXRoTWF4TGVu
Z3RoMygpOwordGV4dEFyZWEudmFsdWUgPSAnYWJjZGVmJzsKK2RvY3VtZW50LmV4ZWNDb21tYW5k
KCdpbnNlcnRUZXh0JywgZmFsc2UsICdnaGknKTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS52YWx1ZScs
ICciYWJjZGVmIicpOworCisvLyBXZSBjYW4gZGVsZXRlIGEgY2hhcmFjdGVyIGluIHRoZSBsb25n
ZXIgdmFsdWUuCitjcmVhdGVGb2N1c2VkVGV4dEFyZWFXaXRoTWF4TGVuZ3RoMygpOwordGV4dEFy
ZWEudmFsdWUgPSAnYWJjZGVmJzsKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdkZWxldGUnKTsKK3No
b3VsZEJlKCd0ZXh0QXJlYS52YWx1ZScsICciYWJjZGUiJyk7CisKKy8vIEEgbGluZWJyZWFrIGlz
IDEgY2hhcmFjdGVyLgorY3JlYXRlRm9jdXNlZFRleHRBcmVhV2l0aE1heExlbmd0aDMoKTsKK2Rv
Y3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdBJyk7Citkb2N1bWVudC5l
eGVjQ29tbWFuZCgnaW5zZXJ0TGluZUJyZWFrJyk7Citkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5z
ZXJ0VGV4dCcsIGZhbHNlLCAnQicpOworc2hvdWxkQmUoJ3RleHRBcmVhLnZhbHVlJywgJyJBXFxu
QiInKTsKKworLy8gQWNjb3JkaW5nIHRvIHRoZSBIVE1MNSBzcGVjaWZpY2F0aW9uLCBtYXhMZW5n
dGggaXMgY29kZS1wb2ludCBsZW5ndGguCisvLyBIb3dldmVyIFdlYktpdCBoYW5kbGVzIGl0IGFz
IGdyYXBoZW1lIGxlbmd0aC4KKworLy8gZmFuY3lYIHNob3VsZCBiZSB0cmVhdGVkIGFzIDEgZ3Jh
cGhlbWUuCit2YXIgZmFuY3lYID0gInhcdTAzMDVcdTAzMzIiOy8vICsgU3RyaW5nLmZyb21DaGFy
Q29kZSgweDMwNSkgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4MzMyKTsKKy8vIHUxMDAwMCBpcyBv
bmUgY2hhcmFjdGVyIGNvbnNpc3RlZCBvZiBhIHN1cnJvZ2F0ZSBwYWlyLgordmFyIHUxMDAwMCA9
ICJcdWQ4MDBcdWRjMDAiOworCisvLyBJbnNlcnRzIDUgY29kZS1wb2ludHMgaW4gVVRGLTE2Citj
cmVhdGVGb2N1c2VkVGV4dEFyZWFXaXRoTWF4TGVuZ3RoMygpOworZG9jdW1lbnQuZXhlY0NvbW1h
bmQoJ2luc2VydFRleHQnLCBmYWxzZSwgJ0FCJyArIGZhbmN5WCk7CitzaG91bGRCZSgndGV4dEFy
ZWEudmFsdWUnLCAnIkFCIiArIGZhbmN5WCcpOworc2hvdWxkQmUoJ3RleHRBcmVhLnZhbHVlLmxl
bmd0aCcsICc1Jyk7CisKK2NyZWF0ZUZvY3VzZWRUZXh0QXJlYVdpdGhNYXhMZW5ndGgzKCk7Cit0
ZXh0QXJlYS52YWx1ZSA9ICdBQicgKyBmYW5jeVg7Cit0ZXh0QXJlYS5zZXRTZWxlY3Rpb25SYW5n
ZSgyLCA1KTsgIC8vIFNlbGVjdCBmYW5jeVgKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRU
ZXh0JywgZmFsc2UsICdDREUnKTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS52YWx1ZScsICciQUJDIicp
OworCisvLyBJbnNlcnRzIDQgY29kZS1wb2ludHMgaW4gVVRGLTE2CitjcmVhdGVGb2N1c2VkVGV4
dEFyZWFXaXRoTWF4TGVuZ3RoMygpOworZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2luc2VydFRleHQn
LCBmYWxzZSwgJ0FCJyArIHUxMDAwMCk7CitzaG91bGRCZSgndGV4dEFyZWEudmFsdWUnLCAnIkFC
IiArIHUxMDAwMCcpOworc2hvdWxkQmUoJ3RleHRBcmVhLnZhbHVlLmxlbmd0aCcsICc0Jyk7CisK
K2NyZWF0ZUZvY3VzZWRUZXh0QXJlYVdpdGhNYXhMZW5ndGgzKCk7Cit0ZXh0QXJlYS52YWx1ZSA9
ICdBQicgKyB1MTAwMDA7Cit0ZXh0QXJlYS5zZXRTZWxlY3Rpb25SYW5nZSgyLCA0KTsgIC8vIFNl
bGVjdCB1MTAwMDAKK2RvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JywgZmFsc2UsICdD
REUnKTsKK3Nob3VsZEJlKCd0ZXh0QXJlYS52YWx1ZScsICciQUJDIicpOworCit2YXIgc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMv
dGV4dGFyZWEtbWF4bGVuZ3RoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMv
dGV4dGFyZWEtbWF4bGVuZ3RoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5iZDFhYTE3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9m
b3Jtcy90ZXh0YXJlYS1tYXhsZW5ndGgtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzEgQEAKK1Rl
c3RzIGZvciBIVE1MVGV4dEFyZWFFbGVtZW50Lm1heExlbmd0aCBiZWhhdmlvcnMuCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHRleHRBcmVhLm1heExlbmd0aCBpcyAwCitQ
QVNTIHRleHRBcmVhLm1heExlbmd0aCBpcyAwCitQQVNTIHRleHRBcmVhLm1heExlbmd0aCBpcyAw
CitQQVNTIHRleHRBcmVhLm1heExlbmd0aCBpcyAxCitQQVNTIHRleHRBcmVhLm1heExlbmd0aCBp
cyAyNTYKK1BBU1MgdGV4dEFyZWEuZ2V0QXR0cmlidXRlKCJtYXhsZW5ndGgiKSBpcyAiMTMiCitQ
QVNTIHRleHRBcmVhLm1heExlbmd0aCBpcyA0Mjk0OTY3Mjk1CitQQVNTIHRleHRBcmVhLmdldEF0
dHJpYnV0ZSgibWF4bGVuZ3RoIikgaXMgIjQyOTQ5NjcyOTUiCitQQVNTIHRleHRBcmVhLnZhbHVl
IGlzICJhYmNkIgorUEFTUyB0ZXh0QXJlYS52YWx1ZSBpcyAiYWJjZGUiCitQQVNTIHRleHRBcmVh
LnZhbHVlIGlzICJhYmMiCitQQVNTIHRleHRBcmVhLnZhbHVlIGlzICJhYmMiCitQQVNTIHRleHRB
cmVhLnZhbHVlIGlzICJkZWYiCitQQVNTIHRleHRBcmVhLnZhbHVlIGlzICJhYmNkZWYiCitQQVNT
IHRleHRBcmVhLnZhbHVlIGlzICJhYmNkZSIKK1BBU1MgdGV4dEFyZWEudmFsdWUgaXMgIkFcbkIi
CitQQVNTIHRleHRBcmVhLnZhbHVlIGlzICJBQiIgKyBmYW5jeVgKK1BBU1MgdGV4dEFyZWEudmFs
dWUubGVuZ3RoIGlzIDUKK1BBU1MgdGV4dEFyZWEudmFsdWUgaXMgIkFCQyIKK1BBU1MgdGV4dEFy
ZWEudmFsdWUgaXMgIkFCIiArIHUxMDAwMAorUEFTUyB0ZXh0QXJlYS52YWx1ZS5sZW5ndGggaXMg
NAorUEFTUyB0ZXh0QXJlYS52YWx1ZSBpcyAiQUJDIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
Zm9ybXMvdGV4dGFyZWEtbWF4bGVuZ3RoLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3Rl
eHRhcmVhLW1heGxlbmd0aC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmFjNWVjZGIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3RleHRh
cmVhLW1heGxlbmd0aC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ij4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3RleHRhcmVh
LW1heGxlbmd0aC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDk1Njg0
MC4uYTAxZGFkYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAwOS0wOS0xNyAgS2VudCBUYW11cmEgIDx0a2Vu
dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgLSBTdXBwb3J0IGZvciBtYXhMZW5ndGggb2YgPHRleHRhcmVhPgorICAgICAgICAt
IE1vdmUgbnVtR3JhcGhlbWVDbHVzdGVycygpIGFuZCBudW1DaGFyYWN0ZXJzSW5HcmFwaGVtZUNs
dXN0ZXJzKCkgZnJvbSBJbnB1dEVsZW1lbnQgdG8gU3RyaW5nLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkyOTIKKworICAgICAgICBUZXN0OiBmYXN0
L2Zvcm1zL3RleHRhcmVhLW1heGxlbmd0aC5odG1sCisKKyAgICAgICAgKiBkb20vSW5wdXRFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklucHV0RWxlbWVudDo6c2FuaXRpemVVc2VySW5w
dXRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnB1dEVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRl
eHRJbnNlcnRlZEV2ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpoYW5kbGVCZWZv
cmVUZXh0SW5zZXJ0ZWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVt
ZW50OjpzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0
QXJlYUVsZW1lbnQ6Om1heExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFF
bGVtZW50OjpzZXRNYXhMZW5ndGgpOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVu
dC5oOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5pZGw6CisgICAgICAgICog
cGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQv
U3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZzo6bnVtR3JhcGhlbWVDbHVzdGVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmc6Om51bUNoYXJhY3RlcnNJbkdyYXBoZW1lQ2x1
c3RlcnMpOgorCiAyMDA5LTA5LTIxICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0YXZvLm5v
cm9uaGFAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIFVucmV2aWV3ZWQgbWFrZSBkaXN0IGJ1
aWxkIGZpeC4gTWlzc2luZyBmaWxlcy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZG9tL0lucHV0RWxl
bWVudC5jcHAgYi9XZWJDb3JlL2RvbS9JbnB1dEVsZW1lbnQuY3BwCmluZGV4IDk3NzkzZTIuLjg3
NWQ5ZjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL0lucHV0RWxlbWVudC5jcHAKKysrIGIvV2Vi
Q29yZS9kb20vSW5wdXRFbGVtZW50LmNwcApAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIlJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIgogI2luY2x1ZGUgIlNlbGVjdGlvbkNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJUZXh0QnJlYWtJdGVy
YXRvci5oIgogCiAjaWYgRU5BQkxFKFdNTCkKICNpbmNsdWRlICJXTUxJbnB1dEVsZW1lbnQuaCIK
QEAgLTE1OSwyMyArMTU4LDYgQEAgdm9pZCBJbnB1dEVsZW1lbnQ6OnNldFZhbHVlRnJvbVJlbmRl
cmVyKElucHV0RWxlbWVudERhdGEmIGRhdGEsIElucHV0RWxlbWVudCogaW4KICAgICBub3RpZnlG
b3JtU3RhdGVDaGFuZ2VkKGVsZW1lbnQpOwogfQogCi1zdGF0aWMgaW50IG51bUNoYXJhY3RlcnNJ
bkdyYXBoZW1lQ2x1c3RlcnMoU3RyaW5nSW1wbCogcywgaW50IG51bUdyYXBoZW1lQ2x1c3RlcnMp
Ci17Ci0gICAgaWYgKCFzKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFRleHRCcmVha0l0ZXJh
dG9yKiBpdCA9IGNoYXJhY3RlckJyZWFrSXRlcmF0b3Iocy0+Y2hhcmFjdGVycygpLCBzLT5sZW5n
dGgoKSk7Ci0gICAgaWYgKCFpdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG51bUdyYXBoZW1lQ2x1c3RlcnM7ICsraSkgewotICAgICAgICBpZiAodGV4dEJy
ZWFrTmV4dChpdCkgPT0gVGV4dEJyZWFrRG9uZSkKLSAgICAgICAgICAgIHJldHVybiBzLT5sZW5n
dGgoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGV4dEJyZWFrQ3VycmVudChpdCk7Ci19Ci0KIFN0
cmluZyBJbnB1dEVsZW1lbnQ6OnNhbml0aXplVmFsdWUoY29uc3QgSW5wdXRFbGVtZW50KiBpbnB1
dEVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHJvcG9zZWRWYWx1ZSkKIHsKICAgICByZXR1cm4gSW5w
dXRFbGVtZW50OjpzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKGlucHV0RWxlbWVudCwgcHJvcG9zZWRW
YWx1ZSwgc19tYXhpbXVtTGVuZ3RoKTsKQEAgLTE5MSwzNiArMTczLDE1IEBAIFN0cmluZyBJbnB1
dEVsZW1lbnQ6OnNhbml0aXplVXNlcklucHV0VmFsdWUoY29uc3QgSW5wdXRFbGVtZW50KiBpbnB1
dEVsZW1lbnQsIGNvCiAgICAgc3RyaW5nLnJlcGxhY2UoJ1xyJywgJyAnKTsKICAgICBzdHJpbmcu
cmVwbGFjZSgnXG4nLCAnICcpOwogCi0gICAgU3RyaW5nSW1wbCogcyA9IHN0cmluZy5pbXBsKCk7
Ci0gICAgaW50IG5ld0xlbmd0aCA9IG51bUNoYXJhY3RlcnNJbkdyYXBoZW1lQ2x1c3RlcnMocywg
bWF4TGVuZ3RoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5ld0xlbmd0aDsgKytpKSB7Ci0g
ICAgICAgIGNvbnN0IFVDaGFyJiBjdXJyZW50ID0gKCpzKVtpXTsKKyAgICB1bnNpZ25lZCBuZXdM
ZW5ndGggPSBzdHJpbmcubnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycyhtYXhMZW5ndGgp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuZXdMZW5ndGg7ICsraSkgeworICAgICAg
ICBjb25zdCBVQ2hhciBjdXJyZW50ID0gc3RyaW5nW2ldOwogICAgICAgICBpZiAoY3VycmVudCA8
ICcgJyAmJiBjdXJyZW50ICE9ICdcdCcpIHsKICAgICAgICAgICAgIG5ld0xlbmd0aCA9IGk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLQotICAgIGlmIChuZXdMZW5ndGgg
PCBzdGF0aWNfY2FzdDxpbnQ+KHN0cmluZy5sZW5ndGgoKSkpCi0gICAgICAgIHJldHVybiBzdHJp
bmcubGVmdChuZXdMZW5ndGgpOwotCi0gICAgcmV0dXJuIHN0cmluZzsKLX0KLQotc3RhdGljIGlu
dCBudW1HcmFwaGVtZUNsdXN0ZXJzKFN0cmluZ0ltcGwqIHMpCi17Ci0gICAgaWYgKCFzKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdCA9IGNoYXJhY3RlckJy
ZWFrSXRlcmF0b3Iocy0+Y2hhcmFjdGVycygpLCBzLT5sZW5ndGgoKSk7Ci0gICAgaWYgKCFpdCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpbnQgbnVtID0gMDsKLSAgICB3aGlsZSAodGV4dEJy
ZWFrTmV4dChpdCkgIT0gVGV4dEJyZWFrRG9uZSkKLSAgICAgICAgKytudW07Ci0KLSAgICByZXR1
cm4gbnVtOworICAgIHJldHVybiBzdHJpbmcubGVmdChuZXdMZW5ndGgpOwogfQogCiB2b2lkIElu
cHV0RWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoSW5wdXRFbGVtZW50RGF0
YSYgZGF0YSwgSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQsIEVsZW1lbnQqIGVsZW1lbnQsIEV2
ZW50KiBldmVudCkKQEAgLTIzMSwxNSArMTkyLDE2IEBAIHZvaWQgSW5wdXRFbGVtZW50OjpoYW5k
bGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChJbnB1dEVsZW1lbnREYXRhJiBkYXRhLCBJbnB1dEVs
CiAgICAgLy8gV2UgdXNlIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6dGV4dCgpIGluc3Rl
YWQgb2YgSW5wdXRFbGVtZW50Ojp2YWx1ZSgpCiAgICAgLy8gYmVjYXVzZSB0aGV5IGNhbiBiZSBt
aXNtYXRjaGVkIGJ5IHNhbml0aXplVmFsdWUoKSBpbgogICAgIC8vIFJlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZTo6c3VidHJlZUhhc0NoYW5nZWQoKSBpbiBzb21lIGNhc2VzLgotICAgIGludCBv
bGRMZW5ndGggPSBudW1HcmFwaGVtZUNsdXN0ZXJzKHRvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lKGVsZW1lbnQtPnJlbmRlcmVyKCkpLT50ZXh0KCkuaW1wbCgpKTsKKyAgICB1bnNpZ25lZCBv
bGRMZW5ndGggPSB0b1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZShlbGVtZW50LT5yZW5kZXJl
cigpKS0+dGV4dCgpLm51bUdyYXBoZW1lQ2x1c3RlcnMoKTsKIAogICAgIC8vIHNlbGVjdGlvbigp
IG1heSBiZSBhIHByZS1lZGl0IHRleHQuCi0gICAgaW50IHNlbGVjdGlvbkxlbmd0aCA9IG51bUdy
YXBoZW1lQ2x1c3RlcnMocGxhaW5UZXh0KGVsZW1lbnQtPmRvY3VtZW50KCktPmZyYW1lKCktPnNl
bGVjdGlvbigpLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKS5pbXBsKCkp
OworICAgIHVuc2lnbmVkIHNlbGVjdGlvbkxlbmd0aCA9IHBsYWluVGV4dChlbGVtZW50LT5kb2N1
bWVudCgpLT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKS5nZXQoKSkubnVtR3JhcGhlbWVDbHVzdGVycygpOwogICAgIEFTU0VSVChvbGRMZW5ndGgg
Pj0gc2VsZWN0aW9uTGVuZ3RoKTsKIAogICAgIC8vIFNlbGVjdGVkIGNoYXJhY3RlcnMgd2lsbCBi
ZSByZW1vdmVkIGJ5IHRoZSBuZXh0IHRleHQgZXZlbnQuCi0gICAgaW50IGJhc2VMZW5ndGggPSBv
bGRMZW5ndGggLSBzZWxlY3Rpb25MZW5ndGg7Ci0gICAgaW50IGFwcGVuZGFibGVMZW5ndGggPSBk
YXRhLm1heExlbmd0aCgpIC0gYmFzZUxlbmd0aDsKKyAgICB1bnNpZ25lZCBiYXNlTGVuZ3RoID0g
b2xkTGVuZ3RoIC0gc2VsZWN0aW9uTGVuZ3RoOworICAgIHVuc2lnbmVkIG1heExlbmd0aCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihkYXRhLm1heExlbmd0aCgpKTsgLy8gbWF4TGVuZ3RoKCkgY2Fu
IG5ldmVyIGJlIG5lZ2F0aXZlLgorICAgIHVuc2lnbmVkIGFwcGVuZGFibGVMZW5ndGggPSBtYXhM
ZW5ndGggPiBiYXNlTGVuZ3RoID8gbWF4TGVuZ3RoIC0gYmFzZUxlbmd0aCA6IDA7CiAKICAgICAv
LyBUcnVuY2F0ZSB0aGUgaW5zZXJ0ZWQgdGV4dCB0byBhdm9pZCB2aW9sYXRpbmcgdGhlIG1heExl
bmd0aCBhbmQgb3RoZXIgY29uc3RyYWludHMuCiAgICAgQmVmb3JlVGV4dEluc2VydGVkRXZlbnQq
IHRleHRFdmVudCA9IHN0YXRpY19jYXN0PEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50Kj4oZXZlbnQp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwIGIvV2Vi
Q29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCmluZGV4IGQzZmM4OTcuLjNjZjQ4NTIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAorKysgYi9X
ZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAKKyNp
bmNsdWRlICJCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudC5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVu
dC5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgpAQCAtMzUsMTIgKzM2LDE0IEBACiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJJbnB1dEVsZW1l
bnQuaCIKICNpbmNsdWRlICJNYXBwZWRBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbE11bHRp
TGluZS5oIgogI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJUZXh0
LmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlv
bi5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtMjcwLDEwICsyNzMsMzQg
QEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBl
dmVudCkKIHsKICAgICBpZiAocmVuZGVyZXIoKSAmJiAoZXZlbnQtPmlzTW91c2VFdmVudCgpIHx8
IGV2ZW50LT5pc0RyYWdFdmVudCgpIHx8IGV2ZW50LT5pc1doZWVsRXZlbnQoKSB8fCBldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibHVyRXZlbnQpKQogICAgICAgICB0b1JlbmRlclRleHRD
b250cm9sTXVsdGlMaW5lKHJlbmRlcmVyKCkpLT5mb3J3YXJkRXZlbnQoZXZlbnQpOworICAgIGVs
c2UgaWYgKHJlbmRlcmVyKCkgJiYgZXZlbnQtPmlzQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoKSkK
KyAgICAgICAgaGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoc3RhdGljX2Nhc3Q8QmVmb3Jl
VGV4dEluc2VydGVkRXZlbnQqPihldmVudCkpOwogCiAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVu
dFdpdGhTdGF0ZTo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldmVudCk7CiB9CiAKK3ZvaWQgSFRNTFRl
eHRBcmVhRWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoQmVmb3JlVGV4dElu
c2VydGVkRXZlbnQqIGV2ZW50KSBjb25zdAoreworICAgIEFTU0VSVChldmVudCk7CisgICAgQVNT
RVJUKHJlbmRlcmVyKCkpOworICAgIGJvb2wgb2s7CisgICAgdW5zaWduZWQgbWF4TGVuZ3RoID0g
Z2V0QXR0cmlidXRlKG1heGxlbmd0aEF0dHIpLnN0cmluZygpLnRvVUludCgmb2spOworICAgIGlm
ICghb2spCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIGN1cnJlbnRMZW5ndGggPSB0
b1JlbmRlclRleHRDb250cm9sKHJlbmRlcmVyKCkpLT50ZXh0KCkubnVtR3JhcGhlbWVDbHVzdGVy
cygpOworICAgIHVuc2lnbmVkIHNlbGVjdGlvbkxlbmd0aCA9IHBsYWluVGV4dChkb2N1bWVudCgp
LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5n
ZXQoKSkubnVtR3JhcGhlbWVDbHVzdGVycygpOworICAgIEFTU0VSVChjdXJyZW50TGVuZ3RoID49
IHNlbGVjdGlvbkxlbmd0aCk7CisgICAgdW5zaWduZWQgYmFzZUxlbmd0aCA9IGN1cnJlbnRMZW5n
dGggLSBzZWxlY3Rpb25MZW5ndGg7CisgICAgdW5zaWduZWQgYXBwZW5kYWJsZUxlbmd0aCA9IG1h
eExlbmd0aCA+IGJhc2VMZW5ndGggPyBtYXhMZW5ndGggLSBiYXNlTGVuZ3RoIDogMDsKKyAgICBl
dmVudC0+c2V0VGV4dChzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKGV2ZW50LT50ZXh0KCksIGFwcGVu
ZGFibGVMZW5ndGgpKTsKK30KKworU3RyaW5nIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNhbml0aXpl
VXNlcklucHV0VmFsdWUoY29uc3QgU3RyaW5nJiBwcm9wb3NlZFZhbHVlLCB1bnNpZ25lZCBtYXhM
ZW5ndGgpCit7CisgICAgcmV0dXJuIHByb3Bvc2VkVmFsdWUubGVmdChwcm9wb3NlZFZhbHVlLm51
bUNoYXJhY3RlcnNJbkdyYXBoZW1lQ2x1c3RlcnMobWF4TGVuZ3RoKSk7Cit9CisKIHZvaWQgSFRN
TFRleHRBcmVhRWxlbWVudDo6cmVuZGVyZXJXaWxsQmVEZXN0cm95ZWQoKQogewogICAgIHVwZGF0
ZVZhbHVlKCk7CkBAIC0zNzQsNiArNDAxLDE2IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6
c2V0RGVmYXVsdFZhbHVlKGNvbnN0IFN0cmluZyYgZGVmYXVsdFZhbHVlKQogICAgIHNldFZhbHVl
KHZhbHVlKTsKIH0KIAordW5zaWduZWQgSFRNTFRleHRBcmVhRWxlbWVudDo6bWF4TGVuZ3RoKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG1heGxlbmd0aEF0dHIpLnN0cmluZygp
LnRvVUludCgpOworfQorCit2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldE1heExlbmd0aCh1
bnNpZ25lZCBuZXdWYWx1ZSkKK3sKKyAgICBzZXRBdHRyaWJ1dGUobWF4bGVuZ3RoQXR0ciwgU3Ry
aW5nOjpudW1iZXIobmV3VmFsdWUpKTsKK30KKwogdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50Ojph
Y2Nlc3NLZXlBY3Rpb24oYm9vbCkKIHsKICAgICBmb2N1cygpOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFF
bGVtZW50LmgKaW5kZXggMWY1Y2I5MS4uZmJmNTE5ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1s
L0hUTUxUZXh0QXJlYUVsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxl
bWVudC5oCkBAIC0yOCw2ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3Mg
QmVmb3JlVGV4dEluc2VydGVkRXZlbnQ7CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogCiBjbGFz
cyBIVE1MVGV4dEFyZWFFbGVtZW50IDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRo
U3RhdGUgewpAQCAtNzgsNiArNzksOCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGRlZmF1bHRWYWx1
ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0RGVmYXVsdFZhbHVlKGNvbnN0IFN0cmluZyYpOwogICAg
IGludCB0ZXh0TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gdmFsdWUoKS5sZW5ndGgoKTsgfQorICAg
IHVuc2lnbmVkIG1heExlbmd0aCgpIGNvbnN0OworICAgIHZvaWQgc2V0TWF4TGVuZ3RoKHVuc2ln
bmVkKTsKICAgICAKICAgICB2b2lkIHJlbmRlcmVyV2lsbEJlRGVzdHJveWVkKCk7CiAgICAgCkBA
IC05OSw2ICsxMDIsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGVudW0gV3JhcE1ldGhvZCB7
IE5vV3JhcCwgU29mdFdyYXAsIEhhcmRXcmFwIH07CiAKKyAgICB2b2lkIGhhbmRsZUJlZm9yZVRl
eHRJbnNlcnRlZEV2ZW50KEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KikgY29uc3Q7CisgICAgc3Rh
dGljIFN0cmluZyBzYW5pdGl6ZVVzZXJJbnB1dFZhbHVlKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVk
IG1heExlbmd0aCk7CiAgICAgdm9pZCB1cGRhdGVWYWx1ZSgpIGNvbnN0OwogICAgIHZvaWQgdXBk
YXRlUGxhY2Vob2xkZXJWaXNpYmlsaXR5KGJvb2wgcGxhY2Vob2xkZXJWYWx1ZUNoYW5nZWQpOwog
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEZvY3VzRXZlbnQoKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmlkbCBiL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFy
ZWFFbGVtZW50LmlkbAppbmRleCA2ZDI3ZjU0Li44NDU4M2Y1IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5pZGwKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxUZXh0
QXJlYUVsZW1lbnQuaWRsCkBAIC0zNCw2ICszNCw3IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAg
ICAgICAgICAgYXR0cmlidXRlICBsb25nICAgICAgICAgICAgICAgICBjb2xzOwogICAgICAgICAg
ICAgICAgICBhdHRyaWJ1dGUgIGJvb2xlYW4gICAgICAgICAgICAgIGRpc2FibGVkOwogICAgICAg
ICAgICAgICAgICBhdHRyaWJ1dGUgIGJvb2xlYW4gICAgICAgICAgICAgIGF1dG9mb2N1czsKKyAg
ICAgICAgICAgICAgICAgYXR0cmlidXRlICB1bnNpZ25lZCBsb25nICAgICAgICBtYXhMZW5ndGg7
CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSAgW0NvbnZlcnROdWxsVG9OdWxsU3RyaW5nXSBE
T01TdHJpbmcgICAgICAgICAgICBuYW1lOwogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgIFtD
b252ZXJ0TnVsbFRvTnVsbFN0cmluZywgUmVmbGVjdF0gRE9NU3RyaW5nICAgcGxhY2Vob2xkZXI7
CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSAgYm9vbGVhbiAgICAgICAgICAgICAgcmVhZE9u
bHk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCmluZGV4IDI1OGIyOGQuLmI5
YjQwNzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5o
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCkBAIC0yNTQsNiAr
MjU0LDE0IEBAIHB1YmxpYzoKICAgICAvLyBEZXRlcm1pbmVzIHRoZSB3cml0aW5nIGRpcmVjdGlv
biB1c2luZyB0aGUgVW5pY29kZSBCaWRpIEFsZ29yaXRobSBydWxlcyBQMiBhbmQgUDMuCiAgICAg
V1RGOjpVbmljb2RlOjpEaXJlY3Rpb24gZGVmYXVsdFdyaXRpbmdEaXJlY3Rpb24oKSBjb25zdCB7
IHJldHVybiBtX2ltcGwgPyBtX2ltcGwtPmRlZmF1bHRXcml0aW5nRGlyZWN0aW9uKCkgOiBXVEY6
OlVuaWNvZGU6OkxlZnRUb1JpZ2h0OyB9CiAKKyAgICAvLyBDb3VudHMgdGhlIG51bWJlciBvZiBn
cmFwaGVtZSBjbHVzdGVycy4gQSBzdXJyb2dhdGUgcGFpciBvciBhIHNlcXVlbmNlCisgICAgLy8g
b2YgYSBub24tY29tYmluaW5nIGNoYXJhY3RlciBhbmQgZm9sbG93aW5nIGNvbWJpbmluZyBjaGFy
YWN0ZXJzIGlzCisgICAgLy8gY291bnRlZCBhcyAxIGdyYXBoZW1lIGNsdXN0ZXIuCisgICAgdW5z
aWduZWQgbnVtR3JhcGhlbWVDbHVzdGVycygpIGNvbnN0OworICAgIC8vIFJldHVybnMgdGhlIG51
bWJlciBvZiBjaGFyYWN0ZXJzIHdoaWNoIHdpbGwgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvCisg
ICAgLy8gdGhlIHNwZWNpZmllZCBncmFwaGVtZSBjbHVzdGVyIGxlbmd0aC4KKyAgICB1bnNpZ25l
ZCBudW1DaGFyYWN0ZXJzSW5HcmFwaGVtZUNsdXN0ZXJzKHVuc2lnbmVkKSBjb25zdDsKKwogcHJp
dmF0ZToKICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9pbXBsOwogfTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmcuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0
cmluZy5jcHAKaW5kZXggMjczMDkzOS4uZTg5MmVmNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1N0cmluZy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZy5j
cHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiRmxv
YXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiU3RyaW5nQnVmZmVyLmgiCisjaW5jbHVkZSAiVGV4
dEJyZWFrSXRlcmF0b3IuaCIKICNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNsdWRlIDx3
dGYvZHRvYS5oPgogI2luY2x1ZGUgPGxpbWl0cz4KQEAgLTkyMSw2ICs5MjIsMzEgQEAgUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IHV0ZjhCdWZmZXIoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAg
cmV0dXJuIFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IoYnVmZmVyKTsKIH0KIAordW5zaWduZWQg
U3RyaW5nOjpudW1HcmFwaGVtZUNsdXN0ZXJzKCkgY29uc3QKK3sKKyAgICBUZXh0QnJlYWtJdGVy
YXRvciogaXQgPSBjaGFyYWN0ZXJCcmVha0l0ZXJhdG9yKGNoYXJhY3RlcnMoKSwgbGVuZ3RoKCkp
OworICAgIGlmICghaXQpCisgICAgICAgIHJldHVybiBsZW5ndGgoKTsKKworICAgIHVuc2lnbmVk
IG51bSA9IDA7CisgICAgd2hpbGUgKHRleHRCcmVha05leHQoaXQpICE9IFRleHRCcmVha0RvbmUp
CisgICAgICAgICsrbnVtOworICAgIHJldHVybiBudW07Cit9CisKK3Vuc2lnbmVkIFN0cmluZzo6
bnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGVycyh1bnNpZ25lZCBudW1HcmFwaGVtZUNsdXN0
ZXJzKSBjb25zdAoreworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdCA9IGNoYXJhY3RlckJyZWFr
SXRlcmF0b3IoY2hhcmFjdGVycygpLCBsZW5ndGgoKSk7CisgICAgaWYgKCFpdCkKKyAgICAgICAg
cmV0dXJuIG1pbihsZW5ndGgoKSwgbnVtR3JhcGhlbWVDbHVzdGVycyk7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtR3JhcGhlbWVDbHVzdGVyczsgKytpKSB7CisgICAgICAgIGlm
ICh0ZXh0QnJlYWtOZXh0KGl0KSA9PSBUZXh0QnJlYWtEb25lKQorICAgICAgICAgICAgcmV0dXJu
IGxlbmd0aCgpOworICAgIH0KKyAgICByZXR1cm4gdGV4dEJyZWFrQ3VycmVudChpdCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2lmbmRlZiBOREVCVUcKLS0gCjEuNi4zLjMKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>