<?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>70408</bug_id>
          
          <creation_ts>2011-10-19 03:20:12 -0700</creation_ts>
          <short_desc>Move rule matching and applying to separate functions from CSSStyleSelector::styleForElement</short_desc>
          <delta_ts>2011-10-20 04:24:24 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>486655</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-19 03:20:12 -0700</bug_when>
    <thetext>A cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486658</commentid>
    <comment_count>1</comment_count>
      <attachid>111587</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-19 03:27:32 -0700</bug_when>
    <thetext>Created attachment 111587
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486660</commentid>
    <comment_count>2</comment_count>
      <attachid>111587</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-10-19 03:56:57 -0700</bug_when>
    <thetext>Comment on attachment 111587
patch

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

r=me.

I suspect that this code is vulnerable to some integer overflows with all the assignments of unsigned/size_t values to int variables (the MatchResult members.)
Still, r+ since you&apos;re just moving the code around.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:752
&gt; +    if (!resolveForRootDefault) {

We should use early return here.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:760
&gt; +            // Ask if the HTML element has mapped attributes.

This comment implies that m_styledElement is an HTML element, but given the isHTMLElement() check further down, is that always the case?

&gt; Source/WebCore/css/CSSStyleSelector.cpp:764
&gt; +                for (unsigned i = 0; i &lt; map-&gt;length(); i++) {

Style, ++i.
NamedNodeMap::length() returns size_t, not unsigned.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:769
&gt; +                            result.firstAuthorRule =result.lastAuthorRule;

Also style, should have space after =.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:786
&gt; +                    for (unsigned i = 0; i &lt; additionalDeclsSize; i++)

Style, ++i.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:1653
&gt; +    // If we have first-letter pseudo style, do not share this style

Might as well tack on a period at the end of this comment.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:2189
&gt; +    // Line-height is set when we are sure we decided on the font-size

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486662</commentid>
    <comment_count>3</comment_count>
      <attachid>111587</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-10-19 03:59:10 -0700</bug_when>
    <thetext>Comment on attachment 111587
patch

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

&gt; Source/WebCore/css/CSSStyleSelector.cpp:782
&gt; +                    unsigned additionalDeclsSize = m_additionalAttributeStyleDecls.size();

Vector::size() returns size_t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486834</commentid>
    <comment_count>4</comment_count>
      <attachid>111632</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-19 09:07:35 -0700</bug_when>
    <thetext>Created attachment 111632
new patch

Expanded the refactoring a bit so requesting re-review. This patch uses the MatchResult struct in more places and gets rid of the resolveForRootDefault parameter for the new functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487474</commentid>
    <comment_count>5</comment_count>
      <attachid>111632</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-10-20 04:21:01 -0700</bug_when>
    <thetext>Comment on attachment 111632
new patch

r=me, though let&apos;s fight about size_t vs unsigned indexing at some point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487477</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-20 04:24:24 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/97962</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111587</attachid>
            <date>2011-10-19 03:27:32 -0700</date>
            <delta_ts>2011-10-19 09:07:35 -0700</delta_ts>
            <desc>patch</desc>
            <filename>styleforelement-cleanup.patch</filename>
            <type>text/plain</type>
            <size>15411</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3ODQzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMTAtMTkgIEFudHRpIEtv
aXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgcnVsZSBtYXRjaGluZyBh
bmQgYXBwbHlpbmcgdG8gc2VwYXJhdGUgZnVuY3Rpb25zIGZyb20gQ1NTU3R5bGVTZWxlY3Rvcjo6
c3R5bGVGb3JFbGVtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MDQwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIC0gTW92ZSBtYXRjaGluZyBjb2RlIHRvIG1hdGNoQWxsUnVsZXMgYW5kIGFwcGx5aW5n
IHRvIGFwcGx5TWF0Y2hlZERlY2xhcmF0aW9ucy4KKyAgICAgICAgLSBFbmNhcHN1bGF0ZSB0aGUg
bWF0Y2hpbmcgcmVzdWx0cyBpbnRvIGEgc3RydWN0LgorICAgICAgICAtIE1vdmUgZmlyc3QtbGlu
ZSBzdHlsZSBhZGp1c3RtZW50IHRvIGFkanVzdFJlbmRlclN0eWxlKCkuCisKKyAgICAgICAgKiBj
c3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjptYXRjaEFsbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6
OnN0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjph
ZGp1c3RSZW5kZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjph
cHBseU1hdGNoZWREZWNsYXJhdGlvbnMpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9y
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpNYXRjaFJlc3VsdDo6TWF0
Y2hSZXN1bHQpOgorCiAyMDExLTEwLTEzICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vdmUgSlMgc3BlY2lmaWMgcG9w
b3ZlciBoYW5kbGluZyB0byBKYXZhU2NyaXB0U291cmNlRnJhbWUuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiA5Nzc1OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQ0LDYg
Kzc0NCw3MyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OnNvcnRNYXRjaGVkUnVsZXMoCiB7CiAg
ICAgc3RkOjpzb3J0KG1fbWF0Y2hlZFJ1bGVzLmJlZ2luKCksIG1fbWF0Y2hlZFJ1bGVzLmVuZCgp
LCBjb21wYXJlUnVsZXMpOwogfQorCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQWxsUnVs
ZXMoTWF0Y2hSZXN1bHQmIHJlc3VsdCwgYm9vbCByZXNvbHZlRm9yUm9vdERlZmF1bHQpCit7Cisg
ICAgbWF0Y2hVQVJ1bGVzKHJlc3VsdC5maXJzdFVBUnVsZSwgcmVzdWx0Lmxhc3RVQVJ1bGUpOwor
ICAgIAorICAgIGlmICghcmVzb2x2ZUZvclJvb3REZWZhdWx0KSB7CisgICAgICAgIC8vIDQuIE5v
dyB3ZSBjaGVjayB1c2VyIHNoZWV0IHJ1bGVzLgorICAgICAgICBpZiAobV9tYXRjaEF1dGhvckFu
ZFVzZXJTdHlsZXMpCisgICAgICAgICAgICBtYXRjaFJ1bGVzKG1fdXNlclN0eWxlLmdldCgpLCBy
ZXN1bHQuZmlyc3RVc2VyUnVsZSwgcmVzdWx0Lmxhc3RVc2VyUnVsZSwgZmFsc2UpOworICAgICAg
ICAgICAgCisgICAgICAgIC8vIDUuIE5vdyBjaGVjayBhdXRob3IgcnVsZXMsIGJlZ2lubmluZyBm
aXJzdCB3aXRoIHByZXNlbnRhdGlvbmFsIGF0dHJpYnV0ZXMKKyAgICAgICAgLy8gbWFwcGVkIGZy
b20gSFRNTC4KKyAgICAgICAgaWYgKG1fc3R5bGVkRWxlbWVudCkgeworICAgICAgICAgICAgLy8g
QXNrIGlmIHRoZSBIVE1MIGVsZW1lbnQgaGFzIG1hcHBlZCBhdHRyaWJ1dGVzLgorICAgICAgICAg
ICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aGFzTWFwcGVkQXR0cmlidXRlcygpKSB7CisgICAgICAg
ICAgICAgICAgLy8gV2FsayBvdXIgYXR0cmlidXRlIGxpc3QgYW5kIGFkZCBpbiBlYWNoIGRlY2wu
CisgICAgICAgICAgICAgICAgY29uc3QgTmFtZWROb2RlTWFwKiBtYXAgPSBtX3N0eWxlZEVsZW1l
bnQtPmF0dHJpYnV0ZU1hcCgpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtYXAtPmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRl
KiBhdHRyID0gbWFwLT5hdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICAgICAgICAgICAgICBpZiAo
YXR0ci0+aXNNYXBwZWRBdHRyaWJ1dGUoKSAmJiBhdHRyLT5kZWNsKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC5sYXN0QXV0aG9yUnVsZSA9IG1fbWF0Y2hlZERlY2xzLnNpemUo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZmlyc3RBdXRob3JSdWxlID09
IC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5maXJzdEF1dGhvclJ1bGUg
PXJlc3VsdC5sYXN0QXV0aG9yUnVsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1hdGNo
ZWREZWNsYXJhdGlvbihhdHRyLT5kZWNsKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBOb3cgd2UgY2hlY2sgYWRkaXRpb25hbCBtYXBwZWQgZGVjbGFyYXRpb25zLgorICAgICAgICAg
ICAgLy8gVGFibGVzIGFuZCB0YWJsZSBjZWxscyBzaGFyZSBhbiBhZGRpdGlvbmFsIG1hcHBlZCBy
dWxlIHRoYXQgbXVzdCBiZSBhcHBsaWVkCisgICAgICAgICAgICAvLyBhZnRlciBhbGwgYXR0cmli
dXRlcywgc2luY2UgdGhlaXIgbWFwcGVkIHN0eWxlIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBvZiBt
dWx0aXBsZSBhdHRyaWJ1dGVzLgorICAgICAgICAgICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+Y2Fu
SGF2ZUFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzKCkpIHsKKyAgICAgICAgICAgICAgICBt
X2FkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzLmNsZWFyKCk7CisgICAgICAgICAgICAgICAg
bV9zdHlsZWRFbGVtZW50LT5hZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNscyhtX2FkZGl0aW9u
YWxBdHRyaWJ1dGVTdHlsZURlY2xzKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fYWRkaXRpb25h
bEF0dHJpYnV0ZVN0eWxlRGVjbHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGFkZGl0aW9uYWxEZWNsc1NpemUgPSBtX2FkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURl
Y2xzLnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5maXJzdEF1dGhvclJ1
bGUgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuZmlyc3RBdXRob3JSdWxl
ID0gbV9tYXRjaGVkRGVjbHMuc2l6ZSgpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQubGFz
dEF1dGhvclJ1bGUgPSBtX21hdGNoZWREZWNscy5zaXplKCkgKyBhZGRpdGlvbmFsRGVjbHNTaXpl
IC0gMTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFkZGl0
aW9uYWxEZWNsc1NpemU7IGkrKykKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1hdGNoZWRE
ZWNsYXJhdGlvbihtX2FkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzW2ldKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9zdHlsZWRFbGVtZW50
LT5pc0hUTUxFbGVtZW50KCkpIHsKKyAgICAgICAgICAgICAgICBib29sIGlzQXV0bzsKKyAgICAg
ICAgICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSB0b0hUTUxFbGVtZW50KG1f
c3R5bGVkRWxlbWVudCktPmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmlidXRlKGlzQXV0
byk7CisgICAgICAgICAgICAgICAgaWYgKGlzQXV0bykKKyAgICAgICAgICAgICAgICAgICAgYWRk
TWF0Y2hlZERlY2xhcmF0aW9uKHRleHREaXJlY3Rpb24gPT0gTFRSID8gbGVmdFRvUmlnaHREZWNs
YXJhdGlvbigpIDogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gNi4gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhv
ciBzaGVldHMgbmV4dC4KKyAgICAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQor
ICAgICAgICAgICAgbWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCByZXN1bHQuZmlyc3RB
dXRob3JSdWxlLCByZXN1bHQubGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAvLyA3LiBOb3cgY2hlY2sgb3VyIGlubGluZSBzdHlsZSBhdHRyaWJ1dGUuCisgICAg
ICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQpIHsK
KyAgICAgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBpbmxpbmVEZWNsID0gbV9z
dHlsZWRFbGVtZW50LT5pbmxpbmVTdHlsZURlY2woKTsKKyAgICAgICAgICAgIGlmIChpbmxpbmVE
ZWNsKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0Lmxhc3RBdXRob3JSdWxlID0gbV9tYXRjaGVk
RGVjbHMuc2l6ZSgpOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZmlyc3RBdXRob3JSdWxl
ID09IC0xKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuZmlyc3RBdXRob3JSdWxlID0gcmVz
dWx0Lmxhc3RBdXRob3JSdWxlOworICAgICAgICAgICAgICAgIGFkZE1hdGNoZWREZWNsYXJhdGlv
bihpbmxpbmVEZWNsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KICAgICAK
IGlubGluZSB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmluaXRFbGVtZW50KEVsZW1lbnQqIGUpCiB7
CkBAIC0xMTY4LDExMCArMTIzNSwxMCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHls
ZVNlbGVjdG9yCiAKICAgICBlbnN1cmVEZWZhdWx0U3R5bGVTaGVldHNGb3JFbGVtZW50KGVsZW1l
bnQpOwogCi0gICAgaW50IGZpcnN0VUFSdWxlID0gLTEsIGxhc3RVQVJ1bGUgPSAtMTsKLSAgICBp
bnQgZmlyc3RVc2VyUnVsZSA9IC0xLCBsYXN0VXNlclJ1bGUgPSAtMTsKLSAgICBpbnQgZmlyc3RB
dXRob3JSdWxlID0gLTEsIGxhc3RBdXRob3JSdWxlID0gLTE7Ci0gICAgbWF0Y2hVQVJ1bGVzKGZp
cnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsKLQotICAgIGlmICghcmVzb2x2ZUZvclJvb3REZWZhdWx0
KSB7Ci0gICAgICAgIC8vIDQuIE5vdyB3ZSBjaGVjayB1c2VyIHNoZWV0IHJ1bGVzLgotICAgICAg
ICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCi0gICAgICAgICAgICBtYXRjaFJ1bGVz
KG1fdXNlclN0eWxlLmdldCgpLCBmaXJzdFVzZXJSdWxlLCBsYXN0VXNlclJ1bGUsIGZhbHNlKTsK
LQotICAgICAgICAvLyA1LiBOb3cgY2hlY2sgYXV0aG9yIHJ1bGVzLCBiZWdpbm5pbmcgZmlyc3Qg
d2l0aCBwcmVzZW50YXRpb25hbCBhdHRyaWJ1dGVzCi0gICAgICAgIC8vIG1hcHBlZCBmcm9tIEhU
TUwuCi0gICAgICAgIGlmIChtX3N0eWxlZEVsZW1lbnQpIHsKLSAgICAgICAgICAgIC8vIEFzayBp
ZiB0aGUgSFRNTCBlbGVtZW50IGhhcyBtYXBwZWQgYXR0cmlidXRlcy4KLSAgICAgICAgICAgIGlm
IChtX3N0eWxlZEVsZW1lbnQtPmhhc01hcHBlZEF0dHJpYnV0ZXMoKSkgewotICAgICAgICAgICAg
ICAgIC8vIFdhbGsgb3VyIGF0dHJpYnV0ZSBsaXN0IGFuZCBhZGQgaW4gZWFjaCBkZWNsLgotICAg
ICAgICAgICAgICAgIGNvbnN0IE5hbWVkTm9kZU1hcCogbWFwID0gbV9zdHlsZWRFbGVtZW50LT5h
dHRyaWJ1dGVNYXAoKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bWFwLT5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSogYXR0
ciA9IG1hcC0+YXR0cmlidXRlSXRlbShpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHIt
PmlzTWFwcGVkQXR0cmlidXRlKCkgJiYgYXR0ci0+ZGVjbCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBsYXN0QXV0aG9yUnVsZSA9IG1fbWF0Y2hlZERlY2xzLnNpemUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChmaXJzdEF1dGhvclJ1bGUgPT0gLTEpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmlyc3RBdXRob3JSdWxlID0gbGFzdEF1dGhvclJ1bGU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhZGRNYXRjaGVkRGVjbGFyYXRpb24oYXR0ci0+ZGVjbCgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgLy8gTm93IHdlIGNoZWNrIGFkZGl0aW9uYWwgbWFwcGVkIGRlY2xhcmF0aW9u
cy4KLSAgICAgICAgICAgIC8vIFRhYmxlcyBhbmQgdGFibGUgY2VsbHMgc2hhcmUgYW4gYWRkaXRp
b25hbCBtYXBwZWQgcnVsZSB0aGF0IG11c3QgYmUgYXBwbGllZAotICAgICAgICAgICAgLy8gYWZ0
ZXIgYWxsIGF0dHJpYnV0ZXMsIHNpbmNlIHRoZWlyIG1hcHBlZCBzdHlsZSBkZXBlbmRzIG9uIHRo
ZSB2YWx1ZXMgb2YgbXVsdGlwbGUgYXR0cmlidXRlcy4KLSAgICAgICAgICAgIGlmIChtX3N0eWxl
ZEVsZW1lbnQtPmNhbkhhdmVBZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNscygpKSB7Ci0gICAg
ICAgICAgICAgICAgbV9hZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNscy5jbGVhcigpOwotICAg
ICAgICAgICAgICAgIG1fc3R5bGVkRWxlbWVudC0+YWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlRGVj
bHMobV9hZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNscyk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFtX2FkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBhZGRpdGlvbmFsRGVjbHNTaXplID0gbV9hZGRpdGlvbmFsQXR0
cmlidXRlU3R5bGVEZWNscy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdEF1
dGhvclJ1bGUgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEF1dGhvclJ1bGUg
PSBtX21hdGNoZWREZWNscy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgIGxhc3RBdXRob3JS
dWxlID0gbV9tYXRjaGVkRGVjbHMuc2l6ZSgpICsgYWRkaXRpb25hbERlY2xzU2l6ZSAtIDE7Ci0g
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhZGRpdGlvbmFsRGVj
bHNTaXplOyBpKyspCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRNYXRjaGVkRGVjbGFyYXRp
b24obV9hZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsc1tpXSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aXNIVE1M
RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBpc0F1dG87Ci0gICAgICAgICAgICAg
ICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9uID0gdG9IVE1MRWxlbWVudChtX3N0eWxlZEVs
ZW1lbnQpLT5kaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShpc0F1dG8pOwotICAg
ICAgICAgICAgICAgIGlmIChpc0F1dG8pCi0gICAgICAgICAgICAgICAgICAgIGFkZE1hdGNoZWRE
ZWNsYXJhdGlvbih0ZXh0RGlyZWN0aW9uID09IExUUiA/IGxlZnRUb1JpZ2h0RGVjbGFyYXRpb24o
KSA6IHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAKLSAgICAgICAgLy8gNi4gQ2hlY2sgdGhlIHJ1bGVzIGluIGF1dGhvciBzaGVldHMgbmV4
dC4KLSAgICAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQotICAgICAgICAgICAg
bWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCBmaXJzdEF1dGhvclJ1bGUsIGxhc3RBdXRo
b3JSdWxlLCBmYWxzZSk7Ci0KLSAgICAgICAgLy8gNy4gTm93IGNoZWNrIG91ciBpbmxpbmUgc3R5
bGUgYXR0cmlidXRlLgotICAgICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYg
bV9zdHlsZWRFbGVtZW50KSB7Ci0gICAgICAgICAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biogaW5saW5lRGVjbCA9IG1fc3R5bGVkRWxlbWVudC0+aW5saW5lU3R5bGVEZWNsKCk7Ci0gICAg
ICAgICAgICBpZiAoaW5saW5lRGVjbCkgewotICAgICAgICAgICAgICAgIGxhc3RBdXRob3JSdWxl
ID0gbV9tYXRjaGVkRGVjbHMuc2l6ZSgpOwotICAgICAgICAgICAgICAgIGlmIChmaXJzdEF1dGhv
clJ1bGUgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIGZpcnN0QXV0aG9yUnVsZSA9IGxhc3RB
dXRob3JSdWxlOwotICAgICAgICAgICAgICAgIGFkZE1hdGNoZWREZWNsYXJhdGlvbihpbmxpbmVE
ZWNsKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KKyAgICBNYXRjaFJlc3VsdCBt
YXRjaFJlc3VsdDsKKyAgICBtYXRjaEFsbFJ1bGVzKG1hdGNoUmVzdWx0LCByZXNvbHZlRm9yUm9v
dERlZmF1bHQpOwogICAgIAotICAgIC8vIE5vdyB3ZSBoYXZlIGFsbCBvZiB0aGUgbWF0Y2hlZCBy
dWxlcyBpbiB0aGUgYXBwcm9wcmlhdGUgb3JkZXIuICBXYWxrIHRoZSBydWxlcyBhbmQgYXBwbHkK
LSAgICAvLyBoaWdoLXByaW9yaXR5IHByb3BlcnRpZXMgZmlyc3QsIGkuZS4sIHRob3NlIHByb3Bl
cnRpZXMgdGhhdCBvdGhlciBwcm9wZXJ0aWVzIGRlcGVuZCBvbi4KLSAgICAvLyBUaGUgb3JkZXIg
aXMgKDEpIGhpZ2gtcHJpb3JpdHkgbm90IGltcG9ydGFudCwgKDIpIGhpZ2gtcHJpb3JpdHkgaW1w
b3J0YW50LCAoMykgbm9ybWFsIG5vdCBpbXBvcnRhbnQKLSAgICAvLyBhbmQgKDQpIG5vcm1hbCBp
bXBvcnRhbnQuCi0gICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwotICAgIGFwcGx5RGVjbGFyYXRp
b25zPHRydWU+KGZhbHNlLCAwLCBtX21hdGNoZWREZWNscy5zaXplKCkgLSAxKTsKLSAgICBpZiAo
IXJlc29sdmVGb3JSb290RGVmYXVsdCkgewotICAgICAgICBhcHBseURlY2xhcmF0aW9uczx0cnVl
Pih0cnVlLCBmaXJzdEF1dGhvclJ1bGUsIGxhc3RBdXRob3JSdWxlKTsKLSAgICAgICAgYXBwbHlE
ZWNsYXJhdGlvbnM8dHJ1ZT4odHJ1ZSwgZmlyc3RVc2VyUnVsZSwgbGFzdFVzZXJSdWxlKTsKLSAg
ICB9Ci0gICAgYXBwbHlEZWNsYXJhdGlvbnM8dHJ1ZT4odHJ1ZSwgZmlyc3RVQVJ1bGUsIGxhc3RV
QVJ1bGUpOwotICAgIAotICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBh
bmQgdXBkYXRlIGl0IG5vdy4KLSAgICB1cGRhdGVGb250KCk7Ci0KLSAgICAvLyBMaW5lLWhlaWdo
dCBpcyBzZXQgd2hlbiB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUKLSAg
ICBpZiAobV9saW5lSGVpZ2h0VmFsdWUpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVy
dHlMaW5lSGVpZ2h0LCBtX2xpbmVIZWlnaHRWYWx1ZSk7Ci0KLSAgICAvLyBOb3cgZG8gdGhlIG5v
cm1hbCBwcmlvcml0eSBVQSBwcm9wZXJ0aWVzLgotICAgIGFwcGx5RGVjbGFyYXRpb25zPGZhbHNl
PihmYWxzZSwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOwotICAgIAotICAgIC8vIENhY2hlIG91
ciBib3JkZXIgYW5kIGJhY2tncm91bmQgc28gdGhhdCB3ZSBjYW4gZXhhbWluZSB0aGVtIGxhdGVy
LgotICAgIGNhY2hlQm9yZGVyQW5kQmFja2dyb3VuZCgpOwotICAgIAotICAgIC8vIE5vdyBkbyB0
aGUgYXV0aG9yIGFuZCB1c2VyIG5vcm1hbCBwcmlvcml0eSBwcm9wZXJ0aWVzIGFuZCBhbGwgdGhl
ICFpbXBvcnRhbnQgcHJvcGVydGllcy4KLSAgICBpZiAoIXJlc29sdmVGb3JSb290RGVmYXVsdCkg
ewotICAgICAgICBhcHBseURlY2xhcmF0aW9uczxmYWxzZT4oZmFsc2UsIGxhc3RVQVJ1bGUgKyAx
LCBtX21hdGNoZWREZWNscy5zaXplKCkgLSAxKTsKLSAgICAgICAgYXBwbHlEZWNsYXJhdGlvbnM8
ZmFsc2U+KHRydWUsIGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUpOwotICAgICAgICBh
cHBseURlY2xhcmF0aW9uczxmYWxzZT4odHJ1ZSwgZmlyc3RVc2VyUnVsZSwgbGFzdFVzZXJSdWxl
KTsKLSAgICB9Ci0gICAgYXBwbHlEZWNsYXJhdGlvbnM8ZmFsc2U+KHRydWUsIGZpcnN0VUFSdWxl
LCBsYXN0VUFSdWxlKTsKLQotICAgIEFTU0VSVCghbV9mb250RGlydHkpOwotICAgIC8vIElmIG91
ciBmb250IGdvdCBkaXJ0aWVkIGJ5IG9uZSBvZiB0aGUgbm9uLWVzc2VudGlhbCBmb250IHByb3Bz
LCAKLSAgICAvLyBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0IGEgc2Vjb25kIHRpbWUuCi0gICAgdXBk
YXRlRm9udCgpOworICAgIGFwcGx5TWF0Y2hlZERlY2xhcmF0aW9ucyhtYXRjaFJlc3VsdCwgcmVz
b2x2ZUZvclJvb3REZWZhdWx0KTsKIAogICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3Qn
cyBkaXNwbGF5IGFuZCB0ZXh0IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgogICAg
IGFkanVzdFJlbmRlclN0eWxlKHN0eWxlKCksIG1fcGFyZW50U3R5bGUsIGVsZW1lbnQpOwpAQCAt
MTI3OSwxMCArMTI0Niw2IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0
b3IKICAgICAvLyBTdGFydCBsb2FkaW5nIGltYWdlcyByZWZlcmVuY2VkIGJ5IHRoaXMgc3R5bGUu
CiAgICAgbG9hZFBlbmRpbmdJbWFnZXMoKTsKIAotICAgIC8vIElmIHdlIGhhdmUgZmlyc3QtbGV0
dGVyIHBzZXVkbyBzdHlsZSwgZG8gbm90IHNoYXJlIHRoaXMgc3R5bGUKLSAgICBpZiAobV9zdHls
ZS0+aGFzUHNldWRvU3R5bGUoRklSU1RfTEVUVEVSKSkKLSAgICAgICAgbV9zdHlsZS0+c2V0VW5p
cXVlKCk7Ci0KICAgICBpbml0RWxlbWVudCgwKTsgLy8gQ2xlYXIgb3V0IGZvciB0aGUgbmV4dCBy
ZXNvbHZlLgogCiAgICAgLy8gTm93IHJldHVybiB0aGUgc3R5bGUuCkBAIC0xNjg3LDYgKzE2NTAs
MTAgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5kZXJTdHlsZQogICAgIGlmIChz
dHlsZS0+aGFzQXBwZWFyYW5jZSgpKQogICAgICAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1l
KCktPmFkanVzdFN0eWxlKHRoaXMsIHN0eWxlLCBlLCBtX2hhc1VBQXBwZWFyYW5jZSwgbV9ib3Jk
ZXJEYXRhLCBtX2JhY2tncm91bmREYXRhLCBtX2JhY2tncm91bmRDb2xvcik7CiAKKyAgICAvLyBJ
ZiB3ZSBoYXZlIGZpcnN0LWxldHRlciBwc2V1ZG8gc3R5bGUsIGRvIG5vdCBzaGFyZSB0aGlzIHN0
eWxlCisgICAgaWYgKHN0eWxlLT5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpKQorICAgICAg
ICBzdHlsZS0+c2V0VW5pcXVlKCk7CisKICNpZiBFTkFCTEUoU1ZHKQogICAgIGlmIChlICYmIGUt
PmlzU1ZHRWxlbWVudCgpKSB7CiAgICAgICAgIC8vIFNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RS
L1NWRy9tYXNraW5nLmh0bWwjT3ZlcmZsb3dQcm9wZXJ0eQpAQCAtMjIwMiw2ICsyMTY5LDQ3IEBA
IHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlEZWNsYXJhdGlvbnMKICAgICAgICAgYXBwbHlE
ZWNsYXJhdGlvbjxhcHBseUZpcnN0PihtX21hdGNoZWREZWNsc1tpXS5zdHlsZURlY2xhcmF0aW9u
LCBpc0ltcG9ydGFudCk7CiB9CiAKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlNYXRjaGVk
RGVjbGFyYXRpb25zKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgYm9vbCByZXNvbHZl
Rm9yUm9vdERlZmF1bHQpCit7CisgICAgLy8gTm93IHdlIGhhdmUgYWxsIG9mIHRoZSBtYXRjaGVk
IHJ1bGVzIGluIHRoZSBhcHByb3ByaWF0ZSBvcmRlci4gV2FsayB0aGUgcnVsZXMgYW5kIGFwcGx5
CisgICAgLy8gaGlnaC1wcmlvcml0eSBwcm9wZXJ0aWVzIGZpcnN0LCBpLmUuLCB0aG9zZSBwcm9w
ZXJ0aWVzIHRoYXQgb3RoZXIgcHJvcGVydGllcyBkZXBlbmQgb24uCisgICAgLy8gVGhlIG9yZGVy
IGlzICgxKSBoaWdoLXByaW9yaXR5IG5vdCBpbXBvcnRhbnQsICgyKSBoaWdoLXByaW9yaXR5IGlt
cG9ydGFudCwgKDMpIG5vcm1hbCBub3QgaW1wb3J0YW50CisgICAgLy8gYW5kICg0KSBub3JtYWwg
aW1wb3J0YW50LgorICAgIG1fbGluZUhlaWdodFZhbHVlID0gMDsKKyAgICBhcHBseURlY2xhcmF0
aW9uczx0cnVlPihmYWxzZSwgMCwgbV9tYXRjaGVkRGVjbHMuc2l6ZSgpIC0gMSk7CisgICAgaWYg
KCFyZXNvbHZlRm9yUm9vdERlZmF1bHQpIHsKKyAgICAgICAgYXBwbHlEZWNsYXJhdGlvbnM8dHJ1
ZT4odHJ1ZSwgbWF0Y2hSZXN1bHQuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5sYXN0QXV0
aG9yUnVsZSk7CisgICAgICAgIGFwcGx5RGVjbGFyYXRpb25zPHRydWU+KHRydWUsIG1hdGNoUmVz
dWx0LmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0Lmxhc3RVc2VyUnVsZSk7CisgICAgfQorICAg
IGFwcGx5RGVjbGFyYXRpb25zPHRydWU+KHRydWUsIG1hdGNoUmVzdWx0LmZpcnN0VUFSdWxlLCBt
YXRjaFJlc3VsdC5sYXN0VUFSdWxlKTsKKyAgICAKKyAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGly
dGllZCwgZ28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBub3cuCisgICAgdXBkYXRlRm9udCgpOworICAg
IAorICAgIC8vIExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQg
b24gdGhlIGZvbnQtc2l6ZQorICAgIGlmIChtX2xpbmVIZWlnaHRWYWx1ZSkKKyAgICAgICAgYXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIG1fbGluZUhlaWdodFZhbHVlKTsKKyAg
ICAgICAgCisgICAgLy8gTm93IGRvIHRoZSBub3JtYWwgcHJpb3JpdHkgVUEgcHJvcGVydGllcy4K
KyAgICBhcHBseURlY2xhcmF0aW9uczxmYWxzZT4oZmFsc2UsIG1hdGNoUmVzdWx0LmZpcnN0VUFS
dWxlLCBtYXRjaFJlc3VsdC5sYXN0VUFSdWxlKTsKKyAgICAKKyAgICAvLyBDYWNoZSBvdXIgYm9y
ZGVyIGFuZCBiYWNrZ3JvdW5kIHNvIHRoYXQgd2UgY2FuIGV4YW1pbmUgdGhlbSBsYXRlci4KKyAg
ICBjYWNoZUJvcmRlckFuZEJhY2tncm91bmQoKTsKKyAgICAKKyAgICAvLyBOb3cgZG8gdGhlIGF1
dGhvciBhbmQgdXNlciBub3JtYWwgcHJpb3JpdHkgcHJvcGVydGllcyBhbmQgYWxsIHRoZSAhaW1w
b3J0YW50IHByb3BlcnRpZXMuCisgICAgaWYgKCFyZXNvbHZlRm9yUm9vdERlZmF1bHQpIHsKKyAg
ICAgICAgYXBwbHlEZWNsYXJhdGlvbnM8ZmFsc2U+KGZhbHNlLCBtYXRjaFJlc3VsdC5sYXN0VUFS
dWxlICsgMSwgbV9tYXRjaGVkRGVjbHMuc2l6ZSgpIC0gMSk7CisgICAgICAgIGFwcGx5RGVjbGFy
YXRpb25zPGZhbHNlPih0cnVlLCBtYXRjaFJlc3VsdC5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVz
dWx0Lmxhc3RBdXRob3JSdWxlKTsKKyAgICAgICAgYXBwbHlEZWNsYXJhdGlvbnM8ZmFsc2U+KHRy
dWUsIG1hdGNoUmVzdWx0LmZpcnN0VXNlclJ1bGUsIG1hdGNoUmVzdWx0Lmxhc3RVc2VyUnVsZSk7
CisgICAgfQorICAgIGFwcGx5RGVjbGFyYXRpb25zPGZhbHNlPih0cnVlLCBtYXRjaFJlc3VsdC5m
aXJzdFVBUnVsZSwgbWF0Y2hSZXN1bHQubGFzdFVBUnVsZSk7CisgICAgCisgICAgQVNTRVJUKCFt
X2ZvbnREaXJ0eSk7CisgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQgYnkgb25lIG9mIHRo
ZSBub24tZXNzZW50aWFsIGZvbnQgcHJvcHMsIAorICAgIC8vIGdvIGFoZWFkIGFuZCB1cGRhdGUg
aXQgYSBzZWNvbmQgdGltZS4KKyAgICB1cGRhdGVGb250KCk7Cit9CisKIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6bWF0Y2hQYWdlUnVsZXMoUnVsZVNldCogcnVsZXMsIGJvb2wgaXNMZWZ0UGFnZSwg
Ym9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSkKIHsKICAgICBtX21hdGNo
ZWRSdWxlcy5jbGVhcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5o
CShyZXZpc2lvbiA5Nzc1NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNSw2ICsyMjUsMTYgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGFkZE1hdGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRhKiBydWxlKSB7IG1fbWF0Y2hlZFJ1bGVzLmFw
cGVuZChydWxlKTsgfQogICAgIHZvaWQgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKiwgdW5zaWduZWQgbGlua01hdGNoVHlwZSA9IFNlbGVjdG9yQ2hlY2tl
cjo6TWF0Y2hBbGwpOwogCisgICAgc3RydWN0IE1hdGNoUmVzdWx0IHsKKyAgICAgICAgTWF0Y2hS
ZXN1bHQoKSA6IGZpcnN0VUFSdWxlKC0xKSwgbGFzdFVBUnVsZSgtMSksIGZpcnN0QXV0aG9yUnVs
ZSgtMSksIGxhc3RBdXRob3JSdWxlKC0xKSwgZmlyc3RVc2VyUnVsZSgtMSksIGxhc3RVc2VyUnVs
ZSgtMSkgeyB9CisgICAgICAgIGludCBmaXJzdFVBUnVsZTsKKyAgICAgICAgaW50IGxhc3RVQVJ1
bGU7CisgICAgICAgIGludCBmaXJzdEF1dGhvclJ1bGU7CisgICAgICAgIGludCBsYXN0QXV0aG9y
UnVsZTsKKyAgICAgICAgaW50IGZpcnN0VXNlclJ1bGU7CisgICAgICAgIGludCBsYXN0VXNlclJ1
bGU7CisgICAgfTsKKyAgICB2b2lkIG1hdGNoQWxsUnVsZXMoTWF0Y2hSZXN1bHQmLCBib29sIHJl
c29sdmVGb3JSb290RGVmYXVsdCk7CiAgICAgdm9pZCBtYXRjaFJ1bGVzKFJ1bGVTZXQqLCBpbnQm
IGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVs
ZXMpOwogICAgIHZvaWQgbWF0Y2hSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPios
IGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1w
dHlSdWxlcyk7CiAgICAgYm9vbCBmYXN0UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBj
b25zdDsKQEAgLTIzMiw2ICsyNDIsNyBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgY2hlY2tT
ZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYpOwogCisgICAgdm9pZCBhcHBseU1hdGNoZWREZWNsYXJh
dGlvbnMoY29uc3QgTWF0Y2hSZXN1bHQmLCBib29sIHJlc29sdmVGb3JSb290RGVmYXVsdCk7CiAg
ICAgdGVtcGxhdGUgPGJvb2wgZmlyc3RQYXNzPgogICAgIHZvaWQgYXBwbHlEZWNsYXJhdGlvbnMo
Ym9vbCBpbXBvcnRhbnQsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgpOwogICAgIHRlbXBs
YXRlIDxib29sIGZpcnN0UGFzcz4K
</data>
<flag name="review"
          id="109456"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111632</attachid>
            <date>2011-10-19 09:07:35 -0700</date>
            <delta_ts>2011-10-20 04:21:01 -0700</delta_ts>
            <desc>new patch</desc>
            <filename>styleforelement-cleanup-2.patch</filename>
            <type>text/plain</type>
            <size>20820</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3ODY2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMTAtMTkgIEFudHRpIEtv
aXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgcnVsZSBtYXRjaGluZyBh
bmQgYXBwbHlpbmcgdG8gc2VwYXJhdGUgZnVuY3Rpb25zIGZyb20gQ1NTU3R5bGVTZWxlY3Rvcjo6
c3R5bGVGb3JFbGVtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MDQwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIC0gTW92ZSBtYXRjaGluZyBjb2RlIHRvIG1hdGNoQWxsUnVsZXMgYW5kIGFwcGx5aW5n
IHRvIGFwcGx5TWF0Y2hlZERlY2xhcmF0aW9ucy4KKyAgICAgICAgLSBFbmNhcHN1bGF0ZSB0aGUg
bWF0Y2hpbmcgcmVzdWx0cyBpbnRvIGEgc3RydWN0LCB1c2UgZXZlcnl3aGVyZS4KKyAgICAgICAg
LSBNb3ZlIGZpcnN0LWxpbmUgc3R5bGUgYWRqdXN0bWVudCB0byBhZGp1c3RSZW5kZXJTdHlsZSgp
LgorICAgICAgICAtIFJlbW92ZSB1bm5lY2Vzc2FyeSB0ZXN0cyBmb3IgcmVzb2x2ZUZvclJvb3RE
ZWZhdWx0IHdoZW4gYXBwbHlpbmcgdGhlIHN0eWxlCisgICAgICAgIC0gVXNlIGFwcGx5TWF0Y2hl
ZERlY2xhcmF0aW9ucyBhbHNvIGZyb20gcHNldWRvU3R5bGVGb3JFbGVtZW50CisKKyAgICAgICAg
KiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNl
bGVjdG9yOjptYXRjaEFsbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0
b3I6Om1hdGNoVUFSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpz
dHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cHNl
dWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6
OnN0eWxlRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjphZGp1
c3RSZW5kZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpwc2V1
ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjphcHBseU1hdGNoZWREZWNsYXJhdGlvbnMpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNl
bGVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpNYXRjaFJlc3Vs
dDo6TWF0Y2hSZXN1bHQpOgorCiAyMDExLTEwLTE5ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5z
b25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBBdm9pZCB1bmVjZXNzYXJpbHkgY2FsbGlu
ZyBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUgb24gcGx1Z2luIHdpZGdldHMKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDk3ODQzKQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NDQsNiArNzQ0LDcwIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6c29ydE1hdGNoZWRSdWxlcygK
IHsKICAgICBzdGQ6OnNvcnQobV9tYXRjaGVkUnVsZXMuYmVnaW4oKSwgbV9tYXRjaGVkUnVsZXMu
ZW5kKCksIGNvbXBhcmVSdWxlcyk7CiB9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hB
bGxSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0KQoreworICAgIG1hdGNoVUFSdWxlcyhyZXN1bHQp
OworICAgIAorICAgIC8vIE5vdyB3ZSBjaGVjayB1c2VyIHNoZWV0IHJ1bGVzLgorICAgIGlmICht
X21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKKyAgICAgICAgbWF0Y2hSdWxlcyhtX3VzZXJTdHls
ZS5nZXQoKSwgcmVzdWx0LmZpcnN0VXNlclJ1bGUsIHJlc3VsdC5sYXN0VXNlclJ1bGUsIGZhbHNl
KTsKKyAgICAgICAgCisgICAgLy8gTm93IGNoZWNrIGF1dGhvciBydWxlcywgYmVnaW5uaW5nIGZp
cnN0IHdpdGggcHJlc2VudGF0aW9uYWwgYXR0cmlidXRlcyBtYXBwZWQgZnJvbSBIVE1MLgorICAg
IGlmIChtX3N0eWxlZEVsZW1lbnQpIHsKKyAgICAgICAgLy8gQXNrIGlmIHRoZSBIVE1MIGVsZW1l
bnQgaGFzIG1hcHBlZCBhdHRyaWJ1dGVzLgorICAgICAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5o
YXNNYXBwZWRBdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgICAgIC8vIFdhbGsgb3VyIGF0dHJpYnV0
ZSBsaXN0IGFuZCBhZGQgaW4gZWFjaCBkZWNsLgorICAgICAgICAgICAgY29uc3QgTmFtZWROb2Rl
TWFwKiBtYXAgPSBtX3N0eWxlZEVsZW1lbnQtPmF0dHJpYnV0ZU1hcCgpOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hcC0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgIEF0dHJpYnV0ZSogYXR0ciA9IG1hcC0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAg
ICAgICAgICBpZiAoYXR0ci0+aXNNYXBwZWRBdHRyaWJ1dGUoKSAmJiBhdHRyLT5kZWNsKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmxhc3RBdXRob3JSdWxlID0gbV9tYXRjaGVkRGVj
bHMuc2l6ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmZpcnN0QXV0aG9yUnVs
ZSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5maXJzdEF1dGhvclJ1bGUg
PSByZXN1bHQubGFzdEF1dGhvclJ1bGU7CisgICAgICAgICAgICAgICAgICAgIGFkZE1hdGNoZWRE
ZWNsYXJhdGlvbihhdHRyLT5kZWNsKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gTm93IHdlIGNoZWNrIGFkZGl0aW9u
YWwgbWFwcGVkIGRlY2xhcmF0aW9ucy4KKyAgICAgICAgLy8gVGFibGVzIGFuZCB0YWJsZSBjZWxs
cyBzaGFyZSBhbiBhZGRpdGlvbmFsIG1hcHBlZCBydWxlIHRoYXQgbXVzdCBiZSBhcHBsaWVkCisg
ICAgICAgIC8vIGFmdGVyIGFsbCBhdHRyaWJ1dGVzLCBzaW5jZSB0aGVpciBtYXBwZWQgc3R5bGUg
ZGVwZW5kcyBvbiB0aGUgdmFsdWVzIG9mIG11bHRpcGxlIGF0dHJpYnV0ZXMuCisgICAgICAgIGlm
IChtX3N0eWxlZEVsZW1lbnQtPmNhbkhhdmVBZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNscygp
KSB7CisgICAgICAgICAgICBtX2FkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzLmNsZWFyKCk7
CisgICAgICAgICAgICBtX3N0eWxlZEVsZW1lbnQtPmFkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURl
Y2xzKG1fYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlRGVjbHMpOworICAgICAgICAgICAgaWYgKCFt
X2FkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGFkZGl0aW9uYWxEZWNsc1NpemUgPSBtX2FkZGl0aW9uYWxBdHRyaWJ1dGVT
dHlsZURlY2xzLnNpemUoKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmZpcnN0QXV0aG9y
UnVsZSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmZpcnN0QXV0aG9yUnVsZSA9
IG1fbWF0Y2hlZERlY2xzLnNpemUoKTsKKyAgICAgICAgICAgICAgICByZXN1bHQubGFzdEF1dGhv
clJ1bGUgPSBtX21hdGNoZWREZWNscy5zaXplKCkgKyBhZGRpdGlvbmFsRGVjbHNTaXplIC0gMTsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWRkaXRpb25hbERlY2xz
U2l6ZTsgKytpKQorICAgICAgICAgICAgICAgICAgICBhZGRNYXRjaGVkRGVjbGFyYXRpb24obV9h
ZGRpdGlvbmFsQXR0cmlidXRlU3R5bGVEZWNsc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKSB7CisgICAg
ICAgICAgICBib29sIGlzQXV0bzsKKyAgICAgICAgICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVj
dGlvbiA9IHRvSFRNTEVsZW1lbnQobV9zdHlsZWRFbGVtZW50KS0+ZGlyZWN0aW9uYWxpdHlJZmhh
c0RpckF1dG9BdHRyaWJ1dGUoaXNBdXRvKTsKKyAgICAgICAgICAgIGlmIChpc0F1dG8pCisgICAg
ICAgICAgICAgICAgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKHRleHREaXJlY3Rpb24gPT0gTFRSID8g
bGVmdFRvUmlnaHREZWNsYXJhdGlvbigpIDogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigpKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNo
ZWV0cyBuZXh0LgorICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKKyAgICAgICAg
bWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCByZXN1bHQuZmlyc3RBdXRob3JSdWxlLCBy
ZXN1bHQubGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKKyAgICAgICAgCisgICAgLy8gTm93IGNoZWNr
IG91ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRlLgorICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNl
clN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQpIHsKKyAgICAgICAgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qIGlubGluZURlY2wgPSBtX3N0eWxlZEVsZW1lbnQtPmlubGluZVN0eWxlRGVjbCgp
OworICAgICAgICBpZiAoaW5saW5lRGVjbCkgeworICAgICAgICAgICAgcmVzdWx0Lmxhc3RBdXRo
b3JSdWxlID0gbV9tYXRjaGVkRGVjbHMuc2l6ZSgpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5m
aXJzdEF1dGhvclJ1bGUgPT0gLTEpCisgICAgICAgICAgICAgICAgcmVzdWx0LmZpcnN0QXV0aG9y
UnVsZSA9IHJlc3VsdC5sYXN0QXV0aG9yUnVsZTsKKyAgICAgICAgICAgIGFkZE1hdGNoZWREZWNs
YXJhdGlvbihpbmxpbmVEZWNsKTsKKyAgICAgICAgfQorICAgIH0KK30KICAgICAKIGlubGluZSB2
b2lkIENTU1N0eWxlU2VsZWN0b3I6OmluaXRFbGVtZW50KEVsZW1lbnQqIGUpCiB7CkBAIC0xMDQw
LDI0ICsxMTA0LDI0IEBAIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVTaGEK
ICAgICByZXR1cm4gc2hhcmVOb2RlLT5yZW5kZXJTdHlsZSgpOwogfQogCi12b2lkIENTU1N0eWxl
U2VsZWN0b3I6Om1hdGNoVUFSdWxlcyhpbnQmIGZpcnN0VUFSdWxlLCBpbnQmIGxhc3RVQVJ1bGUp
Cit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoVUFSdWxlcyhNYXRjaFJlc3VsdCYgcmVzdWx0
KQogewogICAgIE1hdGNoaW5nVUFSdWxlc1Njb3BlIHNjb3BlOwogCiAgICAgLy8gRmlyc3Qgd2Ug
bWF0Y2ggcnVsZXMgZnJvbSB0aGUgdXNlciBhZ2VudCBzaGVldC4KICAgICBSdWxlU2V0KiB1c2Vy
QWdlbnRTdHlsZVNoZWV0ID0gbV9tZWRpdW0tPm1lZGlhVHlwZU1hdGNoU3BlY2lmaWMoInByaW50
IikKICAgICAgICAgPyBkZWZhdWx0UHJpbnRTdHlsZSA6IGRlZmF1bHRTdHlsZTsKLSAgICBtYXRj
aFJ1bGVzKHVzZXJBZ2VudFN0eWxlU2hlZXQsIGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlLCBmYWxz
ZSk7CisgICAgbWF0Y2hSdWxlcyh1c2VyQWdlbnRTdHlsZVNoZWV0LCByZXN1bHQuZmlyc3RVQVJ1
bGUsIHJlc3VsdC5sYXN0VUFSdWxlLCBmYWxzZSk7CiAKICAgICAvLyBJbiBxdWlya3MgbW9kZSwg
d2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgcXVpcmtzIHVzZXIgYWdlbnQgc2hlZXQuCiAgICAgaWYg
KCFtX2NoZWNrZXIuc3RyaWN0UGFyc2luZygpKQotICAgICAgICBtYXRjaFJ1bGVzKGRlZmF1bHRR
dWlya3NTdHlsZSwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUsIGZhbHNlKTsKKyAgICAgICAgbWF0
Y2hSdWxlcyhkZWZhdWx0UXVpcmtzU3R5bGUsIHJlc3VsdC5maXJzdFVBUnVsZSwgcmVzdWx0Lmxh
c3RVQVJ1bGUsIGZhbHNlKTsKICAgICAgICAgCiAgICAgLy8gSWYgZG9jdW1lbnQgdXNlcyB2aWV3
IHNvdXJjZSBzdHlsZXMgKGluIHZpZXcgc291cmNlIG1vZGUgb3IgaW4geG1sIHZpZXdlciBtb2Rl
KSwgdGhlbiB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB2aWV3IHNvdXJjZSBzdHlsZSBzaGVldC4K
ICAgICBpZiAobV9jaGVja2VyLmRvY3VtZW50KCktPmlzVmlld1NvdXJjZSgpKSB7CiAgICAgICAg
IGlmICghZGVmYXVsdFZpZXdTb3VyY2VTdHlsZSkKICAgICAgICAgICAgIGxvYWRWaWV3U291cmNl
U3R5bGUoKTsKLSAgICAgICAgbWF0Y2hSdWxlcyhkZWZhdWx0Vmlld1NvdXJjZVN0eWxlLCBmaXJz
dFVBUnVsZSwgbGFzdFVBUnVsZSwgZmFsc2UpOworICAgICAgICBtYXRjaFJ1bGVzKGRlZmF1bHRW
aWV3U291cmNlU3R5bGUsIHJlc3VsdC5maXJzdFVBUnVsZSwgcmVzdWx0Lmxhc3RVQVJ1bGUsIGZh
bHNlKTsKICAgICB9CiB9CiAKQEAgLTExNjgsMTEwICsxMjMyLDEzIEBAIFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3IKIAogICAgIGVuc3VyZURlZmF1bHRTdHlsZVNoZWV0
c0ZvckVsZW1lbnQoZWxlbWVudCk7CiAKLSAgICBpbnQgZmlyc3RVQVJ1bGUgPSAtMSwgbGFzdFVB
UnVsZSA9IC0xOwotICAgIGludCBmaXJzdFVzZXJSdWxlID0gLTEsIGxhc3RVc2VyUnVsZSA9IC0x
OwotICAgIGludCBmaXJzdEF1dGhvclJ1bGUgPSAtMSwgbGFzdEF1dGhvclJ1bGUgPSAtMTsKLSAg
ICBtYXRjaFVBUnVsZXMoZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOwotCi0gICAgaWYgKCFyZXNv
bHZlRm9yUm9vdERlZmF1bHQpIHsKLSAgICAgICAgLy8gNC4gTm93IHdlIGNoZWNrIHVzZXIgc2hl
ZXQgcnVsZXMuCi0gICAgICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICAg
ICAgICAgIG1hdGNoUnVsZXMobV91c2VyU3R5bGUuZ2V0KCksIGZpcnN0VXNlclJ1bGUsIGxhc3RV
c2VyUnVsZSwgZmFsc2UpOwotCi0gICAgICAgIC8vIDUuIE5vdyBjaGVjayBhdXRob3IgcnVsZXMs
IGJlZ2lubmluZyBmaXJzdCB3aXRoIHByZXNlbnRhdGlvbmFsIGF0dHJpYnV0ZXMKLSAgICAgICAg
Ly8gbWFwcGVkIGZyb20gSFRNTC4KLSAgICAgICAgaWYgKG1fc3R5bGVkRWxlbWVudCkgewotICAg
ICAgICAgICAgLy8gQXNrIGlmIHRoZSBIVE1MIGVsZW1lbnQgaGFzIG1hcHBlZCBhdHRyaWJ1dGVz
LgotICAgICAgICAgICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+aGFzTWFwcGVkQXR0cmlidXRlcygp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gV2FsayBvdXIgYXR0cmlidXRlIGxpc3QgYW5kIGFkZCBp
biBlYWNoIGRlY2wuCi0gICAgICAgICAgICAgICAgY29uc3QgTmFtZWROb2RlTWFwKiBtYXAgPSBt
X3N0eWxlZEVsZW1lbnQtPmF0dHJpYnV0ZU1hcCgpOwotICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtYXAtPmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgQXR0cmlidXRlKiBhdHRyID0gbWFwLT5hdHRyaWJ1dGVJdGVtKGkpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoYXR0ci0+aXNNYXBwZWRBdHRyaWJ1dGUoKSAmJiBhdHRyLT5kZWNsKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RBdXRob3JSdWxlID0gbV9tYXRjaGVkRGVjbHMu
c2l6ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0QXV0aG9yUnVsZSA9PSAt
MSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdEF1dGhvclJ1bGUgPSBsYXN0QXV0
aG9yUnVsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZE1hdGNoZWREZWNsYXJhdGlvbihh
dHRyLT5kZWNsKCkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBOb3cgd2UgY2hlY2sgYWRkaXRpb25hbCBt
YXBwZWQgZGVjbGFyYXRpb25zLgotICAgICAgICAgICAgLy8gVGFibGVzIGFuZCB0YWJsZSBjZWxs
cyBzaGFyZSBhbiBhZGRpdGlvbmFsIG1hcHBlZCBydWxlIHRoYXQgbXVzdCBiZSBhcHBsaWVkCi0g
ICAgICAgICAgICAvLyBhZnRlciBhbGwgYXR0cmlidXRlcywgc2luY2UgdGhlaXIgbWFwcGVkIHN0
eWxlIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBvZiBtdWx0aXBsZSBhdHRyaWJ1dGVzLgotICAgICAg
ICAgICAgaWYgKG1fc3R5bGVkRWxlbWVudC0+Y2FuSGF2ZUFkZGl0aW9uYWxBdHRyaWJ1dGVTdHls
ZURlY2xzKCkpIHsKLSAgICAgICAgICAgICAgICBtX2FkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURl
Y2xzLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgbV9zdHlsZWRFbGVtZW50LT5hZGRpdGlvbmFs
QXR0cmlidXRlU3R5bGVEZWNscyhtX2FkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzKTsKLSAg
ICAgICAgICAgICAgICBpZiAoIW1fYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlRGVjbHMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFkZGl0aW9uYWxEZWNsc1NpemUg
PSBtX2FkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzLnNpemUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGZpcnN0QXV0aG9yUnVsZSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGZpcnN0QXV0aG9yUnVsZSA9IG1fbWF0Y2hlZERlY2xzLnNpemUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgbGFzdEF1dGhvclJ1bGUgPSBtX21hdGNoZWREZWNscy5zaXplKCkgKyBhZGRpdGlvbmFs
RGVjbHNTaXplIC0gMTsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGFkZGl0aW9uYWxEZWNsc1NpemU7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZE1hdGNoZWREZWNsYXJhdGlvbihtX2FkZGl0aW9uYWxBdHRyaWJ1dGVTdHlsZURlY2xzW2ldKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobV9zdHls
ZWRFbGVtZW50LT5pc0hUTUxFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBib29sIGlzQXV0
bzsKLSAgICAgICAgICAgICAgICBUZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb24gPSB0b0hUTUxF
bGVtZW50KG1fc3R5bGVkRWxlbWVudCktPmRpcmVjdGlvbmFsaXR5SWZoYXNEaXJBdXRvQXR0cmli
dXRlKGlzQXV0byk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzQXV0bykKLSAgICAgICAgICAgICAg
ICAgICAgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKHRleHREaXJlY3Rpb24gPT0gTFRSID8gbGVmdFRv
UmlnaHREZWNsYXJhdGlvbigpIDogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigpKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIAotICAgICAgICAvLyA2LiBDaGVjayB0aGUgcnVsZXMgaW4g
YXV0aG9yIHNoZWV0cyBuZXh0LgotICAgICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHls
ZXMpCi0gICAgICAgICAgICBtYXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIGZpcnN0QXV0
aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKLQotICAgICAgICAvLyA3LiBOb3cgY2hl
Y2sgb3VyIGlubGluZSBzdHlsZSBhdHRyaWJ1dGUuCi0gICAgICAgIGlmIChtX21hdGNoQXV0aG9y
QW5kVXNlclN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQpIHsKLSAgICAgICAgICAgIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiBpbmxpbmVEZWNsID0gbV9zdHlsZWRFbGVtZW50LT5pbmxpbmVT
dHlsZURlY2woKTsKLSAgICAgICAgICAgIGlmIChpbmxpbmVEZWNsKSB7Ci0gICAgICAgICAgICAg
ICAgbGFzdEF1dGhvclJ1bGUgPSBtX21hdGNoZWREZWNscy5zaXplKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGZpcnN0QXV0aG9yUnVsZSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgZmlyc3RB
dXRob3JSdWxlID0gbGFzdEF1dGhvclJ1bGU7Ci0gICAgICAgICAgICAgICAgYWRkTWF0Y2hlZERl
Y2xhcmF0aW9uKGlubGluZURlY2wpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
ICAgIAotICAgIC8vIE5vdyB3ZSBoYXZlIGFsbCBvZiB0aGUgbWF0Y2hlZCBydWxlcyBpbiB0aGUg
YXBwcm9wcmlhdGUgb3JkZXIuICBXYWxrIHRoZSBydWxlcyBhbmQgYXBwbHkKLSAgICAvLyBoaWdo
LXByaW9yaXR5IHByb3BlcnRpZXMgZmlyc3QsIGkuZS4sIHRob3NlIHByb3BlcnRpZXMgdGhhdCBv
dGhlciBwcm9wZXJ0aWVzIGRlcGVuZCBvbi4KLSAgICAvLyBUaGUgb3JkZXIgaXMgKDEpIGhpZ2gt
cHJpb3JpdHkgbm90IGltcG9ydGFudCwgKDIpIGhpZ2gtcHJpb3JpdHkgaW1wb3J0YW50LCAoMykg
bm9ybWFsIG5vdCBpbXBvcnRhbnQKLSAgICAvLyBhbmQgKDQpIG5vcm1hbCBpbXBvcnRhbnQuCi0g
ICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwotICAgIGFwcGx5RGVjbGFyYXRpb25zPHRydWU+KGZh
bHNlLCAwLCBtX21hdGNoZWREZWNscy5zaXplKCkgLSAxKTsKLSAgICBpZiAoIXJlc29sdmVGb3JS
b290RGVmYXVsdCkgewotICAgICAgICBhcHBseURlY2xhcmF0aW9uczx0cnVlPih0cnVlLCBmaXJz
dEF1dGhvclJ1bGUsIGxhc3RBdXRob3JSdWxlKTsKLSAgICAgICAgYXBwbHlEZWNsYXJhdGlvbnM8
dHJ1ZT4odHJ1ZSwgZmlyc3RVc2VyUnVsZSwgbGFzdFVzZXJSdWxlKTsKLSAgICB9Ci0gICAgYXBw
bHlEZWNsYXJhdGlvbnM8dHJ1ZT4odHJ1ZSwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOwotICAg
IAotICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCBnbyBhaGVhZCBhbmQgdXBkYXRlIGl0
IG5vdy4KLSAgICB1cGRhdGVGb250KCk7Ci0KLSAgICAvLyBMaW5lLWhlaWdodCBpcyBzZXQgd2hl
biB3ZSBhcmUgc3VyZSB3ZSBkZWNpZGVkIG9uIHRoZSBmb250LXNpemUKLSAgICBpZiAobV9saW5l
SGVpZ2h0VmFsdWUpCi0gICAgICAgIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0
LCBtX2xpbmVIZWlnaHRWYWx1ZSk7Ci0KLSAgICAvLyBOb3cgZG8gdGhlIG5vcm1hbCBwcmlvcml0
eSBVQSBwcm9wZXJ0aWVzLgotICAgIGFwcGx5RGVjbGFyYXRpb25zPGZhbHNlPihmYWxzZSwgZmly
c3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOwotICAgIAotICAgIC8vIENhY2hlIG91ciBib3JkZXIgYW5k
IGJhY2tncm91bmQgc28gdGhhdCB3ZSBjYW4gZXhhbWluZSB0aGVtIGxhdGVyLgotICAgIGNhY2hl
Qm9yZGVyQW5kQmFja2dyb3VuZCgpOwotICAgIAotICAgIC8vIE5vdyBkbyB0aGUgYXV0aG9yIGFu
ZCB1c2VyIG5vcm1hbCBwcmlvcml0eSBwcm9wZXJ0aWVzIGFuZCBhbGwgdGhlICFpbXBvcnRhbnQg
cHJvcGVydGllcy4KLSAgICBpZiAoIXJlc29sdmVGb3JSb290RGVmYXVsdCkgewotICAgICAgICBh
cHBseURlY2xhcmF0aW9uczxmYWxzZT4oZmFsc2UsIGxhc3RVQVJ1bGUgKyAxLCBtX21hdGNoZWRE
ZWNscy5zaXplKCkgLSAxKTsKLSAgICAgICAgYXBwbHlEZWNsYXJhdGlvbnM8ZmFsc2U+KHRydWUs
IGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUpOwotICAgICAgICBhcHBseURlY2xhcmF0
aW9uczxmYWxzZT4odHJ1ZSwgZmlyc3RVc2VyUnVsZSwgbGFzdFVzZXJSdWxlKTsKLSAgICB9Ci0g
ICAgYXBwbHlEZWNsYXJhdGlvbnM8ZmFsc2U+KHRydWUsIGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxl
KTsKKyAgICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsKKyAgICBpZiAocmVzb2x2ZUZvclJvb3RE
ZWZhdWx0KQorICAgICAgICBtYXRjaFVBUnVsZXMobWF0Y2hSZXN1bHQpOworICAgIGVsc2UKKyAg
ICAgICAgbWF0Y2hBbGxSdWxlcyhtYXRjaFJlc3VsdCk7CiAKLSAgICBBU1NFUlQoIW1fZm9udERp
cnR5KTsKLSAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCBieSBvbmUgb2YgdGhlIG5vbi1l
c3NlbnRpYWwgZm9udCBwcm9wcywgCi0gICAgLy8gZ28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBhIHNl
Y29uZCB0aW1lLgotICAgIHVwZGF0ZUZvbnQoKTsKKyAgICBhcHBseU1hdGNoZWREZWNsYXJhdGlv
bnMobWF0Y2hSZXN1bHQpOwogCiAgICAgLy8gQ2xlYW4gdXAgb3VyIHN0eWxlIG9iamVjdCdzIGRp
c3BsYXkgYW5kIHRleHQgZGVjb3JhdGlvbnMgKGFtb25nIG90aGVyIGZpeHVwcykuCiAgICAgYWRq
dXN0UmVuZGVyU3R5bGUoc3R5bGUoKSwgbV9wYXJlbnRTdHlsZSwgZWxlbWVudCk7CkBAIC0xMjc5
LDEwICsxMjQ2LDYgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcgog
ICAgIC8vIFN0YXJ0IGxvYWRpbmcgaW1hZ2VzIHJlZmVyZW5jZWQgYnkgdGhpcyBzdHlsZS4KICAg
ICBsb2FkUGVuZGluZ0ltYWdlcygpOwogCi0gICAgLy8gSWYgd2UgaGF2ZSBmaXJzdC1sZXR0ZXIg
cHNldWRvIHN0eWxlLCBkbyBub3Qgc2hhcmUgdGhpcyBzdHlsZQotICAgIGlmIChtX3N0eWxlLT5o
YXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpKQotICAgICAgICBtX3N0eWxlLT5zZXRVbmlxdWUo
KTsKLQogICAgIGluaXRFbGVtZW50KDApOyAvLyBDbGVhciBvdXQgZm9yIHRoZSBuZXh0IHJlc29s
dmUuCiAKICAgICAvLyBOb3cgcmV0dXJuIHRoZSBzdHlsZS4KQEAgLTE0MTEsMTIgKzEzNzQsMTIg
QEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3RvcgogICAgIC8vIHRob3Nl
IHJ1bGVzLgogICAgIAogICAgIC8vIENoZWNrIFVBLCB1c2VyIGFuZCBhdXRob3IgcnVsZXMuCi0g
ICAgaW50IGZpcnN0VUFSdWxlID0gLTEsIGxhc3RVQVJ1bGUgPSAtMSwgZmlyc3RVc2VyUnVsZSA9
IC0xLCBsYXN0VXNlclJ1bGUgPSAtMSwgZmlyc3RBdXRob3JSdWxlID0gLTEsIGxhc3RBdXRob3JS
dWxlID0gLTE7Ci0gICAgbWF0Y2hVQVJ1bGVzKGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsKKyAg
ICBNYXRjaFJlc3VsdCBtYXRjaFJlc3VsdDsKKyAgICBtYXRjaFVBUnVsZXMobWF0Y2hSZXN1bHQp
OwogCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKSB7Ci0gICAgICAgIG1hdGNo
UnVsZXMobV91c2VyU3R5bGUuZ2V0KCksIGZpcnN0VXNlclJ1bGUsIGxhc3RVc2VyUnVsZSwgZmFs
c2UpOwotICAgICAgICBtYXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIGZpcnN0QXV0aG9y
UnVsZSwgbGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKKyAgICAgICAgbWF0Y2hSdWxlcyhtX3VzZXJT
dHlsZS5nZXQoKSwgbWF0Y2hSZXN1bHQuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQubGFzdFVz
ZXJSdWxlLCBmYWxzZSk7CisgICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwg
bWF0Y2hSZXN1bHQuZmlyc3RBdXRob3JSdWxlLCBtYXRjaFJlc3VsdC5sYXN0QXV0aG9yUnVsZSwg
ZmFsc2UpOwogICAgIH0KIAogICAgIGlmIChtX21hdGNoZWREZWNscy5pc0VtcHR5KCkpCkBAIC0x
NDI0LDM1ICsxMzg3LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rv
cgogCiAgICAgbV9zdHlsZS0+c2V0U3R5bGVUeXBlKHBzZXVkbyk7CiAgICAgCi0gICAgbV9saW5l
SGVpZ2h0VmFsdWUgPSAwOwotCi0gICAgLy8gSGlnaC1wcmlvcml0eSBwcm9wZXJ0aWVzLgotICAg
IGFwcGx5RGVjbGFyYXRpb25zPHRydWU+KGZhbHNlLCAwLCBtX21hdGNoZWREZWNscy5zaXplKCkg
LSAxKTsKLSAgICBhcHBseURlY2xhcmF0aW9uczx0cnVlPih0cnVlLCBmaXJzdEF1dGhvclJ1bGUs
IGxhc3RBdXRob3JSdWxlKTsKLSAgICBhcHBseURlY2xhcmF0aW9uczx0cnVlPih0cnVlLCBmaXJz
dFVzZXJSdWxlLCBsYXN0VXNlclJ1bGUpOwotICAgIGFwcGx5RGVjbGFyYXRpb25zPHRydWU+KHRy
dWUsIGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsKLSAgICAKLSAgICAvLyBJZiBvdXIgZm9udCBn
b3QgZGlydGllZCwgZ28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBub3cuCi0gICAgdXBkYXRlRm9udCgp
OwotCi0gICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRl
ZCBvbiB0aGUgZm9udC1zaXplCi0gICAgaWYgKG1fbGluZUhlaWdodFZhbHVlKQotICAgICAgICBh
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5TGluZUhlaWdodCwgbV9saW5lSGVpZ2h0VmFsdWUpOwot
ICAgIAotICAgIC8vIE5vdyBkbyB0aGUgbm9ybWFsIHByaW9yaXR5IHByb3BlcnRpZXMuCi0gICAg
YXBwbHlEZWNsYXJhdGlvbnM8ZmFsc2U+KGZhbHNlLCBmaXJzdFVBUnVsZSwgbGFzdFVBUnVsZSk7
Ci0gICAgCi0gICAgLy8gQ2FjaGUgb3VyIGJvcmRlciBhbmQgYmFja2dyb3VuZCBzbyB0aGF0IHdl
IGNhbiBleGFtaW5lIHRoZW0gbGF0ZXIuCi0gICAgY2FjaGVCb3JkZXJBbmRCYWNrZ3JvdW5kKCk7
Ci0gICAgCi0gICAgYXBwbHlEZWNsYXJhdGlvbnM8ZmFsc2U+KGZhbHNlLCBsYXN0VUFSdWxlICsg
MSwgbV9tYXRjaGVkRGVjbHMuc2l6ZSgpIC0gMSk7Ci0gICAgYXBwbHlEZWNsYXJhdGlvbnM8ZmFs
c2U+KHRydWUsIGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUpOwotICAgIGFwcGx5RGVj
bGFyYXRpb25zPGZhbHNlPih0cnVlLCBmaXJzdFVzZXJSdWxlLCBsYXN0VXNlclJ1bGUpOwotICAg
IGFwcGx5RGVjbGFyYXRpb25zPGZhbHNlPih0cnVlLCBmaXJzdFVBUnVsZSwgbGFzdFVBUnVsZSk7
Ci0gICAgCi0gICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQgYnkgb25lIG9mIHRoZSBub24t
ZXNzZW50aWFsIGZvbnQgcHJvcHMsIAotICAgIC8vIGdvIGFoZWFkIGFuZCB1cGRhdGUgaXQgYSBz
ZWNvbmQgdGltZS4KLSAgICB1cGRhdGVGb250KCk7CisgICAgYXBwbHlNYXRjaGVkRGVjbGFyYXRp
b25zKG1hdGNoUmVzdWx0KTsKIAogICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBk
aXNwbGF5IGFuZCB0ZXh0IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgogICAgIGFk
anVzdFJlbmRlclN0eWxlKHN0eWxlKCksIHBhcmVudFN0eWxlLCAwKTsKQEAgLTE0ODMsNyArMTQx
OCw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3IKICAgICAvLyBJ
ZiBvdXIgZm9udCBnb3QgZGlydGllZCwgZ28gYWhlYWQgYW5kIHVwZGF0ZSBpdCBub3cuCiAgICAg
dXBkYXRlRm9udCgpOwogCi0gICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0IHdoZW4gd2UgYXJlIHN1
cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplCisgICAgLy8gTGluZS1oZWlnaHQgaXMgc2V0
IHdoZW4gd2UgYXJlIHN1cmUgd2UgZGVjaWRlZCBvbiB0aGUgZm9udC1zaXplLgogICAgIGlmICht
X2xpbmVIZWlnaHRWYWx1ZSkKICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUxpbmVI
ZWlnaHQsIG1fbGluZUhlaWdodFZhbHVlKTsKIApAQCAtMTY4Nyw2ICsxNjIyLDEwIEBAIHZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6YWRqdXN0UmVuZGVyU3R5bGUKICAgICBpZiAoc3R5bGUtPmhhc0Fw
cGVhcmFuY2UoKSkKICAgICAgICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5hZGp1c3RT
dHlsZSh0aGlzLCBzdHlsZSwgZSwgbV9oYXNVQUFwcGVhcmFuY2UsIG1fYm9yZGVyRGF0YSwgbV9i
YWNrZ3JvdW5kRGF0YSwgbV9iYWNrZ3JvdW5kQ29sb3IpOwogCisgICAgLy8gSWYgd2UgaGF2ZSBm
aXJzdC1sZXR0ZXIgcHNldWRvIHN0eWxlLCBkbyBub3Qgc2hhcmUgdGhpcyBzdHlsZS4KKyAgICBp
ZiAoc3R5bGUtPmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xFVFRFUikpCisgICAgICAgIHN0eWxlLT5z
ZXRVbmlxdWUoKTsKKwogI2lmIEVOQUJMRShTVkcpCiAgICAgaWYgKGUgJiYgZS0+aXNTVkdFbGVt
ZW50KCkpIHsKICAgICAgICAgLy8gU3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL21hc2tp
bmcuaHRtbCNPdmVyZmxvd1Byb3BlcnR5CkBAIC0xNzQ0LDI0ICsxNjgzLDIxIEBAIFBhc3NSZWZQ
dHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2VsZWN0b3IKICAgICBpbml0RWxlbWVudChlKTsKICAg
ICBpbml0Rm9yU3R5bGVSZXNvbHZlKGUsIDAsIHBzZXVkb0lkKTsKIAorICAgIE1hdGNoUmVzdWx0
IGR1bW15OwogICAgIGlmIChydWxlc1RvSW5jbHVkZSAmIFVBQW5kVXNlckNTU1J1bGVzKSB7Ci0g
ICAgICAgIGludCBmaXJzdFVBUnVsZSA9IC0xLCBsYXN0VUFSdWxlID0gLTE7CiAgICAgICAgIC8v
IEZpcnN0IHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhlIHVzZXIgYWdlbnQgc2hlZXQuCi0gICAgICAg
IG1hdGNoVUFSdWxlcyhmaXJzdFVBUnVsZSwgbGFzdFVBUnVsZSk7CisgICAgICAgIG1hdGNoVUFS
dWxlcyhkdW1teSk7CiAKICAgICAgICAgLy8gTm93IHdlIGNoZWNrIHVzZXIgc2hlZXQgcnVsZXMu
Ci0gICAgICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykgewotICAgICAgICAgICAg
aW50IGZpcnN0VXNlclJ1bGUgPSAtMSwgbGFzdFVzZXJSdWxlID0gLTE7Ci0gICAgICAgICAgICBt
YXRjaFJ1bGVzKG1fdXNlclN0eWxlLmdldCgpLCBmaXJzdFVzZXJSdWxlLCBsYXN0VXNlclJ1bGUs
IHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYg
KG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQorICAgICAgICAgICAgbWF0Y2hSdWxlcyhtX3Vz
ZXJTdHlsZS5nZXQoKSwgZHVtbXkuZmlyc3RVc2VyUnVsZSwgZHVtbXkubGFzdFVzZXJSdWxlLCBy
dWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOwogICAgIH0KIAogICAgIGlmIChtX21hdGNo
QXV0aG9yQW5kVXNlclN0eWxlcyAmJiAocnVsZXNUb0luY2x1ZGUgJiBBdXRob3JDU1NSdWxlcykp
IHsKICAgICAgICAgbV9zYW1lT3JpZ2luT25seSA9ICEocnVsZXNUb0luY2x1ZGUgJiBDcm9zc09y
aWdpbkNTU1J1bGVzKTsKIAogICAgICAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNo
ZWV0cy4KLSAgICAgICAgaW50IGZpcnN0QXV0aG9yUnVsZSA9IC0xLCBsYXN0QXV0aG9yUnVsZSA9
IC0xOwotICAgICAgICBtYXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIGZpcnN0QXV0aG9y
UnVsZSwgbGFzdEF1dGhvclJ1bGUsIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7Cisg
ICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgZHVtbXkuZmlyc3RBdXRob3JS
dWxlLCBkdW1teS5sYXN0QXV0aG9yUnVsZSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVz
KTsKIAogICAgICAgICBtX3NhbWVPcmlnaW5Pbmx5ID0gZmFsc2U7CiAgICAgfQpAQCAtMjIwMiw2
ICsyMTM4LDQwIEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXBwbHlEZWNsYXJhdGlvbnMKICAg
ICAgICAgYXBwbHlEZWNsYXJhdGlvbjxhcHBseUZpcnN0PihtX21hdGNoZWREZWNsc1tpXS5zdHls
ZURlY2xhcmF0aW9uLCBpc0ltcG9ydGFudCk7CiB9CiAKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6
YXBwbHlNYXRjaGVkRGVjbGFyYXRpb25zKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCkK
K3sKKyAgICAvLyBOb3cgd2UgaGF2ZSBhbGwgb2YgdGhlIG1hdGNoZWQgcnVsZXMgaW4gdGhlIGFw
cHJvcHJpYXRlIG9yZGVyLiBXYWxrIHRoZSBydWxlcyBhbmQgYXBwbHkKKyAgICAvLyBoaWdoLXBy
aW9yaXR5IHByb3BlcnRpZXMgZmlyc3QsIGkuZS4sIHRob3NlIHByb3BlcnRpZXMgdGhhdCBvdGhl
ciBwcm9wZXJ0aWVzIGRlcGVuZCBvbi4KKyAgICAvLyBUaGUgb3JkZXIgaXMgKDEpIGhpZ2gtcHJp
b3JpdHkgbm90IGltcG9ydGFudCwgKDIpIGhpZ2gtcHJpb3JpdHkgaW1wb3J0YW50LCAoMykgbm9y
bWFsIG5vdCBpbXBvcnRhbnQKKyAgICAvLyBhbmQgKDQpIG5vcm1hbCBpbXBvcnRhbnQuCisgICAg
bV9saW5lSGVpZ2h0VmFsdWUgPSAwOworICAgIGFwcGx5RGVjbGFyYXRpb25zPHRydWU+KGZhbHNl
LCAwLCBtX21hdGNoZWREZWNscy5zaXplKCkgLSAxKTsKKyAgICBhcHBseURlY2xhcmF0aW9uczx0
cnVlPih0cnVlLCBtYXRjaFJlc3VsdC5maXJzdEF1dGhvclJ1bGUsIG1hdGNoUmVzdWx0Lmxhc3RB
dXRob3JSdWxlKTsKKyAgICBhcHBseURlY2xhcmF0aW9uczx0cnVlPih0cnVlLCBtYXRjaFJlc3Vs
dC5maXJzdFVzZXJSdWxlLCBtYXRjaFJlc3VsdC5sYXN0VXNlclJ1bGUpOworICAgIGFwcGx5RGVj
bGFyYXRpb25zPHRydWU+KHRydWUsIG1hdGNoUmVzdWx0LmZpcnN0VUFSdWxlLCBtYXRjaFJlc3Vs
dC5sYXN0VUFSdWxlKTsKKyAgICAKKyAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgZ28g
YWhlYWQgYW5kIHVwZGF0ZSBpdCBub3cuCisgICAgdXBkYXRlRm9udCgpOworICAgIAorICAgIC8v
IExpbmUtaGVpZ2h0IGlzIHNldCB3aGVuIHdlIGFyZSBzdXJlIHdlIGRlY2lkZWQgb24gdGhlIGZv
bnQtc2l6ZS4KKyAgICBpZiAobV9saW5lSGVpZ2h0VmFsdWUpCisgICAgICAgIGFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBtX2xpbmVIZWlnaHRWYWx1ZSk7CisgICAgICAgIAor
ICAgIC8vIE5vdyBkbyB0aGUgbm9ybWFsIHByaW9yaXR5IFVBIHByb3BlcnRpZXMuCisgICAgYXBw
bHlEZWNsYXJhdGlvbnM8ZmFsc2U+KGZhbHNlLCBtYXRjaFJlc3VsdC5maXJzdFVBUnVsZSwgbWF0
Y2hSZXN1bHQubGFzdFVBUnVsZSk7CisgICAgCisgICAgLy8gQ2FjaGUgb3VyIGJvcmRlciBhbmQg
YmFja2dyb3VuZCBzbyB0aGF0IHdlIGNhbiBleGFtaW5lIHRoZW0gbGF0ZXIuCisgICAgY2FjaGVC
b3JkZXJBbmRCYWNrZ3JvdW5kKCk7CisgICAgCisgICAgLy8gTm93IGRvIHRoZSBhdXRob3IgYW5k
IHVzZXIgbm9ybWFsIHByaW9yaXR5IHByb3BlcnRpZXMgYW5kIGFsbCB0aGUgIWltcG9ydGFudCBw
cm9wZXJ0aWVzLgorICAgIGFwcGx5RGVjbGFyYXRpb25zPGZhbHNlPihmYWxzZSwgbWF0Y2hSZXN1
bHQubGFzdFVBUnVsZSArIDEsIG1fbWF0Y2hlZERlY2xzLnNpemUoKSAtIDEpOworICAgIGFwcGx5
RGVjbGFyYXRpb25zPGZhbHNlPih0cnVlLCBtYXRjaFJlc3VsdC5maXJzdEF1dGhvclJ1bGUsIG1h
dGNoUmVzdWx0Lmxhc3RBdXRob3JSdWxlKTsKKyAgICBhcHBseURlY2xhcmF0aW9uczxmYWxzZT4o
dHJ1ZSwgbWF0Y2hSZXN1bHQuZmlyc3RVc2VyUnVsZSwgbWF0Y2hSZXN1bHQubGFzdFVzZXJSdWxl
KTsKKyAgICBhcHBseURlY2xhcmF0aW9uczxmYWxzZT4odHJ1ZSwgbWF0Y2hSZXN1bHQuZmlyc3RV
QVJ1bGUsIG1hdGNoUmVzdWx0Lmxhc3RVQVJ1bGUpOworICAgIAorICAgIEFTU0VSVCghbV9mb250
RGlydHkpOworfQorCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUGFnZVJ1bGVzKFJ1bGVT
ZXQqIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmlu
ZyYgcGFnZU5hbWUpCiB7CiAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkocmV2aXNpb24gOTc4NDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiAr
MjI1LDE3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhZGRNYXRjaGVkUnVsZShjb25zdCBSdWxlRGF0
YSogcnVsZSkgeyBtX21hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7IH0KICAgICB2b2lkIGFkZE1h
dGNoZWREZWNsYXJhdGlvbihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIHVuc2lnbmVkIGxp
bmtNYXRjaFR5cGUgPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoQWxsKTsKIAorICAgIHN0cnVjdCBN
YXRjaFJlc3VsdCB7CisgICAgICAgIE1hdGNoUmVzdWx0KCkgOiBmaXJzdFVBUnVsZSgtMSksIGxh
c3RVQVJ1bGUoLTEpLCBmaXJzdEF1dGhvclJ1bGUoLTEpLCBsYXN0QXV0aG9yUnVsZSgtMSksIGZp
cnN0VXNlclJ1bGUoLTEpLCBsYXN0VXNlclJ1bGUoLTEpIHsgfQorICAgICAgICBpbnQgZmlyc3RV
QVJ1bGU7CisgICAgICAgIGludCBsYXN0VUFSdWxlOworICAgICAgICBpbnQgZmlyc3RBdXRob3JS
dWxlOworICAgICAgICBpbnQgbGFzdEF1dGhvclJ1bGU7CisgICAgICAgIGludCBmaXJzdFVzZXJS
dWxlOworICAgICAgICBpbnQgbGFzdFVzZXJSdWxlOworICAgIH07CisgICAgdm9pZCBtYXRjaEFs
bFJ1bGVzKE1hdGNoUmVzdWx0Jik7CisgICAgdm9pZCBtYXRjaFVBUnVsZXMoTWF0Y2hSZXN1bHQm
KTsKICAgICB2b2lkIG1hdGNoUnVsZXMoUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGlu
dCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgdm9pZCBtYXRj
aFJ1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiwgaW50JiBmaXJzdFJ1bGVJbmRl
eCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBib29s
IGZhc3RSZWplY3RTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYpIGNvbnN0OwpAQCAtMjMyLDYgKzI0
Myw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCBjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVE
YXRhJik7CiAKKyAgICB2b2lkIGFwcGx5TWF0Y2hlZERlY2xhcmF0aW9ucyhjb25zdCBNYXRjaFJl
c3VsdCYpOwogICAgIHRlbXBsYXRlIDxib29sIGZpcnN0UGFzcz4KICAgICB2b2lkIGFwcGx5RGVj
bGFyYXRpb25zKGJvb2wgaW1wb3J0YW50LCBpbnQgc3RhcnRJbmRleCwgaW50IGVuZEluZGV4KTsK
ICAgICB0ZW1wbGF0ZSA8Ym9vbCBmaXJzdFBhc3M+CkBAIC0yNzEsNyArMjgzLDYgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHNfc3R5bGVOb3RZZXRBdmFpbGFi
bGU7CiAKLSAgICB2b2lkIG1hdGNoVUFSdWxlcyhpbnQmIGZpcnN0VUFSdWxlLCBpbnQmIGxhc3RV
QVJ1bGUpOwogICAgIHZvaWQgdXBkYXRlRm9udCgpOwogICAgIHZvaWQgY2FjaGVCb3JkZXJBbmRC
YWNrZ3JvdW5kKCk7CiAK
</data>
<flag name="review"
          id="109507"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>