<?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>160584</bug_id>
          
          <creation_ts>2016-08-04 18:26:28 -0700</creation_ts>
          <short_desc>Ensure StringView lifetime is correct inside InlineTextBox</short_desc>
          <delta_ts>2016-08-12 11:49:43 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>160384</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mark.lam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1217773</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-08-04 18:26:28 -0700</bug_when>
    <thetext>Ensure StringView lifetime is correct inside InlineTextBox</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217782</commentid>
    <comment_count>1</comment_count>
      <attachid>285390</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-08-04 18:34:14 -0700</bug_when>
    <thetext>Created attachment 285390
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217792</commentid>
    <comment_count>2</comment_count>
      <attachid>285394</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-08-04 19:39:23 -0700</bug_when>
    <thetext>Created attachment 285394
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217828</commentid>
    <comment_count>3</comment_count>
      <attachid>285408</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-08-05 00:28:41 -0700</bug_when>
    <thetext>Created attachment 285408
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218198</commentid>
    <comment_count>4</comment_count>
      <attachid>285408</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-08-05 22:59:56 -0700</bug_when>
    <thetext>Comment on attachment 285408
Patch

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

&gt; Source/WebCore/ChangeLog:26
&gt; +        A TextRun contains a StringView. Previously, we had a helper function which
&gt; +        could possibly create a new string, and then create a TextRun whose StringView
&gt; +        pointed inside this new string. Then, the string would be destroyed because it
&gt; +        was on the stack.
&gt; +
&gt; +        Luckily, this is benign because this new string would always share a
&gt; +        StringImpl with the string passed into the function (and the StringView
&gt; +        would point into this StringImpl). However, relying on this is dangerous
&gt; +        and we are trying to enforce StringView lifetime checks in
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=160384.
&gt; +
&gt; +        The solution is to make a helper function which returns this built string
&gt; +        so that the caller can own this built string, thereby extending its lifetime.
&gt; +        Unfortunately, this built string can&apos;t be a StringView because the same
&gt; +        mechanism must be used for text-combine, which returns originalText(), which
&gt; +        may return a built string if it is a RenderCounter. Perhaps it would be
&gt; +        valuable to migrate RenderCounter::originalText() to something else, or to
&gt; +        divorce text-combine from originalText(), but that is out of scope for this
&gt; +        patch.

Seems to me another benefit of the patch is that StringView::substring is faster to use than String::substringSharingImpl, since it does not allocate and destroy a StringImpl on the heap. A reason to make this change that has nothing to do with StringView lifetime checks.

The comment about the built string doesn’t seem quite complete; another reason the built string can’t be a StringView is that our code for hyphenation requires allocating a new string and in fact the code paths that have nothing to do with originalText are using String, not StringView, for the built string.

&gt; Source/WebCore/rendering/InlineTextBox.cpp:56
&gt; +#include &lt;wtf/text/StringBuilder.h&gt;

No need for StringBuilder; see below.

&gt; Source/WebCore/rendering/InlineTextBox.cpp:209
&gt; +    if (ePos == m_len &amp;&amp; hasHyphen())

In the code below we use a boolean named &quot;respectHyphen&quot; to help make code that is otherwise exactly like this be more self documenting. I don’t prefer either version, but I suggest making them consistent.

&gt; Source/WebCore/rendering/InlineTextBox.cpp:502
&gt; +    String stringToRender;

Not sure this variable name is clear enough given that it will be null in the normal case and yet we will render not render the null/empty string; instead we will render the text from the renderer. Maybe alternateStringToRender or alternateString?

&gt; Source/WebCore/rendering/InlineTextBox.cpp:503
&gt; +    // Don&apos;t hyphenate combined text.

This comment doesn’t seem all that helpful. It says what the code below says, however it doesn’t say why, which is the real job of a comment. Maybe leave the comment out. Or if you leave the comment in, find a way to efficiently say why.

&gt; Source/WebCore/rendering/InlineTextBox.cpp:640
&gt; +        hyphenatedStringForTextRun(style, length);

Oops, must not have a test case covering this. Because this line of code is missing &quot;hyphenatedString =&quot;! What now!?!

&gt; Source/WebCore/rendering/InlineTextBox.cpp:641
&gt; +    TextRun textRun = constructTextRun(style, hyphenatedString, Optional&lt;unsigned&gt;(length));

Why is the typecast to Optional&lt;unsigned&gt; needed? I would have expected this to work without a cast. Maybe the local variable was typed int in a previous iteration of the patch?

&gt; Source/WebCore/rendering/InlineTextBox.cpp:1011
&gt; +    auto string = StringView(renderer().text()).substring(start(), overriddenLength.valueOr(len()));

Would be nice to share this line of code with constructTextRun, but I suppose that&apos;s not practical if we don’t want to call renderer() and start() twice there.

If we know renderer().text() can never be null, and I think we can know that, then we can call StringView(*renderer().text()) and remove one unnecessary null check from the generated code. But maybe we don’t know that. If we do, then we may want to change RenderText::text() to return StringImpl&amp;.

The use of valueOr here unfortunately will always call len() even if overriddenLength is not null. Can fix by using valueOrCompute([this] () { return len(); }) but that is a lot more ugly and not sure if it’s more efficient.

&gt; Source/WebCore/rendering/InlineTextBox.cpp:1015
&gt; +    StringBuilder builder;
&gt; +    builder.append(string);
&gt; +    builder.append(style.hyphenString());
&gt; +    return builder.toString();

Should just write:

    return makeString(string, style.hyphenString());

Not sure, but it’s possible this will work too:

    return string + style.hyphenString();

This is more efficient than StringBuilder when simply concatenating two strings.

Could also consider a single line rather than using a local variable:

    return StringView(renderer().text()).substring(start(), overriddenLength.valueOr(len())) + style.hyphenString();

&gt; Source/WebCore/rendering/InlineTextBox.cpp:1023
&gt; +        return constructTextRun(style, StringView(renderer.text()).substring(start, overriddenLength.valueOr(len())), renderer.textLength() - start);

Same issues here with text() and valueOr() as above.

&gt; Source/WebCore/rendering/InlineTextBox.cpp:1025
&gt; +    return constructTextRun(style, maybeStringToRender, maybeStringToRender.length());

Consider adding:

    ASSERT(!overriddenLength || overriddenLength == maybeStringToRender.length());

Unless that is not the invariant.

&gt; Source/WebCore/rendering/InlineTextBox.h:115
&gt; +    String hyphenatedStringForTextRun(const RenderStyle&amp;, Optional&lt;unsigned&gt; overriddenLength = Nullopt) const;

The name overrridenLength is not good. The length passed in is not the one that will be overridden, it’s the length that will do the overriding. So &quot;overridden length&quot; is not what we should call it.

&gt; Source/WebCore/rendering/InlineTextBox.h:116
&gt; +    TextRun constructTextRun(const RenderStyle&amp;, StringView maybeStringToRender = StringView(), Optional&lt;unsigned&gt; overriddenLength = Nullopt) const;

Same issue with the name overriddenLength here.

Also, I would call this an alternateStringToRender, not a maybeStringToRender.

Seems not entirely elegant that both of these are sort of optional arguments, but we use different naming scheme for each. Both are about overriding the default behavior.

Unclear that overriddenLength will be ignored if an alternate string is passed.

I think I prefer { } to StringView() for the default value here in the function declaration, not sure if you agree.

&gt; Source/WebCore/rendering/RenderCombineText.cpp:90
&gt; +        return originalText();

If originalText() can ever return a null string then the caller might not do the right thing. Are we sure it won’t ever?

&gt; Source/WebCore/rendering/RenderCombineText.h:39
&gt; +    String maybeGetCombinedStringForRendering() const;

I think this function should just be named combinedStringForRendering. I understand that returns null if this is not combined, but I am not sure that &quot;maybe get&quot; is the best way to express that, nor that it needs to be expressed in the name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218677</commentid>
    <comment_count>5</comment_count>
      <attachid>285626</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-08-08 19:52:51 -0700</bug_when>
    <thetext>Created attachment 285626
Patch for committing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218678</commentid>
    <comment_count>6</comment_count>
      <attachid>285627</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-08-08 19:54:03 -0700</bug_when>
    <thetext>Created attachment 285627
Patch for committing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218682</commentid>
    <comment_count>7</comment_count>
      <attachid>285627</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-08 20:28:15 -0700</bug_when>
    <thetext>Comment on attachment 285627
Patch for committing

Clearing flags on attachment: 285627

Committed r204276: &lt;http://trac.webkit.org/changeset/204276&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218687</commentid>
    <comment_count>8</comment_count>
      <attachid>285408</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2016-08-08 20:35:44 -0700</bug_when>
    <thetext>Comment on attachment 285408
Patch

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

&gt;&gt; Source/WebCore/rendering/InlineTextBox.cpp:641
&gt;&gt; +    TextRun textRun = constructTextRun(style, hyphenatedString, Optional&lt;unsigned&gt;(length));
&gt; 
&gt; Why is the typecast to Optional&lt;unsigned&gt; needed? I would have expected this to work without a cast. Maybe the local variable was typed int in a previous iteration of the patch?

It&apos;s because there is an override that takes an unsigned and another override that takes an Optional&lt;unsigned&gt;. This needs to specify which override is correct.

&gt;&gt; Source/WebCore/rendering/InlineTextBox.cpp:1011
&gt;&gt; +    auto string = StringView(renderer().text()).substring(start(), overriddenLength.valueOr(len()));
&gt; 
&gt; Would be nice to share this line of code with constructTextRun, but I suppose that&apos;s not practical if we don’t want to call renderer() and start() twice there.
&gt; 
&gt; If we know renderer().text() can never be null, and I think we can know that, then we can call StringView(*renderer().text()) and remove one unnecessary null check from the generated code. But maybe we don’t know that. If we do, then we may want to change RenderText::text() to return StringImpl&amp;.
&gt; 
&gt; The use of valueOr here unfortunately will always call len() even if overriddenLength is not null. Can fix by using valueOrCompute([this] () { return len(); }) but that is a lot more ugly and not sure if it’s more efficient.

Regarding the null check from RenderText::text() to StringView(StringImpl*), I think it&apos;s a good idea, but out of scope for this patch.

Given that len() is inlined and is just a simple accessor, I don&apos;t think it&apos;s valuable to use the lambda.

&gt;&gt; Source/WebCore/rendering/InlineTextBox.cpp:1025
&gt;&gt; +    return constructTextRun(style, maybeStringToRender, maybeStringToRender.length());
&gt; 
&gt; Consider adding:
&gt; 
&gt;     ASSERT(!overriddenLength || overriddenLength == maybeStringToRender.length());
&gt; 
&gt; Unless that is not the invariant.

That&apos;s not the invariant. Instead, maybeStringToRender will be longer than overriddenLength by the hyphen string&apos;s length (if maybeStringToRender is not null). However, I think this function shouldn&apos;t know anything about hyphenation, and should just deal with the data it&apos;s given, as it&apos;s given.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219629</commentid>
    <comment_count>9</comment_count>
      <attachid>285408</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-08-12 11:49:43 -0700</bug_when>
    <thetext>Comment on attachment 285408
Patch

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

&gt;&gt;&gt; Source/WebCore/rendering/InlineTextBox.cpp:641
&gt;&gt;&gt; +    TextRun textRun = constructTextRun(style, hyphenatedString, Optional&lt;unsigned&gt;(length));
&gt;&gt; 
&gt;&gt; Why is the typecast to Optional&lt;unsigned&gt; needed? I would have expected this to work without a cast. Maybe the local variable was typed int in a previous iteration of the patch?
&gt; 
&gt; It&apos;s because there is an override that takes an unsigned and another override that takes an Optional&lt;unsigned&gt;. This needs to specify which override is correct.

Might be worth revisiting. It seems like a dangerously ambiguous programming interface if the unsigned and the Optional&lt;unsigned&gt; arguments don’t have the same meaning.

&gt;&gt;&gt; Source/WebCore/rendering/InlineTextBox.cpp:1025
&gt;&gt;&gt; +    return constructTextRun(style, maybeStringToRender, maybeStringToRender.length());
&gt;&gt; 
&gt;&gt; Consider adding:
&gt;&gt; 
&gt;&gt;     ASSERT(!overriddenLength || overriddenLength == maybeStringToRender.length());
&gt;&gt; 
&gt;&gt; Unless that is not the invariant.
&gt; 
&gt; That&apos;s not the invariant. Instead, maybeStringToRender will be longer than overriddenLength by the hyphen string&apos;s length (if maybeStringToRender is not null). However, I think this function shouldn&apos;t know anything about hyphenation, and should just deal with the data it&apos;s given, as it&apos;s given.

Given that philosophy, why is it OK for this code path to ignore overriddenLength?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285390</attachid>
            <date>2016-08-04 18:34:14 -0700</date>
            <delta_ts>2016-08-04 19:39:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160584-20160804183249.patch</filename>
            <type>text/plain</type>
            <size>12126</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjIyZjQ3ZWFkMDU2MzEz
