<?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>103364</bug_id>
          
          <creation_ts>2012-11-26 22:08:30 -0800</creation_ts>
          <short_desc>HTMLCollection on Document should be stored on NodeListsNodeData like other HTMLCollections and LiveNodeLists</short_desc>
          <delta_ts>2012-11-27 12:17:36 -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>New Bugs</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>
          
          <blocked>78909</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>andersca</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>koivisto</cc>
    
    <cc>mifenton</cc>
    
    <cc>ojan</cc>
    
    <cc>sam</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>776336</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-26 22:08:30 -0800</bug_when>
    <thetext>HTMLCollection on Document should use NodeRareData like other HTMLCollection and LiveNodeList</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776474</commentid>
    <comment_count>1</comment_count>
      <attachid>176196</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-27 01:31:41 -0800</bug_when>
    <thetext>Created attachment 176196
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777019</commentid>
    <comment_count>2</comment_count>
      <attachid>176196</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-27 11:27:21 -0800</bug_when>
    <thetext>Comment on attachment 176196
Cleanup

Oh, oops. This changelog contains the old bug title :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777066</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-27 11:59:24 -0800</bug_when>
    <thetext>Committed r135893: &lt;http://trac.webkit.org/changeset/135893&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777097</commentid>
    <comment_count>4</comment_count>
      <attachid>176196</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-11-27 12:14:56 -0800</bug_when>
    <thetext>Comment on attachment 176196
Cleanup

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

&gt; Source/WebCore/dom/NodeRareData.h:79
&gt; +    PassRefPtr&lt;T&gt; addCacheWithAtomicName(Node* node, CollectionType collectionType)

Could this have been ContainerNode* across the board instead of Node*?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777101</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-11-27 12:17:36 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 176196 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=176196&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/NodeRareData.h:79
&gt; &gt; +    PassRefPtr&lt;T&gt; addCacheWithAtomicName(Node* node, CollectionType collectionType)
&gt; 
&gt; Could this have been ContainerNode* across the board instead of Node*?

No. Some addCacheWithAtomicName callers are member functions of Node. It is true that all owner nodes are ContainerNode since they’re either Document, Element, or ShadowRoot but we probably need to move all those member functions from Node to ContainerNode in order to change the type. Otherwise, we’ll be doing a lot of const_casts, which isn’t particularly better than the current code IMO.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176196</attachid>
            <date>2012-11-27 01:31:41 -0800</date>
            <delta_ts>2012-11-27 12:14:56 -0800</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-103364-20121127012924.patch</filename>
            <type>text/plain</type>
            <size>37196</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNTgyOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBACisyMDEyLTExLTI3ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEhUTUxDb2xsZWN0aW9uIG9uIERv
