<?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>218713</bug_id>
          
          <creation_ts>2020-11-09 09:45:13 -0800</creation_ts>
          <short_desc>[LFC Display] Implement background bleed avoidance, and border-radius clipping of backgrounds</short_desc>
          <delta_ts>2020-11-09 13:56:33 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1705737</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-11-09 09:45:13 -0800</bug_when>
    <thetext>[LFC Display] Implement background bleed avoidance, and border-radius clipping of backgrounds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705738</commentid>
    <comment_count>1</comment_count>
      <attachid>413596</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-11-09 09:47:45 -0800</bug_when>
    <thetext>Created attachment 413596
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705868</commentid>
    <comment_count>2</comment_count>
      <attachid>413596</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-11-09 13:46:14 -0800</bug_when>
    <thetext>Comment on attachment 413596
Patch

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

&gt; Source/WebCore/display/css/DisplayBoxDecorationData.cpp:122
&gt; +        if (edge.style() != BorderStyle::None &amp;&amp; edge.width())

is it supposed to return true for BorderStyle::Hidden?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705871</commentid>
    <comment_count>3</comment_count>
      <attachid>413596</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-11-09 13:52:06 -0800</bug_when>
    <thetext>Comment on attachment 413596
Patch

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

&gt;&gt; Source/WebCore/display/css/DisplayBoxDecorationData.cpp:122
&gt;&gt; +        if (edge.style() != BorderStyle::None &amp;&amp; edge.width())
&gt; 
&gt; is it supposed to return true for BorderStyle::Hidden?

No, because hidden borders still takes space. This follows BorderValue::nonZero().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705872</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-11-09 13:55:02 -0800</bug_when>
    <thetext>Committed r269601: &lt;https://trac.webkit.org/changeset/269601&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 413596.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1705874</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-11-09 13:56:33 -0800</bug_when>
    <thetext>&lt;rdar://problem/71209154&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>413596</attachid>
            <date>2020-11-09 09:47:45 -0800</date>
            <delta_ts>2020-11-09 13:55:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-218713-20201109094744.patch</filename>
            <type>text/plain</type>
            <size>60451</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY5NTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzEzNWViMmY0OGY1ZDY3
