<?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>130931</bug_id>
          
          <creation_ts>2014-03-29 12:44:18 -0700</creation_ts>
          <short_desc>LiveNodeLists should use ElementDescendantIterator</short_desc>
          <delta_ts>2014-03-30 01:37:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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></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>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kling</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>995593</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-03-29 12:44:18 -0700</bug_when>
    <thetext>It is better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>995594</commentid>
    <comment_count>1</comment_count>
      <attachid>228114</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-03-29 13:00:23 -0700</bug_when>
    <thetext>Created attachment 228114
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>995595</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-29 13:02:10 -0700</bug_when>
    <thetext>Attachment 228114 did not pass style-queue:


ERROR: Source/WebCore/dom/ElementDescendantIterator.h:338:  value_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WebCore/dom/ElementDescendantIterator.h:341:  value_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 2 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>995609</commentid>
    <comment_count>3</comment_count>
      <attachid>228114</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-03-29 14:34:47 -0700</bug_when>
    <thetext>Comment on attachment 228114
patch

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

r=me, very glorious patch A+!

&gt; Source/WebCore/dom/CollectionIndexCache.h:38
&gt; +    CollectionIndexCache(const Collection&amp;);

explicit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>995654</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-03-30 01:37:43 -0700</bug_when>
    <thetext>https://trac.webkit.org/r166460</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228114</attachid>
            <date>2014-03-29 13:00:23 -0700</date>
            <delta_ts>2014-03-29 14:34:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>livenodelist-iterator.patch</filename>
            <type>text/plain</type>
            <size>33327</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NjQ1MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBACisyMDE0LTAzLTI5ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBMaXZlTm9kZUxpc3RzIHNob3Vs
