<?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>82681</bug_id>
          
          <creation_ts>2012-03-29 17:28:30 -0700</creation_ts>
          <short_desc>NodeRareData::m_treeScope should be lazily retrieved</short_desc>
          <delta_ts>2013-01-10 09:09:44 -0800</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>WONTFIX</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>
          <dependson>82701</dependson>
          <blocked>87034</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hajime Morrita">morrita</reporter>
          <assigned_to name="Hajime Morrita">morrita</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>dominicc</cc>
    
    <cc>rniwa</cc>
    
    <cc>shinyak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>591750</commentid>
    <comment_count>0</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-03-29 17:28:30 -0700</bug_when>
    <thetext>Currently we set it when a node is inserted into a tree.
But it lets all nodes behind shadow to have NodeRareData. 
That means it no longer &quot;rare&quot;. 
In reality, NodeRareData::m_treeScope is a kind of a cash. So we don&apos;t maintain it eagerly.

It can be lazily retrieved. This is an alternative of Bug 59816
which aimed to make TreeScope management saner and performant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591928</commentid>
    <comment_count>1</comment_count>
      <attachid>134738</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-03-30 00:27:39 -0700</bug_when>
    <thetext>Created attachment 134738
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>784991</commentid>
    <comment_count>2</comment_count>
      <attachid>134738</attachid>
    <who name="Elliott Sprehn">esprehn</who>
    <bug_when>2012-12-06 09:50:35 -0800</bug_when>
    <thetext>Comment on attachment 134738
WIP

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

&gt; Source/WebCore/dom/Node.cpp:446
&gt; +TreeScope* Node::treeScope(TreeScopeStoreCacheType scoreCache) const

If we took this approach I think you&apos;d need some kind of DirtyTreeScope bit field in node otherwise you&apos;re going to cause rare data on every node we call treeScope() on, ex. during event dispatch, and you&apos;re also going to introduce this tree walk for treeScope() into all existing pages even ones that don&apos;t use Shadow DOM so treeScope gets much slower.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>785626</commentid>
    <comment_count>3</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2012-12-06 21:44:56 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; If we took this approach I think you&apos;d need some kind of DirtyTreeScope bit field in node otherwise you&apos;re going to cause rare data on every node we call treeScope() on, ex. during event dispatch, and you&apos;re also going to introduce this tree walk for treeScope() into all existing pages even ones that don&apos;t use Shadow DOM so treeScope gets much slower.

Yes, this approach looks inferior than replacing document pointer.
We need to inspect each treeScope() call to decide which (slow-clean or fast-caching) we should use.
That isn&apos;t what we want. 

This bug was just a result of exploration for attacking slow-treeScope problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804309</commentid>
    <comment_count>4</comment_count>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2013-01-10 06:09:14 -0800</bug_when>
    <thetext>Since r138735 m_treeScope is in Node. So I believe this is fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>804426</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-01-10 09:09:44 -0800</bug_when>
    <thetext>It&apos;s probably better to close this with WONTFIX since this bug no longer applies to ToT WebKit.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134738</attachid>
            <date>2012-03-30 00:27:39 -0700</date>
            <delta_ts>2012-12-06 09:50:35 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-82681-20120330162738.patch</filename>
            <type>text/plain</type>
            <size>26255</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyNjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5j