ZjI3YzY4YmMyNjYzMDc2MmJhOTAxMDNiMS4uOGY1NWExODI1OWNjOTVkZDAzNDkwZTA3NTI1YjE3
Y2ViNjJmNTE2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE2LTA4LTA0ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgRW5zdXJlIFN0
cmluZ1ZpZXcgbGlmZXRpbWUgaXMgY29ycmVjdCBpbnNpZGUgSW5saW5lVGV4dEJveAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNTg0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQSBUZXh0UnVuIGNvbnRh
aW5zIGEgU3RyaW5nVmlldy4gUHJldmlvdXNseSwgd2UgaGFkIGEgaGVscGVyIGZ1bmN0aW9uIHdo
aWNoCisgICAgICAgIGNvdWxkIHBvc3NpYmx5IGNyZWF0ZSBhIG5ldyBzdHJpbmcsIGFuZCB0aGVu
IGNyZWF0ZSBhIFRleHRSdW4gd2hvc2UgU3RyaW5nVmlldworICAgICAgICBwb2ludGVkIGluc2lk
ZSB0aGlzIG5ldyBzdHJpbmcuIFRoZW4sIHRoZSBzdHJpbmcgd291bGQgYmUgZGVzdHJveWVkIGJl
Y2F1c2UgaXQKKyAgICAgICAgd2FzIG9uIHRoZSBzdGFjay4KKworICAgICAgICBMdWNraWx5LCB0
aGlzIGlzIGJlbmlnbiBiZWNhdXNlIHRoaXMgbmV3IHN0cmluZyB3b3VsZCBhbHdheXMgc2hhcmUg
YQorICAgICAgICBTdHJpbmdJbXBsIHdpdGggdGhlIHN0cmluZyBwYXNzZWQgaW50byB0aGUgZnVu
Y3Rpb24gKGFuZCB0aGUgU3RyaW5nVmlldworICAgICAgICB3b3VsZCBwb2ludCBpbnRvIHRoaXMg
U3RyaW5nSW1wbCkuIEhvd2V2ZXIsIHJlbHlpbmcgb24gdGhpcyBpcyBkYW5nZXJvdXMKKyAgICAg
ICAgYW5kIHdlIGFyZSB0cnlpbmcgdG8gZW5mb3JjZSBTdHJpbmdWaWV3IGxpZmV0aW1lIGNoZWNr
cyBpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYw
Mzg0LgorCisgICAgICAgIFRoZSBzb2x1dGlvbiBpcyB0byBtYWtlIGEgaGVscGVyIGZ1bmN0aW9u
IHdoaWNoIHJldHVybnMgdGhpcyBidWlsdCBzdHJpbmcKKyAgICAgICAgc28gdGhhdCB0aGUgY2Fs
bGVyIGNhbiBvd24gdGhpcyBidWlsdCBzdHJpbmcsIHRoZXJlYnkgZXh0ZW5kaW5nIGl0cyBsaWZl
dGltZS4KKyAgICAgICAgVW5mb3J0dW5hdGVseSwgdGhpcyBidWlsdCBzdHJpbmcgY2FuJ3QgYmUg
YSBTdHJpbmdWaWV3IGJlY2F1c2UgdGhlIHNhbWUKKyAgICAgICAgbWVjaGFuaXNtIG11c3QgYmUg
dXNlZCBmb3IgdGV4dC1jb21iaW5lLCB3aGljaCByZXR1cm5zIG9yaWdpbmFsVGV4dCgpLCB3aGlj
aAorICAgICAgICBtYXkgcmV0dXJuIGEgYnVpbHQgc3RyaW5nIGlmIGl0IGlzIGEgUmVuZGVyQ291
bnRlci4gUGVyaGFwcyBpdCB3b3VsZCBiZQorICAgICAgICB2YWx1YWJsZSB0byBtaWdyYXRlIFJl
bmRlckNvdW50ZXI6Om9yaWdpbmFsVGV4dCgpIHRvIHNvbWV0aGluZyBlbHNlLCBvciB0bworICAg
ICAgICBkaXZvcmNlIHRleHQtY29tYmluZSBmcm9tIG9yaWdpbmFsVGV4dCgpLCBidXQgdGhhdCBp
cyBvdXQgb2Ygc2NvcGUgZm9yIHRoaXMKKyAgICAgICAgcGF0Y2guCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICog
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRC
b3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnNlbGVjdGlvblN0
YXJ0RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6Omh5cGhlbmF0ZWRTdHJpbmdGb3JU
ZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRS
dW4pOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNv
bWJpbmVUZXh0OjptYXliZUdldENvbWJpbmVkU3RyaW5nRm9yUmVuZGVyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckNvbWJpbmVUZXh0OjpnZXRTdHJpbmdUb1JlbmRlcik6IERlbGV0ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0Lmg6CisKIDIwMTYtMDgtMDQg
IEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBUcnkgdG8g
Zml4IHRoZSBHVEsrIGJ1aWxkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCmluZGV4IGNkODAyZWIwM2YyNDZiNTZhZTdkOTFjNjdmNzg5Yjc5NDg0MjNkMjkuLjJk
ZjEwNGMyZTkzYjk4MzkxOGNjMjBhOWI3Y2VkMDJlZDc2NzUxYjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTIwNCw5ICsyMDQsMTAgQEAgTGF5b3V0
UmVjdCBJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QoaW50IHN0YXJ0UG9zLCBpbnQg
ZW5kUG9zKSBjb25zdAogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5s
aW5lU3R5bGUoKTsKICAgICBjb25zdCBGb250Q2FzY2FkZSYgZm9udCA9IGZvbnRUb1VzZShsaW5l
U3R5bGUsIHJlbmRlcmVyKCkpOwogCi0gICAgU3RyaW5nIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXI7
Ci0gICAgYm9vbCByZXNwZWN0SHlwaGVuID0gZVBvcyA9PSBtX2xlbiAmJiBoYXNIeXBoZW4oKTsK
LSAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKGxpbmVTdHlsZSwgcmVzcGVj
dEh5cGhlbiA/ICZoeXBoZW5hdGVkU3RyaW5nQnVmZmVyIDogMCk7CisgICAgU3RyaW5nIGh5cGhl
bmF0ZWRTdHJpbmc7CisgICAgaWYgKGVQb3MgPT0gbV9sZW4gJiYgaGFzSHlwaGVuKCkpCisgICAg
ICAgIGh5cGhlbmF0ZWRTdHJpbmcgPSBoeXBoZW5hdGVkU3RyaW5nRm9yVGV4dFJ1bihsaW5lU3R5
bGUpOworICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4obGluZVN0eWxlLCBo
eXBoZW5hdGVkU3RyaW5nKTsKIAogICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCA9IExheW91
dFJlY3QoTGF5b3V0UG9pbnQobG9naWNhbExlZnQoKSwgc2VsZWN0aW9uVG9wKSwgTGF5b3V0U2l6
ZShtX2xvZ2ljYWxXaWR0aCwgc2VsZWN0aW9uSGVpZ2h0KSk7CiAgICAgLy8gQXZvaWQgY29tcHV0
aW5nIHRoZSBmb250IHdpZHRoIHdoZW4gdGhlIGVudGlyZSBsaW5lIGJveCBpcyBzZWxlY3RlZCBh
cyBhbiBvcHRpbWl6YXRpb24uCkBAIC00OTcsMjUgKzQ5OCwxNSBAQCB2b2lkIElubGluZVRleHRC
b3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRP
ZmZzZXQsCiAgICAgfQogCiAgICAgLy8gMi4gTm93IHBhaW50IHRoZSBmb3JlZ3JvdW5kLCBpbmNs
dWRpbmcgdGV4dCBhbmQgZGVjb3JhdGlvbnMgbGlrZSB1bmRlcmxpbmUvb3ZlcmxpbmUgKGluIHF1
aXJrcyBtb2RlIG9ubHkpLgotICAgIGludCBsZW5ndGggPSBtX2xlbjsKLSAgICBpbnQgbWF4aW11
bUxlbmd0aDsKLSAgICBTdHJpbmcgc3RyaW5nOwotICAgIGlmICghY29tYmluZWRUZXh0KSB7Ci0g
ICAgICAgIHN0cmluZyA9IHJlbmRlcmVyKCkudGV4dCgpOwotICAgICAgICBpZiAoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGxlbmd0aCkgIT0gc3RyaW5nLmxlbmd0aCgpIHx8IG1fc3RhcnQpIHsKLSAg
ICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihtX3N0YXJ0ICsgbGVuZ3RoKSA8PSBzdHJpbmcubGVuZ3RoKCkpOwotICAgICAgICAg
ICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZ1NoYXJpbmdJbXBsKG1fc3RhcnQsIGxlbmd0aCk7
Ci0gICAgICAgIH0KLSAgICAgICAgbWF4aW11bUxlbmd0aCA9IHJlbmRlcmVyKCkudGV4dExlbmd0
aCgpIC0gbV9zdGFydDsKLSAgICB9IGVsc2UgewotICAgICAgICBjb21iaW5lZFRleHQtPmdldFN0
cmluZ1RvUmVuZGVyKG1fc3RhcnQsIHN0cmluZywgbGVuZ3RoKTsKLSAgICAgICAgbWF4aW11bUxl
bmd0aCA9IGxlbmd0aDsKLSAgICB9CisgICAgU3RyaW5nIHN0cmluZ1RvUmVuZGVyOworICAgIC8v
IERvbid0IGh5cGhlbmF0ZSBjb21iaW5lZCB0ZXh0LgorICAgIGlmIChjb21iaW5lZFRleHQpCisg
ICAgICAgIHN0cmluZ1RvUmVuZGVyID0gY29tYmluZWRUZXh0LT5tYXliZUdldENvbWJpbmVkU3Ry
aW5nRm9yUmVuZGVyaW5nKCk7CisgICAgZWxzZSBpZiAoaGFzSHlwaGVuKCkpCisgICAgICAgIHN0
cmluZ1RvUmVuZGVyID0gaHlwaGVuYXRlZFN0cmluZ0ZvclRleHRSdW4obGluZVN0eWxlKTsKIAot
ICAgIFN0cmluZyBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyOwotICAgIFRleHRSdW4gdGV4dFJ1biA9
IGNvbnN0cnVjdFRleHRSdW4obGluZVN0eWxlLCBzdHJpbmcsIG1heGltdW1MZW5ndGgsIGhhc0h5
cGhlbigpID8gJmh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIgOiBudWxscHRyKTsKLSAgICBpZiAoaGFz
SHlwaGVuKCkpCi0gICAgICAgIGxlbmd0aCA9IHRleHRSdW4ubGVuZ3RoKCk7CisgICAgVGV4dFJ1
biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihsaW5lU3R5bGUsIHN0cmluZ1RvUmVuZGVyKTsK
KyAgICB1bnNpZ25lZCBsZW5ndGggPSB0ZXh0UnVuLmxlbmd0aCgpOwogCiAgICAgaW50IHNlbGVj
dGlvblN0YXJ0ID0gMDsKICAgICBpbnQgc2VsZWN0aW9uRW5kID0gMDsKQEAgLTYwMCw3ICs1OTEs
NyBAQCBzdGQ6OnBhaXI8aW50LCBpbnQ+IElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXJ0RW5k
KCkgY29uc3QKIHsKICAgICBhdXRvIHNlbGVjdGlvblN0YXRlID0gcmVuZGVyZXIoKS5zZWxlY3Rp
b25TdGF0ZSgpOwogICAgIGlmIChzZWxlY3Rpb25TdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVj
dGlvbkluc2lkZSkKLSAgICAgICAgcmV0dXJuIHswLCBtX2xlbn07CisgICAgICAgIHJldHVybiB7
IDAsIG1fbGVuIH07CiAgICAgCiAgICAgaW50IHN0YXJ0OwogICAgIGludCBlbmQ7CkBAIC02MzYs
MjAgKzYyNywxNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYgogCiAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwogICAgIHVwZGF0ZUdyYXBoaWNzQ29u
dGV4dChjb250ZXh0LCBUZXh0UGFpbnRTdHlsZShjKSk7IC8vIERvbid0IGRyYXcgdGV4dCBhdCBh
bGwhCi0gICAgCisKICAgICAvLyBJZiB0aGUgdGV4dCBpcyB0cnVuY2F0ZWQsIGxldCB0aGUgdGhp
bmcgYmVpbmcgcGFpbnRlZCBpbiB0aGUgdHJ1bmNhdGlvbgogICAgIC8vIGRyYXcgaXRzIG93biBo
aWdobGlnaHQuCi0gICAgaW50IGxlbmd0aCA9IG1fdHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9u
ID8gbV90cnVuY2F0aW9uIDogbV9sZW47Ci0gICAgU3RyaW5nIHN0cmluZyA9IHJlbmRlcmVyKCku
dGV4dCgpOwogCi0gICAgaWYgKHN0cmluZy5sZW5ndGgoKSAhPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4obGVuZ3RoKSB8fCBtX3N0YXJ0KSB7Ci0gICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3N0YXJ0ICsgbGVuZ3RoKSA8PSBzdHJp
bmcubGVuZ3RoKCkpOwotICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nU2hhcmluZ0lt
cGwobV9zdGFydCwgbGVuZ3RoKTsKLSAgICB9CisgICAgdW5zaWduZWQgbGVuZ3RoID0gbV90cnVu
Y2F0aW9uICE9IGNOb1RydW5jYXRpb24gPyBtX3RydW5jYXRpb24gOiBsZW4oKTsKIAotICAgIFN0
cmluZyBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyOwotICAgIGJvb2wgcmVzcGVjdEh5cGhlbiA9IHNl
bGVjdGlvbkVuZCA9PSBsZW5ndGggJiYgaGFzSHlwaGVuKCk7Ci0gICAgVGV4dFJ1biB0ZXh0UnVu
ID0gY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgc3RyaW5nLCByZW5kZXJlcigpLnRleHRMZW5ndGgo
KSAtIG1fc3RhcnQsIHJlc3BlY3RIeXBoZW4gPyAmaHlwaGVuYXRlZFN0cmluZ0J1ZmZlciA6IG51
bGxwdHIpOworICAgIFN0cmluZyBoeXBoZW5hdGVkU3RyaW5nOworICAgIGJvb2wgcmVzcGVjdEh5
cGhlbiA9IHNlbGVjdGlvbkVuZCA9PSBzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aCkgJiYgaGFzSHlw
aGVuKCk7CisgICAgaWYgKHJlc3BlY3RIeXBoZW4pCisgICAgICAgIGh5cGhlbmF0ZWRTdHJpbmdG
b3JUZXh0UnVuKHN0eWxlLCBsZW5ndGgpOworICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVj
dFRleHRSdW4oc3R5bGUsIGh5cGhlbmF0ZWRTdHJpbmcsIE9wdGlvbmFsPHVuc2lnbmVkPihsZW5n
dGgpKTsKICAgICBpZiAocmVzcGVjdEh5cGhlbikKICAgICAgICAgc2VsZWN0aW9uRW5kID0gdGV4
dFJ1bi5sZW5ndGgoKTsKIApAQCAtMTAxNiwzMiArMTAwNCwyOSBAQCBmbG9hdCBJbmxpbmVUZXh0
Qm94Ojpwb3NpdGlvbkZvck9mZnNldChpbnQgb2Zmc2V0KSBjb25zdAogICAgIHJldHVybiBzbmFw
UmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJlY3Rpb24oc2VsZWN0aW9uUmVjdCwgcmVu
ZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCksIHJ1bi5sdHIoKSkubWF4WCgp
OwogfQogCi1UZXh0UnVuIElubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBTdHJpbmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIpIGNvbnN0CitT
dHJpbmcgSW5saW5lVGV4dEJveDo6aHlwaGVuYXRlZFN0cmluZ0ZvclRleHRSdW4oY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBPcHRpb25hbDx1bnNpZ25lZD4gb3ZlcnJpZGRlbkxlbmd0aCkgY29u
c3QKIHsKLSAgICBBU1NFUlQocmVuZGVyZXIoKS50ZXh0KCkpOwotCi0gICAgU3RyaW5nIHN0cmlu
ZyA9IHJlbmRlcmVyKCkudGV4dCgpOwotICAgIHVuc2lnbmVkIHN0YXJ0UG9zID0gc3RhcnQoKTsK
LSAgICB1bnNpZ25lZCBsZW5ndGggPSBsZW4oKTsKLQotICAgIGlmIChzdHJpbmcubGVuZ3RoKCkg
IT0gbGVuZ3RoIHx8IHN0YXJ0UG9zKQotICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5n
U2hhcmluZ0ltcGwoc3RhcnRQb3MsIGxlbmd0aCk7Ci0KLSAgICByZXR1cm4gY29uc3RydWN0VGV4
dFJ1bihzdHlsZSwgc3RyaW5nLCByZW5kZXJlcigpLnRleHRMZW5ndGgoKSAtIHN0YXJ0UG9zLCBo
eXBoZW5hdGVkU3RyaW5nQnVmZmVyKTsKKyAgICBhc3NlcnQoaGFzSHlwaGVuKCkpOworICAgIGF1
dG8gc3RyaW5nID0gU3RyaW5nVmlldyhyZW5kZXJlcigpLnRleHQoKSkuc3Vic3RyaW5nKHN0YXJ0
KCksIG92ZXJyaWRkZW5MZW5ndGgudmFsdWVPcihsZW4oKSkpOworICAgIFN0cmluZ0J1aWxkZXIg
YnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZChzdHJpbmcpOworICAgIGJ1aWxkZXIuYXBwZW5k
KHN0eWxlLmh5cGhlblN0cmluZygpKTsKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwog
fQogCi1UZXh0UnVuIElubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBTdHJpbmcgc3RyaW5nLCB1bnNpZ25lZCBtYXhpbXVtTGVuZ3RoLCBTdHJp
bmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIpIGNvbnN0CitUZXh0UnVuIElubGluZVRleHRCb3g6
OmNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTdHJpbmdWaWV3IG1h
eWJlU3RyaW5nVG9SZW5kZXIsIE9wdGlvbmFsPHVuc2lnbmVkPiBvdmVycmlkZGVuTGVuZ3RoKSBj
b25zdAogewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLQotICAgIGlm
IChoeXBoZW5hdGVkU3RyaW5nQnVmZmVyKSB7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
aHlwaGVuU3RyaW5nID0gc3R5bGUuaHlwaGVuU3RyaW5nKCk7Ci0gICAgICAgICpoeXBoZW5hdGVk
U3RyaW5nQnVmZmVyID0gc3RyaW5nICsgaHlwaGVuU3RyaW5nOwotICAgICAgICBzdHJpbmcgPSAq
aHlwaGVuYXRlZFN0cmluZ0J1ZmZlcjsKLSAgICAgICAgbWF4aW11bUxlbmd0aCA9IGxlbmd0aCAr
IGh5cGhlblN0cmluZy5sZW5ndGgoKTsKKyAgICBpZiAobWF5YmVTdHJpbmdUb1JlbmRlci5pc051
bGwoKSkgeworICAgICAgICBhdXRvIHN0YXJ0ID0gdGhpcy0+c3RhcnQoKTsKKyAgICAgICAgYXV0
byYgcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpOworICAgICAgICByZXR1cm4gY29uc3RydWN0
VGV4dFJ1bihzdHlsZSwgU3RyaW5nVmlldyhyZW5kZXJlci50ZXh0KCkpLnN1YnN0cmluZyhzdGFy
dCwgb3ZlcnJpZGRlbkxlbmd0aC52YWx1ZU9yKGxlbigpKSksIHJlbmRlcmVyLnRleHRMZW5ndGgo
KSAtIHN0YXJ0KTsKICAgICB9CisgICAgcmV0dXJuIGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIG1h
eWJlU3RyaW5nVG9SZW5kZXIsIG1heWJlU3RyaW5nVG9SZW5kZXIubGVuZ3RoKCkpOworfQogCi0g
ICAgQVNTRVJUKG1heGltdW1MZW5ndGggPj0gbGVuZ3RoKTsKK1RleHRSdW4gSW5saW5lVGV4dEJv
eDo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFN0cmluZ1ZpZXcg
c3RyaW5nLCB1bnNpZ25lZCBtYXhpbXVtTGVuZ3RoKSBjb25zdAoreworICAgIEFTU0VSVChtYXhp
bXVtTGVuZ3RoID49IHN0cmluZy5sZW5ndGgoKSk7CiAKICAgICBUZXh0UnVuIHJ1bihzdHJpbmcs
IHRleHRQb3MoKSwgZXhwYW5zaW9uKCksIGV4cGFuc2lvbkJlaGF2aW9yKCksIGRpcmVjdGlvbigp
LCBkaXJPdmVycmlkZSgpIHx8IHN0eWxlLnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXIsICFy
ZW5kZXJlcigpLmNhblVzZVNpbXBsZUZvbnRDb2RlUGF0aCgpKTsKICAgICBydW4uc2V0VGFiU2l6
ZSghc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCksIHN0eWxlLnRhYlNpemUoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAppbmRleCBlYzE4OTU3NDMzOTFmMGY0ZDQz
MjNlN2M1YjM0NzdlMDBiYWVlZThlLi5iYWI5NDc4OWIwN2QzYmM4Yjg1MjA2MjdhMThjNTA4NzZh
ZDgwOGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKQEAgLTEx
Miw4ICsxMTIsOSBAQCBwcml2YXRlOgogICAgIExheW91dFVuaXQgc2VsZWN0aW9uQm90dG9tKCkg
Y29uc3Q7CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHQoKSBjb25zdDsKIAotICAgIFRl
eHRSdW4gY29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYsIFN0cmluZyogaHlwaGVu
YXRlZFN0cmluZ0J1ZmZlciA9IG51bGxwdHIpIGNvbnN0OwotICAgIFRleHRSdW4gY29uc3RydWN0
VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYsIFN0cmluZywgdW5zaWduZWQgbWF4aW11bUxlbmd0
aCwgU3RyaW5nKiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyID0gbnVsbHB0cikgY29uc3Q7CisgICAg
U3RyaW5nIGh5cGhlbmF0ZWRTdHJpbmdGb3JUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiwgT3B0
aW9uYWw8dW5zaWduZWQ+IG92ZXJyaWRkZW5MZW5ndGggPSBOdWxsb3B0KSBjb25zdDsKKyAgICBU
ZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmLCBTdHJpbmdWaWV3IG1h
eWJlU3RyaW5nVG9SZW5kZXIgPSBTdHJpbmdWaWV3KCksIE9wdGlvbmFsPHVuc2lnbmVkPiBvdmVy
cmlkZGVuTGVuZ3RoID0gTnVsbG9wdCkgY29uc3Q7CisgICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0
UnVuKGNvbnN0IFJlbmRlclN0eWxlJiwgU3RyaW5nVmlldywgdW5zaWduZWQgbWF4aW11bUxlbmd0
aCkgY29uc3Q7CiAKIHB1YmxpYzoKICAgICBGbG9hdFJlY3QgY2FsY3VsYXRlQm91bmRhcmllcygp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEZsb2F0UmVjdCh4KCksIHkoKSwgd2lkdGgoKSwgaGVp
Z2h0KCkpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29t
YmluZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0
LmNwcAppbmRleCBkNzRhNjIwNGU2ZDllYTk4NGY3NTk0NmU5MDEzYmUyNTliMWFjZTkxLi42NzI4
M2Q2ODZkYmY1YzFhODNjMTliOTA1ZGI3YmY2YjJmNGQwZmZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAKQEAgLTg0LDE3ICs4NCwxMiBAQCBP
cHRpb25hbDxGbG9hdFBvaW50PiBSZW5kZXJDb21iaW5lVGV4dDo6Y29tcHV0ZVRleHRPcmlnaW4o
Y29uc3QgRmxvYXRSZWN0JiBib3hSZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUmVu
ZGVyQ29tYmluZVRleHQ6OmdldFN0cmluZ1RvUmVuZGVyKGludCBzdGFydCwgU3RyaW5nJiBzdHJp
bmcsIGludCYgbGVuZ3RoKSBjb25zdAorU3RyaW5nIFJlbmRlckNvbWJpbmVUZXh0OjptYXliZUdl
dENvbWJpbmVkU3RyaW5nRm9yUmVuZGVyaW5nKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoc3RhcnQg
Pj0gMCk7Ci0gICAgaWYgKG1faXNDb21iaW5lZCkgewotICAgICAgICBzdHJpbmcgPSBvcmlnaW5h
bFRleHQoKTsKLSAgICAgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIGlmIChtX2lzQ29tYmluZWQpCisgICAgICAgIHJldHVybiBvcmlnaW5h
bFRleHQoKTsKICAKLSAgICBzdHJpbmcgPSB0ZXh0KCk7Ci0gICAgc3RyaW5nID0gc3RyaW5nLnN1
YnN0cmluZ1NoYXJpbmdJbXBsKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydCksIGxlbmd0aCk7
CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBSZW5kZXJDb21iaW5lVGV4dDo6Y29tYmluZVRl
eHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVU
ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaAppbmRl
eCA0NDJkOGExNGI5NmUzNDY0ZjY2MmE0ZTBjMGM1OGVhNjRkNWI2NjcxLi5hNmI1OWE1MTFkYWEw
YjZkOTRiMzkwYTdiNzljNDExYTA5ZDRmNmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQ29tYmluZVRleHQuaApAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGNvbWJpbmVUZXh0KCk7CiAgICAgT3B0aW9uYWw8RmxvYXRQb2ludD4gY29tcHV0ZVRleHRP
cmlnaW4oY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0KSBjb25zdDsKLSAgICB2b2lkIGdldFN0cmlu
Z1RvUmVuZGVyKGludCwgU3RyaW5nJiwgaW50JiBsZW5ndGgpIGNvbnN0OworICAgIFN0cmluZyBt
YXliZUdldENvbWJpbmVkU3RyaW5nRm9yUmVuZGVyaW5nKCkgY29uc3Q7CiAgICAgYm9vbCBpc0Nv
bWJpbmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbWJpbmVkOyB9CiAgICAgZmxvYXQgY29tYmlu
ZWRUZXh0V2lkdGgoY29uc3QgRm9udENhc2NhZGUmIGZvbnQpIGNvbnN0IHsgcmV0dXJuIGZvbnQu
c2l6ZSgpOyB9CiAgICAgY29uc3QgRm9udENhc2NhZGUmIG9yaWdpbmFsRm9udCgpIGNvbnN0IHsg
cmV0dXJuIHBhcmVudCgpLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCk7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285394</attachid>
            <date>2016-08-04 19:39:23 -0700</date>
            <delta_ts>2016-08-05 00:28:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160584-20160804193757.patch</filename>
            <type>text/plain</type>
            <size>12283</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjIyZjQ3ZWFkMDU2MzEz