ZCB1c2UgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMwOTMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBNYWtlIExpdmVOb2RlTGlzdCB0cmF2ZXJz
YWwgdXNlIHRoZSBjb21tb24gRE9NIHRyZWUgaXRlcmF0b3IuCisKKyAgICAgICAgKiBkb20vQ2hp
bGROb2RlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVMaXN0OjpDaGlsZE5v
ZGVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTm9kZUxpc3Q6OmNvbGxlY3Rpb25CZWdp
bik6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVMaXN0Ojpjb2xsZWN0aW9uVHJhdmVyc2VG
b3J3YXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTm9kZUxpc3Q6OmNvbGxlY3Rpb25UcmF2
ZXJzZUJhY2t3YXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkNoaWxkTm9kZUxpc3Q6OmludmFsaWRh
dGVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpDaGlsZE5vZGVMaXN0Ojpjb2xsZWN0aW9uRmly
c3QpOiBEZWxldGVkLgorICAgICAgICAKKyAgICAgICAgICAgIEl0ZXJhdG9yIGZvciBDaGlsZE5v
ZGVMaXN0IGlzIHN0aWxsIGp1c3QgTm9kZSouCisKKyAgICAgICAgKiBkb20vQ2hpbGROb2RlTGlz
dC5oOgorICAgICAgICAqIGRvbS9Db2xsZWN0aW9uSW5kZXhDYWNoZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q29sbGVjdGlvbkluZGV4Q2FjaGU6Omhhc1ZhbGlkQ2FjaGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SXRlcmF0b3I+OjpDb2xsZWN0aW9uSW5kZXhDYWNoZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJdGVyYXRvcj46Om5vZGVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJdGVyYXRvcj46OmNv
bXB1dGVOb2RlQ291bnRVcGRhdGluZ0xpc3RDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpJdGVy
YXRvcj46OnRyYXZlcnNlQmFja3dhcmRUbyk6CisgICAgICAgIChXZWJDb3JlOjpJdGVyYXRvcj46
OnRyYXZlcnNlRm9yd2FyZFRvKToKKyAgICAgICAgKFdlYkNvcmU6Okl0ZXJhdG9yPjo6bm9kZUF0
KToKKyAgICAgICAgKFdlYkNvcmU6Okl0ZXJhdG9yPjo6aW52YWxpZGF0ZSk6CisgICAgICAgIAor
ICAgICAgICAgICAgTWFrZSBDb2xsZWN0aW9uSW5kZXhDYWNoZSBpdGVyYXRvciBiYXNlZCBpbnN0
ZWFkIG9mIHVzaW5nIE5vZGVUeXBlKi4gVGhlIGl0ZXJhdG9yIHR5cGUgbWF5CisgICAgICAgICAg
ICBzdGlsbCBiZSBhIE5vZGUqIHRob3VnaC4KKworICAgICAgICAoV2ViQ29yZTo6Tm9kZVR5cGU+
OjpDb2xsZWN0aW9uSW5kZXhDYWNoZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOb2Rl
VHlwZT46Om5vZGVDb3VudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOb2RlVHlwZT46
OmNvbXB1dGVOb2RlQ291bnRVcGRhdGluZ0xpc3RDYWNoZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpOb2RlVHlwZT46Om5vZGVCZWZvcmVDYWNoZWQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZVR5cGU+Ojpub2RlQWZ0ZXJDYWNoZWQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Tm9kZVR5cGU+Ojpub2RlQXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZVR5cGU+OjppbnZhbGlkYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vRWxlbWVudERl
c2NlbmRhbnRJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERlc2NlbmRhbnRJ
dGVyYXRvcjo6b3BlcmF0b3ItLSk6CisgICAgICAgIAorICAgICAgICAgICAgQWRkIGJhY2t3YXJk
IGl0ZXJhdGlvbiBzdXBwb3J0LgorCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50RGVzY2VuZGFu
dEl0ZXJhdG9yQWRhcHRlcjo6bGFzdCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50RGVzY2Vu
ZGFudENvbnN0SXRlcmF0b3JBZGFwdGVyOjpsYXN0KToKKyAgICAgICAgCisgICAgICAgICAgICBB
ZGQgYSB3YXkgdG8gZ2V0IHRoZSBsYXN0IGl0ZW0uCisgICAgICAgICAgICBQcm92aWRlIHN0ZDo6
aXRlcmF0b3JfdHJhaXRzIHNvIHdlIGNhbiBleHRyYWN0IHRoZSB0eXBlLgorCisgICAgICAgICog
ZG9tL0xpdmVOb2RlTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkTGl2ZU5vZGVMaXN0
Ojpjb2xsZWN0aW9uRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZExpdmVOb2RlTGlzdDxO
b2RlTGlzdFR5cGU+OjpDYWNoZWRMaXZlTm9kZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fj
aGVkTGl2ZU5vZGVMaXN0PE5vZGVMaXN0VHlwZT46On5DYWNoZWRMaXZlTm9kZUxpc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkTGl2ZU5vZGVMaXN0PE5vZGVMaXN0VHlwZT46OmNvbGxlY3Rp
b25CZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRMaXZlTm9kZUxpc3Q8Tm9kZUxpc3RU
eXBlPjo6Y29sbGVjdGlvbkxhc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkTGl2ZU5vZGVM
aXN0PE5vZGVMaXN0VHlwZT46OmNvbGxlY3Rpb25UcmF2ZXJzZUZvcndhcmQpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FjaGVkTGl2ZU5vZGVMaXN0PE5vZGVMaXN0VHlwZT46OmNvbGxlY3Rpb25UcmF2
ZXJzZUJhY2t3YXJkKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZExpdmVOb2RlTGlzdDxOb2Rl
TGlzdFR5cGU+OjppbnZhbGlkYXRlQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkTGl2
ZU5vZGVMaXN0PE5vZGVMaXN0VHlwZT46OmNvbGxlY3Rpb25GaXJzdCk6IERlbGV0ZWQuCisgICAg
ICAgIAorICAgICAgICAgICAgTWFrZSBMaXZlTm9kZUxpc3QgdHJhdmVyc2FsIHVzZSBFbGVtZW50
RGVzY2VuZGFudEl0ZXJhdG9yLgorCisgICAgICAgIChXZWJDb3JlOjpuZXh0TWF0Y2hpbmdFbGVt
ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzTWF0Y2hpbmdFbGVtZW50
KTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1sL0hUTUxDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjpIVE1MQ29sbGVjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQ29sbGVjdGlvbjo6fkhUTUxDb2xsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDb2xsZWN0aW9uOjpjb2xsZWN0aW9uQmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TENvbGxlY3Rpb246OmNvbGxlY3Rpb25UcmF2ZXJzZUZvcndhcmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTENvbGxlY3Rpb246OmNvbGxlY3Rpb25UcmF2ZXJzZUJhY2t3YXJkKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjppbnZhbGlkYXRlQ2FjaGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTENvbGxlY3Rpb246OmNvbGxlY3Rpb25GaXJzdCk6IERlbGV0ZWQuCisgICAgICAg
ICogaHRtbC9IVE1MQ29sbGVjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rp
b246OmNvbGxlY3Rpb25FbmQpOgorICAgICAgICAKKyAgICAgICAgICAgIEhUTUxDb2xsZWN0aW9u
IHN0aWxsIHVzZXMgRWxlbWVudCogYXMgaXRlcmF0b3IgZm9yIG5vdy4KKwogMjAxNC0wMy0yOCAg
Q3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQgYnVpbGRmaXggYWZ0ZXIgcjE2NjQ0MSBhbmQgcjE2NjQ0My4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9DaGlsZE5vZGVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vQ2hpbGROb2RlTGlzdC5jcHAJKHJldmlzaW9uIDE2NjQ1MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9DaGlsZE5vZGVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQCBF
bXB0eU5vZGVMaXN0Ojp+RW1wdHlOb2RlTGlzdCgpCiAKIENoaWxkTm9kZUxpc3Q6OkNoaWxkTm9k
ZUxpc3QoQ29udGFpbmVyTm9kZSYgcGFyZW50KQogICAgIDogbV9wYXJlbnQocGFyZW50KQorICAg
ICwgbV9pbmRleENhY2hlKCp0aGlzKQogewogfQogCkBAIC01Myw3ICs1NCw3IEBAIE5vZGUqIENo
aWxkTm9kZUxpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgKICAgICByZXR1cm4gbV9pbmRleENhY2hl
Lm5vZGVBdCgqdGhpcywgaW5kZXgpOwogfQogCi1Ob2RlKiBDaGlsZE5vZGVMaXN0Ojpjb2xsZWN0
aW9uRmlyc3QoKSBjb25zdAorTm9kZSogQ2hpbGROb2RlTGlzdDo6Y29sbGVjdGlvbkJlZ2luKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9wYXJlbnQtPmZpcnN0Q2hpbGQoKTsKIH0KQEAgLTYzLDI1
ICs2NCwyMSBAQCBOb2RlKiBDaGlsZE5vZGVMaXN0Ojpjb2xsZWN0aW9uTGFzdCgpIGNvCiAgICAg
cmV0dXJuIG1fcGFyZW50LT5sYXN0Q2hpbGQoKTsKIH0KIAotTm9kZSogQ2hpbGROb2RlTGlzdDo6
Y29sbGVjdGlvblRyYXZlcnNlRm9yd2FyZChOb2RlJiBjdXJyZW50LCB1bnNpZ25lZCBjb3VudCwg
dW5zaWduZWQmIHRyYXZlcnNlZENvdW50KSBjb25zdAordm9pZCBDaGlsZE5vZGVMaXN0Ojpjb2xs
ZWN0aW9uVHJhdmVyc2VGb3J3YXJkKE5vZGUqJiBjdXJyZW50LCB1bnNpZ25lZCBjb3VudCwgdW5z
aWduZWQmIHRyYXZlcnNlZENvdW50KSBjb25zdAogewogICAgIEFTU0VSVChjb3VudCk7Ci0gICAg
Tm9kZSogY2hpbGQgPSAmY3VycmVudDsKICAgICBmb3IgKHRyYXZlcnNlZENvdW50ID0gMDsgdHJh
dmVyc2VkQ291bnQgPCBjb3VudDsgKyt0cmF2ZXJzZWRDb3VudCkgewotICAgICAgICBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpOwotICAgICAgICBpZiAoIWNoaWxkKQotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygp
OworICAgICAgICBpZiAoIWN1cnJlbnQpCisgICAgICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IHJldHVybiBjaGlsZDsKIH0KIAotTm9kZSogQ2hpbGROb2RlTGlzdDo6Y29sbGVjdGlvblRyYXZl
cnNlQmFja3dhcmQoTm9kZSYgY3VycmVudCwgdW5zaWduZWQgY291bnQpIGNvbnN0Cit2b2lkIENo
aWxkTm9kZUxpc3Q6OmNvbGxlY3Rpb25UcmF2ZXJzZUJhY2t3YXJkKE5vZGUqJiBjdXJyZW50LCB1
bnNpZ25lZCBjb3VudCkgY29uc3QKIHsKICAgICBBU1NFUlQoY291bnQpOwotICAgIE5vZGUqIGNo
aWxkID0gJmN1cnJlbnQ7Ci0gICAgZm9yICg7IGNvdW50ICYmIGNoaWxkIDsgLS1jb3VudCkKLSAg
ICAgICAgY2hpbGQgPSBjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgcmV0dXJuIGNoaWxk
OworICAgIGZvciAoOyBjb3VudCAmJiBjdXJyZW50IDsgLS1jb3VudCkKKyAgICAgICAgY3VycmVu
dCA9IGN1cnJlbnQtPnByZXZpb3VzU2libGluZygpOwogfQogCiBOb2RlKiBDaGlsZE5vZGVMaXN0
OjpuYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdApAQCAtMTAzLDcgKzEw
MCw3IEBAIE5vZGUqIENoaWxkTm9kZUxpc3Q6Om5hbWVkSXRlbShjb25zdCBBdG8KIAogdm9pZCBD
aGlsZE5vZGVMaXN0OjppbnZhbGlkYXRlQ2FjaGUoKQogewotICAgIG1faW5kZXhDYWNoZS5pbnZh
bGlkYXRlKCk7CisgICAgbV9pbmRleENhY2hlLmludmFsaWRhdGUoKnRoaXMpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ2hpbGROb2RlTGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmgJKHJl
dmlzaW9uIDE2NjQ1MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DaGlsZE5vZGVMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTcwLDEwICs3MCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnZhbGlk
YXRlQ2FjaGUoKTsKIAogICAgIC8vIEZvciBDb2xsZWN0aW9uSW5kZXhDYWNoZQotICAgIE5vZGUq
IGNvbGxlY3Rpb25GaXJzdCgpIGNvbnN0OworICAgIE5vZGUqIGNvbGxlY3Rpb25CZWdpbigpIGNv
bnN0OwogICAgIE5vZGUqIGNvbGxlY3Rpb25MYXN0KCkgY29uc3Q7Ci0gICAgTm9kZSogY29sbGVj
dGlvblRyYXZlcnNlRm9yd2FyZChOb2RlJiwgdW5zaWduZWQgY291bnQsIHVuc2lnbmVkJiB0cmF2
ZXJzZWRDb3VudCkgY29uc3Q7Ci0gICAgTm9kZSogY29sbGVjdGlvblRyYXZlcnNlQmFja3dhcmQo
Tm9kZSYsIHVuc2lnbmVkIGNvdW50KSBjb25zdDsKKyAgICBOb2RlKiBjb2xsZWN0aW9uRW5kKCkg
Y29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZvaWQgY29sbGVjdGlvblRyYXZlcnNlRm9y
d2FyZChOb2RlKiYsIHVuc2lnbmVkIGNvdW50LCB1bnNpZ25lZCYgdHJhdmVyc2VkQ291bnQpIGNv
bnN0OworICAgIHZvaWQgY29sbGVjdGlvblRyYXZlcnNlQmFja3dhcmQoTm9kZSomLCB1bnNpZ25l
ZCBjb3VudCkgY29uc3Q7CiAgICAgYm9vbCBjb2xsZWN0aW9uQ2FuVHJhdmVyc2VCYWNrd2FyZCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2b2lkIHdpbGxWYWxpZGF0ZUluZGV4Q2FjaGUo
KSBjb25zdCB7IH0KIApAQCAtODgsNyArODksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9v
bCBpc0NoaWxkTm9kZUxpc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICAg
ICBSZWY8Q29udGFpbmVyTm9kZT4gbV9wYXJlbnQ7Ci0gICAgbXV0YWJsZSBDb2xsZWN0aW9uSW5k
ZXhDYWNoZTxDaGlsZE5vZGVMaXN0LCBOb2RlPiBtX2luZGV4Q2FjaGU7CisgICAgbXV0YWJsZSBD
b2xsZWN0aW9uSW5kZXhDYWNoZTxDaGlsZE5vZGVMaXN0LCBOb2RlKj4gbV9pbmRleENhY2hlOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Nv
bGxlY3Rpb25JbmRleENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Nv
bGxlY3Rpb25JbmRleENhY2hlLmgJKHJldmlzaW9uIDE2NjQ1MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Db2xsZWN0aW9uSW5kZXhDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwyNSArMzIs
MjYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5Q29zdEZv
ckNvbGxlY3Rpb25JbmRleENhY2hlKHNpemVfdCk7CiAKLXRlbXBsYXRlIDxjbGFzcyBDb2xsZWN0
aW9uLCBjbGFzcyBOb2RlVHlwZT4KK3RlbXBsYXRlIDxjbGFzcyBDb2xsZWN0aW9uLCBjbGFzcyBJ
dGVyYXRvcj4KIGNsYXNzIENvbGxlY3Rpb25JbmRleENhY2hlIHsKIHB1YmxpYzoKLSAgICBDb2xs
ZWN0aW9uSW5kZXhDYWNoZSgpOworICAgIENvbGxlY3Rpb25JbmRleENhY2hlKGNvbnN0IENvbGxl
Y3Rpb24mKTsKKworICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8SXRl
cmF0b3I+Ojp2YWx1ZV90eXBlIE5vZGVUeXBlOwogCiAgICAgdW5zaWduZWQgbm9kZUNvdW50KGNv
bnN0IENvbGxlY3Rpb24mKTsKICAgICBOb2RlVHlwZSogbm9kZUF0KGNvbnN0IENvbGxlY3Rpb24m
LCB1bnNpZ25lZCBpbmRleCk7CiAKLSAgICBib29sIGhhc1ZhbGlkQ2FjaGUoKSBjb25zdCB7IHJl
dHVybiBtX2N1cnJlbnROb2RlIHx8IG1fbm9kZUNvdW50VmFsaWQgfHwgbV9saXN0VmFsaWQ7IH0K
LSAgICB2b2lkIGludmFsaWRhdGUoKTsKKyAgICBib29sIGhhc1ZhbGlkQ2FjaGUoY29uc3QgQ29s
bGVjdGlvbiYgY29sbGVjdGlvbikgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50ICE9IGNvbGxlY3Rp
b24uY29sbGVjdGlvbkVuZCgpIHx8IG1fbm9kZUNvdW50VmFsaWQgfHwgbV9saXN0VmFsaWQ7IH0K
KyAgICB2b2lkIGludmFsaWRhdGUoY29uc3QgQ29sbGVjdGlvbiYpOwogICAgIHNpemVfdCBtZW1v
cnlDb3N0KCkgeyByZXR1cm4gbV9jYWNoZWRMaXN0LmNhcGFjaXR5KCkgKiBzaXplb2YoTm9kZVR5
cGUqKTsgfQogCiBwcml2YXRlOgotCiAgICAgdW5zaWduZWQgY29tcHV0ZU5vZGVDb3VudFVwZGF0
aW5nTGlzdENhY2hlKGNvbnN0IENvbGxlY3Rpb24mKTsKLSAgICBOb2RlVHlwZSogbm9kZUJlZm9y
ZUNhY2hlZChjb25zdCBDb2xsZWN0aW9uJiwgdW5zaWduZWQpOwotICAgIE5vZGVUeXBlKiBub2Rl
QWZ0ZXJDYWNoZWQoY29uc3QgQ29sbGVjdGlvbiYsIHVuc2lnbmVkKTsKKyAgICBOb2RlVHlwZSog
dHJhdmVyc2VCYWNrd2FyZFRvKGNvbnN0IENvbGxlY3Rpb24mLCB1bnNpZ25lZCk7CisgICAgTm9k
ZVR5cGUqIHRyYXZlcnNlRm9yd2FyZFRvKGNvbnN0IENvbGxlY3Rpb24mLCB1bnNpZ25lZCk7CiAK
LSAgICBOb2RlVHlwZSogbV9jdXJyZW50Tm9kZTsKKyAgICBJdGVyYXRvciBtX2N1cnJlbnQ7CiAg
ICAgdW5zaWduZWQgbV9jdXJyZW50SW5kZXg7CiAgICAgdW5zaWduZWQgbV9ub2RlQ291bnQ7CiAg
ICAgVmVjdG9yPE5vZGVUeXBlKj4gbV9jYWNoZWRMaXN0OwpAQCAtNTgsOSArNTksOSBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9saXN0VmFsaWQgOiAxOwogfTsKIAotdGVtcGxhdGUgPGNsYXNzIENv
bGxlY3Rpb24sIGNsYXNzIE5vZGVUeXBlPgotaW5saW5lIENvbGxlY3Rpb25JbmRleENhY2hlPENv
bGxlY3Rpb24sIE5vZGVUeXBlPjo6Q29sbGVjdGlvbkluZGV4Q2FjaGUoKQotICAgIDogbV9jdXJy
ZW50Tm9kZShudWxscHRyKQordGVtcGxhdGUgPGNsYXNzIENvbGxlY3Rpb24sIGNsYXNzIEl0ZXJh
dG9yPgoraW5saW5lIENvbGxlY3Rpb25JbmRleENhY2hlPENvbGxlY3Rpb24sIEl0ZXJhdG9yPjo6
Q29sbGVjdGlvbkluZGV4Q2FjaGUoY29uc3QgQ29sbGVjdGlvbiYgY29sbGVjdGlvbikKKyAgICA6
IG1fY3VycmVudChjb2xsZWN0aW9uLmNvbGxlY3Rpb25FbmQoKSkKICAgICAsIG1fY3VycmVudElu
ZGV4KDApCiAgICAgLCBtX25vZGVDb3VudCgwKQogICAgICwgbV9ub2RlQ291bnRWYWxpZChmYWxz
ZSkKQEAgLTY4LDExICs2OSwxMSBAQCBpbmxpbmUgQ29sbGVjdGlvbkluZGV4Q2FjaGU8Q29sbGVj
dGlvbiwgCiB7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBDb2xsZWN0aW9uLCBjbGFzcyBOb2RlVHlw
ZT4KLWlubGluZSB1bnNpZ25lZCBDb2xsZWN0aW9uSW5kZXhDYWNoZTxDb2xsZWN0aW9uLCBOb2Rl
VHlwZT46Om5vZGVDb3VudChjb25zdCBDb2xsZWN0aW9uJiBjb2xsZWN0aW9uKQordGVtcGxhdGUg
PGNsYXNzIENvbGxlY3Rpb24sIGNsYXNzIEl0ZXJhdG9yPgoraW5saW5lIHVuc2lnbmVkIENvbGxl
Y3Rpb25JbmRleENhY2hlPENvbGxlY3Rpb24sIEl0ZXJhdG9yPjo6bm9kZUNvdW50KGNvbnN0IENv
bGxlY3Rpb24mIGNvbGxlY3Rpb24pCiB7CiAgICAgaWYgKCFtX25vZGVDb3VudFZhbGlkKSB7Ci0g
ICAgICAgIGlmICghaGFzVmFsaWRDYWNoZSgpKQorICAgICAgICBpZiAoIWhhc1ZhbGlkQ2FjaGUo
Y29sbGVjdGlvbikpCiAgICAgICAgICAgICBjb2xsZWN0aW9uLndpbGxWYWxpZGF0ZUluZGV4Q2Fj
aGUoKTsKICAgICAgICAgbV9ub2RlQ291bnQgPSBjb21wdXRlTm9kZUNvdW50VXBkYXRpbmdMaXN0
Q2FjaGUoY29sbGVjdGlvbik7CiAgICAgICAgIG1fbm9kZUNvdW50VmFsaWQgPSB0cnVlOwpAQCAt
ODEsMjAgKzgyLDIwIEBAIGlubGluZSB1bnNpZ25lZCBDb2xsZWN0aW9uSW5kZXhDYWNoZTxDb2wK
ICAgICByZXR1cm4gbV9ub2RlQ291bnQ7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBDb2xsZWN0aW9u
LCBjbGFzcyBOb2RlVHlwZT4KLXVuc2lnbmVkIENvbGxlY3Rpb25JbmRleENhY2hlPENvbGxlY3Rp
b24sIE5vZGVUeXBlPjo6Y29tcHV0ZU5vZGVDb3VudFVwZGF0aW5nTGlzdENhY2hlKGNvbnN0IENv
bGxlY3Rpb24mIGNvbGxlY3Rpb24pCit0ZW1wbGF0ZSA8Y2xhc3MgQ29sbGVjdGlvbiwgY2xhc3Mg
SXRlcmF0b3I+Cit1bnNpZ25lZCBDb2xsZWN0aW9uSW5kZXhDYWNoZTxDb2xsZWN0aW9uLCBJdGVy
YXRvcj46OmNvbXB1dGVOb2RlQ291bnRVcGRhdGluZ0xpc3RDYWNoZShjb25zdCBDb2xsZWN0aW9u
JiBjb2xsZWN0aW9uKQogewotICAgIE5vZGVUeXBlKiBmaXJzdCA9IGNvbGxlY3Rpb24uY29sbGVj
dGlvbkZpcnN0KCk7Ci0gICAgaWYgKCFmaXJzdCkKKyAgICBhdXRvIGN1cnJlbnQgPSBjb2xsZWN0
aW9uLmNvbGxlY3Rpb25CZWdpbigpOworICAgIGF1dG8gZW5kID0gY29sbGVjdGlvbi5jb2xsZWN0
aW9uRW5kKCk7CisgICAgaWYgKGN1cnJlbnQgPT0gZW5kKQogICAgICAgICByZXR1cm4gMDsKIAog
ICAgIHVuc2lnbmVkIG9sZENhcGFjaXR5ID0gbV9jYWNoZWRMaXN0LmNhcGFjaXR5KCk7Ci0gICAg
Tm9kZVR5cGUqIGN1cnJlbnROb2RlID0gZmlyc3Q7Ci0gICAgd2hpbGUgKGN1cnJlbnROb2RlKSB7
Ci0gICAgICAgIG1fY2FjaGVkTGlzdC5hcHBlbmQoY3VycmVudE5vZGUpOworICAgIHdoaWxlIChj
dXJyZW50ICE9IGVuZCkgeworICAgICAgICBtX2NhY2hlZExpc3QuYXBwZW5kKCYqY3VycmVudCk7
CiAgICAgICAgIHVuc2lnbmVkIHRyYXZlcnNlZDsKLSAgICAgICAgY3VycmVudE5vZGUgPSBjb2xs
ZWN0aW9uLmNvbGxlY3Rpb25UcmF2ZXJzZUZvcndhcmQoKmN1cnJlbnROb2RlLCAxLCB0cmF2ZXJz
ZWQpOwotICAgICAgICBBU1NFUlQodHJhdmVyc2VkID09IChjdXJyZW50Tm9kZSA/IDEgOiAwKSk7
CisgICAgICAgIGNvbGxlY3Rpb24uY29sbGVjdGlvblRyYXZlcnNlRm9yd2FyZChjdXJyZW50LCAx
LCB0cmF2ZXJzZWQpOworICAgICAgICBBU1NFUlQodHJhdmVyc2VkID09IChjdXJyZW50ICE9IGVu
ZCA/IDEgOiAwKSk7CiAgICAgfQogICAgIG1fbGlzdFZhbGlkID0gdHJ1ZTsKIApAQCAtMTA0LDY3
ICsxMDUsNjcgQEAgdW5zaWduZWQgQ29sbGVjdGlvbkluZGV4Q2FjaGU8Q29sbGVjdGlvbgogICAg
IHJldHVybiBtX2NhY2hlZExpc3Quc2l6ZSgpOwogfQogCi10ZW1wbGF0ZSA8Y2xhc3MgQ29sbGVj
dGlvbiwgY2xhc3MgTm9kZVR5cGU+Ci1pbmxpbmUgTm9kZVR5cGUqIENvbGxlY3Rpb25JbmRleENh
Y2hlPENvbGxlY3Rpb24sIE5vZGVUeXBlPjo6bm9kZUJlZm9yZUNhY2hlZChjb25zdCBDb2xsZWN0
aW9uJiBjb2xsZWN0aW9uLCB1bnNpZ25lZCBpbmRleCkKK3RlbXBsYXRlIDxjbGFzcyBDb2xsZWN0
aW9uLCBjbGFzcyBJdGVyYXRvcj4KK2lubGluZSB0eXBlbmFtZSBDb2xsZWN0aW9uSW5kZXhDYWNo
ZTxDb2xsZWN0aW9uLCBJdGVyYXRvcj46Ok5vZGVUeXBlKiBDb2xsZWN0aW9uSW5kZXhDYWNoZTxD
b2xsZWN0aW9uLCBJdGVyYXRvcj46OnRyYXZlcnNlQmFja3dhcmRUbyhjb25zdCBDb2xsZWN0aW9u
JiBjb2xsZWN0aW9uLCB1bnNpZ25lZCBpbmRleCkKIHsKLSAgICBBU1NFUlQobV9jdXJyZW50Tm9k
ZSk7CisgICAgQVNTRVJUKG1fY3VycmVudCAhPSBjb2xsZWN0aW9uLmNvbGxlY3Rpb25FbmQoKSk7
CiAgICAgQVNTRVJUKGluZGV4IDwgbV9jdXJyZW50SW5kZXgpOwogCiAgICAgYm9vbCBmaXJzdElz
Q2xvc2VyID0gaW5kZXggPCBtX2N1cnJlbnRJbmRleCAtIGluZGV4OwogICAgIGlmIChmaXJzdElz
Q2xvc2VyIHx8ICFjb2xsZWN0aW9uLmNvbGxlY3Rpb25DYW5UcmF2ZXJzZUJhY2t3YXJkKCkpIHsK
LSAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGNvbGxlY3Rpb24uY29sbGVjdGlvbkZpcnN0KCk7Cisg
ICAgICAgIG1fY3VycmVudCA9IGNvbGxlY3Rpb24uY29sbGVjdGlvbkJlZ2luKCk7CiAgICAgICAg
IG1fY3VycmVudEluZGV4ID0gMDsKICAgICAgICAgaWYgKGluZGV4KQotICAgICAgICAgICAgbV9j
dXJyZW50Tm9kZSA9IGNvbGxlY3Rpb24uY29sbGVjdGlvblRyYXZlcnNlRm9yd2FyZCgqbV9jdXJy
ZW50Tm9kZSwgaW5kZXgsIG1fY3VycmVudEluZGV4KTsKLSAgICAgICAgQVNTRVJUKG1fY3VycmVu
dE5vZGUpOwotICAgICAgICByZXR1cm4gbV9jdXJyZW50Tm9kZTsKKyAgICAgICAgICAgIGNvbGxl
Y3Rpb24uY29sbGVjdGlvblRyYXZlcnNlRm9yd2FyZChtX2N1cnJlbnQsIGluZGV4LCBtX2N1cnJl
bnRJbmRleCk7CisgICAgICAgIEFTU0VSVChtX2N1cnJlbnQgIT0gY29sbGVjdGlvbi5jb2xsZWN0
aW9uRW5kKCkpOworICAgICAgICByZXR1cm4gJiptX2N1cnJlbnQ7CiAgICAgfQogCi0gICAgbV9j
dXJyZW50Tm9kZSA9IGNvbGxlY3Rpb24uY29sbGVjdGlvblRyYXZlcnNlQmFja3dhcmQoKm1fY3Vy
cmVudE5vZGUsIG1fY3VycmVudEluZGV4IC0gaW5kZXgpOworICAgIGNvbGxlY3Rpb24uY29sbGVj
dGlvblRyYXZlcnNlQmFja3dhcmQobV9jdXJyZW50LCBtX2N1cnJlbnRJbmRleCAtIGluZGV4KTsK
ICAgICBtX2N1cnJlbnRJbmRleCA9IGluZGV4OwogCi0gICAgQVNTRVJUKG1fY3VycmVudE5vZGUp
OwotICAgIHJldHVybiBtX2N1cnJlbnROb2RlOworICAgIEFTU0VSVChtX2N1cnJlbnQgIT0gY29s
bGVjdGlvbi5jb2xsZWN0aW9uRW5kKCkpOworICAgIHJldHVybiAmKm1fY3VycmVudDsKIH0KIAot
dGVtcGxhdGUgPGNsYXNzIENvbGxlY3Rpb24sIGNsYXNzIE5vZGVUeXBlPgotaW5saW5lIE5vZGVU
eXBlKiBDb2xsZWN0aW9uSW5kZXhDYWNoZTxDb2xsZWN0aW9uLCBOb2RlVHlwZT46Om5vZGVBZnRl
ckNhY2hlZChjb25zdCBDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNpZ25lZCBpbmRleCkKK3Rl
bXBsYXRlIDxjbGFzcyBDb2xsZWN0aW9uLCBjbGFzcyBJdGVyYXRvcj4KK2lubGluZSB0eXBlbmFt
ZSBDb2xsZWN0aW9uSW5kZXhDYWNoZTxDb2xsZWN0aW9uLCBJdGVyYXRvcj46Ok5vZGVUeXBlKiBD
b2xsZWN0aW9uSW5kZXhDYWNoZTxDb2xsZWN0aW9uLCBJdGVyYXRvcj46OnRyYXZlcnNlRm9yd2Fy
ZFRvKGNvbnN0IENvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHVuc2lnbmVkIGluZGV4KQogewotICAg
IEFTU0VSVChtX2N1cnJlbnROb2RlKTsKKyAgICBBU1NFUlQobV9jdXJyZW50ICE9IGNvbGxlY3Rp
b24uY29sbGVjdGlvbkVuZCgpKTsKICAgICBBU1NFUlQoaW5kZXggPiBtX2N1cnJlbnRJbmRleCk7
CiAgICAgQVNTRVJUKCFtX25vZGVDb3VudFZhbGlkIHx8IGluZGV4IDwgbV9ub2RlQ291bnQpOwog
CiAgICAgYm9vbCBsYXN0SXNDbG9zZXIgPSBtX25vZGVDb3VudFZhbGlkICYmIG1fbm9kZUNvdW50
IC0gaW5kZXggPCBpbmRleCAtIG1fY3VycmVudEluZGV4OwogICAgIGlmIChsYXN0SXNDbG9zZXIg
JiYgY29sbGVjdGlvbi5jb2xsZWN0aW9uQ2FuVHJhdmVyc2VCYWNrd2FyZCgpKSB7Ci0gICAgICAg
IEFTU0VSVChoYXNWYWxpZENhY2hlKCkpOwotICAgICAgICBtX2N1cnJlbnROb2RlID0gY29sbGVj
dGlvbi5jb2xsZWN0aW9uTGFzdCgpOworICAgICAgICBBU1NFUlQoaGFzVmFsaWRDYWNoZShjb2xs
ZWN0aW9uKSk7CisgICAgICAgIG1fY3VycmVudCA9IGNvbGxlY3Rpb24uY29sbGVjdGlvbkxhc3Qo
KTsKICAgICAgICAgaWYgKGluZGV4IDwgbV9ub2RlQ291bnQgLSAxKQotICAgICAgICAgICAgbV9j
dXJyZW50Tm9kZSA9IGNvbGxlY3Rpb24uY29sbGVjdGlvblRyYXZlcnNlQmFja3dhcmQoKm1fY3Vy
cmVudE5vZGUsIG1fbm9kZUNvdW50IC0gaW5kZXggLSAxKTsKKyAgICAgICAgICAgIGNvbGxlY3Rp
b24uY29sbGVjdGlvblRyYXZlcnNlQmFja3dhcmQobV9jdXJyZW50LCBtX25vZGVDb3VudCAtIGlu
ZGV4IC0gMSk7CiAgICAgICAgIG1fY3VycmVudEluZGV4ID0gaW5kZXg7Ci0gICAgICAgIEFTU0VS
VChtX2N1cnJlbnROb2RlKTsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudE5vZGU7CisgICAgICAg
IEFTU0VSVChtX2N1cnJlbnQgIT0gY29sbGVjdGlvbi5jb2xsZWN0aW9uRW5kKCkpOworICAgICAg
ICByZXR1cm4gJiptX2N1cnJlbnQ7CiAgICAgfQogCi0gICAgaWYgKCFoYXNWYWxpZENhY2hlKCkp
CisgICAgaWYgKCFoYXNWYWxpZENhY2hlKGNvbGxlY3Rpb24pKQogICAgICAgICBjb2xsZWN0aW9u
LndpbGxWYWxpZGF0ZUluZGV4Q2FjaGUoKTsKIAogICAgIHVuc2lnbmVkIHRyYXZlcnNlZENvdW50
OwotICAgIG1fY3VycmVudE5vZGUgPSBjb2xsZWN0aW9uLmNvbGxlY3Rpb25UcmF2ZXJzZUZvcndh
cmQoKm1fY3VycmVudE5vZGUsIGluZGV4IC0gbV9jdXJyZW50SW5kZXgsIHRyYXZlcnNlZENvdW50
KTsKKyAgICBjb2xsZWN0aW9uLmNvbGxlY3Rpb25UcmF2ZXJzZUZvcndhcmQobV9jdXJyZW50LCBp
bmRleCAtIG1fY3VycmVudEluZGV4LCB0cmF2ZXJzZWRDb3VudCk7CiAgICAgbV9jdXJyZW50SW5k
ZXggPSBtX2N1cnJlbnRJbmRleCArIHRyYXZlcnNlZENvdW50OwogCi0gICAgQVNTRVJUKG1fY3Vy
cmVudE5vZGUgfHwgIG1fY3VycmVudEluZGV4IDwgaW5kZXgpOwotCi0gICAgaWYgKCFtX2N1cnJl
bnROb2RlICYmICFtX25vZGVDb3VudFZhbGlkKSB7CisgICAgaWYgKG1fY3VycmVudCA9PSBjb2xs
ZWN0aW9uLmNvbGxlY3Rpb25FbmQoKSkgeworICAgICAgICBBU1NFUlQobV9jdXJyZW50SW5kZXgg
PCBpbmRleCk7CiAgICAgICAgIC8vIEZhaWxlZCB0byBmaW5kIHRoZSBpbmRleCBidXQgYXQgbGVh
c3Qgd2Ugbm93IGtub3cgdGhlIHNpemUuCiAgICAgICAgIG1fbm9kZUNvdW50ID0gbV9jdXJyZW50
SW5kZXggKyAxOwogICAgICAgICBtX25vZGVDb3VudFZhbGlkID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgfQotICAgIEFTU0VSVChoYXNWYWxpZENhY2hlKCkpOwotICAgIHJl
dHVybiBtX2N1cnJlbnROb2RlOworICAgIEFTU0VSVChoYXNWYWxpZENhY2hlKGNvbGxlY3Rpb24p
KTsKKyAgICByZXR1cm4gJiptX2N1cnJlbnQ7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBDb2xsZWN0
aW9uLCBjbGFzcyBOb2RlVHlwZT4KLWlubGluZSBOb2RlVHlwZSogQ29sbGVjdGlvbkluZGV4Q2Fj
aGU8Q29sbGVjdGlvbiwgTm9kZVR5cGU+Ojpub2RlQXQoY29uc3QgQ29sbGVjdGlvbiYgY29sbGVj
dGlvbiwgdW5zaWduZWQgaW5kZXgpCit0ZW1wbGF0ZSA8Y2xhc3MgQ29sbGVjdGlvbiwgY2xhc3Mg
SXRlcmF0b3I+CitpbmxpbmUgdHlwZW5hbWUgQ29sbGVjdGlvbkluZGV4Q2FjaGU8Q29sbGVjdGlv
biwgSXRlcmF0b3I+OjpOb2RlVHlwZSogQ29sbGVjdGlvbkluZGV4Q2FjaGU8Q29sbGVjdGlvbiwg
SXRlcmF0b3I+Ojpub2RlQXQoY29uc3QgQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgdW5zaWduZWQg
aW5kZXgpCiB7CiAgICAgaWYgKG1fbm9kZUNvdW50VmFsaWQgJiYgaW5kZXggPj0gbV9ub2RlQ291
bnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTcyLDQ3ICsxNzMsNDkgQEAgaW5saW5l
IE5vZGVUeXBlKiBDb2xsZWN0aW9uSW5kZXhDYWNoZTxDbwogICAgIGlmIChtX2xpc3RWYWxpZCkK
ICAgICAgICAgcmV0dXJuIG1fY2FjaGVkTGlzdFtpbmRleF07CiAKLSAgICBpZiAobV9jdXJyZW50
Tm9kZSkgeworICAgIGF1dG8gZW5kID0gY29sbGVjdGlvbi5jb2xsZWN0aW9uRW5kKCk7CisgICAg
aWYgKG1fY3VycmVudCAhPSBlbmQpIHsKICAgICAgICAgaWYgKGluZGV4ID4gbV9jdXJyZW50SW5k
ZXgpCi0gICAgICAgICAgICByZXR1cm4gbm9kZUFmdGVyQ2FjaGVkKGNvbGxlY3Rpb24sIGluZGV4
KTsKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUZvcndhcmRUbyhjb2xsZWN0aW9uLCBpbmRl
eCk7CiAgICAgICAgIGlmIChpbmRleCA8IG1fY3VycmVudEluZGV4KQotICAgICAgICAgICAgcmV0
dXJuIG5vZGVCZWZvcmVDYWNoZWQoY29sbGVjdGlvbiwgaW5kZXgpOwotICAgICAgICByZXR1cm4g
bV9jdXJyZW50Tm9kZTsKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZUJhY2t3YXJkVG8oY29s
bGVjdGlvbiwgaW5kZXgpOworICAgICAgICByZXR1cm4gJiptX2N1cnJlbnQ7CiAgICAgfQogCiAg
ICAgYm9vbCBsYXN0SXNDbG9zZXIgPSBtX25vZGVDb3VudFZhbGlkICYmIG1fbm9kZUNvdW50IC0g
aW5kZXggPCBpbmRleDsKICAgICBpZiAobGFzdElzQ2xvc2VyICYmIGNvbGxlY3Rpb24uY29sbGVj
dGlvbkNhblRyYXZlcnNlQmFja3dhcmQoKSkgewotICAgICAgICBBU1NFUlQoaGFzVmFsaWRDYWNo
ZSgpKTsKLSAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGNvbGxlY3Rpb24uY29sbGVjdGlvbkxhc3Qo
KTsKKyAgICAgICAgQVNTRVJUKGhhc1ZhbGlkQ2FjaGUoY29sbGVjdGlvbikpOworICAgICAgICBt
X2N1cnJlbnQgPSBjb2xsZWN0aW9uLmNvbGxlY3Rpb25MYXN0KCk7CiAgICAgICAgIGlmIChpbmRl
eCA8IG1fbm9kZUNvdW50IC0gMSkKLSAgICAgICAgICAgIG1fY3VycmVudE5vZGUgPSBjb2xsZWN0
aW9uLmNvbGxlY3Rpb25UcmF2ZXJzZUJhY2t3YXJkKCptX2N1cnJlbnROb2RlLCBtX25vZGVDb3Vu
dCAtIGluZGV4IC0gMSk7CisgICAgICAgICAgICBjb2xsZWN0aW9uLmNvbGxlY3Rpb25UcmF2ZXJz
ZUJhY2t3YXJkKG1fY3VycmVudCwgbV9ub2RlQ291bnQgLSBpbmRleCAtIDEpOwogICAgICAgICBt
X2N1cnJlbnRJbmRleCA9IGluZGV4OwotICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZSk7Ci0g
ICAgICAgIHJldHVybiBtX2N1cnJlbnROb2RlOworICAgICAgICBBU1NFUlQobV9jdXJyZW50ICE9
IGVuZCk7CisgICAgICAgIHJldHVybiAmKm1fY3VycmVudDsKICAgICB9CiAKLSAgICBpZiAoIWhh
c1ZhbGlkQ2FjaGUoKSkKKyAgICBpZiAoIWhhc1ZhbGlkQ2FjaGUoY29sbGVjdGlvbikpCiAgICAg
ICAgIGNvbGxlY3Rpb24ud2lsbFZhbGlkYXRlSW5kZXhDYWNoZSgpOwogCi0gICAgbV9jdXJyZW50
Tm9kZSA9IGNvbGxlY3Rpb24uY29sbGVjdGlvbkZpcnN0KCk7CisgICAgbV9jdXJyZW50ID0gY29s
bGVjdGlvbi5jb2xsZWN0aW9uQmVnaW4oKTsKICAgICBtX2N1cnJlbnRJbmRleCA9IDA7Ci0gICAg
aWYgKGluZGV4ICYmIG1fY3VycmVudE5vZGUpIHsKLSAgICAgICAgbV9jdXJyZW50Tm9kZSA9IGNv
bGxlY3Rpb24uY29sbGVjdGlvblRyYXZlcnNlRm9yd2FyZCgqbV9jdXJyZW50Tm9kZSwgaW5kZXgs
IG1fY3VycmVudEluZGV4KTsKLSAgICAgICAgQVNTRVJUKG1fY3VycmVudE5vZGUgfHwgbV9jdXJy
ZW50SW5kZXggPCBpbmRleCk7CisgICAgaWYgKGluZGV4ICYmIG1fY3VycmVudCAhPSBlbmQpIHsK
KyAgICAgICAgY29sbGVjdGlvbi5jb2xsZWN0aW9uVHJhdmVyc2VGb3J3YXJkKG1fY3VycmVudCwg
aW5kZXgsIG1fY3VycmVudEluZGV4KTsKKyAgICAgICAgQVNTRVJUKG1fY3VycmVudCAhPSBlbmQg
fHwgbV9jdXJyZW50SW5kZXggPCBpbmRleCk7CiAgICAgfQotICAgIGlmICghbV9jdXJyZW50Tm9k
ZSAmJiAhbV9ub2RlQ291bnRWYWxpZCkgeworICAgIGlmIChtX2N1cnJlbnQgPT0gZW5kKSB7CiAg
ICAgICAgIC8vIEZhaWxlZCB0byBmaW5kIHRoZSBpbmRleCBidXQgYXQgbGVhc3Qgd2Ugbm93IGtu
b3cgdGhlIHNpemUuCiAgICAgICAgIG1fbm9kZUNvdW50ID0gbV9jdXJyZW50SW5kZXggKyAxOwog
ICAgICAgICBtX25vZGVDb3VudFZhbGlkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQotICAgIEFTU0VSVChoYXNWYWxpZENhY2hlKCkpOwotICAgIHJldHVybiBtX2N1cnJl
bnROb2RlOworICAgIEFTU0VSVChoYXNWYWxpZENhY2hlKGNvbGxlY3Rpb24pKTsKKyAgICByZXR1
cm4gJiptX2N1cnJlbnQ7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBDb2xsZWN0aW9uLCBjbGFzcyBO
b2RlVHlwZT4KLXZvaWQgQ29sbGVjdGlvbkluZGV4Q2FjaGU8Q29sbGVjdGlvbiwgTm9kZVR5cGU+
OjppbnZhbGlkYXRlKCkKK3RlbXBsYXRlIDxjbGFzcyBDb2xsZWN0aW9uLCBjbGFzcyBJdGVyYXRv
cj4KK3ZvaWQgQ29sbGVjdGlvbkluZGV4Q2FjaGU8Q29sbGVjdGlvbiwgSXRlcmF0b3I+OjppbnZh
bGlkYXRlKGNvbnN0IENvbGxlY3Rpb24mIGNvbGxlY3Rpb24pCiB7Ci0gICAgbV9jdXJyZW50Tm9k
ZSA9IG51bGxwdHI7CisgICAgbV9jdXJyZW50ID0gY29sbGVjdGlvbi5jb2xsZWN0aW9uRW5kKCk7
CiAgICAgbV9ub2RlQ291bnRWYWxpZCA9IGZhbHNlOwogICAgIG1fbGlzdFZhbGlkID0gZmFsc2U7
CiAgICAgbV9jYWNoZWRMaXN0LnNocmluaygwKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IuaAkocmV2aXNpb24gMTY2NDUzKQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnREZXNjZW5kYW50SXRlcmF0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMzksNiArMzksNyBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgRWxlbWVudERlc2NlbmRh
bnRJdGVyYXRvcihFbGVtZW50KiBjdXJyZW50KTsKIAogICAgIEVsZW1lbnREZXNjZW5kYW50SXRl
cmF0b3ImIG9wZXJhdG9yKysoKTsKKyAgICBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yJiBvcGVy
YXRvci0tKCk7CiAKICAgICBFbGVtZW50JiBvcGVyYXRvciooKTsKICAgICBFbGVtZW50KiBvcGVy
YXRvci0+KCk7CkBAIC04Miw2ICs4Myw3IEBAIHB1YmxpYzoKICAgICBFbGVtZW50RGVzY2VuZGFu
dEl0ZXJhdG9yQWRhcHRlcihDb250YWluZXJOb2RlJiByb290KTsKICAgICBFbGVtZW50RGVzY2Vu
ZGFudEl0ZXJhdG9yIGJlZ2luKCk7CiAgICAgRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvciBlbmQo
KTsKKyAgICBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yIGxhc3QoKTsKIAogcHJpdmF0ZToKICAg
ICBDb250YWluZXJOb2RlJiBtX3Jvb3Q7CkBAIC05Miw2ICs5NCw3IEBAIHB1YmxpYzoKICAgICBF
bGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3JBZGFwdGVyKGNvbnN0IENvbnRhaW5lck5vZGUm
IHJvb3QpOwogICAgIEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvciBiZWdpbigpIGNvbnN0
OwogICAgIEVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvciBlbmQoKSBjb25zdDsKKyAgICBF
bGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3IgbGFzdCgpIGNvbnN0OwogCiBwcml2YXRlOgog
ICAgIGNvbnN0IENvbnRhaW5lck5vZGUmIG1fcm9vdDsKQEAgLTE0NCw2ICsxNDcsNDAgQEAgQUxX
QVlTX0lOTElORSBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yJgogICAgIHJldHVybiAqdGhpczsK
IH0KIAorQUxXQVlTX0lOTElORSBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yJiBFbGVtZW50RGVz
Y2VuZGFudEl0ZXJhdG9yOjpvcGVyYXRvci0tKCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50KTsK
KyAgICBBU1NFUlQoIW1fYXNzZXJ0aW9ucy5kb21UcmVlSGFzTXV0YXRlZCgpKTsKKworICAgIEVs
ZW1lbnQqIHByZXZpb3VzU2libGluZyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzU2libGlu
ZyhtX2N1cnJlbnQpOworCisgICAgaWYgKCFwcmV2aW91c1NpYmxpbmcpIHsKKyAgICAgICAgbV9j
dXJyZW50ID0gbV9jdXJyZW50LT5wYXJlbnRFbGVtZW50KCk7CisgICAgICAgIC8vIFRoZSBzdGFj
ayBvcHRpbWl6ZXMgZm9yIGZvcndhcmQgdHJhdmVyc2FsIG9ubHksIHRoaXMganVzdCBtYWludGFp
bnMgY29uc2lzdGVuY3kuCisgICAgICAgIGlmIChtX2N1cnJlbnQtPm5leHRTaWJsaW5nKCkgPT0g
bV9hbmNlc3RvclNpYmxpbmdTdGFjay5sYXN0KCkpCisgICAgICAgICAgICBtX2FuY2VzdG9yU2li
bGluZ1N0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKwor
ICAgIEVsZW1lbnQqIGRlZXBlc3RTaWJsaW5nID0gcHJldmlvdXNTaWJsaW5nOworICAgIHdoaWxl
IChFbGVtZW50KiBsYXN0Q2hpbGQgPSBFbGVtZW50VHJhdmVyc2FsOjpsYXN0Q2hpbGQoZGVlcGVz
dFNpYmxpbmcpKQorICAgICAgICBkZWVwZXN0U2libGluZyA9IGxhc3RDaGlsZDsKKyAgICBBU1NF
UlQoZGVlcGVzdFNpYmxpbmcpOworCisgICAgaWYgKGRlZXBlc3RTaWJsaW5nICE9IHByZXZpb3Vz
U2libGluZykKKyAgICAgICAgbV9hbmNlc3RvclNpYmxpbmdTdGFjay5hcHBlbmQobV9jdXJyZW50
KTsKKworICAgIG1fY3VycmVudCA9IGRlZXBlc3RTaWJsaW5nOworCisjaWYgIUFTU0VSVF9ESVNB
QkxFRAorICAgIC8vIERyb3AgdGhlIGFzc2VydGlvbiB3aGVuIHRoZSBpdGVyYXRvciByZWFjaGVz
IHRoZSBlbmQuCisgICAgaWYgKCFtX2N1cnJlbnQpCisgICAgICAgIG1fYXNzZXJ0aW9ucy5kcm9w
RXZlbnREaXNwYXRjaEFzc2VydGlvbigpOworI2VuZGlmCisKKyAgICByZXR1cm4gKnRoaXM7Cit9
CisKIGlubGluZSBFbGVtZW50JiBFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yOjpvcGVyYXRvcioo
KQogewogICAgIEFTU0VSVChtX2N1cnJlbnQpOwpAQCAtMjU1LDYgKzI5MiwxMSBAQCBpbmxpbmUg
RWxlbWVudERlc2NlbmRhbnRJdGVyYXRvciBFbGVtZW50CiAgICAgcmV0dXJuIEVsZW1lbnREZXNj
ZW5kYW50SXRlcmF0b3IoKTsKIH0KIAoraW5saW5lIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3Ig
RWxlbWVudERlc2NlbmRhbnRJdGVyYXRvckFkYXB0ZXI6Omxhc3QoKQoreworICAgIHJldHVybiBF
bGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yKEVsZW1lbnRUcmF2ZXJzYWw6Omxhc3RXaXRoaW4oJm1f
cm9vdCkpOworfQorCiAvLyBFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3JBZGFwdGVyCiAK
IGlubGluZSBFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3JBZGFwdGVyOjpFbGVtZW50RGVz
Y2VuZGFudENvbnN0SXRlcmF0b3JBZGFwdGVyKGNvbnN0IENvbnRhaW5lck5vZGUmIHJvb3QpCkBA
IC0yNzIsNiArMzE0LDExIEBAIGlubGluZSBFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3Ig
RWwKICAgICByZXR1cm4gRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJhdG9yKCk7CiB9CiAKK2lu
bGluZSBFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3IgRWxlbWVudERlc2NlbmRhbnRDb25z
dEl0ZXJhdG9yQWRhcHRlcjo6bGFzdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEVsZW1lbnREZXNj
ZW5kYW50Q29uc3RJdGVyYXRvcihFbGVtZW50VHJhdmVyc2FsOjpsYXN0V2l0aGluKCZtX3Jvb3Qp
KTsKK30KKwogLy8gU3RhbmRhbG9uZSBmdW5jdGlvbnMKIAogaW5saW5lIEVsZW1lbnREZXNjZW5k
YW50SXRlcmF0b3JBZGFwdGVyIGVsZW1lbnREZXNjZW5kYW50cyhDb250YWluZXJOb2RlJiByb290
KQpAQCAtMjg2LDQgKzMzMywxMiBAQCBpbmxpbmUgRWxlbWVudERlc2NlbmRhbnRDb25zdEl0ZXJh
dG9yQWRhCiAKIH0KIAorbmFtZXNwYWNlIHN0ZCB7Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgaXRlcmF0
b3JfdHJhaXRzPFdlYkNvcmU6OkVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I+IHsKKyAgICB0eXBl
ZGVmIFdlYkNvcmU6OkVsZW1lbnQgdmFsdWVfdHlwZTsKK307Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
aXRlcmF0b3JfdHJhaXRzPFdlYkNvcmU6OkVsZW1lbnREZXNjZW5kYW50Q29uc3RJdGVyYXRvcj4g
eworICAgIHR5cGVkZWYgY29uc3QgV2ViQ29yZTo6RWxlbWVudCB2YWx1ZV90eXBlOworfTsKK30K
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0xpdmVOb2RlTGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9MaXZlTm9kZUxpc3QuaAkocmV2aXNpb24gMTY2NDUz
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0xpdmVOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiQ29sbGVjdGlvbkluZGV4Q2FjaGUuaCIKICNpbmNs
dWRlICJDb2xsZWN0aW9uVHlwZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAi
RWxlbWVudFRyYXZlcnNhbC5oIgorI2luY2x1ZGUgIkVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3Iu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC02OSw4ICs2OSw2IEBAIHByaXZhdGU6CiAKICAgICBDb250
YWluZXJOb2RlJiByb290Tm9kZSgpIGNvbnN0OwogCi0gICAgRWxlbWVudCogaXRlcmF0ZUZvclBy
ZXZpb3VzRWxlbWVudChFbGVtZW50KiBjdXJyZW50KSBjb25zdDsKLQogICAgIFJlZjxDb250YWlu
ZXJOb2RlPiBtX293bmVyTm9kZTsKIAogICAgIGNvbnN0IHVuc2lnbmVkIG1faW52YWxpZGF0aW9u
VHlwZTsKQEAgLTg2LDEwICs4NCwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBOb2RlKiBpdGVt
KHVuc2lnbmVkIG9mZnNldCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CiAKICAgICAvLyBGb3IgQ29s
bGVjdGlvbkluZGV4Q2FjaGUKLSAgICBFbGVtZW50KiBjb2xsZWN0aW9uRmlyc3QoKSBjb25zdDsK
LSAgICBFbGVtZW50KiBjb2xsZWN0aW9uTGFzdCgpIGNvbnN0OwotICAgIEVsZW1lbnQqIGNvbGxl
Y3Rpb25UcmF2ZXJzZUZvcndhcmQoRWxlbWVudCYsIHVuc2lnbmVkIGNvdW50LCB1bnNpZ25lZCYg
dHJhdmVyc2VkQ291bnQpIGNvbnN0OwotICAgIEVsZW1lbnQqIGNvbGxlY3Rpb25UcmF2ZXJzZUJh
Y2t3YXJkKEVsZW1lbnQmLCB1bnNpZ25lZCBjb3VudCkgY29uc3Q7CisgICAgRWxlbWVudERlc2Nl
bmRhbnRJdGVyYXRvciBjb2xsZWN0aW9uQmVnaW4oKSBjb25zdDsKKyAgICBFbGVtZW50RGVzY2Vu
ZGFudEl0ZXJhdG9yIGNvbGxlY3Rpb25MYXN0KCkgY29uc3Q7CisgICAgRWxlbWVudERlc2NlbmRh
bnRJdGVyYXRvciBjb2xsZWN0aW9uRW5kKCkgY29uc3QgeyByZXR1cm4gRWxlbWVudERlc2NlbmRh
bnRJdGVyYXRvcigpOyB9CisgICAgdm9pZCBjb2xsZWN0aW9uVHJhdmVyc2VGb3J3YXJkKEVsZW1l
bnREZXNjZW5kYW50SXRlcmF0b3ImLCB1bnNpZ25lZCBjb3VudCwgdW5zaWduZWQmIHRyYXZlcnNl
ZENvdW50KSBjb25zdDsKKyAgICB2b2lkIGNvbGxlY3Rpb25UcmF2ZXJzZUJhY2t3YXJkKEVsZW1l
bnREZXNjZW5kYW50SXRlcmF0b3ImLCB1bnNpZ25lZCBjb3VudCkgY29uc3Q7CiAgICAgYm9vbCBj
b2xsZWN0aW9uQ2FuVHJhdmVyc2VCYWNrd2FyZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAg
ICB2b2lkIHdpbGxWYWxpZGF0ZUluZGV4Q2FjaGUoKSBjb25zdDsKIApAQCAtMTAyLDcgKzEwMSw3
IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUoKSBj
b25zdDsKIAotICAgIG11dGFibGUgQ29sbGVjdGlvbkluZGV4Q2FjaGU8Tm9kZUxpc3RUeXBlLCBF
bGVtZW50PiBtX2luZGV4Q2FjaGU7CisgICAgbXV0YWJsZSBDb2xsZWN0aW9uSW5kZXhDYWNoZTxO
b2RlTGlzdFR5cGUsIEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3I+IG1faW5kZXhDYWNoZTsKIH07
CiAKIEFMV0FZU19JTkxJTkUgYm9vbCBzaG91bGRJbnZhbGlkYXRlVHlwZU9uQXR0cmlidXRlQ2hh
bmdlKE5vZGVMaXN0SW52YWxpZGF0aW9uVHlwZSB0eXBlLCBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSkKQEAgLTEzMiwxMyArMTMxLDE1IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBzaG91bGRJ
bnZhbGlkYXRlVHlwZU8KIHRlbXBsYXRlIDxjbGFzcyBOb2RlTGlzdFR5cGU+CiBDYWNoZWRMaXZl
Tm9kZUxpc3Q8Tm9kZUxpc3RUeXBlPjo6Q2FjaGVkTGl2ZU5vZGVMaXN0KENvbnRhaW5lck5vZGUm
IG93bmVyTm9kZSwgTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlIGludmFsaWRhdGlvblR5cGUpCiAg
ICAgOiBMaXZlTm9kZUxpc3Qob3duZXJOb2RlLCBpbnZhbGlkYXRpb25UeXBlKQorICAgICwgbV9p
bmRleENhY2hlKHN0YXRpY19jYXN0PE5vZGVMaXN0VHlwZSY+KCp0aGlzKSkKIHsKIH0KIAogdGVt
cGxhdGUgPGNsYXNzIE5vZGVMaXN0VHlwZT4KIENhY2hlZExpdmVOb2RlTGlzdDxOb2RlTGlzdFR5
cGU+Ojp+Q2FjaGVkTGl2ZU5vZGVMaXN0KCkKIHsKLSAgICBpZiAobV9pbmRleENhY2hlLmhhc1Zh
bGlkQ2FjaGUoKSkKKyAgICBhdXRvJiBub2RlTGlzdCA9IHN0YXRpY19jYXN0PGNvbnN0IE5vZGVM
aXN0VHlwZSY+KCp0aGlzKTsKKyAgICBpZiAobV9pbmRleENhY2hlLmhhc1ZhbGlkQ2FjaGUobm9k
ZUxpc3QpKQogICAgICAgICBkb2N1bWVudCgpLnVucmVnaXN0ZXJOb2RlTGlzdEZvckludmFsaWRh
dGlvbigqdGhpcyk7CiB9CiAKQEAgLTE1Miw2OCArMTUzLDYxIEBAIGlubGluZSBDb250YWluZXJO
b2RlJiBDYWNoZWRMaXZlTm9kZUxpc3QKIH0KIAogdGVtcGxhdGUgPGNsYXNzIE5vZGVMaXN0VHlw
ZT4KLUVsZW1lbnQqIENhY2hlZExpdmVOb2RlTGlzdDxOb2RlTGlzdFR5cGU+Ojpjb2xsZWN0aW9u
Rmlyc3QoKSBjb25zdAotewotICAgIGF1dG8mIHJvb3QgPSByb290Tm9kZSgpOwotICAgIEVsZW1l
bnQqIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpmaXJzdFdpdGhpbigmcm9vdCk7Ci0gICAg
d2hpbGUgKGVsZW1lbnQgJiYgIXN0YXRpY19jYXN0PGNvbnN0IE5vZGVMaXN0VHlwZSo+KHRoaXMp
LT5ub2RlTWF0Y2hlcyhlbGVtZW50KSkKLSAgICAgICAgZWxlbWVudCA9IEVsZW1lbnRUcmF2ZXJz
YWw6Om5leHQoZWxlbWVudCwgJnJvb3QpOwotICAgIHJldHVybiBlbGVtZW50OwotfQotCi10ZW1w
bGF0ZSA8Y2xhc3MgTm9kZUxpc3RUeXBlPgotRWxlbWVudCogQ2FjaGVkTGl2ZU5vZGVMaXN0PE5v
ZGVMaXN0VHlwZT46OmNvbGxlY3Rpb25MYXN0KCkgY29uc3QKK0VsZW1lbnREZXNjZW5kYW50SXRl
cmF0b3IgQ2FjaGVkTGl2ZU5vZGVMaXN0PE5vZGVMaXN0VHlwZT46OmNvbGxlY3Rpb25CZWdpbigp
IGNvbnN0CiB7Ci0gICAgYXV0byYgcm9vdCA9IHJvb3ROb2RlKCk7Ci0gICAgRWxlbWVudCogZWxl
bWVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Omxhc3RXaXRoaW4oJnJvb3QpOwotICAgIHdoaWxlIChl
bGVtZW50ICYmICFzdGF0aWNfY2FzdDxjb25zdCBOb2RlTGlzdFR5cGUqPih0aGlzKS0+bm9kZU1h
dGNoZXMoZWxlbWVudCkpCi0gICAgICAgIGVsZW1lbnQgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2
aW91cyhlbGVtZW50LCAmcm9vdCk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgYXV0byYgbm9k
ZUxpc3QgPSBzdGF0aWNfY2FzdDxjb25zdCBOb2RlTGlzdFR5cGUmPigqdGhpcyk7CisgICAgYXV0
byBkZXNjZW5kYW50cyA9IGVsZW1lbnREZXNjZW5kYW50cyhyb290Tm9kZSgpKTsKKyAgICBhdXRv
IGVuZCA9IGRlc2NlbmRhbnRzLmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IGRlc2NlbmRhbnRz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAobm9kZUxpc3Qubm9kZU1h
dGNoZXMoJippdCkpCisgICAgICAgICAgICByZXR1cm4gaXQ7CisgICAgfQorICAgIHJldHVybiBl
bmQ7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBOb2RlTGlzdFR5cGU+Ci1pbmxpbmUgRWxlbWVudCog
bmV4dE1hdGNoaW5nRWxlbWVudChjb25zdCBOb2RlTGlzdFR5cGUqIG5vZGVMaXN0LCBFbGVtZW50
KiBjdXJyZW50LCBDb250YWluZXJOb2RlJiByb290KQorRWxlbWVudERlc2NlbmRhbnRJdGVyYXRv
ciBDYWNoZWRMaXZlTm9kZUxpc3Q8Tm9kZUxpc3RUeXBlPjo6Y29sbGVjdGlvbkxhc3QoKSBjb25z
dAogewotICAgIGRvIHsKLSAgICAgICAgY3VycmVudCA9IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHQo
Y3VycmVudCwgJnJvb3QpOwotICAgIH0gd2hpbGUgKGN1cnJlbnQgJiYgIXN0YXRpY19jYXN0PGNv
bnN0IE5vZGVMaXN0VHlwZSo+KG5vZGVMaXN0KS0+bm9kZU1hdGNoZXMoY3VycmVudCkpOwotICAg
IHJldHVybiBjdXJyZW50OworICAgIGF1dG8mIG5vZGVMaXN0ID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
Tm9kZUxpc3RUeXBlJj4oKnRoaXMpOworICAgIGF1dG8gZGVzY2VuZGFudHMgPSBlbGVtZW50RGVz
Y2VuZGFudHMocm9vdE5vZGUoKSk7CisgICAgYXV0byBlbmQgPSBkZXNjZW5kYW50cy5lbmQoKTsK
KyAgICBmb3IgKGF1dG8gaXQgPSBkZXNjZW5kYW50cy5sYXN0KCk7IGl0ICE9IGVuZDsgLS1pdCkg
eworICAgICAgICBpZiAobm9kZUxpc3Qubm9kZU1hdGNoZXMoJippdCkpCisgICAgICAgICAgICBy
ZXR1cm4gaXQ7CisgICAgfQorICAgIHJldHVybiBlbmQ7CiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBO
b2RlTGlzdFR5cGU+Ci1FbGVtZW50KiBDYWNoZWRMaXZlTm9kZUxpc3Q8Tm9kZUxpc3RUeXBlPjo6
Y29sbGVjdGlvblRyYXZlcnNlRm9yd2FyZChFbGVtZW50JiBjdXJyZW50LCB1bnNpZ25lZCBjb3Vu
dCwgdW5zaWduZWQmIHRyYXZlcnNlZENvdW50KSBjb25zdAordm9pZCBDYWNoZWRMaXZlTm9kZUxp
c3Q8Tm9kZUxpc3RUeXBlPjo6Y29sbGVjdGlvblRyYXZlcnNlRm9yd2FyZChFbGVtZW50RGVzY2Vu
ZGFudEl0ZXJhdG9yJiBjdXJyZW50LCB1bnNpZ25lZCBjb3VudCwgdW5zaWduZWQmIHRyYXZlcnNl
ZENvdW50KSBjb25zdAogewotICAgIGF1dG8mIHJvb3QgPSByb290Tm9kZSgpOwotICAgIEVsZW1l
bnQqIGVsZW1lbnQgPSAmY3VycmVudDsKKyAgICBhdXRvJiBub2RlTGlzdCA9IHN0YXRpY19jYXN0
PGNvbnN0IE5vZGVMaXN0VHlwZSY+KCp0aGlzKTsKKyAgICBBU1NFUlQobm9kZUxpc3Qubm9kZU1h
dGNoZXMoJipjdXJyZW50KSk7CisgICAgYXV0byBlbmQgPSBjb2xsZWN0aW9uRW5kKCk7CiAgICAg
Zm9yICh0cmF2ZXJzZWRDb3VudCA9IDA7IHRyYXZlcnNlZENvdW50IDwgY291bnQ7ICsrdHJhdmVy
c2VkQ291bnQpIHsKLSAgICAgICAgZWxlbWVudCA9IG5leHRNYXRjaGluZ0VsZW1lbnQoc3RhdGlj
X2Nhc3Q8Y29uc3QgTm9kZUxpc3RUeXBlKj4odGhpcyksIGVsZW1lbnQsIHJvb3QpOwotICAgICAg
ICBpZiAoIWVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgZG8g
eworICAgICAgICAgICAgKytjdXJyZW50OworICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT0gZW5k
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSB3aGlsZSAoIW5vZGVMaXN0Lm5v
ZGVNYXRjaGVzKCYqY3VycmVudCkpOwogICAgIH0KLSAgICByZXR1cm4gZWxlbWVudDsKLX0KLQot
dGVtcGxhdGUgPGNsYXNzIE5vZGVMaXN0VHlwZT4KLWlubGluZSBFbGVtZW50KiBwcmV2aW91c01h
dGNoaW5nRWxlbWVudChjb25zdCBOb2RlTGlzdFR5cGUqIG5vZGVMaXN0LCBFbGVtZW50KiBjdXJy
ZW50LCBDb250YWluZXJOb2RlJiByb290KQotewotICAgIGRvIHsKLSAgICAgICAgY3VycmVudCA9
IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzKGN1cnJlbnQsICZyb290KTsKLSAgICB9IHdoaWxl
IChjdXJyZW50ICYmICFub2RlTGlzdC0+bm9kZU1hdGNoZXMoY3VycmVudCkpOwotICAgIHJldHVy
biBjdXJyZW50OwogfQogCiB0ZW1wbGF0ZSA8Y2xhc3MgTm9kZUxpc3RUeXBlPgotRWxlbWVudCog
Q2FjaGVkTGl2ZU5vZGVMaXN0PE5vZGVMaXN0VHlwZT46OmNvbGxlY3Rpb25UcmF2ZXJzZUJhY2t3
YXJkKEVsZW1lbnQmIGN1cnJlbnQsIHVuc2lnbmVkIGNvdW50KSBjb25zdAordm9pZCBDYWNoZWRM
aXZlTm9kZUxpc3Q8Tm9kZUxpc3RUeXBlPjo6Y29sbGVjdGlvblRyYXZlcnNlQmFja3dhcmQoRWxl
bWVudERlc2NlbmRhbnRJdGVyYXRvciYgY3VycmVudCwgdW5zaWduZWQgY291bnQpIGNvbnN0CiB7
Ci0gICAgYXV0byYgcm9vdCA9IHJvb3ROb2RlKCk7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9ICZj
dXJyZW50OworICAgIGF1dG8mIG5vZGVMaXN0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgTm9kZUxpc3RU
eXBlJj4oKnRoaXMpOworICAgIEFTU0VSVChub2RlTGlzdC5ub2RlTWF0Y2hlcygmKmN1cnJlbnQp
KTsKKyAgICBhdXRvIGVuZCA9IGNvbGxlY3Rpb25FbmQoKTsKICAgICBmb3IgKDsgY291bnQ7IC0t
Y291bnQpIHsKLSAgICAgICAgZWxlbWVudCA9IHByZXZpb3VzTWF0Y2hpbmdFbGVtZW50KHN0YXRp
Y19jYXN0PGNvbnN0IE5vZGVMaXN0VHlwZSo+KHRoaXMpLCBlbGVtZW50LCByb290KTsKLSAgICAg
ICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGRv
IHsKKyAgICAgICAgICAgIC0tY3VycmVudDsKKyAgICAgICAgICAgIGlmIChjdXJyZW50ID09IGVu
ZCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gd2hpbGUgKCFub2RlTGlzdC5u
b2RlTWF0Y2hlcygmKmN1cnJlbnQpKTsKICAgICB9Ci0gICAgcmV0dXJuIGVsZW1lbnQ7CiB9CisK
IHRlbXBsYXRlIDxjbGFzcyBOb2RlTGlzdFR5cGU+CiB2b2lkIENhY2hlZExpdmVOb2RlTGlzdDxO
b2RlTGlzdFR5cGU+Ojp3aWxsVmFsaWRhdGVJbmRleENhY2hlKCkgY29uc3QKIHsKQEAgLTIyMywx
MCArMjE3LDExIEBAIHZvaWQgQ2FjaGVkTGl2ZU5vZGVMaXN0PE5vZGVMaXN0VHlwZT46OncKIHRl
bXBsYXRlIDxjbGFzcyBOb2RlTGlzdFR5cGU+CiB2b2lkIENhY2hlZExpdmVOb2RlTGlzdDxOb2Rl
TGlzdFR5cGU+OjppbnZhbGlkYXRlQ2FjaGUoRG9jdW1lbnQmIGRvY3VtZW50KSBjb25zdAogewot
ICAgIGlmICghbV9pbmRleENhY2hlLmhhc1ZhbGlkQ2FjaGUoKSkKKyAgICBhdXRvJiBub2RlTGlz
dCA9IHN0YXRpY19jYXN0PGNvbnN0IE5vZGVMaXN0VHlwZSY+KCp0aGlzKTsKKyAgICBpZiAoIW1f
aW5kZXhDYWNoZS5oYXNWYWxpZENhY2hlKG5vZGVMaXN0KSkKICAgICAgICAgcmV0dXJuOwotICAg
IGRvY3VtZW50LnVucmVnaXN0ZXJOb2RlTGlzdEZvckludmFsaWRhdGlvbihjb25zdF9jYXN0PE5v
ZGVMaXN0VHlwZSY+KHN0YXRpY19jYXN0PGNvbnN0IE5vZGVMaXN0VHlwZSY+KCp0aGlzKSkpOwot
ICAgIG1faW5kZXhDYWNoZS5pbnZhbGlkYXRlKCk7CisgICAgZG9jdW1lbnQudW5yZWdpc3Rlck5v
ZGVMaXN0Rm9ySW52YWxpZGF0aW9uKGNvbnN0X2Nhc3Q8Tm9kZUxpc3RUeXBlJj4obm9kZUxpc3Qp
KTsKKyAgICBtX2luZGV4Q2FjaGUuaW52YWxpZGF0ZShub2RlTGlzdCk7CiB9CiAKIHRlbXBsYXRl
IDxjbGFzcyBOb2RlTGlzdFR5cGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xs
ZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0
aW9uLmNwcAkocmV2aXNpb24gMTY2NDUzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29s
bGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw2ICsxMzMsNyBAQCBzdGF0aWMgTm9k
ZUxpc3RJbnZhbGlkYXRpb25UeXBlIGludmFsaWRhCiAKIEhUTUxDb2xsZWN0aW9uOjpIVE1MQ29s
bGVjdGlvbihDb250YWluZXJOb2RlJiBvd25lck5vZGUsIENvbGxlY3Rpb25UeXBlIHR5cGUsIEVs
ZW1lbnRUcmF2ZXJzYWxUeXBlIHRyYXZlcnNhbFR5cGUpCiAgICAgOiBtX293bmVyTm9kZShvd25l
ck5vZGUpCisgICAgLCBtX2luZGV4Q2FjaGUoKnRoaXMpCiAgICAgLCBtX2NvbGxlY3Rpb25UeXBl
KHR5cGUpCiAgICAgLCBtX2ludmFsaWRhdGlvblR5cGUoaW52YWxpZGF0aW9uVHlwZUV4Y2x1ZGlu
Z0lkQW5kTmFtZUF0dHJpYnV0ZXModHlwZSkpCiAgICAgLCBtX3Jvb3RUeXBlKHJvb3RUeXBlRnJv
bUNvbGxlY3Rpb25UeXBlKHR5cGUpKQpAQCAtMTUxLDcgKzE1Miw3IEBAIFBhc3NSZWZQdHI8SFRN
TENvbGxlY3Rpb24+IEhUTUxDb2xsZWN0aW8KIAogSFRNTENvbGxlY3Rpb246On5IVE1MQ29sbGVj
dGlvbigpCiB7Ci0gICAgaWYgKG1faW5kZXhDYWNoZS5oYXNWYWxpZENhY2hlKCkpCisgICAgaWYg
KG1faW5kZXhDYWNoZS5oYXNWYWxpZENhY2hlKCp0aGlzKSkKICAgICAgICAgZG9jdW1lbnQoKS51
bnJlZ2lzdGVyQ29sbGVjdGlvbigqdGhpcyk7CiAgICAgaWYgKGhhc05hbWVkRWxlbWVudENhY2hl
KCkpCiAgICAgICAgIGRvY3VtZW50KCkuY29sbGVjdGlvbldpbGxDbGVhcklkTmFtZU1hcCgqdGhp
cyk7CkBAIC0zMzAsNyArMzMxLDcgQEAgaW5saW5lIEVsZW1lbnQqIEhUTUxDb2xsZWN0aW9uOjp0
cmF2ZXJzZQogICAgIHJldHVybiBlbGVtZW50OwogfQogCi1FbGVtZW50KiBIVE1MQ29sbGVjdGlv
bjo6Y29sbGVjdGlvbkZpcnN0KCkgY29uc3QKK0VsZW1lbnQqIEhUTUxDb2xsZWN0aW9uOjpjb2xs
ZWN0aW9uQmVnaW4oKSBjb25zdAogewogICAgIHJldHVybiBmaXJzdEVsZW1lbnQocm9vdE5vZGUo
KSk7CiB9CkBAIC0zNDMsMzEgKzM0NCwyOSBAQCBFbGVtZW50KiBIVE1MQ29sbGVjdGlvbjo6Y29s
bGVjdGlvbkxhc3QoCiAgICAgcmV0dXJuIGl0ZXJhdGVGb3JQcmV2aW91c0VsZW1lbnQobGFzdCk7
CiB9CiAKLUVsZW1lbnQqIEhUTUxDb2xsZWN0aW9uOjpjb2xsZWN0aW9uVHJhdmVyc2VGb3J3YXJk
KEVsZW1lbnQmIGN1cnJlbnQsIHVuc2lnbmVkIGNvdW50LCB1bnNpZ25lZCYgdHJhdmVyc2VkQ291
bnQpIGNvbnN0Cit2b2lkIEhUTUxDb2xsZWN0aW9uOjpjb2xsZWN0aW9uVHJhdmVyc2VGb3J3YXJk
KEVsZW1lbnQqJiBjdXJyZW50LCB1bnNpZ25lZCBjb3VudCwgdW5zaWduZWQmIHRyYXZlcnNlZENv
dW50KSBjb25zdAogewotICAgIHJldHVybiB0cmF2ZXJzZUZvcndhcmQoY3VycmVudCwgY291bnQs
IHRyYXZlcnNlZENvdW50LCByb290Tm9kZSgpKTsKKyAgICBjdXJyZW50ID0gdHJhdmVyc2VGb3J3
YXJkKCpjdXJyZW50LCBjb3VudCwgdHJhdmVyc2VkQ291bnQsIHJvb3ROb2RlKCkpOwogfQogCi1F
bGVtZW50KiBIVE1MQ29sbGVjdGlvbjo6Y29sbGVjdGlvblRyYXZlcnNlQmFja3dhcmQoRWxlbWVu
dCYgY3VycmVudCwgdW5zaWduZWQgY291bnQpIGNvbnN0Cit2b2lkIEhUTUxDb2xsZWN0aW9uOjpj
b2xsZWN0aW9uVHJhdmVyc2VCYWNrd2FyZChFbGVtZW50KiYgY3VycmVudCwgdW5zaWduZWQgY291
bnQpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIG9wdGltaXplZCBzaW1p
bGFybHkgdG8gdGhlIGZvcndhcmQgY2FzZS4KICAgICBhdXRvJiByb290ID0gcm9vdE5vZGUoKTsK
LSAgICBFbGVtZW50KiBlbGVtZW50ID0gJmN1cnJlbnQ7CiAgICAgaWYgKG1fc2hvdWxkT25seUlu
Y2x1ZGVEaXJlY3RDaGlsZHJlbikgewotICAgICAgICBmb3IgKDsgY291bnQgJiYgZWxlbWVudCA7
IC0tY291bnQpCi0gICAgICAgICAgICBlbGVtZW50ID0gaXRlcmF0ZUZvclByZXZpb3VzRWxlbWVu
dChFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c1NpYmxpbmcoZWxlbWVudCkpOwotICAgICAgICBy
ZXR1cm4gZWxlbWVudDsKKyAgICAgICAgZm9yICg7IGNvdW50ICYmIGN1cnJlbnQgOyAtLWNvdW50
KQorICAgICAgICAgICAgY3VycmVudCA9IGl0ZXJhdGVGb3JQcmV2aW91c0VsZW1lbnQoRWxlbWVu
dFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKGN1cnJlbnQpKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICBmb3IgKDsgY291bnQgJiYgZWxlbWVudCA7IC0tY291bnQpCi0gICAgICAgIGVs
ZW1lbnQgPSBpdGVyYXRlRm9yUHJldmlvdXNFbGVtZW50KEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZp
b3VzKGVsZW1lbnQsICZyb290KSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgZm9yICg7IGNv
dW50ICYmIGN1cnJlbnQgOyAtLWNvdW50KQorICAgICAgICBjdXJyZW50ID0gaXRlcmF0ZUZvclBy
ZXZpb3VzRWxlbWVudChFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91cyhjdXJyZW50LCAmcm9vdCkp
OwogfQogCiB2b2lkIEhUTUxDb2xsZWN0aW9uOjppbnZhbGlkYXRlQ2FjaGUoRG9jdW1lbnQmIGRv
Y3VtZW50KSBjb25zdAogewotICAgIGlmIChtX2luZGV4Q2FjaGUuaGFzVmFsaWRDYWNoZSgpKSB7
CisgICAgaWYgKG1faW5kZXhDYWNoZS5oYXNWYWxpZENhY2hlKCp0aGlzKSkgewogICAgICAgICBk
b2N1bWVudC51bnJlZ2lzdGVyQ29sbGVjdGlvbihjb25zdF9jYXN0PEhUTUxDb2xsZWN0aW9uJj4o
KnRoaXMpKTsKLSAgICAgICAgbV9pbmRleENhY2hlLmludmFsaWRhdGUoKTsKKyAgICAgICAgbV9p
bmRleENhY2hlLmludmFsaWRhdGUoKnRoaXMpOwogICAgIH0KICAgICBpZiAoaGFzTmFtZWRFbGVt
ZW50Q2FjaGUoKSkKICAgICAgICAgaW52YWxpZGF0ZU5hbWVkRWxlbWVudENhY2hlKGRvY3VtZW50
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDE2NjQ1
MykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMTE4LDEwICsxMTgsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlk
YXRlQ2FjaGUoRG9jdW1lbnQmKSBjb25zdDsKIAogICAgIC8vIEZvciBDb2xsZWN0aW9uSW5kZXhD
YWNoZQotICAgIEVsZW1lbnQqIGNvbGxlY3Rpb25GaXJzdCgpIGNvbnN0OworICAgIEVsZW1lbnQq
IGNvbGxlY3Rpb25CZWdpbigpIGNvbnN0OwogICAgIEVsZW1lbnQqIGNvbGxlY3Rpb25MYXN0KCkg
Y29uc3Q7Ci0gICAgRWxlbWVudCogY29sbGVjdGlvblRyYXZlcnNlRm9yd2FyZChFbGVtZW50Jiwg
dW5zaWduZWQgY291bnQsIHVuc2lnbmVkJiB0cmF2ZXJzZWRDb3VudCkgY29uc3Q7Ci0gICAgRWxl
bWVudCogY29sbGVjdGlvblRyYXZlcnNlQmFja3dhcmQoRWxlbWVudCYsIHVuc2lnbmVkIGNvdW50
KSBjb25zdDsKKyAgICBFbGVtZW50KiBjb2xsZWN0aW9uRW5kKCkgY29uc3QgeyByZXR1cm4gbnVs
bHB0cjsgfQorICAgIHZvaWQgY29sbGVjdGlvblRyYXZlcnNlRm9yd2FyZChFbGVtZW50KiYsIHVu
c2lnbmVkIGNvdW50LCB1bnNpZ25lZCYgdHJhdmVyc2VkQ291bnQpIGNvbnN0OworICAgIHZvaWQg
Y29sbGVjdGlvblRyYXZlcnNlQmFja3dhcmQoRWxlbWVudComLCB1bnNpZ25lZCBjb3VudCkgY29u
c3Q7CiAgICAgYm9vbCBjb2xsZWN0aW9uQ2FuVHJhdmVyc2VCYWNrd2FyZCgpIGNvbnN0IHsgcmV0
dXJuICFtX3VzZXNDdXN0b21Gb3J3YXJkT25seVRyYXZlcnNhbDsgfQogICAgIHZvaWQgd2lsbFZh
bGlkYXRlSW5kZXhDYWNoZSgpIGNvbnN0IHsgZG9jdW1lbnQoKS5yZWdpc3RlckNvbGxlY3Rpb24o
Y29uc3RfY2FzdDxIVE1MQ29sbGVjdGlvbiY+KCp0aGlzKSk7IH0KIApAQCAtMTY0LDcgKzE2NSw3
IEBAIHByaXZhdGU6CiAKICAgICBSZWY8Q29udGFpbmVyTm9kZT4gbV9vd25lck5vZGU7CiAKLSAg
ICBtdXRhYmxlIENvbGxlY3Rpb25JbmRleENhY2hlPEhUTUxDb2xsZWN0aW9uLCBFbGVtZW50PiBt
X2luZGV4Q2FjaGU7CisgICAgbXV0YWJsZSBDb2xsZWN0aW9uSW5kZXhDYWNoZTxIVE1MQ29sbGVj
dGlvbiwgRWxlbWVudCo+IG1faW5kZXhDYWNoZTsKICAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0
cjxDb2xsZWN0aW9uTmFtZWRFbGVtZW50Q2FjaGU+IG1fbmFtZWRFbGVtZW50Q2FjaGU7CiAKICAg
ICBjb25zdCB1bnNpZ25lZCBtX2NvbGxlY3Rpb25UeXBlIDogNTsK
</data>
<flag name="review"
          id="252384"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>