Y3VtZW50IHNob3VsZCB1c2UgTm9kZVJhcmVEYXRhIGxpa2Ugb3RoZXIgSFRNTENvbGxlY3Rpb24g
YW5kIExpdmVOb2RlTGlzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTAzMzY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVwbGFjZWQgdGhlIEhUTUxDb2xsZWN0aW9uIHN0b3JhZ2UgaW4gRG9jdW1lbnQg
YnkgTm9kZUxpc3RzTm9kZURhdGEgdXNlZCBieSBvdGhlciBIVE1MQ29sbGVjdGlvbidzCisgICAg
ICAgIGFuZCBMaXZlTm9kZUxpc3Qncy4gTm93IE5vZGVMaXN0c05vZGVEYXRhIGlzIHRoZSBvbmx5
IHN0b3JhZ2UgZm9yIEhUTUxDb2xsZWN0aW9uIGFuZCBMaXZlTm9kZUxpc3QuCisKKyAgICAgICAg
KiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OkRvY3VtZW50
KTogUmVtb3ZlZCBjb2RlIGZvciBtX2NvbGxlY3Rpb24gc2luY2UgaXQgaGFzIGJlZW4gcmVtb3Zl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp+RG9jdW1lbnQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZWdpc3Rlck5vZGVMaXN0KTogUmVuYW1lZC4gCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dW5yZWdpc3Rlck5vZGVMaXN0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZW5zdXJlQ2FjaGVkQ29sbGVjdGlvbik6IFJlbmFtZWQg
ZnJvbSBjYWNoZWRDb2xsZWN0aW9uIHRvIG1hdGNoIHRoZSBjb252ZXRpb24KKyAgICAgICAgdXNl
ZCBlbHNld2hlcmUuIEFsc28gdXNlIE5vZGVMaXN0Tm9kZURhdGE6OmFkZENhY2hlV2l0aEF0b21p
Y05hbWUgbm93IHRoYXQgbV9jb2xsZWN0aW9uIGlzIGdvbmUuCisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudDo6aW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjphcHBsZXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjplbWJlZHMpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnBsdWdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNjcmlwdHMp
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmxpbmtzKToKKyAgICAgICAgKFdlYkNvcmU6
OkRvY3VtZW50Ojpmb3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YW5jaG9ycyk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWxsKToKKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50Ojp3aW5kb3dOYW1lZEl0ZW1zKTogVXNlIGFkZENhY2hlV2l0aEF0b21pY05hbWUuCisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZG9jdW1lbnROYW1lZEl0ZW1zKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVwb3J0TWVtb3J5VXNhZ2UpOiBSZW1vdmVkIGNv
ZGUgZm9yIG1fY29sbGVjdGlvbiBzaW5jZSBpdCBoYXMgYmVlbiByZW1vdmVkLgorICAgICAgICAq
IGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQpOiBSZW1vdmVkIG1f
Y29sbGVjdGlvbnMsIG1fZG9jdW1lbnROYW1lZEl0ZW1Db2xsZWN0aW9ucywgYW5kCisgICAgICAg
IG1fd2luZG93TmFtZWRJdGVtQ29sbGVjdGlvbnMuCisgICAgICAgICogZG9tL0VsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6ZW5zdXJlQ2FjaGVkSFRNTENvbGxlY3Rpb24p
OiBNZXJnZWQgRWxlbWVudFJhcmVEYXRhOjplbnN1cmVDYWNoZWRIVE1MQ29sbGVjdGlvbi4KKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmNhY2hlZEhUTUxDb2xsZWN0aW9uKTogTWVyZ2VkIEVs
ZW1lbnRSYXJlRGF0YTo6Y2FjaGVkSFRNTENvbGxlY3Rpb24uCisgICAgICAgICogU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oOiBSZW1vdmVkIGVuc3VyZUNhY2hlZEhUTUxDb2xs
ZWN0aW9uLCBjYWNoZWRIVE1MQ29sbGVjdGlvbiwKKyAgICAgICAgYW5kIHJlbW92ZUNhY2hlZEhU
TUxDb2xsZWN0aW9uIHNpbmNlIHRoZXkncmUgbm8gbG9uZ2VyIHVzZWQuCisgICAgICAgICogZG9t
L0xpdmVOb2RlTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6TGl2ZU5vZGVMaXN0QmFzZTo6TGl2
ZU5vZGVMaXN0QmFzZSk6IENhbGwgcmVnaXN0ZXJOb2RlTGlzdCBub3cgdGhhdCBMaXZlTm9kZUxp
c3QKKyAgICAgICAgYW5kIEhUTUxDb2xsZWN0aW9uIHNoYXJlIHRoZSBzYW1lIHN0b3JhZ2UgaW4g
YWxsIG5vZGVzLgorICAgICAgICAoV2ViQ29yZTo6TGl2ZU5vZGVMaXN0QmFzZTo6fkxpdmVOb2Rl
TGlzdEJhc2UpOiBEaXR0byBhYm91dCB1bnJlZ2lzdGVyTm9kZUxpc3QuCisgICAgICAgIChXZWJD
b3JlOjpMaXZlTm9kZUxpc3QpOiBSZW1vdmVkIHRoZSBjYWxscyB0byByZWdpc3Rlck5vZGVMaXN0
IGFuZCB1bnJlZ2lzdGVyTm9kZUxpc3Qgc2luY2UgdGhleQorICAgICAgICBhcmUgbm93IGNhbGxl
ZCBpbiB0aGUgYmFzZSBjbGFzcy4KKyAgICAgICAgKiBkb20vTmFtZU5vZGVMaXN0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpOYW1lTm9kZUxpc3Q6OmNyZWF0ZSk6CisgICAgICAgICogZG9tL05vZGVS
YXJlRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURhdGE6OmFkZENhY2hl
V2l0aEF0b21pY05hbWUpOiBQYXNzIGluIENvbGxlY3Rpb25UeXBlIGFzIHRoZSBzZWNvbmQgYXJn
dW1lbnQKKyAgICAgICAgdG8gVDo6Y3JlYXRlLiBUaGlzIGlzIHVzZWQgaW4gSFRNTE5hbWVDb2xs
ZWN0aW9uOjpjcmVhdGUuIFNldmVhcmwgTGl2ZU5vZGVMaXN0IGNvbnN0cnVjdG9ycyBhbmQKKyAg
ICAgICAgY3JlYXRlIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbW9kaWZpZWQgdG8gc3VwcG9ydCB0aGlz
LgorICAgICAgICAoV2ViQ29yZTo6Tm9kZUxpc3RzTm9kZURhdGE6OmFkb3B0VHJlZVNjb3BlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok5vZGVMaXN0c05vZGVEYXRhOjpuYW1lZE5vZGVMaXN0S2V5KTog
Q29sbGVjdGlvblR5cGUgaXMgbm8gbG9uZ2VyIHJlc3RyaWN0ZWQgaW4gaXRzIHJhbmdlLgorICAg
ICAgICAqIGRvbS9UYWdOb2RlTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6VGFnTm9kZUxpc3Q6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFnTm9kZUxpc3Q6OmNyZWF0ZSk6Cisg
ICAgICAgICogaHRtbC9Db2xsZWN0aW9uVHlwZS5oOiBEZWxldGVkIGEgYnVuY2ggb2YgdW51c2Vk
IGlubGluZSBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cywgYW5kIGNsZWFudXAgZW51bS4KKyAgICAg
ICAgKiBodG1sL0hUTUxDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xs
ZWN0aW9uOjpIVE1MQ29sbGVjdGlvbik6IFJlbW92ZWQgdGhlIGNhbGwgdG8gcmVnaXN0ZXJOb2Rl
TGlzdENhY2hlIHNpbmNlIGl0J3MgY2FsbGVkCisgICAgICAgIGluIExpdmVOb2RlTGlzdEJhc2Ug
bm93LgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246On5IVE1MQ29sbGVjdGlvbik6
IERpdHRvLiBBbHNvIHJlcGxhY2VkIGNhbGxzIHRvIHJlbW92ZUNhY2hlZEhUTUxDb2xsZWN0aW9u
CisgICAgICAgIG9mIEVsZW1lbnQgYW5kIERvY3VtZW50IGJ5IGEgY2FsbCB0byBOb2RlTGlzdHNO
b2RlRGF0YTo6cmVtb3ZlQ2FjaGVXaXRoQXRvbWljTmFtZS4KKyAgICAgICAgKiBodG1sL0hUTUxG
b3JtQ29udHJvbHNDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29u
dHJvbHNDb2xsZWN0aW9uOjpIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBo
dG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmg6CisgICAgICAgIChIVE1MRm9ybUNvbnRy
b2xzQ29sbGVjdGlvbik6CisgICAgICAgICogaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE5hbWVDb2xsZWN0aW9uOjpIVE1MTmFtZUNvbGxlY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE5hbWVDb2xsZWN0aW9uOjp+SFRNTE5hbWVDb2xsZWN0
aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5oOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE5hbWVDb2xsZWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoSFRNTE5hbWVDb2xs
ZWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uc0NvbGxlY3Rpb246OkhUTUxPcHRpb25zQ29sbGVjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT3B0aW9uc0NvbGxlY3Rpb246OmNyZWF0ZSk6Cisg
ICAgICAgICogaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaDoKKyAgICAgICAgKEhUTUxPcHRp
b25zQ29sbGVjdGlvbik6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6SFRNTFRhYmxl
Um93c0NvbGxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlUm93c0NvbGxlY3Rp
b246OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5oOgor
ICAgICAgICAoSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24pOgorICAgICAgICAqIGh0bWwvTGFiZWxz
Tm9kZUxpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxhYmVsc05vZGVMaXN0OjpjcmVhdGUpOgor
ICAgICAgICAqIGh0bWwvUmFkaW9Ob2RlTGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmFkaW9O
b2RlTGlzdDo6Y3JlYXRlKToKKwogMjAxMi0xMS0yNiAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgOnJlYWQtb25seSBzZWxlY3RvciBzaG91bGQgbWF0Y2ggdG8g
ZGF0ZS90aW1lIGlucHV0IHR5cGVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlz
aW9uIDEzNTY3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU3MSw5ICs1NzEsNiBAQCBEb2N1bWVudDo6RG9jdW1lbnQoRnJhbWUqIGZyYW1l
LCBjb25zdCBLCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgo
bV9ub2RlTGlzdENvdW50cyk7IGkrKykKICAgICAgICAgbV9ub2RlTGlzdENvdW50c1tpXSA9IDA7
CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChtX2NvbGxl
Y3Rpb25zKTsgaSsrKQotICAgICAgICBtX2NvbGxlY3Rpb25zW2ldID0gMDsKLQogICAgIEluc3Bl
Y3RvckNvdW50ZXJzOjppbmNyZW1lbnRDb3VudGVyKEluc3BlY3RvckNvdW50ZXJzOjpEb2N1bWVu
dENvdW50ZXIpOwogfQogCkBAIC02NjksOSArNjY2LDYgQEAgRG9jdW1lbnQ6On5Eb2N1bWVudCgp
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgobV9ub2RlTGlz
dENvdW50cyk7IGkrKykKICAgICAgICAgQVNTRVJUKCFtX25vZGVMaXN0Q291bnRzW2ldKTsKIAot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKG1fY29sbGVjdGlv
bnMpOyBpKyspCi0gICAgICAgIEFTU0VSVCghbV9jb2xsZWN0aW9uc1tpXSk7Ci0KICAgICBtX2Rv
Y3VtZW50ID0gMDsKIAogICAgIEluc3BlY3RvckNvdW50ZXJzOjpkZWNyZW1lbnRDb3VudGVyKElu
c3BlY3RvckNvdW50ZXJzOjpEb2N1bWVudENvdW50ZXIpOwpAQCAtMzQ1OSw3ICszNDUzLDcgQEAg
dm9pZCBEb2N1bWVudDo6c2V0Q1NTVGFyZ2V0KEVsZW1lbnQqIG4pCiAgICAgfQogfQogCi12b2lk
IERvY3VtZW50OjpyZWdpc3Rlck5vZGVMaXN0Q2FjaGUoTGl2ZU5vZGVMaXN0QmFzZSogbGlzdCkK
K3ZvaWQgRG9jdW1lbnQ6OnJlZ2lzdGVyTm9kZUxpc3QoTGl2ZU5vZGVMaXN0QmFzZSogbGlzdCkK
IHsKICAgICBpZiAobGlzdC0+aGFzSWROYW1lQ2FjaGUoKSkKICAgICAgICAgbV9ub2RlTGlzdENv
dW50c1tJbnZhbGlkYXRlT25JZE5hbWVBdHRyQ2hhbmdlXSsrOwpAQCAtMzQ2OCw3ICszNDYyLDcg
QEAgdm9pZCBEb2N1bWVudDo6cmVnaXN0ZXJOb2RlTGlzdENhY2hlKExpdgogICAgICAgICBtX2xp
c3RzSW52YWxpZGF0ZWRBdERvY3VtZW50LmFkZChsaXN0KTsKIH0KIAotdm9pZCBEb2N1bWVudDo6
dW5yZWdpc3Rlck5vZGVMaXN0Q2FjaGUoTGl2ZU5vZGVMaXN0QmFzZSogbGlzdCkKK3ZvaWQgRG9j
dW1lbnQ6OnVucmVnaXN0ZXJOb2RlTGlzdChMaXZlTm9kZUxpc3RCYXNlKiBsaXN0KQogewogICAg
IGlmIChsaXN0LT5oYXNJZE5hbWVDYWNoZSgpKQogICAgICAgICBtX25vZGVMaXN0Q291bnRzW0lu
dmFsaWRhdGVPbklkTmFtZUF0dHJDaGFuZ2VdLS07CkBAIC00MzM1LDEwNyArNDMyOSw2NSBAQCBi
b29sIERvY3VtZW50OjpoYXNTVkdSb290Tm9kZSgpIGNvbnN0CiAjZW5kaWYKIAogLy8gRklYTUU6
IFRoaXMgY2FjaGluZyBtZWNoYW5pc20gc2hvdWxkIGJlIG1lcmdlZCB0aGF0IG9mIExpdmVOb2Rl
TGlzdCBpbiBOb2RlUmFyZURhdGEuCi1QYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBEb2N1bWVu
dDo6Y2FjaGVkQ29sbGVjdGlvbihDb2xsZWN0aW9uVHlwZSB0eXBlKQotewotICAgIEFTU0VSVChz
dGF0aWNfY2FzdDx1bnNpZ25lZD4odHlwZSkgPCBOdW1Vbm5hbWVkRG9jdW1lbnRDYWNoZWRUeXBl
cyk7Ci0gICAgaWYgKG1fY29sbGVjdGlvbnNbdHlwZV0pCi0gICAgICAgIHJldHVybiBtX2NvbGxl
Y3Rpb25zW3R5cGVdOwotCi0gICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBjb2xsZWN0aW9uOwot
ICAgIGlmICh0eXBlID09IERvY0FsbCkKLSAgICAgICAgY29sbGVjdGlvbiA9IEhUTUxBbGxDb2xs
ZWN0aW9uOjpjcmVhdGUodGhpcyk7Ci0gICAgZWxzZQotICAgICAgICBjb2xsZWN0aW9uID0gSFRN
TENvbGxlY3Rpb246OmNyZWF0ZSh0aGlzLCB0eXBlKTsKLSAgICBtX2NvbGxlY3Rpb25zW3R5cGVd
ID0gY29sbGVjdGlvbi5nZXQoKTsKLQotICAgIHJldHVybiBjb2xsZWN0aW9uLnJlbGVhc2UoKTsK
LX0KLQotdm9pZCBEb2N1bWVudDo6cmVtb3ZlQ2FjaGVkSFRNTENvbGxlY3Rpb24oSFRNTENvbGxl
Y3Rpb24qIGNvbGxlY3Rpb24sIENvbGxlY3Rpb25UeXBlIHR5cGUpCitQYXNzUmVmUHRyPEhUTUxD
b2xsZWN0aW9uPiBEb2N1bWVudDo6ZW5zdXJlQ2FjaGVkQ29sbGVjdGlvbihDb2xsZWN0aW9uVHlw
ZSB0eXBlKQogewotICAgIEFTU0VSVF9VTlVTRUQoY29sbGVjdGlvbiwgbV9jb2xsZWN0aW9uc1t0
eXBlXSA9PSBjb2xsZWN0aW9uKTsKLSAgICBtX2NvbGxlY3Rpb25zW3R5cGVdID0gMDsKKyAgICBy
ZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKCktPmFkZENhY2hlV2l0aEF0
b21pY05hbWU8SFRNTENvbGxlY3Rpb24+KHRoaXMsIHR5cGUpOwogfQogCiBQYXNzUmVmUHRyPEhU
TUxDb2xsZWN0aW9uPiBEb2N1bWVudDo6aW1hZ2VzKCkKIHsKLSAgICByZXR1cm4gY2FjaGVkQ29s
bGVjdGlvbihEb2NJbWFnZXMpOworICAgIHJldHVybiBlbnN1cmVDYWNoZWRDb2xsZWN0aW9uKERv
Y0ltYWdlcyk7CiB9CiAKIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IERvY3VtZW50OjphcHBs
ZXRzKCkKIHsKLSAgICByZXR1cm4gY2FjaGVkQ29sbGVjdGlvbihEb2NBcHBsZXRzKTsKKyAgICBy
ZXR1cm4gZW5zdXJlQ2FjaGVkQ29sbGVjdGlvbihEb2NBcHBsZXRzKTsKIH0KIAogUGFzc1JlZlB0
cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmVtYmVkcygpCiB7Ci0gICAgcmV0dXJuIGNhY2hl
ZENvbGxlY3Rpb24oRG9jRW1iZWRzKTsKKyAgICByZXR1cm4gZW5zdXJlQ2FjaGVkQ29sbGVjdGlv
bihEb2NFbWJlZHMpOwogfQogCiBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBEb2N1bWVudDo6
cGx1Z2lucygpCiB7CiAgICAgLy8gVGhpcyBpcyBhbiBhbGlhcyBmb3IgZW1iZWRzKCkgcmVxdWly
ZWQgZm9yIHRoZSBKUyBET00gYmluZGluZ3MuCi0gICAgcmV0dXJuIGNhY2hlZENvbGxlY3Rpb24o
RG9jRW1iZWRzKTsKKyAgICByZXR1cm4gZW5zdXJlQ2FjaGVkQ29sbGVjdGlvbihEb2NFbWJlZHMp
OwogfQogCiBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBEb2N1bWVudDo6c2NyaXB0cygpCiB7
Ci0gICAgcmV0dXJuIGNhY2hlZENvbGxlY3Rpb24oRG9jU2NyaXB0cyk7CisgICAgcmV0dXJuIGVu
c3VyZUNhY2hlZENvbGxlY3Rpb24oRG9jU2NyaXB0cyk7CiB9CiAKIFBhc3NSZWZQdHI8SFRNTENv
bGxlY3Rpb24+IERvY3VtZW50OjpsaW5rcygpCiB7Ci0gICAgcmV0dXJuIGNhY2hlZENvbGxlY3Rp
b24oRG9jTGlua3MpOworICAgIHJldHVybiBlbnN1cmVDYWNoZWRDb2xsZWN0aW9uKERvY0xpbmtz
KTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmZvcm1zKCkKIHsK
LSAgICByZXR1cm4gY2FjaGVkQ29sbGVjdGlvbihEb2NGb3Jtcyk7CisgICAgcmV0dXJuIGVuc3Vy
ZUNhY2hlZENvbGxlY3Rpb24oRG9jRm9ybXMpOwogfQogCiBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0
aW9uPiBEb2N1bWVudDo6YW5jaG9ycygpCiB7Ci0gICAgcmV0dXJuIGNhY2hlZENvbGxlY3Rpb24o
RG9jQW5jaG9ycyk7CisgICAgcmV0dXJuIGVuc3VyZUNhY2hlZENvbGxlY3Rpb24oRG9jQW5jaG9y
cyk7CiB9CiAKIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IERvY3VtZW50OjphbGwoKQogewot
ICAgIHJldHVybiBjYWNoZWRDb2xsZWN0aW9uKERvY0FsbCk7CisgICAgcmV0dXJuIGVuc3VyZUNh
Y2hlZENvbGxlY3Rpb24oRG9jQWxsKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4g
RG9jdW1lbnQ6OndpbmRvd05hbWVkSXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewot
ICAgIE5hbWVkQ29sbGVjdGlvbk1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fd2luZG93TmFtZWRJ
dGVtQ29sbGVjdGlvbnMuYWRkKG5hbWUsIDApOwotICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkp
Ci0gICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotCi0gICAgUmVmUHRyPEhU
TUxOYW1lQ29sbGVjdGlvbj4gY29sbGVjdGlvbiA9IEhUTUxOYW1lQ29sbGVjdGlvbjo6Y3JlYXRl
KHRoaXMsIFdpbmRvd05hbWVkSXRlbXMsIG5hbWUpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUgPSBjb2xsZWN0aW9uLmdldCgpOwotICAgIHJldHVybiBjb2xsZWN0aW9uLnJlbGVhc2UoKTsK
KyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKCktPmFkZENhY2hl
V2l0aEF0b21pY05hbWU8SFRNTE5hbWVDb2xsZWN0aW9uPih0aGlzLCBXaW5kb3dOYW1lZEl0ZW1z
LCBuYW1lKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gRG9jdW1lbnQ6OmRvY3Vt
ZW50TmFtZWRJdGVtcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7Ci0gICAgTmFtZWRDb2xs
ZWN0aW9uTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9kb2N1bWVudE5hbWVkSXRlbUNvbGxlY3Rp
b25zLmFkZChuYW1lLCAwKTsKLSAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQotICAgICAgICBy
ZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLQotICAgIFJlZlB0cjxIVE1MTmFtZUNvbGxl
Y3Rpb24+IGNvbGxlY3Rpb24gPSBIVE1MTmFtZUNvbGxlY3Rpb246OmNyZWF0ZSh0aGlzLCBEb2N1
bWVudE5hbWVkSXRlbXMsIG5hbWUpOwotICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjb2xs
ZWN0aW9uLmdldCgpOwotICAgIHJldHVybiBjb2xsZWN0aW9uLnJlbGVhc2UoKTsKLX0KLQotLy8g
RklYTUU6IFRoaXMgY2FjaGluZyBtZWNoYW5pc20gc2hvdWxkIGJlIG1lcmdlZCB0aGF0IG9mIExp
dmVOb2RlTGlzdCBpbiBOb2RlUmFyZURhdGEuCi12b2lkIERvY3VtZW50OjpyZW1vdmVXaW5kb3dO
YW1lZEl0ZW1DYWNoZShIVE1MQ29sbGVjdGlvbiogY29sbGVjdGlvbiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lKQotewotICAgIEFTU0VSVF9VTlVTRUQoY29sbGVjdGlvbiwgbV93aW5kb3dOYW1l
ZEl0ZW1Db2xsZWN0aW9ucy5nZXQobmFtZSkgPT0gY29sbGVjdGlvbik7Ci0gICAgbV93aW5kb3dO
YW1lZEl0ZW1Db2xsZWN0aW9ucy5yZW1vdmUobmFtZSk7Ci19Ci0KLXZvaWQgRG9jdW1lbnQ6OnJl
bW92ZURvY3VtZW50TmFtZWRJdGVtQ2FjaGUoSFRNTENvbGxlY3Rpb24qIGNvbGxlY3Rpb24sIGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKGNvbGxlY3Rpb24s
IG1fZG9jdW1lbnROYW1lZEl0ZW1Db2xsZWN0aW9ucy5nZXQobmFtZSkgPT0gY29sbGVjdGlvbik7
Ci0gICAgbV9kb2N1bWVudE5hbWVkSXRlbUNvbGxlY3Rpb25zLnJlbW92ZShuYW1lKTsKKyAgICBy
ZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKCktPmFkZENhY2hlV2l0aEF0
b21pY05hbWU8SFRNTE5hbWVDb2xsZWN0aW9uPih0aGlzLCBEb2N1bWVudE5hbWVkSXRlbXMsIG5h
bWUpOwogfQogCiB2b2lkIERvY3VtZW50OjpmaW5pc2hlZFBhcnNpbmcoKQpAQCAtNTg5MSw4ICs1
ODQzLDYgQEAgdm9pZCBEb2N1bWVudDo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5TwogICAgIGlu
Zm8uYWRkTWVtYmVyKG1feG1sRW5jb2RpbmcpOwogICAgIGluZm8uYWRkTWVtYmVyKG1feG1sVmVy
c2lvbik7CiAgICAgaW5mby5hZGRNZW1iZXIobV9jb250ZW50TGFuZ3VhZ2UpOwotICAgIGluZm8u
YWRkTWVtYmVyKG1fZG9jdW1lbnROYW1lZEl0ZW1Db2xsZWN0aW9ucyk7Ci0gICAgaW5mby5hZGRN
ZW1iZXIobV93aW5kb3dOYW1lZEl0ZW1Db2xsZWN0aW9ucyk7CiAjaWYgRU5BQkxFKERBU0hCT0FS
RF9TVVBQT1JUKSB8fCBFTkFCTEUoRFJBR0dBQkxFX1JFR0lPTikKICAgICBpbmZvLmFkZE1lbWJl
cihtX2Fubm90YXRlZFJlZ2lvbnMpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAko
cmV2aXNpb24gMTM1NjcxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0MSwxMiArNDQxLDkgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SFRN
TENvbGxlY3Rpb24+IGFuY2hvcnMoKTsKICAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBz
Y3JpcHRzKCk7CiAgICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gYWxsKCk7Ci0gICAgdm9p
ZCByZW1vdmVDYWNoZWRIVE1MQ29sbGVjdGlvbihIVE1MQ29sbGVjdGlvbiosIENvbGxlY3Rpb25U
eXBlKTsKIAogICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IHdpbmRvd05hbWVkSXRlbXMo
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKTsKICAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9u
PiBkb2N1bWVudE5hbWVkSXRlbXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKTsKLSAgICB2b2lk
IHJlbW92ZVdpbmRvd05hbWVkSXRlbUNhY2hlKEhUTUxDb2xsZWN0aW9uKiwgY29uc3QgQXRvbWlj
U3RyaW5nJik7Ci0gICAgdm9pZCByZW1vdmVEb2N1bWVudE5hbWVkSXRlbUNhY2hlKEhUTUxDb2xs
ZWN0aW9uKiwgY29uc3QgQXRvbWljU3RyaW5nJik7CiAKICAgICAvLyBPdGhlciBtZXRob2RzIChu
b3QgcGFydCBvZiBET00pCiAgICAgYm9vbCBpc0hUTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNIVE1MOyB9CkBAIC03MTgsOCArNzE1LDggQEAgcHVibGljOgogICAgIGJvb2wgaGFzUGVu
ZGluZ0ZvcmNlZFN0eWxlUmVjYWxjKCkgY29uc3Q7CiAgICAgdm9pZCBzdHlsZVJlY2FsY1RpbWVy
RmlyZWQoVGltZXI8RG9jdW1lbnQ+Kik7CiAKLSAgICB2b2lkIHJlZ2lzdGVyTm9kZUxpc3RDYWNo
ZShMaXZlTm9kZUxpc3RCYXNlKik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyTm9kZUxpc3RDYWNoZShM
aXZlTm9kZUxpc3RCYXNlKik7CisgICAgdm9pZCByZWdpc3Rlck5vZGVMaXN0KExpdmVOb2RlTGlz
dEJhc2UqKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJOb2RlTGlzdChMaXZlTm9kZUxpc3RCYXNlKik7
CiAgICAgYm9vbCBzaG91bGRJbnZhbGlkYXRlTm9kZUxpc3RDYWNoZXMoY29uc3QgUXVhbGlmaWVk
TmFtZSogYXR0ck5hbWUgPSAwKSBjb25zdDsKICAgICB2b2lkIGludmFsaWRhdGVOb2RlTGlzdENh
Y2hlcyhjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyTmFtZSk7CiAKQEAgLTEyMzgsNyArMTIzNSw3
IEBAIHByaXZhdGU6CiAgICAgUGFnZVZpc2liaWxpdHlTdGF0ZSB2aXNpYmlsaXR5U3RhdGUoKSBj
b25zdDsKICNlbmRpZgogCi0gICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gY2FjaGVkQ29s
bGVjdGlvbihDb2xsZWN0aW9uVHlwZSk7CisgICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4g
ZW5zdXJlQ2FjaGVkQ29sbGVjdGlvbihDb2xsZWN0aW9uVHlwZSk7CiAKICNpZiBFTkFCTEUoRlVM
TFNDUkVFTl9BUEkpCiAgICAgdm9pZCBjbGVhckZ1bGxzY3JlZW5FbGVtZW50U3RhY2soKTsKQEAg
LTE0MTAsMTEgKzE0MDcsNiBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8TGl2ZU5vZGVMaXN0QmFz
ZSo+IG1fbGlzdHNJbnZhbGlkYXRlZEF0RG9jdW1lbnQ7CiAgICAgdW5zaWduZWQgbV9ub2RlTGlz
dENvdW50c1tudW1Ob2RlTGlzdEludmFsaWRhdGlvblR5cGVzXTsKIAotICAgIEhUTUxDb2xsZWN0
aW9uKiBtX2NvbGxlY3Rpb25zW051bVVubmFtZWREb2N1bWVudENhY2hlZFR5cGVzXTsKLSAgICB0
eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBIVE1MTmFtZUNvbGxlY3Rpb24qPiBOYW1lZENv
bGxlY3Rpb25NYXA7Ci0gICAgTmFtZWRDb2xsZWN0aW9uTWFwIG1fZG9jdW1lbnROYW1lZEl0ZW1D
b2xsZWN0aW9uczsKLSAgICBOYW1lZENvbGxlY3Rpb25NYXAgbV93aW5kb3dOYW1lZEl0ZW1Db2xs
ZWN0aW9uczsKLQogICAgIFJlZlB0cjxYUGF0aEV2YWx1YXRvcj4gbV94cGF0aEV2YWx1YXRvcjsK
IAogI2lmIEVOQUJMRShTVkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAx
MzU2NzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0MjUsNDEgKzI0MjUsMzAgQEAgdm9pZCBFbGVtZW50Ojp1cGRhdGVFeHRyYU5hbWVkSXRl
bVJlZ2lzdAogCiBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBFbGVtZW50OjplbnN1cmVDYWNo
ZWRIVE1MQ29sbGVjdGlvbihDb2xsZWN0aW9uVHlwZSB0eXBlKQogewotICAgIHJldHVybiBlbnN1
cmVFbGVtZW50UmFyZURhdGEoKS0+ZW5zdXJlQ2FjaGVkSFRNTENvbGxlY3Rpb24odGhpcywgdHlw
ZSk7Ci19Ci0KLVBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IEVsZW1lbnRSYXJlRGF0YTo6ZW5z
dXJlQ2FjaGVkSFRNTENvbGxlY3Rpb24oRWxlbWVudCogZWxlbWVudCwgQ29sbGVjdGlvblR5cGUg
dHlwZSkKLXsKICAgICBpZiAoSFRNTENvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSBjYWNoZWRIVE1M
Q29sbGVjdGlvbih0eXBlKSkKICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb247CiAKICAgICBSZWZQ
dHI8SFRNTENvbGxlY3Rpb24+IGNvbGxlY3Rpb247CiAgICAgaWYgKHR5cGUgPT0gVGFibGVSb3dz
KSB7Ci0gICAgICAgIEFTU0VSVChlbGVtZW50LT5oYXNUYWdOYW1lKHRhYmxlVGFnKSk7Ci0gICAg
ICAgIHJldHVybiBlbnN1cmVOb2RlTGlzdHMoKS0+YWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxIVE1M
VGFibGVSb3dzQ29sbGVjdGlvbj4oZWxlbWVudCwgdHlwZSk7CisgICAgICAgIEFTU0VSVChoYXNU
YWdOYW1lKHRhYmxlVGFnKSk7CisgICAgICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLT5lbnN1
cmVOb2RlTGlzdHMoKS0+YWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxIVE1MVGFibGVSb3dzQ29sbGVj
dGlvbj4odGhpcywgdHlwZSk7CiAgICAgfSBlbHNlIGlmICh0eXBlID09IFNlbGVjdE9wdGlvbnMp
IHsKLSAgICAgICAgQVNTRVJUKGVsZW1lbnQtPmhhc1RhZ05hbWUoc2VsZWN0VGFnKSk7Ci0gICAg
ICAgIHJldHVybiBlbnN1cmVOb2RlTGlzdHMoKS0+YWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxIVE1M
T3B0aW9uc0NvbGxlY3Rpb24+KGVsZW1lbnQsIHR5cGUpOworICAgICAgICBBU1NFUlQoaGFzVGFn
TmFtZShzZWxlY3RUYWcpKTsKKyAgICAgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVuc3Vy
ZU5vZGVMaXN0cygpLT5hZGRDYWNoZVdpdGhBdG9taWNOYW1lPEhUTUxPcHRpb25zQ29sbGVjdGlv
bj4odGhpcywgdHlwZSk7CiAgICAgfSBlbHNlIGlmICh0eXBlID09IEZvcm1Db250cm9scykgewot
ICAgICAgICBBU1NFUlQoZWxlbWVudC0+aGFzVGFnTmFtZShmb3JtVGFnKSB8fCBlbGVtZW50LT5o
YXNUYWdOYW1lKGZpZWxkc2V0VGFnKSk7Ci0gICAgICAgIHJldHVybiBlbnN1cmVOb2RlTGlzdHMo
KS0+YWRkQ2FjaGVXaXRoQXRvbWljTmFtZTxIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbj4oZWxl
bWVudCwgdHlwZSk7CisgICAgICAgIEFTU0VSVChoYXNUYWdOYW1lKGZvcm1UYWcpIHx8IGhhc1Rh
Z05hbWUoZmllbGRzZXRUYWcpKTsKKyAgICAgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVu
c3VyZU5vZGVMaXN0cygpLT5hZGRDYWNoZVdpdGhBdG9taWNOYW1lPEhUTUxGb3JtQ29udHJvbHND
b2xsZWN0aW9uPih0aGlzLCB0eXBlKTsKICNpZiBFTkFCTEUoTUlDUk9EQVRBKQogICAgIH0gZWxz
ZSBpZiAodHlwZSA9PSBJdGVtUHJvcGVydGllcykgewotICAgICAgICByZXR1cm4gZW5zdXJlTm9k
ZUxpc3RzKCktPmFkZENhY2hlV2l0aEF0b21pY05hbWU8SFRNTFByb3BlcnRpZXNDb2xsZWN0aW9u
PihlbGVtZW50LCB0eXBlKTsKKyAgICAgICAgcmV0dXJuIGVuc3VyZVJhcmVEYXRhKCktPmVuc3Vy
ZU5vZGVMaXN0cygpLT5hZGRDYWNoZVdpdGhBdG9taWNOYW1lPEhUTUxQcm9wZXJ0aWVzQ29sbGVj
dGlvbj4odGhpcywgdHlwZSk7CiAjZW5kaWYKICAgICB9Ci0gICAgcmV0dXJuIGVuc3VyZU5vZGVM
aXN0cygpLT5hZGRDYWNoZVdpdGhBdG9taWNOYW1lPEhUTUxDb2xsZWN0aW9uPihlbGVtZW50LCB0
eXBlKTsKKyAgICByZXR1cm4gZW5zdXJlUmFyZURhdGEoKS0+ZW5zdXJlTm9kZUxpc3RzKCktPmFk
ZENhY2hlV2l0aEF0b21pY05hbWU8SFRNTENvbGxlY3Rpb24+KHRoaXMsIHR5cGUpOwogfQogCiBI
VE1MQ29sbGVjdGlvbiogRWxlbWVudDo6Y2FjaGVkSFRNTENvbGxlY3Rpb24oQ29sbGVjdGlvblR5
cGUgdHlwZSkKIHsKLSAgICByZXR1cm4gaGFzUmFyZURhdGEoKSA/IGVsZW1lbnRSYXJlRGF0YSgp
LT5jYWNoZWRIVE1MQ29sbGVjdGlvbih0eXBlKSA6IDA7Ci19Ci0KLXZvaWQgRWxlbWVudDo6cmVt
b3ZlQ2FjaGVkSFRNTENvbGxlY3Rpb24oSFRNTENvbGxlY3Rpb24qIGNvbGxlY3Rpb24sIENvbGxl
Y3Rpb25UeXBlIHR5cGUpCi17Ci0gICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkpOwotICAgIGVsZW1l
bnRSYXJlRGF0YSgpLT5yZW1vdmVDYWNoZWRIVE1MQ29sbGVjdGlvbihjb2xsZWN0aW9uLCB0eXBl
KTsKKyAgICByZXR1cm4gaGFzUmFyZURhdGEoKSAmJiByYXJlRGF0YSgpLT5ub2RlTGlzdHMoKSA/
IHJhcmVEYXRhKCktPm5vZGVMaXN0cygpLT5jYWNoZVdpdGhBdG9taWNOYW1lPEhUTUxDb2xsZWN0
aW9uPih0eXBlKSA6IDA7CiB9CiAKIEludFNpemUgRWxlbWVudDo6c2F2ZWRMYXllclNjcm9sbE9m
ZnNldCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCShyZXZp
c2lvbiAxMzU2NzApCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDkgKzI0LDcgQEAKIAogI2luY2x1ZGUgIkNsYXNzTGlzdC5oIgog
I2luY2x1ZGUgIkRhdGFzZXRET01TdHJpbmdNYXAuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCiAj
aW5jbHVkZSAiRWxlbWVudFNoYWRvdy5oIgotI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCiAj
aW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCiAjaW5jbHVkZSAiTm9kZVJhcmVEYXRhLmgiCiAjaW5j
bHVkZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgiCkBAIC0zNCw4ICszMiw2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgSFRNTENvbGxlY3Rpb247Ci0KIGNsYXNzIEVsZW1lbnRSYXJl
RGF0YSA6IHB1YmxpYyBOb2RlUmFyZURhdGEgewogcHVibGljOgogICAgIEVsZW1lbnRSYXJlRGF0
YSgpOwpAQCAtNTgsMTggKzU0LDYgQEAgcHVibGljOgogICAgIHVzaW5nIE5vZGVSYXJlRGF0YTo6
c2V0SXNJblRvcExheWVyOwogI2VuZGlmCiAKLSAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9u
PiBlbnN1cmVDYWNoZWRIVE1MQ29sbGVjdGlvbihFbGVtZW50KiwgQ29sbGVjdGlvblR5cGUpOwot
ICAgIEhUTUxDb2xsZWN0aW9uKiBjYWNoZWRIVE1MQ29sbGVjdGlvbihDb2xsZWN0aW9uVHlwZSB0
eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5vZGVMaXN0cygpID8gbm9kZUxpc3RzKCktPmNh
Y2hlV2l0aEF0b21pY05hbWU8SFRNTENvbGxlY3Rpb24+KHR5cGUpIDogMDsKLSAgICB9Ci0KLSAg
ICB2b2lkIHJlbW92ZUNhY2hlZEhUTUxDb2xsZWN0aW9uKEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0
aW9uLCBDb2xsZWN0aW9uVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG5vZGVMaXN0
cygpKTsKLSAgICAgICAgbm9kZUxpc3RzKCktPnJlbW92ZUNhY2hlV2l0aEF0b21pY05hbWUoY29s
bGVjdGlvbiwgdHlwZSk7Ci0gICAgfQotCiAgICAgdmlydHVhbCB2b2lkIHJlcG9ydE1lbW9yeVVz
YWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdCBPVkVSUklERTsKIAogICAgIExheW91dFNpemUg
bV9taW5pbXVtU2l6ZUZvclJlc2l6aW5nOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0xpdmVO
b2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9MaXZlTm9kZUxpc3Qu
aAkocmV2aXNpb24gMTM1NjcxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0xpdmVOb2RlTGlzdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwxNSBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VS
VChtX2ludmFsaWRhdGlvblR5cGUgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGludmFsaWRhdGlv
blR5cGUpKTsKICAgICAgICAgQVNTRVJUKG1fY29sbGVjdGlvblR5cGUgPT0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGNvbGxlY3Rpb25UeXBlKSk7CiAgICAgICAgIEFTU0VSVCghbV9vdmVycmlkZXNJ
dGVtQWZ0ZXIgfHwgIWlzTm9kZUxpc3QoY29sbGVjdGlvblR5cGUpKTsKKworICAgICAgICBpZiAo
Y29sbGVjdGlvblR5cGUgIT0gQ2hpbGROb2RlTGlzdFR5cGUpCisgICAgICAgICAgICBkb2N1bWVu
dCgpLT5yZWdpc3Rlck5vZGVMaXN0KHRoaXMpOworICAgIH0KKworICAgIHZpcnR1YWwgfkxpdmVO
b2RlTGlzdEJhc2UoKQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUoKSAhPSBDaGlsZE5vZGVMaXN0
VHlwZSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJOb2RlTGlzdCh0aGlzKTsK
ICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0
SW5mbyopIGNvbnN0OwpAQCAtMTg2LDE2ICsxOTUsNyBAQCBwdWJsaWM6CiAgICAgTGl2ZU5vZGVM
aXN0KFBhc3NSZWZQdHI8Tm9kZT4gb3duZXJOb2RlLCBDb2xsZWN0aW9uVHlwZSBjb2xsZWN0aW9u
VHlwZSwgTm9kZUxpc3RJbnZhbGlkYXRpb25UeXBlIGludmFsaWRhdGlvblR5cGUsIE5vZGVMaXN0
Um9vdFR5cGUgcm9vdFR5cGUgPSBOb2RlTGlzdElzUm9vdGVkQXROb2RlKQogICAgICAgICA6IExp
dmVOb2RlTGlzdEJhc2Uob3duZXJOb2RlLmdldCgpLCByb290VHlwZSwgaW52YWxpZGF0aW9uVHlw
ZSwgY29sbGVjdGlvblR5cGUgPT0gQ2hpbGROb2RlTGlzdFR5cGUsCiAgICAgICAgIGNvbGxlY3Rp
b25UeXBlLCBEb2VzTm90T3ZlcnJpZGVJdGVtQWZ0ZXIpCi0gICAgewotICAgICAgICBpZiAoY29s
bGVjdGlvblR5cGUgIT0gQ2hpbGROb2RlTGlzdFR5cGUpCi0gICAgICAgICAgICBkb2N1bWVudCgp
LT5yZWdpc3Rlck5vZGVMaXN0Q2FjaGUodGhpcyk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+TGl2
ZU5vZGVMaXN0KCkKLSAgICB7Ci0gICAgICAgIGlmICh0eXBlKCkgIT0gQ2hpbGROb2RlTGlzdFR5
cGUpCi0gICAgICAgICAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyTm9kZUxpc3RDYWNoZSh0aGlz
KTsKLSAgICB9CisgICAgeyB9CiAKICAgICB2aXJ0dWFsIE5vZGUqIG5hbWVkSXRlbShjb25zdCBB
dG9taWNTdHJpbmcmKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgbm9kZU1hdGNo
ZXMoRWxlbWVudCopIGNvbnN0ID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9OYW1lTm9k
ZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTmFtZU5vZGVMaXN0LmgJ
KHJldmlzaW9uIDEzNTY3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9OYW1lTm9kZUxpc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBO
b2RlTGlzdCB3aGljaCBsaXN0cyBhbGwgTm9kZXMgaW4gYSBFbGVtZW50IHdpdGggYSBnaXZlbiAi
bmFtZSIgYXR0cmlidXRlCiBjbGFzcyBOYW1lTm9kZUxpc3QgOiBwdWJsaWMgTGl2ZU5vZGVMaXN0
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxOYW1lTm9kZUxpc3Q+IGNyZWF0ZShQ
YXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8TmFtZU5vZGVMaXN0PiBjcmVhdGUoUGFzc1JlZlB0cjxOb2RlPiBy
b290Tm9kZSwgQ29sbGVjdGlvblR5cGUgdHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQog
ICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRCh0eXBlLCB0eXBlID09IE5hbWVOb2RlTGlzdFR5
cGUpOwogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE5hbWVOb2RlTGlzdChyb290Tm9kZSwg
bmFtZSkpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlUmFyZURhdGEuaAkocmV2aXNp
b24gMTM1NjcxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGVSYXJlRGF0YS5oCSh3b3JraW5n
IGNvcHkpCkBAIC03MCwxMyArNzAsMTMgQEAgcHVibGljOgogICAgICAgICBpZiAoIXJlc3VsdC5p
c05ld0VudHJ5KQogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihyZXN1bHQuaXRl
cmF0b3ItPnZhbHVlKTsKIAotICAgICAgICBSZWZQdHI8VD4gbGlzdCA9IFQ6OmNyZWF0ZShub2Rl
LCBuYW1lKTsKKyAgICAgICAgUmVmUHRyPFQ+IGxpc3QgPSBUOjpjcmVhdGUobm9kZSwgY29sbGVj
dGlvblR5cGUsIG5hbWUpOwogICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbGlzdC5n
ZXQoKTsKICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOwogICAgIH0KIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci0gICAgUGFzc1JlZlB0cjxUPiBhZGRDYWNoZVdpdGhBdG9taWNOYW1l
KEVsZW1lbnQqIG5vZGUsIENvbGxlY3Rpb25UeXBlIGNvbGxlY3Rpb25UeXBlKQorICAgIFBhc3NS
ZWZQdHI8VD4gYWRkQ2FjaGVXaXRoQXRvbWljTmFtZShOb2RlKiBub2RlLCBDb2xsZWN0aW9uVHlw
ZSBjb2xsZWN0aW9uVHlwZSkKICAgICB7CiAgICAgICAgIE5vZGVMaXN0QXRvbWljTmFtZUNhY2hl
TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9hdG9taWNOYW1lQ2FjaGVzLmFkZChuYW1lZE5vZGVM
aXN0S2V5KGNvbGxlY3Rpb25UeXBlLCBzdGFyQXRvbSksIDApOwogICAgICAgICBpZiAoIXJlc3Vs
dC5pc05ld0VudHJ5KQpAQCAtMTU1LDIzICsxNTUsMjMgQEAgcHVibGljOgogICAgICAgICAgICAg
Tm9kZUxpc3RBdG9taWNOYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGF0b21pY05hbWVDYWNo
ZUVuZCA9IG1fYXRvbWljTmFtZUNhY2hlcy5lbmQoKTsKICAgICAgICAgICAgIGZvciAoTm9kZUxp
c3RBdG9taWNOYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hdG9taWNOYW1lQ2Fj
aGVzLmJlZ2luKCk7IGl0ICE9IGF0b21pY05hbWVDYWNoZUVuZDsgKytpdCkgewogICAgICAgICAg
ICAgICAgIExpdmVOb2RlTGlzdEJhc2UqIGxpc3QgPSBpdC0+dmFsdWU7Ci0gICAgICAgICAgICAg
ICAgb2xkRG9jdW1lbnQtPnVucmVnaXN0ZXJOb2RlTGlzdENhY2hlKGxpc3QpOwotICAgICAgICAg
ICAgICAgIG5ld0RvY3VtZW50LT5yZWdpc3Rlck5vZGVMaXN0Q2FjaGUobGlzdCk7CisgICAgICAg
ICAgICAgICAgb2xkRG9jdW1lbnQtPnVucmVnaXN0ZXJOb2RlTGlzdChsaXN0KTsKKyAgICAgICAg
ICAgICAgICBuZXdEb2N1bWVudC0+cmVnaXN0ZXJOb2RlTGlzdChsaXN0KTsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgTm9kZUxpc3ROYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIG5h
bWVDYWNoZUVuZCA9IG1fbmFtZUNhY2hlcy5lbmQoKTsKICAgICAgICAgICAgIGZvciAoTm9kZUxp
c3ROYW1lQ2FjaGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9uYW1lQ2FjaGVzLmJlZ2luKCk7
IGl0ICE9IG5hbWVDYWNoZUVuZDsgKytpdCkgewogICAgICAgICAgICAgICAgIExpdmVOb2RlTGlz
dEJhc2UqIGxpc3QgPSBpdC0+dmFsdWU7Ci0gICAgICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnVu
cmVnaXN0ZXJOb2RlTGlzdENhY2hlKGxpc3QpOwotICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50
LT5yZWdpc3Rlck5vZGVMaXN0Q2FjaGUobGlzdCk7CisgICAgICAgICAgICAgICAgb2xkRG9jdW1l
bnQtPnVucmVnaXN0ZXJOb2RlTGlzdChsaXN0KTsKKyAgICAgICAgICAgICAgICBuZXdEb2N1bWVu
dC0+cmVnaXN0ZXJOb2RlTGlzdChsaXN0KTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
VGFnTm9kZUxpc3RDYWNoZU5TOjpjb25zdF9pdGVyYXRvciB0YWdFbmQgPSBtX3RhZ05vZGVMaXN0
Q2FjaGVOUy5lbmQoKTsKICAgICAgICAgICAgIGZvciAoVGFnTm9kZUxpc3RDYWNoZU5TOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fdGFnTm9kZUxpc3RDYWNoZU5TLmJlZ2luKCk7IGl0ICE9IHRhZ0Vu
ZDsgKytpdCkgewogICAgICAgICAgICAgICAgIExpdmVOb2RlTGlzdEJhc2UqIGxpc3QgPSBpdC0+
dmFsdWU7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCFsaXN0LT5pc1Jvb3RlZEF0RG9jdW1lbnQo
KSk7Ci0gICAgICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnVucmVnaXN0ZXJOb2RlTGlzdENhY2hl
KGxpc3QpOwotICAgICAgICAgICAgICAgIG5ld0RvY3VtZW50LT5yZWdpc3Rlck5vZGVMaXN0Q2Fj
aGUobGlzdCk7CisgICAgICAgICAgICAgICAgb2xkRG9jdW1lbnQtPnVucmVnaXN0ZXJOb2RlTGlz
dChsaXN0KTsKKyAgICAgICAgICAgICAgICBuZXdEb2N1bWVudC0+cmVnaXN0ZXJOb2RlTGlzdChs
aXN0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTE4MywxNCArMTgzLDEy
IEBAIHByaXZhdGU6CiAKICAgICBzdGQ6OnBhaXI8dW5zaWduZWQgY2hhciwgQXRvbWljU3RyaW5n
PiBuYW1lZE5vZGVMaXN0S2V5KENvbGxlY3Rpb25UeXBlIHR5cGUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVCh0eXBlID49IEZpcnN0Tm9kZUNvbGxlY3Rp
b25UeXBlKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6cGFpcjx1bnNpZ25lZCBjaGFyLCBBdG9taWNT
dHJpbmc+KHR5cGUgLSBGaXJzdE5vZGVDb2xsZWN0aW9uVHlwZSwgbmFtZSk7CisgICAgICAgIHJl
dHVybiBzdGQ6OnBhaXI8dW5zaWduZWQgY2hhciwgQXRvbWljU3RyaW5nPih0eXBlLCBuYW1lKTsK
ICAgICB9CiAKICAgICBzdGQ6OnBhaXI8dW5zaWduZWQgY2hhciwgU3RyaW5nPiBuYW1lZE5vZGVM
aXN0S2V5KENvbGxlY3Rpb25UeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICB7Ci0g
ICAgICAgIEFTU0VSVCh0eXBlID49IEZpcnN0Tm9kZUNvbGxlY3Rpb25UeXBlKTsKLSAgICAgICAg
cmV0dXJuIHN0ZDo6cGFpcjx1bnNpZ25lZCBjaGFyLCBTdHJpbmc+KHR5cGUgLSBGaXJzdE5vZGVD
b2xsZWN0aW9uVHlwZSwgbmFtZSk7CisgICAgICAgIHJldHVybiBzdGQ6OnBhaXI8dW5zaWduZWQg
Y2hhciwgU3RyaW5nPih0eXBlLCBuYW1lKTsKICAgICB9CiAKICAgICBOb2RlTGlzdEF0b21pY05h
bWVDYWNoZU1hcCBtX2F0b21pY05hbWVDYWNoZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
VGFnTm9kZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVGFnTm9kZUxp
c3QuaAkocmV2aXNpb24gMTM1NjcxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RhZ05vZGVMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUYWdOb2RlTGlzdChyb290Tm9kZSwgbmFt
ZXNwYWNlVVJJLCBsb2NhbE5hbWUpKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFRhZ05vZGVMaXN0PiBjcmVhdGUoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgY29u
c3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRh
Z05vZGVMaXN0PiBjcmVhdGUoUGFzc1JlZlB0cjxOb2RlPiByb290Tm9kZSwgQ29sbGVjdGlvblR5
cGUgdHlwZSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpCiAgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgdHlwZSA9PSBUYWdOb2RlTGlzdFR5cGUpOwogICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUYWdOb2RlTGlzdChyb290Tm9kZSwgc3RhckF0
b20sIGxvY2FsTmFtZSkpOwogICAgICAgICB9CiAKQEAgLTU2LDggKzU3LDkgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgY2xhc3MgSFRNTFRhZ05vZGVMaXN0IDogcHVibGljIFRhZ05vZGVM
aXN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxUYWdOb2Rl
TGlzdD4gY3JlYXRlKFBhc3NSZWZQdHI8Tm9kZT4gcm9vdE5vZGUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgbG9jYWxOYW1lKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MVGFnTm9kZUxpc3Q+
IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IHJvb3ROb2RlLCBDb2xsZWN0aW9uVHlwZSB0eXBlLCBj
b25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKICAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRCh0eXBlLCB0eXBlID09IFRhZ05vZGVMaXN0VHlwZSk7CiAgICAgICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxUYWdOb2RlTGlzdChyb290Tm9kZSwgbG9jYWxOYW1lKSk7
CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9Db2xsZWN0aW9uVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ29sbGVjdGlvblR5cGUuaAkocmV2
aXNpb24gMTM1NjcwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9Db2xsZWN0aW9uVHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGVu
dW0gQ29sbGVjdGlvblR5cGUgewotICAgIC8vIHVubmFtZWQgY29sbGVjdGlvbiB0eXBlcyBjYWNo
ZWQgaW4gdGhlIGRvY3VtZW50Ci0KKyAgICAvLyBVbm5hbWVkIEhUTUxDb2xsZWN0aW9uIHR5cGVz
IGNhY2hlZCBpbiB0aGUgZG9jdW1lbnQuCiAgICAgRG9jSW1hZ2VzLCAgICAvLyBhbGwgPGltZz4g
ZWxlbWVudHMgaW4gdGhlIGRvY3VtZW50CiAgICAgRG9jQXBwbGV0cywgICAvLyBhbGwgPG9iamVj
dD4gYW5kIDxhcHBsZXQ+IGVsZW1lbnRzCiAgICAgRG9jRW1iZWRzLCAgICAvLyBhbGwgPGVtYmVk
PiBlbGVtZW50cwpAQCAtMzUsMTYgKzM0LDEzIEBAIGVudW0gQ29sbGVjdGlvblR5cGUgewogICAg
IERvY0xpbmtzLCAgICAgLy8gYWxsIDxhPiBfYW5kXyA8YXJlYT4gZWxlbWVudHMgd2l0aCBhIHZh
bHVlIGZvciBocmVmCiAgICAgRG9jQW5jaG9ycywgICAvLyBhbGwgPGE+IGVsZW1lbnRzIHdpdGgg
YSB2YWx1ZSBmb3IgbmFtZQogICAgIERvY1NjcmlwdHMsICAgLy8gYWxsIDxzY3JpcHQ+IGVsZW1l
bnRzCi0KICAgICBEb2NBbGwsICAgICAgIC8vICJhbGwiIGVsZW1lbnRzIChJRSkKIAotICAgIC8v
IG5hbWVkIGNvbGxlY3Rpb24gdHlwZXMgY2FjaGVkIGluIHRoZSBkb2N1bWVudAotCisgICAgLy8g
TmFtZWQgY29sbGVjdGlvbiB0eXBlcyBjYWNoZWQgaW4gdGhlIGRvY3VtZW50LgogICAgIFdpbmRv
d05hbWVkSXRlbXMsCiAgICAgRG9jdW1lbnROYW1lZEl0ZW1zLAogCi0gICAgLy8gdHlwZXMgbm90
IGNhY2hlZCBpbiB0aGUgZG9jdW1lbnQ7IHRoZXNlIGFyZSB0eXBlcyB0aGF0IGNhbid0IGJlIHVz
ZWQgb24gYSBkb2N1bWVudAotCisgICAgLy8gVW5uYW1lZCBIVE1MQ29sbGVjdGlvbiB0eXBlcyBj
YWNoZWQgaW4gZWxlbWVudHMuCiAgICAgTm9kZUNoaWxkcmVuLCAvLyBmaXJzdC1sZXZlbCBjaGls
ZHJlbiAoSUUpCiAgICAgVGFibGVUQm9kaWVzLCAvLyBhbGwgPHRib2R5PiBlbGVtZW50cyBpbiB0
aGlzIHRhYmxlCiAgICAgVFNlY3Rpb25Sb3dzLCAvLyBhbGwgcm93IGVsZW1lbnRzIGluIHRoaXMg
dGFibGUgc2VjdGlvbgpAQCAtNTQsMTUgKzUwLDEyIEBAIGVudW0gQ29sbGVjdGlvblR5cGUgewog
ICAgIFNlbGVjdGVkT3B0aW9ucywKICAgICBEYXRhTGlzdE9wdGlvbnMsCiAgICAgTWFwQXJlYXMs
Ci0KICNpZiBFTkFCTEUoTUlDUk9EQVRBKQogICAgIEl0ZW1Qcm9wZXJ0aWVzLCAvLyBNaWNyb2Rh
dGEgaXRlbSBwcm9wZXJ0aWVzIGluIHRoZSBkb2N1bWVudAogI2VuZGlmCi0KICAgICBGb3JtQ29u
dHJvbHMsCiAKLSAgICAvLyBMaXZlIG5vZGUgbGlzdHMuCi0KKyAgICAvLyBMaXZlIE5vZGVMaXN0
LgogICAgIENoaWxkTm9kZUxpc3RUeXBlLAogICAgIENsYXNzTm9kZUxpc3RUeXBlLAogICAgIE5h
bWVOb2RlTGlzdFR5cGUsCkBAIC03MywyMiArNjYsOCBAQCBlbnVtIENvbGxlY3Rpb25UeXBlIHsK
ICAgICBQcm9wZXJ0eU5vZGVMaXN0VHlwZSwKIH07CiAKLXN0YXRpYyBjb25zdCBDb2xsZWN0aW9u
VHlwZSBGaXJzdFVubmFtZWREb2N1bWVudENhY2hlZFR5cGUgPSBEb2NJbWFnZXM7Ci1zdGF0aWMg
Y29uc3QgdW5zaWduZWQgTnVtVW5uYW1lZERvY3VtZW50Q2FjaGVkVHlwZXMgPSBXaW5kb3dOYW1l
ZEl0ZW1zIC0gRG9jSW1hZ2VzOwotCi1zdGF0aWMgY29uc3QgQ29sbGVjdGlvblR5cGUgRmlyc3RO
b2RlQ29sbGVjdGlvblR5cGUgPSBOb2RlQ2hpbGRyZW47CiBzdGF0aWMgY29uc3QgQ29sbGVjdGlv
blR5cGUgRmlyc3ROb2RlTGlzdFR5cGUgPSBDaGlsZE5vZGVMaXN0VHlwZTsKIAotaW5saW5lIGJv
b2wgaXNVbm5hbWVkRG9jdW1lbnRDYWNoZWRUeXBlKENvbGxlY3Rpb25UeXBlIHR5cGUpCi17Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlKSA8IE51bVVubmFtZWREb2N1bWVu
dENhY2hlZFR5cGVzOwotfQotCi1pbmxpbmUgYm9vbCBpc05vZGVDb2xsZWN0aW9uVHlwZShDb2xs
ZWN0aW9uVHlwZSB0eXBlKQotewotICAgIHJldHVybiB0eXBlID49IEZpcnN0Tm9kZUNvbGxlY3Rp
b25UeXBlOwotfQotCiBpbmxpbmUgYm9vbCBpc05vZGVMaXN0KENvbGxlY3Rpb25UeXBlIHR5cGUp
CiB7CiAgICAgcmV0dXJuIHR5cGUgPj0gRmlyc3ROb2RlTGlzdFR5cGU7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMTM1NjcxKQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKICNpbmNsdWRlICJIVE1MT2JqZWN0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxP
cHRpb25FbGVtZW50LmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJOb2RlUmFy
ZURhdGEuaCIKIAogI2lmIEVOQUJMRShNSUNST0RBVEEpCiAjaW5jbHVkZSAiSFRNTFByb3BlcnRp
ZXNDb2xsZWN0aW9uLmgiCkBAIC0xNzksNyArMTgwLDYgQEAgSFRNTENvbGxlY3Rpb246OkhUTUxD
b2xsZWN0aW9uKE5vZGUqIG93bgogICAgIDogTGl2ZU5vZGVMaXN0QmFzZShvd25lck5vZGUsIHJv
b3RUeXBlRnJvbUNvbGxlY3Rpb25UeXBlKHR5cGUpLCBpbnZhbGlkYXRpb25UeXBlRXhjbHVkaW5n
SWRBbmROYW1lQXR0cmlidXRlcyh0eXBlKSwKICAgICAgICAgV2ViQ29yZTo6c2hvdWxkT25seUlu
Y2x1ZGVEaXJlY3RDaGlsZHJlbih0eXBlKSwgdHlwZSwgaXRlbUFmdGVyT3ZlcnJpZGVUeXBlKQog
ewotICAgIGRvY3VtZW50KCktPnJlZ2lzdGVyTm9kZUxpc3RDYWNoZSh0aGlzKTsKIH0KIAogUGFz
c1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gSFRNTENvbGxlY3Rpb246OmNyZWF0ZShOb2RlKiBiYXNl
LCBDb2xsZWN0aW9uVHlwZSB0eXBlKQpAQCAtMTg5LDE2ICsxODksOSBAQCBQYXNzUmVmUHRyPEhU
TUxDb2xsZWN0aW9uPiBIVE1MQ29sbGVjdGlvCiAKIEhUTUxDb2xsZWN0aW9uOjp+SFRNTENvbGxl
Y3Rpb24oKQogewotICAgIGlmIChpc1VubmFtZWREb2N1bWVudENhY2hlZFR5cGUodHlwZSgpKSkg
ewotICAgICAgICBBU1NFUlQoYmFzZSgpLT5pc0RvY3VtZW50Tm9kZSgpKTsKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8RG9jdW1lbnQqPihiYXNlKCkpLT5yZW1vdmVDYWNoZWRIVE1MQ29sbGVjdGlvbih0
aGlzLCB0eXBlKCkpOwotICAgIH0gZWxzZSBpZiAoaXNOb2RlQ29sbGVjdGlvblR5cGUodHlwZSgp
KSkgewotICAgICAgICBBU1NFUlQoYmFzZSgpLT5pc0VsZW1lbnROb2RlKCkpOwotICAgICAgICB0
b0VsZW1lbnQoYmFzZSgpKS0+cmVtb3ZlQ2FjaGVkSFRNTENvbGxlY3Rpb24odGhpcywgdHlwZSgp
KTsKLSAgICB9IGVsc2UgLy8gSFRNTE5hbWVDb2xsZWN0aW9uIHJlbW92ZXMgY2FjaGUgYnkgaXRz
ZWxmLgotICAgICAgICBBU1NFUlQodHlwZSgpID09IFdpbmRvd05hbWVkSXRlbXMgfHwgdHlwZSgp
ID09IERvY3VtZW50TmFtZWRJdGVtcyk7Ci0KLSAgICBkb2N1bWVudCgpLT51bnJlZ2lzdGVyTm9k
ZUxpc3RDYWNoZSh0aGlzKTsKKyAgICAvLyBIVE1MTmFtZUNvbGxlY3Rpb24gcmVtb3ZlcyBjYWNo
ZSBieSBpdHNlbGYuCisgICAgaWYgKHR5cGUoKSAhPSBXaW5kb3dOYW1lZEl0ZW1zICYmIHR5cGUo
KSAhPSBEb2N1bWVudE5hbWVkSXRlbXMpCisgICAgICAgIG93bmVyTm9kZSgpLT5ub2RlTGlzdHMo
KS0+cmVtb3ZlQ2FjaGVXaXRoQXRvbWljTmFtZSh0aGlzLCB0eXBlKCkpOwogfQogCiBzdGF0aWMg
aW5saW5lIGJvb2wgaXNBY2NlcHRhYmxlRWxlbWVudChDb2xsZWN0aW9uVHlwZSB0eXBlLCBFbGVt
ZW50KiBlbGVtZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xz
Q29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9y
bUNvbnRyb2xzQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDEzNTY3MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiwxMyArMzYsMTMgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIC8vIFNpbmNlIHRo
ZSBjb2xsZWN0aW9ucyBhcmUgdG8gYmUgImxpdmUiLCB3ZSBoYXZlIHRvIGRvIHRoZQogLy8gY2Fs
Y3VsYXRpb24gZXZlcnkgdGltZSBpZiBhbnl0aGluZyBoYXMgY2hhbmdlZC4KIAotSFRNTEZvcm1D
b250cm9sc0NvbGxlY3Rpb246OkhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uKEVsZW1lbnQqIGJh
c2UpCitIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjo6SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rp
b24oTm9kZSogYmFzZSkKICAgICA6IEhUTUxDb2xsZWN0aW9uKGJhc2UsIEZvcm1Db250cm9scywg
T3ZlcnJpZGVzSXRlbUFmdGVyKQogewogICAgIEFTU0VSVChiYXNlLT5oYXNUYWdOYW1lKGZvcm1U
YWcpIHx8IGJhc2UtPmhhc1RhZ05hbWUoZmllbGRzZXRUYWcpKTsKIH0KIAotUGFzc1JlZlB0cjxI
VE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbj4gSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb246OmNy
ZWF0ZShFbGVtZW50KiBiYXNlLCBDb2xsZWN0aW9uVHlwZSkKK1Bhc3NSZWZQdHI8SFRNTEZvcm1D
b250cm9sc0NvbGxlY3Rpb24+IEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uOjpjcmVhdGUoTm9k
ZSogYmFzZSwgQ29sbGVjdGlvblR5cGUpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIVE1M
Rm9ybUNvbnRyb2xzQ29sbGVjdGlvbihiYXNlKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAxMzU2NzAp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDE0ICszNywxNCBAQCBjbGFzcyBRdWFsaWZpZWROYW1lOwogCiBj
bGFzcyBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbiA6IHB1YmxpYyBIVE1MQ29sbGVjdGlvbiB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEZvcm1Db250cm9sc0NvbGxlY3Rp
b24+IGNyZWF0ZShFbGVtZW50KiwgQ29sbGVjdGlvblR5cGUpOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uPiBjcmVhdGUoTm9kZSosIENvbGxlY3Rpb25U
eXBlKTsKIAogICAgIHZpcnR1YWwgfkhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uKCk7CiAKICAg
ICB2aXJ0dWFsIE5vZGUqIG5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0
OwogCiBwcml2YXRlOgotICAgIEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uKEVsZW1lbnQqKTsK
KyAgICBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbihOb2RlKik7CiAKICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlTmFtZUNhY2hlKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE5hbWVDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxOYW1lQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDEzNTY3MCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTIg
KzI3LDEzIEBACiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCiAjaW5jbHVkZSAiSFRNTE9iamVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJOb2RlUmFyZURh
dGEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwogCi1IVE1MTmFtZUNvbGxlY3Rpb246OkhUTUxOYW1lQ29sbGVjdGlvbihEb2N1bWVudCogZG9j
dW1lbnQsIENvbGxlY3Rpb25UeXBlIHR5cGUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKK0hU
TUxOYW1lQ29sbGVjdGlvbjo6SFRNTE5hbWVDb2xsZWN0aW9uKE5vZGUqIGRvY3VtZW50LCBDb2xs
ZWN0aW9uVHlwZSB0eXBlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiAgICAgOiBIVE1MQ29s
bGVjdGlvbihkb2N1bWVudCwgdHlwZSwgT3ZlcnJpZGVzSXRlbUFmdGVyKQogICAgICwgbV9uYW1l
KG5hbWUpCiB7CkBAIC00MywxMCArNDQsOCBAQCBIVE1MTmFtZUNvbGxlY3Rpb246On5IVE1MTmFt
ZUNvbGxlY3Rpb24oCiAgICAgQVNTRVJUKGJhc2UoKSk7CiAgICAgQVNTRVJUKGJhc2UoKS0+aXNE
b2N1bWVudE5vZGUoKSk7CiAgICAgQVNTRVJUKHR5cGUoKSA9PSBXaW5kb3dOYW1lZEl0ZW1zIHx8
IHR5cGUoKSA9PSBEb2N1bWVudE5hbWVkSXRlbXMpOwotICAgIGlmICh0eXBlKCkgPT0gV2luZG93
TmFtZWRJdGVtcykKLSAgICAgICAgc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihiYXNlKCkpLT5yZW1v
dmVXaW5kb3dOYW1lZEl0ZW1DYWNoZSh0aGlzLCBtX25hbWUpOwotICAgIGVsc2UKLSAgICAgICAg
c3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihiYXNlKCkpLT5yZW1vdmVEb2N1bWVudE5hbWVkSXRlbUNh
Y2hlKHRoaXMsIG1fbmFtZSk7CisKKyAgICBvd25lck5vZGUoKS0+bm9kZUxpc3RzKCktPnJlbW92
ZUNhY2hlV2l0aEF0b21pY05hbWUodGhpcywgdHlwZSgpLCBtX25hbWUpOwogfQogCiBFbGVtZW50
KiBIVE1MTmFtZUNvbGxlY3Rpb246OnZpcnR1YWxJdGVtQWZ0ZXIodW5zaWduZWQmIG9mZnNldElu
QXJyYXksIEVsZW1lbnQqIHByZXZpb3VzKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTmFtZUNvbGxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxOYW1lQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAxMzU2NzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3
IEBAIGNsYXNzIERvY3VtZW50OwogCiBjbGFzcyBIVE1MTmFtZUNvbGxlY3Rpb24gOiBwdWJsaWMg
SFRNTENvbGxlY3Rpb24gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxOYW1l
Q29sbGVjdGlvbj4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgQ29sbGVjdGlvblR5cGUgdHlw
ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxO
YW1lQ29sbGVjdGlvbj4gY3JlYXRlKE5vZGUqIGRvY3VtZW50LCBDb2xsZWN0aW9uVHlwZSB0eXBl
LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEhUTUxOYW1lQ29sbGVjdGlvbihkb2N1bWVudCwgdHlwZSwgbmFtZSkpOwogICAgIH0K
QEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogICAgIH5IVE1MTmFtZUNvbGxlY3Rpb24oKTsKIAog
cHJpdmF0ZToKLSAgICBIVE1MTmFtZUNvbGxlY3Rpb24oRG9jdW1lbnQqLCBDb2xsZWN0aW9uVHlw
ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKTsKKyAgICBIVE1MTmFtZUNvbGxlY3Rpb24oTm9k
ZSosIENvbGxlY3Rpb25UeXBlLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpOwogCiAgICAgdmly
dHVhbCBFbGVtZW50KiB2aXJ0dWFsSXRlbUFmdGVyKHVuc2lnbmVkJiBvZmZzZXRJbkFycmF5LCBF
bGVtZW50KikgY29uc3QgT1ZFUlJJREU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE9wdGlvbnNDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxPcHRpb25zQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDEzNTY3MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjcsMTMgKzI3LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uOjpIVE1MT3B0aW9uc0NvbGxlY3Rpb24oRWxlbWVudCogc2VsZWN0KQorSFRNTE9wdGlv
bnNDb2xsZWN0aW9uOjpIVE1MT3B0aW9uc0NvbGxlY3Rpb24oTm9kZSogc2VsZWN0KQogICAgIDog
SFRNTENvbGxlY3Rpb24oc2VsZWN0LCBTZWxlY3RPcHRpb25zLCBEb2VzTm90T3ZlcnJpZGVJdGVt
QWZ0ZXIpCiB7CiAgICAgQVNTRVJUKHNlbGVjdC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNlbGVj
dFRhZykpOwogfQogCi1QYXNzUmVmUHRyPEhUTUxPcHRpb25zQ29sbGVjdGlvbj4gSFRNTE9wdGlv
bnNDb2xsZWN0aW9uOjpjcmVhdGUoRWxlbWVudCogc2VsZWN0LCBDb2xsZWN0aW9uVHlwZSkKK1Bh
c3NSZWZQdHI8SFRNTE9wdGlvbnNDb2xsZWN0aW9uPiBIVE1MT3B0aW9uc0NvbGxlY3Rpb246OmNy
ZWF0ZShOb2RlKiBzZWxlY3QsIENvbGxlY3Rpb25UeXBlKQogewogICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSFRNTE9wdGlvbnNDb2xsZWN0aW9uKHNlbGVjdCkpOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MT3B0aW9uc0NvbGxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAxMzU2NzApCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw3ICszNSw3IEBAIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKIGNsYXNz
IEhUTUxPcHRpb25zQ29sbGVjdGlvbiA6IHB1YmxpYyBIVE1MQ29sbGVjdGlvbiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTE9wdGlvbnNDb2xsZWN0aW9uPiBjcmVhdGUoRWxl
bWVudCosIENvbGxlY3Rpb25UeXBlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MT3B0aW9u
c0NvbGxlY3Rpb24+IGNyZWF0ZShOb2RlKiwgQ29sbGVjdGlvblR5cGUpOwogCiAgICAgdm9pZCBh
ZGQoUGFzc1JlZlB0cjxIVE1MT3B0aW9uRWxlbWVudD4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2
b2lkIGFkZChQYXNzUmVmUHRyPEhUTUxPcHRpb25FbGVtZW50PiwgaW50IGluZGV4LCBFeGNlcHRp
b25Db2RlJik7CkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldExlbmd0aCh1
bnNpZ25lZCwgRXhjZXB0aW9uQ29kZSYpOwogCiBwcml2YXRlOgotICAgIEhUTUxPcHRpb25zQ29s
bGVjdGlvbihFbGVtZW50Kik7CisgICAgSFRNTE9wdGlvbnNDb2xsZWN0aW9uKE5vZGUqKTsKIH07
CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlUm93
c0NvbGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRh
YmxlUm93c0NvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiAxMzU2NzApCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUx
LDEzICsxNTEsMTMgQEAgSFRNTFRhYmxlUm93RWxlbWVudCogSFRNTFRhYmxlUm93c0NvbGxlYwog
Ly8gTXVzdCBjYWxsIGdldCgpIG9uIHRoZSB0YWJsZSBpbiBjYXNlIHRoYXQgYXJndW1lbnQgaXMg
Y29tcGlsZWQgYmVmb3JlIGRlcmVmZXJlbmNpbmcgdGhlCiAvLyB0YWJsZSB0byBnZXQgYXQgdGhl
IGNvbGxlY3Rpb24gY2FjaGUuIE9yZGVyIG9mIGFyZ3VtZW50IGV2YWx1YXRpb24gaXMgdW5kZWZp
bmVkIGFuZCBjYW4KIC8vIGRpZmZlciBiZXR3ZWVuIGNvbXBpbGVycy4KLUhUTUxUYWJsZVJvd3ND
b2xsZWN0aW9uOjpIVE1MVGFibGVSb3dzQ29sbGVjdGlvbihFbGVtZW50KiB0YWJsZSkKK0hUTUxU
YWJsZVJvd3NDb2xsZWN0aW9uOjpIVE1MVGFibGVSb3dzQ29sbGVjdGlvbihOb2RlKiB0YWJsZSkK
ICAgICA6IEhUTUxDb2xsZWN0aW9uKHRhYmxlLCBUYWJsZVJvd3MsIE92ZXJyaWRlc0l0ZW1BZnRl
cikKIHsKICAgICBBU1NFUlQodGFibGUtPmhhc1RhZ05hbWUodGFibGVUYWcpKTsKIH0KIAotUGFz
c1JlZlB0cjxIVE1MVGFibGVSb3dzQ29sbGVjdGlvbj4gSFRNTFRhYmxlUm93c0NvbGxlY3Rpb246
OmNyZWF0ZShFbGVtZW50KiB0YWJsZSwgQ29sbGVjdGlvblR5cGUpCitQYXNzUmVmUHRyPEhUTUxU
YWJsZVJvd3NDb2xsZWN0aW9uPiBIVE1MVGFibGVSb3dzQ29sbGVjdGlvbjo6Y3JlYXRlKE5vZGUq
IHRhYmxlLCBDb2xsZWN0aW9uVHlwZSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhUTUxU
YWJsZVJvd3NDb2xsZWN0aW9uKHRhYmxlKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGFibGVSb3dzQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAxMzU2NzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVJvd3NDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDEzICszOCwxMyBAQCBjbGFzcyBIVE1MVGFibGVSb3dFbGVtZW50OwogCiBjbGFzcyBI
VE1MVGFibGVSb3dzQ29sbGVjdGlvbiA6IHB1YmxpYyBIVE1MQ29sbGVjdGlvbiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFRhYmxlUm93c0NvbGxlY3Rpb24+IGNyZWF0ZShF
bGVtZW50KiwgQ29sbGVjdGlvblR5cGUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxUYWJs
ZVJvd3NDb2xsZWN0aW9uPiBjcmVhdGUoTm9kZSosIENvbGxlY3Rpb25UeXBlKTsKIAogICAgIHN0
YXRpYyBIVE1MVGFibGVSb3dFbGVtZW50KiByb3dBZnRlcihIVE1MVGFibGVFbGVtZW50KiwgSFRN
TFRhYmxlUm93RWxlbWVudCopOwogICAgIHN0YXRpYyBIVE1MVGFibGVSb3dFbGVtZW50KiBsYXN0
Um93KEhUTUxUYWJsZUVsZW1lbnQqKTsKIAogcHJpdmF0ZToKLSAgICBIVE1MVGFibGVSb3dzQ29s
bGVjdGlvbihFbGVtZW50Kik7CisgICAgSFRNTFRhYmxlUm93c0NvbGxlY3Rpb24oTm9kZSopOwog
CiAgICAgdmlydHVhbCBFbGVtZW50KiB2aXJ0dWFsSXRlbUFmdGVyKHVuc2lnbmVkJiBvZmZzZXRJ
bkFycmF5LCBFbGVtZW50KikgY29uc3QgT1ZFUlJJREU7CiB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9MYWJlbHNOb2RlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvTGFiZWxzTm9kZUxpc3QuaAkocmV2aXNpb24gMTM1NjcxKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9MYWJlbHNOb2RlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICszMiw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgTGFiZWxzTm9kZUxpc3QgOiBwdWJsaWMgTGl2ZU5v
ZGVMaXN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYWJlbHNOb2RlTGlzdD4g
Y3JlYXRlKE5vZGUqIGZvck5vZGUsIGNvbnN0IEF0b21pY1N0cmluZyYpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8TGFiZWxzTm9kZUxpc3Q+IGNyZWF0ZShOb2RlKiBmb3JOb2RlLCBDb2xsZWN0aW9u
VHlwZSB0eXBlLCBjb25zdCBBdG9taWNTdHJpbmcmKQogICAgIHsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRCh0eXBlLCB0eXBlID09IExhYmVsc05vZGVMaXN0VHlwZSk7CiAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgTGFiZWxzTm9kZUxpc3QoZm9yTm9kZSkpOwogICAgIH0KICAgICB+TGFiZWxz
Tm9kZUxpc3QoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvUmFkaW9Ob2RlTGlzdC5oCShyZXZpc2lv
biAxMzU2NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL1JhZGlvTm9kZUxpc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsOCArMzYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJh
ZGlvTm9kZUxpc3QgOiBwdWJsaWMgTGl2ZU5vZGVMaXN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxSYWRpb05vZGVMaXN0PiBjcmVhdGUoTm9kZSogcm9vdE5vZGUsIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSYWRpb05vZGVMaXN0PiBj
cmVhdGUoTm9kZSogcm9vdE5vZGUsIENvbGxlY3Rpb25UeXBlIHR5cGUsIGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSkKICAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQodHlwZSwgdHlwZSA9PSBS
YWRpb05vZGVMaXN0VHlwZSk7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmFkaW9Ob2Rl
TGlzdChyb290Tm9kZSwgbmFtZSkpOwogICAgIH0KIAo=
</data>
<flag name="review"
          id="191907"
          type_id="1"
          status="+"
          setter="andersca"
    />
    <flag name="commit-queue"
          id="192037"
          type_id="3"
          status="-"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>