<?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>116167</bug_id>
          
          <creation_ts>2013-05-15 10:51:30 -0700</creation_ts>
          <short_desc>DocumentOrderedMap doesn&apos;t need to have two HashMaps</short_desc>
          <delta_ts>2013-08-13 19:16:46 -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>DOM</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>119780</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ggaren</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>889400</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-05-15 10:51:30 -0700</bug_when>
    <thetext>DocumentOrderedMap has m_map and m_duplicateCounts but it doesn’t have to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889642</commentid>
    <comment_count>1</comment_count>
      <attachid>201913</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-05-15 19:50:33 -0700</bug_when>
    <thetext>Created attachment 201913
Cleanup + accidental bug fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889643</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-05-15 19:51:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/13895825&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889677</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-05-15 21:47:32 -0700</bug_when>
    <thetext>I might get a chance to review this later. Ryosuke, bug 80224 is also about a problem in this class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889685</commentid>
    <comment_count>4</comment_count>
      <attachid>201913</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-05-15 22:07:26 -0700</bug_when>
    <thetext>Comment on attachment 201913
Cleanup + accidental bug fix

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

I started reviewing this and then I learned that the season finale of New Girl was available on iTunes.

&gt; Source/WebCore/dom/DocumentOrderedMap.cpp:119
&gt; +        entry.orderedList.clear(); // FIXME: Remove the element instead but it can&apos;t be too slow.

I&apos;m not sure I agree with this FIXME. Removal in the duplicate id case, followed by a getElementById for that id, is not obviously worth optimizing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889687</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-05-15 22:15:13 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I&apos;m not sure I agree with this FIXME. Removal in the duplicate id case, followed by a getElementById for that id, is not obviously worth optimizing.

I think it&apos;s possible for authors to insert an element with some id, and then remove the other element of the same id next.  I agree it&apos;s probably not worth optimizing the case where there will be more than two elements with the same id, and one of them is removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889714</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-05-15 23:43:55 -0700</bug_when>
    <thetext>&gt; I think it&apos;s possible for authors to insert an element with some id, and then remove the other element of the same id next.  I agree it&apos;s probably not worth optimizing the case where there will be more than two elements with the same id, and one of them is removed.

Sounds reasonable. Maybe the FIXME should say &quot;FIXME: For short lists, remove the element from the list instead of clearing the list.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889715</commentid>
    <comment_count>7</comment_count>
      <attachid>201913</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-05-15 23:50:04 -0700</bug_when>
    <thetext>Comment on attachment 201913
Cleanup + accidental bug fix

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

r=me

&gt; Source/WebCore/dom/SelectorQuery.cpp:101
&gt; +const CSSSelector* SelectorDataList::canUseIdLookup(Node* rootNode) const

Since the return value changed, should we rename this? Something like &quot;selectorForIdLookup&quot;?

&gt; Source/WebCore/dom/SelectorQuery.cpp:131
&gt; +        const AtomicString idToMatch = idSelector-&gt;value();

Should be const AtomicString&amp;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889721</commentid>
    <comment_count>8</comment_count>
      <attachid>201913</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-05-16 00:07:49 -0700</bug_when>
    <thetext>Comment on attachment 201913
Cleanup + accidental bug fix

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

Thanks for the review!

&gt;&gt; Source/WebCore/dom/DocumentOrderedMap.cpp:119
&gt;&gt; +        entry.orderedList.clear(); // FIXME: Remove the element instead but it can&apos;t be too slow.
&gt; 
&gt; I&apos;m not sure I agree with this FIXME. Removal in the duplicate id case, followed by a getElementById for that id, is not obviously worth optimizing.

Will rephrase the FIXME.

&gt;&gt; Source/WebCore/dom/SelectorQuery.cpp:101
&gt;&gt; +const CSSSelector* SelectorDataList::canUseIdLookup(Node* rootNode) const
&gt; 
&gt; Since the return value changed, should we rename this? Something like &quot;selectorForIdLookup&quot;?

Oh, I must have made the exact rename on another checkout :/ Will do that again before I land.

&gt;&gt; Source/WebCore/dom/SelectorQuery.cpp:131
&gt;&gt; +        const AtomicString idToMatch = idSelector-&gt;value();
&gt; 
&gt; Should be const AtomicString&amp;.

Oops, will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>889908</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-05-16 11:05:30 -0700</bug_when>
    <thetext>Committed r150187: &lt;http://trac.webkit.org/changeset/150187&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201913</attachid>
            <date>2013-05-15 19:50:33 -0700</date>
            <delta_ts>2013-05-16 00:07:49 -0700</delta_ts>
            <desc>Cleanup + accidental bug fix</desc>
            <filename>bug-116167-20130515194928.patch</filename>
            <type>text/plain</type>
            <size>27958</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MDE2NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDEzLTA1LTE1ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIERvY3VtZW50T3JkZXJlZE1hcCBk