ZjI3YzY4YmMyNjYzMDc2MmJhOTAxMDNiMS4uOGY1NWExODI1OWNjOTVkZDAzNDkwZTA3NTI1YjE3
Y2ViNjJmNTE2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE2LTA4LTA0ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgRW5zdXJlIFN0
cmluZ1ZpZXcgbGlmZXRpbWUgaXMgY29ycmVjdCBpbnNpZGUgSW5saW5lVGV4dEJveAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNTg0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQSBUZXh0UnVuIGNvbnRh
aW5zIGEgU3RyaW5nVmlldy4gUHJldmlvdXNseSwgd2UgaGFkIGEgaGVscGVyIGZ1bmN0aW9uIHdo
aWNoCisgICAgICAgIGNvdWxkIHBvc3NpYmx5IGNyZWF0ZSBhIG5ldyBzdHJpbmcsIGFuZCB0aGVu
IGNyZWF0ZSBhIFRleHRSdW4gd2hvc2UgU3RyaW5nVmlldworICAgICAgICBwb2ludGVkIGluc2lk
ZSB0aGlzIG5ldyBzdHJpbmcuIFRoZW4sIHRoZSBzdHJpbmcgd291bGQgYmUgZGVzdHJveWVkIGJl
Y2F1c2UgaXQKKyAgICAgICAgd2FzIG9uIHRoZSBzdGFjay4KKworICAgICAgICBMdWNraWx5LCB0
aGlzIGlzIGJlbmlnbiBiZWNhdXNlIHRoaXMgbmV3IHN0cmluZyB3b3VsZCBhbHdheXMgc2hhcmUg
YQorICAgICAgICBTdHJpbmdJbXBsIHdpdGggdGhlIHN0cmluZyBwYXNzZWQgaW50byB0aGUgZnVu
Y3Rpb24gKGFuZCB0aGUgU3RyaW5nVmlldworICAgICAgICB3b3VsZCBwb2ludCBpbnRvIHRoaXMg
U3RyaW5nSW1wbCkuIEhvd2V2ZXIsIHJlbHlpbmcgb24gdGhpcyBpcyBkYW5nZXJvdXMKKyAgICAg
ICAgYW5kIHdlIGFyZSB0cnlpbmcgdG8gZW5mb3JjZSBTdHJpbmdWaWV3IGxpZmV0aW1lIGNoZWNr
cyBpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYw
Mzg0LgorCisgICAgICAgIFRoZSBzb2x1dGlvbiBpcyB0byBtYWtlIGEgaGVscGVyIGZ1bmN0aW9u
IHdoaWNoIHJldHVybnMgdGhpcyBidWlsdCBzdHJpbmcKKyAgICAgICAgc28gdGhhdCB0aGUgY2Fs
bGVyIGNhbiBvd24gdGhpcyBidWlsdCBzdHJpbmcsIHRoZXJlYnkgZXh0ZW5kaW5nIGl0cyBsaWZl
dGltZS4KKyAgICAgICAgVW5mb3J0dW5hdGVseSwgdGhpcyBidWlsdCBzdHJpbmcgY2FuJ3QgYmUg
YSBTdHJpbmdWaWV3IGJlY2F1c2UgdGhlIHNhbWUKKyAgICAgICAgbWVjaGFuaXNtIG11c3QgYmUg
dXNlZCBmb3IgdGV4dC1jb21iaW5lLCB3aGljaCByZXR1cm5zIG9yaWdpbmFsVGV4dCgpLCB3aGlj
aAorICAgICAgICBtYXkgcmV0dXJuIGEgYnVpbHQgc3RyaW5nIGlmIGl0IGlzIGEgUmVuZGVyQ291
bnRlci4gUGVyaGFwcyBpdCB3b3VsZCBiZQorICAgICAgICB2YWx1YWJsZSB0byBtaWdyYXRlIFJl
bmRlckNvdW50ZXI6Om9yaWdpbmFsVGV4dCgpIHRvIHNvbWV0aGluZyBlbHNlLCBvciB0bworICAg
ICAgICBkaXZvcmNlIHRleHQtY29tYmluZSBmcm9tIG9yaWdpbmFsVGV4dCgpLCBidXQgdGhhdCBp
cyBvdXQgb2Ygc2NvcGUgZm9yIHRoaXMKKyAgICAgICAgcGF0Y2guCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICog
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRC
b3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnNlbGVjdGlvblN0
YXJ0RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6Omh5cGhlbmF0ZWRTdHJpbmdGb3JU
ZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRS
dW4pOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNv
bWJpbmVUZXh0OjptYXliZUdldENvbWJpbmVkU3RyaW5nRm9yUmVuZGVyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckNvbWJpbmVUZXh0OjpnZXRTdHJpbmdUb1JlbmRlcik6IERlbGV0ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0Lmg6CisKIDIwMTYtMDgtMDQg
IEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBUcnkgdG8g
Zml4IHRoZSBHVEsrIGJ1aWxkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCmluZGV4IGNkODAyZWIwM2YyNDZiNTZhZTdkOTFjNjdmNzg5Yjc5NDg0MjNkMjkuLmE2
N2NkN2IwNzU0OTZjYTRkZmI3YmIwZmJmZWI2NjQ1ZmU5ZTAyY2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRl
ICJicmVha19saW5lcy5oIgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0yMDQsOSArMjA1LDEwIEBAIExheW91dFJlY3QgSW5saW5lVGV4
dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KGludCBzdGFydFBvcywgaW50IGVuZFBvcykgY29uc3QK
ICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CiAg
ICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBmb250VG9Vc2UobGluZVN0eWxlLCByZW5kZXJl
cigpKTsKIAotICAgIFN0cmluZyBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyOwotICAgIGJvb2wgcmVz
cGVjdEh5cGhlbiA9IGVQb3MgPT0gbV9sZW4gJiYgaGFzSHlwaGVuKCk7Ci0gICAgVGV4dFJ1biB0
ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihsaW5lU3R5bGUsIHJlc3BlY3RIeXBoZW4gPyAmaHlw
aGVuYXRlZFN0cmluZ0J1ZmZlciA6IDApOworICAgIFN0cmluZyBoeXBoZW5hdGVkU3RyaW5nOwor
ICAgIGlmIChlUG9zID09IG1fbGVuICYmIGhhc0h5cGhlbigpKQorICAgICAgICBoeXBoZW5hdGVk
U3RyaW5nID0gaHlwaGVuYXRlZFN0cmluZ0ZvclRleHRSdW4obGluZVN0eWxlKTsKKyAgICBUZXh0
UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKGxpbmVTdHlsZSwgaHlwaGVuYXRlZFN0cmlu
Zyk7CiAKICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSBMYXlvdXRSZWN0KExheW91dFBv
aW50KGxvZ2ljYWxMZWZ0KCksIHNlbGVjdGlvblRvcCksIExheW91dFNpemUobV9sb2dpY2FsV2lk
dGgsIHNlbGVjdGlvbkhlaWdodCkpOwogICAgIC8vIEF2b2lkIGNvbXB1dGluZyB0aGUgZm9udCB3
aWR0aCB3aGVuIHRoZSBlbnRpcmUgbGluZSBib3ggaXMgc2VsZWN0ZWQgYXMgYW4gb3B0aW1pemF0
aW9uLgpAQCAtNDk3LDI1ICs0OTksMTUgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LAogICAgIH0K
IAogICAgIC8vIDIuIE5vdyBwYWludCB0aGUgZm9yZWdyb3VuZCwgaW5jbHVkaW5nIHRleHQgYW5k
IGRlY29yYXRpb25zIGxpa2UgdW5kZXJsaW5lL292ZXJsaW5lIChpbiBxdWlya3MgbW9kZSBvbmx5
KS4KLSAgICBpbnQgbGVuZ3RoID0gbV9sZW47Ci0gICAgaW50IG1heGltdW1MZW5ndGg7Ci0gICAg
U3RyaW5nIHN0cmluZzsKLSAgICBpZiAoIWNvbWJpbmVkVGV4dCkgewotICAgICAgICBzdHJpbmcg
PSByZW5kZXJlcigpLnRleHQoKTsKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihs
ZW5ndGgpICE9IHN0cmluZy5sZW5ndGgoKSB8fCBtX3N0YXJ0KSB7Ci0gICAgICAgICAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zdGFy
dCArIGxlbmd0aCkgPD0gc3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgICAgIHN0cmluZyA9IHN0
cmluZy5zdWJzdHJpbmdTaGFyaW5nSW1wbChtX3N0YXJ0LCBsZW5ndGgpOwotICAgICAgICB9Ci0g
ICAgICAgIG1heGltdW1MZW5ndGggPSByZW5kZXJlcigpLnRleHRMZW5ndGgoKSAtIG1fc3RhcnQ7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY29tYmluZWRUZXh0LT5nZXRTdHJpbmdUb1JlbmRlciht
X3N0YXJ0LCBzdHJpbmcsIGxlbmd0aCk7Ci0gICAgICAgIG1heGltdW1MZW5ndGggPSBsZW5ndGg7
Ci0gICAgfQorICAgIFN0cmluZyBzdHJpbmdUb1JlbmRlcjsKKyAgICAvLyBEb24ndCBoeXBoZW5h
dGUgY29tYmluZWQgdGV4dC4KKyAgICBpZiAoY29tYmluZWRUZXh0KQorICAgICAgICBzdHJpbmdU
b1JlbmRlciA9IGNvbWJpbmVkVGV4dC0+bWF5YmVHZXRDb21iaW5lZFN0cmluZ0ZvclJlbmRlcmlu
ZygpOworICAgIGVsc2UgaWYgKGhhc0h5cGhlbigpKQorICAgICAgICBzdHJpbmdUb1JlbmRlciA9
IGh5cGhlbmF0ZWRTdHJpbmdGb3JUZXh0UnVuKGxpbmVTdHlsZSk7CiAKLSAgICBTdHJpbmcgaHlw
aGVuYXRlZFN0cmluZ0J1ZmZlcjsKLSAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0
UnVuKGxpbmVTdHlsZSwgc3RyaW5nLCBtYXhpbXVtTGVuZ3RoLCBoYXNIeXBoZW4oKSA/ICZoeXBo
ZW5hdGVkU3RyaW5nQnVmZmVyIDogbnVsbHB0cik7Ci0gICAgaWYgKGhhc0h5cGhlbigpKQotICAg
ICAgICBsZW5ndGggPSB0ZXh0UnVuLmxlbmd0aCgpOworICAgIFRleHRSdW4gdGV4dFJ1biA9IGNv
bnN0cnVjdFRleHRSdW4obGluZVN0eWxlLCBzdHJpbmdUb1JlbmRlcik7CisgICAgdW5zaWduZWQg
bGVuZ3RoID0gdGV4dFJ1bi5sZW5ndGgoKTsKIAogICAgIGludCBzZWxlY3Rpb25TdGFydCA9IDA7
CiAgICAgaW50IHNlbGVjdGlvbkVuZCA9IDA7CkBAIC02MDAsNyArNTkyLDcgQEAgc3RkOjpwYWly
PGludCwgaW50PiBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZCgpIGNvbnN0CiB7CiAg
ICAgYXV0byBzZWxlY3Rpb25TdGF0ZSA9IHJlbmRlcmVyKCkuc2VsZWN0aW9uU3RhdGUoKTsKICAg
ICBpZiAoc2VsZWN0aW9uU3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25JbnNpZGUpCi0g
ICAgICAgIHJldHVybiB7MCwgbV9sZW59OworICAgICAgICByZXR1cm4geyAwLCBtX2xlbiB9Owog
ICAgIAogICAgIGludCBzdGFydDsKICAgICBpbnQgZW5kOwpAQCAtNjM2LDIwICs2MjgsMTcgQEAg
dm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UG9pbnQmIGIKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihjb250ZXh0KTsKICAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQoY29udGV4dCwg
VGV4dFBhaW50U3R5bGUoYykpOyAvLyBEb24ndCBkcmF3IHRleHQgYXQgYWxsIQotICAgIAorCiAg
ICAgLy8gSWYgdGhlIHRleHQgaXMgdHJ1bmNhdGVkLCBsZXQgdGhlIHRoaW5nIGJlaW5nIHBhaW50
ZWQgaW4gdGhlIHRydW5jYXRpb24KICAgICAvLyBkcmF3IGl0cyBvd24gaGlnaGxpZ2h0LgotICAg
IGludCBsZW5ndGggPSBtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbiA/IG1fdHJ1bmNhdGlv
biA6IG1fbGVuOwotICAgIFN0cmluZyBzdHJpbmcgPSByZW5kZXJlcigpLnRleHQoKTsKIAotICAg
IGlmIChzdHJpbmcubGVuZ3RoKCkgIT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCkgfHwg
bV9zdGFydCkgewotICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obV9zdGFydCArIGxlbmd0aCkgPD0gc3RyaW5nLmxlbmd0aCgpKTsK
LSAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZ1NoYXJpbmdJbXBsKG1fc3RhcnQsIGxl
bmd0aCk7Ci0gICAgfQorICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fdHJ1bmNhdGlvbiAhPSBjTm9U
cnVuY2F0aW9uID8gbV90cnVuY2F0aW9uIDogbGVuKCk7CiAKLSAgICBTdHJpbmcgaHlwaGVuYXRl
ZFN0cmluZ0J1ZmZlcjsKLSAgICBib29sIHJlc3BlY3RIeXBoZW4gPSBzZWxlY3Rpb25FbmQgPT0g
bGVuZ3RoICYmIGhhc0h5cGhlbigpOwotICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRl
eHRSdW4oc3R5bGUsIHN0cmluZywgcmVuZGVyZXIoKS50ZXh0TGVuZ3RoKCkgLSBtX3N0YXJ0LCBy
ZXNwZWN0SHlwaGVuID8gJmh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIgOiBudWxscHRyKTsKKyAgICBT
dHJpbmcgaHlwaGVuYXRlZFN0cmluZzsKKyAgICBib29sIHJlc3BlY3RIeXBoZW4gPSBzZWxlY3Rp
b25FbmQgPT0gc3RhdGljX2Nhc3Q8aW50PihsZW5ndGgpICYmIGhhc0h5cGhlbigpOworICAgIGlm
IChyZXNwZWN0SHlwaGVuKQorICAgICAgICBoeXBoZW5hdGVkU3RyaW5nRm9yVGV4dFJ1bihzdHls
ZSwgbGVuZ3RoKTsKKyAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxl
LCBoeXBoZW5hdGVkU3RyaW5nLCBPcHRpb25hbDx1bnNpZ25lZD4obGVuZ3RoKSk7CiAgICAgaWYg
KHJlc3BlY3RIeXBoZW4pCiAgICAgICAgIHNlbGVjdGlvbkVuZCA9IHRleHRSdW4ubGVuZ3RoKCk7
CiAKQEAgLTEwMTYsMzIgKzEwMDUsMjkgQEAgZmxvYXQgSW5saW5lVGV4dEJveDo6cG9zaXRpb25G
b3JPZmZzZXQoaW50IG9mZnNldCkgY29uc3QKICAgICByZXR1cm4gc25hcFJlY3RUb0RldmljZVBp
eGVsc1dpdGhXcml0aW5nRGlyZWN0aW9uKHNlbGVjdGlvblJlY3QsIHJlbmRlcmVyKCkuZG9jdW1l
bnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCBydW4ubHRyKCkpLm1heFgoKTsKIH0KIAotVGV4dFJ1
biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgU3RyaW5nKiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyKSBjb25zdAorU3RyaW5nIElubGluZVRl
eHRCb3g6Omh5cGhlbmF0ZWRTdHJpbmdGb3JUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgT3B0aW9uYWw8dW5zaWduZWQ+IG92ZXJyaWRkZW5MZW5ndGgpIGNvbnN0CiB7Ci0gICAgQVNT
RVJUKHJlbmRlcmVyKCkudGV4dCgpKTsKLQotICAgIFN0cmluZyBzdHJpbmcgPSByZW5kZXJlcigp
LnRleHQoKTsKLSAgICB1bnNpZ25lZCBzdGFydFBvcyA9IHN0YXJ0KCk7Ci0gICAgdW5zaWduZWQg
bGVuZ3RoID0gbGVuKCk7Ci0KLSAgICBpZiAoc3RyaW5nLmxlbmd0aCgpICE9IGxlbmd0aCB8fCBz
dGFydFBvcykKLSAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZ1NoYXJpbmdJbXBsKHN0
YXJ0UG9zLCBsZW5ndGgpOwotCi0gICAgcmV0dXJuIGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIHN0
cmluZywgcmVuZGVyZXIoKS50ZXh0TGVuZ3RoKCkgLSBzdGFydFBvcywgaHlwaGVuYXRlZFN0cmlu
Z0J1ZmZlcik7CisgICAgYXNzZXJ0KGhhc0h5cGhlbigpKTsKKyAgICBhdXRvIHN0cmluZyA9IFN0
cmluZ1ZpZXcocmVuZGVyZXIoKS50ZXh0KCkpLnN1YnN0cmluZyhzdGFydCgpLCBvdmVycmlkZGVu
TGVuZ3RoLnZhbHVlT3IobGVuKCkpKTsKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAg
YnVpbGRlci5hcHBlbmQoc3RyaW5nKTsKKyAgICBidWlsZGVyLmFwcGVuZChzdHlsZS5oeXBoZW5T
dHJpbmcoKSk7CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAotVGV4dFJ1biBJ
bmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
U3RyaW5nIHN0cmluZywgdW5zaWduZWQgbWF4aW11bUxlbmd0aCwgU3RyaW5nKiBoeXBoZW5hdGVk
U3RyaW5nQnVmZmVyKSBjb25zdAorVGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0
UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU3RyaW5nVmlldyBtYXliZVN0cmluZ1RvUmVu
ZGVyLCBPcHRpb25hbDx1bnNpZ25lZD4gb3ZlcnJpZGRlbkxlbmd0aCkgY29uc3QKIHsKLSAgICB1
bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0KLSAgICBpZiAoaHlwaGVuYXRlZFN0
cmluZ0J1ZmZlcikgewotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGh5cGhlblN0cmluZyA9
IHN0eWxlLmh5cGhlblN0cmluZygpOwotICAgICAgICAqaHlwaGVuYXRlZFN0cmluZ0J1ZmZlciA9
IHN0cmluZyArIGh5cGhlblN0cmluZzsKLSAgICAgICAgc3RyaW5nID0gKmh5cGhlbmF0ZWRTdHJp
bmdCdWZmZXI7Ci0gICAgICAgIG1heGltdW1MZW5ndGggPSBsZW5ndGggKyBoeXBoZW5TdHJpbmcu
bGVuZ3RoKCk7CisgICAgaWYgKG1heWJlU3RyaW5nVG9SZW5kZXIuaXNOdWxsKCkpIHsKKyAgICAg
ICAgYXV0byBzdGFydCA9IHRoaXMtPnN0YXJ0KCk7CisgICAgICAgIGF1dG8mIHJlbmRlcmVyID0g
dGhpcy0+cmVuZGVyZXIoKTsKKyAgICAgICAgcmV0dXJuIGNvbnN0cnVjdFRleHRSdW4oc3R5bGUs
IFN0cmluZ1ZpZXcocmVuZGVyZXIudGV4dCgpKS5zdWJzdHJpbmcoc3RhcnQsIG92ZXJyaWRkZW5M
ZW5ndGgudmFsdWVPcihsZW4oKSkpLCByZW5kZXJlci50ZXh0TGVuZ3RoKCkgLSBzdGFydCk7CiAg
ICAgfQorICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBtYXliZVN0cmluZ1RvUmVu
ZGVyLCBtYXliZVN0cmluZ1RvUmVuZGVyLmxlbmd0aCgpKTsKK30KIAotICAgIEFTU0VSVChtYXhp
bXVtTGVuZ3RoID49IGxlbmd0aCk7CitUZXh0UnVuIElubGluZVRleHRCb3g6OmNvbnN0cnVjdFRl
eHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTdHJpbmdWaWV3IHN0cmluZywgdW5zaWdu
ZWQgbWF4aW11bUxlbmd0aCkgY29uc3QKK3sKKyAgICBBU1NFUlQobWF4aW11bUxlbmd0aCA+PSBz
dHJpbmcubGVuZ3RoKCkpOwogCiAgICAgVGV4dFJ1biBydW4oc3RyaW5nLCB0ZXh0UG9zKCksIGV4
cGFuc2lvbigpLCBleHBhbnNpb25CZWhhdmlvcigpLCBkaXJlY3Rpb24oKSwgZGlyT3ZlcnJpZGUo
KSB8fCBzdHlsZS5ydGxPcmRlcmluZygpID09IFZpc3VhbE9yZGVyLCAhcmVuZGVyZXIoKS5jYW5V
c2VTaW1wbGVGb250Q29kZVBhdGgoKSk7CiAgICAgcnVuLnNldFRhYlNpemUoIXN0eWxlLmNvbGxh
cHNlV2hpdGVTcGFjZSgpLCBzdHlsZS50YWJTaXplKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmgKaW5kZXggZWMxODk1NzQzMzkxZjBmNGQ0MzIzZTdjNWIzNDc3ZTAw
YmFlZWU4ZS4uYmFiOTQ3ODliMDdkM2JjOGI4NTIwNjI3YTE4YzUwODc2YWQ4MDhiNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCkBAIC0xMTIsOCArMTEyLDkgQEAg
cHJpdmF0ZToKICAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkJvdHRvbSgpIGNvbnN0OwogICAgIExh
eW91dFVuaXQgc2VsZWN0aW9uSGVpZ2h0KCkgY29uc3Q7CiAKLSAgICBUZXh0UnVuIGNvbnN0cnVj
dFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmLCBTdHJpbmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZm
ZXIgPSBudWxscHRyKSBjb25zdDsKLSAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3Qg
UmVuZGVyU3R5bGUmLCBTdHJpbmcsIHVuc2lnbmVkIG1heGltdW1MZW5ndGgsIFN0cmluZyogaHlw
aGVuYXRlZFN0cmluZ0J1ZmZlciA9IG51bGxwdHIpIGNvbnN0OworICAgIFN0cmluZyBoeXBoZW5h
dGVkU3RyaW5nRm9yVGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYsIE9wdGlvbmFsPHVuc2lnbmVk
PiBvdmVycmlkZGVuTGVuZ3RoID0gTnVsbG9wdCkgY29uc3Q7CisgICAgVGV4dFJ1biBjb25zdHJ1
Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiwgU3RyaW5nVmlldyBtYXliZVN0cmluZ1RvUmVu
ZGVyID0gU3RyaW5nVmlldygpLCBPcHRpb25hbDx1bnNpZ25lZD4gb3ZlcnJpZGRlbkxlbmd0aCA9
IE51bGxvcHQpIGNvbnN0OworICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5k
ZXJTdHlsZSYsIFN0cmluZ1ZpZXcsIHVuc2lnbmVkIG1heGltdW1MZW5ndGgpIGNvbnN0OwogCiBw
dWJsaWM6CiAgICAgRmxvYXRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBGbG9hdFJlY3QoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAKaW5kZXggZDc0
YTYyMDRlNmQ5ZWE5ODRmNzU5NDZlOTAxM2JlMjU5YjFhY2U5MS4uNjcyODNkNjg2ZGJmNWMxYTgz
YzE5YjkwNWRiN2JmNmIyZjRkMGZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQ29tYmluZVRleHQuY3BwCkBAIC04NCwxNyArODQsMTIgQEAgT3B0aW9uYWw8RmxvYXRQ
b2ludD4gUmVuZGVyQ29tYmluZVRleHQ6OmNvbXB1dGVUZXh0T3JpZ2luKGNvbnN0IEZsb2F0UmVj
dCYgYm94UmUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFJlbmRlckNvbWJpbmVUZXh0
OjpnZXRTdHJpbmdUb1JlbmRlcihpbnQgc3RhcnQsIFN0cmluZyYgc3RyaW5nLCBpbnQmIGxlbmd0
aCkgY29uc3QKK1N0cmluZyBSZW5kZXJDb21iaW5lVGV4dDo6bWF5YmVHZXRDb21iaW5lZFN0cmlu
Z0ZvclJlbmRlcmluZygpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHN0YXJ0ID49IDApOwotICAgIGlm
IChtX2lzQ29tYmluZWQpIHsKLSAgICAgICAgc3RyaW5nID0gb3JpZ2luYWxUZXh0KCk7Ci0gICAg
ICAgIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAobV9pc0NvbWJpbmVkKQorICAgICAgICByZXR1cm4gb3JpZ2luYWxUZXh0KCk7CiAgCi0g
ICAgc3RyaW5nID0gdGV4dCgpOwotICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHJpbmdTaGFyaW5n
SW1wbChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnQpLCBsZW5ndGgpOworICAgIHJldHVybiB7
IH07CiB9CiAKIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6OmNvbWJpbmVUZXh0KCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgKaW5kZXggNDQyZDhhMTRiOTZl
MzQ2NGY2NjJhNGUwYzBjNThlYTY0ZDViNjY3MS4uYTZiNTlhNTExZGFhMGI2ZDk0YjM5MGE3Yjc5
YzQxMWEwOWQ0ZjZhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckNvbWJpbmVUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJp
bmVUZXh0LmgKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjb21iaW5lVGV4
dCgpOwogICAgIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IGNvbXB1dGVUZXh0T3JpZ2luKGNvbnN0IEZs
b2F0UmVjdCYgYm94UmVjdCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRTdHJpbmdUb1JlbmRlcihpbnQs
IFN0cmluZyYsIGludCYgbGVuZ3RoKSBjb25zdDsKKyAgICBTdHJpbmcgbWF5YmVHZXRDb21iaW5l
ZFN0cmluZ0ZvclJlbmRlcmluZygpIGNvbnN0OwogICAgIGJvb2wgaXNDb21iaW5lZCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNDb21iaW5lZDsgfQogICAgIGZsb2F0IGNvbWJpbmVkVGV4dFdpZHRoKGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250KSBjb25zdCB7IHJldHVybiBmb250LnNpemUoKTsgfQogICAg
IGNvbnN0IEZvbnRDYXNjYWRlJiBvcmlnaW5hbEZvbnQoKSBjb25zdCB7IHJldHVybiBwYXJlbnQo
KS0+c3R5bGUoKS5mb250Q2FzY2FkZSgpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285408</attachid>
            <date>2016-08-05 00:28:41 -0700</date>
            <delta_ts>2016-08-05 22:59:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160584-20160805002715.patch</filename>
            <type>text/plain</type>
            <size>12335</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTNkZDY5OTI2MWYxMTY0