MWY1M2ZiNzM0ODdhYjlkZGE2ZDEwZTlmYy4uZjZhODBjYWQ1ZDk4YTJhZGRkOWZkNTdjNGE0YmVj
ZjlmMDQ4ZTg1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDIwLTExLTA5ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFtMRkMgRGlzcGxh
eV0gSW1wbGVtZW50IGJhY2tncm91bmQgYmxlZWQgYXZvaWRhbmNlLCBhbmQgYm9yZGVyLXJhZGl1
cyBjbGlwcGluZyBvZiBiYWNrZ3JvdW5kcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE4NzEzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTWFrZSBCb3hEZWNvcmF0aW9uUGFpbnRlciBpbnRvIGEgY2xhc3Mg
c28gaXQgY2FuIGhvbGQgcmVmZXJlbmNlcyB0byB0aGUgYm94LCByb3VuZGVkIHJlY3QKKyAgICAg
ICAgZXRjLCBhbmQgc2V0dGxlIG9uIGEgcG9saWN5IG9mIHBhc3NpbmcgUGFpbnRpbmdDb250ZXh0
IGFzIGFuIGFyZ3VtZW50IHRvIGFsbCB0aGUgcGFpbnRpbmcKKyAgICAgICAgZnVuY3Rpb25zLgor
ICAgICAgICAKKyAgICAgICAgQWRkIGNvZGUgdG8gY29tcHV0ZSB0aGUgQmFja2dyb3VuZEJsZWVk
QXZvaWRhbmNlIHBvbGljeSwgYW5kIGltcGxlbWVudCB0aGUgdmFyaW91cyBwb2xpY2llcworICAg
ICAgICBmb2xsb3dpbmcgcmVuZGVyaW5nIGNvZGUuCisKKyAgICAgICAgKiBkaXNwbGF5L2Nzcy9E
aXNwbGF5Qm94RGVjb3JhdGlvbkRhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6
Qm9yZGVyRWRnZTo6b2JzY3VyZXNCYWNrZ3JvdW5kRWRnZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5OjpCb3hEZWNvcmF0aW9uRGF0YTo6aGFzQm9yZGVyIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveERlY29yYXRpb25EYXRhOjpoYXNCb3JkZXJSYWRpdXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94RGVjb3JhdGlvbkRhdGE6OmJv
cmRlck9ic2N1cmVzQmFja2dyb3VuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
OjpCb3hEZWNvcmF0aW9uRGF0YTo6Ym9yZGVyT2JzY3VyZXNCYWNrZ3JvdW5kRWRnZSBjb25zdCk6
CisgICAgICAgICogZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25EYXRhLmg6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5Ojpib3JkZXJXaWR0aHMpOgorICAgICAgICAqIGRpc3BsYXkv
Y3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uUGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5OjpCb3JkZXJQYWludGVyOjpCb3JkZXJQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXk6OnJvdW5kZWRSZWN0V2l0aEluY2x1ZGVkUmFkaWkpOgorICAgICAgICAoV2ViQ29y
ZTo6RGlzcGxheTo6cm91bmRlZEluc2V0Qm9yZGVyRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjpkcmF3Qm94U2lkZUZyb21QYXRoIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRlclBhaW50ZXI6OmNsaXBCb3JkZXJTaWRlUG9s
eWdvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3JkZXJQYWludGVyOjpk
cmF3TGluZUZvckJveFNpZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm9y
ZGVyUGFpbnRlcjo6cGFpbnRPbmVCb3JkZXJTaWRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXk6OkJvcmRlclBhaW50ZXI6OnBhaW50Qm9yZGVyU2lkZXMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6Qm9yZGVyUGFpbnRlcjo6cGFpbnRUcmFuc2x1Y2VudEJvcmRl
clNpZGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OnNocmlua1JlY3RCeU9u
ZURldmljZVBpeGVsKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRlclBhaW50ZXI6
OmJvcmRlcklubmVyUmVjdEFkanVzdGVkRm9yQmxlZWRBdm9pZGFuY2UgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6Qm9yZGVyUGFpbnRlcjo6cGFpbnRCb3JkZXJzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveERlY29yYXRpb25QYWludGVyOjpwYWludEJv
cmRlcnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94RGVjb3JhdGlvblBh
aW50ZXI6OnBhaW50RmlsbExheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6
OkJveERlY29yYXRpb25QYWludGVyOjpCb3hEZWNvcmF0aW9uUGFpbnRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5OjpCb3hEZWNvcmF0aW9uUGFpbnRlcjo6Y29tcHV0ZUJvcmRlclJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50
QmFja2dyb3VuZEltYWdlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hE
ZWNvcmF0aW9uUGFpbnRlcjo6YmFja2dyb3VuZFJvdW5kZWRSZWN0QWRqdXN0ZWRGb3JCbGVlZEF2
b2lkYW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hEZWNvcmF0aW9u
UGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXk6OkJveERlY29yYXRpb25QYWludGVyOjpkZXRlcm1pbmVCYWNrZ3JvdW5kQmxlZWRBdm9pZGFu
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94RGVjb3JhdGlvblBhaW50ZXI6OnBh
aW50QmFja2dyb3VuZEFuZEJvcmRlcnMgY29uc3QpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRlclBhaW50ZXI6OnJvdW5kZWRCb3JkZXJGb3JS
ZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJvcmRlclBh
aW50ZXI6OnJvdW5kZWRJbnNldEJvcmRlckZvclJlY3QgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50Qm9yZGVycyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpwYWludEZpbGxMYXllcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpCb3hEZWNvcmF0aW9uUGFpbnRlcjo6
cGFpbnRCYWNrZ3JvdW5kSW1hZ2VzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXk6OkJveERlY29yYXRpb25QYWludGVyOjpwYWludEJhY2tncm91bmQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50QmFja2dy
b3VuZEFuZEJvcmRlcnMpOiBEZWxldGVkLgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlC
b3hEZWNvcmF0aW9uUGFpbnRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94RGVj
b3JhdGlvblBhaW50ZXI6OmJvcmRlclJvdW5kZWRSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXk6OkJveERlY29yYXRpb25QYWludGVyOjppbmNsdWRlTGVmdEVkZ2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheTo6Qm94RGVjb3JhdGlvblBhaW50ZXI6OmluY2x1
ZGVSaWdodEVkZ2UgY29uc3QpOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlCb3hQYWlu
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXk6OkJveFBhaW50ZXI6OnBhaW50Qm94
RGVjb3JhdGlvbnMpOgorICAgICAgICAqIGRpc3BsYXkvY3NzL0Rpc3BsYXlTdHlsZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5OjpTdHlsZTo6YmFja2dyb3VuZEhhc09wYXF1ZVRvcExh
eWVyIGNvbnN0KToKKyAgICAgICAgKiBkaXNwbGF5L2Nzcy9EaXNwbGF5U3R5bGUuaDoKKwogMjAy
MC0xMS0wNyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbTEZDIERpc3BsYXldIEltcGxlbWVudCBDU1MgYm9yZGVyIHBhaW50aW5nCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvbkRhdGEuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRpb25EYXRhLmNw
cAppbmRleCBjNWJmZWNhNjU1YzZjN2Y1MGU2NWE5MGQ2MTc3ZGNmMzZkMDljMGU5Li4zNTk1MWY3
OGJhYWZkZTQ2YzRkOWU5YzU4YjUzMjQyZWM3MjQzNDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvbkRhdGEuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uRGF0YS5jcHAKQEAgLTU1
LDYgKzU1LDIwIEBAIGJvb2wgQm9yZGVyRWRnZTo6b2JzY3VyZXNCYWNrZ3JvdW5kKCkgY29uc3QK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBCb3JkZXJFZGdlOjpvYnNjdXJlc0JhY2tncm91
bmRFZGdlKGZsb2F0IHNjYWxlKSBjb25zdAoreworICAgIGlmICghbV9pc1ByZXNlbnQgfHwgbV9p
c1RyYW5zcGFyZW50IHx8IChtX3dpZHRoICogc2NhbGUpIDwgZmxvb3JUb0RldmljZVBpeGVsKDIs
IHNjYWxlKSB8fCAhbV9jb2xvci5pc09wYXF1ZSgpIHx8IG1fc3R5bGUgPT0gQm9yZGVyU3R5bGU6
OkhpZGRlbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fc3R5bGUgPT0gQm9y
ZGVyU3R5bGU6OkRvdHRlZCB8fCBtX3N0eWxlID09IEJvcmRlclN0eWxlOjpEYXNoZWQpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX3N0eWxlID09IEJvcmRlclN0eWxlOjpEb3Vi
bGUpCisgICAgICAgIHJldHVybiBtX3dpZHRoID49IHNjYWxlICogZmxvb3JUb0RldmljZVBpeGVs
KDUsIHNjYWxlKTsgLy8gVGhlIG91dGVyIGJhbmQgbmVlZHMgdG8gYmUgPj0gMnB4IHdpZGUgYXQg
dW5pdCBzY2FsZS4KKworICAgIHJldHVybiB0cnVlOworfQorCiBSZWN0RWRnZXM8Qm9yZGVyRWRn
ZT4gY2FsY3VsYXRlQm9yZGVyRWRnZXMoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCBw
aXhlbFNuYXBwaW5nRmFjdG9yLCBib29sIGluY2x1ZGVMb2dpY2FsTGVmdEVkZ2UsIGJvb2wgaW5j
bHVkZUxvZ2ljYWxSaWdodEVkZ2UpCiB7CiAgICAgYm9vbCBob3Jpem9udGFsID0gc3R5bGUuaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKTsKQEAgLTk3LDYgKzExMSw1MyBAQCBzdGQ6OnBhaXI8Qm94
U2lkZSwgQm94U2lkZT4gYWRqYWNlbnRTaWRlc0ZvclNpZGUoQm94U2lkZSBzaWRlKQogCiBCb3hE
ZWNvcmF0aW9uRGF0YTo6Qm94RGVjb3JhdGlvbkRhdGEoKSA9IGRlZmF1bHQ7CiAKK2Jvb2wgQm94
RGVjb3JhdGlvbkRhdGE6Omhhc0JvcmRlcigpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFRoZXJl
J3MgYSB0cmlja3kgaW50ZXJhY3Rpb24gYmV0d2VlbiBib3JkZXJzIGFuZCBib3JkZXItaW1hZ2Ug
aGVyZTogd2Via2l0Lm9yZy9iLzIxNzkwMC4KKyAgICBpZiAoaGFzQm9yZGVySW1hZ2UoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBmb3IgKGF1dG8gc2lkZSA6IGFsbEJveFNpZGVzKSB7
CisgICAgICAgIGF1dG8mIGVkZ2UgPSBtX2JvcmRlckVkZ2VzW3NpZGVdOworICAgICAgICBpZiAo
ZWRnZS5zdHlsZSgpICE9IEJvcmRlclN0eWxlOjpOb25lICYmIGVkZ2Uud2lkdGgoKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
Qm94RGVjb3JhdGlvbkRhdGE6Omhhc0JvcmRlclJhZGl1cygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fYm9yZGVyUmFkaWkgJiYgIW1fYm9yZGVyUmFkaWktPmlzWmVybygpOworfQorCitib29sIEJv
eERlY29yYXRpb25EYXRhOjpib3JkZXJPYnNjdXJlc0JhY2tncm91bmQoKSBjb25zdAoreworICAg
IGlmICghaGFzQm9yZGVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEJhaWwg
aWYgd2UgaGF2ZSBhbnkgYm9yZGVyLWltYWdlIGZvciBub3cuIFdlIGNvdWxkIGxvb2sgYXQgdGhl
IGltYWdlIGFscGhhIHRvIGltcHJvdmUgdGhpcy4KKyAgICAvLyBGSVhNRTogQ2hlY2sgYm9yZGVy
LWltYWdlLgorCisgICAgZm9yIChhdXRvIHNpZGUgOiBhbGxCb3hTaWRlcykgeworICAgICAgICBp
ZiAoIW1fYm9yZGVyRWRnZXMuYXQoc2lkZSkub2JzY3VyZXNCYWNrZ3JvdW5kKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
Qm94RGVjb3JhdGlvbkRhdGE6OmJvcmRlck9ic2N1cmVzQmFja2dyb3VuZEVkZ2UoY29uc3QgRmxv
YXRTaXplJiBjb250ZXh0U2NhbGUpIGNvbnN0Cit7CisgICAgZm9yIChhdXRvIHNpZGUgOiBhbGxC
b3hTaWRlcykgeworICAgICAgICBhdXRvJiBjdXJyRWRnZSA9IG1fYm9yZGVyRWRnZXMuYXQoc2lk
ZSk7CisgICAgICAgIC8vIEZJWE1FOiBmb3IgdmVydGljYWwgdGV4dAorICAgICAgICBmbG9hdCBh
eGlzU2NhbGUgPSAoc2lkZSA9PSBCb3hTaWRlOjpUb3AgfHwgc2lkZSA9PSBCb3hTaWRlOjpCb3R0
b20pID8gY29udGV4dFNjYWxlLmhlaWdodCgpIDogY29udGV4dFNjYWxlLndpZHRoKCk7CisgICAg
ICAgIGlmICghY3VyckVkZ2Uub2JzY3VyZXNCYWNrZ3JvdW5kRWRnZShheGlzU2NhbGUpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQogCiB9
IC8vIG5hbWVzcGFjZSBEaXNwbGF5CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvbkRhdGEuaCBi
L1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uRGF0YS5oCmlu
ZGV4IDg5NmIzODc4NjM4MTAxMjdmNzg0MTg3NmEzZjE5YzViZGZlMmQ0ZjAuLmYyYzc3OWQ2MTIz
ZGE4OTY0MTMyMTU5MjhkZGE5YzAwN2Y0YzMyYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hEZWNvcmF0aW9uRGF0YS5oCkBAIC02NSw2ICs2NSw3
IEBAIHB1YmxpYzoKICAgICBmbG9hdCBvdXRlcldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9vdXRl
cldpZHRoOyB9CiAKICAgICBib29sIG9ic2N1cmVzQmFja2dyb3VuZCgpIGNvbnN0OworICAgIGJv
b2wgb2JzY3VyZXNCYWNrZ3JvdW5kRWRnZShmbG9hdCBzY2FsZSkgY29uc3Q7CiAKIHByaXZhdGU6
CiAgICAgQ29sb3IgbV9jb2xvcjsKQEAgLTgwLDYgKzgxLDE2IEBAIFJlY3RFZGdlczxCb3JkZXJF
ZGdlPiBjYWxjdWxhdGVCb3JkZXJFZGdlcyhjb25zdCBSZW5kZXJTdHlsZSYsIGZsb2F0IHBpeGVs
U25hcHBpCiAKIHN0ZDo6cGFpcjxCb3hTaWRlLCBCb3hTaWRlPiBhZGphY2VudFNpZGVzRm9yU2lk
ZShCb3hTaWRlKTsKIAoraW5saW5lIFJlY3RFZGdlczxmbG9hdD4gYm9yZGVyV2lkdGhzKGNvbnN0
IFJlY3RFZGdlczxCb3JkZXJFZGdlPiYgZWRnZXMpCit7CisgICAgcmV0dXJuIHsKKyAgICAgICAg
ZWRnZXMudG9wKCkud2lkdGgoKSwKKyAgICAgICAgZWRnZXMucmlnaHQoKS53aWR0aCgpLAorICAg
ICAgICBlZGdlcy5ib3R0b20oKS53aWR0aCgpLAorICAgICAgICBlZGdlcy5sZWZ0KCkud2lkdGgo
KQorICAgIH07Cit9CisKIC8vIFBlci1ib3ggZGF0YSB3aXRoIHBpeGVsLXNuYXBwZWQgZ2VvbWV0
cnkgZm9yIGJhY2tncm91bmQgaW1hZ2VzIGFuZCBib3JkZXItcmFkaXVzLgogY2xhc3MgQm94RGVj
b3JhdGlvbkRhdGEgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEX1dJVEhfSEVBUF9JREVO
VElGSUVSKEJveERlY29yYXRpb25EYXRhKTsKQEAgLTk2LDYgKzEwNywxMSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRCb3JkZXJSYWRpaShzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRSb3VuZGVkUmVjdDo6
UmFkaWk+JiYgcmFkaWkpIHsgbV9ib3JkZXJSYWRpaSA9IFdURk1vdmUocmFkaWkpOyB9CiAKICAg
ICBib29sIGhhc0JvcmRlckltYWdlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0gLy8gRklYTUU6
IEltcGxlbWVudCBib3JkZXItaW1hZ2UuCisgICAgYm9vbCBoYXNCb3JkZXIoKSBjb25zdDsKKyAg
ICBib29sIGhhc0JvcmRlclJhZGl1cygpIGNvbnN0OworCisgICAgYm9vbCBib3JkZXJPYnNjdXJl
c0JhY2tncm91bmQoKSBjb25zdDsKKyAgICBib29sIGJvcmRlck9ic2N1cmVzQmFja2dyb3VuZEVk
Z2UoY29uc3QgRmxvYXRTaXplJiBjb250ZXh0U2NhbGUpIGNvbnN0OwogCiBwcml2YXRlOgogICAg
IFZlY3RvcjxGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5LCAxPiBtX2JhY2tncm91bmRJbWFnZUdlb21l
dHJ5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERl
Y29yYXRpb25QYWludGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlC
b3hEZWNvcmF0aW9uUGFpbnRlci5jcHAKaW5kZXggODlkNzFlNjkyNDk2MDAzMzMyZTIwNzZmZGRh
ZWMyZmM1MTQwYjAyMi4uMDdmODUwNWIyZTU0YThiOTQ1ZjUzNzJiNzU1MjgwZDVhMjJhMzUyYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERlY29yYXRp
b25QYWludGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94
RGVjb3JhdGlvblBhaW50ZXIuY3BwCkBAIC00NiwxNiArNDYsMTYgQEAgbmFtZXNwYWNlIERpc3Bs
YXkgewogCiBjbGFzcyBCb3JkZXJQYWludGVyIHsKIHB1YmxpYzoKLSAgICBCb3JkZXJQYWludGVy
KGNvbnN0IFJlY3RFZGdlczxCb3JkZXJFZGdlPiYgZWRnZXMsIFBhaW50aW5nQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgYm9yZGVyUmVjdCwgYm9vbCBpbmNsdWRlTGVm
dEVkZ2UsIGJvb2wgaW5jbHVkZVJpZ2h0RWRnZSkKKyAgICBCb3JkZXJQYWludGVyKGNvbnN0IFJl
Y3RFZGdlczxCb3JkZXJFZGdlPiYgZWRnZXMsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGJvcmRl
clJlY3QsIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZSBibGVlZEF2b2lkYW5jZSwgYm9vbCBpbmNs
dWRlTGVmdEVkZ2UsIGJvb2wgaW5jbHVkZVJpZ2h0RWRnZSkKICAgICAgICAgOiBtX2VkZ2VzKGVk
Z2VzKQotICAgICAgICAsIG1fcGFpbnRpbmdDb250ZXh0KGNvbnRleHQpCiAgICAgICAgICwgbV9i
b3JkZXJSZWN0KGJvcmRlclJlY3QpCisgICAgICAgICwgbV9ibGVlZEF2b2lkYW5jZShibGVlZEF2
b2lkYW5jZSkKICAgICAgICAgLCBtX2luY2x1ZGVMZWZ0RWRnZShpbmNsdWRlTGVmdEVkZ2UpCiAg
ICAgICAgICwgbV9pbmNsdWRlUmlnaHRFZGdlKGluY2x1ZGVSaWdodEVkZ2UpCiAgICAgewogICAg
IH0KICAgICAKLSAgICB2b2lkIHBhaW50Qm9yZGVycygpIGNvbnN0OworICAgIHZvaWQgcGFpbnRC
b3JkZXJzKFBhaW50aW5nQ29udGV4dCYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBi
b29sIGVkZ2VzU2hhcmVDb2xvcihjb25zdCBCb3JkZXJFZGdlJiBmaXJzdEVkZ2UsIGNvbnN0IEJv
cmRlckVkZ2UmIHNlY29uZEVkZ2UpCkBAIC05MywzMiArOTMsNjAgQEAgcHJpdmF0ZToKICAgICBz
dGF0aWMgRmxvYXRSb3VuZGVkUmVjdCBjYWxjdWxhdGVBZGp1c3RlZElubmVyQm9yZGVyKGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmIGlubmVyQm9yZGVyLCBCb3hTaWRlKTsKICAgICBzdGF0aWMgdm9p
ZCBjYWxjdWxhdGVCb3JkZXJTdHlsZUNvbG9yKEJvcmRlclN0eWxlLCBCb3hTaWRlLCBDb2xvciYp
OwogCisgICAgRmxvYXRSZWN0IGJvcmRlcklubmVyUmVjdEFkanVzdGVkRm9yQmxlZWRBdm9pZGFu
Y2UoY29uc3QgUGFpbnRpbmdDb250ZXh0JikgY29uc3Q7CisKICAgICBib29sIGNvbG9yc01hdGNo
QXRDb3JuZXIoQm94U2lkZSwgQm94U2lkZSBhZGphY2VudFNpZGUpIGNvbnN0OwogICAgIGJvb2wg
Y29sb3JOZWVkc0FudGlBbGlhc0F0Q29ybmVyKEJveFNpZGUsIEJveFNpZGUgYWRqYWNlbnRTaWRl
KSBjb25zdDsKICAgICBib29sIHdpbGxCZU92ZXJkcmF3bihCb3hTaWRlLCBCb3hTaWRlIGFkamFj
ZW50U2lkZSkgY29uc3Q7CiAgICAgYm9vbCBqb2luUmVxdWlyZXNNaXRyZShCb3hTaWRlLCBCb3hT
aWRlIGFkamFjZW50U2lkZSwgYm9vbCBhbGxvd092ZXJkcmF3KSBjb25zdDsKIAotICAgIEZsb2F0
Um91bmRlZFJlY3Qgcm91bmRlZEJvcmRlckZvclJlY3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7
Ci0gICAgRmxvYXRSb3VuZGVkUmVjdCByb3VuZGVkSW5zZXRCb3JkZXJGb3JSZWN0KGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IFJlY3RFZGdlczxmbG9hdD4mIGJvcmRlcldpZHRoKSBjb25zdDsKLQot
ICAgIHZvaWQgY2xpcEJvcmRlclNpZGVQb2x5Z29uKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIG91
dGVyQm9yZGVyLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwgQm94U2lkZSwg
Ym9vbCBmaXJzdEVkZ2VNYXRjaGVzLCBib29sIHNlY29uZEVkZ2VNYXRjaGVzKSBjb25zdDsKKyAg
ICB2b2lkIGNsaXBCb3JkZXJTaWRlUG9seWdvbihQYWludGluZ0NvbnRleHQmLCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiBvdXRlckJvcmRlciwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgaW5uZXJC
b3JkZXIsIEJveFNpZGUsIGJvb2wgZmlyc3RFZGdlTWF0Y2hlcywgYm9vbCBzZWNvbmRFZGdlTWF0
Y2hlcykgY29uc3Q7CiAKLSAgICB2b2lkIGRyYXdMaW5lRm9yQm94U2lkZShjb25zdCBGbG9hdFJl
Y3QmLCBCb3hTaWRlLCBDb2xvciwgQm9yZGVyU3R5bGUsIGZsb2F0IGFkamFjZW50V2lkdGgxLCBm
bG9hdCBhZGphY2VudFdpZHRoMiwgYm9vbCBhbnRpYWxpYXMpIGNvbnN0OwotICAgIHZvaWQgZHJh
d0JveFNpZGVGcm9tUGF0aChjb25zdCBGbG9hdFJlY3QmIGJvcmRlclJlY3QsIGNvbnN0IFBhdGgm
IGJvcmRlclBhdGgsIGZsb2F0IHRoaWNrbmVzcywgZmxvYXQgZHJhd1RoaWNrbmVzcywgQm94U2lk
ZSwgQ29sb3IsIEJvcmRlclN0eWxlKSBjb25zdDsKKyAgICB2b2lkIGRyYXdMaW5lRm9yQm94U2lk
ZShQYWludGluZ0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmLCBCb3hTaWRlLCBDb2xvciwgQm9y
ZGVyU3R5bGUsIGZsb2F0IGFkamFjZW50V2lkdGgxLCBmbG9hdCBhZGphY2VudFdpZHRoMiwgYm9v
bCBhbnRpYWxpYXMpIGNvbnN0OworICAgIHZvaWQgZHJhd0JveFNpZGVGcm9tUGF0aChQYWludGlu
Z0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGJvcmRlclJlY3QsIGNvbnN0IFBhdGgmIGJvcmRl
clBhdGgsIGZsb2F0IHRoaWNrbmVzcywgZmxvYXQgZHJhd1RoaWNrbmVzcywgQm94U2lkZSwgQ29s
b3IsIEJvcmRlclN0eWxlKSBjb25zdDsKIAotICAgIHZvaWQgcGFpbnRPbmVCb3JkZXJTaWRlKGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIG91dGVyQm9yZGVyLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiBpbm5lckJvcmRlciwgY29uc3QgRmxvYXRSZWN0JiBzaWRlUmVjdCwgQm94U2lkZSwgY29uc3Qg
UGF0aCosIGJvb2wgYW50aWFsaWFzLCBjb25zdCBDb2xvciogb3ZlcnJpZGVDb2xvcikgY29uc3Q7
Ci0gICAgdm9pZCBwYWludEJvcmRlclNpZGVzKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIG91dGVy
Qm9yZGVyLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwgQm94U2lkZVNldCwg
Ym9vbCBhbnRpYWxpYXMsIGNvbnN0IENvbG9yKiBvdmVycmlkZUNvbG9yID0gbnVsbHB0cikgY29u
c3Q7Ci0gICAgdm9pZCBwYWludFRyYW5zbHVjZW50Qm9yZGVyU2lkZXMoY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGlubmVyQm9yZGVy
LCBCb3hTaWRlU2V0LCBib29sIGFudGlhbGlhcykgY29uc3Q7CisgICAgdm9pZCBwYWludE9uZUJv
cmRlclNpZGUoUGFpbnRpbmdDb250ZXh0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgb3V0ZXJC
b3JkZXIsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGlubmVyQm9yZGVyLCBjb25zdCBGbG9hdFJl
Y3QmIHNpZGVSZWN0LCBCb3hTaWRlLCBjb25zdCBQYXRoKiwgYm9vbCBhbnRpYWxpYXMsIGNvbnN0
IENvbG9yKiBvdmVycmlkZUNvbG9yKSBjb25zdDsKKyAgICB2b2lkIHBhaW50Qm9yZGVyU2lkZXMo
UGFpbnRpbmdDb250ZXh0JiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIGlubmVyQm9yZGVyLCBGbG9hdFNpemUgaW5uZXJCb3JkZXJC
bGVlZEFkanVzdG1lbnQsIEJveFNpZGVTZXQsIGJvb2wgYW50aWFsaWFzLCBjb25zdCBDb2xvciog
b3ZlcnJpZGVDb2xvciA9IG51bGxwdHIpIGNvbnN0OworICAgIHZvaWQgcGFpbnRUcmFuc2x1Y2Vu
dEJvcmRlclNpZGVzKFBhaW50aW5nQ29udGV4dCYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIG91
dGVyQm9yZGVyLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwgRmxvYXRTaXpl
IGlubmVyQm9yZGVyQmxlZWRBZGp1c3RtZW50LCBCb3hTaWRlU2V0LCBib29sIGFudGlhbGlhcykg
Y29uc3Q7CiAKICAgICBjb25zdCBSZWN0RWRnZXM8Qm9yZGVyRWRnZT4mIG1fZWRnZXM7Ci0gICAg
UGFpbnRpbmdDb250ZXh0JiBtX3BhaW50aW5nQ29udGV4dDsKLSAgICAKLSAgICBGbG9hdFJvdW5k
ZWRSZWN0IG1fYm9yZGVyUmVjdDsKLSAgICAKLSAgICBib29sIG1faW5jbHVkZUxlZnRFZGdlIHsg
dHJ1ZSB9OwotICAgIGJvb2wgbV9pbmNsdWRlUmlnaHRFZGdlIHsgdHJ1ZSB9OworICAgIGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QgbV9ib3JkZXJSZWN0OworICAgIGNvbnN0IEJhY2tncm91bmRCbGVl
ZEF2b2lkYW5jZSBtX2JsZWVkQXZvaWRhbmNlOworICAgIGNvbnN0IGJvb2wgbV9pbmNsdWRlTGVm
dEVkZ2U7CisgICAgY29uc3QgYm9vbCBtX2luY2x1ZGVSaWdodEVkZ2U7CiB9OwogCitzdGF0aWMg
RmxvYXRSb3VuZGVkUmVjdCByb3VuZGVkUmVjdFdpdGhJbmNsdWRlZFJhZGlpKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpLCBib29sIGlu
Y2x1ZGVMZWZ0RWRnZSwgYm9vbCBpbmNsdWRlUmlnaHRFZGdlKQoreworICAgIEZsb2F0Um91bmRl
ZFJlY3Q6OlJhZGlpIHJlc3VsdFJhZGlpOworCisgICAgaWYgKGluY2x1ZGVMZWZ0RWRnZSkgewor
ICAgICAgICByZXN1bHRSYWRpaS5zZXRUb3BMZWZ0KHJhZGlpLnRvcExlZnQoKSk7CisgICAgICAg
IHJlc3VsdFJhZGlpLnNldEJvdHRvbUxlZnQocmFkaWkuYm90dG9tTGVmdCgpKTsKKyAgICB9CisK
KyAgICBpZiAoaW5jbHVkZVJpZ2h0RWRnZSkgeworICAgICAgICByZXN1bHRSYWRpaS5zZXRUb3BS
aWdodChyYWRpaS50b3BSaWdodCgpKTsKKyAgICAgICAgcmVzdWx0UmFkaWkuc2V0Qm90dG9tUmln
aHQocmFkaWkuYm90dG9tUmlnaHQoKSk7CisgICAgfQorCisgICAgcmVzdWx0UmFkaWkuc2NhbGUo
Y2FsY0JvcmRlclJhZGlpQ29uc3RyYWludFNjYWxlRm9yKHJlY3QsIHJlc3VsdFJhZGlpKSk7Cisg
ICAgcmV0dXJuIEZsb2F0Um91bmRlZFJlY3QgeyByZWN0LCByZXN1bHRSYWRpaSB9OworfQorCitz
dGF0aWMgRmxvYXRSb3VuZGVkUmVjdCByb3VuZGVkSW5zZXRCb3JkZXJGb3JSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgYm9yZGVyUmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlp
LCBjb25zdCBSZWN0RWRnZXM8ZmxvYXQ+JiBib3JkZXJXaWR0aCwgYm9vbCBpbmNsdWRlTGVmdEVk
Z2UsIGJvb2wgaW5jbHVkZVJpZ2h0RWRnZSkKK3sKKyAgICBhdXRvIGluc2V0UmVjdCA9IEZsb2F0
UmVjdCB7IGJvcmRlclJlY3QueCgpICsgYm9yZGVyV2lkdGgubGVmdCgpLCBib3JkZXJSZWN0Lnko
KSArIGJvcmRlcldpZHRoLnRvcCgpLAorICAgICAgICBib3JkZXJSZWN0LndpZHRoKCkgLSBib3Jk
ZXJXaWR0aC5sZWZ0KCkgLSBib3JkZXJXaWR0aC5yaWdodCgpLCBib3JkZXJSZWN0LmhlaWdodCgp
IC0gYm9yZGVyV2lkdGgudG9wKCkgLSBib3JkZXJXaWR0aC5ib3R0b20oKSB9OworCisgICAgaWYg
KCFyYWRpaS5pc1plcm8oKSkgeworICAgICAgICBhdXRvIGFkanVzdGVkUmFkaWkgPSByYWRpaTsK
KyAgICAgICAgYWRqdXN0ZWRSYWRpaS5zaHJpbmsoYm9yZGVyV2lkdGgudG9wKCksIGJvcmRlcldp
ZHRoLmJvdHRvbSgpLCBib3JkZXJXaWR0aC5sZWZ0KCksIGJvcmRlcldpZHRoLnJpZ2h0KCkpOwor
ICAgICAgICByZXR1cm4gcm91bmRlZFJlY3RXaXRoSW5jbHVkZWRSYWRpaShpbnNldFJlY3QsIGFk
anVzdGVkUmFkaWksIGluY2x1ZGVMZWZ0RWRnZSwgaW5jbHVkZVJpZ2h0RWRnZSk7CisgICAgfQor
CisgICAgcmV0dXJuIEZsb2F0Um91bmRlZFJlY3QgeyBpbnNldFJlY3QsIHsgfSB9OworfQogCiAv
LyBCb3JkZXJTdHlsZTo6T3V0c2V0IGRhcmtlbnMgdGhlIGJvdHRvbSBhbmQgcmlnaHQgKGFuZCBt
YXliZSBsaWdodGVucyB0aGUgdG9wIGFuZCBsZWZ0KQogLy8gQm9yZGVyU3R5bGU6Okluc2V0IGRh
cmtlbnMgdGhlIHRvcCBhbmQgbGVmdCAoYW5kIG1heWJlIGxpZ2h0ZW5zIHRoZSBib3R0b20gYW5k
IHJpZ2h0KQpAQCAtMzMwLDQ4ICszNTgsNyBAQCBib29sIEJvcmRlclBhaW50ZXI6OmpvaW5SZXF1
aXJlc01pdHJlKEJveFNpZGUgc2lkZSwgQm94U2lkZSBhZGphY2VudFNpZGUsIGJvb2wgYQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIEZsb2F0Um91bmRlZFJlY3Qgcm91bmRlZFJlY3RX
aXRoSW5jbHVkZWRSYWRpaShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3Q6OlJhZGlpJiByYWRpaSwgYm9vbCBpbmNsdWRlTGVmdEVkZ2UsIGJvb2wgaW5jbHVkZVJp
Z2h0RWRnZSkKLXsKLSAgICBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSByZXN1bHRSYWRpaTsKLQot
ICAgIGlmIChpbmNsdWRlTGVmdEVkZ2UpIHsKLSAgICAgICAgcmVzdWx0UmFkaWkuc2V0VG9wTGVm
dChyYWRpaS50b3BMZWZ0KCkpOwotICAgICAgICByZXN1bHRSYWRpaS5zZXRCb3R0b21MZWZ0KHJh
ZGlpLmJvdHRvbUxlZnQoKSk7Ci0gICAgfQotCi0gICAgaWYgKGluY2x1ZGVSaWdodEVkZ2UpIHsK
LSAgICAgICAgcmVzdWx0UmFkaWkuc2V0VG9wUmlnaHQocmFkaWkudG9wUmlnaHQoKSk7Ci0gICAg
ICAgIHJlc3VsdFJhZGlpLnNldEJvdHRvbVJpZ2h0KHJhZGlpLmJvdHRvbVJpZ2h0KCkpOwotICAg
IH0KLQotICAgIHJlc3VsdFJhZGlpLnNjYWxlKGNhbGNCb3JkZXJSYWRpaUNvbnN0cmFpbnRTY2Fs
ZUZvcihyZWN0LCByZXN1bHRSYWRpaSkpOwotICAgIHJldHVybiBGbG9hdFJvdW5kZWRSZWN0IHsg
cmVjdCwgcmVzdWx0UmFkaWkgfTsKLX0KLQotRmxvYXRSb3VuZGVkUmVjdCBCb3JkZXJQYWludGVy
Ojpyb3VuZGVkQm9yZGVyRm9yUmVjdChjb25zdCBGbG9hdFJlY3QmIGJvcmRlclJlY3QpIGNvbnN0
Ci17Ci0gICAgaWYgKG1fYm9yZGVyUmVjdC5pc1JvdW5kZWQoKSkgewotICAgICAgICBhdXRvIHJh
ZGlpID0gbV9ib3JkZXJSZWN0LnJhZGlpKCk7Ci0gICAgICAgIHJldHVybiByb3VuZGVkUmVjdFdp
dGhJbmNsdWRlZFJhZGlpKGJvcmRlclJlY3QsIHJhZGlpLCBtX2luY2x1ZGVMZWZ0RWRnZSwgbV9p
bmNsdWRlUmlnaHRFZGdlKTsKLSAgICB9Ci0gICAgcmV0dXJuIEZsb2F0Um91bmRlZFJlY3QgeyBi
b3JkZXJSZWN0IH07Ci19Ci0KLUZsb2F0Um91bmRlZFJlY3QgQm9yZGVyUGFpbnRlcjo6cm91bmRl
ZEluc2V0Qm9yZGVyRm9yUmVjdChjb25zdCBGbG9hdFJlY3QmIGJvcmRlclJlY3QsIGNvbnN0IFJl
Y3RFZGdlczxmbG9hdD4mIGJvcmRlcldpZHRoKSBjb25zdAotewotICAgIGF1dG8gaW5zZXRSZWN0
ID0gRmxvYXRSZWN0IHsgYm9yZGVyUmVjdC54KCkgKyBib3JkZXJXaWR0aC5sZWZ0KCksIGJvcmRl
clJlY3QueSgpICsgYm9yZGVyV2lkdGgudG9wKCksCi0gICAgICAgIGJvcmRlclJlY3Qud2lkdGgo
KSAtIGJvcmRlcldpZHRoLmxlZnQoKSAtIGJvcmRlcldpZHRoLnJpZ2h0KCksIGJvcmRlclJlY3Qu
aGVpZ2h0KCkgLSBib3JkZXJXaWR0aC50b3AoKSAtIGJvcmRlcldpZHRoLmJvdHRvbSgpIH07Ci0K
LSAgICBpZiAobV9ib3JkZXJSZWN0LmlzUm91bmRlZCgpKSB7Ci0gICAgICAgIGF1dG8gcmFkaWkg
PSBtX2JvcmRlclJlY3QucmFkaWkoKTsKLSAgICAgICAgcmFkaWkuc2hyaW5rKGJvcmRlcldpZHRo
LnRvcCgpLCBib3JkZXJXaWR0aC5ib3R0b20oKSwgYm9yZGVyV2lkdGgubGVmdCgpLCBib3JkZXJX
aWR0aC5yaWdodCgpKTsKLSAgICAgICAgcmV0dXJuIHJvdW5kZWRSZWN0V2l0aEluY2x1ZGVkUmFk
aWkoaW5zZXRSZWN0LCByYWRpaSwgbV9pbmNsdWRlTGVmdEVkZ2UsIG1faW5jbHVkZVJpZ2h0RWRn
ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIEZsb2F0Um91bmRlZFJlY3QgeyBpbnNldFJlY3QsIHsg
fSB9OwotfQotCi12b2lkIEJvcmRlclBhaW50ZXI6OmRyYXdCb3hTaWRlRnJvbVBhdGgoY29uc3Qg
RmxvYXRSZWN0JiBib3JkZXJSZWN0LCBjb25zdCBQYXRoJiBib3JkZXJQYXRoLCBmbG9hdCB0aGlj
a25lc3MsIGZsb2F0IGRyYXdUaGlja25lc3MsIEJveFNpZGUgc2lkZSwgQ29sb3IgY29sb3IsIEJv
cmRlclN0eWxlIGJvcmRlclN0eWxlKSBjb25zdAordm9pZCBCb3JkZXJQYWludGVyOjpkcmF3Qm94
U2lkZUZyb21QYXRoKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGJvcmRlclJlY3QsIGNvbnN0IFBhdGgmIGJvcmRlclBhdGgsIGZsb2F0IHRoaWNrbmVz
cywgZmxvYXQgZHJhd1RoaWNrbmVzcywgQm94U2lkZSBzaWRlLCBDb2xvciBjb2xvciwgQm9yZGVy
U3R5bGUgYm9yZGVyU3R5bGUpIGNvbnN0CiB7CiAgICAgaWYgKHRoaWNrbmVzcyA8PSAwKQogICAg
ICAgICByZXR1cm47CkBAIC0zODUsMTQgKzM3MiwxNCBAQCB2b2lkIEJvcmRlclBhaW50ZXI6OmRy
YXdCb3hTaWRlRnJvbVBhdGgoY29uc3QgRmxvYXRSZWN0JiBib3JkZXJSZWN0LCBjb25zdCBQYXRo
JgogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBCb3JkZXJTdHlsZTo6RG90dGVkOgogICAgIGNh
c2UgQm9yZGVyU3R5bGU6OkRhc2hlZDogewotICAgICAgICBtX3BhaW50aW5nQ29udGV4dC5jb250
ZXh0LnNldFN0cm9rZUNvbG9yKGNvbG9yKTsKKyAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRl
eHQuc2V0U3Ryb2tlQ29sb3IoY29sb3IpOwogCiAgICAgICAgIC8vIFRoZSBzdHJva2UgaXMgZG91
YmxlZCBoZXJlIGJlY2F1c2UgdGhlIHByb3ZpZGVkIHBhdGggaXMgdGhlCiAgICAgICAgIC8vIG91
dHNpZGUgZWRnZSBvZiB0aGUgYm9yZGVyIHNvIGhhbGYgdGhlIHN0cm9rZSBpcyBjbGlwcGVkIG9m
Zi4KICAgICAgICAgLy8gVGhlIGV4dHJhIG11bHRpcGxpZXIgaXMgc28gdGhhdCB0aGUgY2xpcHBp
bmcgbWFzayBjYW4gYW50aWFsaWFzCiAgICAgICAgIC8vIHRoZSBlZGdlcyB0byBwcmV2ZW50IGph
Z2dpZXMuCi0gICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U3Ryb2tlVGhpY2tu
ZXNzKGRyYXdUaGlja25lc3MgKiAyICogMS4xZik7Ci0gICAgICAgIG1fcGFpbnRpbmdDb250ZXh0
LmNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoYm9yZGVyU3R5bGUgPT0gQm9yZGVyU3R5bGU6OkRhc2hl
ZCA/IERhc2hlZFN0cm9rZSA6IERvdHRlZFN0cm9rZSk7CisgICAgICAgIHBhaW50aW5nQ29udGV4
dC5jb250ZXh0LnNldFN0cm9rZVRoaWNrbmVzcyhkcmF3VGhpY2tuZXNzICogMiAqIDEuMWYpOwor
ICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTdHJva2VTdHlsZShib3JkZXJTdHls
ZSA9PSBCb3JkZXJTdHlsZTo6RGFzaGVkID8gRGFzaGVkU3Ryb2tlIDogRG90dGVkU3Ryb2tlKTsK
IAogICAgICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIGRhc2hlcyB0aGF0IGZpdCBpbiB0aGUgcGF0
aCBpcyBvZGQgYW5kIG5vbi1pbnRlZ3JhbCB0aGVuIHdlCiAgICAgICAgIC8vIHdpbGwgaGF2ZSBh
biBhd2t3YXJkbHktc2l6ZWQgZGFzaCBhdCB0aGUgZW5kIG9mIHRoZSBwYXRoLiBUbyB0cnkgdG8g
YXZvaWQgdGhhdApAQCAtNDE1LDEzICs0MDIsMTMgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpkcmF3
Qm94U2lkZUZyb21QYXRoKGNvbnN0IEZsb2F0UmVjdCYgYm9yZGVyUmVjdCwgY29uc3QgUGF0aCYK
ICAgICAgICAgICAgIERhc2hBcnJheSBsaW5lRGFzaDsKICAgICAgICAgICAgIGxpbmVEYXNoLmFw
cGVuZChkYXNoTGVuZ3RoKTsKICAgICAgICAgICAgIGxpbmVEYXNoLmFwcGVuZChnYXBMZW5ndGgp
OwotICAgICAgICAgICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRMaW5lRGFzaChsaW5l
RGFzaCwgZGFzaExlbmd0aCk7CisgICAgICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5z
ZXRMaW5lRGFzaChsaW5lRGFzaCwgZGFzaExlbmd0aCk7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIC8vIEZJWE1FOiBzdHJva2luZyB0aGUgYm9yZGVyIHBhdGggY2F1c2VzIGlzc3VlcyB3
aXRoIHRpZ2h0IGNvcm5lcnM6CiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD01ODcxMQogICAgICAgICAvLyBBbHNvLCB0byBnZXQgdGhlIGJlc3QgYXBw
ZWFyYW5jZSB3ZSBzaG91bGQgc3Ryb2tlIGEgcGF0aCBiZXR3ZWVuIHRoZSB0d28gYm9yZGVycy4K
LSAgICAgICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5zdHJva2VQYXRoKGJvcmRlclBhdGgp
OworICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zdHJva2VQYXRoKGJvcmRlclBhdGgp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgQm9yZGVyU3R5bGU6OkRvdWJsZTog
ewpAQCAtNDQxLDE5ICs0MjgsMjggQEAgdm9pZCBCb3JkZXJQYWludGVyOjpkcmF3Qm94U2lkZUZy
b21QYXRoKGNvbnN0IEZsb2F0UmVjdCYgYm9yZGVyUmVjdCwgY29uc3QgUGF0aCYKIAogICAgICAg
ICAvLyBEcmF3IGlubmVyIGJvcmRlciBsaW5lCiAgICAgICAgIHsKLSAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihtX3BhaW50aW5nQ29udGV4dC5jb250ZXh0
KTsKLSAgICAgICAgICAgIGF1dG8gaW5uZXJDbGlwID0gcm91bmRlZEluc2V0Qm9yZGVyRm9yUmVj
dChib3JkZXJSZWN0LCB7IGlubmVyQm9yZGVyVG9wV2lkdGgsIGlubmVyQm9yZGVyUmlnaHRXaWR0
aCwgaW5uZXJCb3JkZXJCb3R0b21XaWR0aCwgaW5uZXJCb3JkZXJMZWZ0V2lkdGggfSk7CisgICAg
ICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGFpbnRpbmdDb250
ZXh0LmNvbnRleHQpOworICAgICAgICAgICAgYXV0byBpbm5lckNsaXAgPSByb3VuZGVkSW5zZXRC
b3JkZXJGb3JSZWN0KGJvcmRlclJlY3QsIG1fYm9yZGVyUmVjdC5yYWRpaSgpLCB7IGlubmVyQm9y
ZGVyVG9wV2lkdGgsIGlubmVyQm9yZGVyUmlnaHRXaWR0aCwgaW5uZXJCb3JkZXJCb3R0b21XaWR0
aCwgaW5uZXJCb3JkZXJMZWZ0V2lkdGggfSwgbV9pbmNsdWRlTGVmdEVkZ2UsIG1faW5jbHVkZVJp
Z2h0RWRnZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNv
bnRleHQuY2xpcFJvdW5kZWRSZWN0KGlubmVyQ2xpcCk7Ci0gICAgICAgICAgICBkcmF3Qm94U2lk
ZUZyb21QYXRoKGJvcmRlclJlY3QsIGJvcmRlclBhdGgsIHRoaWNrbmVzcywgZHJhd1RoaWNrbmVz
cywgc2lkZSwgY29sb3IsIEJvcmRlclN0eWxlOjpTb2xpZCk7CisgICAgICAgICAgICBwYWludGlu
Z0NvbnRleHQuY29udGV4dC5jbGlwUm91bmRlZFJlY3QoaW5uZXJDbGlwKTsKKyAgICAgICAgICAg
IGRyYXdCb3hTaWRlRnJvbVBhdGgocGFpbnRpbmdDb250ZXh0LCBib3JkZXJSZWN0LCBib3JkZXJQ
YXRoLCB0aGlja25lc3MsIGRyYXdUaGlja25lc3MsIHNpZGUsIGNvbG9yLCBCb3JkZXJTdHlsZTo6
U29saWQpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRHJhdyBvdXRlciBib3JkZXIgbGluZQog
ICAgICAgICB7Ci0gICAgICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2
ZXIobV9wYWludGluZ0NvbnRleHQuY29udGV4dCk7Ci0gICAgICAgICAgICBhdXRvIG91dGVyQ2xp
cCA9IHJvdW5kZWRJbnNldEJvcmRlckZvclJlY3QoYm9yZGVyUmVjdCwgeyBvdXRlckJvcmRlclRv
cFdpZHRoLCBvdXRlckJvcmRlclJpZ2h0V2lkdGgsIG91dGVyQm9yZGVyQm90dG9tV2lkdGgsIG91
dGVyQm9yZGVyTGVmdFdpZHRoIH0pOwotICAgICAgICAgICAgbV9wYWludGluZ0NvbnRleHQuY29u
dGV4dC5jbGlwT3V0Um91bmRlZFJlY3Qob3V0ZXJDbGlwKTsKLSAgICAgICAgICAgIGRyYXdCb3hT
aWRlRnJvbVBhdGgoYm9yZGVyUmVjdCwgYm9yZGVyUGF0aCwgdGhpY2tuZXNzLCBkcmF3VGhpY2tu
ZXNzLCBzaWRlLCBjb2xvciwgQm9yZGVyU3R5bGU6OlNvbGlkKTsKKyAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihwYWludGluZ0NvbnRleHQuY29udGV4dCk7
CisgICAgICAgICAgICBhdXRvIG91dGVyUmVjdCA9IGJvcmRlclJlY3Q7CisgICAgICAgICAgICBp
ZiAobV9ibGVlZEF2b2lkYW5jZSA9PSBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2U6OlVzZVRyYW5z
cGFyZW5jeUxheWVyKSB7CisgICAgICAgICAgICAgICAgb3V0ZXJSZWN0LmluZmxhdGUoMSk7Cisg
ICAgICAgICAgICAgICAgKytvdXRlckJvcmRlclRvcFdpZHRoOworICAgICAgICAgICAgICAgICsr
b3V0ZXJCb3JkZXJCb3R0b21XaWR0aDsKKyAgICAgICAgICAgICAgICArK291dGVyQm9yZGVyTGVm
dFdpZHRoOworICAgICAgICAgICAgICAgICsrb3V0ZXJCb3JkZXJSaWdodFdpZHRoOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBhdXRvIG91dGVyQ2xpcCA9IHJvdW5kZWRJbnNldEJvcmRl
ckZvclJlY3Qob3V0ZXJSZWN0LCBtX2JvcmRlclJlY3QucmFkaWkoKSwgeyBvdXRlckJvcmRlclRv
cFdpZHRoLCBvdXRlckJvcmRlclJpZ2h0V2lkdGgsIG91dGVyQm9yZGVyQm90dG9tV2lkdGgsIG91
dGVyQm9yZGVyTGVmdFdpZHRoIH0sIG1faW5jbHVkZUxlZnRFZGdlLCBtX2luY2x1ZGVSaWdodEVk
Z2UpOworICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuY2xpcE91dFJvdW5kZWRS
ZWN0KG91dGVyQ2xpcCk7CisgICAgICAgICAgICBkcmF3Qm94U2lkZUZyb21QYXRoKHBhaW50aW5n
Q29udGV4dCwgYm9yZGVyUmVjdCwgYm9yZGVyUGF0aCwgdGhpY2tuZXNzLCBkcmF3VGhpY2tuZXNz
LCBzaWRlLCBjb2xvciwgQm9yZGVyU3R5bGU6OlNvbGlkKTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtNDcxLDEwICs0NjcsMTAgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpk
cmF3Qm94U2lkZUZyb21QYXRoKGNvbnN0IEZsb2F0UmVjdCYgYm9yZGVyUmVjdCwgY29uc3QgUGF0
aCYKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gUGFpbnQgZnVsbCBib3JkZXIKLSAg
ICAgICAgZHJhd0JveFNpZGVGcm9tUGF0aChib3JkZXJSZWN0LCBib3JkZXJQYXRoLCB0aGlja25l
c3MsIGRyYXdUaGlja25lc3MsIHNpZGUsIGNvbG9yLCBzMSk7CisgICAgICAgIGRyYXdCb3hTaWRl
RnJvbVBhdGgocGFpbnRpbmdDb250ZXh0LCBib3JkZXJSZWN0LCBib3JkZXJQYXRoLCB0aGlja25l
c3MsIGRyYXdUaGlja25lc3MsIHNpZGUsIGNvbG9yLCBzMSk7CiAKICAgICAgICAgLy8gUGFpbnQg
aW5uZXIgb25seQotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIo
bV9wYWludGluZ0NvbnRleHQuY29udGV4dCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcihwYWludGluZ0NvbnRleHQuY29udGV4dCk7CiAgICAgICAgIC8vIEZJ
WE1FOiBTaG91bGQgaGF2ZSBwaXhlbCBzbmFwcGVkIHRoZXNlIGF0IGRpc3BsYXkgdHJlZSBnZW5l
cmF0aW9uIHRpbWUuCiAgICAgICAgIC8vIEZJWE1FOiBSZWN0RWRnZXMKICAgICAgICAgZmxvYXQg
dG9wV2lkdGggeyBtX2VkZ2VzLnRvcCgpLndpZHRoRm9yUGFpbnRpbmcoKSAvIDIgfTsKQEAgLTQ4
MiwxMCArNDc4LDEwIEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0JveFNpZGVGcm9tUGF0aChj
b25zdCBGbG9hdFJlY3QmIGJvcmRlclJlY3QsIGNvbnN0IFBhdGgmCiAgICAgICAgIGZsb2F0IGxl
ZnRXaWR0aCB7IG1fZWRnZXMubGVmdCgpLndpZHRoRm9yUGFpbnRpbmcoKSAvIDIgfTsKICAgICAg
ICAgZmxvYXQgcmlnaHRXaWR0aCB7IG1fZWRnZXMucmlnaHQoKS53aWR0aEZvclBhaW50aW5nKCkg
LyAyIH07CiAKLSAgICAgICAgYXV0byBjbGlwUmVjdCA9IHJvdW5kZWRJbnNldEJvcmRlckZvclJl
Y3QoYm9yZGVyUmVjdCwgeyB0b3BXaWR0aCwgcmlnaHRXaWR0aCwgYm90dG9tV2lkdGgsIGxlZnRX
aWR0aCB9KTsKKyAgICAgICAgYXV0byBjbGlwUmVjdCA9IHJvdW5kZWRJbnNldEJvcmRlckZvclJl
Y3QoYm9yZGVyUmVjdCwgbV9ib3JkZXJSZWN0LnJhZGlpKCksIHsgdG9wV2lkdGgsIHJpZ2h0V2lk
dGgsIGJvdHRvbVdpZHRoLCBsZWZ0V2lkdGggfSwgbV9pbmNsdWRlTGVmdEVkZ2UsIG1faW5jbHVk
ZVJpZ2h0RWRnZSk7CiAKLSAgICAgICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5jbGlwUm91
bmRlZFJlY3QoY2xpcFJlY3QpOwotICAgICAgICBkcmF3Qm94U2lkZUZyb21QYXRoKGJvcmRlclJl
Y3QsIGJvcmRlclBhdGgsIHRoaWNrbmVzcywgZHJhd1RoaWNrbmVzcywgc2lkZSwgY29sb3IsIHMy
KTsKKyAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuY2xpcFJvdW5kZWRSZWN0KGNsaXBS
ZWN0KTsKKyAgICAgICAgZHJhd0JveFNpZGVGcm9tUGF0aChwYWludGluZ0NvbnRleHQsIGJvcmRl
clJlY3QsIGJvcmRlclBhdGgsIHRoaWNrbmVzcywgZHJhd1RoaWNrbmVzcywgc2lkZSwgY29sb3Is
IHMyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIEJvcmRlclN0eWxlOjpJbnNl
dDoKQEAgLTQ5NiwxMiArNDkyLDEyIEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0JveFNpZGVG
cm9tUGF0aChjb25zdCBGbG9hdFJlY3QmIGJvcmRlclJlY3QsIGNvbnN0IFBhdGgmCiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAotICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U3Ryb2tl
U3R5bGUoTm9TdHJva2UpOwotICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0RmlsbENv
bG9yKGNvbG9yKTsKLSAgICBtX3BhaW50aW5nQ29udGV4dC5jb250ZXh0LmRyYXdSZWN0KGJvcmRl
clJlY3QpOworICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFN0cm9rZVN0eWxlKE5vU3Ry
b2tlKTsKKyAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRGaWxsQ29sb3IoY29sb3IpOwor
ICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LmRyYXdSZWN0KGJvcmRlclJlY3QpOwogfQogCi12
b2lkIEJvcmRlclBhaW50ZXI6OmNsaXBCb3JkZXJTaWRlUG9seWdvbihjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiBvdXRlckJvcmRlciwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgaW5uZXJCb3JkZXIs
IEJveFNpZGUgc2lkZSwgYm9vbCBmaXJzdEVkZ2VNYXRjaGVzLCBib29sIHNlY29uZEVkZ2VNYXRj
aGVzKSBjb25zdAordm9pZCBCb3JkZXJQYWludGVyOjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oUGFp
bnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIG91
dGVyQm9yZGVyLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwgQm94U2lkZSBz
aWRlLCBib29sIGZpcnN0RWRnZU1hdGNoZXMsIGJvb2wgc2Vjb25kRWRnZU1hdGNoZXMpIGNvbnN0
CiB7CiAgICAgY29uc3QgRmxvYXRSZWN0JiBvdXRlclJlY3QgPSBvdXRlckJvcmRlci5yZWN0KCk7
CiAgICAgY29uc3QgRmxvYXRSZWN0JiBpbm5lclJlY3QgPSBpbm5lckJvcmRlci5yZWN0KCk7CkBA
IC01NzksMTAgKzU3NSwxMCBAQCB2b2lkIEJvcmRlclBhaW50ZXI6OmNsaXBCb3JkZXJTaWRlUG9s
eWdvbihjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBvdXRlckJvcmRlciwgYwogICAgIC8vIElmIHRo
ZSBib3JkZXIgbWF0Y2hlcyBib3RoIG9mIGl0cyBhZGphY2VudCBzaWRlcywgZG9uJ3QgYW50aS1h
bGlhcyB0aGUgY2xpcCwgYW5kCiAgICAgLy8gaWYgbmVpdGhlciBzaWRlIG1hdGNoZXMsIGFudGkt
YWxpYXMgdGhlIGNsaXAuCiAgICAgaWYgKGZpcnN0RWRnZU1hdGNoZXMgPT0gc2Vjb25kRWRnZU1h
dGNoZXMpIHsKLSAgICAgICAgYm9vbCB3YXNBbnRpYWxpYXNlZCA9IG1fcGFpbnRpbmdDb250ZXh0
LmNvbnRleHQuc2hvdWxkQW50aWFsaWFzKCk7Ci0gICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNv
bnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKCFmaXJzdEVkZ2VNYXRjaGVzKTsKLSAgICAgICAgbV9w
YWludGluZ0NvbnRleHQuY29udGV4dC5jbGlwUGF0aChQYXRoOjpwb2x5Z29uUGF0aEZyb21Qb2lu
dHMocXVhZCksIFdpbmRSdWxlOjpOb25aZXJvKTsKLSAgICAgICAgbV9wYWludGluZ0NvbnRleHQu
Y29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXMod2FzQW50aWFsaWFzZWQpOworICAgICAgICBib29s
IHdhc0FudGlhbGlhc2VkID0gcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2hvdWxkQW50aWFsaWFz
KCk7CisgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNob3VsZEFudGlhbGlhcygh
Zmlyc3RFZGdlTWF0Y2hlcyk7CisgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LmNsaXBQ
YXRoKFBhdGg6OnBvbHlnb25QYXRoRnJvbVBvaW50cyhxdWFkKSwgV2luZFJ1bGU6Ok5vblplcm8p
OworICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXMod2Fz
QW50aWFsaWFzZWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01OTQsOSArNTkwLDkg
QEAgdm9pZCBCb3JkZXJQYWludGVyOjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGMKICAgICAgICAgc2lkZSA9PSBCb3hTaWRlOjpUb3Ag
fHwgc2lkZSA9PSBCb3hTaWRlOjpCb3R0b20gPyBGbG9hdFBvaW50KHF1YWRbM10ueCgpLCBxdWFk
WzJdLnkoKSkgOiBGbG9hdFBvaW50KHF1YWRbMl0ueCgpLCBxdWFkWzNdLnkoKSksCiAgICAgICAg
IHF1YWRbM10KICAgICB9OwotICAgIGJvb2wgd2FzQW50aWFsaWFzZWQgPSBtX3BhaW50aW5nQ29u
dGV4dC5jb250ZXh0LnNob3VsZEFudGlhbGlhcygpOwotICAgIG1fcGFpbnRpbmdDb250ZXh0LmNv
bnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKCFmaXJzdEVkZ2VNYXRjaGVzKTsKLSAgICBtX3BhaW50
aW5nQ29udGV4dC5jb250ZXh0LmNsaXBQYXRoKFBhdGg6OnBvbHlnb25QYXRoRnJvbVBvaW50cyhm
aXJzdFF1YWQpLCBXaW5kUnVsZTo6Tm9uWmVybyk7CisgICAgYm9vbCB3YXNBbnRpYWxpYXNlZCA9
IHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNob3VsZEFudGlhbGlhcygpOworICAgIHBhaW50aW5n
Q29udGV4dC5jb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyghZmlyc3RFZGdlTWF0Y2hlcyk7Cisg
ICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuY2xpcFBhdGgoUGF0aDo6cG9seWdvblBhdGhGcm9t
UG9pbnRzKGZpcnN0UXVhZCksIFdpbmRSdWxlOjpOb25aZXJvKTsKIAogICAgIFZlY3RvcjxGbG9h
dFBvaW50PiBzZWNvbmRRdWFkID0gewogICAgICAgICBxdWFkWzBdLApAQCAtNjA2LDI5ICs2MDIs
MjkgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGMKICAgICAgICAgcXVhZFszXQogICAgIH07CiAg
ICAgLy8gQW50aWFsaWFzaW5nIGFmZmVjdHMgdGhlIHNlY29uZCBzaWRlLgotICAgIG1fcGFpbnRp
bmdDb250ZXh0LmNvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKCFzZWNvbmRFZGdlTWF0Y2hlcyk7
Ci0gICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5jbGlwUGF0aChQYXRoOjpwb2x5Z29uUGF0
aEZyb21Qb2ludHMoc2Vjb25kUXVhZCksIFdpbmRSdWxlOjpOb25aZXJvKTsKKyAgICBwYWludGlu
Z0NvbnRleHQuY29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXMoIXNlY29uZEVkZ2VNYXRjaGVzKTsK
KyAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5jbGlwUGF0aChQYXRoOjpwb2x5Z29uUGF0aEZy
b21Qb2ludHMoc2Vjb25kUXVhZCksIFdpbmRSdWxlOjpOb25aZXJvKTsKIAotICAgIG1fcGFpbnRp
bmdDb250ZXh0LmNvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKHdhc0FudGlhbGlhc2VkKTsKKyAg
ICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXMod2FzQW50aWFsaWFz
ZWQpOwogfQogCi12b2lkIEJvcmRlclBhaW50ZXI6OmRyYXdMaW5lRm9yQm94U2lkZShjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIEJveFNpZGUgc2lkZSwgQ29sb3IgY29sb3IsIEJvcmRlclN0eWxlIGJv
cmRlclN0eWxlLCBmbG9hdCBhZGphY2VudFdpZHRoMSwgZmxvYXQgYWRqYWNlbnRXaWR0aDIsIGJv
b2wgYW50aWFsaWFzKSBjb25zdAordm9pZCBCb3JkZXJQYWludGVyOjpkcmF3TGluZUZvckJveFNp
ZGUoUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgQm94U2lkZSBzaWRlLCBDb2xvciBjb2xvciwgQm9yZGVyU3R5bGUgYm9yZGVyU3R5bGUsIGZs
b2F0IGFkamFjZW50V2lkdGgxLCBmbG9hdCBhZGphY2VudFdpZHRoMiwgYm9vbCBhbnRpYWxpYXMp
IGNvbnN0CiB7CiAgICAgYXV0byBkcmF3Qm9yZGVyUmVjdCA9IFsmXShjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpIHsKICAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBtX3BhaW50aW5nQ29udGV4dC5jb250ZXh0LmRyYXdSZWN0KHJlY3QpOworICAg
ICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5kcmF3UmVjdChyZWN0KTsKICAgICB9OwogCiAg
ICAgYXV0byBkcmF3TGluZUZvciA9IFsmXShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEJveFNpZGUg
c2lkZSwgQm9yZGVyU3R5bGUgYm9yZGVyU3R5bGUsIGNvbnN0IEZsb2F0U2l6ZSYgYWRqYWNlbnQp
IHsKICAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBkcmF3TGluZUZvckJveFNpZGUocmVjdCwgc2lkZSwgY29sb3IsIGJvcmRlclN0eWxlLCBh
ZGphY2VudC53aWR0aCgpLCBhZGphY2VudC5oZWlnaHQoKSwgYW50aWFsaWFzKTsKKyAgICAgICAg
ZHJhd0xpbmVGb3JCb3hTaWRlKHBhaW50aW5nQ29udGV4dCwgcmVjdCwgc2lkZSwgY29sb3IsIGJv
cmRlclN0eWxlLCBhZGphY2VudC53aWR0aCgpLCBhZGphY2VudC5oZWlnaHQoKSwgYW50aWFsaWFz
KTsKICAgICB9OwogICAgIAogICAgIGF1dG8mIGVkZ2UgPSBtX2VkZ2VzLmF0KHNpZGUpOwogCi0g
ICAgY29uc3QgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBtX3BhaW50aW5nQ29udGV4dC5kZXZp
Y2VTY2FsZUZhY3RvcjsKKyAgICBjb25zdCBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IHBhaW50
aW5nQ29udGV4dC5kZXZpY2VTY2FsZUZhY3RvcjsKICAgICBmbG9hdCB4MSA9IHJlY3QueCgpOwog
ICAgIGZsb2F0IHgyID0gcmVjdC5tYXhYKCk7CiAgICAgZmxvYXQgeTEgPSByZWN0LnkoKTsKQEAg
LTY1MywyNiArNjQ5LDI2IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6ZHJhd0xpbmVGb3JCb3hTaWRl
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgQm94U2lkZSBzaWRlLCBDb2xvCiAgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIEJvcmRlclN0eWxlOjpEb3R0ZWQ6CiAgICAgY2FzZSBCb3JkZXJTdHlsZTo6
RGFzaGVkOiB7Ci0gICAgICAgIGJvb2wgd2FzQW50aWFsaWFzZWQgPSBtX3BhaW50aW5nQ29udGV4
dC5jb250ZXh0LnNob3VsZEFudGlhbGlhcygpOwotICAgICAgICBTdHJva2VTdHlsZSBvbGRTdHJv
a2VTdHlsZSA9IG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc3Ryb2tlU3R5bGUoKTsKLSAgICAg
ICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXMoYW50aWFsaWFz
KTsKLSAgICAgICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTdHJva2VDb2xvcihjb2xv
cik7Ci0gICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U3Ryb2tlVGhpY2tuZXNz
KHRoaWNrbmVzcyk7Ci0gICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U3Ryb2tl
U3R5bGUoYm9yZGVyU3R5bGUgPT0gQm9yZGVyU3R5bGU6OkRhc2hlZCA/IERhc2hlZFN0cm9rZSA6
IERvdHRlZFN0cm9rZSk7Ci0gICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuZHJhd0xp
bmUoeyB4MSwgeTEgfSwgeyB4MiwgeTIgfSk7Ci0gICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNv
bnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKHdhc0FudGlhbGlhc2VkKTsKLSAgICAgICAgbV9wYWlu
dGluZ0NvbnRleHQuY29udGV4dC5zZXRTdHJva2VTdHlsZShvbGRTdHJva2VTdHlsZSk7CisgICAg
ICAgIGJvb2wgd2FzQW50aWFsaWFzZWQgPSBwYWludGluZ0NvbnRleHQuY29udGV4dC5zaG91bGRB
bnRpYWxpYXMoKTsKKyAgICAgICAgU3Ryb2tlU3R5bGUgb2xkU3Ryb2tlU3R5bGUgPSBwYWludGlu
Z0NvbnRleHQuY29udGV4dC5zdHJva2VTdHlsZSgpOworICAgICAgICBwYWludGluZ0NvbnRleHQu
Y29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXMoYW50aWFsaWFzKTsKKyAgICAgICAgcGFpbnRpbmdD
b250ZXh0LmNvbnRleHQuc2V0U3Ryb2tlQ29sb3IoY29sb3IpOworICAgICAgICBwYWludGluZ0Nv
bnRleHQuY29udGV4dC5zZXRTdHJva2VUaGlja25lc3ModGhpY2tuZXNzKTsKKyAgICAgICAgcGFp
bnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoYm9yZGVyU3R5bGUgPT0gQm9yZGVy
U3R5bGU6OkRhc2hlZCA/IERhc2hlZFN0cm9rZSA6IERvdHRlZFN0cm9rZSk7CisgICAgICAgIHBh
aW50aW5nQ29udGV4dC5jb250ZXh0LmRyYXdMaW5lKHsgeDEsIHkxIH0sIHsgeDIsIHkyIH0pOwor
ICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXMod2FzQW50
aWFsaWFzZWQpOworICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTdHJva2VTdHls
ZShvbGRTdHJva2VTdHlsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEJvcmRl
clN0eWxlOjpEb3VibGU6IHsKICAgICAgICAgZmxvYXQgdGhpcmRPZlRoaWNrbmVzcyA9IGNlaWxU
b0RldmljZVBpeGVsKHRoaWNrbmVzcyAvIDMsIGRldmljZVNjYWxlRmFjdG9yKTsKICAgICAgICAg
aWYgKCFhZGphY2VudFdpZHRoMSAmJiAhYWRqYWNlbnRXaWR0aDIpIHsKLSAgICAgICAgICAgIFN0
cm9rZVN0eWxlIG9sZFN0cm9rZVN0eWxlID0gbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5zdHJv
a2VTdHlsZSgpOwotICAgICAgICAgICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTdHJv
a2VTdHlsZShOb1N0cm9rZSk7Ci0gICAgICAgICAgICBtX3BhaW50aW5nQ29udGV4dC5jb250ZXh0
LnNldEZpbGxDb2xvcihjb2xvcik7CisgICAgICAgICAgICBTdHJva2VTdHlsZSBvbGRTdHJva2VT
dHlsZSA9IHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnN0cm9rZVN0eWxlKCk7CisgICAgICAgICAg
ICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTdHJva2VTdHlsZShOb1N0cm9rZSk7CisgICAg
ICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRGaWxsQ29sb3IoY29sb3IpOwogCi0g
ICAgICAgICAgICBib29sIHdhc0FudGlhbGlhc2VkID0gbV9wYWludGluZ0NvbnRleHQuY29udGV4
dC5zaG91bGRBbnRpYWxpYXMoKTsKLSAgICAgICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRl
eHQuc2V0U2hvdWxkQW50aWFsaWFzKGFudGlhbGlhcyk7CisgICAgICAgICAgICBib29sIHdhc0Fu
dGlhbGlhc2VkID0gcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2hvdWxkQW50aWFsaWFzKCk7Cisg
ICAgICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTaG91bGRBbnRpYWxpYXMoYW50
aWFsaWFzKTsKIAogICAgICAgICAgICAgc3dpdGNoIChzaWRlKSB7CiAgICAgICAgICAgICBjYXNl
IEJveFNpZGU6OlRvcDoKQEAgLTY5Myw4ICs2ODksOCBAQCB2b2lkIEJvcmRlclBhaW50ZXI6OmRy
YXdMaW5lRm9yQm94U2lkZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIEJveFNpZGUgc2lkZSwgQ29s
bwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBt
X3BhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyh3YXNBbnRpYWxpYXNl
ZCk7Ci0gICAgICAgICAgICBtX3BhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFN0cm9rZVN0eWxl
KG9sZFN0cm9rZVN0eWxlKTsKKyAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNl
dFNob3VsZEFudGlhbGlhcyh3YXNBbnRpYWxpYXNlZCk7CisgICAgICAgICAgICBwYWludGluZ0Nv
bnRleHQuY29udGV4dC5zZXRTdHJva2VTdHlsZShvbGRTdHJva2VTdHlsZSk7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBmbG9hdCBhZGphY2VudDFCaWdUaGlyZCA9IGNlaWxUb0Rldmlj
ZVBpeGVsKGFkamFjZW50V2lkdGgxIC8gMywgZGV2aWNlU2NhbGVGYWN0b3IpOwogICAgICAgICAg
ICAgZmxvYXQgYWRqYWNlbnQyQmlnVGhpcmQgPSBjZWlsVG9EZXZpY2VQaXhlbChhZGphY2VudFdp
ZHRoMiAvIDMsIGRldmljZVNjYWxlRmFjdG9yKTsKQEAgLTgwOSwxNyArODA1LDE3IEBAIHZvaWQg
Qm9yZGVyUGFpbnRlcjo6ZHJhd0xpbmVGb3JCb3hTaWRlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Qm94U2lkZSBzaWRlLCBDb2xvCiAgICAgICAgIGNhbGN1bGF0ZUJvcmRlclN0eWxlQ29sb3IoYm9y
ZGVyU3R5bGUsIHNpZGUsIGNvbG9yKTsKICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgY2FzZSBC
b3JkZXJTdHlsZTo6U29saWQ6IHsKLSAgICAgICAgU3Ryb2tlU3R5bGUgb2xkU3Ryb2tlU3R5bGUg
PSBtX3BhaW50aW5nQ29udGV4dC5jb250ZXh0LnN0cm9rZVN0eWxlKCk7CisgICAgICAgIFN0cm9r
ZVN0eWxlIG9sZFN0cm9rZVN0eWxlID0gcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc3Ryb2tlU3R5
bGUoKTsKICAgICAgICAgQVNTRVJUKHgyID49IHgxKTsKICAgICAgICAgQVNTRVJUKHkyID49IHkx
KTsKICAgICAgICAgaWYgKCFhZGphY2VudFdpZHRoMSAmJiAhYWRqYWNlbnRXaWR0aDIpIHsKLSAg
ICAgICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoTm9TdHJv
a2UpOwotICAgICAgICAgICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRGaWxsQ29sb3Io
Y29sb3IpOwotICAgICAgICAgICAgYm9vbCB3YXNBbnRpYWxpYXNlZCA9IG1fcGFpbnRpbmdDb250
ZXh0LmNvbnRleHQuc2hvdWxkQW50aWFsaWFzKCk7Ci0gICAgICAgICAgICBtX3BhaW50aW5nQ29u
dGV4dC5jb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyhhbnRpYWxpYXMpOworICAgICAgICAgICAg
cGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoTm9TdHJva2UpOworICAgICAg
ICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0RmlsbENvbG9yKGNvbG9yKTsKKyAgICAg
ICAgICAgIGJvb2wgd2FzQW50aWFsaWFzZWQgPSBwYWludGluZ0NvbnRleHQuY29udGV4dC5zaG91
bGRBbnRpYWxpYXMoKTsKKyAgICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNo
b3VsZEFudGlhbGlhcyhhbnRpYWxpYXMpOwogICAgICAgICAgICAgZHJhd0JvcmRlclJlY3Qoc25h
cFJlY3RUb0RldmljZVBpeGVscyhMYXlvdXRSZWN0KHgxLCB5MSwgeDIgLSB4MSwgeTIgLSB5MSks
IGRldmljZVNjYWxlRmFjdG9yKSk7Ci0gICAgICAgICAgICBtX3BhaW50aW5nQ29udGV4dC5jb250
ZXh0LnNldFNob3VsZEFudGlhbGlhcyh3YXNBbnRpYWxpYXNlZCk7Ci0gICAgICAgICAgICBtX3Bh
aW50aW5nQ29udGV4dC5jb250ZXh0LnNldFN0cm9rZVN0eWxlKG9sZFN0cm9rZVN0eWxlKTsKKyAg
ICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNldFNob3VsZEFudGlhbGlhcyh3YXNB
bnRpYWxpYXNlZCk7CisgICAgICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRTdHJv
a2VTdHlsZShvbGRTdHJva2VTdHlsZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IApAQCAtODU4LDIwICs4NTQsMjAgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpkcmF3TGluZUZvckJv
eFNpZGUoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBCb3hTaWRlIHNpZGUsIENvbG8KICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4
dC5zZXRTdHJva2VTdHlsZShOb1N0cm9rZSk7Ci0gICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNv
bnRleHQuc2V0RmlsbENvbG9yKGNvbG9yKTsKLSAgICAgICAgYm9vbCB3YXNBbnRpYWxpYXNlZCA9
IG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2hvdWxkQW50aWFsaWFzKCk7Ci0gICAgICAgIG1f
cGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKGFudGlhbGlhcyk7Ci0g
ICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuZmlsbFBhdGgoUGF0aDo6cG9seWdvblBh
dGhGcm9tUG9pbnRzKHF1YWQpKTsKLSAgICAgICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5z
ZXRTaG91bGRBbnRpYWxpYXMod2FzQW50aWFsaWFzZWQpOworICAgICAgICBwYWludGluZ0NvbnRl
eHQuY29udGV4dC5zZXRTdHJva2VTdHlsZShOb1N0cm9rZSk7CisgICAgICAgIHBhaW50aW5nQ29u
dGV4dC5jb250ZXh0LnNldEZpbGxDb2xvcihjb2xvcik7CisgICAgICAgIGJvb2wgd2FzQW50aWFs
aWFzZWQgPSBwYWludGluZ0NvbnRleHQuY29udGV4dC5zaG91bGRBbnRpYWxpYXMoKTsKKyAgICAg
ICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0U2hvdWxkQW50aWFsaWFzKGFudGlhbGlhcyk7
CisgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LmZpbGxQYXRoKFBhdGg6OnBvbHlnb25Q
YXRoRnJvbVBvaW50cyhxdWFkKSk7CisgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LnNl
dFNob3VsZEFudGlhbGlhcyh3YXNBbnRpYWxpYXNlZCk7CiAKLSAgICAgICAgbV9wYWludGluZ0Nv
bnRleHQuY29udGV4dC5zZXRTdHJva2VTdHlsZShvbGRTdHJva2VTdHlsZSk7CisgICAgICAgIHBh
aW50aW5nQ29udGV4dC5jb250ZXh0LnNldFN0cm9rZVN0eWxlKG9sZFN0cm9rZVN0eWxlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0KIH0KIAotdm9pZCBCb3JkZXJQYWludGVyOjpwYWlu
dE9uZUJvcmRlclNpZGUoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0
IEZsb2F0Um91bmRlZFJlY3QmIGlubmVyQm9yZGVyLCBjb25zdCBGbG9hdFJlY3QmIHNpZGVSZWN0
LCBCb3hTaWRlIHNpZGUsIGNvbnN0IFBhdGgqIHBhdGgsIGJvb2wgYW50aWFsaWFzLCBjb25zdCBD
b2xvciogb3ZlcnJpZGVDb2xvcikgY29uc3QKK3ZvaWQgQm9yZGVyUGFpbnRlcjo6cGFpbnRPbmVC
b3JkZXJTaWRlKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiBvdXRlckJvcmRlciwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgaW5uZXJCb3Jk
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgc2lkZVJlY3QsIEJveFNpZGUgc2lkZSwgY29uc3QgUGF0aCog
cGF0aCwgYm9vbCBhbnRpYWxpYXMsIGNvbnN0IENvbG9yKiBvdmVycmlkZUNvbG9yKSBjb25zdAog
ewogICAgIGF1dG8mIGVkZ2VUb1JlbmRlciA9IG1fZWRnZXMuYXQoc2lkZSk7CiAgICAgQVNTRVJU
KGVkZ2VUb1JlbmRlci53aWR0aEZvclBhaW50aW5nKCkpOwpAQCAtODkwLDE1ICs4ODYsMTUgQEAg
dm9pZCBCb3JkZXJQYWludGVyOjpwYWludE9uZUJvcmRlclNpZGUoY29uc3QgRmxvYXRSb3VuZGVk
UmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnMKICAgICBjb25zdCBDb2xvciYgY29sb3JUb1BhaW50ID0g
b3ZlcnJpZGVDb2xvciA/ICpvdmVycmlkZUNvbG9yIDogZWRnZVRvUmVuZGVyLmNvbG9yKCk7CiAK
ICAgICBpZiAocGF0aCkgewotICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRl
U2F2ZXIobV9wYWludGluZ0NvbnRleHQuY29udGV4dCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihwYWludGluZ0NvbnRleHQuY29udGV4dCk7CiAKLSAgICAg
ICAgY2xpcEJvcmRlclNpZGVQb2x5Z29uKG91dGVyQm9yZGVyLCBpbm5lckJvcmRlciwgc2lkZSwg
YWRqYWNlbnRTaWRlMVN0eWxlc01hdGNoLCBhZGphY2VudFNpZGUyU3R5bGVzTWF0Y2gpOworICAg
ICAgICBjbGlwQm9yZGVyU2lkZVBvbHlnb24ocGFpbnRpbmdDb250ZXh0LCBvdXRlckJvcmRlciwg
aW5uZXJCb3JkZXIsIHNpZGUsIGFkamFjZW50U2lkZTFTdHlsZXNNYXRjaCwgYWRqYWNlbnRTaWRl
MlN0eWxlc01hdGNoKTsKIAogICAgICAgICBpZiAoIWlubmVyQm9yZGVyLmlzUmVuZGVyYWJsZSgp
KQotICAgICAgICAgICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5jbGlwT3V0Um91bmRlZFJl
Y3QoRmxvYXRSb3VuZGVkUmVjdChjYWxjdWxhdGVBZGp1c3RlZElubmVyQm9yZGVyKGlubmVyQm9y
ZGVyLCBzaWRlKSkpOworICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuY2xpcE91
dFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QoY2FsY3VsYXRlQWRqdXN0ZWRJbm5lckJvcmRl
cihpbm5lckJvcmRlciwgc2lkZSkpKTsKIAogICAgICAgICBmbG9hdCB0aGlja25lc3MgPSBzdGQ6
Om1heChzdGQ6Om1heChlZGdlVG9SZW5kZXIud2lkdGhGb3JQYWludGluZygpLCBhZGphY2VudEVk
Z2UxLndpZHRoRm9yUGFpbnRpbmcoKSksIGFkamFjZW50RWRnZTIud2lkdGhGb3JQYWludGluZygp
KTsKLSAgICAgICAgZHJhd0JveFNpZGVGcm9tUGF0aChvdXRlckJvcmRlci5yZWN0KCksICpwYXRo
LCBlZGdlVG9SZW5kZXIud2lkdGhGb3JQYWludGluZygpLCB0aGlja25lc3MsIHNpZGUsIGNvbG9y
VG9QYWludCwgZWRnZVRvUmVuZGVyLnN0eWxlKCkpOworICAgICAgICBkcmF3Qm94U2lkZUZyb21Q
YXRoKHBhaW50aW5nQ29udGV4dCwgb3V0ZXJCb3JkZXIucmVjdCgpLCAqcGF0aCwgZWRnZVRvUmVu
ZGVyLndpZHRoRm9yUGFpbnRpbmcoKSwgdGhpY2tuZXNzLCBzaWRlLCBjb2xvclRvUGFpbnQsIGVk
Z2VUb1JlbmRlci5zdHlsZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtOTA3LDE5
ICs5MDMsMTkgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpwYWludE9uZUJvcmRlclNpZGUoY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnMKICAgICBib29sIGNsaXBBZGphY2Vu
dFNpZGUyID0gY29sb3JOZWVkc0FudGlBbGlhc0F0Q29ybmVyKHNpZGUsIGFkamFjZW50U2lkZXMu
c2Vjb25kKSAmJiBtaXRyZUFkamFjZW50U2lkZTI7CiAgICAgYm9vbCBzaG91bGRDbGlwID0gY2xp
cEZvclN0eWxlIHx8IGNsaXBBZGphY2VudFNpZGUxIHx8IGNsaXBBZGphY2VudFNpZGUyOwogICAg
IAotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgY2xpcFN0YXRlU2F2ZXIobV9wYWludGlu
Z0NvbnRleHQuY29udGV4dCwgc2hvdWxkQ2xpcCk7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBjbGlwU3RhdGVTYXZlcihwYWludGluZ0NvbnRleHQuY29udGV4dCwgc2hvdWxkQ2xpcCk7
CiAgICAgaWYgKHNob3VsZENsaXApIHsKICAgICAgICAgYm9vbCBhbGlhc0FkamFjZW50U2lkZTEg
PSBjbGlwQWRqYWNlbnRTaWRlMSB8fCAoY2xpcEZvclN0eWxlICYmIG1pdHJlQWRqYWNlbnRTaWRl
MSk7CiAgICAgICAgIGJvb2wgYWxpYXNBZGphY2VudFNpZGUyID0gY2xpcEFkamFjZW50U2lkZTIg
fHwgKGNsaXBGb3JTdHlsZSAmJiBtaXRyZUFkamFjZW50U2lkZTIpOwotICAgICAgICBjbGlwQm9y
ZGVyU2lkZVBvbHlnb24ob3V0ZXJCb3JkZXIsIGlubmVyQm9yZGVyLCBzaWRlLCAhYWxpYXNBZGph
Y2VudFNpZGUxLCAhYWxpYXNBZGphY2VudFNpZGUyKTsKKyAgICAgICAgY2xpcEJvcmRlclNpZGVQ
b2x5Z29uKHBhaW50aW5nQ29udGV4dCwgb3V0ZXJCb3JkZXIsIGlubmVyQm9yZGVyLCBzaWRlLCAh
YWxpYXNBZGphY2VudFNpZGUxLCAhYWxpYXNBZGphY2VudFNpZGUyKTsKICAgICAgICAgLy8gU2lu
Y2Ugd2UgY2xpcHBlZCwgbm8gbmVlZCB0byBkcmF3IHdpdGggYSBtaXRyZS4KICAgICAgICAgbWl0
cmVBZGphY2VudFNpZGUxID0gZmFsc2U7CiAgICAgICAgIG1pdHJlQWRqYWNlbnRTaWRlMiA9IGZh
bHNlOwogICAgIH0KLSAgICBkcmF3TGluZUZvckJveFNpZGUoc2lkZVJlY3QsIHNpZGUsIGNvbG9y
VG9QYWludCwgZWRnZVRvUmVuZGVyLnN0eWxlKCksIG1pdHJlQWRqYWNlbnRTaWRlMSA/IGFkamFj
ZW50RWRnZTEud2lkdGhGb3JQYWludGluZygpIDogMCwgbWl0cmVBZGphY2VudFNpZGUyID8gYWRq
YWNlbnRFZGdlMi53aWR0aEZvclBhaW50aW5nKCkgOiAwLCBhbnRpYWxpYXMpOworICAgIGRyYXdM
aW5lRm9yQm94U2lkZShwYWludGluZ0NvbnRleHQsIHNpZGVSZWN0LCBzaWRlLCBjb2xvclRvUGFp
bnQsIGVkZ2VUb1JlbmRlci5zdHlsZSgpLCBtaXRyZUFkamFjZW50U2lkZTEgPyBhZGphY2VudEVk
Z2UxLndpZHRoRm9yUGFpbnRpbmcoKSA6IDAsIG1pdHJlQWRqYWNlbnRTaWRlMiA/IGFkamFjZW50
RWRnZTIud2lkdGhGb3JQYWludGluZygpIDogMCwgYW50aWFsaWFzKTsKIH0KIAotdm9pZCBCb3Jk
ZXJQYWludGVyOjpwYWludEJvcmRlclNpZGVzKGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIG91dGVy
Qm9yZGVyLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwgQm94U2lkZVNldCBl
ZGdlU2V0LCBib29sIGFudGlhbGlhcywgY29uc3QgQ29sb3IqIG92ZXJyaWRlQ29sb3IpIGNvbnN0
Cit2b2lkIEJvcmRlclBhaW50ZXI6OnBhaW50Qm9yZGVyU2lkZXMoUGFpbnRpbmdDb250ZXh0JiBw
YWludGluZ0NvbnRleHQsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIG91dGVyQm9yZGVyLCBjb25z
dCBGbG9hdFJvdW5kZWRSZWN0JiBpbm5lckJvcmRlciwgRmxvYXRTaXplIGlubmVyQm9yZGVyQmxl
ZWRBZGp1c3RtZW50LCBCb3hTaWRlU2V0IGVkZ2VTZXQsIGJvb2wgYW50aWFsaWFzLCBjb25zdCBD
b2xvciogb3ZlcnJpZGVDb2xvcikgY29uc3QKIHsKICAgICBib29sIHJlbmRlclJhZGlpID0gb3V0
ZXJCb3JkZXIuaXNSb3VuZGVkKCk7CiAKQEAgLTkzOCwyOSArOTM0LDI5IEBAIHZvaWQgQm9yZGVy
UGFpbnRlcjo6cGFpbnRCb3JkZXJTaWRlcyhjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBvdXRlckJv
cmRlciwgY29uc3QKIAogICAgICAgICBzd2l0Y2ggKHNpZGUpIHsKICAgICAgICAgY2FzZSBCb3hT
aWRlOjpUb3A6Ci0gICAgICAgICAgICBzaWRlUmVjdC5zZXRIZWlnaHQoZWRnZS53aWR0aEZvclBh
aW50aW5nKCkpOworICAgICAgICAgICAgc2lkZVJlY3Quc2V0SGVpZ2h0KGVkZ2Uud2lkdGhGb3JQ
YWludGluZygpICsgaW5uZXJCb3JkZXJCbGVlZEFkanVzdG1lbnQuaGVpZ2h0KCkpOwogICAgICAg
ICAgICAgZmlyc3RSYWRpdXMgPSBpbm5lckJvcmRlci5yYWRpaSgpLnRvcExlZnQoKTsKICAgICAg
ICAgICAgIHNlY29uZFJhZGl1cyA9IGlubmVyQm9yZGVyLnJhZGlpKCkudG9wUmlnaHQoKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEJveFNpZGU6OlJpZ2h0OgotICAgICAgICAg
ICAgc2lkZVJlY3Quc2hpZnRYRWRnZVRvKHNpZGVSZWN0Lm1heFgoKSAtIGVkZ2Uud2lkdGhGb3JQ
YWludGluZygpKTsKKyAgICAgICAgICAgIHNpZGVSZWN0LnNoaWZ0WEVkZ2VUbyhzaWRlUmVjdC5t
YXhYKCkgLSBlZGdlLndpZHRoRm9yUGFpbnRpbmcoKSAtIGlubmVyQm9yZGVyQmxlZWRBZGp1c3Rt
ZW50LndpZHRoKCkpOwogICAgICAgICAgICAgZmlyc3RSYWRpdXMgPSBpbm5lckJvcmRlci5yYWRp
aSgpLmJvdHRvbVJpZ2h0KCk7CiAgICAgICAgICAgICBzZWNvbmRSYWRpdXMgPSBpbm5lckJvcmRl
ci5yYWRpaSgpLnRvcFJpZ2h0KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBC
b3hTaWRlOjpCb3R0b206Ci0gICAgICAgICAgICBzaWRlUmVjdC5zaGlmdFlFZGdlVG8oc2lkZVJl
Y3QubWF4WSgpIC0gZWRnZS53aWR0aEZvclBhaW50aW5nKCkpOworICAgICAgICAgICAgc2lkZVJl
Y3Quc2hpZnRZRWRnZVRvKHNpZGVSZWN0Lm1heFkoKSAtIGVkZ2Uud2lkdGhGb3JQYWludGluZygp
IC0gaW5uZXJCb3JkZXJCbGVlZEFkanVzdG1lbnQuaGVpZ2h0KCkpOwogICAgICAgICAgICAgZmly
c3RSYWRpdXMgPSBpbm5lckJvcmRlci5yYWRpaSgpLmJvdHRvbUxlZnQoKTsKICAgICAgICAgICAg
IHNlY29uZFJhZGl1cyA9IGlubmVyQm9yZGVyLnJhZGlpKCkuYm90dG9tUmlnaHQoKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEJveFNpZGU6OkxlZnQ6Ci0gICAgICAgICAgICBz
aWRlUmVjdC5zZXRXaWR0aChlZGdlLndpZHRoRm9yUGFpbnRpbmcoKSk7CisgICAgICAgICAgICBz
aWRlUmVjdC5zZXRXaWR0aChlZGdlLndpZHRoRm9yUGFpbnRpbmcoKSArIGlubmVyQm9yZGVyQmxl
ZWRBZGp1c3RtZW50LndpZHRoKCkpOwogICAgICAgICAgICAgZmlyc3RSYWRpdXMgPSBpbm5lckJv
cmRlci5yYWRpaSgpLmJvdHRvbUxlZnQoKTsKICAgICAgICAgICAgIHNlY29uZFJhZGl1cyA9IGlu
bmVyQm9yZGVyLnJhZGlpKCkudG9wTGVmdCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIAogICAgICAgICBib29sIHVzZVBhdGggPSByZW5kZXJSYWRpaSAmJiAoYm9yZGVyU3R5bGVI
YXNJbm5lckRldGFpbChlZGdlLnN0eWxlKCkpIHx8IGJvcmRlcldpbGxBcmNJbm5lckVkZ2UoZmly
c3RSYWRpdXMsIHNlY29uZFJhZGl1cykpOwotICAgICAgICBwYWludE9uZUJvcmRlclNpZGUob3V0
ZXJCb3JkZXIsIGlubmVyQm9yZGVyLCBzaWRlUmVjdCwgc2lkZSwgdXNlUGF0aCA/ICZyb3VuZGVk
UGF0aCA6IG51bGxwdHIsIGFudGlhbGlhcywgb3ZlcnJpZGVDb2xvcik7CisgICAgICAgIHBhaW50
T25lQm9yZGVyU2lkZShwYWludGluZ0NvbnRleHQsIG91dGVyQm9yZGVyLCBpbm5lckJvcmRlciwg
c2lkZVJlY3QsIHNpZGUsIHVzZVBhdGggPyAmcm91bmRlZFBhdGggOiBudWxscHRyLCBhbnRpYWxp
YXMsIG92ZXJyaWRlQ29sb3IpOwogICAgIH07CiAKICAgICBwYWludE9uZVNpZGUoQm94U2lkZTo6
VG9wKTsKQEAgLTk2OSw3ICs5NjUsNyBAQCB2b2lkIEJvcmRlclBhaW50ZXI6OnBhaW50Qm9yZGVy
U2lkZXMoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgb3V0ZXJCb3JkZXIsIGNvbnN0CiAgICAgcGFp
bnRPbmVTaWRlKEJveFNpZGU6OlJpZ2h0KTsKIH0KIAotdm9pZCBCb3JkZXJQYWludGVyOjpwYWlu
dFRyYW5zbHVjZW50Qm9yZGVyU2lkZXMoY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgb3V0ZXJCb3Jk
ZXIsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGlubmVyQm9yZGVyLCBCb3hTaWRlU2V0IGVkZ2Vz
VG9EcmF3LCBib29sIGFudGlhbGlhcykgY29uc3QKK3ZvaWQgQm9yZGVyUGFpbnRlcjo6cGFpbnRU
cmFuc2x1Y2VudEJvcmRlclNpZGVzKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiBvdXRlckJvcmRlciwgY29uc3QgRmxvYXRSb3VuZGVkUmVj
dCYgaW5uZXJCb3JkZXIsIEZsb2F0U2l6ZSBpbm5lckJvcmRlckJsZWVkQWRqdXN0bWVudCwgQm94
U2lkZVNldCBlZGdlc1RvRHJhdywgYm9vbCBhbnRpYWxpYXMpIGNvbnN0CiB7CiAgICAgLy8gd2ls
bEJlT3ZlcmRyYXduIGFzc3VtZXMgdGhhdCB3ZSBkcmF3IGluIG9yZGVyOiB0b3AsIGJvdHRvbSwg
bGVmdCwgcmlnaHQuCiAgICAgLy8gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBCb3hTaWRlIGVudW0g
b3JkZXIuCkBAIC05OTgsMjAgKzk5NCwzOCBAQCB2b2lkIEJvcmRlclBhaW50ZXI6OnBhaW50VHJh
bnNsdWNlbnRCb3JkZXJTaWRlcyhjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBvdXRlckJvcgogCiAg
ICAgICAgIGJvb2wgdXNlVHJhbnNwYXJlbmN5TGF5ZXIgPSBpbmNsdWRlc0FkamFjZW50RWRnZXMo
Y29tbW9uQ29sb3JFZGdlU2V0KSAmJiAhY29tbW9uQ29sb3IuaXNPcGFxdWUoKTsKICAgICAgICAg
aWYgKHVzZVRyYW5zcGFyZW5jeUxheWVyKSB7Ci0gICAgICAgICAgICBtX3BhaW50aW5nQ29udGV4
dC5jb250ZXh0LmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoY29tbW9uQ29sb3IuYWxwaGFBc0Zsb2F0
KCkpOworICAgICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuYmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihjb21tb25Db2xvci5hbHBoYUFzRmxvYXQoKSk7CiAgICAgICAgICAgICBjb21tb25D
b2xvciA9IGNvbW1vbkNvbG9yLm9wYXF1ZUNvbG9yKCk7CiAgICAgICAgIH0KIAotICAgICAgICBw
YWludEJvcmRlclNpZGVzKG91dGVyQm9yZGVyLCBpbm5lckJvcmRlciwgY29tbW9uQ29sb3JFZGdl
U2V0LCBhbnRpYWxpYXMsICZjb21tb25Db2xvcik7CisgICAgICAgIHBhaW50Qm9yZGVyU2lkZXMo
cGFpbnRpbmdDb250ZXh0LCBvdXRlckJvcmRlciwgaW5uZXJCb3JkZXIsIGlubmVyQm9yZGVyQmxl
ZWRBZGp1c3RtZW50LCBjb21tb25Db2xvckVkZ2VTZXQsIGFudGlhbGlhcywgJmNvbW1vbkNvbG9y
KTsKICAgICAgICAgICAgIAogICAgICAgICBpZiAodXNlVHJhbnNwYXJlbmN5TGF5ZXIpCi0gICAg
ICAgICAgICBtX3BhaW50aW5nQ29udGV4dC5jb250ZXh0LmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7
CisgICAgICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXll
cigpOwogICAgICAgICAKICAgICAgICAgZWRnZXNUb0RyYXcucmVtb3ZlKGNvbW1vbkNvbG9yRWRn
ZVNldCk7CiAgICAgfQogfQogCi12b2lkIEJvcmRlclBhaW50ZXI6OnBhaW50Qm9yZGVycygpIGNv
bnN0CitzdGF0aWMgRmxvYXRSZWN0IHNocmlua1JlY3RCeU9uZURldmljZVBpeGVsKGNvbnN0IFBh
aW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7
CisgICAgYXV0byBzaHJ1bmtSZWN0ID0gcmVjdDsKKyAgICBhdXRvIHRyYW5zZm9ybSA9IHBhaW50
aW5nQ29udGV4dC5jb250ZXh0LmdldENUTSgpOworICAgIHNocnVua1JlY3QuaW5mbGF0ZVgoLWNl
aWxUb0RldmljZVBpeGVsKDEuMGYgLyB0cmFuc2Zvcm0ueFNjYWxlKCksIHBhaW50aW5nQ29udGV4
dC5kZXZpY2VTY2FsZUZhY3RvcikpOworICAgIHNocnVua1JlY3QuaW5mbGF0ZVkoLWNlaWxUb0Rl
dmljZVBpeGVsKDEuMGYgLyB0cmFuc2Zvcm0ueVNjYWxlKCksIHBhaW50aW5nQ29udGV4dC5kZXZp
Y2VTY2FsZUZhY3RvcikpOworICAgIHJldHVybiBzaHJ1bmtSZWN0OworfQorCitGbG9hdFJlY3Qg
Qm9yZGVyUGFpbnRlcjo6Ym9yZGVySW5uZXJSZWN0QWRqdXN0ZWRGb3JCbGVlZEF2b2lkYW5jZShj
b25zdCBQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAo
bV9ibGVlZEF2b2lkYW5jZSAhPSBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2U6OkJhY2tncm91bmRP
dmVyQm9yZGVyKQorICAgICAgICByZXR1cm4gbV9ib3JkZXJSZWN0LnJlY3QoKTsKKworICAgIC8v
IFdlIHNocmluayB0aGUgcmVjdGFuZ2xlIGJ5IG9uZSBkZXZpY2UgcGl4ZWwgb24gZWFjaCBzaWRl
IHRvIG1ha2UgaXQgZnVsbHkgb3ZlcmxhcCB0aGUgYW50aS1hbGlhc2VkIGJhY2tncm91bmQgYm9y
ZGVyCisgICAgcmV0dXJuIHNocmlua1JlY3RCeU9uZURldmljZVBpeGVsKHBhaW50aW5nQ29udGV4
dCwgbV9ib3JkZXJSZWN0LnJlY3QoKSk7Cit9CisKK3ZvaWQgQm9yZGVyUGFpbnRlcjo6cGFpbnRC
b3JkZXJzKFBhaW50aW5nQ29udGV4dCYgcGFpbnRpbmdDb250ZXh0KSBjb25zdAogewogICAgIGJv
b2wgaGF2ZUFscGhhQ29sb3IgPSBmYWxzZTsKICAgICBib29sIGhhdmVBbGxTb2xpZEVkZ2VzID0g
dHJ1ZTsKQEAgLTEwNTMsNyArMTA2Nyw3IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6cGFpbnRCb3Jk
ZXJzKCkgY29uc3QKICAgICAgICAgICAgIGhhdmVBbGxEb3VibGVFZGdlcyA9IGZhbHNlOwogICAg
IH0KIAotICAgIEZsb2F0Um91bmRlZFJlY3QgaW5uZXJCb3JkZXJSZWN0ID0gcm91bmRlZEluc2V0
Qm9yZGVyRm9yUmVjdChtX2JvcmRlclJlY3QucmVjdCgpLCB7IG1fZWRnZXMudG9wKCkud2lkdGgo
KSwgbV9lZGdlcy5yaWdodCgpLndpZHRoKCksIG1fZWRnZXMuYm90dG9tKCkud2lkdGgoKSwgbV9l
ZGdlcy5sZWZ0KCkud2lkdGgoKSB9KTsKKyAgICBGbG9hdFJvdW5kZWRSZWN0IGlubmVyQm9yZGVy
UmVjdCA9IHJvdW5kZWRJbnNldEJvcmRlckZvclJlY3QoYm9yZGVySW5uZXJSZWN0QWRqdXN0ZWRG
b3JCbGVlZEF2b2lkYW5jZShwYWludGluZ0NvbnRleHQpLCBtX2JvcmRlclJlY3QucmFkaWkoKSwg
Ym9yZGVyV2lkdGhzKG1fZWRnZXMpLCBtX2luY2x1ZGVMZWZ0RWRnZSwgbV9pbmNsdWRlUmlnaHRF
ZGdlKTsKIAogICAgIC8vIEZJWE1FOiBJZiBubyBjb3JuZXIgaW50ZXJzZWN0cyB0aGUgY2xpcCBy
ZWdpb24sIHdlIGNhbiBwcmV0ZW5kIG91dGVyQm9yZGVyIGlzIHJlY3Rhbmd1bGFyIHRvIGltcHJv
dmUgcGVyZm9ybWFuY2UuCiAgICAgCkBAIC0xMDYyLDcgKzEwNzYsNyBAQCB2b2lkIEJvcmRlclBh
aW50ZXI6OnBhaW50Qm9yZGVycygpIGNvbnN0CiAgICAgICAgIGlmIChudW1FZGdlc1Zpc2libGUg
PT0gNCAmJiAobV9ib3JkZXJSZWN0LmlzUm91bmRlZCgpIHx8IGhhdmVBbHBoYUNvbG9yKSAmJiAo
aGF2ZUFsbFNvbGlkRWRnZXMgfHwgKCFtX2JvcmRlclJlY3QuaXNSb3VuZGVkKCkgJiYgIWlubmVy
Qm9yZGVyUmVjdC5pc1JvdW5kZWQoKSkpKSB7CiAgICAgICAgICAgICBQYXRoIHBhdGg7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX2JvcmRlclJlY3QuaXNSb3VuZGVkKCkpCisgICAg
ICAgICAgICBpZiAobV9ib3JkZXJSZWN0LmlzUm91bmRlZCgpICYmIG1fYmxlZWRBdm9pZGFuY2Ug
IT0gQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlOjpVc2VUcmFuc3BhcmVuY3lMYXllcikKICAgICAg
ICAgICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KG1fYm9yZGVyUmVjdCk7CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgcGF0aC5hZGRSZWN0KG1fYm9yZGVyUmVjdC5yZWN0KCkp
OwpAQCAtMTA5OCw3ICsxMTEyLDcgQEAgdm9pZCBCb3JkZXJQYWludGVyOjpwYWludEJvcmRlcnMo
KSBjb25zdAogICAgICAgICAgICAgICAgIGF1dG8gb3V0ZXJUaGlyZFJvdW5kZWRSZWN0ID0gbV9i
b3JkZXJSZWN0OwogICAgICAgICAgICAgICAgIG91dGVyVGhpcmRSb3VuZGVkUmVjdC5zZXRSZWN0
KG91dGVyVGhpcmRSZWN0KTsKIAotICAgICAgICAgICAgICAgIGlmIChvdXRlclRoaXJkUm91bmRl
ZFJlY3QuaXNSb3VuZGVkKCkpCisgICAgICAgICAgICAgICAgaWYgKG91dGVyVGhpcmRSb3VuZGVk
UmVjdC5pc1JvdW5kZWQoKSAmJiBtX2JsZWVkQXZvaWRhbmNlICE9IEJhY2tncm91bmRCbGVlZEF2
b2lkYW5jZTo6VXNlVHJhbnNwYXJlbmN5TGF5ZXIpCiAgICAgICAgICAgICAgICAgICAgIHBhdGgu
YWRkUm91bmRlZFJlY3Qob3V0ZXJUaGlyZFJvdW5kZWRSZWN0KTsKICAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgICAgIHBhdGguYWRkUmVjdChvdXRlclRoaXJkUm91bmRlZFJl
Y3QucmVjdCgpKTsKQEAgLTExMTYsOSArMTEzMCw5IEBAIHZvaWQgQm9yZGVyUGFpbnRlcjo6cGFp
bnRCb3JkZXJzKCkgY29uc3QKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBwYXRo
LmFkZFJlY3QoaW5uZXJCb3JkZXJSZWN0LnJlY3QoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuc2V0RmlsbFJ1bGUoV2luZFJ1bGU6OkV2ZW5P
ZGQpOwotICAgICAgICAgICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRGaWxsQ29sb3Io
bV9lZGdlcy50b3AoKS5jb2xvcigpKTsKLSAgICAgICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNv
bnRleHQuZmlsbFBhdGgocGF0aCk7CisgICAgICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4
dC5zZXRGaWxsUnVsZShXaW5kUnVsZTo6RXZlbk9kZCk7CisgICAgICAgICAgICBwYWludGluZ0Nv
bnRleHQuY29udGV4dC5zZXRGaWxsQ29sb3IobV9lZGdlcy50b3AoKS5jb2xvcigpKTsKKyAgICAg
ICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LmZpbGxQYXRoKHBhdGgpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTExNTYsMzUgKzExNzAsNDUgQEAgdm9pZCBCb3Jk
ZXJQYWludGVyOjpwYWludEJvcmRlcnMoKSBjb25zdAogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgbV9wYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRGaWxs
UnVsZShXaW5kUnVsZTo6Tm9uWmVybyk7Ci0gICAgICAgICAgICBtX3BhaW50aW5nQ29udGV4dC5j
b250ZXh0LnNldEZpbGxDb2xvcihtX2VkZ2VzLmF0KCpmaXJzdFZpc2libGVTaWRlKS5jb2xvcigp
KTsKLSAgICAgICAgICAgIG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuZmlsbFBhdGgocGF0aCk7
CisgICAgICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRGaWxsUnVsZShXaW5kUnVs
ZTo6Tm9uWmVybyk7CisgICAgICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5zZXRGaWxs
Q29sb3IobV9lZGdlcy5hdCgqZmlyc3RWaXNpYmxlU2lkZSkuY29sb3IoKSk7CisgICAgICAgICAg
ICBwYWludGluZ0NvbnRleHQuY29udGV4dC5maWxsUGF0aChwYXRoKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgIH0KIAogICAgIGJvb2wgY2xpcFRvT3V0ZXJCb3JkZXIgPSBt
X2JvcmRlclJlY3QuaXNSb3VuZGVkKCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKG1fcGFpbnRpbmdDb250ZXh0LmNvbnRleHQsIGNsaXBUb091dGVyQm9yZGVyKTsK
KyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGFpbnRpbmdDb250ZXh0
LmNvbnRleHQsIGNsaXBUb091dGVyQm9yZGVyKTsKICAgICBpZiAoY2xpcFRvT3V0ZXJCb3JkZXIp
IHsKICAgICAgICAgLy8gQ2xpcCB0byB0aGUgaW5uZXIgYW5kIG91dGVyIHJhZGlpIHJlY3RzLgot
ICAgICAgICBtX3BhaW50aW5nQ29udGV4dC5jb250ZXh0LmNsaXBSb3VuZGVkUmVjdChtX2JvcmRl
clJlY3QpOworICAgICAgICBpZiAobV9ibGVlZEF2b2lkYW5jZSAhPSBCYWNrZ3JvdW5kQmxlZWRB
dm9pZGFuY2U6OlVzZVRyYW5zcGFyZW5jeUxheWVyKQorICAgICAgICAgICAgcGFpbnRpbmdDb250
ZXh0LmNvbnRleHQuY2xpcFJvdW5kZWRSZWN0KG1fYm9yZGVyUmVjdCk7CisKICAgICAgICAgaWYg
KGlubmVyQm9yZGVyUmVjdC5pc1JlbmRlcmFibGUoKSkKLSAgICAgICAgICAgIG1fcGFpbnRpbmdD
b250ZXh0LmNvbnRleHQuY2xpcE91dFJvdW5kZWRSZWN0KGlubmVyQm9yZGVyUmVjdCk7CisgICAg
ICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5jbGlwT3V0Um91bmRlZFJlY3QoaW5uZXJC
b3JkZXJSZWN0KTsKICAgICB9CiAKLSAgICBib29sIHNob3VsZEFudGlhbGlhc0xpbmVzID0gIW1f
cGFpbnRpbmdDb250ZXh0LmNvbnRleHQuZ2V0Q1RNKCkuaXNJZGVudGl0eU9yVHJhbnNsYXRpb25P
ckZsaXBwZWQoKTsKKyAgICBib29sIHNob3VsZEFudGlhbGlhc0xpbmVzID0gIXBhaW50aW5nQ29u
dGV4dC5jb250ZXh0LmdldENUTSgpLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uT3JGbGlwcGVkKCk7
CiAKICAgICAvLyBJZiBvbmx5IG9uZSBlZGdlIHZpc2libGUgYW50aWFsaWFzaW5nIGRvZXNuJ3Qg
Y3JlYXRlIHNlYW1zCiAgICAgYm9vbCBhbnRpYWxpYXMgPSBzaG91bGRBbnRpYWxpYXNMaW5lcyB8
fCBudW1FZGdlc1Zpc2libGUgPT0gMTsKKworICAgIGF1dG8gdW5hZGp1c3RlZElubmVyQm9yZGVy
ID0gaW5uZXJCb3JkZXJSZWN0OworICAgIEZsb2F0U2l6ZSBpbm5lckJvcmRlckJsZWVkQWRqdXN0
bWVudDsKKyAgICBpZiAobV9ibGVlZEF2b2lkYW5jZSA9PSBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFu
Y2U6OkJhY2tncm91bmRPdmVyQm9yZGVyKSB7CisgICAgICAgIHVuYWRqdXN0ZWRJbm5lckJvcmRl
ciA9IHJvdW5kZWRJbnNldEJvcmRlckZvclJlY3QobV9ib3JkZXJSZWN0LnJlY3QoKSwgbV9ib3Jk
ZXJSZWN0LnJhZGlpKCksIGJvcmRlcldpZHRocyhtX2VkZ2VzKSwgbV9pbmNsdWRlTGVmdEVkZ2Us
IG1faW5jbHVkZVJpZ2h0RWRnZSk7CisgICAgICAgIGlubmVyQm9yZGVyQmxlZWRBZGp1c3RtZW50
ID0gaW5uZXJCb3JkZXJSZWN0LnJlY3QoKS5sb2NhdGlvbigpIC0gdW5hZGp1c3RlZElubmVyQm9y
ZGVyLnJlY3QoKS5sb2NhdGlvbigpOworICAgIH0KKwogICAgIGlmIChoYXZlQWxwaGFDb2xvcikK
LSAgICAgICAgcGFpbnRUcmFuc2x1Y2VudEJvcmRlclNpZGVzKG1fYm9yZGVyUmVjdCwgaW5uZXJC
b3JkZXJSZWN0LCBlZGdlc1RvRHJhdywgYW50aWFsaWFzKTsgLy8gRklYTUUuCisgICAgICAgIHBh
aW50VHJhbnNsdWNlbnRCb3JkZXJTaWRlcyhwYWludGluZ0NvbnRleHQsIG1fYm9yZGVyUmVjdCwg
aW5uZXJCb3JkZXJSZWN0LCBpbm5lckJvcmRlckJsZWVkQWRqdXN0bWVudCwgZWRnZXNUb0RyYXcs
IGFudGlhbGlhcyk7IC8vIEZJWE1FLgogICAgIGVsc2UKLSAgICAgICAgcGFpbnRCb3JkZXJTaWRl
cyhtX2JvcmRlclJlY3QsIGlubmVyQm9yZGVyUmVjdCwgZWRnZXNUb0RyYXcsIGFudGlhbGlhcyk7
CisgICAgICAgIHBhaW50Qm9yZGVyU2lkZXMocGFpbnRpbmdDb250ZXh0LCBtX2JvcmRlclJlY3Qs
IGlubmVyQm9yZGVyUmVjdCwgaW5uZXJCb3JkZXJCbGVlZEFkanVzdG1lbnQsIGVkZ2VzVG9EcmF3
LCBhbnRpYWxpYXMpOwogfQogCi12b2lkIEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJvcmRl
cnMoY29uc3QgQm94TW9kZWxCb3gmIGJveCwgUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRl
eHQsIGJvb2wgaW5jbHVkZUxlZnRFZGdlLCBib29sIGluY2x1ZGVSaWdodEVkZ2UpCit2b2lkIEJv
eERlY29yYXRpb25QYWludGVyOjpwYWludEJvcmRlcnMoUGFpbnRpbmdDb250ZXh0JiBwYWludGlu
Z0NvbnRleHQpIGNvbnN0CiB7Ci0gICAgYXV0byogYm94RGVjb3JhdGlvbkRhdGEgPSBib3guYm94
RGVjb3JhdGlvbkRhdGEoKTsKKyAgICBhdXRvKiBib3hEZWNvcmF0aW9uRGF0YSA9IG1fYm94LmJv
eERlY29yYXRpb25EYXRhKCk7CiAgICAgaWYgKCFib3hEZWNvcmF0aW9uRGF0YSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC0xMTk0LDE1ICsxMjE4LDEyIEBAIHZvaWQgQm94RGVjb3JhdGlvblBhaW50
ZXI6OnBhaW50Qm9yZGVycyhjb25zdCBCb3hNb2RlbEJveCYgYm94LCBQYWludGluZ0NvbnRleHQm
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIG91dGVyQm9yZGVyID0gRmxvYXRS
b3VuZGVkUmVjdCB7IGJveC5hYnNvbHV0ZUJvcmRlckJveFJlY3QoKSwgeyB9IH07Ci0gICAgaWYg
KGF1dG8gYm9yZGVyUmFkaWkgPSBib3hEZWNvcmF0aW9uRGF0YS0+Ym9yZGVyUmFkaWkoKSkKLSAg
ICAgICAgb3V0ZXJCb3JkZXIuc2V0UmFkaWkoKmJvcmRlclJhZGlpKTsKLQotICAgIEJvcmRlclBh
aW50ZXIgcGFpbnRlcihib3hEZWNvcmF0aW9uRGF0YS0+Ym9yZGVyRWRnZXMoKSwgcGFpbnRpbmdD
b250ZXh0LCBvdXRlckJvcmRlciwgaW5jbHVkZUxlZnRFZGdlLCBpbmNsdWRlUmlnaHRFZGdlKTsK
LSAgICBwYWludGVyLnBhaW50Qm9yZGVycygpOworICAgIGF1dG8gb3V0ZXJCb3JkZXIgPSBib3Jk
ZXJSb3VuZGVkUmVjdCgpOworICAgIEJvcmRlclBhaW50ZXIgcGFpbnRlcihib3hEZWNvcmF0aW9u
RGF0YS0+Ym9yZGVyRWRnZXMoKSwgb3V0ZXJCb3JkZXIsIG1fYmxlZWRBdm9pZGFuY2UsIG1faW5j
bHVkZUxlZnRFZGdlLCBtX2luY2x1ZGVSaWdodEVkZ2UpOworICAgIHBhaW50ZXIucGFpbnRCb3Jk
ZXJzKHBhaW50aW5nQ29udGV4dCk7CiB9CiAKLXN0YXRpYyB2b2lkIHBhaW50RmlsbExheWVyKGNv
bnN0IEJveE1vZGVsQm94JiBib3gsIGNvbnN0IEZpbGxMYXllciYgbGF5ZXIsIGNvbnN0IEZpbGxM
YXllckltYWdlR2VvbWV0cnkmIGdlb21ldHJ5LCBQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29u
dGV4dCkKK3ZvaWQgQm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50RmlsbExheWVyKFBhaW50aW5n
Q29udGV4dCYgcGFpbnRpbmdDb250ZXh0LCBjb25zdCBGaWxsTGF5ZXImIGxheWVyLCBjb25zdCBG
aWxsTGF5ZXJJbWFnZUdlb21ldHJ5JiBnZW9tZXRyeSkgY29uc3QKIHsKICAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGFpbnRpbmdDb250ZXh0LmNvbnRleHQsIGZhbHNl
KTsKIApAQCAtMTIyNSw3ICsxMjQ2LDcgQEAgc3RhdGljIHZvaWQgcGFpbnRGaWxsTGF5ZXIoY29u
c3QgQm94TW9kZWxCb3gmIGJveCwgY29uc3QgRmlsbExheWVyJiBsYXllciwgY29uc3QKICAgICBj
YXNlIEZpbGxCb3g6OlBhZGRpbmc6CiAgICAgY2FzZSBGaWxsQm94OjpDb250ZW50OiB7CiAgICAg
ICAgIHN0YXRlU2F2ZXIuc2F2ZSgpOwotICAgICAgICBwYWludGluZ0NvbnRleHQuY29udGV4dC5j
bGlwKGNsaXBSZWN0Rm9yTGF5ZXIoYm94LCBsYXllcikpOworICAgICAgICBwYWludGluZ0NvbnRl
eHQuY29udGV4dC5jbGlwKGNsaXBSZWN0Rm9yTGF5ZXIobV9ib3gsIGxheWVyKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIEZpbGxCb3g6OlRleHQ6CkBAIC0xMjU3LDE2ICsxMjc4
LDM1IEBAIHN0YXRpYyB2b2lkIHBhaW50RmlsbExheWVyKGNvbnN0IEJveE1vZGVsQm94JiBib3gs
IGNvbnN0IEZpbGxMYXllciYgbGF5ZXIsIGNvbnN0CiAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRl
eHQuZHJhd1RpbGVkSW1hZ2UoKmltYWdlLCBnZW9tZXRyeS5kZXN0UmVjdCgpLCB0b0Zsb2F0UG9p
bnQoZ2VvbWV0cnkucmVsYXRpdmVQaGFzZSgpKSwgZ2VvbWV0cnkudGlsZVNpemUoKSwgZ2VvbWV0
cnkuc3BhY2VTaXplKCksIG9wdGlvbnMpOwogfQogCi12b2lkIEJveERlY29yYXRpb25QYWludGVy
OjpwYWludEJhY2tncm91bmRJbWFnZXMoY29uc3QgQm94TW9kZWxCb3gmIGJveCwgUGFpbnRpbmdD
b250ZXh0JiBwYWludGluZ0NvbnRleHQpCitCb3hEZWNvcmF0aW9uUGFpbnRlcjo6Qm94RGVjb3Jh
dGlvblBhaW50ZXIoY29uc3QgQm94TW9kZWxCb3gmIGJveCwgUGFpbnRpbmdDb250ZXh0JiBwYWlu
dGluZ0NvbnRleHQsIGJvb2wgaW5jbHVkZUxlZnRFZGdlLCBib29sIGluY2x1ZGVSaWdodEVkZ2Up
CisgICAgOiBtX2JveChib3gpCisgICAgLCBtX2JvcmRlclJlY3QoY29tcHV0ZUJvcmRlclJlY3Qo
Ym94KSkKKyAgICAsIG1fYmxlZWRBdm9pZGFuY2UoZGV0ZXJtaW5lQmFja2dyb3VuZEJsZWVkQXZv
aWRhbmNlKGJveCwgcGFpbnRpbmdDb250ZXh0KSkKKyAgICAsIG1faW5jbHVkZUxlZnRFZGdlKGlu
Y2x1ZGVMZWZ0RWRnZSkKKyAgICAsIG1faW5jbHVkZVJpZ2h0RWRnZShpbmNsdWRlUmlnaHRFZGdl
KQoreworfQorCitGbG9hdFJvdW5kZWRSZWN0IEJveERlY29yYXRpb25QYWludGVyOjpjb21wdXRl
Qm9yZGVyUmVjdChjb25zdCBCb3hNb2RlbEJveCYgYm94KQoreworICAgIGF1dG8gYm9yZGVyUmVj
dCA9IEZsb2F0Um91bmRlZFJlY3QgeyBib3guYWJzb2x1dGVCb3JkZXJCb3hSZWN0KCksIHsgfSB9
OworICAgIGF1dG8qIGJvcmRlclJhZGlpID0gYm94LmJveERlY29yYXRpb25EYXRhKCkgPyBib3gu
Ym94RGVjb3JhdGlvbkRhdGEoKS0+Ym9yZGVyUmFkaWkoKSA6IG51bGxwdHI7CisgICAgaWYgKGJv
cmRlclJhZGlpKQorICAgICAgICBib3JkZXJSZWN0LnNldFJhZGlpKCpib3JkZXJSYWRpaSk7Cisg
ICAgCisgICAgcmV0dXJuIGJvcmRlclJlY3Q7Cit9CisKK3ZvaWQgQm94RGVjb3JhdGlvblBhaW50
ZXI6OnBhaW50QmFja2dyb3VuZEltYWdlcyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4
dCkgY29uc3QKIHsKLSAgICBjb25zdCBhdXRvJiBzdHlsZSA9IGJveC5zdHlsZSgpOworICAgIGNv
bnN0IGF1dG8mIHN0eWxlID0gbV9ib3guc3R5bGUoKTsKIAogICAgIFZlY3Rvcjxjb25zdCBGaWxs
TGF5ZXIqLCA4PiBsYXllcnM7CiAKICAgICBmb3IgKGF1dG8qIGxheWVyID0gc3R5bGUuYmFja2dy
b3VuZExheWVycygpOyBsYXllcjsgbGF5ZXIgPSBsYXllci0+bmV4dCgpKQogICAgICAgICBsYXll
cnMuYXBwZW5kKGxheWVyKTsKIAotICAgIGF1dG8qIGJveERlY29yYXRpb25EYXRhID0gYm94LmJv
eERlY29yYXRpb25EYXRhKCk7CisgICAgYXV0byogYm94RGVjb3JhdGlvbkRhdGEgPSBtX2JveC5i
b3hEZWNvcmF0aW9uRGF0YSgpOwogICAgIEFTU0VSVChib3hEZWNvcmF0aW9uRGF0YSk7CiAKICAg
ICBhdXRvJiBsYXllckdlb21ldHJ5TGlzdCA9IGJveERlY29yYXRpb25EYXRhLT5iYWNrZ3JvdW5k
SW1hZ2VHZW9tZXRyeSgpOwpAQCAtMTI3NCwyOCArMTMxNCwxMDYgQEAgdm9pZCBCb3hEZWNvcmF0
aW9uUGFpbnRlcjo6cGFpbnRCYWNrZ3JvdW5kSW1hZ2VzKGNvbnN0IEJveE1vZGVsQm94JiBib3gs
IFBhaW50aW4KICAgICBmb3IgKGludCBpID0gbGF5ZXJzLnNpemUoKSAtIDE7IGkgPj0wOyAtLWkp
IHsKICAgICAgICAgY29uc3QgYXV0byogbGF5ZXIgPSBsYXllcnNbaV07CiAgICAgICAgIGNvbnN0
IGF1dG8mIGdlb21ldHJ5ID0gbGF5ZXJHZW9tZXRyeUxpc3RbaV07Ci0gICAgICAgIHBhaW50Rmls
bExheWVyKGJveCwgKmxheWVyLCBnZW9tZXRyeSwgcGFpbnRpbmdDb250ZXh0KTsKKyAgICAgICAg
cGFpbnRGaWxsTGF5ZXIocGFpbnRpbmdDb250ZXh0LCAqbGF5ZXIsIGdlb21ldHJ5KTsKKyAgICB9
Cit9CisKK0Zsb2F0Um91bmRlZFJlY3QgQm94RGVjb3JhdGlvblBhaW50ZXI6OmJhY2tncm91bmRS
b3VuZGVkUmVjdEFkanVzdGVkRm9yQmxlZWRBdm9pZGFuY2UoY29uc3QgUGFpbnRpbmdDb250ZXh0
JiBwYWludGluZ0NvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKG1fYmxlZWRBdm9pZGFuY2UgPT0g
QmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlOjpTaHJpbmtCYWNrZ3JvdW5kKSB7CisgICAgICAgIC8v
IFdlIHNocmluayB0aGUgcmVjdGFuZ2xlIGJ5IG9uZSBkZXZpY2UgcGl4ZWwgb24gZWFjaCBzaWRl
IGJlY2F1c2UgdGhlIGJsZWVkIGlzIG9uZSBwaXhlbCBtYXhpbXVtLgorICAgICAgICByZXR1cm4g
cm91bmRlZFJlY3RXaXRoSW5jbHVkZWRSYWRpaShzaHJpbmtSZWN0QnlPbmVEZXZpY2VQaXhlbChw
YWludGluZ0NvbnRleHQsIG1fYm9yZGVyUmVjdC5yZWN0KCkpLCBtX2JvcmRlclJlY3QucmFkaWko
KSwgbV9pbmNsdWRlTGVmdEVkZ2UsIG1faW5jbHVkZVJpZ2h0RWRnZSk7CisgICAgfQorCisgICAg
aWYgKG1fYmxlZWRBdm9pZGFuY2UgPT0gQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlOjpCYWNrZ3Jv
dW5kT3ZlckJvcmRlcikgeworICAgICAgICBhdXRvKiBib3hEZWNvcmF0aW9uRGF0YSA9IG1fYm94
LmJveERlY29yYXRpb25EYXRhKCk7CisgICAgICAgIEFTU0VSVChib3hEZWNvcmF0aW9uRGF0YSk7
CisgICAgICAgIHJldHVybiByb3VuZGVkSW5zZXRCb3JkZXJGb3JSZWN0KG1fYm9yZGVyUmVjdC5y
ZWN0KCksIG1fYm9yZGVyUmVjdC5yYWRpaSgpLCBib3JkZXJXaWR0aHMoYm94RGVjb3JhdGlvbkRh
dGEtPmJvcmRlckVkZ2VzKCkpLCBtX2luY2x1ZGVMZWZ0RWRnZSwgbV9pbmNsdWRlUmlnaHRFZGdl
KTsKICAgICB9CisKKyAgICByZXR1cm4gcm91bmRlZFJlY3RXaXRoSW5jbHVkZWRSYWRpaShtX2Jv
cmRlclJlY3QucmVjdCgpLCBtX2JvcmRlclJlY3QucmFkaWkoKSwgbV9pbmNsdWRlTGVmdEVkZ2Us
IG1faW5jbHVkZVJpZ2h0RWRnZSk7CiB9CiAKLXZvaWQgQm94RGVjb3JhdGlvblBhaW50ZXI6OnBh
aW50QmFja2dyb3VuZChjb25zdCBCb3hNb2RlbEJveCYgYm94LCBQYWludGluZ0NvbnRleHQmIHBh
aW50aW5nQ29udGV4dCkKK3ZvaWQgQm94RGVjb3JhdGlvblBhaW50ZXI6OnBhaW50QmFja2dyb3Vu
ZChQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCkgY29uc3QKIHsKLSAgICBhdXRvIGJv
cmRlckJveFJlY3QgPSBib3guYWJzb2x1dGVCb3JkZXJCb3hSZWN0KCk7Ci0gICAgY29uc3QgYXV0
byYgc3R5bGUgPSBib3guc3R5bGUoKTsKKyAgICBhdXRvIGJvcmRlckJveFJlY3QgPSBtX2JveC5h
YnNvbHV0ZUJvcmRlckJveFJlY3QoKTsKKyAgICBjb25zdCBhdXRvJiBzdHlsZSA9IG1fYm94LnN0
eWxlKCk7CisgICAgYXV0byogYm94RGVjb3JhdGlvbkRhdGEgPSBtX2JveC5ib3hEZWNvcmF0aW9u
RGF0YSgpOwogCiAgICAgaWYgKHN0eWxlLmhhc0JhY2tncm91bmQoKSkgeworICAgICAgICBHcmFw
aGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGFpbnRpbmdDb250ZXh0LmNvbnRleHQs
IGZhbHNlKTsKKyAgICAgICAgaWYgKG1fYmxlZWRBdm9pZGFuY2UgIT0gQmFja2dyb3VuZEJsZWVk
QXZvaWRhbmNlOjpVc2VUcmFuc3BhcmVuY3lMYXllciAmJiBib3hEZWNvcmF0aW9uRGF0YSAmJiBi
b3hEZWNvcmF0aW9uRGF0YS0+aGFzQm9yZGVyUmFkaXVzKCkpIHsKKyAgICAgICAgICAgIHN0YXRl
U2F2ZXIuc2F2ZSgpOworICAgICAgICAgICAgYXV0byBvdXRlckJvcmRlciA9IGJhY2tncm91bmRS
b3VuZGVkUmVjdEFkanVzdGVkRm9yQmxlZWRBdm9pZGFuY2UocGFpbnRpbmdDb250ZXh0KTsKKyAg
ICAgICAgICAgIHBhaW50aW5nQ29udGV4dC5jb250ZXh0LmNsaXBSb3VuZGVkUmVjdChvdXRlckJv
cmRlcik7CisgICAgICAgIH0KKyAgICAKICAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQu
ZmlsbFJlY3QoYm9yZGVyQm94UmVjdCwgc3R5bGUuYmFja2dyb3VuZENvbG9yKCkpOworCiAgICAg
ICAgIGlmIChzdHlsZS5oYXNCYWNrZ3JvdW5kSW1hZ2UoKSkKLSAgICAgICAgICAgIHBhaW50QmFj
a2dyb3VuZEltYWdlcyhib3gsIHBhaW50aW5nQ29udGV4dCk7CisgICAgICAgICAgICBwYWludEJh
Y2tncm91bmRJbWFnZXMocGFpbnRpbmdDb250ZXh0KTsKICAgICB9CiB9CiAKLXZvaWQgQm94RGVj
b3JhdGlvblBhaW50ZXI6OnBhaW50QmFja2dyb3VuZEFuZEJvcmRlcnMoY29uc3QgQm94TW9kZWxC
b3gmIGJveCwgUGFpbnRpbmdDb250ZXh0JiBwYWludGluZ0NvbnRleHQpCitCYWNrZ3JvdW5kQmxl
ZWRBdm9pZGFuY2UgQm94RGVjb3JhdGlvblBhaW50ZXI6OmRldGVybWluZUJhY2tncm91bmRCbGVl
ZEF2b2lkYW5jZShjb25zdCBCb3hNb2RlbEJveCYgYm94LCBQYWludGluZ0NvbnRleHQmIHBhaW50
aW5nQ29udGV4dCkKK3sKKyAgICBpZiAocGFpbnRpbmdDb250ZXh0LmNvbnRleHQucGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm4gQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlOjpOb25l
OworCisgICAgYXV0byYgc3R5bGUgPSBib3guc3R5bGUoKTsKKyAgICBhdXRvKiBib3hEZWNvcmF0
aW9uRGF0YSA9IGJveC5ib3hEZWNvcmF0aW9uRGF0YSgpOworICAgIAorICAgIGF1dG8gaGFzQmFj
a2dyb3VuZEFuZFJvdW5kZWRCb3JkZXIgPSBbJl0geworICAgICAgICBpZiAoIWJveERlY29yYXRp
b25EYXRhKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIEZJWE1FOiBD
b25zdWx0IGJvcmRlci1pbWFnZS4KKyAgICAgICAgcmV0dXJuIHN0eWxlLmhhc0JhY2tncm91bmQo
KSAmJiBib3hEZWNvcmF0aW9uRGF0YS0+aGFzQm9yZGVyKCkgJiYgYm94RGVjb3JhdGlvbkRhdGEt
Pmhhc0JvcmRlclJhZGl1cygpOworICAgIH07CisKKyAgICBpZiAoIWhhc0JhY2tncm91bmRBbmRS
b3VuZGVkQm9yZGVyKCkpCisgICAgICAgIHJldHVybiBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2U6
Ok5vbmU7CisKKyAgICBhdXRvIGN0bSA9IHBhaW50aW5nQ29udGV4dC5jb250ZXh0LmdldENUTSgp
OworICAgIGF1dG8gY29udGV4dFNjYWxpbmcgPSBGbG9hdFNpemUgeyBzdGF0aWNfY2FzdDxmbG9h
dD4oY3RtLnhTY2FsZSgpKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGN0bS55U2NhbGUoKSkgfTsKKyAg
ICBpZiAoYm94RGVjb3JhdGlvbkRhdGEtPmJvcmRlck9ic2N1cmVzQmFja2dyb3VuZEVkZ2UoY29u
dGV4dFNjYWxpbmcpKQorICAgICAgICByZXR1cm4gQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlOjpT
aHJpbmtCYWNrZ3JvdW5kOworCisgICAgaWYgKGJveERlY29yYXRpb25EYXRhLT5ib3JkZXJPYnNj
dXJlc0JhY2tncm91bmQoKSAmJiBzdHlsZS5iYWNrZ3JvdW5kSGFzT3BhcXVlVG9wTGF5ZXIoKSkK
KyAgICAgICAgcmV0dXJuIEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZTo6QmFja2dyb3VuZE92ZXJC
b3JkZXI7CisKKyAgICByZXR1cm4gQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlOjpVc2VUcmFuc3Bh
cmVuY3lMYXllcjsKK30KKwordm9pZCBCb3hEZWNvcmF0aW9uUGFpbnRlcjo6cGFpbnRCYWNrZ3Jv
dW5kQW5kQm9yZGVycyhQYWludGluZ0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCkgY29uc3QKIHsK
ICAgICAvLyBGSVhNRTogVGFibGUgZGVjb3JhdGlvbiBwYWludGluZyBpcyBzcGVjaWFsLgotICAg
IEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJhY2tncm91bmQoYm94LCBwYWludGluZ0NvbnRl
eHQpOwotICAgIEJveERlY29yYXRpb25QYWludGVyOjpwYWludEJvcmRlcnMoYm94LCBwYWludGlu
Z0NvbnRleHQpOworICAgIAorICAgIHN3aXRjaCAobV9ibGVlZEF2b2lkYW5jZSkgeworICAgIGNh
c2UgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlOjpCYWNrZ3JvdW5kT3ZlckJvcmRlcjoKKyAgICAg
ICAgcGFpbnRCb3JkZXJzKHBhaW50aW5nQ29udGV4dCk7CisgICAgICAgIHBhaW50QmFja2dyb3Vu
ZChwYWludGluZ0NvbnRleHQpOworICAgICAgICBicmVhazsKIAorICAgIGNhc2UgQmFja2dyb3Vu
ZEJsZWVkQXZvaWRhbmNlOjpVc2VUcmFuc3BhcmVuY3lMYXllcjogeworICAgICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIocGFpbnRpbmdDb250ZXh0LmNvbnRleHQpOwor
ICAgICAgICBhdXRvIG91dGVyQm9yZGVyID0gYm9yZGVyUm91bmRlZFJlY3QoKTsKKyAgICAgICAg
cGFpbnRpbmdDb250ZXh0LmNvbnRleHQuY2xpcFJvdW5kZWRSZWN0KG91dGVyQm9yZGVyKTsKKyAg
ICAgICAgcGFpbnRpbmdDb250ZXh0LmNvbnRleHQuYmVnaW5UcmFuc3BhcmVuY3lMYXllcigxKTsK
KworICAgICAgICBwYWludEJhY2tncm91bmQocGFpbnRpbmdDb250ZXh0KTsKKyAgICAgICAgcGFp
bnRCb3JkZXJzKHBhaW50aW5nQ29udGV4dCk7CisKKyAgICAgICAgcGFpbnRpbmdDb250ZXh0LmNv
bnRleHQuZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IAorICAgIGNhc2UgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlOjpTaHJpbmtCYWNrZ3JvdW5kOgor
ICAgIGNhc2UgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlOjpOb25lOgorICAgICAgICBwYWludEJh
Y2tncm91bmQocGFpbnRpbmdDb250ZXh0KTsKKyAgICAgICAgcGFpbnRCb3JkZXJzKHBhaW50aW5n
Q29udGV4dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgRGlz
cGxheQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveERl
Y29yYXRpb25QYWludGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94
RGVjb3JhdGlvblBhaW50ZXIuaAppbmRleCBiNTdmNjQ3ZWMwMjFiM2RhZWNmMjg3YzMxN2MyOGY4
MTIwNmY5NjRhLi5kZTI5NjUzZWY4YzdjOGM5ZDAzMTc3YjljZjFlZmQ5ZWYxOWMyYWUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3JhdGlvblBh
aW50ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNwbGF5Qm94RGVjb3Jh
dGlvblBhaW50ZXIuaApAQCAtMjcsMjMgKzI3LDU4IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZP
Uk1BVFRJTkdfQ09OVEVYVCkKIAorI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGaWxsTGF5ZXI7CiBjbGFzcyBHcmFwaGljc0NvbnRl
eHQ7CiAKIG5hbWVzcGFjZSBEaXNwbGF5IHsKIAogY2xhc3MgQm94TW9kZWxCb3g7CitjbGFzcyBG
aWxsTGF5ZXJJbWFnZUdlb21ldHJ5Owogc3RydWN0IFBhaW50aW5nQ29udGV4dDsKK2VudW0gY2xh
c3MgQmFja2dyb3VuZEJsZWVkQXZvaWRhbmNlOworCitlbnVtIGNsYXNzIEJhY2tncm91bmRCbGVl
ZEF2b2lkYW5jZSB7CisgICAgTm9uZSwKKyAgICBTaHJpbmtCYWNrZ3JvdW5kLAorICAgIFVzZVRy
YW5zcGFyZW5jeUxheWVyLAorICAgIEJhY2tncm91bmRPdmVyQm9yZGVyCit9OwogCiBjbGFzcyBC
b3hEZWNvcmF0aW9uUGFpbnRlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQgcGFpbnRCYWNr
Z3JvdW5kQW5kQm9yZGVycyhjb25zdCBCb3hNb2RlbEJveCYsIFBhaW50aW5nQ29udGV4dCYpOwor
ICAgIEJveERlY29yYXRpb25QYWludGVyKGNvbnN0IEJveE1vZGVsQm94JiwgUGFpbnRpbmdDb250
ZXh0JiwgYm9vbCBpbmNsdWRlTGVmdEVkZ2UgPSB0cnVlLCBib29sIGluY2x1ZGVSaWdodEVkZ2Ug
PSB0cnVlKTsKKyAgICB2b2lkIHBhaW50QmFja2dyb3VuZEFuZEJvcmRlcnMoUGFpbnRpbmdDb250
ZXh0JikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgcGFpbnRCb3JkZXJzKGNv
bnN0IEJveE1vZGVsQm94JiwgUGFpbnRpbmdDb250ZXh0JiwgYm9vbCBpbmNsdWRlTGVmdEVkZ2Ug
PSB0cnVlLCBib29sIGluY2x1ZGVSaWdodEVkZ2UgPSB0cnVlKTsKLSAgICBzdGF0aWMgdm9pZCBw
YWludEJhY2tncm91bmQoY29uc3QgQm94TW9kZWxCb3gmLCBQYWludGluZ0NvbnRleHQmKTsKLSAg
ICBzdGF0aWMgdm9pZCBwYWludEJhY2tncm91bmRJbWFnZXMoY29uc3QgQm94TW9kZWxCb3gmLCBQ
YWludGluZ0NvbnRleHQmKTsKKyAgICBmcmllbmQgY2xhc3MgQm9yZGVyUGFpbnRlcjsKKworICAg
IHN0YXRpYyBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UgZGV0ZXJtaW5lQmFja2dyb3VuZEJsZWVk
QXZvaWRhbmNlKGNvbnN0IEJveE1vZGVsQm94JiwgUGFpbnRpbmdDb250ZXh0Jik7CisgICAgc3Rh
dGljIEZsb2F0Um91bmRlZFJlY3QgY29tcHV0ZUJvcmRlclJlY3QoY29uc3QgQm94TW9kZWxCb3gm
KTsKKworICAgIHZvaWQgY29tcHV0ZUJvcmRlclJlY3QoKTsKKworICAgIHZvaWQgcGFpbnRCb3Jk
ZXJzKFBhaW50aW5nQ29udGV4dCYpIGNvbnN0OworICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kKFBh
aW50aW5nQ29udGV4dCYpIGNvbnN0OworICAgIHZvaWQgcGFpbnRCYWNrZ3JvdW5kSW1hZ2VzKFBh
aW50aW5nQ29udGV4dCYpIGNvbnN0OworCisgICAgdm9pZCBwYWludEZpbGxMYXllcihQYWludGlu
Z0NvbnRleHQmLCBjb25zdCBGaWxsTGF5ZXImLCBjb25zdCBGaWxsTGF5ZXJJbWFnZUdlb21ldHJ5
JikgY29uc3Q7CisgICAgCisgICAgRmxvYXRSb3VuZGVkUmVjdCBib3JkZXJSb3VuZGVkUmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fYm9yZGVyUmVjdDsgfQorICAgIAorICAgIEZsb2F0Um91bmRlZFJl
Y3QgYmFja2dyb3VuZFJvdW5kZWRSZWN0QWRqdXN0ZWRGb3JCbGVlZEF2b2lkYW5jZShjb25zdCBQ
YWludGluZ0NvbnRleHQmKSBjb25zdDsKKworICAgIGJvb2wgaW5jbHVkZUxlZnRFZGdlKCkgY29u
c3QgeyByZXR1cm4gbV9pbmNsdWRlTGVmdEVkZ2U7IH0KKyAgICBib29sIGluY2x1ZGVSaWdodEVk
Z2UoKSBjb25zdCB7IHJldHVybiBtX2luY2x1ZGVSaWdodEVkZ2U7IH0KKworICAgIGNvbnN0IEJv
eE1vZGVsQm94JiBtX2JveDsKKyAgICBjb25zdCBGbG9hdFJvdW5kZWRSZWN0IG1fYm9yZGVyUmVj
dDsKKyAgICBjb25zdCBCYWNrZ3JvdW5kQmxlZWRBdm9pZGFuY2UgbV9ibGVlZEF2b2lkYW5jZSB7
IEJhY2tncm91bmRCbGVlZEF2b2lkYW5jZTo6Tm9uZSB9OworICAgIGJvb2wgbV9pbmNsdWRlTGVm
dEVkZ2UgeyB0cnVlIH07CisgICAgYm9vbCBtX2luY2x1ZGVSaWdodEVkZ2UgeyB0cnVlIH07CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBEaXNwbGF5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
aXNwbGF5L2Nzcy9EaXNwbGF5Qm94UGFpbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5
L2Nzcy9EaXNwbGF5Qm94UGFpbnRlci5jcHAKaW5kZXggMWFmZGMzYzQ4NjdjNTc3YzBiYzZjNTc0
YzE3ZDJjY2QwZDdmMjk4MS4uYjA2ZWUwM2M1MTZiZTUwYzNmNjViZmFlNzBkMTAyOGY0Yjg5NzQ0
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheUJveFBhaW50
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlCb3hQYWludGVy
LmNwcApAQCAtNDksNyArNDksOCBAQCBuYW1lc3BhY2UgRGlzcGxheSB7CiAKIHZvaWQgQm94UGFp
bnRlcjo6cGFpbnRCb3hEZWNvcmF0aW9ucyhjb25zdCBCb3hNb2RlbEJveCYgYm94LCBQYWludGlu
Z0NvbnRleHQmIHBhaW50aW5nQ29udGV4dCkKIHsKLSAgICBCb3hEZWNvcmF0aW9uUGFpbnRlcjo6
cGFpbnRCYWNrZ3JvdW5kQW5kQm9yZGVycyhib3gsIHBhaW50aW5nQ29udGV4dCk7CisgICAgQm94
RGVjb3JhdGlvblBhaW50ZXIgcGFpbnRlcihib3gsIHBhaW50aW5nQ29udGV4dCk7CisgICAgcGFp
bnRlci5wYWludEJhY2tncm91bmRBbmRCb3JkZXJzKHBhaW50aW5nQ29udGV4dCk7CiB9CiAKIHZv
aWQgQm94UGFpbnRlcjo6cGFpbnRCb3hDb250ZW50KGNvbnN0IEJveCYgYm94LCBQYWludGluZ0Nv
bnRleHQmIHBhaW50aW5nQ29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rpc3Bs
YXkvY3NzL0Rpc3BsYXlTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kaXNwbGF5L2Nzcy9EaXNw
bGF5U3R5bGUuY3BwCmluZGV4IDQ2NmMzZDM1ZTdhMzc3YzMwNGJlMTMzYzUyNjQ2MjA0OWJiMWIw
MTMuLjEzNGVhZTg0YWMyMjllNzk4M2EyMjU3MzA3NmJlOGZlMzVmMTAwNjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlTdHlsZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmNwcApAQCAtODQsNiArODQsMjcgQEAg
Ym9vbCBTdHlsZTo6aGFzQmFja2dyb3VuZEltYWdlKCkgY29uc3QKICAgICByZXR1cm4gbV9iYWNr
Z3JvdW5kTGF5ZXJzICYmIG1fYmFja2dyb3VuZExheWVycy0+aGFzSW1hZ2UoKTsKIH0KIAorYm9v
bCBTdHlsZTo6YmFja2dyb3VuZEhhc09wYXF1ZVRvcExheWVyKCkgY29uc3QKK3sKKyAgICBhdXRv
KiBmaWxsTGF5ZXIgPSBiYWNrZ3JvdW5kTGF5ZXJzKCk7CisgICAgaWYgKCFmaWxsTGF5ZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChmaWxsTGF5ZXItPmNsaXAoKSAhPSBGaWxs
Qm94OjpCb3JkZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBDaGVj
ayBmb3Igb3ZlcmZsb3cgY2xpcCBhbmQgbG9jYWwgYXR0YWNobWVudC4KKyAgICAvLyBGSVhNRTog
Q2hlY2sgZm9yIHJlcGVhdGVkLCBvcGFxdWUgYW5kIHJlbmRlcmFibGUgaW1hZ2UuCisKKyAgICAv
LyBJZiB0aGVyZSBpcyBvbmx5IG9uZSBsYXllciBhbmQgbm8gaW1hZ2UsIGNoZWNrIHdoZXRoZXIg
dGhlIGJhY2tncm91bmQgY29sb3IgaXMgb3BhcXVlLgorICAgIGlmICghZmlsbExheWVyLT5uZXh0
KCkgJiYgIWZpbGxMYXllci0+aGFzSW1hZ2UoKSkgeworICAgICAgICBpZiAoYmFja2dyb3VuZENv
bG9yKCkuaXNPcGFxdWUoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHJldHVybiBmYWxzZTsKK30KKwogYm9vbCBTdHlsZTo6YXV0b1dyYXAoKSBjb25zdAogewogICAg
IHJldHVybiBSZW5kZXJTdHlsZTo6YXV0b1dyYXAod2hpdGVTcGFjZSgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Rpc3BsYXkvY3NzL0Rpc3BsYXlTdHlsZS5oIGIvU291cmNlL1dlYkNv
cmUvZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmgKaW5kZXggOTczMDgyYTA0NDg1MDhkYmRiNDc0
ZDZmMmJkMTU0NDRkNzE3N2RmZC4uMTVmNDU1NTIxZjRmMTIxZmY5NjY5NDFhNTM0MGQwMmI0NzNm
ZTBhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheVN0eWxl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZGlzcGxheS9jc3MvRGlzcGxheVN0eWxlLmgKQEAgLTY2
LDYgKzY2LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzQmFja2dyb3VuZEltYWdlKCkgY29uc3Q7
CiAKICAgICBjb25zdCBGaWxsTGF5ZXIqIGJhY2tncm91bmRMYXllcnMoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tncm91bmRMYXllcnMuZ2V0KCk7IH0KKyAgICBib29sIGJhY2tncm91bmRIYXNPcGFx
dWVUb3BMYXllcigpIGNvbnN0OwogCiAgICAgT3B0aW9uYWw8aW50PiB6SW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX3pJbmRleDsgfQogICAgIGJvb2wgaXNTdGFja2luZ0NvbnRleHQoKSBjb25zdCB7
IHJldHVybiBtX3pJbmRleC5oYXNWYWx1ZSgpOyB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>