b2Vzbid0IG5lZWQgdG8gaGF2ZSB0d28gSGFzaE1hcHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjE2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFByZXZpb3VzbHksIHdlIGhhZCB0d28gaGFzaCBtYXBz
OiBtX21hcCBhbmQgbV9kdXBsaWNhdGVDb3VudHMgaW4gRG9jdW1lbnRPcmRlcmVkTWFwIHRvIGtl
ZXAgdHJhY2sKKyAgICAgICAgb2YgdGhlIGZpcnN0IGVsZW1lbnQgYW5kIHRoZSBudW1iZXIgb2Yg
ZHVwbGljYXRlcyBmb3IgYSBnaXZlbiBuYW1lLiBUaGlzIHBhdGNoIHNpbXBsaWZpZXMgdGhpcyBz
dHJ1Y3R1cmUKKyAgICAgICAgYnkgaGF2aW5nIGEgc2luZ2xlIGhhc2ggbWFwIHRoYXQgY29udGFp
bnMgYm90aCB0aGUgcG9pbnRlciBhbmQgdGhlIG51bWJlciBvZiBkdXBsaWNhdGVzLgorCisgICAg
ICAgIEluIGFkZGl0aW9uLCB0aGlzIHBhdGNoIGZpeGVzIGEgcmVncmVzc2lvbiBpbnRyb2R1Y2Vk
IGluIHIxNDk2NTIgdGhhdCB3aW5kb3cgYW5kIGRvY3VtZW50IG5hbWUgbWFwcworICAgICAgICB3
ZXJlIG5vdCB1cGRhdGVkIGZvciBzb21lIGVsZW1lbnRzIGluc2lkZSBhIFNWRyB1c2UgZWxlbWVu
dCwgYW5kIG1ha2VzIHVzZSBvZiB0aGUgbmV3bHkgYWRkZWQgbGlzdCBvZgorICAgICAgICB0aGUg
bWF0Y2hpbmcgZWxlbWVudHMgaW4gU2VsZWN0b3JRdWVyeS4KKworICAgICAgICAqIGRvbS9Eb2N1
bWVudE9yZGVyZWRNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRPcmRlcmVkTWFw
OjpjbGVhcik6IFVwZGF0ZWQgdG8gdXNlIHRoZSBuZXcgaGFzaCBtYXAuCisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudE9yZGVyZWRNYXA6OmFkZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnRPcmRlcmVkTWFwOjpyZW1vdmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50T3JkZXJlZE1hcDo6Z2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dE9yZGVyZWRNYXA6OmdldEFsbEVsZW1lbnRzQnlJZCk6IEFkZGVkLgorCisgICAgICAgICogZG9t
L0RvY3VtZW50T3JkZXJlZE1hcC5oOgorCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE9yZGVy
ZWRNYXA6Ok1hcEVudHJ5OjpNYXBFbnRyeSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnRPcmRlcmVkTWFwOjpjb250YWluc1NpbmdsZSk6IFVwZGF0ZWQgdG8gdXNlIG5ldyBoYXNo
IG1hcC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50T3JkZXJlZE1hcDo6Y29udGFpbnMpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50T3JkZXJlZE1hcDo6Y29udGFpbnNNdWx0
aXBsZSk6IERpdHRvLgorCisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKTogVGhpcyBmdW5jdGlvbiBkaWRuJ3QgYWRkIHRo
aXMgZWxlbWVudCB0byB3aW5kb3cgYW5kIGRvY3VtZW50J3MgbmFtZSBtYXBzCisgICAgICAgIGlm
IHRoZSBlbGVtZW50IGhhZCBhbHJlYWR5IGJlZW4gaW5zZXJ0ZWQgaW50byBhIHRyZWUgc2NvcGUs
IGFuZCB0aGUgY3VycmVudCBjYWxsIHdhcyBpbnNlcnRpbmcgYW4gYW5jZXN0b3IKKyAgICAgICAg
b2YgdGhlIHRyZWUgc2NvcGUgaW50byB0aGUgZG9jdW1lbnQuIFdlIHdlcmUgZXhpdGluZyBlYXJs
eSBwZXIgc2NvcGUgIT0gdHJlZVNjb3BlKCkuCisKKyAgICAgICAgRml4ZWQgdGhlIGJ1ZyBieSBz
cGxpdHRpbmcgdXBkYXRlSWQgaW50byB0d28gZnVuY3Rpb25zIHVwZGF0ZUlkRm9yVHJlZVNjb3Bl
IGFuZCB1cGRhdGVJZEZvckRvY3VtZW50LgorICAgICAgICBUaGUgZm9ybWVyIGlzIGNhbGxlZCB3
aGVuIHRoaXMgZWxlbWVudCBpcyBpbnNlcnRlZCBpbnRvIGEgbmV3IHRyZWUgc2NvcGUsIGFuZCB0
aGUgbGF0dGVyIGlzIGNhbGxlZCB3aGVuCisgICAgICAgIHRoaXMgZWxlbWVudCBpcyBpbnNlcnRl
ZCBpbnRvIGEgSFRNTCBkb2N1bWVudCBldmVuIGlmIGl0IGhhZCBhbHJlYWR5IGJlZW4gaW5zaWRl
IHNvbWUgdHJlZSBzY29wZS4KKworICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVtb3ZlZEZy
b20pOiBUaGlzIGZ1bmN0aW9uIGRpZG4ndCByZW1vdmUgdGhpcyBlbGVtZW50IGZyb20gdHJlZSBz
Y29wZSdzIGlkIG1hcHMgaWYKKyAgICAgICAgdGhlIHRyZWUgc2NvcGUgd2Fzbid0IGEgZG9jdW1l
bnQuIEZpeGVkIHRoZSBidWcgYnkgc2ltcGx5IGNoZWNraW5nIHRoYXQgdGhlIHJlbW92YWwgaGFw
cGVucyBiZW5lYXRoIHRoZQorICAgICAgICBjdXJyZW50IHRyZWUgc2NvcGUuCisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50Ojp1cGRhdGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OnVwZGF0ZU5hbWVGb3JUcmVlU2NvcGUpOiBSZW5hbWVkIGZyb20gdXBkYXRlTmFtZS4KKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZU5hbWVGb3JEb2N1bWVudCk6IEV4dHJhY3RlZCBm
cm9tIHVwZGF0ZU5hbWUuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp1cGRhdGVJZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp1cGRhdGVJZEZvclRyZWVTY29wZSk6IFJlbmFtZWQg
ZnJvbSB1cGRhdGVJZC4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUlkRm9yRG9j
dW1lbnQpOiBFeHRyYWN0ZWQgZnJvbSB1cGRhdGVJZC4KKworICAgICAgICAqIGRvbS9FbGVtZW50
Lmg6CisKKyAgICAgICAgKiBkb20vU2VsZWN0b3JRdWVyeS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckRhdGFMaXN0OjpjYW5Vc2VJZExvb2t1cCk6IFJlZmFjdG9yZWQgdG8gcmV0dXJu
IHRoZSBpZCBzdWJzZWxlY3RvciBpbnN0ZWFkIG9mIGNoZWNraW5nIGlmCisgICAgICAgIHRoZSBm
aXJzdCBzdWJzZWxlY3RvciBoYXBwZW5zIHRvIGJlIG1hdGNoaW5nIGFuIGlkLgorICAgICAgICAo
V2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZSk6IFVzZSB0aGUgc3Vic2VsZWN0b3Ig
Y2FuVXNlSWRMb29rdXAgcmV0dXJuZWQuIEFsc28gbWFrZSB1c2Ugb2YgbmV3bHkKKyAgICAgICAg
YWRkZWQgZ2V0QWxsRWxlbWVudHNCeUlkIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIG1hdGNoaW5n
IGVsZW1lbnRzIGZvciBhIGdpdmVuIGlkLgorCisgICAgICAgICogZG9tL1NlbGVjdG9yUXVlcnku
aDoKKworICAgICAgICAqIGRvbS9UcmVlU2NvcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJl
ZVNjb3BlOjpnZXRBbGxFbGVtZW50c0J5SWQpOiBBZGRlZC4KKworICAgICAgICAqIGRvbS9UcmVl
U2NvcGUuaDoKKwogMjAxMy0wNS0xNSAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29t
PgogCiAgICAgICAgIEJVSUxEIEZJWCAocjE1MDE0MCk6IEZyYW1lOjplZGl0b3IoKSBzaG91bGQg
cmV0dXJuIGEgcmVmZXJlbmNlIGZvciBpT1MsIHRvbwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50T3JkZXJlZE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50T3JkZXJlZE1hcC5jcHAJKHJldmlzaW9uIDE1MDEyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4
MCw2IEBAIGlubGluZSBib29sIGtleU1hdGNoZXNEb2N1bWVudE5hbWVkSXRlbSgKIHZvaWQgRG9j
dW1lbnRPcmRlcmVkTWFwOjpjbGVhcigpCiB7CiAgICAgbV9tYXAuY2xlYXIoKTsKLSAgICBtX2R1
cGxpY2F0ZUNvdW50cy5jbGVhcigpOwogfQogCiB2b2lkIERvY3VtZW50T3JkZXJlZE1hcDo6YWRk
KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgRWxlbWVudCogZWxlbWVudCkKQEAgLTg4LDI5ICs4Nywx
NSBAQCB2b2lkIERvY3VtZW50T3JkZXJlZE1hcDo6YWRkKEF0b21pY1N0cmluCiAgICAgQVNTRVJU
KGtleSk7CiAgICAgQVNTRVJUKGVsZW1lbnQpOwogCi0gICAgaWYgKCFtX2R1cGxpY2F0ZUNvdW50
cy5jb250YWlucyhrZXkpKSB7Ci0gICAgICAgIC8vIEZhc3QgcGF0aC4gVGhlIGtleSBpcyBub3Qg
YWxyZWFkeSBpbiBtX2R1cGxpY2F0ZUNvdW50cywgc28gd2UgYXNzdW1lIHRoYXQgaXQncwotICAg
ICAgICAvLyBhbHNvIG5vdCBhbHJlYWR5IGluIG1fbWFwIGFuZCB0cnkgdG8gYWRkIGl0LiBJZiB0
aGF0IGFkZCBzdWNjZWVkcywgd2UncmUgZG9uZS4KLSAgICAgICAgTWFwOjpBZGRSZXN1bHQgYWRk
UmVzdWx0ID0gbV9tYXAuYWRkKGtleSwgZWxlbWVudCk7Ci0gICAgICAgIGlmIChhZGRSZXN1bHQu
aXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAvLyBUaGUgYWRkIGZh
aWxlZCwgc28gdGhpcyBrZXkgd2FzIGFscmVhZHkgY2FjaGVkIGluIG1fbWFwLgotICAgICAgICAv
LyBUaGVyZSBhcmUgbXVsdGlwbGUgZWxlbWVudHMgd2l0aCB0aGlzIGtleS4gUmVtb3ZlIHRoZSBt
X21hcAotICAgICAgICAvLyBjYWNoZSBmb3IgdGhpcyBrZXkgc28gZ2V0IHNlYXJjaGVzIGZvciBp
dCBuZXh0IHRpbWUgaXQgaXMgY2FsbGVkLgotICAgICAgICBtX21hcC5yZW1vdmUoYWRkUmVzdWx0
Lml0ZXJhdG9yKTsKLSAgICAgICAgbV9kdXBsaWNhdGVDb3VudHMuYWRkKGtleSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgLy8gVGhlcmUgYXJlIG11bHRpcGxlIGVsZW1lbnRzIHdpdGggdGhpcyBr
ZXkuIFJlbW92ZSB0aGUgbV9tYXAKLSAgICAgICAgLy8gY2FjaGUgZm9yIHRoaXMga2V5IHNvIGdl
dCB3aWxsIHNlYXJjaCBmb3IgaXQgbmV4dCB0aW1lIGl0IGlzIGNhbGxlZC4KLSAgICAgICAgTWFw
OjppdGVyYXRvciBjYWNoZWRJdGVtID0gbV9tYXAuZmluZChrZXkpOwotICAgICAgICBpZiAoY2Fj
aGVkSXRlbSAhPSBtX21hcC5lbmQoKSkgewotICAgICAgICAgICAgbV9tYXAucmVtb3ZlKGNhY2hl
ZEl0ZW0pOwotICAgICAgICAgICAgbV9kdXBsaWNhdGVDb3VudHMuYWRkKGtleSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBtX2R1cGxpY2F0ZUNvdW50cy5hZGQoa2V5KTsKKyAgICBNYXA6OkFk
ZFJlc3VsdCBhZGRSZXN1bHQgPSBtX21hcC5hZGQoa2V5LCBNYXBFbnRyeShlbGVtZW50KSk7Cisg
ICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm47CisKKyAgICBNYXBF
bnRyeSYgZW50cnkgPSBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOworICAgIEFTU0VSVChlbnRy
eS5jb3VudCk7CisgICAgZW50cnkuZWxlbWVudCA9IDA7CisgICAgZW50cnkuY291bnQrKzsKKyAg
ICBlbnRyeS5vcmRlcmVkTGlzdC5jbGVhcigpOwogfQogCiB2b2lkIERvY3VtZW50T3JkZXJlZE1h
cDo6cmVtb3ZlKEF0b21pY1N0cmluZ0ltcGwqIGtleSwgRWxlbWVudCogZWxlbWVudCkKQEAgLTEx
OSwxMSArMTA0LDIwIEBAIHZvaWQgRG9jdW1lbnRPcmRlcmVkTWFwOjpyZW1vdmUoQXRvbWljU3QK
ICAgICBBU1NFUlQoZWxlbWVudCk7CiAKICAgICBtX21hcC5jaGVja0NvbnNpc3RlbmN5KCk7Ci0g
ICAgTWFwOjppdGVyYXRvciBjYWNoZWRJdGVtID0gbV9tYXAuZmluZChrZXkpOwotICAgIGlmIChj
YWNoZWRJdGVtICE9IG1fbWFwLmVuZCgpICYmIGNhY2hlZEl0ZW0tPnZhbHVlID09IGVsZW1lbnQp
Ci0gICAgICAgIG1fbWFwLnJlbW92ZShjYWNoZWRJdGVtKTsKLSAgICBlbHNlCi0gICAgICAgIG1f
ZHVwbGljYXRlQ291bnRzLnJlbW92ZShrZXkpOworICAgIE1hcDo6aXRlcmF0b3IgaXQgPSBtX21h
cC5maW5kKGtleSk7CisgICAgQVNTRVJUKGl0ICE9IG1fbWFwLmVuZCgpKTsKKyAgICBNYXBFbnRy
eSYgZW50cnkgPSBpdC0+dmFsdWU7CisKKyAgICBBU1NFUlQoZW50cnkuY291bnQpOworICAgIGlm
IChlbnRyeS5jb3VudCA9PSAxKSB7CisgICAgICAgIEFTU0VSVCghZW50cnkuZWxlbWVudCB8fCBl
bnRyeS5lbGVtZW50ID09IGVsZW1lbnQpOworICAgICAgICBtX21hcC5yZW1vdmUoaXQpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGlmIChlbnRyeS5lbGVtZW50ID09IGVsZW1lbnQpCisgICAgICAg
ICAgICBlbnRyeS5lbGVtZW50ID0gMDsKKyAgICAgICAgZW50cnkuY291bnQtLTsKKyAgICAgICAg
ZW50cnkub3JkZXJlZExpc3QuY2xlYXIoKTsgLy8gRklYTUU6IFJlbW92ZSB0aGUgZWxlbWVudCBp
bnN0ZWFkIGJ1dCBpdCBjYW4ndCBiZSB0b28gc2xvdy4KKyAgICB9CiB9CiAKIHRlbXBsYXRlPGJv
b2wga2V5TWF0Y2hlcyhBdG9taWNTdHJpbmdJbXBsKiwgRWxlbWVudCopPgpAQCAtMTM0LDIyICsx
MjgsMjMgQEAgaW5saW5lIEVsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0KAogCiAgICAg
bV9tYXAuY2hlY2tDb25zaXN0ZW5jeSgpOwogCi0gICAgRWxlbWVudCogZWxlbWVudCA9IG1fbWFw
LmdldChrZXkpOwotICAgIGlmIChlbGVtZW50KQorICAgIE1hcDo6aXRlcmF0b3IgaXQgPSBtX21h
cC5maW5kKGtleSk7CisgICAgaWYgKGl0ID09IG1fbWFwLmVuZCgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIE1hcEVudHJ5JiBlbnRyeSA9IGl0LT52YWx1ZTsKKyAgICBBU1NFUlQoZW50cnku
Y291bnQpOworICAgIGlmIChlbnRyeS5lbGVtZW50KQorICAgICAgICByZXR1cm4gZW50cnkuZWxl
bWVudDsKKworICAgIC8vIFdlIGtub3cgdGhlcmUncyBhdCBsZWFzdCBvbmUgbm9kZSB0aGF0IG1h
dGNoZXM7IGl0ZXJhdGUgdG8gZmluZCB0aGUgZmlyc3Qgb25lLgorICAgIGZvciAoRWxlbWVudCog
ZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKHNjb3BlLT5yb290Tm9kZSgp
KTsgZWxlbWVudDsgZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoZWxlbWVudCkpIHsK
KyAgICAgICAgaWYgKCFrZXlNYXRjaGVzKGtleSwgZWxlbWVudCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgZW50cnkuZWxlbWVudCA9IGVsZW1lbnQ7CiAgICAgICAgIHJldHVybiBl
bGVtZW50OwotCi0gICAgaWYgKG1fZHVwbGljYXRlQ291bnRzLmNvbnRhaW5zKGtleSkpIHsKLSAg
ICAgICAgLy8gV2Uga25vdyB0aGVyZSdzIGF0IGxlYXN0IG9uZSBub2RlIHRoYXQgbWF0Y2hlczsg
aXRlcmF0ZSB0byBmaW5kIHRoZSBmaXJzdCBvbmUuCi0gICAgICAgIGZvciAoZWxlbWVudCA9IEVs
ZW1lbnRUcmF2ZXJzYWw6OmZpcnN0V2l0aGluKHNjb3BlLT5yb290Tm9kZSgpKTsgZWxlbWVudDsg
ZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQoZWxlbWVudCkpIHsKLSAgICAgICAgICAg
IGlmICgha2V5TWF0Y2hlcyhrZXksIGVsZW1lbnQpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgbV9kdXBsaWNhdGVDb3VudHMucmVtb3ZlKGtleSk7Ci0gICAgICAgICAg
ICBtX21hcC5zZXQoa2V5LCBlbGVtZW50KTsKLSAgICAgICAgICAgIHJldHVybiBlbGVtZW50Owot
ICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KLQorICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xODgsNCArMTgzLDMz
IEBAIEVsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEIKICAgICByZXR1cm4g
Z2V0PGtleU1hdGNoZXNEb2N1bWVudE5hbWVkSXRlbT4oa2V5LCBzY29wZSk7CiB9CiAKK2NvbnN0
IFZlY3RvcjxFbGVtZW50Kj4qIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0QWxsRWxlbWVudHNCeUlk
KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgY29uc3QgVHJlZVNjb3BlKiBzY29wZSkgY29uc3QKK3sK
KyAgICBBU1NFUlQoa2V5KTsKKyAgICBBU1NFUlQoc2NvcGUpOworCisgICAgbV9tYXAuY2hlY2tD
b25zaXN0ZW5jeSgpOworCisgICAgTWFwOjppdGVyYXRvciBpdCA9IG1fbWFwLmZpbmQoa2V5KTsK
KyAgICBpZiAoaXQgPT0gbV9tYXAuZW5kKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgTWFw
RW50cnkmIGVudHJ5ID0gaXQtPnZhbHVlOworICAgIEFTU0VSVChlbnRyeS5jb3VudCk7CisgICAg
aWYgKCFlbnRyeS5jb3VudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZW50cnkub3Jk
ZXJlZExpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIGVudHJ5Lm9yZGVyZWRMaXN0LnJlc2VydmVD
YXBhY2l0eShlbnRyeS5jb3VudCk7CisgICAgICAgIGZvciAoRWxlbWVudCogZWxlbWVudCA9IGVu
dHJ5LmVsZW1lbnQgPyBlbnRyeS5lbGVtZW50IDogRWxlbWVudFRyYXZlcnNhbDo6Zmlyc3RXaXRo
aW4oc2NvcGUtPnJvb3ROb2RlKCkpOyBlbGVtZW50OyBlbGVtZW50ID0gRWxlbWVudFRyYXZlcnNh
bDo6bmV4dChlbGVtZW50KSkgeworICAgICAgICAgICAgaWYgKCFrZXlNYXRjaGVzSWQoa2V5LCBl
bGVtZW50KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGVudHJ5Lm9y
ZGVyZWRMaXN0LmFwcGVuZChlbGVtZW50KTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoZW50
cnkub3JkZXJlZExpc3Quc2l6ZSgpID09IGVudHJ5LmNvdW50KTsKKyAgICB9CisKKyAgICByZXR1
cm4gJmVudHJ5Lm9yZGVyZWRMaXN0OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5oCShyZXZpc2lvbiAxNTAxMjkp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9IYXNoQ291bnRlZFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0ltcGwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNDksNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBjb250YWlucyhBdG9taWNTdHJpbmdJ
bXBsKikgY29uc3Q7CiAgICAgYm9vbCBjb250YWluc1NpbmdsZShBdG9taWNTdHJpbmdJbXBsKikg
Y29uc3Q7CiAgICAgYm9vbCBjb250YWluc011bHRpcGxlKEF0b21pY1N0cmluZ0ltcGwqKSBjb25z
dDsKKwogICAgIC8vIGNvbmNyZXRlIGluc3RhbnRpYXRpb25zIG9mIHRoZSBnZXQ8PigpIG1ldGhv
ZCB0ZW1wbGF0ZQogICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeUlkKEF0b21pY1N0cmluZ0ltcGwq
LCBjb25zdCBUcmVlU2NvcGUqKSBjb25zdDsKICAgICBFbGVtZW50KiBnZXRFbGVtZW50QnlOYW1l
KEF0b21pY1N0cmluZ0ltcGwqLCBjb25zdCBUcmVlU2NvcGUqKSBjb25zdDsKQEAgLTU4LDMzICs2
MCw0OCBAQCBwdWJsaWM6CiAgICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5V2luZG93TmFtZWRJdGVt
KEF0b21pY1N0cmluZ0ltcGwqLCBjb25zdCBUcmVlU2NvcGUqKSBjb25zdDsKICAgICBFbGVtZW50
KiBnZXRFbGVtZW50QnlEb2N1bWVudE5hbWVkSXRlbShBdG9taWNTdHJpbmdJbXBsKiwgY29uc3Qg
VHJlZVNjb3BlKikgY29uc3Q7CiAKKyAgICBjb25zdCBWZWN0b3I8RWxlbWVudCo+KiBnZXRBbGxF
bGVtZW50c0J5SWQoQXRvbWljU3RyaW5nSW1wbCosIGNvbnN0IFRyZWVTY29wZSopIGNvbnN0Owor
CiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdGVt
cGxhdGU8Ym9vbCBrZXlNYXRjaGVzKEF0b21pY1N0cmluZ0ltcGwqLCBFbGVtZW50Kik+IEVsZW1l
bnQqIGdldChBdG9taWNTdHJpbmdJbXBsKiwgY29uc3QgVHJlZVNjb3BlKikgY29uc3Q7CiAKLSAg
ICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIEVsZW1lbnQqPiBNYXA7CisgICAg
c3RydWN0IE1hcEVudHJ5IHsKKyAgICAgICAgTWFwRW50cnkoKQorICAgICAgICAgICAgOiBlbGVt
ZW50KDApCisgICAgICAgICAgICAsIGNvdW50KDApCisgICAgICAgIHsgfQorICAgICAgICBleHBs
aWNpdCBNYXBFbnRyeShFbGVtZW50KiBmaXJzdEVsZW1lbnQpCisgICAgICAgICAgICA6IGVsZW1l
bnQoZmlyc3RFbGVtZW50KQorICAgICAgICAgICAgLCBjb3VudCgxKQorICAgICAgICB7IH0KKwor
ICAgICAgICBFbGVtZW50KiBlbGVtZW50OworICAgICAgICB1bnNpZ25lZCBjb3VudDsKKyAgICAg
ICAgVmVjdG9yPEVsZW1lbnQqPiBvcmRlcmVkTGlzdDsKKyAgICB9OworCisgICAgdHlwZWRlZiBI
YXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBNYXBFbnRyeT4gTWFwOwogCi0gICAgLy8gV2UgbWFp
bnRhaW4gdGhlIGludmFyaWFudCB0aGF0IG1fZHVwbGljYXRlQ291bnRzIGlzIHRoZSBjb3VudCBv
ZiBhbGwgZWxlbWVudHMgd2l0aCBhIGdpdmVuIGtleQotICAgIC8vIGV4Y2x1ZGluZyB0aGUgb25l
IHJlZmVyZW5jZWQgaW4gbV9tYXAsIGlmIGFueS4gVGhpcyBtZWFucyBpdCBvbmUgbGVzcyB0aGFu
IHRoZSB0b3RhbCBjb3VudAotICAgIC8vIHdoZW4gdGhlIGZpcnN0IG5vZGUgd2l0aCBhIGdpdmVu
IGtleSBpcyBjYWNoZWQsIG90aGVyd2lzZSB0aGUgc2FtZSBhcyB0aGUgdG90YWwgY291bnQuCiAg
ICAgbXV0YWJsZSBNYXAgbV9tYXA7Ci0gICAgbXV0YWJsZSBIYXNoQ291bnRlZFNldDxBdG9taWNT
dHJpbmdJbXBsKj4gbV9kdXBsaWNhdGVDb3VudHM7CiB9OwogCiBpbmxpbmUgYm9vbCBEb2N1bWVu
dE9yZGVyZWRNYXA6OmNvbnRhaW5zU2luZ2xlKEF0b21pY1N0cmluZ0ltcGwqIGlkKSBjb25zdAog
ewotICAgIHJldHVybiAobV9tYXAuY29udGFpbnMoaWQpID8gMSA6IDApICsgbV9kdXBsaWNhdGVD
b3VudHMuY291bnQoaWQpID09IDE7CisgICAgTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbWFw
LmZpbmQoaWQpOworICAgIHJldHVybiBpdCAhPSBtX21hcC5lbmQoKSAmJiBpdC0+dmFsdWUuY291
bnQgPT0gMTsKIH0KIAogaW5saW5lIGJvb2wgRG9jdW1lbnRPcmRlcmVkTWFwOjpjb250YWlucyhB
dG9taWNTdHJpbmdJbXBsKiBpZCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tYXAuY29udGFpbnMo
aWQpIHx8IG1fZHVwbGljYXRlQ291bnRzLmNvbnRhaW5zKGlkKTsKKyAgICByZXR1cm4gbV9tYXAu
Y29udGFpbnMoaWQpOwogfQogCiBpbmxpbmUgYm9vbCBEb2N1bWVudE9yZGVyZWRNYXA6OmNvbnRh
aW5zTXVsdGlwbGUoQXRvbWljU3RyaW5nSW1wbCogaWQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICht
X21hcC5jb250YWlucyhpZCkgPyAxIDogMCkgKyBtX2R1cGxpY2F0ZUNvdW50cy5jb3VudChpZCkg
PiAxOworICAgIE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21hcC5maW5kKGlkKTsKKyAgICBy
ZXR1cm4gaXQgIT0gbV9tYXAuZW5kKCkgJiYgaXQtPnZhbHVlLmNvdW50ID4gMTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24g
MTUwMTI5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTUwLDkgKzExNTAsMTEgQEAgYm9vbCBFbGVtZW50Ojppc0luZXJ0KCkgY29uc3QKIAog
Tm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBFbGVtZW50OjppbnNlcnRlZEludG8o
Q29udGFpbmVyTm9kZSogaW5zZXJ0aW9uUG9pbnQpCiB7CisgICAgYm9vbCB3YXNJbkRvY3VtZW50
ID0gaW5Eb2N1bWVudCgpOwogICAgIC8vIG5lZWQgdG8gZG8gc3VwZXJjbGFzcyBwcm9jZXNzaW5n
IGZpcnN0IHNvIGluRG9jdW1lbnQoKSBpcyB0cnVlCiAgICAgLy8gYnkgdGhlIHRpbWUgd2UgcmVh
Y2ggdXBkYXRlSWQKICAgICBDb250YWluZXJOb2RlOjppbnNlcnRlZEludG8oaW5zZXJ0aW9uUG9p
bnQpOworICAgIEFTU0VSVCghd2FzSW5Eb2N1bWVudCB8fCBpbkRvY3VtZW50KCkpOwogCiAjaWYg
RU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIGlmIChjb250YWluc0Z1bGxTY3JlZW5FbGVtZW50
KCkgJiYgcGFyZW50RWxlbWVudCgpICYmICFwYXJlbnRFbGVtZW50KCktPmNvbnRhaW5zRnVsbFNj
cmVlbkVsZW1lbnQoKSkKQEAgLTExNzEsMjEgKzExNzMsMzAgQEAgTm9kZTo6SW5zZXJ0aW9uTm90
aWZpY2F0aW9uUmVxdWVzdCBFbGVtZQogICAgIGlmIChoYXNSYXJlRGF0YSgpKQogICAgICAgICBl
bGVtZW50UmFyZURhdGEoKS0+Y2xlYXJDbGFzc0xpc3RWYWx1ZUZvclF1aXJrc01vZGUoKTsKIAot
ICAgIFRyZWVTY29wZSogc2NvcGUgPSBpbnNlcnRpb25Qb2ludC0+dHJlZVNjb3BlKCk7Ci0gICAg
aWYgKHNjb3BlICE9IHRyZWVTY29wZSgpKQotICAgICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsK
KyAgICBUcmVlU2NvcGUqIG5ld1Njb3BlID0gaW5zZXJ0aW9uUG9pbnQtPnRyZWVTY29wZSgpOwor
ICAgIEhUTUxEb2N1bWVudCogbmV3RG9jdW1lbnQgPSAhd2FzSW5Eb2N1bWVudCAmJiBpbkRvY3Vt
ZW50KCkgJiYgbmV3U2NvcGUtPmRvY3VtZW50U2NvcGUoKS0+aXNIVE1MRG9jdW1lbnQoKSA/IHRv
SFRNTERvY3VtZW50KG5ld1Njb3BlLT5kb2N1bWVudFNjb3BlKCkpIDogMDsKKyAgICBpZiAobmV3
U2NvcGUgIT0gdHJlZVNjb3BlKCkpCisgICAgICAgIG5ld1Njb3BlID0gMDsKIAogICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgaWRWYWx1ZSA9IGdldElkQXR0cmlidXRlKCk7Ci0gICAgaWYgKCFpZFZh
bHVlLmlzTnVsbCgpKQotICAgICAgICB1cGRhdGVJZChzY29wZSwgbnVsbEF0b20sIGlkVmFsdWUs
IEFsd2F5c1VwZGF0ZUhUTUxEb2N1bWVudE5hbWVkSXRlbU1hcHMpOworICAgIGlmICghaWRWYWx1
ZS5pc051bGwoKSkgeworICAgICAgICBpZiAobmV3U2NvcGUpCisgICAgICAgICAgICB1cGRhdGVJ
ZEZvclRyZWVTY29wZShuZXdTY29wZSwgbnVsbEF0b20sIGlkVmFsdWUpOworICAgICAgICBpZiAo
bmV3RG9jdW1lbnQpCisgICAgICAgICAgICB1cGRhdGVJZEZvckRvY3VtZW50KG5ld0RvY3VtZW50
LCBudWxsQXRvbSwgaWRWYWx1ZSwgQWx3YXlzVXBkYXRlSFRNTERvY3VtZW50TmFtZWRJdGVtTWFw
cyk7CisgICAgfQogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lVmFsdWUgPSBnZXROYW1l
QXR0cmlidXRlKCk7Ci0gICAgaWYgKCFuYW1lVmFsdWUuaXNOdWxsKCkpCi0gICAgICAgIHVwZGF0
ZU5hbWUoc2NvcGUsIG51bGxBdG9tLCBuYW1lVmFsdWUpOworICAgIGlmICghbmFtZVZhbHVlLmlz
TnVsbCgpKSB7CisgICAgICAgIGlmIChuZXdTY29wZSkKKyAgICAgICAgICAgIHVwZGF0ZU5hbWVG
b3JUcmVlU2NvcGUobmV3U2NvcGUsIG51bGxBdG9tLCBuYW1lVmFsdWUpOworICAgICAgICBpZiAo
bmV3RG9jdW1lbnQpCisgICAgICAgICAgICB1cGRhdGVOYW1lRm9yRG9jdW1lbnQobmV3RG9jdW1l
bnQsIG51bGxBdG9tLCBuYW1lVmFsdWUpOworICAgIH0KIAotICAgIGlmIChoYXNUYWdOYW1lKGxh
YmVsVGFnKSkgewotICAgICAgICBpZiAoc2NvcGUtPnNob3VsZENhY2hlTGFiZWxzQnlGb3JBdHRy
aWJ1dGUoKSkKLSAgICAgICAgICAgIHVwZGF0ZUxhYmVsKHNjb3BlLCBudWxsQXRvbSwgZmFzdEdl
dEF0dHJpYnV0ZShmb3JBdHRyKSk7CisgICAgaWYgKG5ld1Njb3BlICYmIGhhc1RhZ05hbWUobGFi
ZWxUYWcpKSB7CisgICAgICAgIGlmIChuZXdTY29wZS0+c2hvdWxkQ2FjaGVMYWJlbHNCeUZvckF0
dHJpYnV0ZSgpKQorICAgICAgICAgICAgdXBkYXRlTGFiZWwobmV3U2NvcGUsIG51bGxBdG9tLCBm
YXN0R2V0QXR0cmlidXRlKGZvckF0dHIpKTsKICAgICB9CiAKICAgICByZXR1cm4gSW5zZXJ0aW9u
RG9uZTsKQEAgLTEyMTcsMTkgKzEyMjgsMzEgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbShD
b250YWluZXJOb2RlKgogCiAgICAgc2V0U2F2ZWRMYXllclNjcm9sbE9mZnNldChJbnRTaXplKCkp
OwogCi0gICAgaWYgKGluc2VydGlvblBvaW50LT5pc0luVHJlZVNjb3BlKCkgJiYgdHJlZVNjb3Bl
KCkgPT0gZG9jdW1lbnQoKSkgeworICAgIGlmIChpbnNlcnRpb25Qb2ludC0+aXNJblRyZWVTY29w
ZSgpKSB7CisgICAgICAgIFRyZWVTY29wZSogb2xkU2NvcGUgPSBpbnNlcnRpb25Qb2ludC0+dHJl
ZVNjb3BlKCk7CisgICAgICAgIEhUTUxEb2N1bWVudCogb2xkRG9jdW1lbnQgPSBpbkRvY3VtZW50
KCkgJiYgb2xkU2NvcGUtPmRvY3VtZW50U2NvcGUoKS0+aXNIVE1MRG9jdW1lbnQoKSA/IHRvSFRN
TERvY3VtZW50KG9sZFNjb3BlLT5kb2N1bWVudFNjb3BlKCkpIDogMDsKKyAgICAgICAgaWYgKG9s
ZFNjb3BlICE9IHRyZWVTY29wZSgpKQorICAgICAgICAgICAgb2xkU2NvcGUgPSAwOworCiAgICAg
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRWYWx1ZSA9IGdldElkQXR0cmlidXRlKCk7Ci0gICAg
ICAgIGlmICghaWRWYWx1ZS5pc051bGwoKSkKLSAgICAgICAgICAgIHVwZGF0ZUlkKGluc2VydGlv
blBvaW50LT50cmVlU2NvcGUoKSwgaWRWYWx1ZSwgbnVsbEF0b20sIEFsd2F5c1VwZGF0ZUhUTUxE
b2N1bWVudE5hbWVkSXRlbU1hcHMpOworICAgICAgICBpZiAoIWlkVmFsdWUuaXNOdWxsKCkpIHsK
KyAgICAgICAgICAgIGlmIChvbGRTY29wZSkKKyAgICAgICAgICAgICAgICB1cGRhdGVJZEZvclRy
ZWVTY29wZShvbGRTY29wZSwgaWRWYWx1ZSwgbnVsbEF0b20pOworICAgICAgICAgICAgaWYgKG9s
ZERvY3VtZW50KQorICAgICAgICAgICAgICAgIHVwZGF0ZUlkRm9yRG9jdW1lbnQob2xkRG9jdW1l
bnQsIGlkVmFsdWUsIG51bGxBdG9tLCBBbHdheXNVcGRhdGVIVE1MRG9jdW1lbnROYW1lZEl0ZW1N
YXBzKTsKKyAgICAgICAgfQogCiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZVZhbHVl
ID0gZ2V0TmFtZUF0dHJpYnV0ZSgpOwotICAgICAgICBpZiAoIW5hbWVWYWx1ZS5pc051bGwoKSkK
LSAgICAgICAgICAgIHVwZGF0ZU5hbWUoaW5zZXJ0aW9uUG9pbnQtPnRyZWVTY29wZSgpLCBuYW1l
VmFsdWUsIG51bGxBdG9tKTsKKyAgICAgICAgaWYgKCFuYW1lVmFsdWUuaXNOdWxsKCkpIHsKKyAg
ICAgICAgICAgIGlmIChvbGRTY29wZSkKKyAgICAgICAgICAgICAgICB1cGRhdGVOYW1lRm9yVHJl
ZVNjb3BlKG9sZFNjb3BlLCBuYW1lVmFsdWUsIG51bGxBdG9tKTsKKyAgICAgICAgICAgIGlmIChv
bGREb2N1bWVudCkKKyAgICAgICAgICAgICAgICB1cGRhdGVOYW1lRm9yRG9jdW1lbnQob2xkRG9j
dW1lbnQsIG5hbWVWYWx1ZSwgbnVsbEF0b20pOworICAgICAgICB9CiAKLSAgICAgICAgaWYgKGhh
c1RhZ05hbWUobGFiZWxUYWcpKSB7Ci0gICAgICAgICAgICBUcmVlU2NvcGUqIHRyZWVTY29wZSA9
IGluc2VydGlvblBvaW50LT50cmVlU2NvcGUoKTsKLSAgICAgICAgICAgIGlmICh0cmVlU2NvcGUt
PnNob3VsZENhY2hlTGFiZWxzQnlGb3JBdHRyaWJ1dGUoKSkKLSAgICAgICAgICAgICAgICB1cGRh
dGVMYWJlbCh0cmVlU2NvcGUsIGZhc3RHZXRBdHRyaWJ1dGUoZm9yQXR0ciksIG51bGxBdG9tKTsK
KyAgICAgICAgaWYgKG9sZFNjb3BlICYmIGhhc1RhZ05hbWUobGFiZWxUYWcpKSB7CisgICAgICAg
ICAgICBpZiAob2xkU2NvcGUtPnNob3VsZENhY2hlTGFiZWxzQnlGb3JBdHRyaWJ1dGUoKSkKKyAg
ICAgICAgICAgICAgICB1cGRhdGVMYWJlbChvbGRTY29wZSwgZmFzdEdldEF0dHJpYnV0ZShmb3JB
dHRyKSwgbnVsbEF0b20pOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yNjMwLDEwICsyNjUzLDE3
IEBAIGlubGluZSB2b2lkIEVsZW1lbnQ6OnVwZGF0ZU5hbWUoY29uc3QgQXQKICAgICBpZiAob2xk
TmFtZSA9PSBuZXdOYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICB1cGRhdGVOYW1lKHRyZWVT
Y29wZSgpLCBvbGROYW1lLCBuZXdOYW1lKTsKKyAgICB1cGRhdGVOYW1lRm9yVHJlZVNjb3BlKHRy
ZWVTY29wZSgpLCBvbGROYW1lLCBuZXdOYW1lKTsKKworICAgIGlmICghaW5Eb2N1bWVudCgpKQor
ICAgICAgICByZXR1cm47CisgICAgRG9jdW1lbnQqIGh0bWxEb2N1bWVudCA9IGRvY3VtZW50KCk7
CisgICAgaWYgKCFodG1sRG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgIHJldHVy
bjsKKyAgICB1cGRhdGVOYW1lRm9yRG9jdW1lbnQodG9IVE1MRG9jdW1lbnQoaHRtbERvY3VtZW50
KSwgb2xkTmFtZSwgbmV3TmFtZSk7CiB9CiAKLXZvaWQgRWxlbWVudDo6dXBkYXRlTmFtZShUcmVl
U2NvcGUqIHNjb3BlLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZE5hbWUsIGNvbnN0IEF0b21pY1N0
cmluZyYgbmV3TmFtZSkKK3ZvaWQgRWxlbWVudDo6dXBkYXRlTmFtZUZvclRyZWVTY29wZShUcmVl
U2NvcGUqIHNjb3BlLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZE5hbWUsIGNvbnN0IEF0b21pY1N0
cmluZyYgbmV3TmFtZSkKIHsKICAgICBBU1NFUlQoaXNJblRyZWVTY29wZSgpKTsKICAgICBBU1NF
UlQob2xkTmFtZSAhPSBuZXdOYW1lKTsKQEAgLTI2NDIsMjggKzI2NzIsMjcgQEAgdm9pZCBFbGVt
ZW50Ojp1cGRhdGVOYW1lKFRyZWVTY29wZSogc2NvcAogICAgICAgICBzY29wZS0+cmVtb3ZlRWxl
bWVudEJ5TmFtZShvbGROYW1lLCB0aGlzKTsKICAgICBpZiAoIW5ld05hbWUuaXNFbXB0eSgpKQog
ICAgICAgICBzY29wZS0+YWRkRWxlbWVudEJ5TmFtZShuZXdOYW1lLCB0aGlzKTsKK30KIAotICAg
IGlmICghaW5Eb2N1bWVudCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgRG9jdW1lbnQq
IG93bmVyRG9jdW1lbnQgPSBkb2N1bWVudCgpOwotICAgIGlmICghb3duZXJEb2N1bWVudC0+aXNI
VE1MRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuOwordm9pZCBFbGVtZW50Ojp1cGRhdGVOYW1l
Rm9yRG9jdW1lbnQoSFRNTERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBv
bGROYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld05hbWUpCit7CisgICAgQVNTRVJUKGluRG9j
dW1lbnQoKSk7CisgICAgQVNTRVJUKG9sZE5hbWUgIT0gbmV3TmFtZSk7CiAKICAgICBpZiAoV2lu
ZG93TmFtZUNvbGxlY3Rpb246Om5vZGVNYXRjaGVzSWZOYW1lQXR0cmlidXRlTWF0Y2godGhpcykp
IHsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZCA9IFdpbmRvd05hbWVDb2xsZWN0aW9u
Ojpub2RlTWF0Y2hlc0lmSWRBdHRyaWJ1dGVNYXRjaCh0aGlzKSA/IGdldElkQXR0cmlidXRlKCkg
OiBudWxsQXRvbTsKICAgICAgICAgaWYgKCFvbGROYW1lLmlzRW1wdHkoKSAmJiBvbGROYW1lICE9
IGlkKQotICAgICAgICAgICAgdG9IVE1MRG9jdW1lbnQob3duZXJEb2N1bWVudCktPndpbmRvd05h
bWVkSXRlbU1hcCgpLnJlbW92ZShvbGROYW1lLmltcGwoKSwgdGhpcyk7CisgICAgICAgICAgICBk
b2N1bWVudC0+d2luZG93TmFtZWRJdGVtTWFwKCkucmVtb3ZlKG9sZE5hbWUuaW1wbCgpLCB0aGlz
KTsKICAgICAgICAgaWYgKCFuZXdOYW1lLmlzRW1wdHkoKSAmJiBuZXdOYW1lICE9IGlkKQotICAg
ICAgICAgICAgdG9IVE1MRG9jdW1lbnQob3duZXJEb2N1bWVudCktPndpbmRvd05hbWVkSXRlbU1h
cCgpLmFkZChuZXdOYW1lLmltcGwoKSwgdGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudC0+d2lu
ZG93TmFtZWRJdGVtTWFwKCkuYWRkKG5ld05hbWUuaW1wbCgpLCB0aGlzKTsKICAgICB9CiAKICAg
ICBpZiAoRG9jdW1lbnROYW1lQ29sbGVjdGlvbjo6bm9kZU1hdGNoZXNJZk5hbWVBdHRyaWJ1dGVN
YXRjaCh0aGlzKSkgewogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkID0gRG9jdW1lbnRO
YW1lQ29sbGVjdGlvbjo6bm9kZU1hdGNoZXNJZklkQXR0cmlidXRlTWF0Y2godGhpcykgPyBnZXRJ
ZEF0dHJpYnV0ZSgpIDogbnVsbEF0b207CiAgICAgICAgIGlmICghb2xkTmFtZS5pc0VtcHR5KCkg
JiYgb2xkTmFtZSAhPSBpZCkKLSAgICAgICAgICAgIHRvSFRNTERvY3VtZW50KG93bmVyRG9jdW1l
bnQpLT5kb2N1bWVudE5hbWVkSXRlbU1hcCgpLnJlbW92ZShvbGROYW1lLmltcGwoKSwgdGhpcyk7
CisgICAgICAgICAgICBkb2N1bWVudC0+ZG9jdW1lbnROYW1lZEl0ZW1NYXAoKS5yZW1vdmUob2xk
TmFtZS5pbXBsKCksIHRoaXMpOwogICAgICAgICBpZiAoIW5ld05hbWUuaXNFbXB0eSgpICYmIG5l
d05hbWUgIT0gaWQpCi0gICAgICAgICAgICB0b0hUTUxEb2N1bWVudChvd25lckRvY3VtZW50KS0+
ZG9jdW1lbnROYW1lZEl0ZW1NYXAoKS5hZGQobmV3TmFtZS5pbXBsKCksIHRoaXMpOworICAgICAg
ICAgICAgZG9jdW1lbnQtPmRvY3VtZW50TmFtZWRJdGVtTWFwKCkuYWRkKG5ld05hbWUuaW1wbCgp
LCB0aGlzKTsKICAgICB9CiB9CiAKQEAgLTI2NzUsMTAgKzI3MDQsMTcgQEAgaW5saW5lIHZvaWQg
RWxlbWVudDo6dXBkYXRlSWQoY29uc3QgQXRvbQogICAgIGlmIChvbGRJZCA9PSBuZXdJZCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgdXBkYXRlSWQodHJlZVNjb3BlKCksIG9sZElkLCBuZXdJZCwg
VXBkYXRlSFRNTERvY3VtZW50TmFtZWRJdGVtTWFwc09ubHlJZkRpZmZlcnNGcm9tTmFtZUF0dHJp
YnV0ZSk7CisgICAgdXBkYXRlSWRGb3JUcmVlU2NvcGUodHJlZVNjb3BlKCksIG9sZElkLCBuZXdJ
ZCk7CisKKyAgICBpZiAoIWluRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIERvY3Vt
ZW50KiBodG1sRG9jdW1lbnQgPSBkb2N1bWVudCgpOworICAgIGlmICghaHRtbERvY3VtZW50LT5p
c0hUTUxEb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisgICAgdXBkYXRlSWRGb3JEb2N1bWVu
dCh0b0hUTUxEb2N1bWVudChodG1sRG9jdW1lbnQpLCBvbGRJZCwgbmV3SWQsIFVwZGF0ZUhUTUxE
b2N1bWVudE5hbWVkSXRlbU1hcHNPbmx5SWZEaWZmZXJzRnJvbU5hbWVBdHRyaWJ1dGUpOwogfQog
Ci12b2lkIEVsZW1lbnQ6OnVwZGF0ZUlkKFRyZWVTY29wZSogc2NvcGUsIGNvbnN0IEF0b21pY1N0
cmluZyYgb2xkSWQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3SWQsIEhUTUxEb2N1bWVudE5hbWVk
SXRlbU1hcHNVcGRhdGluZ0NvbmRpdGlvbiBjb25kaXRpb24pCit2b2lkIEVsZW1lbnQ6OnVwZGF0
ZUlkRm9yVHJlZVNjb3BlKFRyZWVTY29wZSogc2NvcGUsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xk
SWQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3SWQpCiB7CiAgICAgQVNTRVJUKGlzSW5UcmVlU2Nv
cGUoKSk7CiAgICAgQVNTRVJUKG9sZElkICE9IG5ld0lkKTsKQEAgLTI2ODcsMjggKzI3MjMsMjcg
QEAgdm9pZCBFbGVtZW50Ojp1cGRhdGVJZChUcmVlU2NvcGUqIHNjb3BlLAogICAgICAgICBzY29w
ZS0+cmVtb3ZlRWxlbWVudEJ5SWQob2xkSWQsIHRoaXMpOwogICAgIGlmICghbmV3SWQuaXNFbXB0
eSgpKQogICAgICAgICBzY29wZS0+YWRkRWxlbWVudEJ5SWQobmV3SWQsIHRoaXMpOworfQogCi0g
ICAgaWYgKCFpbkRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIERvY3VtZW50KiBv
d25lckRvY3VtZW50ID0gZG9jdW1lbnQoKTsKLSAgICBpZiAoIW93bmVyRG9jdW1lbnQtPmlzSFRN
TERvY3VtZW50KCkpCi0gICAgICAgIHJldHVybjsKK3ZvaWQgRWxlbWVudDo6dXBkYXRlSWRGb3JE
b2N1bWVudChIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZElk
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lkLCBIVE1MRG9jdW1lbnROYW1lZEl0ZW1NYXBzVXBk
YXRpbmdDb25kaXRpb24gY29uZGl0aW9uKQoreworICAgIEFTU0VSVChpbkRvY3VtZW50KCkpOwor
ICAgIEFTU0VSVChvbGRJZCAhPSBuZXdJZCk7CiAKICAgICBpZiAoV2luZG93TmFtZUNvbGxlY3Rp
b246Om5vZGVNYXRjaGVzSWZJZEF0dHJpYnV0ZU1hdGNoKHRoaXMpKSB7CiAgICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSA9IGNvbmRpdGlvbiA9PSBVcGRhdGVIVE1MRG9jdW1lbnROYW1l
ZEl0ZW1NYXBzT25seUlmRGlmZmVyc0Zyb21OYW1lQXR0cmlidXRlICYmIFdpbmRvd05hbWVDb2xs
ZWN0aW9uOjpub2RlTWF0Y2hlc0lmTmFtZUF0dHJpYnV0ZU1hdGNoKHRoaXMpID8gZ2V0TmFtZUF0
dHJpYnV0ZSgpIDogbnVsbEF0b207CiAgICAgICAgIGlmICghb2xkSWQuaXNFbXB0eSgpICYmIG9s
ZElkICE9IG5hbWUpCi0gICAgICAgICAgICB0b0hUTUxEb2N1bWVudChvd25lckRvY3VtZW50KS0+
d2luZG93TmFtZWRJdGVtTWFwKCkucmVtb3ZlKG9sZElkLmltcGwoKSwgdGhpcyk7CisgICAgICAg
ICAgICBkb2N1bWVudC0+d2luZG93TmFtZWRJdGVtTWFwKCkucmVtb3ZlKG9sZElkLmltcGwoKSwg
dGhpcyk7CiAgICAgICAgIGlmICghbmV3SWQuaXNFbXB0eSgpICYmIG5ld0lkICE9IG5hbWUpCi0g
ICAgICAgICAgICB0b0hUTUxEb2N1bWVudChvd25lckRvY3VtZW50KS0+d2luZG93TmFtZWRJdGVt
TWFwKCkuYWRkKG5ld0lkLmltcGwoKSwgdGhpcyk7CisgICAgICAgICAgICBkb2N1bWVudC0+d2lu
ZG93TmFtZWRJdGVtTWFwKCkuYWRkKG5ld0lkLmltcGwoKSwgdGhpcyk7CiAgICAgfQogCiAgICAg
aWYgKERvY3VtZW50TmFtZUNvbGxlY3Rpb246Om5vZGVNYXRjaGVzSWZJZEF0dHJpYnV0ZU1hdGNo
KHRoaXMpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGNvbmRpdGlvbiA9
PSBVcGRhdGVIVE1MRG9jdW1lbnROYW1lZEl0ZW1NYXBzT25seUlmRGlmZmVyc0Zyb21OYW1lQXR0
cmlidXRlICYmIERvY3VtZW50TmFtZUNvbGxlY3Rpb246Om5vZGVNYXRjaGVzSWZOYW1lQXR0cmli
dXRlTWF0Y2godGhpcykgPyBnZXROYW1lQXR0cmlidXRlKCkgOiBudWxsQXRvbTsKICAgICAgICAg
aWYgKCFvbGRJZC5pc0VtcHR5KCkgJiYgb2xkSWQgIT0gbmFtZSkKLSAgICAgICAgICAgIHRvSFRN
TERvY3VtZW50KG93bmVyRG9jdW1lbnQpLT5kb2N1bWVudE5hbWVkSXRlbU1hcCgpLnJlbW92ZShv
bGRJZC5pbXBsKCksIHRoaXMpOworICAgICAgICAgICAgZG9jdW1lbnQtPmRvY3VtZW50TmFtZWRJ
dGVtTWFwKCkucmVtb3ZlKG9sZElkLmltcGwoKSwgdGhpcyk7CiAgICAgICAgIGlmICghbmV3SWQu
aXNFbXB0eSgpICYmIG5ld0lkICE9IG5hbWUpCi0gICAgICAgICAgICB0b0hUTUxEb2N1bWVudChv
d25lckRvY3VtZW50KS0+ZG9jdW1lbnROYW1lZEl0ZW1NYXAoKS5hZGQobmV3SWQuaW1wbCgpLCB0
aGlzKTsKKyAgICAgICAgICAgIGRvY3VtZW50LT5kb2N1bWVudE5hbWVkSXRlbU1hcCgpLmFkZChu
ZXdJZC5pbXBsKCksIHRoaXMpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCShy
ZXZpc2lvbiAxNTAxMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIGNsYXNzIERPTVRva2VuTGlzdDsKIGNsYXNzIEVsZW1l
bnQ7CiBjbGFzcyBFbGVtZW50UmFyZURhdGE7CiBjbGFzcyBFbGVtZW50U2hhZG93OworY2xhc3Mg
SFRNTERvY3VtZW50OwogY2xhc3MgU2hhcmVhYmxlRWxlbWVudERhdGE7CiBjbGFzcyBJbnRTaXpl
OwogY2xhc3MgTG9jYWxlOwpAQCAtNjc0LDExICs2NzUsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHN5bmNocm9uaXplQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKICAgICB2
b2lkIHN5bmNocm9uaXplQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lKSBj
b25zdDsKIAorICAgIHZvaWQgdXBkYXRlTmFtZShjb25zdCBBdG9taWNTdHJpbmcmIG9sZE5hbWUs
IGNvbnN0IEF0b21pY1N0cmluZyYgbmV3TmFtZSk7CisgICAgdm9pZCB1cGRhdGVOYW1lRm9yVHJl
ZVNjb3BlKFRyZWVTY29wZSosIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkTmFtZSwgY29uc3QgQXRv
bWljU3RyaW5nJiBuZXdOYW1lKTsKKyAgICB2b2lkIHVwZGF0ZU5hbWVGb3JEb2N1bWVudChIVE1M
RG9jdW1lbnQqLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZE5hbWUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmV3TmFtZSk7CiAgICAgdm9pZCB1cGRhdGVJZChjb25zdCBBdG9taWNTdHJpbmcmIG9sZElk
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lkKTsKKyAgICB2b2lkIHVwZGF0ZUlkRm9yVHJlZVNj
b3BlKFRyZWVTY29wZSosIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkSWQsIGNvbnN0IEF0b21pY1N0
cmluZyYgbmV3SWQpOwogICAgIGVudW0gSFRNTERvY3VtZW50TmFtZWRJdGVtTWFwc1VwZGF0aW5n
Q29uZGl0aW9uIHsgQWx3YXlzVXBkYXRlSFRNTERvY3VtZW50TmFtZWRJdGVtTWFwcywgVXBkYXRl
SFRNTERvY3VtZW50TmFtZWRJdGVtTWFwc09ubHlJZkRpZmZlcnNGcm9tTmFtZUF0dHJpYnV0ZSB9
OwotICAgIHZvaWQgdXBkYXRlSWQoVHJlZVNjb3BlKiwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRJ
ZCwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdJZCwgSFRNTERvY3VtZW50TmFtZWRJdGVtTWFwc1Vw
ZGF0aW5nQ29uZGl0aW9uKTsKLSAgICB2b2lkIHVwZGF0ZU5hbWUoY29uc3QgQXRvbWljU3RyaW5n
JiBvbGROYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld05hbWUpOwotICAgIHZvaWQgdXBkYXRl
TmFtZShUcmVlU2NvcGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZE5hbWUsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmV3TmFtZSk7CisgICAgdm9pZCB1cGRhdGVJZEZvckRvY3VtZW50KEhUTUxEb2N1
bWVudCosIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkSWQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3
SWQsIEhUTUxEb2N1bWVudE5hbWVkSXRlbU1hcHNVcGRhdGluZ0NvbmRpdGlvbik7CiAgICAgdm9p
ZCB1cGRhdGVMYWJlbChUcmVlU2NvcGUqLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZEZvckF0dHJp
YnV0ZVZhbHVlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0ZvckF0dHJpYnV0ZVZhbHVlKTsKIAog
ICAgIHZvaWQgc2Nyb2xsQnlVbml0cyhpbnQgdW5pdHMsIFNjcm9sbEdyYW51bGFyaXR5KTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAJKHJldmlzaW9uIDE1MDEyOSkKKysr
IFNvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTgsMjEgKzk4LDIzIEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gU2VsZWN0b3JEYXRhTGlzdDo6cXUK
ICAgICByZXR1cm4gdG9FbGVtZW50KHJlc3VsdC5maXJzdCgpLmdldCgpKTsKIH0KIAotYm9vbCBT
ZWxlY3RvckRhdGFMaXN0OjpjYW5Vc2VJZExvb2t1cChOb2RlKiByb290Tm9kZSkgY29uc3QKK2Nv
bnN0IENTU1NlbGVjdG9yKiBTZWxlY3RvckRhdGFMaXN0OjpjYW5Vc2VJZExvb2t1cChOb2RlKiBy
b290Tm9kZSkgY29uc3QKIHsKICAgICAvLyBXZSBuZWVkIHRvIHJldHVybiB0aGUgbWF0Y2hlcyBp
biBkb2N1bWVudCBvcmRlci4gVG8gdXNlIGlkIGxvb2t1cCB3aGlsZSB0aGVyZSBpcyBwb3NzaWJs
aXR5IG9mIG11bHRpcGxlIG1hdGNoZXMKICAgICAvLyB3ZSB3b3VsZCBuZWVkIHRvIHNvcnQgdGhl
IHJlc3VsdHMuIEZvciBub3csIGp1c3QgdHJhdmVyc2UgdGhlIGRvY3VtZW50IGluIHRoYXQgY2Fz
ZS4KICAgICBpZiAobV9zZWxlY3RvcnMuc2l6ZSgpICE9IDEpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAobV9zZWxlY3RvcnNbMF0uc2VsZWN0b3ItPm1fbWF0Y2ggIT0gQ1NTU2VsZWN0
b3I6OklkKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAwOwogICAgIGlm
ICghcm9vdE5vZGUtPmluRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gMDsKICAgICBpZiAocm9vdE5vZGUtPmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHJvb3ROb2RlLT5kb2N1bWVudCgpLT5j
b250YWluc011bHRpcGxlRWxlbWVudHNXaXRoSWQobV9zZWxlY3RvcnNbMF0uc2VsZWN0b3ItPnZh
bHVlKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgICAg
IHJldHVybiAwOworICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gbV9zZWxl
Y3RvcnNbMF0uc2VsZWN0b3I7IHNlbGVjdG9yOyBzZWxlY3RvciA9IHNlbGVjdG9yLT50YWdIaXN0
b3J5KCkpIHsKKyAgICAgICAgaWYgKHNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJ
ZCkKKyAgICAgICAgICAgIHJldHVybiBzZWxlY3RvcjsKKyAgICAgICAgaWYgKHNlbGVjdG9yLT5y
ZWxhdGlvbigpICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKKyAgICAgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGlzVHJlZVNj
b3BlUm9vdChOb2RlKiBub2RlKQpAQCAtMTI0LDEwICsxMjYsMjQgQEAgc3RhdGljIGlubGluZSBi
b29sIGlzVHJlZVNjb3BlUm9vdChOb2RlKgogdGVtcGxhdGUgPGJvb2wgZmlyc3RNYXRjaE9ubHk+
CiB2b2lkIFNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGUoTm9kZSogcm9vdE5vZGUsIFZlY3RvcjxS
ZWZQdHI8Tm9kZT4gPiYgbWF0Y2hlZEVsZW1lbnRzKSBjb25zdAogewotICAgIGlmIChjYW5Vc2VJ
ZExvb2t1cChyb290Tm9kZSkpIHsKKyAgICBpZiAoY29uc3QgQ1NTU2VsZWN0b3IqIGlkU2VsZWN0
b3IgPSBjYW5Vc2VJZExvb2t1cChyb290Tm9kZSkpIHsKICAgICAgICAgQVNTRVJUKG1fc2VsZWN0
b3JzLnNpemUoKSA9PSAxKTsKLSAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0g
bV9zZWxlY3RvcnNbMF0uc2VsZWN0b3I7Ci0gICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSByb290
Tm9kZS0+dHJlZVNjb3BlKCktPmdldEVsZW1lbnRCeUlkKHNlbGVjdG9yLT52YWx1ZSgpKTsKKyAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nIGlkVG9NYXRjaCA9IGlkU2VsZWN0b3ItPnZhbHVlKCk7
CisgICAgICAgIGlmIChVTkxJS0VMWShyb290Tm9kZS0+dHJlZVNjb3BlKCktPmNvbnRhaW5zTXVs
dGlwbGVFbGVtZW50c1dpdGhJZChpZFRvTWF0Y2gpKSkgeworICAgICAgICAgICAgY29uc3QgVmVj
dG9yPEVsZW1lbnQqPiogZWxlbWVudHMgPSByb290Tm9kZS0+dHJlZVNjb3BlKCktPmdldEFsbEVs
ZW1lbnRzQnlJZChpZFRvTWF0Y2gpOworICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRzKTsKKyAg
ICAgICAgICAgIHNpemVfdCBjb3VudCA9IGVsZW1lbnRzLT5zaXplKCk7CisgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICBFbGVt
ZW50KiBlbGVtZW50ID0gZWxlbWVudHMtPmF0KGkpOworICAgICAgICAgICAgICAgIGlmIChzZWxl
Y3Rvck1hdGNoZXMobV9zZWxlY3RvcnNbMF0sIGVsZW1lbnQsIHJvb3ROb2RlKSkgeworICAgICAg
ICAgICAgICAgICAgICBtYXRjaGVkRWxlbWVudHMuYXBwZW5kKGVsZW1lbnQpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoZmlyc3RNYXRjaE9ubHkpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSByb290Tm9kZS0+dHJl
ZVNjb3BlKCktPmdldEVsZW1lbnRCeUlkKGlkVG9NYXRjaCk7CiAgICAgICAgIGlmICghZWxlbWVu
dCB8fCAhKGlzVHJlZVNjb3BlUm9vdChyb290Tm9kZSkgfHwgZWxlbWVudC0+aXNEZXNjZW5kYW50
T2Yocm9vdE5vZGUpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKHNlbGVjdG9y
TWF0Y2hlcyhtX3NlbGVjdG9yc1swXSwgZWxlbWVudCwgcm9vdE5vZGUpKQpJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vU2VsZWN0b3JRdWVyeS5oCShyZXZpc2lvbiAxNTAxMjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vU2VsZWN0b3JRdWVyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHBy
aXZhdGU6CiAgICAgfTsKIAogICAgIGJvb2wgc2VsZWN0b3JNYXRjaGVzKGNvbnN0IFNlbGVjdG9y
RGF0YSYsIEVsZW1lbnQqLCBjb25zdCBOb2RlKikgY29uc3Q7Ci0gICAgYm9vbCBjYW5Vc2VJZExv
b2t1cChOb2RlKiByb290Tm9kZSkgY29uc3Q7CisgICAgY29uc3QgQ1NTU2VsZWN0b3IqIGNhblVz
ZUlkTG9va3VwKE5vZGUqIHJvb3ROb2RlKSBjb25zdDsKICAgICB0ZW1wbGF0ZSA8Ym9vbCBmaXJz
dE1hdGNoT25seT4KICAgICB2b2lkIGV4ZWN1dGUoTm9kZSogcm9vdE5vZGUsIFZlY3RvcjxSZWZQ
dHI8Tm9kZT4gPiYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3Bl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAkocmV2
aXNpb24gMTUwMTI5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0OSw2ICsxNDksMTUgQEAgRWxlbWVudCogVHJlZVNjb3BlOjpnZXRFbGVt
ZW50QnlJZChjb25zdAogICAgIHJldHVybiBtX2VsZW1lbnRzQnlJZC0+Z2V0RWxlbWVudEJ5SWQo
ZWxlbWVudElkLmltcGwoKSwgdGhpcyk7CiB9CiAKK2NvbnN0IFZlY3RvcjxFbGVtZW50Kj4qIFRy
ZWVTY29wZTo6Z2V0QWxsRWxlbWVudHNCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYgZWxlbWVudElk
KSBjb25zdAoreworICAgIGlmIChlbGVtZW50SWQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
MDsKKyAgICBpZiAoIW1fZWxlbWVudHNCeUlkKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gbV9lbGVtZW50c0J5SWQtPmdldEFsbEVsZW1lbnRzQnlJZChlbGVtZW50SWQuaW1wbCgpLCB0
aGlzKTsKK30KKwogdm9pZCBUcmVlU2NvcGU6OmFkZEVsZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0
cmluZyYgZWxlbWVudElkLCBFbGVtZW50KiBlbGVtZW50KQogewogICAgIGlmICghbV9lbGVtZW50
c0J5SWQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5oCShyZXZpc2lvbiAxNTAxMjkpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2
LDcgQEAgcHVibGljOgogCiAgICAgTm9kZSogZm9jdXNlZE5vZGUoKTsKICAgICBFbGVtZW50KiBn
ZXRFbGVtZW50QnlJZChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKKyAgICBjb25zdCBWZWN0
b3I8RWxlbWVudCo+KiBnZXRBbGxFbGVtZW50c0J5SWQoY29uc3QgQXRvbWljU3RyaW5nJikgY29u
c3Q7CiAgICAgYm9vbCBoYXNFbGVtZW50V2l0aElkKEF0b21pY1N0cmluZ0ltcGwqIGlkKSBjb25z
dDsKICAgICBib29sIGNvbnRhaW5zTXVsdGlwbGVFbGVtZW50c1dpdGhJZChjb25zdCBBdG9taWNT
dHJpbmcmIGlkKSBjb25zdDsKICAgICB2b2lkIGFkZEVsZW1lbnRCeUlkKGNvbnN0IEF0b21pY1N0
cmluZyYgZWxlbWVudElkLCBFbGVtZW50Kik7Cg==
</data>
<flag name="review"
          id="223296"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>