MjcxNmVkMDQ0NWI5NzYzNTIzNjBjZTg5Yy4uZmQ0NmY5ODdlMjNmNTJhYTdlOGU0MDZkYTUyMDQ4
NGVkNzc2YzRjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE2LTA4LTA1ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgRW5zdXJlIFN0
cmluZ1ZpZXcgbGlmZXRpbWUgaXMgY29ycmVjdCBpbnNpZGUgSW5saW5lVGV4dEJveAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNTg0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQSBUZXh0UnVuIGNvbnRh
aW5zIGEgU3RyaW5nVmlldy4gUHJldmlvdXNseSwgd2UgaGFkIGEgaGVscGVyIGZ1bmN0aW9uIHdo
aWNoCisgICAgICAgIGNvdWxkIHBvc3NpYmx5IGNyZWF0ZSBhIG5ldyBzdHJpbmcsIGFuZCB0aGVu
IGNyZWF0ZSBhIFRleHRSdW4gd2hvc2UgU3RyaW5nVmlldworICAgICAgICBwb2ludGVkIGluc2lk
ZSB0aGlzIG5ldyBzdHJpbmcuIFRoZW4sIHRoZSBzdHJpbmcgd291bGQgYmUgZGVzdHJveWVkIGJl
Y2F1c2UgaXQKKyAgICAgICAgd2FzIG9uIHRoZSBzdGFjay4KKworICAgICAgICBMdWNraWx5LCB0
aGlzIGlzIGJlbmlnbiBiZWNhdXNlIHRoaXMgbmV3IHN0cmluZyB3b3VsZCBhbHdheXMgc2hhcmUg
YQorICAgICAgICBTdHJpbmdJbXBsIHdpdGggdGhlIHN0cmluZyBwYXNzZWQgaW50byB0aGUgZnVu
Y3Rpb24gKGFuZCB0aGUgU3RyaW5nVmlldworICAgICAgICB3b3VsZCBwb2ludCBpbnRvIHRoaXMg
U3RyaW5nSW1wbCkuIEhvd2V2ZXIsIHJlbHlpbmcgb24gdGhpcyBpcyBkYW5nZXJvdXMKKyAgICAg
ICAgYW5kIHdlIGFyZSB0cnlpbmcgdG8gZW5mb3JjZSBTdHJpbmdWaWV3IGxpZmV0aW1lIGNoZWNr
cyBpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYw
Mzg0LgorCisgICAgICAgIFRoZSBzb2x1dGlvbiBpcyB0byBtYWtlIGEgaGVscGVyIGZ1bmN0aW9u
IHdoaWNoIHJldHVybnMgdGhpcyBidWlsdCBzdHJpbmcKKyAgICAgICAgc28gdGhhdCB0aGUgY2Fs
bGVyIGNhbiBvd24gdGhpcyBidWlsdCBzdHJpbmcsIHRoZXJlYnkgZXh0ZW5kaW5nIGl0cyBsaWZl
dGltZS4KKyAgICAgICAgVW5mb3J0dW5hdGVseSwgdGhpcyBidWlsdCBzdHJpbmcgY2FuJ3QgYmUg
YSBTdHJpbmdWaWV3IGJlY2F1c2UgdGhlIHNhbWUKKyAgICAgICAgbWVjaGFuaXNtIG11c3QgYmUg
dXNlZCBmb3IgdGV4dC1jb21iaW5lLCB3aGljaCByZXR1cm5zIG9yaWdpbmFsVGV4dCgpLCB3aGlj
aAorICAgICAgICBtYXkgcmV0dXJuIGEgYnVpbHQgc3RyaW5nIGlmIGl0IGlzIGEgUmVuZGVyQ291
bnRlci4gUGVyaGFwcyBpdCB3b3VsZCBiZQorICAgICAgICB2YWx1YWJsZSB0byBtaWdyYXRlIFJl
bmRlckNvdW50ZXI6Om9yaWdpbmFsVGV4dCgpIHRvIHNvbWV0aGluZyBlbHNlLCBvciB0bworICAg
ICAgICBkaXZvcmNlIHRleHQtY29tYmluZSBmcm9tIG9yaWdpbmFsVGV4dCgpLCBidXQgdGhhdCBp
cyBvdXQgb2Ygc2NvcGUgZm9yIHRoaXMKKyAgICAgICAgcGF0Y2guCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICog
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRC
b3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnNlbGVjdGlvblN0
YXJ0RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6Omh5cGhlbmF0ZWRTdHJpbmdGb3JU
ZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRS
dW4pOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNv
bWJpbmVUZXh0OjptYXliZUdldENvbWJpbmVkU3RyaW5nRm9yUmVuZGVyaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckNvbWJpbmVUZXh0OjpnZXRTdHJpbmdUb1JlbmRlcik6IERlbGV0ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0Lmg6CisKIDIwMTYtMDgtMDUg
IFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlciBzaG91bGQgcmVwb3J0IGFuIGVycm9yIHdoZW4gZ2V0dGluZyBhIG51bGwg
Q2FjaGVkUmVzb3VyY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNw
cAppbmRleCBjZDgwMmViMDNmMjQ2YjU2YWU3ZDkxYzY3Zjc4OWI3OTQ4NDIzZDI5Li4xMDE0M2E0
YTExNWY4MTNmZDBiZTc4NmYxY2U4NTVmMmE3OTYxNzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAiYnJl
YWtfbGluZXMuaCIKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtMjA0LDkgKzIwNSwxMCBAQCBMYXlvdXRSZWN0IElubGluZVRleHRCb3g6
OmxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpIGNvbnN0CiAgICAg
Y29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOwogICAgIGNv
bnN0IEZvbnRDYXNjYWRlJiBmb250ID0gZm9udFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7
CiAKLSAgICBTdHJpbmcgaHlwaGVuYXRlZFN0cmluZ0J1ZmZlcjsKLSAgICBib29sIHJlc3BlY3RI
eXBoZW4gPSBlUG9zID09IG1fbGVuICYmIGhhc0h5cGhlbigpOwotICAgIFRleHRSdW4gdGV4dFJ1
biA9IGNvbnN0cnVjdFRleHRSdW4obGluZVN0eWxlLCByZXNwZWN0SHlwaGVuID8gJmh5cGhlbmF0
ZWRTdHJpbmdCdWZmZXIgOiAwKTsKKyAgICBTdHJpbmcgaHlwaGVuYXRlZFN0cmluZzsKKyAgICBp
ZiAoZVBvcyA9PSBtX2xlbiAmJiBoYXNIeXBoZW4oKSkKKyAgICAgICAgaHlwaGVuYXRlZFN0cmlu
ZyA9IGh5cGhlbmF0ZWRTdHJpbmdGb3JUZXh0UnVuKGxpbmVTdHlsZSk7CisgICAgVGV4dFJ1biB0
ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihsaW5lU3R5bGUsIGh5cGhlbmF0ZWRTdHJpbmcpOwog
CiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdChMYXlvdXRQb2ludChs
b2dpY2FsTGVmdCgpLCBzZWxlY3Rpb25Ub3ApLCBMYXlvdXRTaXplKG1fbG9naWNhbFdpZHRoLCBz
ZWxlY3Rpb25IZWlnaHQpKTsKICAgICAvLyBBdm9pZCBjb21wdXRpbmcgdGhlIGZvbnQgd2lkdGgg
d2hlbiB0aGUgZW50aXJlIGxpbmUgYm94IGlzIHNlbGVjdGVkIGFzIGFuIG9wdGltaXphdGlvbi4K
QEAgLTQ5NywyNSArNDk5LDE1IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwKICAgICB9CiAKICAg
ICAvLyAyLiBOb3cgcGFpbnQgdGhlIGZvcmVncm91bmQsIGluY2x1ZGluZyB0ZXh0IGFuZCBkZWNv
cmF0aW9ucyBsaWtlIHVuZGVybGluZS9vdmVybGluZSAoaW4gcXVpcmtzIG1vZGUgb25seSkuCi0g
ICAgaW50IGxlbmd0aCA9IG1fbGVuOwotICAgIGludCBtYXhpbXVtTGVuZ3RoOwotICAgIFN0cmlu
ZyBzdHJpbmc7Ci0gICAgaWYgKCFjb21iaW5lZFRleHQpIHsKLSAgICAgICAgc3RyaW5nID0gcmVu
ZGVyZXIoKS50ZXh0KCk7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3Ro
KSAhPSBzdHJpbmcubGVuZ3RoKCkgfHwgbV9zdGFydCkgewotICAgICAgICAgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc3RhcnQgKyBs
ZW5ndGgpIDw9IHN0cmluZy5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcu
c3Vic3RyaW5nU2hhcmluZ0ltcGwobV9zdGFydCwgbGVuZ3RoKTsKLSAgICAgICAgfQotICAgICAg
ICBtYXhpbXVtTGVuZ3RoID0gcmVuZGVyZXIoKS50ZXh0TGVuZ3RoKCkgLSBtX3N0YXJ0OwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGNvbWJpbmVkVGV4dC0+Z2V0U3RyaW5nVG9SZW5kZXIobV9zdGFy
dCwgc3RyaW5nLCBsZW5ndGgpOwotICAgICAgICBtYXhpbXVtTGVuZ3RoID0gbGVuZ3RoOwotICAg
IH0KKyAgICBTdHJpbmcgc3RyaW5nVG9SZW5kZXI7CisgICAgLy8gRG9uJ3QgaHlwaGVuYXRlIGNv
bWJpbmVkIHRleHQuCisgICAgaWYgKGNvbWJpbmVkVGV4dCkKKyAgICAgICAgc3RyaW5nVG9SZW5k
ZXIgPSBjb21iaW5lZFRleHQtPm1heWJlR2V0Q29tYmluZWRTdHJpbmdGb3JSZW5kZXJpbmcoKTsK
KyAgICBlbHNlIGlmIChoYXNIeXBoZW4oKSkKKyAgICAgICAgc3RyaW5nVG9SZW5kZXIgPSBoeXBo
ZW5hdGVkU3RyaW5nRm9yVGV4dFJ1bihsaW5lU3R5bGUpOwogCi0gICAgU3RyaW5nIGh5cGhlbmF0
ZWRTdHJpbmdCdWZmZXI7Ci0gICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihs
aW5lU3R5bGUsIHN0cmluZywgbWF4aW11bUxlbmd0aCwgaGFzSHlwaGVuKCkgPyAmaHlwaGVuYXRl
ZFN0cmluZ0J1ZmZlciA6IG51bGxwdHIpOwotICAgIGlmIChoYXNIeXBoZW4oKSkKLSAgICAgICAg
bGVuZ3RoID0gdGV4dFJ1bi5sZW5ndGgoKTsKKyAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1
Y3RUZXh0UnVuKGxpbmVTdHlsZSwgc3RyaW5nVG9SZW5kZXIpOworICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHRleHRSdW4ubGVuZ3RoKCk7CiAKICAgICBpbnQgc2VsZWN0aW9uU3RhcnQgPSAwOwogICAg
IGludCBzZWxlY3Rpb25FbmQgPSAwOwpAQCAtNjAwLDcgKzU5Miw3IEBAIHN0ZDo6cGFpcjxpbnQs
IGludD4gSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhcnRFbmQoKSBjb25zdAogewogICAgIGF1
dG8gc2VsZWN0aW9uU3RhdGUgPSByZW5kZXJlcigpLnNlbGVjdGlvblN0YXRlKCk7CiAgICAgaWYg
KHNlbGVjdGlvblN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uSW5zaWRlKQotICAgICAg
ICByZXR1cm4gezAsIG1fbGVufTsKKyAgICAgICAgcmV0dXJuIHsgMCwgbV9sZW4gfTsKICAgICAK
ICAgICBpbnQgc3RhcnQ7CiAgICAgaW50IGVuZDsKQEAgLTYzNiwyMCArNjI4LDE3IEBAIHZvaWQg
SW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hdFBvaW50JiBiCiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIoY29udGV4dCk7CiAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIFRleHRQ
YWludFN0eWxlKGMpKTsgLy8gRG9uJ3QgZHJhdyB0ZXh0IGF0IGFsbCEKLSAgICAKKwogICAgIC8v
IElmIHRoZSB0ZXh0IGlzIHRydW5jYXRlZCwgbGV0IHRoZSB0aGluZyBiZWluZyBwYWludGVkIGlu
IHRoZSB0cnVuY2F0aW9uCiAgICAgLy8gZHJhdyBpdHMgb3duIGhpZ2hsaWdodC4KLSAgICBpbnQg
bGVuZ3RoID0gbV90cnVuY2F0aW9uICE9IGNOb1RydW5jYXRpb24gPyBtX3RydW5jYXRpb24gOiBt
X2xlbjsKLSAgICBTdHJpbmcgc3RyaW5nID0gcmVuZGVyZXIoKS50ZXh0KCk7CiAKLSAgICBpZiAo
c3RyaW5nLmxlbmd0aCgpICE9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGgpIHx8IG1fc3Rh
cnQpIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG1fc3RhcnQgKyBsZW5ndGgpIDw9IHN0cmluZy5sZW5ndGgoKSk7Ci0gICAg
ICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHJpbmdTaGFyaW5nSW1wbChtX3N0YXJ0LCBsZW5ndGgp
OwotICAgIH0KKyAgICB1bnNpZ25lZCBsZW5ndGggPSBtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNh
dGlvbiA/IG1fdHJ1bmNhdGlvbiA6IGxlbigpOwogCi0gICAgU3RyaW5nIGh5cGhlbmF0ZWRTdHJp
bmdCdWZmZXI7Ci0gICAgYm9vbCByZXNwZWN0SHlwaGVuID0gc2VsZWN0aW9uRW5kID09IGxlbmd0
aCAmJiBoYXNIeXBoZW4oKTsKLSAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVu
KHN0eWxlLCBzdHJpbmcsIHJlbmRlcmVyKCkudGV4dExlbmd0aCgpIC0gbV9zdGFydCwgcmVzcGVj
dEh5cGhlbiA/ICZoeXBoZW5hdGVkU3RyaW5nQnVmZmVyIDogbnVsbHB0cik7CisgICAgU3RyaW5n
IGh5cGhlbmF0ZWRTdHJpbmc7CisgICAgYm9vbCByZXNwZWN0SHlwaGVuID0gc2VsZWN0aW9uRW5k
ID09IHN0YXRpY19jYXN0PGludD4obGVuZ3RoKSAmJiBoYXNIeXBoZW4oKTsKKyAgICBpZiAocmVz
cGVjdEh5cGhlbikKKyAgICAgICAgaHlwaGVuYXRlZFN0cmluZ0ZvclRleHRSdW4oc3R5bGUsIGxl
bmd0aCk7CisgICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgaHlw
aGVuYXRlZFN0cmluZywgT3B0aW9uYWw8dW5zaWduZWQ+KGxlbmd0aCkpOwogICAgIGlmIChyZXNw
ZWN0SHlwaGVuKQogICAgICAgICBzZWxlY3Rpb25FbmQgPSB0ZXh0UnVuLmxlbmd0aCgpOwogCkBA
IC0xMDE2LDMyICsxMDA1LDI5IEBAIGZsb2F0IElubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zm
c2V0KGludCBvZmZzZXQpIGNvbnN0CiAgICAgcmV0dXJuIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNX
aXRoV3JpdGluZ0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0LCByZW5kZXJlcigpLmRvY3VtZW50KCku
ZGV2aWNlU2NhbGVGYWN0b3IoKSwgcnVuLmx0cigpKS5tYXhYKCk7CiB9CiAKLVRleHRSdW4gSW5s
aW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFN0
cmluZyogaHlwaGVuYXRlZFN0cmluZ0J1ZmZlcikgY29uc3QKK1N0cmluZyBJbmxpbmVUZXh0Qm94
OjpoeXBoZW5hdGVkU3RyaW5nRm9yVGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIE9w
dGlvbmFsPHVuc2lnbmVkPiBvdmVycmlkZGVuTGVuZ3RoKSBjb25zdAogewotICAgIEFTU0VSVChy
ZW5kZXJlcigpLnRleHQoKSk7Ci0KLSAgICBTdHJpbmcgc3RyaW5nID0gcmVuZGVyZXIoKS50ZXh0
KCk7Ci0gICAgdW5zaWduZWQgc3RhcnRQb3MgPSBzdGFydCgpOwotICAgIHVuc2lnbmVkIGxlbmd0
aCA9IGxlbigpOwotCi0gICAgaWYgKHN0cmluZy5sZW5ndGgoKSAhPSBsZW5ndGggfHwgc3RhcnRQ
b3MpCi0gICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHJpbmdTaGFyaW5nSW1wbChzdGFydFBv
cywgbGVuZ3RoKTsKLQotICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBzdHJpbmcs
IHJlbmRlcmVyKCkudGV4dExlbmd0aCgpIC0gc3RhcnRQb3MsIGh5cGhlbmF0ZWRTdHJpbmdCdWZm
ZXIpOworICAgIEFTU0VSVChoYXNIeXBoZW4oKSk7CisgICAgYXV0byBzdHJpbmcgPSBTdHJpbmdW
aWV3KHJlbmRlcmVyKCkudGV4dCgpKS5zdWJzdHJpbmcoc3RhcnQoKSwgb3ZlcnJpZGRlbkxlbmd0
aC52YWx1ZU9yKGxlbigpKSk7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxk
ZXIuYXBwZW5kKHN0cmluZyk7CisgICAgYnVpbGRlci5hcHBlbmQoc3R5bGUuaHlwaGVuU3RyaW5n
KCkpOworICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKLVRleHRSdW4gSW5saW5l
VGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFN0cmlu
ZyBzdHJpbmcsIHVuc2lnbmVkIG1heGltdW1MZW5ndGgsIFN0cmluZyogaHlwaGVuYXRlZFN0cmlu
Z0J1ZmZlcikgY29uc3QKK1RleHRSdW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFN0cmluZ1ZpZXcgbWF5YmVTdHJpbmdUb1JlbmRlciwg
T3B0aW9uYWw8dW5zaWduZWQ+IG92ZXJyaWRkZW5MZW5ndGgpIGNvbnN0CiB7Ci0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotCi0gICAgaWYgKGh5cGhlbmF0ZWRTdHJpbmdC
dWZmZXIpIHsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBoeXBoZW5TdHJpbmcgPSBzdHls
ZS5oeXBoZW5TdHJpbmcoKTsKLSAgICAgICAgKmh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIgPSBzdHJp
bmcgKyBoeXBoZW5TdHJpbmc7Ci0gICAgICAgIHN0cmluZyA9ICpoeXBoZW5hdGVkU3RyaW5nQnVm
ZmVyOwotICAgICAgICBtYXhpbXVtTGVuZ3RoID0gbGVuZ3RoICsgaHlwaGVuU3RyaW5nLmxlbmd0
aCgpOworICAgIGlmIChtYXliZVN0cmluZ1RvUmVuZGVyLmlzTnVsbCgpKSB7CisgICAgICAgIGF1
dG8gc3RhcnQgPSB0aGlzLT5zdGFydCgpOworICAgICAgICBhdXRvJiByZW5kZXJlciA9IHRoaXMt
PnJlbmRlcmVyKCk7CisgICAgICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBTdHJp
bmdWaWV3KHJlbmRlcmVyLnRleHQoKSkuc3Vic3RyaW5nKHN0YXJ0LCBvdmVycmlkZGVuTGVuZ3Ro
LnZhbHVlT3IobGVuKCkpKSwgcmVuZGVyZXIudGV4dExlbmd0aCgpIC0gc3RhcnQpOwogICAgIH0K
KyAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgbWF5YmVTdHJpbmdUb1JlbmRlciwg
bWF5YmVTdHJpbmdUb1JlbmRlci5sZW5ndGgoKSk7Cit9CiAKLSAgICBBU1NFUlQobWF4aW11bUxl
bmd0aCA+PSBsZW5ndGgpOworVGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVu
KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU3RyaW5nVmlldyBzdHJpbmcsIHVuc2lnbmVkIG1h
eGltdW1MZW5ndGgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1heGltdW1MZW5ndGggPj0gc3RyaW5n
Lmxlbmd0aCgpKTsKIAogICAgIFRleHRSdW4gcnVuKHN0cmluZywgdGV4dFBvcygpLCBleHBhbnNp
b24oKSwgZXhwYW5zaW9uQmVoYXZpb3IoKSwgZGlyZWN0aW9uKCksIGRpck92ZXJyaWRlKCkgfHwg
c3R5bGUucnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlciwgIXJlbmRlcmVyKCkuY2FuVXNlU2lt
cGxlRm9udENvZGVQYXRoKCkpOwogICAgIHJ1bi5zZXRUYWJTaXplKCFzdHlsZS5jb2xsYXBzZVdo
aXRlU3BhY2UoKSwgc3R5bGUudGFiU2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5oCmluZGV4IGVjMTg5NTc0MzM5MWYwZjRkNDMyM2U3YzViMzQ3N2UwMGJhZWVl
OGUuLmJhYjk0Nzg5YjA3ZDNiYzhiODUyMDYyN2ExOGM1MDg3NmFkODA4YjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaApAQCAtMTEyLDggKzExMiw5IEBAIHByaXZh
dGU6CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Cb3R0b20oKSBjb25zdDsKICAgICBMYXlvdXRV
bml0IHNlbGVjdGlvbkhlaWdodCgpIGNvbnN0OwogCi0gICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0
UnVuKGNvbnN0IFJlbmRlclN0eWxlJiwgU3RyaW5nKiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyID0g
bnVsbHB0cikgY29uc3Q7Ci0gICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRl
clN0eWxlJiwgU3RyaW5nLCB1bnNpZ25lZCBtYXhpbXVtTGVuZ3RoLCBTdHJpbmcqIGh5cGhlbmF0
ZWRTdHJpbmdCdWZmZXIgPSBudWxscHRyKSBjb25zdDsKKyAgICBTdHJpbmcgaHlwaGVuYXRlZFN0
cmluZ0ZvclRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmLCBPcHRpb25hbDx1bnNpZ25lZD4gb3Zl
cnJpZGRlbkxlbmd0aCA9IE51bGxvcHQpIGNvbnN0OworICAgIFRleHRSdW4gY29uc3RydWN0VGV4
dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYsIFN0cmluZ1ZpZXcgbWF5YmVTdHJpbmdUb1JlbmRlciA9
IFN0cmluZ1ZpZXcoKSwgT3B0aW9uYWw8dW5zaWduZWQ+IG92ZXJyaWRkZW5MZW5ndGggPSBOdWxs
b3B0KSBjb25zdDsKKyAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5
bGUmLCBTdHJpbmdWaWV3LCB1bnNpZ25lZCBtYXhpbXVtTGVuZ3RoKSBjb25zdDsKIAogcHVibGlj
OgogICAgIEZsb2F0UmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVzKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gRmxvYXRSZWN0KHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7IH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCmluZGV4IGQ3NGE2MjA0
ZTZkOWVhOTg0Zjc1OTQ2ZTkwMTNiZTI1OWIxYWNlOTEuLjY3MjgzZDY4NmRiZjVjMWE4M2MxOWI5
MDVkYjdiZjZiMmY0ZDBmZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJDb21iaW5lVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckNvbWJpbmVUZXh0LmNwcApAQCAtODQsMTcgKzg0LDEyIEBAIE9wdGlvbmFsPEZsb2F0UG9pbnQ+
IFJlbmRlckNvbWJpbmVUZXh0Ojpjb21wdXRlVGV4dE9yaWdpbihjb25zdCBGbG9hdFJlY3QmIGJv
eFJlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBSZW5kZXJDb21iaW5lVGV4dDo6Z2V0
U3RyaW5nVG9SZW5kZXIoaW50IHN0YXJ0LCBTdHJpbmcmIHN0cmluZywgaW50JiBsZW5ndGgpIGNv
bnN0CitTdHJpbmcgUmVuZGVyQ29tYmluZVRleHQ6Om1heWJlR2V0Q29tYmluZWRTdHJpbmdGb3JS
ZW5kZXJpbmcoKSBjb25zdAogewotICAgIEFTU0VSVChzdGFydCA+PSAwKTsKLSAgICBpZiAobV9p
c0NvbWJpbmVkKSB7Ci0gICAgICAgIHN0cmluZyA9IG9yaWdpbmFsVGV4dCgpOwotICAgICAgICBs
ZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KG1faXNDb21iaW5lZCkKKyAgICAgICAgcmV0dXJuIG9yaWdpbmFsVGV4dCgpOwogIAotICAgIHN0
cmluZyA9IHRleHQoKTsKLSAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nU2hhcmluZ0ltcGwo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0KSwgbGVuZ3RoKTsKKyAgICByZXR1cm4geyB9Owog
fQogCiB2b2lkIFJlbmRlckNvbWJpbmVUZXh0Ojpjb21iaW5lVGV4dCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oCmluZGV4IDQ0MmQ4YTE0Yjk2ZTM0NjRm
NjYyYTRlMGMwYzU4ZWE2NGQ1YjY2NzEuLmE2YjU5YTUxMWRhYTBiNmQ5NGIzOTBhN2I3OWM0MTFh
MDlkNGY2YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21i
aW5lVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4
dC5oCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY29tYmluZVRleHQoKTsK
ICAgICBPcHRpb25hbDxGbG9hdFBvaW50PiBjb21wdXRlVGV4dE9yaWdpbihjb25zdCBGbG9hdFJl
Y3QmIGJveFJlY3QpIGNvbnN0OwotICAgIHZvaWQgZ2V0U3RyaW5nVG9SZW5kZXIoaW50LCBTdHJp
bmcmLCBpbnQmIGxlbmd0aCkgY29uc3Q7CisgICAgU3RyaW5nIG1heWJlR2V0Q29tYmluZWRTdHJp
bmdGb3JSZW5kZXJpbmcoKSBjb25zdDsKICAgICBib29sIGlzQ29tYmluZWQoKSBjb25zdCB7IHJl
dHVybiBtX2lzQ29tYmluZWQ7IH0KICAgICBmbG9hdCBjb21iaW5lZFRleHRXaWR0aChjb25zdCBG
b250Q2FzY2FkZSYgZm9udCkgY29uc3QgeyByZXR1cm4gZm9udC5zaXplKCk7IH0KICAgICBjb25z
dCBGb250Q2FzY2FkZSYgb3JpZ2luYWxGb250KCkgY29uc3QgeyByZXR1cm4gcGFyZW50KCktPnN0
eWxlKCkuZm9udENhc2NhZGUoKTsgfQo=
</data>
<flag name="review"
          id="309024"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285626</attachid>
            <date>2016-08-08 19:52:51 -0700</date>
            <delta_ts>2016-08-08 19:53:48 -0700</delta_ts>
            <desc>Patch for committing</desc>
            <filename>bug-160584-20160808195119.patch</filename>
            <type>text/plain</type>
            <size>12818</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MjcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGNmNjhiNjQwNGI3M2Vi
NjcxMjljMWZmMGZhNTFiOTFiZmIxNzc5MS4uYjVmMGZlOGU4OGJmMGUxY2IwZmYyMTRlNTc1OTU4
NTc4M2RmY2Q4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE2LTA4LTA4ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgRW5zdXJlIFN0
cmluZ1ZpZXcgbGlmZXRpbWUgaXMgY29ycmVjdCBpbnNpZGUgSW5saW5lVGV4dEJveAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNTg0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQSBUZXh0UnVuIGNvbnRhaW5z
IGEgU3RyaW5nVmlldy4gUHJldmlvdXNseSwgd2UgaGFkIGEgaGVscGVyIGZ1bmN0aW9uIHdoaWNo
CisgICAgICAgIGNvdWxkIHBvc3NpYmx5IGNyZWF0ZSBhIG5ldyBzdHJpbmcsIGFuZCB0aGVuIGNy
ZWF0ZSBhIFRleHRSdW4gd2hvc2UgU3RyaW5nVmlldworICAgICAgICBwb2ludGVkIGluc2lkZSB0
aGlzIG5ldyBzdHJpbmcuIFRoZW4sIHRoZSBzdHJpbmcgd291bGQgYmUgZGVzdHJveWVkIGJlY2F1
c2UgaXQKKyAgICAgICAgd2FzIG9uIHRoZSBzdGFjay4KKworICAgICAgICBMdWNraWx5LCB0aGlz
IGlzIGJlbmlnbiBiZWNhdXNlIHRoaXMgbmV3IHN0cmluZyB3b3VsZCBhbHdheXMgc2hhcmUgYQor
ICAgICAgICBTdHJpbmdJbXBsIHdpdGggdGhlIHN0cmluZyBwYXNzZWQgaW50byB0aGUgZnVuY3Rp
b24gKGFuZCB0aGUgU3RyaW5nVmlldworICAgICAgICB3b3VsZCBwb2ludCBpbnRvIHRoaXMgU3Ry
aW5nSW1wbCkuIEhvd2V2ZXIsIHJlbHlpbmcgb24gdGhpcyBpcyBkYW5nZXJvdXMKKyAgICAgICAg
YW5kIHdlIGFyZSB0cnlpbmcgdG8gZW5mb3JjZSBTdHJpbmdWaWV3IGxpZmV0aW1lIGNoZWNrcyBp
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwMzg0
LgorCisgICAgICAgIFRoZSBzb2x1dGlvbiBpcyB0byBtYWtlIGEgaGVscGVyIGZ1bmN0aW9uIHdo
aWNoIHJldHVybnMgdGhpcyBidWlsdCBzdHJpbmcKKyAgICAgICAgc28gdGhhdCB0aGUgY2FsbGVy
IGNhbiBvd24gdGhpcyBidWlsdCBzdHJpbmcsIHRoZXJlYnkgZXh0ZW5kaW5nIGl0cyBsaWZldGlt
ZS4KKyAgICAgICAgVW5mb3J0dW5hdGVseSwgdGhpcyBidWlsdCBzdHJpbmcgY2FuJ3QgYmUgYSBT
dHJpbmdWaWV3IGJlY2F1c2UgdGhlIHNhbWUKKyAgICAgICAgbWVjaGFuaXNtIG11c3QgYmUgdXNl
ZCBmb3IgdGV4dC1jb21iaW5lLCB3aGljaCByZXR1cm5zIG9yaWdpbmFsVGV4dCgpLCB3aGljaAor
ICAgICAgICBtYXkgcmV0dXJuIGEgYnVpbHQgc3RyaW5nIGlmIGl0IGlzIGEgUmVuZGVyQ291bnRl
ci4gUGVyaGFwcyBpdCB3b3VsZCBiZQorICAgICAgICB2YWx1YWJsZSB0byBtaWdyYXRlIFJlbmRl
ckNvdW50ZXI6Om9yaWdpbmFsVGV4dCgpIHRvIHNvbWV0aGluZyBlbHNlLCBvciB0bworICAgICAg
ICBkaXZvcmNlIHRleHQtY29tYmluZSBmcm9tIG9yaWdpbmFsVGV4dCgpLCBidXQgdGhhdCBpcyBv
dXQgb2Ygc2NvcGUgZm9yIHRoaXMKKyAgICAgICAgcGF0Y2guIFNpbWlsYXJseSwgaHlwaGVuYXRp
b24gdXNlcyB0aGlzIHNhbWUgbWVjaGFuaXNtLCBidXQgYmVjYXVzZSB0aGUKKyAgICAgICAgaHlw
aGVuYXRlZCBzdHJpbmcgbmVlZHMgdG8gYmUgY3JlYXRlZCwgd2UgbXVzdCBvd24gdGhlIHN0cmlu
ZyBzdG9yYWdlIChzbworICAgICAgICBTdHJpbmdWaWV3IGlzIGluY29ycmVjdCBoZXJlKS4KKwor
ICAgICAgICBBbm90aGVyIHJlYXNvbiBpcyBmb3IgcGVyZm9ybWFuY2U6IFN0cmluZ1ZpZXc6OnN1
YnN0cmluZygpIGlzIGZhc3RlciB0byB1c2UKKyAgICAgICAgdGhhbiBTdHJpbmc6OnN1YnN0cmlu
Z1NoYXJpbmdJbXBsKCksIHNpbmNlIGl0IGRvZXMgbm90IGFsbG9jYXRlIGFuZCBkZXN0cm95IGEK
KyAgICAgICAgU3RyaW5nSW1wbCBvbiB0aGUgaGVhcC4gVGhpcyBwYXRjaCBtaWdyYXRlcyBhd2F5
IGZyb20KKyAgICAgICAgU3RyaW5nOjpzdWJzdHJpbmdTaGFyaW5nSW1wbCgpIGFuZCBvbnRvIFN0
cmluZ1ZpZXc6OnN1YnN0cmluZygpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRo
ZXJlIGlzIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0
aW9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVUZXh0Qm94OjpoeXBoZW5hdGVkU3RyaW5nRm9yVGV4dFJ1bik6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb21i
aW5lVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb21iaW5lVGV4dDo6bWF5YmVH
ZXRDb21iaW5lZFN0cmluZ0ZvclJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJD
b21iaW5lVGV4dDo6Z2V0U3RyaW5nVG9SZW5kZXIpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJDb21iaW5lVGV4dC5oOgorCiAyMDE2LTA4LTA4ICBBbmRlcnMgQ2FybHNzb24g
IDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHRoZSBXaW5kb3dzIGJ1aWxkLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCmluZGV4IGNkODAyZWIw
M2YyNDZiNTZhZTdkOTFjNjdmNzg5Yjc5NDg0MjNkMjkuLmQ4OGExNGZiYzk1YjAyZjJlNGEzZGRm
NjM0NTFmYzdjNGIzOWVmZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5jcHAKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlICJicmVha19saW5lcy5oIgogI2lu
Y2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0y
MDQsOSArMjA1LDExIEBAIExheW91dFJlY3QgSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25S
ZWN0KGludCBzdGFydFBvcywgaW50IGVuZFBvcykgY29uc3QKICAgICBjb25zdCBSZW5kZXJTdHls
ZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CiAgICAgY29uc3QgRm9udENhc2NhZGUm
IGZvbnQgPSBmb250VG9Vc2UobGluZVN0eWxlLCByZW5kZXJlcigpKTsKIAotICAgIFN0cmluZyBo
eXBoZW5hdGVkU3RyaW5nQnVmZmVyOworICAgIFN0cmluZyBoeXBoZW5hdGVkU3RyaW5nOwogICAg
IGJvb2wgcmVzcGVjdEh5cGhlbiA9IGVQb3MgPT0gbV9sZW4gJiYgaGFzSHlwaGVuKCk7Ci0gICAg
VGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihsaW5lU3R5bGUsIHJlc3BlY3RIeXBo
ZW4gPyAmaHlwaGVuYXRlZFN0cmluZ0J1ZmZlciA6IDApOworICAgIGlmIChyZXNwZWN0SHlwaGVu
KQorICAgICAgICBoeXBoZW5hdGVkU3RyaW5nID0gaHlwaGVuYXRlZFN0cmluZ0ZvclRleHRSdW4o
bGluZVN0eWxlKTsKKyAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKGxpbmVT
dHlsZSwgaHlwaGVuYXRlZFN0cmluZyk7CiAKICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3Qg
PSBMYXlvdXRSZWN0KExheW91dFBvaW50KGxvZ2ljYWxMZWZ0KCksIHNlbGVjdGlvblRvcCksIExh
eW91dFNpemUobV9sb2dpY2FsV2lkdGgsIHNlbGVjdGlvbkhlaWdodCkpOwogICAgIC8vIEF2b2lk
IGNvbXB1dGluZyB0aGUgZm9udCB3aWR0aCB3aGVuIHRoZSBlbnRpcmUgbGluZSBib3ggaXMgc2Vs
ZWN0ZWQgYXMgYW4gb3B0aW1pemF0aW9uLgpAQCAtNDk3LDI1ICs1MDAsMTQgQEAgdm9pZCBJbmxp
bmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0LAogICAgIH0KIAogICAgIC8vIDIuIE5vdyBwYWludCB0aGUgZm9yZWdyb3Vu
ZCwgaW5jbHVkaW5nIHRleHQgYW5kIGRlY29yYXRpb25zIGxpa2UgdW5kZXJsaW5lL292ZXJsaW5l
IChpbiBxdWlya3MgbW9kZSBvbmx5KS4KLSAgICBpbnQgbGVuZ3RoID0gbV9sZW47Ci0gICAgaW50
IG1heGltdW1MZW5ndGg7Ci0gICAgU3RyaW5nIHN0cmluZzsKLSAgICBpZiAoIWNvbWJpbmVkVGV4
dCkgewotICAgICAgICBzdHJpbmcgPSByZW5kZXJlcigpLnRleHQoKTsKLSAgICAgICAgaWYgKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGgpICE9IHN0cmluZy5sZW5ndGgoKSB8fCBtX3N0YXJ0
KSB7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obV9zdGFydCArIGxlbmd0aCkgPD0gc3RyaW5nLmxlbmd0aCgpKTsKLSAg
ICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHJpbmdTaGFyaW5nSW1wbChtX3N0YXJ0LCBs
ZW5ndGgpOwotICAgICAgICB9Ci0gICAgICAgIG1heGltdW1MZW5ndGggPSByZW5kZXJlcigpLnRl
eHRMZW5ndGgoKSAtIG1fc3RhcnQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY29tYmluZWRUZXh0
LT5nZXRTdHJpbmdUb1JlbmRlcihtX3N0YXJ0LCBzdHJpbmcsIGxlbmd0aCk7Ci0gICAgICAgIG1h
eGltdW1MZW5ndGggPSBsZW5ndGg7Ci0gICAgfQorICAgIFN0cmluZyBhbHRlcm5hdGVTdHJpbmdU
b1JlbmRlcjsKKyAgICBpZiAoY29tYmluZWRUZXh0KQorICAgICAgICBhbHRlcm5hdGVTdHJpbmdU
b1JlbmRlciA9IGNvbWJpbmVkVGV4dC0+Y29tYmluZWRTdHJpbmdGb3JSZW5kZXJpbmcoKTsKKyAg
ICBlbHNlIGlmIChoYXNIeXBoZW4oKSkKKyAgICAgICAgYWx0ZXJuYXRlU3RyaW5nVG9SZW5kZXIg
PSBoeXBoZW5hdGVkU3RyaW5nRm9yVGV4dFJ1bihsaW5lU3R5bGUpOwogCi0gICAgU3RyaW5nIGh5
cGhlbmF0ZWRTdHJpbmdCdWZmZXI7Ci0gICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4
dFJ1bihsaW5lU3R5bGUsIHN0cmluZywgbWF4aW11bUxlbmd0aCwgaGFzSHlwaGVuKCkgPyAmaHlw
aGVuYXRlZFN0cmluZ0J1ZmZlciA6IG51bGxwdHIpOwotICAgIGlmIChoYXNIeXBoZW4oKSkKLSAg
ICAgICAgbGVuZ3RoID0gdGV4dFJ1bi5sZW5ndGgoKTsKKyAgICBUZXh0UnVuIHRleHRSdW4gPSBj
b25zdHJ1Y3RUZXh0UnVuKGxpbmVTdHlsZSwgYWx0ZXJuYXRlU3RyaW5nVG9SZW5kZXIpOworICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHRleHRSdW4ubGVuZ3RoKCk7CiAKICAgICBpbnQgc2VsZWN0aW9u
U3RhcnQgPSAwOwogICAgIGludCBzZWxlY3Rpb25FbmQgPSAwOwpAQCAtNjAwLDcgKzU5Miw3IEBA
IHN0ZDo6cGFpcjxpbnQsIGludD4gSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhcnRFbmQoKSBj
b25zdAogewogICAgIGF1dG8gc2VsZWN0aW9uU3RhdGUgPSByZW5kZXJlcigpLnNlbGVjdGlvblN0
YXRlKCk7CiAgICAgaWYgKHNlbGVjdGlvblN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9u
SW5zaWRlKQotICAgICAgICByZXR1cm4gezAsIG1fbGVufTsKKyAgICAgICAgcmV0dXJuIHsgMCwg
bV9sZW4gfTsKICAgICAKICAgICBpbnQgc3RhcnQ7CiAgICAgaW50IGVuZDsKQEAgLTYzNiwyMCAr
NjI4LDE3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBiCiAKICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4dCk7CiAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0
KGNvbnRleHQsIFRleHRQYWludFN0eWxlKGMpKTsgLy8gRG9uJ3QgZHJhdyB0ZXh0IGF0IGFsbCEK
LSAgICAKKwogICAgIC8vIElmIHRoZSB0ZXh0IGlzIHRydW5jYXRlZCwgbGV0IHRoZSB0aGluZyBi
ZWluZyBwYWludGVkIGluIHRoZSB0cnVuY2F0aW9uCiAgICAgLy8gZHJhdyBpdHMgb3duIGhpZ2hs
aWdodC4KLSAgICBpbnQgbGVuZ3RoID0gbV90cnVuY2F0aW9uICE9IGNOb1RydW5jYXRpb24gPyBt
X3RydW5jYXRpb24gOiBtX2xlbjsKLSAgICBTdHJpbmcgc3RyaW5nID0gcmVuZGVyZXIoKS50ZXh0
KCk7CiAKLSAgICBpZiAoc3RyaW5nLmxlbmd0aCgpICE9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihs
ZW5ndGgpIHx8IG1fc3RhcnQpIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc3RhcnQgKyBsZW5ndGgpIDw9IHN0cmluZy5s
ZW5ndGgoKSk7Ci0gICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHJpbmdTaGFyaW5nSW1wbCht
X3N0YXJ0LCBsZW5ndGgpOwotICAgIH0KKyAgICB1bnNpZ25lZCBsZW5ndGggPSBtX3RydW5jYXRp
b24gIT0gY05vVHJ1bmNhdGlvbiA/IG1fdHJ1bmNhdGlvbiA6IGxlbigpOwogCi0gICAgU3RyaW5n
IGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXI7Ci0gICAgYm9vbCByZXNwZWN0SHlwaGVuID0gc2VsZWN0
aW9uRW5kID09IGxlbmd0aCAmJiBoYXNIeXBoZW4oKTsKLSAgICBUZXh0UnVuIHRleHRSdW4gPSBj
b25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBzdHJpbmcsIHJlbmRlcmVyKCkudGV4dExlbmd0aCgpIC0g
bV9zdGFydCwgcmVzcGVjdEh5cGhlbiA/ICZoeXBoZW5hdGVkU3RyaW5nQnVmZmVyIDogbnVsbHB0
cik7CisgICAgU3RyaW5nIGh5cGhlbmF0ZWRTdHJpbmc7CisgICAgYm9vbCByZXNwZWN0SHlwaGVu
ID0gc2VsZWN0aW9uRW5kID09IHN0YXRpY19jYXN0PGludD4obGVuZ3RoKSAmJiBoYXNIeXBoZW4o
KTsKKyAgICBpZiAocmVzcGVjdEh5cGhlbikKKyAgICAgICAgaHlwaGVuYXRlZFN0cmluZyA9IGh5
cGhlbmF0ZWRTdHJpbmdGb3JUZXh0UnVuKHN0eWxlLCBsZW5ndGgpOworICAgIFRleHRSdW4gdGV4
dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGh5cGhlbmF0ZWRTdHJpbmcsIE9wdGlvbmFs
PHVuc2lnbmVkPihsZW5ndGgpKTsKICAgICBpZiAocmVzcGVjdEh5cGhlbikKICAgICAgICAgc2Vs
ZWN0aW9uRW5kID0gdGV4dFJ1bi5sZW5ndGgoKTsKIApAQCAtMTAxNiwzMiArMTAwNSwyNyBAQCBm
bG9hdCBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldChpbnQgb2Zmc2V0KSBjb25zdAog
ICAgIHJldHVybiBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzV2l0aFdyaXRpbmdEaXJlY3Rpb24oc2Vs
ZWN0aW9uUmVjdCwgcmVuZGVyZXIoKS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCksIHJ1
bi5sdHIoKSkubWF4WCgpOwogfQogCi1UZXh0UnVuIElubGluZVRleHRCb3g6OmNvbnN0cnVjdFRl
eHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTdHJpbmcqIGh5cGhlbmF0ZWRTdHJpbmdC
dWZmZXIpIGNvbnN0CitTdHJpbmdWaWV3IElubGluZVRleHRCb3g6OnN1YnN0cmluZ1RvUmVuZGVy
KE9wdGlvbmFsPHVuc2lnbmVkPiBvdmVycmlkaW5nTGVuZ3RoKSBjb25zdAogewotICAgIEFTU0VS
VChyZW5kZXJlcigpLnRleHQoKSk7Ci0KLSAgICBTdHJpbmcgc3RyaW5nID0gcmVuZGVyZXIoKS50
ZXh0KCk7Ci0gICAgdW5zaWduZWQgc3RhcnRQb3MgPSBzdGFydCgpOwotICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGxlbigpOwotCi0gICAgaWYgKHN0cmluZy5sZW5ndGgoKSAhPSBsZW5ndGggfHwgc3Rh
cnRQb3MpCi0gICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHJpbmdTaGFyaW5nSW1wbChzdGFy
dFBvcywgbGVuZ3RoKTsKLQotICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBzdHJp
bmcsIHJlbmRlcmVyKCkudGV4dExlbmd0aCgpIC0gc3RhcnRQb3MsIGh5cGhlbmF0ZWRTdHJpbmdC
dWZmZXIpOworICAgIHJldHVybiBTdHJpbmdWaWV3KHJlbmRlcmVyKCkudGV4dCgpKS5zdWJzdHJp
bmcoc3RhcnQoKSwgb3ZlcnJpZGluZ0xlbmd0aC52YWx1ZU9yKGxlbigpKSk7CiB9CiAKLVRleHRS
dW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIFN0cmluZyBzdHJpbmcsIHVuc2lnbmVkIG1heGltdW1MZW5ndGgsIFN0cmluZyogaHlwaGVu
YXRlZFN0cmluZ0J1ZmZlcikgY29uc3QKK1N0cmluZyBJbmxpbmVUZXh0Qm94OjpoeXBoZW5hdGVk
U3RyaW5nRm9yVGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIE9wdGlvbmFsPHVuc2ln
bmVkPiBhbHRlcm5hdGVMZW5ndGgpIGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3Ry
aW5nLmxlbmd0aCgpOworICAgIEFTU0VSVChoYXNIeXBoZW4oKSk7CisgICAgcmV0dXJuIG1ha2VT
dHJpbmcoc3Vic3RyaW5nVG9SZW5kZXIoYWx0ZXJuYXRlTGVuZ3RoKSwgc3R5bGUuaHlwaGVuU3Ry
aW5nKCkpOworfQogCi0gICAgaWYgKGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIpIHsKLSAgICAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBoeXBoZW5TdHJpbmcgPSBzdHlsZS5oeXBoZW5TdHJpbmcoKTsK
LSAgICAgICAgKmh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIgPSBzdHJpbmcgKyBoeXBoZW5TdHJpbmc7
Ci0gICAgICAgIHN0cmluZyA9ICpoeXBoZW5hdGVkU3RyaW5nQnVmZmVyOwotICAgICAgICBtYXhp
bXVtTGVuZ3RoID0gbGVuZ3RoICsgaHlwaGVuU3RyaW5nLmxlbmd0aCgpOwotICAgIH0KK1RleHRS
dW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIFN0cmluZ1ZpZXcgYWx0ZXJuYXRlU3RyaW5nVG9SZW5kZXIsIE9wdGlvbmFsPHVuc2lnbmVk
PiBhbHRlcm5hdGVMZW5ndGgpIGNvbnN0Cit7CisgICAgaWYgKGFsdGVybmF0ZVN0cmluZ1RvUmVu
ZGVyLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgc3Vi
c3RyaW5nVG9SZW5kZXIoYWx0ZXJuYXRlTGVuZ3RoKSwgcmVuZGVyZXIoKS50ZXh0TGVuZ3RoKCkg
LSBzdGFydCgpKTsKKyAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgYWx0ZXJuYXRl
U3RyaW5nVG9SZW5kZXIsIGFsdGVybmF0ZVN0cmluZ1RvUmVuZGVyLmxlbmd0aCgpKTsKK30KIAot
ICAgIEFTU0VSVChtYXhpbXVtTGVuZ3RoID49IGxlbmd0aCk7CitUZXh0UnVuIElubGluZVRleHRC
b3g6OmNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBTdHJpbmdWaWV3
IHN0cmluZywgdW5zaWduZWQgbWF4aW11bUxlbmd0aCkgY29uc3QKK3sKKyAgICBBU1NFUlQobWF4
aW11bUxlbmd0aCA+PSBzdHJpbmcubGVuZ3RoKCkpOwogCiAgICAgVGV4dFJ1biBydW4oc3RyaW5n
LCB0ZXh0UG9zKCksIGV4cGFuc2lvbigpLCBleHBhbnNpb25CZWhhdmlvcigpLCBkaXJlY3Rpb24o
KSwgZGlyT3ZlcnJpZGUoKSB8fCBzdHlsZS5ydGxPcmRlcmluZygpID09IFZpc3VhbE9yZGVyLCAh
cmVuZGVyZXIoKS5jYW5Vc2VTaW1wbGVGb250Q29kZVBhdGgoKSk7CiAgICAgcnVuLnNldFRhYlNp
emUoIXN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpLCBzdHlsZS50YWJTaXplKCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKaW5kZXggZWMxODk1NzQzMzkxZjBmNGQ0
MzIzZTdjNWIzNDc3ZTAwYmFlZWU4ZS4uNjdiNjM0YmE1NzhjMzgwZjcwOWIyMzFjYTZiMzE4OTg3
MzU2OTRiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCkBAIC0x
MTIsOCArMTEyLDEwIEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25Cb3R0b20o
KSBjb25zdDsKICAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkhlaWdodCgpIGNvbnN0OwogCi0gICAg
VGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiwgU3RyaW5nKiBoeXBo
ZW5hdGVkU3RyaW5nQnVmZmVyID0gbnVsbHB0cikgY29uc3Q7Ci0gICAgVGV4dFJ1biBjb25zdHJ1
Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiwgU3RyaW5nLCB1bnNpZ25lZCBtYXhpbXVtTGVu
Z3RoLCBTdHJpbmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIgPSBudWxscHRyKSBjb25zdDsKKyAg
ICBTdHJpbmdWaWV3IHN1YnN0cmluZ1RvUmVuZGVyKE9wdGlvbmFsPHVuc2lnbmVkPiBvdmVycmlk
aW5nTGVuZ3RoID0geyB9KSBjb25zdDsKKyAgICBTdHJpbmcgaHlwaGVuYXRlZFN0cmluZ0ZvclRl
eHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmLCBPcHRpb25hbDx1bnNpZ25lZD4gYWx0ZXJuYXRlTGVu
Z3RoID0geyB9KSBjb25zdDsKKyAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVu
ZGVyU3R5bGUmLCBTdHJpbmdWaWV3IGFsdGVybmF0ZVN0cmluZ1RvUmVuZGVyID0geyB9LCBPcHRp
b25hbDx1bnNpZ25lZD4gYWx0ZXJuYXRlTGVuZ3RoID0geyB9KSBjb25zdDsKKyAgICBUZXh0UnVu
IGNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmLCBTdHJpbmdWaWV3LCB1bnNpZ25l
ZCBtYXhpbXVtTGVuZ3RoKSBjb25zdDsKIAogcHVibGljOgogICAgIEZsb2F0UmVjdCBjYWxjdWxh
dGVCb3VuZGFyaWVzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gRmxvYXRSZWN0KHgoKSwgeSgp
LCB3aWR0aCgpLCBoZWlnaHQoKSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQ29tYmluZVRleHQuY3BwCmluZGV4IGQ3NGE2MjA0ZTZkOWVhOTg0Zjc1OTQ2ZTkwMTNiZTI1
OWIxYWNlOTEuLmI1MDNhMTM4MDkzNDBlN2FhYTI5NmUwYmQ3OGM1ZTZiMDAyYTU4ZTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcApAQCAtODQs
MTcgKzg0LDE1IEBAIE9wdGlvbmFsPEZsb2F0UG9pbnQ+IFJlbmRlckNvbWJpbmVUZXh0Ojpjb21w
dXRlVGV4dE9yaWdpbihjb25zdCBGbG9hdFJlY3QmIGJveFJlCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotdm9pZCBSZW5kZXJDb21iaW5lVGV4dDo6Z2V0U3RyaW5nVG9SZW5kZXIoaW50IHN0YXJ0
LCBTdHJpbmcmIHN0cmluZywgaW50JiBsZW5ndGgpIGNvbnN0CitTdHJpbmcgUmVuZGVyQ29tYmlu
ZVRleHQ6OmNvbWJpbmVkU3RyaW5nRm9yUmVuZGVyaW5nKCkgY29uc3QKIHsKLSAgICBBU1NFUlQo
c3RhcnQgPj0gMCk7CiAgICAgaWYgKG1faXNDb21iaW5lZCkgewotICAgICAgICBzdHJpbmcgPSBv
cmlnaW5hbFRleHQoKTsKLSAgICAgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIGF1dG8gb3JpZ2luYWxUZXh0ID0gdGhpcy0+b3JpZ2luYWxUZXh0
KCk7CisgICAgICAgIEFTU0VSVCghb3JpZ2luYWxUZXh0LmlzTnVsbCgpKTsKKyAgICAgICAgcmV0
dXJuIG9yaWdpbmFsVGV4dDsKICAgICB9CiAgCi0gICAgc3RyaW5nID0gdGV4dCgpOwotICAgIHN0
cmluZyA9IHN0cmluZy5zdWJzdHJpbmdTaGFyaW5nSW1wbChzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
c3RhcnQpLCBsZW5ndGgpOworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgUmVuZGVyQ29tYmlu
ZVRleHQ6OmNvbWJpbmVUZXh0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJDb21iaW5lVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNv
bWJpbmVUZXh0LmgKaW5kZXggNDQyZDhhMTRiOTZlMzQ2NGY2NjJhNGUwYzBjNThlYTY0ZDViNjY3
MS4uN2YxOWUyODMxN2Y4ODUyNjEyYzRhMGZkODg3NDcxY2UzODNkMjUwNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgKQEAgLTM2LDcgKzM2LDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBjb21iaW5lVGV4dCgpOwogICAgIE9wdGlvbmFsPEZsb2F0UG9p
bnQ+IGNvbXB1dGVUZXh0T3JpZ2luKGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCkgY29uc3Q7Ci0g
ICAgdm9pZCBnZXRTdHJpbmdUb1JlbmRlcihpbnQsIFN0cmluZyYsIGludCYgbGVuZ3RoKSBjb25z
dDsKKyAgICBTdHJpbmcgY29tYmluZWRTdHJpbmdGb3JSZW5kZXJpbmcoKSBjb25zdDsKICAgICBi
b29sIGlzQ29tYmluZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQ29tYmluZWQ7IH0KICAgICBmbG9h
dCBjb21iaW5lZFRleHRXaWR0aChjb25zdCBGb250Q2FzY2FkZSYgZm9udCkgY29uc3QgeyByZXR1
cm4gZm9udC5zaXplKCk7IH0KICAgICBjb25zdCBGb250Q2FzY2FkZSYgb3JpZ2luYWxGb250KCkg
Y29uc3QgeyByZXR1cm4gcGFyZW50KCktPnN0eWxlKCkuZm9udENhc2NhZGUoKTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285627</attachid>
            <date>2016-08-08 19:54:03 -0700</date>
            <delta_ts>2016-08-08 20:28:15 -0700</delta_ts>
            <desc>Patch for committing</desc>
            <filename>bug-160584-20160808195230.patch</filename>
            <type>text/plain</type>
            <size>12661</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MjcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGNmNjhiNjQwNGI3M2Vi
NjcxMjljMWZmMGZhNTFiOTFiZmIxNzc5MS4uYjVmMGZlOGU4OGJmMGUxY2IwZmYyMTRlNTc1OTU4
NTc4M2RmY2Q4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDE2LTA4LTA4ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgRW5zdXJlIFN0
cmluZ1ZpZXcgbGlmZXRpbWUgaXMgY29ycmVjdCBpbnNpZGUgSW5saW5lVGV4dEJveAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNTg0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQSBUZXh0UnVuIGNvbnRhaW5z
IGEgU3RyaW5nVmlldy4gUHJldmlvdXNseSwgd2UgaGFkIGEgaGVscGVyIGZ1bmN0aW9uIHdoaWNo
CisgICAgICAgIGNvdWxkIHBvc3NpYmx5IGNyZWF0ZSBhIG5ldyBzdHJpbmcsIGFuZCB0aGVuIGNy
ZWF0ZSBhIFRleHRSdW4gd2hvc2UgU3RyaW5nVmlldworICAgICAgICBwb2ludGVkIGluc2lkZSB0
aGlzIG5ldyBzdHJpbmcuIFRoZW4sIHRoZSBzdHJpbmcgd291bGQgYmUgZGVzdHJveWVkIGJlY2F1
c2UgaXQKKyAgICAgICAgd2FzIG9uIHRoZSBzdGFjay4KKworICAgICAgICBMdWNraWx5LCB0aGlz
IGlzIGJlbmlnbiBiZWNhdXNlIHRoaXMgbmV3IHN0cmluZyB3b3VsZCBhbHdheXMgc2hhcmUgYQor
ICAgICAgICBTdHJpbmdJbXBsIHdpdGggdGhlIHN0cmluZyBwYXNzZWQgaW50byB0aGUgZnVuY3Rp
b24gKGFuZCB0aGUgU3RyaW5nVmlldworICAgICAgICB3b3VsZCBwb2ludCBpbnRvIHRoaXMgU3Ry
aW5nSW1wbCkuIEhvd2V2ZXIsIHJlbHlpbmcgb24gdGhpcyBpcyBkYW5nZXJvdXMKKyAgICAgICAg
YW5kIHdlIGFyZSB0cnlpbmcgdG8gZW5mb3JjZSBTdHJpbmdWaWV3IGxpZmV0aW1lIGNoZWNrcyBp
bgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwMzg0
LgorCisgICAgICAgIFRoZSBzb2x1dGlvbiBpcyB0byBtYWtlIGEgaGVscGVyIGZ1bmN0aW9uIHdo
aWNoIHJldHVybnMgdGhpcyBidWlsdCBzdHJpbmcKKyAgICAgICAgc28gdGhhdCB0aGUgY2FsbGVy
IGNhbiBvd24gdGhpcyBidWlsdCBzdHJpbmcsIHRoZXJlYnkgZXh0ZW5kaW5nIGl0cyBsaWZldGlt
ZS4KKyAgICAgICAgVW5mb3J0dW5hdGVseSwgdGhpcyBidWlsdCBzdHJpbmcgY2FuJ3QgYmUgYSBT
dHJpbmdWaWV3IGJlY2F1c2UgdGhlIHNhbWUKKyAgICAgICAgbWVjaGFuaXNtIG11c3QgYmUgdXNl
ZCBmb3IgdGV4dC1jb21iaW5lLCB3aGljaCByZXR1cm5zIG9yaWdpbmFsVGV4dCgpLCB3aGljaAor
ICAgICAgICBtYXkgcmV0dXJuIGEgYnVpbHQgc3RyaW5nIGlmIGl0IGlzIGEgUmVuZGVyQ291bnRl
ci4gUGVyaGFwcyBpdCB3b3VsZCBiZQorICAgICAgICB2YWx1YWJsZSB0byBtaWdyYXRlIFJlbmRl
ckNvdW50ZXI6Om9yaWdpbmFsVGV4dCgpIHRvIHNvbWV0aGluZyBlbHNlLCBvciB0bworICAgICAg
ICBkaXZvcmNlIHRleHQtY29tYmluZSBmcm9tIG9yaWdpbmFsVGV4dCgpLCBidXQgdGhhdCBpcyBv
dXQgb2Ygc2NvcGUgZm9yIHRoaXMKKyAgICAgICAgcGF0Y2guIFNpbWlsYXJseSwgaHlwaGVuYXRp
b24gdXNlcyB0aGlzIHNhbWUgbWVjaGFuaXNtLCBidXQgYmVjYXVzZSB0aGUKKyAgICAgICAgaHlw
aGVuYXRlZCBzdHJpbmcgbmVlZHMgdG8gYmUgY3JlYXRlZCwgd2UgbXVzdCBvd24gdGhlIHN0cmlu
ZyBzdG9yYWdlIChzbworICAgICAgICBTdHJpbmdWaWV3IGlzIGluY29ycmVjdCBoZXJlKS4KKwor
ICAgICAgICBBbm90aGVyIHJlYXNvbiBpcyBmb3IgcGVyZm9ybWFuY2U6IFN0cmluZ1ZpZXc6OnN1
YnN0cmluZygpIGlzIGZhc3RlciB0byB1c2UKKyAgICAgICAgdGhhbiBTdHJpbmc6OnN1YnN0cmlu
Z1NoYXJpbmdJbXBsKCksIHNpbmNlIGl0IGRvZXMgbm90IGFsbG9jYXRlIGFuZCBkZXN0cm95IGEK
KyAgICAgICAgU3RyaW5nSW1wbCBvbiB0aGUgaGVhcC4gVGhpcyBwYXRjaCBtaWdyYXRlcyBhd2F5
IGZyb20KKyAgICAgICAgU3RyaW5nOjpzdWJzdHJpbmdTaGFyaW5nSW1wbCgpIGFuZCBvbnRvIFN0
cmluZ1ZpZXc6OnN1YnN0cmluZygpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRo
ZXJlIGlzIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0
aW9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVUZXh0Qm94OjpoeXBoZW5hdGVkU3RyaW5nRm9yVGV4dFJ1bik6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb21i
aW5lVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb21iaW5lVGV4dDo6bWF5YmVH
ZXRDb21iaW5lZFN0cmluZ0ZvclJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJD
b21iaW5lVGV4dDo6Z2V0U3RyaW5nVG9SZW5kZXIpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJDb21iaW5lVGV4dC5oOgorCiAyMDE2LTA4LTA4ICBBbmRlcnMgQ2FybHNzb24g
IDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHRoZSBXaW5kb3dzIGJ1aWxkLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCmluZGV4IGNkODAyZWIw
M2YyNDZiNTZhZTdkOTFjNjdmNzg5Yjc5NDg0MjNkMjkuLmYzMmEwYjNiM2U1NmJmNTc5ZWEwNWQz
OTE3MDYwOWRmMjkwOWIwOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5jcHAKQEAgLTIwNCw5ICsyMDQsMTEgQEAgTGF5b3V0UmVjdCBJbmxpbmVUZXh0Qm94Ojps
b2NhbFNlbGVjdGlvblJlY3QoaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKSBjb25zdAogICAgIGNv
bnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKICAgICBjb25z
dCBGb250Q2FzY2FkZSYgZm9udCA9IGZvbnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOwog
Ci0gICAgU3RyaW5nIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXI7CisgICAgU3RyaW5nIGh5cGhlbmF0
ZWRTdHJpbmc7CiAgICAgYm9vbCByZXNwZWN0SHlwaGVuID0gZVBvcyA9PSBtX2xlbiAmJiBoYXNI
eXBoZW4oKTsKLSAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKGxpbmVTdHls
ZSwgcmVzcGVjdEh5cGhlbiA/ICZoeXBoZW5hdGVkU3RyaW5nQnVmZmVyIDogMCk7CisgICAgaWYg
KHJlc3BlY3RIeXBoZW4pCisgICAgICAgIGh5cGhlbmF0ZWRTdHJpbmcgPSBoeXBoZW5hdGVkU3Ry
aW5nRm9yVGV4dFJ1bihsaW5lU3R5bGUpOworICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVj
dFRleHRSdW4obGluZVN0eWxlLCBoeXBoZW5hdGVkU3RyaW5nKTsKIAogICAgIExheW91dFJlY3Qg
c2VsZWN0aW9uUmVjdCA9IExheW91dFJlY3QoTGF5b3V0UG9pbnQobG9naWNhbExlZnQoKSwgc2Vs
ZWN0aW9uVG9wKSwgTGF5b3V0U2l6ZShtX2xvZ2ljYWxXaWR0aCwgc2VsZWN0aW9uSGVpZ2h0KSk7
CiAgICAgLy8gQXZvaWQgY29tcHV0aW5nIHRoZSBmb250IHdpZHRoIHdoZW4gdGhlIGVudGlyZSBs
aW5lIGJveCBpcyBzZWxlY3RlZCBhcyBhbiBvcHRpbWl6YXRpb24uCkBAIC00OTcsMjUgKzQ5OSwx
NCBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsCiAgICAgfQogCiAgICAgLy8gMi4gTm93IHBhaW50
IHRoZSBmb3JlZ3JvdW5kLCBpbmNsdWRpbmcgdGV4dCBhbmQgZGVjb3JhdGlvbnMgbGlrZSB1bmRl
cmxpbmUvb3ZlcmxpbmUgKGluIHF1aXJrcyBtb2RlIG9ubHkpLgotICAgIGludCBsZW5ndGggPSBt
X2xlbjsKLSAgICBpbnQgbWF4aW11bUxlbmd0aDsKLSAgICBTdHJpbmcgc3RyaW5nOwotICAgIGlm
ICghY29tYmluZWRUZXh0KSB7Ci0gICAgICAgIHN0cmluZyA9IHJlbmRlcmVyKCkudGV4dCgpOwot
ICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCkgIT0gc3RyaW5nLmxlbmd0
aCgpIHx8IG1fc3RhcnQpIHsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3N0YXJ0ICsgbGVuZ3RoKSA8PSBzdHJpbmcu
bGVuZ3RoKCkpOwotICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZ1NoYXJpbmdJ
bXBsKG1fc3RhcnQsIGxlbmd0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgbWF4aW11bUxlbmd0aCA9
IHJlbmRlcmVyKCkudGV4dExlbmd0aCgpIC0gbV9zdGFydDsKLSAgICB9IGVsc2UgewotICAgICAg
ICBjb21iaW5lZFRleHQtPmdldFN0cmluZ1RvUmVuZGVyKG1fc3RhcnQsIHN0cmluZywgbGVuZ3Ro
KTsKLSAgICAgICAgbWF4aW11bUxlbmd0aCA9IGxlbmd0aDsKLSAgICB9CisgICAgU3RyaW5nIGFs
dGVybmF0ZVN0cmluZ1RvUmVuZGVyOworICAgIGlmIChjb21iaW5lZFRleHQpCisgICAgICAgIGFs
dGVybmF0ZVN0cmluZ1RvUmVuZGVyID0gY29tYmluZWRUZXh0LT5jb21iaW5lZFN0cmluZ0ZvclJl
bmRlcmluZygpOworICAgIGVsc2UgaWYgKGhhc0h5cGhlbigpKQorICAgICAgICBhbHRlcm5hdGVT
dHJpbmdUb1JlbmRlciA9IGh5cGhlbmF0ZWRTdHJpbmdGb3JUZXh0UnVuKGxpbmVTdHlsZSk7CiAK
LSAgICBTdHJpbmcgaHlwaGVuYXRlZFN0cmluZ0J1ZmZlcjsKLSAgICBUZXh0UnVuIHRleHRSdW4g
PSBjb25zdHJ1Y3RUZXh0UnVuKGxpbmVTdHlsZSwgc3RyaW5nLCBtYXhpbXVtTGVuZ3RoLCBoYXNI
eXBoZW4oKSA/ICZoeXBoZW5hdGVkU3RyaW5nQnVmZmVyIDogbnVsbHB0cik7Ci0gICAgaWYgKGhh
c0h5cGhlbigpKQotICAgICAgICBsZW5ndGggPSB0ZXh0UnVuLmxlbmd0aCgpOworICAgIFRleHRS
dW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4obGluZVN0eWxlLCBhbHRlcm5hdGVTdHJpbmdU
b1JlbmRlcik7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dFJ1bi5sZW5ndGgoKTsKIAogICAg
IGludCBzZWxlY3Rpb25TdGFydCA9IDA7CiAgICAgaW50IHNlbGVjdGlvbkVuZCA9IDA7CkBAIC02
MDAsNyArNTkxLDcgQEAgc3RkOjpwYWlyPGludCwgaW50PiBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rp
b25TdGFydEVuZCgpIGNvbnN0CiB7CiAgICAgYXV0byBzZWxlY3Rpb25TdGF0ZSA9IHJlbmRlcmVy
KCkuc2VsZWN0aW9uU3RhdGUoKTsKICAgICBpZiAoc2VsZWN0aW9uU3RhdGUgPT0gUmVuZGVyT2Jq
ZWN0OjpTZWxlY3Rpb25JbnNpZGUpCi0gICAgICAgIHJldHVybiB7MCwgbV9sZW59OworICAgICAg
ICByZXR1cm4geyAwLCBtX2xlbiB9OwogICAgIAogICAgIGludCBzdGFydDsKICAgICBpbnQgZW5k
OwpAQCAtNjM2LDIwICs2MjcsMTcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlv
bihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGIKIAogICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKICAgICB1cGRhdGVH
cmFwaGljc0NvbnRleHQoY29udGV4dCwgVGV4dFBhaW50U3R5bGUoYykpOyAvLyBEb24ndCBkcmF3
IHRleHQgYXQgYWxsIQotICAgIAorCiAgICAgLy8gSWYgdGhlIHRleHQgaXMgdHJ1bmNhdGVkLCBs
ZXQgdGhlIHRoaW5nIGJlaW5nIHBhaW50ZWQgaW4gdGhlIHRydW5jYXRpb24KICAgICAvLyBkcmF3
IGl0cyBvd24gaGlnaGxpZ2h0LgotICAgIGludCBsZW5ndGggPSBtX3RydW5jYXRpb24gIT0gY05v
VHJ1bmNhdGlvbiA/IG1fdHJ1bmNhdGlvbiA6IG1fbGVuOwotICAgIFN0cmluZyBzdHJpbmcgPSBy
ZW5kZXJlcigpLnRleHQoKTsKIAotICAgIGlmIChzdHJpbmcubGVuZ3RoKCkgIT0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGxlbmd0aCkgfHwgbV9zdGFydCkgewotICAgICAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zdGFydCArIGxlbmd0
aCkgPD0gc3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmlu
Z1NoYXJpbmdJbXBsKG1fc3RhcnQsIGxlbmd0aCk7Ci0gICAgfQorICAgIHVuc2lnbmVkIGxlbmd0
aCA9IG1fdHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9uID8gbV90cnVuY2F0aW9uIDogbGVuKCk7
CiAKLSAgICBTdHJpbmcgaHlwaGVuYXRlZFN0cmluZ0J1ZmZlcjsKLSAgICBib29sIHJlc3BlY3RI
eXBoZW4gPSBzZWxlY3Rpb25FbmQgPT0gbGVuZ3RoICYmIGhhc0h5cGhlbigpOwotICAgIFRleHRS
dW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIHN0cmluZywgcmVuZGVyZXIoKS50
ZXh0TGVuZ3RoKCkgLSBtX3N0YXJ0LCByZXNwZWN0SHlwaGVuID8gJmh5cGhlbmF0ZWRTdHJpbmdC
dWZmZXIgOiBudWxscHRyKTsKKyAgICBTdHJpbmcgaHlwaGVuYXRlZFN0cmluZzsKKyAgICBib29s
IHJlc3BlY3RIeXBoZW4gPSBzZWxlY3Rpb25FbmQgPT0gc3RhdGljX2Nhc3Q8aW50PihsZW5ndGgp
ICYmIGhhc0h5cGhlbigpOworICAgIGlmIChyZXNwZWN0SHlwaGVuKQorICAgICAgICBoeXBoZW5h
dGVkU3RyaW5nID0gaHlwaGVuYXRlZFN0cmluZ0ZvclRleHRSdW4oc3R5bGUsIGxlbmd0aCk7Cisg
ICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgaHlwaGVuYXRlZFN0
cmluZywgT3B0aW9uYWw8dW5zaWduZWQ+KGxlbmd0aCkpOwogICAgIGlmIChyZXNwZWN0SHlwaGVu
KQogICAgICAgICBzZWxlY3Rpb25FbmQgPSB0ZXh0UnVuLmxlbmd0aCgpOwogCkBAIC0xMDE2LDMy
ICsxMDA0LDI3IEBAIGZsb2F0IElubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KGludCBv
ZmZzZXQpIGNvbnN0CiAgICAgcmV0dXJuIHNuYXBSZWN0VG9EZXZpY2VQaXhlbHNXaXRoV3JpdGlu
Z0RpcmVjdGlvbihzZWxlY3Rpb25SZWN0LCByZW5kZXJlcigpLmRvY3VtZW50KCkuZGV2aWNlU2Nh
bGVGYWN0b3IoKSwgcnVuLmx0cigpKS5tYXhYKCk7CiB9CiAKLVRleHRSdW4gSW5saW5lVGV4dEJv
eDo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFN0cmluZyogaHlw
aGVuYXRlZFN0cmluZ0J1ZmZlcikgY29uc3QKK1N0cmluZ1ZpZXcgSW5saW5lVGV4dEJveDo6c3Vi
c3RyaW5nVG9SZW5kZXIoT3B0aW9uYWw8dW5zaWduZWQ+IG92ZXJyaWRpbmdMZW5ndGgpIGNvbnN0
CiB7Ci0gICAgQVNTRVJUKHJlbmRlcmVyKCkudGV4dCgpKTsKLQotICAgIFN0cmluZyBzdHJpbmcg
PSByZW5kZXJlcigpLnRleHQoKTsKLSAgICB1bnNpZ25lZCBzdGFydFBvcyA9IHN0YXJ0KCk7Ci0g
ICAgdW5zaWduZWQgbGVuZ3RoID0gbGVuKCk7Ci0KLSAgICBpZiAoc3RyaW5nLmxlbmd0aCgpICE9
IGxlbmd0aCB8fCBzdGFydFBvcykKLSAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZ1No
YXJpbmdJbXBsKHN0YXJ0UG9zLCBsZW5ndGgpOwotCi0gICAgcmV0dXJuIGNvbnN0cnVjdFRleHRS
dW4oc3R5bGUsIHN0cmluZywgcmVuZGVyZXIoKS50ZXh0TGVuZ3RoKCkgLSBzdGFydFBvcywgaHlw
aGVuYXRlZFN0cmluZ0J1ZmZlcik7CisgICAgcmV0dXJuIFN0cmluZ1ZpZXcocmVuZGVyZXIoKS50
ZXh0KCkpLnN1YnN0cmluZyhzdGFydCgpLCBvdmVycmlkaW5nTGVuZ3RoLnZhbHVlT3IobGVuKCkp
KTsKIH0KIAotVGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgU3RyaW5nIHN0cmluZywgdW5zaWduZWQgbWF4aW11bUxlbmd0aCwg
U3RyaW5nKiBoeXBoZW5hdGVkU3RyaW5nQnVmZmVyKSBjb25zdAorU3RyaW5nIElubGluZVRleHRC
b3g6Omh5cGhlbmF0ZWRTdHJpbmdGb3JUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
T3B0aW9uYWw8dW5zaWduZWQ+IGFsdGVybmF0ZUxlbmd0aCkgY29uc3QKIHsKLSAgICB1bnNpZ25l
ZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgQVNTRVJUKGhhc0h5cGhlbigpKTsKKyAg
ICByZXR1cm4gbWFrZVN0cmluZyhzdWJzdHJpbmdUb1JlbmRlcihhbHRlcm5hdGVMZW5ndGgpLCBz
dHlsZS5oeXBoZW5TdHJpbmcoKSk7Cit9CiAKLSAgICBpZiAoaHlwaGVuYXRlZFN0cmluZ0J1ZmZl
cikgewotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGh5cGhlblN0cmluZyA9IHN0eWxlLmh5
cGhlblN0cmluZygpOwotICAgICAgICAqaHlwaGVuYXRlZFN0cmluZ0J1ZmZlciA9IHN0cmluZyAr
IGh5cGhlblN0cmluZzsKLSAgICAgICAgc3RyaW5nID0gKmh5cGhlbmF0ZWRTdHJpbmdCdWZmZXI7
Ci0gICAgICAgIG1heGltdW1MZW5ndGggPSBsZW5ndGggKyBoeXBoZW5TdHJpbmcubGVuZ3RoKCk7
Ci0gICAgfQorVGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgU3RyaW5nVmlldyBhbHRlcm5hdGVTdHJpbmdUb1JlbmRlciwgT3B0
aW9uYWw8dW5zaWduZWQ+IGFsdGVybmF0ZUxlbmd0aCkgY29uc3QKK3sKKyAgICBpZiAoYWx0ZXJu
YXRlU3RyaW5nVG9SZW5kZXIuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0
UnVuKHN0eWxlLCBzdWJzdHJpbmdUb1JlbmRlcihhbHRlcm5hdGVMZW5ndGgpLCByZW5kZXJlcigp
LnRleHRMZW5ndGgoKSAtIHN0YXJ0KCkpOworICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuKHN0
eWxlLCBhbHRlcm5hdGVTdHJpbmdUb1JlbmRlciwgYWx0ZXJuYXRlU3RyaW5nVG9SZW5kZXIubGVu
Z3RoKCkpOworfQogCi0gICAgQVNTRVJUKG1heGltdW1MZW5ndGggPj0gbGVuZ3RoKTsKK1RleHRS
dW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIFN0cmluZ1ZpZXcgc3RyaW5nLCB1bnNpZ25lZCBtYXhpbXVtTGVuZ3RoKSBjb25zdAorewor
ICAgIEFTU0VSVChtYXhpbXVtTGVuZ3RoID49IHN0cmluZy5sZW5ndGgoKSk7CiAKICAgICBUZXh0
UnVuIHJ1bihzdHJpbmcsIHRleHRQb3MoKSwgZXhwYW5zaW9uKCksIGV4cGFuc2lvbkJlaGF2aW9y
KCksIGRpcmVjdGlvbigpLCBkaXJPdmVycmlkZSgpIHx8IHN0eWxlLnJ0bE9yZGVyaW5nKCkgPT0g
VmlzdWFsT3JkZXIsICFyZW5kZXJlcigpLmNhblVzZVNpbXBsZUZvbnRDb2RlUGF0aCgpKTsKICAg
ICBydW4uc2V0VGFiU2l6ZSghc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCksIHN0eWxlLnRhYlNp
emUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAppbmRleCBlYzE4
OTU3NDMzOTFmMGY0ZDQzMjNlN2M1YjM0NzdlMDBiYWVlZThlLi42N2I2MzRiYTU3OGMzODBmNzA5
YjIzMWNhNmIzMTg5ODczNTY5NGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmgKQEAgLTExMiw4ICsxMTIsMTAgQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IHNl
bGVjdGlvbkJvdHRvbSgpIGNvbnN0OwogICAgIExheW91dFVuaXQgc2VsZWN0aW9uSGVpZ2h0KCkg
Y29uc3Q7CiAKLSAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUm
LCBTdHJpbmcqIGh5cGhlbmF0ZWRTdHJpbmdCdWZmZXIgPSBudWxscHRyKSBjb25zdDsKLSAgICBU
ZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmLCBTdHJpbmcsIHVuc2ln
bmVkIG1heGltdW1MZW5ndGgsIFN0cmluZyogaHlwaGVuYXRlZFN0cmluZ0J1ZmZlciA9IG51bGxw
dHIpIGNvbnN0OworICAgIFN0cmluZ1ZpZXcgc3Vic3RyaW5nVG9SZW5kZXIoT3B0aW9uYWw8dW5z
aWduZWQ+IG92ZXJyaWRpbmdMZW5ndGggPSB7IH0pIGNvbnN0OworICAgIFN0cmluZyBoeXBoZW5h
dGVkU3RyaW5nRm9yVGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYsIE9wdGlvbmFsPHVuc2lnbmVk
PiBhbHRlcm5hdGVMZW5ndGggPSB7IH0pIGNvbnN0OworICAgIFRleHRSdW4gY29uc3RydWN0VGV4
dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYsIFN0cmluZ1ZpZXcgYWx0ZXJuYXRlU3RyaW5nVG9SZW5k
ZXIgPSB7IH0sIE9wdGlvbmFsPHVuc2lnbmVkPiBhbHRlcm5hdGVMZW5ndGggPSB7IH0pIGNvbnN0
OworICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYsIFN0cmlu
Z1ZpZXcsIHVuc2lnbmVkIG1heGltdW1MZW5ndGgpIGNvbnN0OwogCiBwdWJsaWM6CiAgICAgRmxv
YXRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBGbG9h
dFJlY3QoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAKaW5kZXggZDc0YTYyMDRlNmQ5ZWE5ODRm
NzU5NDZlOTAxM2JlMjU5YjFhY2U5MS4uYjUwM2ExMzgwOTM0MGU3YWFhMjk2ZTBiZDc4YzVlNmIw
MDJhNThlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJp
bmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRl
eHQuY3BwCkBAIC04NCwxNyArODQsMTUgQEAgT3B0aW9uYWw8RmxvYXRQb2ludD4gUmVuZGVyQ29t
YmluZVRleHQ6OmNvbXB1dGVUZXh0T3JpZ2luKGNvbnN0IEZsb2F0UmVjdCYgYm94UmUKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFJlbmRlckNvbWJpbmVUZXh0OjpnZXRTdHJpbmdUb1Jl
bmRlcihpbnQgc3RhcnQsIFN0cmluZyYgc3RyaW5nLCBpbnQmIGxlbmd0aCkgY29uc3QKK1N0cmlu
ZyBSZW5kZXJDb21iaW5lVGV4dDo6Y29tYmluZWRTdHJpbmdGb3JSZW5kZXJpbmcoKSBjb25zdAog
ewotICAgIEFTU0VSVChzdGFydCA+PSAwKTsKICAgICBpZiAobV9pc0NvbWJpbmVkKSB7Ci0gICAg
ICAgIHN0cmluZyA9IG9yaWdpbmFsVGV4dCgpOwotICAgICAgICBsZW5ndGggPSBzdHJpbmcubGVu
Z3RoKCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBvcmlnaW5hbFRleHQgPSB0aGlz
LT5vcmlnaW5hbFRleHQoKTsKKyAgICAgICAgQVNTRVJUKCFvcmlnaW5hbFRleHQuaXNOdWxsKCkp
OworICAgICAgICByZXR1cm4gb3JpZ2luYWxUZXh0OwogICAgIH0KICAKLSAgICBzdHJpbmcgPSB0
ZXh0KCk7Ci0gICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZ1NoYXJpbmdJbXBsKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzdGFydCksIGxlbmd0aCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9p
ZCBSZW5kZXJDb21iaW5lVGV4dDo6Y29tYmluZVRleHQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaAppbmRleCA0NDJkOGExNGI5NmUzNDY0ZjY2MmE0ZTBj
MGM1OGVhNjRkNWI2NjcxLi43ZjE5ZTI4MzE3Zjg4NTI2MTJjNGEwZmQ4ODc0NzFjZTM4M2QyNTA2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaApAQCAt
MzYsNyArMzYsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNvbWJpbmVUZXh0KCk7CiAgICAgT3B0
aW9uYWw8RmxvYXRQb2ludD4gY29tcHV0ZVRleHRPcmlnaW4oY29uc3QgRmxvYXRSZWN0JiBib3hS
ZWN0KSBjb25zdDsKLSAgICB2b2lkIGdldFN0cmluZ1RvUmVuZGVyKGludCwgU3RyaW5nJiwgaW50
JiBsZW5ndGgpIGNvbnN0OworICAgIFN0cmluZyBjb21iaW5lZFN0cmluZ0ZvclJlbmRlcmluZygp
IGNvbnN0OwogICAgIGJvb2wgaXNDb21iaW5lZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb21iaW5l
ZDsgfQogICAgIGZsb2F0IGNvbWJpbmVkVGV4dFdpZHRoKGNvbnN0IEZvbnRDYXNjYWRlJiBmb250
KSBjb25zdCB7IHJldHVybiBmb250LnNpemUoKTsgfQogICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBv
cmlnaW5hbEZvbnQoKSBjb25zdCB7IHJldHVybiBwYXJlbnQoKS0+c3R5bGUoKS5mb250Q2FzY2Fk
ZSgpOyB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>