cHAKaW5kZXggNDgzMDQ5ZGY5NGE2ODNiOThiZTllM2I4MWM4YzJlMGE3MDMzNjkzNi4uMmU4M2Rh
YWNjNjYwNjMxYWViY2ZhZWJjZjU1OTg5N2RkYmVkNDM3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250
YWluZXJOb2RlLmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiTXV0YXRp
b25FdmVudC5oIgorI2luY2x1ZGUgIlRyZWVTY29wZUFkb3B0ZXIuaCIgLy8gc2hvdWxkIGJlIHJl
bW92ZWQgTm9kZURvY3VtZW50TW92ZXIuCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckJveC5oIgpAQCAtMTA0LDcg
KzEwNSw3IEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6dGFrZUFsbENoaWxkcmVuRnJvbShDb250YWlu
ZXJOb2RlKiBvbGRQYXJlbnQpCiAgICAgICAgIC8vIEZJWE1FOiBUb2dldGhlciB3aXRoIGFkb3B0
Tm9kZSBhYm92ZSwgdGhlIHRyZWUgc2NvcGUgbWlnaHQgZ2V0IHVwZGF0ZWQgcmVjdXJzaXZlbHkg
dHdpY2UKICAgICAgICAgLy8gKGlmIHRoZSBkb2N1bWVudCBjaGFuZ2VkIG9yIG9sZFBhcmVudCB3
YXMgaW4gYSBzaGFkb3cgdHJlZSwgQU5EICp0aGlzIGlzIGluIGEgc2hhZG93IHRyZWUpLgogICAg
ICAgICAvLyBDYW4gd2UgZG8gYmV0dGVyPwotICAgICAgICB0cmVlU2NvcGUoKS0+YWRvcHRJZk5l
ZWRlZChjaGlsZC5nZXQoKSk7CisgICAgICAgIGRvY3VtZW50KCktPm1vdmVJZk5lZWRlZChjaGls
ZC5nZXQoKSk7CiAgICAgICAgIGlmIChhdHRhY2hlZCgpICYmICFjaGlsZC0+YXR0YWNoZWQoKSkK
ICAgICAgICAgICAgIGNoaWxkLT5hdHRhY2goKTsKICAgICB9CkBAIC0xNzIsNyArMTczLDcgQEAg
Ym9vbCBDb250YWluZXJOb2RlOjppbnNlcnRCZWZvcmUoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGls
ZCwgTm9kZSogcmVmQ2hpbGQsIEV4Y2UKICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
Ojp3aWxsSW5zZXJ0RE9NTm9kZShkb2N1bWVudCgpLCBjaGlsZCwgdGhpcyk7CiAjZW5kaWYKIAot
ICAgICAgICB0cmVlU2NvcGUoKS0+YWRvcHRJZk5lZWRlZChjaGlsZCk7CisgICAgICAgIGRvY3Vt
ZW50KCktPm1vdmVJZk5lZWRlZChjaGlsZCk7CiAKICAgICAgICAgaW5zZXJ0QmVmb3JlQ29tbW9u
KG5leHQuZ2V0KCksIGNoaWxkKTsKIApAQCAtMjk1LDcgKzI5Niw3IEBAIGJvb2wgQ29udGFpbmVy
Tm9kZTo6cmVwbGFjZUNoaWxkKFBhc3NSZWZQdHI8Tm9kZT4gbmV3Q2hpbGQsIE5vZGUqIG9sZENo
aWxkLCBFeGNlCiAgICAgICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbEluc2VydERP
TU5vZGUoZG9jdW1lbnQoKSwgY2hpbGQsIHRoaXMpOwogI2VuZGlmCiAKLSAgICAgICAgdHJlZVNj
b3BlKCktPmFkb3B0SWZOZWVkZWQoY2hpbGQpOworICAgICAgICBkb2N1bWVudCgpLT5tb3ZlSWZO
ZWVkZWQoY2hpbGQpOwogCiAgICAgICAgIC8vIEFkZCBjaGlsZCBiZWZvcmUgIm5leHQiLgogICAg
ICAgICBmb3JiaWRFdmVudERpc3BhdGNoKCk7CkBAIC00NDAsNyArNDQxLDcgQEAgdm9pZCBDb250
YWluZXJOb2RlOjpyZW1vdmVCZXR3ZWVuKE5vZGUqIHByZXZpb3VzQ2hpbGQsIE5vZGUqIG5leHRD
aGlsZCwgTm9kZSogb2wKICAgICBvbGRDaGlsZC0+c2V0TmV4dFNpYmxpbmcoMCk7CiAgICAgb2xk
Q2hpbGQtPnNldFBhcmVudCgwKTsKIAotICAgIGRvY3VtZW50KCktPmFkb3B0SWZOZWVkZWQob2xk
Q2hpbGQpOworICAgIGRvY3VtZW50KCktPm1vdmVJZk5lZWRlZChvbGRDaGlsZCk7CiAKICAgICBh
bGxvd0V2ZW50RGlzcGF0Y2goKTsKIH0KQEAgLTQ5NSw3ICs0OTYsNyBAQCB2b2lkIENvbnRhaW5l
ck5vZGU6OnJlbW92ZUNoaWxkcmVuKCkKICAgICAgICAgbi0+c2V0UHJldmlvdXNTaWJsaW5nKDAp
OwogICAgICAgICBuLT5zZXROZXh0U2libGluZygwKTsKICAgICAgICAgbi0+c2V0UGFyZW50KDAp
OwotICAgICAgICBkb2N1bWVudCgpLT5hZG9wdElmTmVlZGVkKG4uZ2V0KCkpOworICAgICAgICBk
b2N1bWVudCgpLT5tb3ZlSWZOZWVkZWQobi5nZXQoKSk7CiAKICAgICAgICAgbV9maXJzdENoaWxk
ID0gbmV4dDsKICAgICAgICAgaWYgKG4gPT0gbV9sYXN0Q2hpbGQpCkBAIC01NzYsNyArNTc3LDcg
QEAgYm9vbCBDb250YWluZXJOb2RlOjphcHBlbmRDaGlsZChQYXNzUmVmUHRyPE5vZGU+IG5ld0No
aWxkLCBFeGNlcHRpb25Db2RlJiBlYywgYm8KICAgICAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3aWxsSW5zZXJ0RE9NTm9kZShkb2N1bWVudCgpLCBjaGlsZCwgdGhpcyk7CiAjZW5kaWYK
IAotICAgICAgICB0cmVlU2NvcGUoKS0+YWRvcHRJZk5lZWRlZChjaGlsZCk7CisgICAgICAgIGRv
Y3VtZW50KCktPm1vdmVJZk5lZWRlZChjaGlsZCk7CiAKICAgICAgICAgLy8gQXBwZW5kIGNoaWxk
IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKICAgICAgICAgZm9yYmlkRXZlbnREaXNwYXRjaCgpOwpA
QCAtNTk5LDcgKzYwMCw3IEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6cGFyc2VyQWRkQ2hpbGQoUGFz
c1JlZlB0cjxOb2RlPiBuZXdDaGlsZCkKICAgICBOb2RlKiBsYXN0ID0gbV9sYXN0Q2hpbGQ7CiAg
ICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNob3VsZCB0YWtlIGEgUGFzc1JlZlB0ci4KICAgICBh
cHBlbmRDaGlsZFRvQ29udGFpbmVyKG5ld0NoaWxkLmdldCgpLCB0aGlzKTsKLSAgICB0cmVlU2Nv
cGUoKS0+YWRvcHRJZk5lZWRlZChuZXdDaGlsZC5nZXQoKSk7CisgICAgZG9jdW1lbnQoKS0+bW92
ZUlmTmVlZGVkKG5ld0NoaWxkLmdldCgpKTsKICAgICAKICAgICBhbGxvd0V2ZW50RGlzcGF0Y2go
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggODY3YThkNmE3MTIwZTQ3ZGU2MmQxYzlk
MTgwZWVhZjQ5YjU2MmQ4NS4uMDUwYzBmZDM3MmNjNzEzN2MzOGUyNWZjY2UwNWM4OTFjMmZmNjE3
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSAi
RG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiVHJlZVNjb3BlQWRvcHRl
ci5oIiAvLyBzaG91bGQgYmUgcmVtb3ZlZCBOb2RlRG9jdW1lbnRNb3Zlci4KICNpbmNsdWRlICJE
b2N1bWVudFR5cGUuaCIKICNpbmNsdWRlICJFZGl0aW5nVGV4dC5oIgogI2luY2x1ZGUgIkVkaXRv
ci5oIgpAQCAtNDY2LDYgKzQ2Nyw3IEBAIERvY3VtZW50OjpEb2N1bWVudChGcmFtZSogZnJhbWUs
IGNvbnN0IEtVUkwmIHVybCwgYm9vbCBpc1hIVE1MLCBib29sIGlzSFRNTCkKICAgICAsIG1fd3Jp
dGVSZWN1cnNpb25EZXB0aCgwKQogICAgICwgbV93aGVlbEV2ZW50SGFuZGxlckNvdW50KDApCiAg
ICAgLCBtX3RvdWNoRXZlbnRIYW5kbGVyQ291bnQoMCkKKyAgICAsIG1fbnVtTm9kZUxpc3RDYWNo
ZXMoMCkKICAgICAsIG1fcGVuZGluZ1Rhc2tzVGltZXIodGhpcywgJkRvY3VtZW50OjpwZW5kaW5n
VGFza3NUaW1lckZpcmVkKQogewogICAgIG1fZG9jdW1lbnQgPSB0aGlzOwpAQCAtNTU0LDcgKzU1
Niw2IEBAIERvY3VtZW50Ojp+RG9jdW1lbnQoKQogICAgIEFTU0VSVCghbV9zYXZlZFJlbmRlcmVy
KTsKICAgICBBU1NFUlQobV9yYW5nZXMuaXNFbXB0eSgpKTsKICAgICBBU1NFUlQoIW1fc3R5bGVS
ZWNhbGNUaW1lci5pc0FjdGl2ZSgpKTsKLSAgICBBU1NFUlQoIW1fcGFyZW50VHJlZVNjb3BlKTsK
ICAgICBBU1NFUlQoIW1fZ3VhcmRSZWZDb3VudCk7CiAKICAgICBtX3NjcmlwdFJ1bm5lci5jbGVh
cigpOwpAQCAtNzU1LDcgKzc1Niw3IEBAIHZvaWQgRG9jdW1lbnQ6OnNldERvY1R5cGUoUGFzc1Jl
ZlB0cjxEb2N1bWVudFR5cGU+IGRvY1R5cGUpCiAgICAgQVNTRVJUKCFtX2RvY1R5cGUgfHwgIWRv
Y1R5cGUpOwogICAgIG1fZG9jVHlwZSA9IGRvY1R5cGU7CiAgICAgaWYgKG1fZG9jVHlwZSkKLSAg
ICAgICAgdGhpcy0+YWRvcHRJZk5lZWRlZChtX2RvY1R5cGUuZ2V0KCkpOworICAgICAgICB0aGlz
LT5tb3ZlSWZOZWVkZWQobV9kb2NUeXBlLmdldCgpKTsKICAgICAvLyBEb2N0eXBlIGFmZmVjdHMg
dGhlIGludGVycHJldGF0aW9uIG9mIHRoZSBzdHlsZXNoZWV0cy4KICAgICBjbGVhclN0eWxlU2Vs
ZWN0b3IoKTsKIH0KQEAgLTk3OSw3ICs5ODAsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IERvY3VtZW50
OjphZG9wdE5vZGUoUGFzc1JlZlB0cjxOb2RlPiBzb3VyY2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ICAgICAgICAgICAgc291cmNlLT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKHNvdXJjZS5nZXQo
KSwgZWMpOwogICAgIH0KIAotICAgIHRoaXMtPmFkb3B0SWZOZWVkZWQoc291cmNlLmdldCgpKTsK
KyAgICB0aGlzLT5tb3ZlSWZOZWVkZWQoc291cmNlLmdldCgpKTsKIAogICAgIHJldHVybiBzb3Vy
Y2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IGQyNTVlOTdlMGMyMThjODQxOTIxZmMwODFj
YTVmZmZlYmJhOWMzY2EuLmNiZmUwMWRiYWVlYmIxMjQ3NTNiNWNjOWFiZDViY2NhNzgwYTlkNDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0yNjQsNiArMjY0LDEwIEBAIHB1YmxpYzoKICAgICBF
bGVtZW50KiBnZXRFbGVtZW50QnlBY2Nlc3NLZXkoY29uc3QgU3RyaW5nJiBrZXkpOwogICAgIHZv
aWQgaW52YWxpZGF0ZUFjY2Vzc0tleU1hcCgpOwogCisgICAgdm9pZCBhZGROb2RlTGlzdENhY2hl
KCkgeyArK21fbnVtTm9kZUxpc3RDYWNoZXM7IH0KKyAgICB2b2lkIHJlbW92ZU5vZGVMaXN0Q2Fj
aGUoKSB7IEFTU0VSVChtX251bU5vZGVMaXN0Q2FjaGVzID4gMCk7IC0tbV9udW1Ob2RlTGlzdENh
Y2hlczsgfQorICAgIGJvb2wgaGFzTm9kZUxpc3RDYWNoZXMoKSBjb25zdCB7IHJldHVybiBtX251
bU5vZGVMaXN0Q2FjaGVzOyB9CisKICAgICAvLyBET00gbWV0aG9kcyAmIGF0dHJpYnV0ZXMgZm9y
IERvY3VtZW50CiAKICAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGFib3J0KTsK
QEAgLTQxMyw2ICs0MTcsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIFBhc3NSZWZQdHI8Tm9k
ZT4gYWRvcHROb2RlKFBhc3NSZWZQdHI8Tm9kZT4gc291cmNlLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgdm9pZCBtb3ZlSWZOZWVkZWQoTm9kZSopOwogCiAgICAgSFRNTENvbGxlY3Rpb24qIGltYWdl
cygpOwogICAgIEhUTUxDb2xsZWN0aW9uKiBlbWJlZHMoKTsKQEAgLTE0NjUsNiArMTQ3MCw3IEBA
IHByaXZhdGU6CiAgICAgCiAgICAgdW5zaWduZWQgbV93aGVlbEV2ZW50SGFuZGxlckNvdW50Owog
ICAgIHVuc2lnbmVkIG1fdG91Y2hFdmVudEhhbmRsZXJDb3VudDsKKyAgICB1bnNpZ25lZCBtX251
bU5vZGVMaXN0Q2FjaGVzOwogCiAjaWYgRU5BQkxFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FKQog
ICAgIFJlZlB0cjxTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI+IG1fc2NyaXB0ZWRBbmltYXRp
b25Db250cm9sbGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDNjZGJkZjExMWEzZGI0MGE1
NDZhNzg1MGU4NmRhMDc4MDI0MTBkMzguLjk4NDUwMTMzMWM1ZTg2MTM4ZjFiZDQ5NzkwMDYxZjZh
YmNmNjZlZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTE1OTAsNyArMTU5MCw3IEBAIHZv
aWQgRWxlbWVudDo6Ymx1cigpCiB7CiAgICAgY2FuY2VsRm9jdXNBcHBlYXJhbmNlVXBkYXRlKCk7
CiAgICAgRG9jdW1lbnQqIGRvYyA9IGRvY3VtZW50KCk7Ci0gICAgaWYgKHRyZWVTY29wZSgpLT5m
b2N1c2VkTm9kZSgpID09IHRoaXMpIHsKKyAgICBpZiAodHJlZVNjb3BlKE5vZGU6OlRyZWVTY29w
ZURvbnRTdG9yZUNhY2hlKS0+Zm9jdXNlZE5vZGUoKSA9PSB0aGlzKSB7CiAgICAgICAgIGlmIChk
b2MtPmZyYW1lKCkpCiAgICAgICAgICAgICBkb2MtPmZyYW1lKCktPnBhZ2UoKS0+Zm9jdXNDb250
cm9sbGVyKCktPnNldEZvY3VzZWROb2RlKDAsIGRvYy0+ZnJhbWUoKSk7CiAgICAgICAgIGVsc2UK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAppbmRleCAwNDA3NTI3YjIwZDk5NzBmMDBkNWIxMjQ3YTc5YjVlYzVhYWFk
ZmE1Li5mZWQxMjdlMmMyYzY0ZmIwZTI5ZGRiNzVlMzZmZWQ2MmUwMmM3MmU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuY3BwCkBAIC00MzQsMzAgKzQzNCwzOCBAQCB2b2lkIE5vZGU6OnNldERvY3VtZW50KERvY3Vt
ZW50KiBkb2N1bWVudCkKICAgICBtX2RvY3VtZW50ID0gZG9jdW1lbnQ7CiB9CiAKLU5vZGVSYXJl
RGF0YSogTm9kZTo6c2V0VHJlZVNjb3BlKFRyZWVTY29wZSogc2NvcGUpCitzdGF0aWMgaW5saW5l
IFRyZWVTY29wZSogZmluZFRyZWVTY29wZUZvcihOb2RlKiBub2RlKQogewotICAgIGlmICghc2Nv
cGUpIHsKLSAgICAgICAgaWYgKGhhc1JhcmVEYXRhKCkpIHsKLSAgICAgICAgICAgIE5vZGVSYXJl
RGF0YSogZGF0YSA9IHJhcmVEYXRhKCk7Ci0gICAgICAgICAgICBkYXRhLT5zZXRUcmVlU2NvcGUo
MCk7Ci0gICAgICAgICAgICByZXR1cm4gZGF0YTsKLSAgICAgICAgfQorICAgIHdoaWxlIChub2Rl
LT5wYXJlbnROb2RlKCkpCisgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlR3VhcmFudGVl
ZEhvc3RGcmVlKCk7CisgICAgaWYgKG5vZGUtPmlzU2hhZG93Um9vdCgpKQorICAgICAgICByZXR1
cm4gdG9TaGFkb3dSb290KG5vZGUpOworICAgIHJldHVybiBub2RlLT5kb2N1bWVudCgpOworfQog
Ci0gICAgICAgIHJldHVybiAwOworVHJlZVNjb3BlKiBOb2RlOjp0cmVlU2NvcGUoVHJlZVNjb3Bl
U3RvcmVDYWNoZVR5cGUgc2NvcmVDYWNoZSkgY29uc3QKK3sKKyAgICBpZiAoaXNEb2N1bWVudE5v
ZGUoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PERvY3VtZW50Kj4oY29uc3RfY2FzdDxO
b2RlKj4odGhpcykpOworICAgIGlmIChpc1NoYWRvd1Jvb3QoKSkKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFNoYWRvd1Jvb3QqPihjb25zdF9jYXN0PE5vZGUqPih0aGlzKSk7CisKKyAgICBO
b2RlUmFyZURhdGEqIGRhdGEgPSAwOworICAgIAorICAgIGlmIChoYXNSYXJlRGF0YSgpKSB7Cisg
ICAgICAgIGRhdGEgPSByYXJlRGF0YSgpOworICAgICAgICBpZiAoZGF0YS0+dHJlZVNjb3BlQ2Fj
aGUoKSkKKyAgICAgICAgICAgIHJldHVybiBkYXRhLT50cmVlU2NvcGVDYWNoZSgpOwogICAgIH0K
IAotICAgIE5vZGVSYXJlRGF0YSogZGF0YSA9IGVuc3VyZVJhcmVEYXRhKCk7Ci0gICAgZGF0YS0+
c2V0VHJlZVNjb3BlKHNjb3BlKTsKLSAgICByZXR1cm4gZGF0YTsKLX0KKyAgICBUcmVlU2NvcGUq
IGZvdW5kID0gZmluZFRyZWVTY29wZUZvcihjb25zdF9jYXN0PE5vZGUqPih0aGlzKSk7CisgICAg
aWYgKHNjb3JlQ2FjaGUgPT0gVHJlZVNjb3BlU3RvcmVDYWNoZSkgeworICAgICAgICBpZiAoIWRh
dGEpCisgICAgICAgICAgICBkYXRhID0gY29uc3RfY2FzdDxOb2RlKj4odGhpcyktPmVuc3VyZVJh
cmVEYXRhKCk7CisgICAgICAgIGRhdGEtPnNldFRyZWVTY29wZUNhY2hlKGZvdW5kKTsKKyAgICB9
CiAKLVRyZWVTY29wZSogTm9kZTo6dHJlZVNjb3BlKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTog
VXNpbmcgbV9kb2N1bWVudCBkaXJlY3RseSBpcyBub3QgZ29vZCAtPiBzZWUgY29tbWVudCB3aXRo
IGRvY3VtZW50KCkgaW4gdGhlIGhlYWRlciBmaWxlLgotICAgIGlmICghaGFzUmFyZURhdGEoKSkK
LSAgICAgICAgcmV0dXJuIG1fZG9jdW1lbnQ7Ci0gICAgVHJlZVNjb3BlKiBzY29wZSA9IHJhcmVE
YXRhKCktPnRyZWVTY29wZSgpOwotICAgIHJldHVybiBzY29wZSA/IHNjb3BlIDogbV9kb2N1bWVu
dDsKKyAgICByZXR1cm4gZm91bmQ7CiB9CiAKIE5vZGVSYXJlRGF0YSogTm9kZTo6cmFyZURhdGEo
KSBjb25zdApAQCAtNDg2LDggKzQ5NCw4IEBAIE93blB0cjxOb2RlUmFyZURhdGE+IE5vZGU6OmNy
ZWF0ZVJhcmVEYXRhKCkKIHZvaWQgTm9kZTo6Y2xlYXJSYXJlRGF0YSgpCiB7CiAgICAgQVNTRVJU
KGhhc1JhcmVEYXRhKCkpOwotICAgIGlmICh0cmVlU2NvcGUoKSAmJiByYXJlRGF0YSgpLT5ub2Rl
TGlzdHMoKSkKLSAgICAgICAgdHJlZVNjb3BlKCktPnJlbW92ZU5vZGVMaXN0Q2FjaGUoKTsKKyAg
ICBpZiAoZG9jdW1lbnQoKSAmJiByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSkKKyAgICAgICAgZG9j
dW1lbnQoKS0+cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOwogCiAjaWYgRU5BQkxFKE1VVEFUSU9OX09C
U0VSVkVSUykKICAgICBBU1NFUlQoIXRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgp
IHx8IHRyYW5zaWVudE11dGF0aW9uT2JzZXJ2ZXJSZWdpc3RyeSgpLT5pc0VtcHR5KCkpOwpAQCAt
OTU0LDcgKzk2Miw3IEBAIHN0YXRpYyB2b2lkIHJlbW92ZU5vZGVMaXN0Q2FjaGVJZlBvc3NpYmxl
KE5vZGUqIG5vZGUsIE5vZGVSYXJlRGF0YSogZGF0YSkKICAgICBpZiAoIWRhdGEtPm5vZGVMaXN0
cygpLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBkYXRhLT5jbGVhck5vZGVMaXN0
cygpOwotICAgIG5vZGUtPnRyZWVTY29wZSgpLT5yZW1vdmVOb2RlTGlzdENhY2hlKCk7CisgICAg
bm9kZS0+ZG9jdW1lbnQoKS0+cmVtb3ZlTm9kZUxpc3RDYWNoZSgpOwogfQogCiAvLyBGSVhNRTog
TW92ZSB0aGlzIGZ1bmN0aW9uIHRvIERvY3VtZW50CkBAIC05OTUsNyArMTAwMyw3IEBAIHZvaWQg
Tm9kZTo6aW52YWxpZGF0ZU5vZGVMaXN0c0NhY2hlQWZ0ZXJBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmIGF0CiAgICAgICAgICYmIGF0dHJOYW1lICE9IGZvckF0dHIpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmICghdHJlZVNjb3BlKCktPmhhc05vZGVMaXN0Q2FjaGVzKCkp
CisgICAgaWYgKCFkb2N1bWVudCgpLT5oYXNOb2RlTGlzdENhY2hlcygpKQogICAgICAgICByZXR1
cm47CiAKICAgICBmb3IgKE5vZGUqIG5vZGUgPSB0aGlzOyBub2RlOyBub2RlID0gbm9kZS0+cGFy
ZW50Tm9kZSgpKSB7CkBAIC0xMDE1LDcgKzEwMjMsNyBAQCB2b2lkIE5vZGU6OmludmFsaWRhdGVO
b2RlTGlzdHNDYWNoZUFmdGVyQ2hpbGRyZW5DaGFuZ2VkKCkKICAgICBpZiAoaGFzUmFyZURhdGEo
KSkKICAgICAgICAgcmFyZURhdGEoKS0+Y2xlYXJDaGlsZE5vZGVMaXN0Q2FjaGUoKTsKIAotICAg
IGlmICghdHJlZVNjb3BlKCktPmhhc05vZGVMaXN0Q2FjaGVzKCkpCisgICAgaWYgKCFkb2N1bWVu
dCgpLT5oYXNOb2RlTGlzdENhY2hlcygpKQogICAgICAgICByZXR1cm47CiAgICAgZm9yIChOb2Rl
KiBub2RlID0gdGhpczsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgewogICAgICAg
ICBpZiAoIW5vZGUtPmhhc1JhcmVEYXRhKCkpCkBAIC0xMzQwLDYgKzEzNDgsOCBAQCB2b2lkIE5v
ZGU6OmF0dGFjaCgpCiAKIHZvaWQgTm9kZTo6d2lsbFJlbW92ZSgpCiB7CisgICAgaWYgKGhhc1Jh
cmVEYXRhKCkpCisgICAgICAgIHJhcmVEYXRhKCktPmNsZWFyVHJlZVNjb3BlQ2FjaGUoKTsKIH0K
IAogdm9pZCBOb2RlOjpkZXRhY2goKQpAQCAtMjk0OSw4ICsyOTU5LDggQEAgdm9pZCBOb2RlUmFy
ZURhdGE6OmNyZWF0ZU5vZGVMaXN0cyhOb2RlKiBub2RlKQogewogICAgIEFTU0VSVChub2RlKTsK
ICAgICBzZXROb2RlTGlzdHMoTm9kZUxpc3RzTm9kZURhdGE6OmNyZWF0ZSgpKTsKLSAgICBpZiAo
VHJlZVNjb3BlKiB0cmVlU2NvcGUgPSBub2RlLT50cmVlU2NvcGUoKSkKLSAgICAgICAgdHJlZVNj
b3BlLT5hZGROb2RlTGlzdENhY2hlKCk7CisgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IG5v
ZGUtPmRvY3VtZW50KCkpCisgICAgICAgIGRvY3VtZW50LT5hZGROb2RlTGlzdENhY2hlKCk7CiB9
CiAKIHZvaWQgTm9kZVJhcmVEYXRhOjpjbGVhckNoaWxkTm9kZUxpc3RDYWNoZSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
aAppbmRleCBhYjViOTlhNDg0MzI0MjhiNmUzNzhkMTY4MjI4ZjMyZmRmNzdiNDM5Li5kN2FkYmFi
YmMxOWZlZDcyZTM1YzM4ODRkZTVjZjQwNWZiZGYxMzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTQwMiw3
ICs0MDIsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9kb2N1bWVudDsKICAgICB9CiAK
LSAgICBUcmVlU2NvcGUqIHRyZWVTY29wZSgpIGNvbnN0OworICAgIGVudW0gVHJlZVNjb3BlU3Rv
cmVDYWNoZVR5cGUgeworICAgICAgICBUcmVlU2NvcGVTdG9yZUNhY2hlLAorICAgICAgICBUcmVl
U2NvcGVEb250U3RvcmVDYWNoZSwKKyAgICB9OworCisgICAgVHJlZVNjb3BlKiB0cmVlU2NvcGUo
VHJlZVNjb3BlU3RvcmVDYWNoZVR5cGUgPSBUcmVlU2NvcGVTdG9yZUNhY2hlKSBjb25zdDsKIAog
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIG5vZGUgaXMgYXNzb2NpYXRlZCB3aXRoIGEgZG9j
dW1lbnQgYW5kIGlzIGluIGl0cyBhc3NvY2lhdGVkIGRvY3VtZW50J3MKICAgICAvLyBub2RlIHRy
ZWUsIGZhbHNlIG90aGVyd2lzZS4KQEAgLTcxNCw5ICs3MTksNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCBjbGVhckhhc0N1c3RvbVN0eWxlRm9yUmVuZGVyZXIoKSB7IGNsZWFyRmxhZyhIYXNDdXN0
b21TdHlsZUZvclJlbmRlcmVyRmxhZyk7IH0KIAogcHJpdmF0ZToKLSAgICAvLyBUaGVzZSBBUEkg
c2hvdWxkIGJlIG9ubHkgdXNlZCBmb3IgYSB0cmVlIHNjb3BlIG1pZ3JhdGlvbi4KLSAgICAvLyBz
ZXRUcmVlU2NvcGUoKSByZXR1cm5zIE5vZGVSYXJlRGF0YSB0byBzYXZlIGV4dHJhIG5vZGVSYXJl
RGF0YSgpIGludm9jYXRpb25zIG9uIHRoZSBjYWxsZXIgc2l0ZS4KLSAgICBOb2RlUmFyZURhdGEq
IHNldFRyZWVTY29wZShUcmVlU2NvcGUqKTsKKyAgICAvLyBzZXREb2N1bWVudCgpIHNob3VsZCBi
ZSBvbmx5IHVzZWQgZm9yIGEgZG9jdW1lbnQgbWlncmF0aW9uLgogICAgIHZvaWQgc2V0RG9jdW1l
bnQoRG9jdW1lbnQqKTsKIAogICAgIGVudW0gRWRpdGFibGVMZXZlbCB7IEVkaXRhYmxlLCBSaWNo
bHlFZGl0YWJsZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0
YS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCmluZGV4IGZjMTdmMmQyZjZh
OTExMjNhMTYwODUyNjM0NjdiODg2YWNhYzkzY2UuLmE1MWUxNDc0YWFmNGE5Nzc2MTA1YmE5MWMw
NjU0NjYzYmMyOWZkODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURh
dGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJhcmVEYXRhLmgKQEAgLTkwLDcgKzkw
LDcgQEAgY2xhc3MgTm9kZVJhcmVEYXRhIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShOb2Rl
UmFyZURhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzogICAgCiAgICAgTm9k
ZVJhcmVEYXRhKCkKLSAgICAgICAgOiBtX3RyZWVTY29wZSgwKQorICAgICAgICA6IG1fdHJlZVNj
b3BlQ2FjaGUoMCkKICAgICAgICAgLCBtX2NoaWxkTm9kZUxpc3QoMCkKICAgICAgICAgLCBtX3Rh
YkluZGV4KDApCiAgICAgICAgICwgbV90YWJJbmRleFdhc1NldEV4cGxpY2l0bHkoZmFsc2UpCkBA
IC0xMTksOSArMTE5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJhcmVEYXRhTWFwKCku
Z2V0KG5vZGUpOwogICAgIH0KIAotICAgIFRyZWVTY29wZSogdHJlZVNjb3BlKCkgY29uc3QgeyBy
ZXR1cm4gbV90cmVlU2NvcGU7IH0KLSAgICB2b2lkIHNldFRyZWVTY29wZShUcmVlU2NvcGUqIHRy
ZWVTY29wZSkgeyBtX3RyZWVTY29wZSA9IHRyZWVTY29wZTsgfQotICAgIAorICAgIFRyZWVTY29w
ZSogdHJlZVNjb3BlQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3RyZWVTY29wZUNhY2hlOyB9Cisg
ICAgdm9pZCBzZXRUcmVlU2NvcGVDYWNoZShUcmVlU2NvcGUqIHRyZWVTY29wZSkgeyBtX3RyZWVT
Y29wZUNhY2hlID0gdHJlZVNjb3BlOyB9CisgICAgdm9pZCBjbGVhclRyZWVTY29wZUNhY2hlKCkg
eyBtX3RyZWVTY29wZUNhY2hlID0gMDsgfQorCiAgICAgdm9pZCBjbGVhck5vZGVMaXN0cygpIHsg
bV9ub2RlTGlzdHMuY2xlYXIoKTsgfQogICAgIHZvaWQgc2V0Tm9kZUxpc3RzKFBhc3NPd25QdHI8
Tm9kZUxpc3RzTm9kZURhdGE+IGxpc3RzKSB7IG1fbm9kZUxpc3RzID0gbGlzdHM7IH0KICAgICBO
b2RlTGlzdHNOb2RlRGF0YSogbm9kZUxpc3RzKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlTGlzdHMu
Z2V0KCk7IH0KQEAgLTI2MCw3ICsyNjEsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZv
aWQgY3JlYXRlTm9kZUxpc3RzKE5vZGUqKTsKIAotICAgIFRyZWVTY29wZSogbV90cmVlU2NvcGU7
CisgICAgVHJlZVNjb3BlKiBtX3RyZWVTY29wZUNhY2hlOwogICAgIE93blB0cjxOb2RlTGlzdHNO
b2RlRGF0YT4gbV9ub2RlTGlzdHM7CiAgICAgQ2hpbGROb2RlTGlzdCogbV9jaGlsZE5vZGVMaXN0
OwogICAgIE93blB0cjxFdmVudFRhcmdldERhdGE+IG1fZXZlbnRUYXJnZXREYXRhOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1NoYWRvd1Jvb3QuY3BwCmluZGV4IGRhMjE1ZWRjYzNlMTA3MWM3MDJkOTdkMDU3ZDRjMjUy
OWYyOWFkNGEuLjA1NDViYzg4NjljZDljYWI1NmFmY2MwOGZjYWMyY2UzMmFiNDllYTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2hhZG93Um9vdC5jcHAKQEAgLTUxLDEyICs1MSw2IEBAIFNoYWRvd1Jvb3Q6OlNo
YWRvd1Jvb3QoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgICwgbV9pbnNlcnRpb25Qb2ludEFzc2ln
bmVkVG8oMCkKIHsKICAgICBBU1NFUlQoZG9jdW1lbnQpOwotICAgIAotICAgIC8vIEFzc3VtZSBk
b2N1bWVudCBhcyBwYXJlbnQgc2NvcGUuCi0gICAgc2V0UGFyZW50VHJlZVNjb3BlKGRvY3VtZW50
KTsKLSAgICAvLyBTaGFkb3cgdHJlZSBzY29wZXMgaGF2ZSB0aGUgc2NvcGUgcG9pbnRlciBwb2lu
dCB0byB0aGVtc2VsdmVzLgotICAgIC8vIFRoaXMgd2F5LCBkaXJlY3QgY2hpbGRyZW4gd2lsbCBy
ZWNlaXZlIHRoZSBjb3JyZWN0IHNjb3BlIHBvaW50ZXIuCi0gICAgZW5zdXJlUmFyZURhdGEoKS0+
c2V0VHJlZVNjb3BlKHRoaXMpOwogfQogCiBTaGFkb3dSb290Ojp+U2hhZG93Um9vdCgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1NoYWRvd1Jvb3QuaAppbmRleCA1OGI0OGM2NGI1Yjg5NTNhOWEyYTI5YWQ4ZmJiNGVlM2M0
MTA0YzJiLi4xMjkzNzc1MTAyZTM3ZmExZGMxMzVmZDcxNmQzOWIwNDUyY2RlYTg0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TaGFkb3dSb290LmgKQEAgLTEyMyw3ICsxMjMsNyBAQCBpbmxpbmUgYm9vbCBTaGFkb3dS
b290Ojppc1VzZWRGb3JSZW5kZXJpbmcoKSBjb25zdAogCiBpbmxpbmUgRWxlbWVudCogU2hhZG93
Um9vdDo6YWN0aXZlRWxlbWVudCgpIGNvbnN0CiB7Ci0gICAgaWYgKE5vZGUqIG5vZGUgPSB0cmVl
U2NvcGUoKS0+Zm9jdXNlZE5vZGUoKSkKKyAgICBpZiAoTm9kZSogbm9kZSA9IGNvbnN0X2Nhc3Q8
U2hhZG93Um9vdCo+KHRoaXMpLT5mb2N1c2VkTm9kZSgpKQogICAgICAgICByZXR1cm4gbm9kZS0+
aXNFbGVtZW50Tm9kZSgpID8gdG9FbGVtZW50KG5vZGUpIDogMDsKICAgICByZXR1cm4gMDsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dUcmVlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TaGFkb3dUcmVlLmNwcAppbmRleCA2ZmJlNzI5NWQ2M2EzOTgxYWE1ZTgwZDI0
Y2MwMDNlNzdhYzg2YTY4Li4zOTk5NjBhNmVlYTRiZmUxMzZlNDExNmVkMTgzNWYyZGYzYjBiYmM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93VHJlZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1RyZWUuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVk
ZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKICNp
bmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiVHJlZVNjb3BlQWRvcHRlci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTExNiw3ICsxMTcsNyBAQCB2b2lkIFNoYWRvd1RyZWU6OnJlbW92
ZUFsbFNoYWRvd1Jvb3RzKCkKICAgICAgICAgb2xkUm9vdC0+c2V0U2hhZG93SG9zdCgwKTsKICAg
ICAgICAgb2xkUm9vdC0+c2V0UHJldigwKTsKICAgICAgICAgb2xkUm9vdC0+c2V0TmV4dCgwKTsK
LSAgICAgICAgc2hhZG93SG9zdC0+ZG9jdW1lbnQoKS0+YWRvcHRJZk5lZWRlZChvbGRSb290Lmdl
dCgpKTsKKyAgICAgICAgc2hhZG93SG9zdC0+ZG9jdW1lbnQoKS0+bW92ZUlmTmVlZGVkKG9sZFJv
b3QuZ2V0KCkpOwogICAgICAgICBpZiAob2xkUm9vdC0+aW5Eb2N1bWVudCgpKQogICAgICAgICAg
ICAgb2xkUm9vdC0+cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogICAgICAgICBlbHNlCkBAIC0xNjIs
MTIgKzE2Myw2IEBAIHZvaWQgU2hhZG93VHJlZTo6d2lsbFJlbW92ZSgpCiAgICAgICAgIHJvb3Rz
W2ldLT53aWxsUmVtb3ZlKCk7CiB9CiAKLXZvaWQgU2hhZG93VHJlZTo6c2V0UGFyZW50VHJlZVNj
b3BlKFRyZWVTY29wZSogc2NvcGUpCi17Ci0gICAgZm9yIChTaGFkb3dSb290KiByb290ID0geW91
bmdlc3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290LT5vbGRlclNoYWRvd1Jvb3QoKSkK
LSAgICAgICAgcm9vdC0+c2V0UGFyZW50VHJlZVNjb3BlKHNjb3BlKTsKLX0KLQogdm9pZCBTaGFk
b3dUcmVlOjphdHRhY2goKQogewogICAgIC8vIENoaWxkcmVuIG9mIG1fc2VsZWN0b3IgaXMgcG9w
dWxhdGVkIGxhemlseSBpbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Ry
ZWUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dUcmVlLmgKaW5kZXggZTljMmNjYWRiMGNj
ZjdjZDE1NTBmNDBkMzIwODlhZjBmNzM2MjhhMy4uYzgxZTQ4MmJiMzQ0MGJkMzZiMjViMDQ3MjMz
ZDgxYjhkMDcyY2M4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1RyZWUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93VHJlZS5oCkBAIC02Myw4ICs2Myw2IEBA
IHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZWRGcm9tVHJlZShib29sIGRlZXApOwogICAgIHZvaWQg
d2lsbFJlbW92ZSgpOwogCi0gICAgdm9pZCBzZXRQYXJlbnRUcmVlU2NvcGUoVHJlZVNjb3BlKik7
Ci0KICAgICB2b2lkIGF0dGFjaCgpOwogICAgIHZvaWQgZGV0YWNoKCk7CiAgICAgdm9pZCByZWF0
dGFjaCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAppbmRleCAzNzZmYmMzYmY3NDQxYjU5N2Rk
OWFlOGE2NDlkZjI1ZTc5MTAxYzM3Li4xZGIyZTc4NzA0OWRlZTA2NzNlZDBiYzhhZTg2NGUyNTM3
MGU2ODFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcApAQCAtNDYsOCArNDYsNiBAQCB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBUcmVlU2NvcGU6OlRyZWVTY29wZShDb250YWluZXJO
b2RlKiByb290Tm9kZSkKICAgICA6IG1fcm9vdE5vZGUocm9vdE5vZGUpCi0gICAgLCBtX3BhcmVu
dFRyZWVTY29wZSgwKQotICAgICwgbV9udW1Ob2RlTGlzdENhY2hlcygwKQogewogICAgIEFTU0VS
VChyb290Tm9kZSk7CiB9CkBAIC02MiwxNiArNjAsNiBAQCB2b2lkIFRyZWVTY29wZTo6ZGVzdHJv
eVRyZWVTY29wZURhdGEoKQogICAgIG1faW1hZ2VNYXBzQnlOYW1lLmNsZWFyKCk7CiB9CiAKLXZv
aWQgVHJlZVNjb3BlOjpzZXRQYXJlbnRUcmVlU2NvcGUoVHJlZVNjb3BlKiBuZXdQYXJlbnRTY29w
ZSkKLXsKLSAgICAvLyBBIGRvY3VtZW50IG5vZGUgY2Fubm90IGJlIHJlLXBhcmVudGVkLgotICAg
IEFTU0VSVCghcm9vdE5vZGUoKS0+aXNEb2N1bWVudE5vZGUoKSk7Ci0gICAgLy8gRXZlcnkgc2Nv
cGUgb3RoZXIgdGhhbiBkb2N1bWVudCBuZWVkcyBhIHBhcmVudCBzY29wZS4KLSAgICBBU1NFUlQo
bmV3UGFyZW50U2NvcGUpOwotCi0gICAgbV9wYXJlbnRUcmVlU2NvcGUgPSBuZXdQYXJlbnRTY29w
ZTsKLX0KLQogRWxlbWVudCogVHJlZVNjb3BlOjpnZXRFbGVtZW50QnlJZChjb25zdCBBdG9taWNT
dHJpbmcmIGVsZW1lbnRJZCkgY29uc3QKIHsKICAgICBpZiAoZWxlbWVudElkLmlzRW1wdHkoKSkK
QEAgLTE0NCwxNyArMTMyLDYgQEAgYm9vbCBUcmVlU2NvcGU6OmFwcGx5QXV0aG9yU2hlZXRzKCkg
Y29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBUcmVlU2NvcGU6OmFkb3B0SWZOZWVk
ZWQoTm9kZSogbm9kZSkKLXsKLSAgICBBU1NFUlQodGhpcyk7Ci0gICAgQVNTRVJUKG5vZGUpOwot
ICAgIEFTU0VSVCghbm9kZS0+aXNEb2N1bWVudE5vZGUoKSk7Ci0gICAgQVNTRVJUKCFub2RlLT5t
X2RlbGV0aW9uSGFzQmVndW4pOwotICAgIFRyZWVTY29wZUFkb3B0ZXIgYWRvcHRlcihub2RlLCB0
aGlzKTsKLSAgICBpZiAoYWRvcHRlci5uZWVkc1Njb3BlQ2hhbmdlKCkpCi0gICAgICAgIGFkb3B0
ZXIuZXhlY3V0ZSgpOwotfQotCiBzdGF0aWMgTm9kZSogZm9jdXNlZEZyYW1lT3duZXJFbGVtZW50
KEZyYW1lKiBmb2N1c2VkRnJhbWUsIEZyYW1lKiBjdXJyZW50RnJhbWUpCiB7CiAgICAgZm9yICg7
IGZvY3VzZWRGcmFtZTsgZm9jdXNlZEZyYW1lID0gZm9jdXNlZEZyYW1lLT50cmVlKCktPnBhcmVu
dCgpKSB7CkBAIC0xNzMsMTEgKzE1MCwxMSBAQCBOb2RlKiBUcmVlU2NvcGU6OmZvY3VzZWROb2Rl
KCkKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgVHJlZVNjb3BlKiB0
cmVlU2NvcGUgPSBub2RlLT50cmVlU2NvcGUoKTsKKyAgICBUcmVlU2NvcGUqIHRyZWVTY29wZSA9
IG5vZGUtPnRyZWVTY29wZShOb2RlOjpUcmVlU2NvcGVEb250U3RvcmVDYWNoZSk7CiAKICAgICB3
aGlsZSAodHJlZVNjb3BlICE9IHRoaXMgJiYgdHJlZVNjb3BlICE9IGRvY3VtZW50KSB7CiAgICAg
ICAgIG5vZGUgPSB0cmVlU2NvcGUtPnJvb3ROb2RlKCktPnNoYWRvd0hvc3QoKTsKLSAgICAgICAg
dHJlZVNjb3BlID0gbm9kZS0+dHJlZVNjb3BlKCk7CisgICAgICAgIHRyZWVTY29wZSA9IG5vZGUt
PnRyZWVTY29wZShOb2RlOjpUcmVlU2NvcGVEb250U3RvcmVDYWNoZSk7CiAgICAgfQogICAgIGlm
ICh0aGlzICE9IHRyZWVTY29wZSkKICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3Bl
LmgKaW5kZXggNTcxOWY5NWQwZWVhMmI4NmUzMzFlYjgwNmU0MTJhYjJiZWM2YzRmNS4uOTcyMGRj
YWU1MjIyYjE5MjFlOWFhODY4M2JmNWFmNTU0MmY0Yjk2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1RyZWVTY29wZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUu
aApAQCAtNDQsOSArNDQsNiBAQCBjbGFzcyBUcmVlU2NvcGUgewogICAgIGZyaWVuZCBjbGFzcyBE
b2N1bWVudDsKIAogcHVibGljOgotICAgIFRyZWVTY29wZSogcGFyZW50VHJlZVNjb3BlKCkgY29u
c3QgeyByZXR1cm4gbV9wYXJlbnRUcmVlU2NvcGU7IH0KLSAgICB2b2lkIHNldFBhcmVudFRyZWVT
Y29wZShUcmVlU2NvcGUqKTsKLQogICAgIE5vZGUqIGZvY3VzZWROb2RlKCk7CiAgICAgRWxlbWVu
dCogZ2V0RWxlbWVudEJ5SWQoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CiAgICAgYm9vbCBo
YXNFbGVtZW50V2l0aElkKEF0b21pY1N0cmluZ0ltcGwqIGlkKSBjb25zdDsKQEAgLTU4LDkgKzU1
LDYgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlSW1hZ2VNYXAoSFRNTE1hcEVsZW1lbnQqKTsK
ICAgICBIVE1MTWFwRWxlbWVudCogZ2V0SW1hZ2VNYXAoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0
OwogCi0gICAgdm9pZCBhZGROb2RlTGlzdENhY2hlKCkgeyArK21fbnVtTm9kZUxpc3RDYWNoZXM7
IH0KLSAgICB2b2lkIHJlbW92ZU5vZGVMaXN0Q2FjaGUoKSB7IEFTU0VSVChtX251bU5vZGVMaXN0
Q2FjaGVzID4gMCk7IC0tbV9udW1Ob2RlTGlzdENhY2hlczsgfQotICAgIGJvb2wgaGFzTm9kZUxp
c3RDYWNoZXMoKSBjb25zdCB7IHJldHVybiBtX251bU5vZGVMaXN0Q2FjaGVzOyB9CiAgICAgYm9v
bCBpc1NoYWRvd1Jvb3QoKSBjb25zdDsKIAogICAgIC8vIEZpbmQgZmlyc3QgYW5jaG9yIHdpdGgg
dGhlIGdpdmVuIG5hbWUuCkBAIC03Miw5ICs2Niw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
Ym9vbCBhcHBseUF1dGhvclNoZWV0cygpIGNvbnN0OwogCi0gICAgLy8gVXNlZCBieSB0aGUgYmFz
aWMgRE9NIG11dGF0aW9uIG1ldGhvZHMgKGUuZy4sIGFwcGVuZENoaWxkKCkpLgotICAgIHZvaWQg
YWRvcHRJZk5lZWRlZChOb2RlKik7Ci0KICAgICBDb250YWluZXJOb2RlKiByb290Tm9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcm9vdE5vZGU7IH0KIAogcHJvdGVjdGVkOgpAQCAtODUsMTIgKzc2LDkg
QEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIENvbnRhaW5lck5vZGUqIG1fcm9vdE5vZGU7
Ci0gICAgVHJlZVNjb3BlKiBtX3BhcmVudFRyZWVTY29wZTsKIAogICAgIERvY3VtZW50T3JkZXJl
ZE1hcCBtX2VsZW1lbnRzQnlJZDsKICAgICBEb2N1bWVudE9yZGVyZWRNYXAgbV9pbWFnZU1hcHNC
eU5hbWU7Ci0KLSAgICB1bnNpZ25lZCBtX251bU5vZGVMaXN0Q2FjaGVzOwogfTsKIAogaW5saW5l
IGJvb2wgVHJlZVNjb3BlOjpoYXNFbGVtZW50V2l0aElkKEF0b21pY1N0cmluZ0ltcGwqIGlkKSBj
b25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZUFkb3B0ZXIuY3BwCmluZGV4IDgyZWE0Nzc0
NzgzYjViMTA3ZGJlNzE3MjZhYjJlYWY4NjcxYmY1OTEuLjFjYTFjZTk2MDNlZDgzZTRiY2EzMDIx
N2ZiZmE0YTRiNzEyMWU5MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2Nv
cGVBZG9wdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5j
cHAKQEAgLTM3LDU1ICszNywyOCBAQCBzdGF0aWMgaW5saW5lIFNoYWRvd1RyZWUqIHNoYWRvd1Ry
ZWVGb3IoTm9kZSogbm9kZSkKICAgICByZXR1cm4gbm9kZS0+aXNFbGVtZW50Tm9kZSgpID8gdG9F
bGVtZW50KG5vZGUpLT5zaGFkb3dUcmVlKCkgOiAwOwogfQogCi12b2lkIFRyZWVTY29wZUFkb3B0
ZXI6Om1vdmVUcmVlVG9OZXdTY29wZShOb2RlKiByb290KSBjb25zdAordm9pZCBUcmVlU2NvcGVB
ZG9wdGVyOjptb3ZlVHJlZVRvTmV3RG9jdW1lbnQoTm9kZSogcm9vdCkgY29uc3QKIHsKLSAgICBB
U1NFUlQobmVlZHNTY29wZUNoYW5nZSgpKTsKLQotICAgIC8vIElmIGFuIGVsZW1lbnQgaXMgbW92
ZWQgZnJvbSBhIGRvY3VtZW50IGFuZCB0aGVuIGV2ZW50dWFsbHkgYmFjayBhZ2FpbiB0aGUgY29s
bGVjdGlvbiBjYWNoZSBmb3IKLSAgICAvLyB0aGF0IGVsZW1lbnQgbWF5IGNvbnRhaW4gc3RhbGUg
ZGF0YSBhcyBjaGFuZ2VzIG1hZGUgdG8gaXQgd2lsbCBoYXZlIHVwZGF0ZWQgdGhlIERPTVRyZWVW
ZXJzaW9uCi0gICAgLy8gb2YgdGhlIGRvY3VtZW50IGl0IHdhcyBtb3ZlZCB0by4gQnkgaW5jcmVh
c2luZyB0aGUgRE9NVHJlZVZlcnNpb24gb2YgdGhlIGRvbmF0aW5nIGRvY3VtZW50IGhlcmUKLSAg
ICAvLyB3ZSBlbnN1cmUgdGhhdCB0aGUgY29sbGVjdGlvbiBjYWNoZSB3aWxsIGJlIGludmFsaWRh
dGVkIGFzIG5lZWRlZCB3aGVuIHRoZSBlbGVtZW50IGlzIG1vdmVkIGJhY2suCi0gICAgRG9jdW1l
bnQqIG9sZERvY3VtZW50ID0gbV9vbGRTY29wZSA/IG1fb2xkU2NvcGUtPnJvb3ROb2RlKCktPmRv
Y3VtZW50KCkgOiAwOwotICAgIERvY3VtZW50KiBuZXdEb2N1bWVudCA9IG1fbmV3U2NvcGUtPnJv
b3ROb2RlKCktPmRvY3VtZW50KCk7Ci0gICAgYm9vbCB3aWxsTW92ZVRvTmV3RG9jdW1lbnQgPSBv
bGREb2N1bWVudCAhPSBuZXdEb2N1bWVudDsKLSAgICBpZiAob2xkRG9jdW1lbnQgJiYgd2lsbE1v
dmVUb05ld0RvY3VtZW50KQotICAgICAgICBvbGREb2N1bWVudC0+aW5jRE9NVHJlZVZlcnNpb24o
KTsKLQorICAgIGlmIChtX29sZERvY3VtZW50KQorICAgICAgICBtX29sZERvY3VtZW50LT5pbmNE
T01UcmVlVmVyc2lvbigpOwogICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUg
PSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHJvb3QpKSB7Ci0gICAgICAgIE5vZGVSYXJlRGF0YSog
cmFyZURhdGEgPSBub2RlLT5zZXRUcmVlU2NvcGUobmV3RG9jdW1lbnQgPT0gbV9uZXdTY29wZSA/
IDAgOiBtX25ld1Njb3BlKTsKKyAgICAgICAgTm9kZVJhcmVEYXRhKiByYXJlRGF0YSA9IG5vZGUt
Pmhhc1JhcmVEYXRhKCkgPyBub2RlLT5yYXJlRGF0YSgpIDogMDsKICAgICAgICAgaWYgKHJhcmVE
YXRhICYmIHJhcmVEYXRhLT5ub2RlTGlzdHMoKSkgewogICAgICAgICAgICAgcmFyZURhdGEtPm5v
ZGVMaXN0cygpLT5pbnZhbGlkYXRlQ2FjaGVzKCk7Ci0gICAgICAgICAgICBpZiAobV9vbGRTY29w
ZSkKLSAgICAgICAgICAgICAgICBtX29sZFNjb3BlLT5yZW1vdmVOb2RlTGlzdENhY2hlKCk7Ci0g
ICAgICAgICAgICBtX25ld1Njb3BlLT5hZGROb2RlTGlzdENhY2hlKCk7CisgICAgICAgICAgICBp
ZiAobV9vbGREb2N1bWVudCkKKyAgICAgICAgICAgICAgICBtX29sZERvY3VtZW50LT5yZW1vdmVO
b2RlTGlzdENhY2hlKCk7CisgICAgICAgICAgICBtX25ld0RvY3VtZW50LT5hZGROb2RlTGlzdENh
Y2hlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAod2lsbE1vdmVUb05ld0RvY3VtZW50KQot
ICAgICAgICAgICAgbW92ZU5vZGVUb05ld0RvY3VtZW50KG5vZGUsIG9sZERvY3VtZW50LCBuZXdE
b2N1bWVudCk7Ci0KICAgICAgICAgaWYgKFNoYWRvd1RyZWUqIHRyZWUgPSBzaGFkb3dUcmVlRm9y
KG5vZGUpKSB7Ci0gICAgICAgICAgICB0cmVlLT5zZXRQYXJlbnRUcmVlU2NvcGUobV9uZXdTY29w
ZSk7Ci0gICAgICAgICAgICBpZiAod2lsbE1vdmVUb05ld0RvY3VtZW50KQotICAgICAgICAgICAg
ICAgIG1vdmVTaGFkb3dUcmVlVG9OZXdEb2N1bWVudCh0cmVlLCBvbGREb2N1bWVudCwgbmV3RG9j
dW1lbnQpOworICAgICAgICAgICAgZm9yIChTaGFkb3dSb290KiByb290ID0gdHJlZS0+eW91bmdl
c3RTaGFkb3dSb290KCk7IHJvb3Q7IHJvb3QgPSByb290LT5vbGRlclNoYWRvd1Jvb3QoKSkKKyAg
ICAgICAgICAgICAgICBtb3ZlVHJlZVRvTmV3RG9jdW1lbnQocm9vdCk7CiAgICAgICAgIH0KLSAg
ICB9Ci19CiAKLXZvaWQgVHJlZVNjb3BlQWRvcHRlcjo6bW92ZVRyZWVUb05ld0RvY3VtZW50KE5v
ZGUqIHJvb3QsIERvY3VtZW50KiBvbGREb2N1bWVudCwgRG9jdW1lbnQqIG5ld0RvY3VtZW50KSBj
b25zdAotewotICAgIGZvciAoTm9kZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUgPSBub2RlLT50
cmF2ZXJzZU5leHROb2RlKHJvb3QpKSB7Ci0gICAgICAgIG1vdmVOb2RlVG9OZXdEb2N1bWVudChu
b2RlLCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOwotICAgICAgICBpZiAoU2hhZG93VHJlZSog
dHJlZSA9IHNoYWRvd1RyZWVGb3Iobm9kZSkpCi0gICAgICAgICAgICBtb3ZlU2hhZG93VHJlZVRv
TmV3RG9jdW1lbnQodHJlZSwgb2xkRG9jdW1lbnQsIG5ld0RvY3VtZW50KTsKKyAgICAgICAgbW92
ZU5vZGVUb05ld0RvY3VtZW50KG5vZGUpOwogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgVHJlZVNj
b3BlQWRvcHRlcjo6bW92ZVNoYWRvd1RyZWVUb05ld0RvY3VtZW50KFNoYWRvd1RyZWUqIHRyZWUs
IERvY3VtZW50KiBvbGREb2N1bWVudCwgRG9jdW1lbnQqIG5ld0RvY3VtZW50KSBjb25zdAotewot
ICAgIGZvciAoU2hhZG93Um9vdCogcm9vdCA9IHRyZWUtPnlvdW5nZXN0U2hhZG93Um9vdCgpOyBy
b290OyByb290ID0gcm9vdC0+b2xkZXJTaGFkb3dSb290KCkpCi0gICAgICAgIG1vdmVUcmVlVG9O
ZXdEb2N1bWVudChyb290LCBvbGREb2N1bWVudCwgbmV3RG9jdW1lbnQpOwotfQotCiAjaWZuZGVm
IE5ERUJVRwogc3RhdGljIGJvb2wgZGlkTW92ZVRvTmV3RG9jdW1lbnRXYXNDYWxsZWQgPSBmYWxz
ZTsKIHN0YXRpYyBEb2N1bWVudCogb2xkRG9jdW1lbnREaWRNb3ZlVG9OZXdEb2N1bWVudFdhc0Nh
bGxlZFdpdGggPSAwOwpAQCAtOTgsMjYgKzcxLDI2IEBAIHZvaWQgVHJlZVNjb3BlQWRvcHRlcjo6
ZW5zdXJlRGlkTW92ZVRvTmV3RG9jdW1lbnRXYXNDYWxsZWQoRG9jdW1lbnQqIG9sZERvY3VtZW50
CiB9CiAjZW5kaWYKIAotaW5saW5lIHZvaWQgVHJlZVNjb3BlQWRvcHRlcjo6bW92ZU5vZGVUb05l
d0RvY3VtZW50KE5vZGUqIG5vZGUsIERvY3VtZW50KiBvbGREb2N1bWVudCwgRG9jdW1lbnQqIG5l
d0RvY3VtZW50KSBjb25zdAoraW5saW5lIHZvaWQgVHJlZVNjb3BlQWRvcHRlcjo6bW92ZU5vZGVU
b05ld0RvY3VtZW50KE5vZGUqIG5vZGUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFub2RlLT5pbkRv
Y3VtZW50KCkgfHwgb2xkRG9jdW1lbnQgIT0gbmV3RG9jdW1lbnQpOworICAgIEFTU0VSVCghbm9k
ZS0+aW5Eb2N1bWVudCgpIHx8IG1fb2xkRG9jdW1lbnQgIT0gbV9uZXdEb2N1bWVudCk7CiAKLSAg
ICBuZXdEb2N1bWVudC0+Z3VhcmRSZWYoKTsKLSAgICBpZiAob2xkRG9jdW1lbnQpCi0gICAgICAg
IG9sZERvY3VtZW50LT5tb3ZlTm9kZUl0ZXJhdG9yc1RvTmV3RG9jdW1lbnQobm9kZSwgbmV3RG9j
dW1lbnQpOworICAgIG1fbmV3RG9jdW1lbnQtPmd1YXJkUmVmKCk7CisgICAgaWYgKG1fb2xkRG9j
dW1lbnQpCisgICAgICAgIG1fb2xkRG9jdW1lbnQtPm1vdmVOb2RlSXRlcmF0b3JzVG9OZXdEb2N1
bWVudChub2RlLCBtX25ld0RvY3VtZW50KTsKIAotICAgIG5vZGUtPnNldERvY3VtZW50KG5ld0Rv
Y3VtZW50KTsKKyAgICBub2RlLT5zZXREb2N1bWVudChtX25ld0RvY3VtZW50KTsKIAogI2lmbmRl
ZiBOREVCVUcKICAgICBkaWRNb3ZlVG9OZXdEb2N1bWVudFdhc0NhbGxlZCA9IGZhbHNlOwotICAg
IG9sZERvY3VtZW50RGlkTW92ZVRvTmV3RG9jdW1lbnRXYXNDYWxsZWRXaXRoID0gb2xkRG9jdW1l
bnQ7CisgICAgb2xkRG9jdW1lbnREaWRNb3ZlVG9OZXdEb2N1bWVudFdhc0NhbGxlZFdpdGggPSBt
X29sZERvY3VtZW50OwogI2VuZGlmCiAKLSAgICBub2RlLT5kaWRNb3ZlVG9OZXdEb2N1bWVudChv
bGREb2N1bWVudCk7CisgICAgbm9kZS0+ZGlkTW92ZVRvTmV3RG9jdW1lbnQobV9vbGREb2N1bWVu
dCk7CiAgICAgQVNTRVJUKGRpZE1vdmVUb05ld0RvY3VtZW50V2FzQ2FsbGVkKTsKICAgICAKLSAg
ICBpZiAob2xkRG9jdW1lbnQpCi0gICAgICAgIG9sZERvY3VtZW50LT5ndWFyZERlcmVmKCk7Cisg
ICAgaWYgKG1fb2xkRG9jdW1lbnQpCisgICAgICAgIG1fb2xkRG9jdW1lbnQtPmd1YXJkRGVyZWYo
KTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZUFkb3B0
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGVBZG9wdGVyLmgKaW5kZXggOTQyNTVm
NDc5ZGEzMmI1MWNkZDQ3OGQwZDkxODQ0OGFjMTQ4MmE4My4uZDI1N2IzM2RjZjNhZTM4YWVhMjY0
OGYyN2VjM2FiOWE0YjZkZmM0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1RyZWVT
Y29wZUFkb3B0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlQWRvcHRlci5o
CkBAIC0yNSw0MCArMjUsNDUgQEAKICNpZm5kZWYgVHJlZVNjb3BlQWRvcHRlcl9oCiAjZGVmaW5l
IFRyZWVTY29wZUFkb3B0ZXJfaAogCi0jaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgVHJlZVNjb3BlQWRvcHRl
ciB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgVHJlZVNjb3BlQWRvcHRlcihOb2RlKiB0b0Fkb3B0
LCBUcmVlU2NvcGUqIG5ld1Njb3BlKTsKKyAgICBleHBsaWNpdCBUcmVlU2NvcGVBZG9wdGVyKE5v
ZGUqIHRvQWRvcHQsIERvY3VtZW50KiBuZXdEb2N1bWVudCk7CiAKLSAgICB2b2lkIGV4ZWN1dGUo
KSBjb25zdCB7IG1vdmVUcmVlVG9OZXdTY29wZShtX3RvQWRvcHQpOyB9Ci0gICAgYm9vbCBuZWVk
c1Njb3BlQ2hhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9vbGRTY29wZSAhPSBtX25ld1Njb3BlOyB9
CisgICAgdm9pZCBleGVjdXRlKCkgY29uc3QgeyBtb3ZlVHJlZVRvTmV3RG9jdW1lbnQobV90b0Fk
b3B0KTsgfQorICAgIGJvb2wgbmVlZHNEb2N1bWVudENoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1f
b2xkRG9jdW1lbnQgIT0gbV9uZXdEb2N1bWVudDsgfQogCiAjaWZkZWYgTkRFQlVHCiAgICAgc3Rh
dGljIHZvaWQgZW5zdXJlRGlkTW92ZVRvTmV3RG9jdW1lbnRXYXNDYWxsZWQoRG9jdW1lbnQqKSB7
IH0KICNlbHNlCiAgICAgc3RhdGljIHZvaWQgZW5zdXJlRGlkTW92ZVRvTmV3RG9jdW1lbnRXYXND
YWxsZWQoRG9jdW1lbnQqKTsKICNlbmRpZgotCisgICAKIHByaXZhdGU6Ci0gICAgdm9pZCBtb3Zl
VHJlZVRvTmV3U2NvcGUoTm9kZSopIGNvbnN0OwotICAgIHZvaWQgbW92ZVRyZWVUb05ld0RvY3Vt
ZW50KE5vZGUqLCBEb2N1bWVudCogb2xkRG9jdW1lbnQsIERvY3VtZW50KiBuZXdEb2N1bWVudCkg
Y29uc3Q7Ci0gICAgdm9pZCBtb3ZlTm9kZVRvTmV3RG9jdW1lbnQoTm9kZSosIERvY3VtZW50KiBv
bGREb2N1bWVudCwgRG9jdW1lbnQqIG5ld0RvY3VtZW50KSBjb25zdDsKLSAgICB2b2lkIG1vdmVT
aGFkb3dUcmVlVG9OZXdEb2N1bWVudChTaGFkb3dUcmVlKiwgRG9jdW1lbnQqIG9sZERvY3VtZW50
LCBEb2N1bWVudCogbmV3RG9jdW1lbnQpIGNvbnN0OworICAgIHZvaWQgbW92ZVRyZWVUb05ld0Rv
Y3VtZW50KE5vZGUqKSBjb25zdDsKKyAgICB2b2lkIG1vdmVOb2RlVG9OZXdEb2N1bWVudChOb2Rl
KikgY29uc3Q7CiAKICAgICBOb2RlKiBtX3RvQWRvcHQ7Ci0gICAgVHJlZVNjb3BlKiBtX25ld1Nj
b3BlOwotICAgIFRyZWVTY29wZSogbV9vbGRTY29wZTsKKyAgICBEb2N1bWVudCogbV9uZXdEb2N1
bWVudDsKKyAgICBEb2N1bWVudCogbV9vbGREb2N1bWVudDsKIH07CiAKLWlubGluZSBUcmVlU2Nv
cGVBZG9wdGVyOjpUcmVlU2NvcGVBZG9wdGVyKE5vZGUqIHRvQWRvcHQsIFRyZWVTY29wZSogbmV3
U2NvcGUpCitpbmxpbmUgVHJlZVNjb3BlQWRvcHRlcjo6VHJlZVNjb3BlQWRvcHRlcihOb2RlKiB0
b0Fkb3B0LCBEb2N1bWVudCogbmV3RG9jdW1lbnQpCiAgICAgOiBtX3RvQWRvcHQodG9BZG9wdCkK
LSAgICAsIG1fbmV3U2NvcGUobmV3U2NvcGUpCi0gICAgLCBtX29sZFNjb3BlKHRvQWRvcHQtPnRy
ZWVTY29wZSgpKQorICAgICwgbV9uZXdEb2N1bWVudChuZXdEb2N1bWVudCkKKyAgICAsIG1fb2xk
RG9jdW1lbnQodG9BZG9wdC0+ZG9jdW1lbnQoKSkKK3sKKyAgICBBU1NFUlQobmV3RG9jdW1lbnQp
OworfQorCitpbmxpbmUgdm9pZCBEb2N1bWVudDo6bW92ZUlmTmVlZGVkKE5vZGUqIHRvQWRvcHQp
CiB7Ci0gICAgQVNTRVJUKG5ld1Njb3BlKTsKKyAgICBUcmVlU2NvcGVBZG9wdGVyIGFkb3B0ZXIo
dG9BZG9wdCwgdGhpcyk7CisgICAgaWYgKGFkb3B0ZXIubmVlZHNEb2N1bWVudENoYW5nZSgpKQor
ICAgICAgICBhZG9wdGVyLmV4ZWN1dGUoKTsKIH0KIAogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>