<?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>141844</bug_id>
          
          <creation_ts>2015-02-20 12:22:24 -0800</creation_ts>
          <short_desc>Remove TCMalloc</short_desc>
          <delta_ts>2015-02-20 14:28:35 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>kling</cc>
    
    <cc>mhahnenb</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1070768</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-02-20 12:22:24 -0800</bug_when>
    <thetext>Remove TCMalloc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070769</commentid>
    <comment_count>1</comment_count>
      <attachid>246984</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-02-20 12:23:22 -0800</bug_when>
    <thetext>Created attachment 246984
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070815</commentid>
    <comment_count>2</comment_count>
      <attachid>246984</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-02-20 13:55:57 -0800</bug_when>
    <thetext>Comment on attachment 246984
Patch

Dude.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070818</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Hahnenberg">mhahnenb</who>
    <bug_when>2015-02-20 13:59:12 -0800</bug_when>
    <thetext>Whoah. Blog post about bmalloc soon? :-D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070839</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-02-20 14:28:35 -0800</bug_when>
    <thetext>Committed r180457: &lt;http://trac.webkit.org/changeset/180457&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246984</attachid>
            <date>2015-02-20 12:23:22 -0800</date>
            <delta_ts>2015-02-20 13:55:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141844-20150220122313.patch</filename>
            <type>text/plain</type>
            <size>227398</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxODA0NDQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE3MyBAQAorMjAxNS0wMi0yMCAgR2VvZmZyZXkgR2FyZW4gIDxn
Z2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBUQ01hbGxvYworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxODQ0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSXQncyB1bnVzZWQuCisKKyAgICAg
ICAgKiBXVEYudmN4cHJvai9XVEYudmN4cHJvajoKKyAgICAgICAgKiBXVEYudmN4cHJvai9XVEYu
dmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvRmFzdE1hbGxv
Yy5jcHA6CisgICAgICAgIChXVEY6OkVudHJvcHlTb3VyY2U8ND46OnZhbHVlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6RW50cm9weVNvdXJjZTw4Pjo6dmFsdWUpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjppbnRlcm5hbEVudHJvcHlWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OmZy
ZWVkT2JqZWN0U3RhcnRQb2lzb24pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpmcmVlZE9iamVj
dEVuZFBvaXNvbik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkNsYXNzSW5kZXgpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpIYXJkZW5lZFNMTDo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6SGFyZGVuZWRTTEw6Om51bGwpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpIYXJkZW5l
ZFNMTDo6c2V0VmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpIYXJkZW5lZFNMTDo6dmFs
dWUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpIYXJkZW5lZFNMTDo6b3BlcmF0b3IhKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6SGFyZGVuZWRTTEw6Om9wZXJhdG9yIFVuc3BlY2lmaWVkQm9v
bFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpIYXJkZW5lZFNMTDo6b3BlcmF0b3IhPSk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkhhcmRlbmVkU0xMOjpvcGVyYXRvcj09KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6TGdGbG9vcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlNMTF9O
ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U0xMX1NldE5leHQpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpTTExfUHVzaCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlNMTF9Qb3ApOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpTTExfUG9wUmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpTTExfUHVzaFJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U2l6ZUNsYXNzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6Qnl0ZVNpemVGb3JDbGFzcyk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6Ok51bU1vdmVTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SW5pdFNpemVD
bGFzc2VzKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWV0YURhdGFBbGxvYyk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6OlBhZ2VIZWFwQWxsb2NhdG9yOjpJbml0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6UGFnZUhlYXBBbGxvY2F0b3I6Ok5ldyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OlBhZ2VIZWFwQWxsb2NhdG9yOjpEZWxldGUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpQYWdl
SGVhcEFsbG9jYXRvcjo6aW51c2UpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpwYWdlcyk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OkFsbG9jYXRpb25TaXplKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6c3BhbkluaXRpYWxpemVyQ29va2llKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U3Bh
bjo6bmV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlNwYW46OnJlbW90ZU5leHQpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpTcGFuOjpwcmV2KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
U3Bhbjo6c2V0TmV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlNwYW46OnNldFByZXYpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpTcGFuOjppbml0Q29va2llKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6U3Bhbjo6Y2xlYXJDb29raWUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTcGFu
Ojppc1ZhbGlkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6RXZlbnQpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpOZXdTcGFuKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6RGVsZXRlU3Bhbik6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkRMTF9Jbml0KTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6RExMX1JlbW92ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkRMTF9Jc0VtcHR5KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6RExMX0xlbmd0aCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OkRMTF9QcmludCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkRMTF9QcmVwZW5kKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6bGVuZ3RoKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6dGNfbGVuZ3Ro
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6ZW51
bWVyYXRlRnJlZU9iamVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUQ01hbGxvY19DZW50
cmFsX0ZyZWVMaXN0OjplbnRyb3B5KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6RmFzdE1hbGxv
Y1pvbmU6Omdvb2RTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6RmFzdE1hbGxvY1pvbmU6
OmNoZWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6RmFzdE1hbGxvY1pvbmU6OnByaW50KTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6RmFzdE1hbGxvY1pvbmU6OmxvZyk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6OkZhc3RNYWxsb2Nab25lOjpmb3JjZUxvY2spOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpGYXN0TWFsbG9jWm9uZTo6Zm9yY2VVbmxvY2spOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpGYXN0TWFsbG9jWm9uZTo6c3RhdGlzdGljcyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6
OkZhc3RNYWxsb2Nab25lOjp6b25lVmFsbG9jKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6RmFz
dE1hbGxvY1pvbmU6OnpvbmVEZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9j
SG9vazo6cmVjb3JkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6TWFsbG9jSG9vazo6cmVjb3Jk
QWxsb2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1hbGxvY0hvb2s6OnJlY29yZERl
YWxsb2NhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6Ok1hbGxvY0hvb2s6OmluaXQpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6TWFsbG9jSG9vazo6SW52b2tlRGVsZXRlSG9vayk6IERlbGV0ZWQu
CisgICAgICAgIChXVEY6Oktlcm5lbFN1cHBvcnRzVExTKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6Q2hlY2tJZktlcm5lbFN1cHBvcnRzVExTKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VENN
YWxsb2NfUGFnZUhlYXA6OkdldERlc2NyaXB0b3IpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpU
Q01hbGxvY19QYWdlSGVhcDo6R2V0RGVzY3JpcHRvckVuc3VyZVNhZmUpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY19QYWdlSGVhcDo6U3lzdGVtQnl0ZXMpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY19QYWdlSGVhcDo6RnJlZUJ5dGVzKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6VENNYWxsb2NfUGFnZUhlYXA6OkdldFNpemVDbGFzc0lmQ2FjaGVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6VENNYWxsb2NfUGFnZUhlYXA6OkNhY2hlU2l6ZUNsYXNzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6VENNYWxsb2NfUGFnZUhlYXA6OlJlY29yZFNwYW4pOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpUQ01hbGxvY19QYWdlSGVhcDo6aW5pdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6OlRDTWFsbG9jX1BhZ2VIZWFwOjppbml0aWFsaXplU2NhdmVuZ2VyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6VENNYWxsb2NfUGFnZUhlYXA6OmlzU2NhdmVuZ2VyU3VzcGVu
ZGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VENNYWxsb2NfUGFnZUhlYXA6OnNjaGVkdWxl
U2NhdmVuZ2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VENNYWxsb2NfUGFnZUhlYXA6OnJl
c2NoZWR1bGVTY2F2ZW5nZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUQ01hbGxvY19QYWdl
SGVhcDo6c3VzcGVuZFNjYXZlbmdlcik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRDTWFsbG9j
X1BhZ2VIZWFwOjpzY2F2ZW5nZXJUaW1lckZpcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
VENNYWxsb2NfUGFnZUhlYXA6OnJ1blNjYXZlbmdlclRocmVhZCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OlRDTWFsbG9jX1BhZ2VIZWFwOjpzaWduYWxTY2F2ZW5nZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY19QYWdlSGVhcDo6c2NhdmVuZ2UpOiBEZWxldGVkLgorICAgICAg
ICAoV1RGOjpUQ01hbGxvY19QYWdlSGVhcDo6c2hvdWxkU2NhdmVuZ2UpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY19QYWdlSGVhcDo6TmV3KTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6VENNYWxsb2NfUGFnZUhlYXA6OkFsbG9jTGFyZ2UpOiBEZWxldGVkLgorICAgICAgICAoV1RG
OjpUQ01hbGxvY19QYWdlSGVhcDo6U3BsaXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUQ01h
bGxvY19QYWdlSGVhcDo6Q2FydmUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjptZXJnZURlY29t
bWl0dGVkU3RhdGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VENNYWxsb2NfUGFnZUhlYXA6
OkRlbGV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRDTWFsbG9jX1BhZ2VIZWFwOjpJbmNy
ZW1lbnRhbFNjYXZlbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VENNYWxsb2NfUGFnZUhl
YXA6OlJlZ2lzdGVyU2l6ZUNsYXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VENNYWxsb2Nf
UGFnZUhlYXA6OlJldHVybmVkQnl0ZXMpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpQYWdlc1Rv
TUIpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUQ01hbGxvY19QYWdlSGVhcDo6RHVtcCk6IERl
bGV0ZWQuCisgICAgICAgIChXVEY6OlRDTWFsbG9jX1BhZ2VIZWFwOjpHcm93SGVhcCk6IERlbGV0
ZWQuCisgICAgICAgIChXVEY6OlRDTWFsbG9jX1BhZ2VIZWFwOjpDaGVjayk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6OlRDTWFsbG9jX1BhZ2VIZWFwOjpDaGVja0xpc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpUQ01hbGxvY19QYWdlSGVhcDo6UmVsZWFzZUZyZWVMaXN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdURjo6VENNYWxsb2NfUGFnZUhlYXA6OlJlbGVhc2VGcmVlUGFnZXMpOiBEZWxl
dGVkLgorICAgICAgICAoV1RGOjpUQ01hbGxvY19UaHJlYWRDYWNoZV9GcmVlTGlzdDo6SW5pdCk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRDTWFsbG9jX1RocmVhZENhY2hlX0ZyZWVMaXN0Ojps
ZW5ndGgpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUQ01hbGxvY19UaHJlYWRDYWNoZV9GcmVl
TGlzdDo6ZW1wdHkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUQ01hbGxvY19UaHJlYWRDYWNo
ZV9GcmVlTGlzdDo6bG93d2F0ZXJtYXJrKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VENNYWxs
b2NfVGhyZWFkQ2FjaGVfRnJlZUxpc3Q6OmNsZWFyX2xvd3dhdGVybWFyayk6IERlbGV0ZWQuCisg
ICAgICAgIChXVEY6OlRDTWFsbG9jX1RocmVhZENhY2hlX0ZyZWVMaXN0OjpQdXNoKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdURjo6VENNYWxsb2NfVGhyZWFkQ2FjaGVfRnJlZUxpc3Q6OlB1c2hSYW5n
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRDTWFsbG9jX1RocmVhZENhY2hlX0ZyZWVMaXN0
OjpQb3BSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRDTWFsbG9jX1RocmVhZENhY2hl
X0ZyZWVMaXN0OjpQb3ApOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUQ01hbGxvY19UaHJlYWRD
YWNoZV9GcmVlTGlzdDo6VmFsaWRhdGUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUQ01hbGxv
Y19UaHJlYWRDYWNoZV9GcmVlTGlzdDo6ZW51bWVyYXRlRnJlZU9iamVjdHMpOiBEZWxldGVkLgor
ICAgICAgICAoV1RGOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6ZnJlZWxpc3RfbGVuZ3RoKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdURjo6VENNYWxsb2NfVGhyZWFkQ2FjaGU6OlNpemUpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6ZW51bWVyYXRlRnJlZU9iamVj
dHMpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpnZXRQYWdlSGVhcCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVEY6OmZhc3RNYWxsb2NHb29kU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRD
TWFsbG9jX1BhZ2VIZWFwOjpwZXJpb2RpY1NjYXZlbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Rjo6VENNYWxsb2NfUGFnZUhlYXA6OnNjYXZlbmdlclRocmVhZCk6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OnNldFRocmVhZEhlYXApOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUQ01hbGxvY19D
ZW50cmFsX0ZyZWVMaXN0OjpJbml0KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VENNYWxsb2Nf
Q2VudHJhbF9GcmVlTGlzdDo6UmVsZWFzZUxpc3RUb1NwYW5zKTogRGVsZXRlZC4KKyAgICAgICAg
KFdURjo6VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UmVsZWFzZVRvU3BhbnMpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0OjpFdmljdFJhbmRvbVNp
emVDbGFzcyk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRDTWFsbG9jX0NlbnRyYWxfRnJlZUxp
c3Q6Ok1ha2VDYWNoZVNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VENNYWxsb2NfQ2Vu
dHJhbF9GcmVlTGlzdDo6U2hyaW5rQ2FjaGUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUQ01h
bGxvY19DZW50cmFsX0ZyZWVMaXN0OjpJbnNlcnRSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OlRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6OlJlbW92ZVJhbmdlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdURjo6VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6RmV0Y2hGcm9tU3BhbnNTYWZl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6RmV0
Y2hGcm9tU3BhbnMpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUQ01hbGxvY19DZW50cmFsX0Zy
ZWVMaXN0OjpQb3B1bGF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRDTWFsbG9jX1RocmVh
ZENhY2hlOjpTYW1wbGVBbGxvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VENNYWxs
b2NfVGhyZWFkQ2FjaGU6OkluaXQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUQ01hbGxvY19U
aHJlYWRDYWNoZTo6Q2xlYW51cCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRDTWFsbG9jX1Ro
cmVhZENhY2hlOjpBbGxvY2F0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRDTWFsbG9jX1Ro
cmVhZENhY2hlOjpEZWFsbG9jYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6VENNYWxsb2Nf
VGhyZWFkQ2FjaGU6OkZldGNoRnJvbUNlbnRyYWxDYWNoZSk6IERlbGV0ZWQuCisgICAgICAgIChX
VEY6OlRDTWFsbG9jX1RocmVhZENhY2hlOjpSZWxlYXNlVG9DZW50cmFsQ2FjaGUpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6U2NhdmVuZ2UpOiBEZWxldGVk
LgorICAgICAgICAoV1RGOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6UGlja05leHRTYW1wbGUpOiBE
ZWxldGVkLgorICAgICAgICAoV1RGOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5pdE1vZHVsZSk6
IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRDTWFsbG9jX1RocmVhZENhY2hlOjpOZXdIZWFwKTog
RGVsZXRlZC4KKyAgICAgICAgKFdURjo6VENNYWxsb2NfVGhyZWFkQ2FjaGU6OkdldFRocmVhZEhl
YXApOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6R2V0Q2Fj
aGUpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUQ01hbGxvY19UaHJlYWRDYWNoZTo6R2V0Q2Fj
aGVJZlByZXNlbnQpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpUQ01hbGxvY19UaHJlYWRDYWNo
ZTo6SW5pdFRTRCk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlRDTWFsbG9jX1RocmVhZENhY2hl
OjpDcmVhdGVDYWNoZUlmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvVENQYWNr
ZWRDYWNoZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHd0Zi9UQ1BhZ2VNYXAuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiB3dGYvVENTeXN0ZW1BbGxvYy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd3Rm
L1RDU3lzdGVtQWxsb2MuaDogUmVtb3ZlZC4KKwogMjAxNS0wMi0yMCAgQWxleGV5IFByb3NrdXJ5
YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgc3ZuOmtleXdvcmRzIHByb3Bl
cnR5LgpJbmRleDogU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCShyZXZpc2lvbiAxODA0MjMp
CisrKyBTb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjgsNyArMTI4LDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxTaXplTGlt
aXRzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxTdGFja0JvdW5kcy5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcU3RyaW5nUHJpbnRTdHJlYW0u
Y3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXFRDU3lzdGVtQWxsb2MuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXHRleHRcQXRvbWljU3RyaW5nLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0Zlx0ZXh0XEF0b21pY1N0cmluZ1Rh
YmxlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0Zlx0ZXh0XEJhc2U2NC5j
cHAiIC8+CkBAIC0yNzksMTAgKzI3OCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3
dGZcU3RyaW5nRXh0cmFzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcU3Ry
aW5nSGFzaGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcU3RyaW5nUHJp
bnRTdHJlYW0uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxUQ1BhY2tlZENh
Y2hlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcVENQYWdlTWFwLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcVENTcGluTG9jay5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFRDU3lzdGVtQWxsb2MuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHd0ZlxUZW1wb3JhcnlDaGFuZ2UuaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHd0Zlx0ZXh0XEFTQ0lJRmFzdFBhdGguaCIgLz4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHd0Zlx0ZXh0XEF0b21pY1N0cmluZy5oIiAvPgpJbmRleDogU291cmNlL1dU
Ri9XVEYudmN4cHJvai9XVEYudmN4cHJvai5maWx0ZXJzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTgwNDIzKQorKysg
U291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDEsOSArMjAxLDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxTdHJp
bmdQcmludFN0cmVhbS5jcHAiPgogICAgICAgPEZpbHRlcj53dGY8L0ZpbHRlcj4KICAgICA8L0Ns
Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxUQ1N5c3RlbUFsbG9jLmNw
cCI+Ci0gICAgICA8RmlsdGVyPnd0ZjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXFRocmVhZGluZy5jcHAiPgogICAgICAgPEZpbHRlcj53
dGY8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTYzMywxOCArNjMwLDkgQEAKICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxTdHJpbmdQcmludFN0cmVhbS5oIj4KICAgICAgIDxG
aWx0ZXI+d3RmPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlx3dGZcVENQYWNrZWRDYWNoZS5oIj4KLSAgICAgIDxGaWx0ZXI+d3RmPC9GaWx0ZXI+
Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcVENQYWdl
TWFwLmgiPgotICAgICAgPEZpbHRlcj53dGY8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxUQ1NwaW5Mb2NrLmgiPgogICAgICAgPEZpbHRl
cj53dGY8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHd0ZlxUQ1N5c3RlbUFsbG9jLmgiPgotICAgICAgPEZpbHRlcj53dGY8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxUZW1wb3JhcnlD
aGFuZ2UuaCI+CiAgICAgICA8RmlsdGVyPnd0ZjwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpJ
bmRleDogU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAx
ODA0MjMpCisrKyBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjQsMTEgKzIyNCw3IEBACiAJCUE4QTQ3NDJBMTUxQTgyNUIwMDQxMjNG
RiAvKiBTdGRMaWJFeHRyYXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4QTQ3MzExMTUxQTgyNUIwMDQxMjNGRiAvKiBTdGRMaWJFeHRyYXMuaCAqLzsg
fTsKIAkJQThBNDc0MkMxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0V4dHJhcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDczMTMxNTFBODI1QjAw
NDEyM0ZGIC8qIFN0cmluZ0V4dHJhcy5oICovOyB9OwogCQlBOEE0NzQyRDE1MUE4MjVCMDA0MTIz
RkYgLyogU3RyaW5nSGFzaGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOEE0NzMxNDE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSGFzaGVyLmggKi87
IH07Ci0JCUE4QTQ3NDJFMTUxQTgyNUIwMDQxMjNGRiAvKiBUQ1BhY2tlZENhY2hlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMxNTE1MUE4MjVC
MDA0MTIzRkYgLyogVENQYWNrZWRDYWNoZS5oICovOyB9OwotCQlBOEE0NzQyRjE1MUE4MjVCMDA0
MTIzRkYgLyogVENQYWdlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBOEE0NzMxNjE1MUE4MjVCMDA0MTIzRkYgLyogVENQYWdlTWFwLmggKi87IH07
CiAJCUE4QTQ3NDMwMTUxQTgyNUIwMDQxMjNGRiAvKiBUQ1NwaW5Mb2NrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMxNzE1MUE4MjVCMDA0MTIz
RkYgLyogVENTcGluTG9jay5oICovOyB9OwotCQlBOEE0NzQzMTE1MUE4MjVCMDA0MTIzRkYgLyog
VENTeXN0ZW1BbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOEE0NzMxODE1MUE4MjVCMDA0MTIzRkYgLyogVENTeXN0ZW1BbGxvYy5jcHAgKi87
IH07Ci0JCUE4QTQ3NDMyMTUxQTgyNUIwMDQxMjNGRiAvKiBUQ1N5c3RlbUFsbG9jLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMxOTE1MUE4MjVC
MDA0MTIzRkYgLyogVENTeXN0ZW1BbGxvYy5oICovOyB9OwogCQlBOEE0NzQzMzE1MUE4MjVCMDA0
MTIzRkYgLyogVGVtcG9yYXJ5Q2hhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMxQTE1MUE4MjVCMDA0MTIzRkYgLyogVGVtcG9yYXJ5Q2hh
bmdlLmggKi87IH07CiAJCUE4QTQ3NDM0MTUxQTgyNUIwMDQxMjNGRiAvKiBBU0NJSUZhc3RQYXRo
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzMx
QzE1MUE4MjVCMDA0MTIzRkYgLyogQVNDSUlGYXN0UGF0aC5oICovOyB9OwogCQlBOEE0NzQzNTE1
MUE4MjVCMDA0MTIzRkYgLyogQXRvbWljU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3MzFEMTUxQTgyNUIwMDQxMjNGRiAvKiBBdG9t
aWNTdHJpbmcuY3BwICovOyB9OwpAQCAtNTIzLDExICs1MTksNyBAQAogCQlBOEE0NzMxMTE1MUE4
MjVCMDA0MTIzRkYgLyogU3RkTGliRXh0cmFzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN0ZExpYkV4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0
NzMxMzE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nRXh0cmFzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFN0cmluZ0V4dHJhcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBOEE0NzMxNDE1MUE4MjVCMDA0MTIzRkYgLyogU3RyaW5nSGFzaGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmluZ0hhc2hlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlBOEE0NzMxNTE1MUE4MjVCMDA0MTIzRkYgLyogVENQYWNrZWRDYWNoZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUQ1BhY2tlZENhY2hlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3MzE2MTUxQTgyNUIwMDQxMjNGRiAvKiBUQ1Bh
Z2VNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVENQYWdlTWFwLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTQ3MzE3MTUxQTgyNUIwMDQxMjNGRiAvKiBU
Q1NwaW5Mb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRDU3BpbkxvY2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQThBNDczMTgxNTFBODI1QjAwNDEyM0ZG
IC8qIFRDU3lzdGVtQWxsb2MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVENTeXN0ZW1BbGxvYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE4QTQ3
MzE5MTUxQTgyNUIwMDQxMjNGRiAvKiBUQ1N5c3RlbUFsbG9jLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRDU3lzdGVtQWxsb2MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQThBNDczMUExNTFBODI1QjAwNDEyM0ZGIC8qIFRlbXBvcmFyeUNoYW5nZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZW1wb3JhcnlDaGFuZ2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBNDczMUMxNTFBODI1QjAwNDEyM0ZGIC8qIEFTQ0lJRmFz
dFBhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQVNDSUlGYXN0UGF0aC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEE0NzMxRDE1MUE4MjVCMDA0MTIzRkYg
LyogQXRvbWljU3RyaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEF0b21pY1N0cmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04ODAsMTEg
Kzg3Miw3IEBACiAJCQkJQThBNDczMTQxNTFBODI1QjAwNDEyM0ZGIC8qIFN0cmluZ0hhc2hlci5o
ICovLAogCQkJCTBGRERCRkE1MTY2NkRGQTMwMEM1NUZFRiAvKiBTdHJpbmdQcmludFN0cmVhbS5j
cHAgKi8sCiAJCQkJMEZEREJGQTYxNjY2REZBMzAwQzU1RkVGIC8qIFN0cmluZ1ByaW50U3RyZWFt
LmggKi8sCi0JCQkJQThBNDczMTUxNTFBODI1QjAwNDEyM0ZGIC8qIFRDUGFja2VkQ2FjaGUuaCAq
LywKLQkJCQlBOEE0NzMxNjE1MUE4MjVCMDA0MTIzRkYgLyogVENQYWdlTWFwLmggKi8sCiAJCQkJ
QThBNDczMTcxNTFBODI1QjAwNDEyM0ZGIC8qIFRDU3BpbkxvY2suaCAqLywKLQkJCQlBOEE0NzMx
ODE1MUE4MjVCMDA0MTIzRkYgLyogVENTeXN0ZW1BbGxvYy5jcHAgKi8sCi0JCQkJQThBNDczMTkx
NTFBODI1QjAwNDEyM0ZGIC8qIFRDU3lzdGVtQWxsb2MuaCAqLywKIAkJCQlBOEE0NzMxQTE1MUE4
MjVCMDA0MTIzRkYgLyogVGVtcG9yYXJ5Q2hhbmdlLmggKi8sCiAJCQkJQThBNDczMkYxNTFBODI1
QjAwNDEyM0ZGIC8qIFRocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oICovLAogCQkJCUE4QTQ3MzMw
MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmNwcCAqLywK
QEAgLTEyMTQsMTEgKzEyMDIsOCBAQAogCQkJCTBGRERCRkE4MTY2NkRGQTMwMEM1NUZFRiAvKiBT
dHJpbmdQcmludFN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGREU2NTMxOTUzQjIzRDAw
QzQ4RkZBIC8qIE9wdGlvbmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNCODE1MUE4MjVC
MDA0MTIzRkYgLyogc3RydG9kLmggaW4gSGVhZGVycyAqLywKLQkJCQlBOEE0NzQyRTE1MUE4MjVC
MDA0MTIzRkYgLyogVENQYWNrZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQThBNDc0MkYx
NTFBODI1QjAwNDEyM0ZGIC8qIFRDUGFnZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0
MzAxNTFBODI1QjAwNDEyM0ZGIC8qIFRDU3BpbkxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUUx
NTU1NkY2MThBMENDMTgwMDZGNDhGQiAvKiBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmggaW4gSGVh
ZGVycyAqLywKLQkJCQlBOEE0NzQzMjE1MUE4MjVCMDA0MTIzRkYgLyogVENTeXN0ZW1BbGxvYy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODNGQkE5MzIxOURGNDU5NzAwRjMwQURCIC8qIFR5cGVDYXN0
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2RUIxRTAxODdEMEJEMzAwMzAxMjZGIC8qIFN0cmlu
Z1ZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDMzMTUxQTgyNUIwMDQxMjNGRiAvKiBU
ZW1wb3JhcnlDaGFuZ2UuaCBpbiBIZWFkZXJzICovLApAQCAtMTQxNCw3ICsxMzk5LDYgQEAKIAkJ
CQk5MzkzNEJENTE4QTFGMTY5MDBEMEQ2QTEgLyogU3RyaW5nVmlld0NGLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTkzOTM0QkQzMThBMUU4QzMwMEQwRDZBMSAvKiBTdHJpbmdWaWV3T2JqQy5tbSBp
biBTb3VyY2VzICovLAogCQkJCUE4QTQ3M0I3MTUxQTgyNUIwMDQxMjNGRiAvKiBzdHJ0b2QuY2Mg
aW4gU291cmNlcyAqLywKLQkJCQlBOEE0NzQzMTE1MUE4MjVCMDA0MTIzRkYgLyogVENTeXN0ZW1B
bGxvYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0ODE1MUE4MjVCMDA0MTIzRkYgLyog
VGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUNB
REQ4NDE4ODQ0ODAxMDBEOEI3MUQgLyogRGVwcmVjYXRlZFN5bWJvbHNVc2VkQnlTYWZhcmkubW0g
aW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQ0QTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5n
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4
MDQyMykKKysrIFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC05Nyw4ICs5Nyw2IEBAIHNldChXVEZfSEVBREVSUwogICAgIFN0cmluZ0V4dHJhcy5oCiAgICAg
U3RyaW5nSGFzaGVyLmgKICAgICBTdHJpbmdQcmludFN0cmVhbS5oCi0gICAgVENQYWNrZWRDYWNo
ZS5oCi0gICAgVENQYWdlTWFwLmgKICAgICBUQ1NwaW5Mb2NrLmgKICAgICBUaHJlYWRJZGVudGlm
aWVyRGF0YVB0aHJlYWRzLmgKICAgICBUaHJlYWRTYWZlUmVmQ291bnRlZC5oCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9GYXN0TWFsbG9jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9G
YXN0TWFsbG9jLmNwcAkocmV2aXNpb24gMTgwNDIzKQorKysgU291cmNlL1dURi93dGYvRmFzdE1h
bGxvYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzggKzEsMjggQEAKLS8vIENvcHlyaWdodCAo
YykgMjAwNSwgMjAwNywgR29vZ2xlIEluYy4KLS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBD
b3B5cmlnaHQgKEMpIDIwMDUtMjAwOSwgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0vLyAKLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8gbWV0Ogot
Ly8gCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotLy8gY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
Ly8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLS8vIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0vLyAK
LS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLS8vIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotLy8gREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLS8vIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0KLS8vIC0tLQotLy8gQXV0aG9yOiBTYW5qYXkgR2hlbWF3YXQgPG9wZW5zb3VyY2VAZ29vZ2xl
LmNvbT4KLS8vCi0vLyBBIG1hbGxvYyB0aGF0IHVzZXMgYSBwZXItdGhyZWFkIGNhY2hlIHRvIHNh
dGlzZnkgc21hbGwgbWFsbG9jIHJlcXVlc3RzLgotLy8gKFRoZSB0aW1lIGZvciBtYWxsb2MvZnJl
ZSBvZiBhIHNtYWxsIG9iamVjdCBkcm9wcyBmcm9tIDMwMCBucyB0byA1MCBucy4pCi0vLwotLy8g
U2VlIGRvYy90Y21hbGxvYy5odG1sIGZvciBhIGhpZ2gtbGV2ZWwKLS8vIGRlc2NyaXB0aW9uIG9m
IGhvdyB0aGlzIG1hbGxvYyB3b3Jrcy4KLS8vCi0vLyBTWU5DSFJPTklaQVRJT04KLS8vICAxLiBU
aGUgdGhyZWFkLXNwZWNpZmljIGxpc3RzIGFyZSBhY2Nlc3NlZCB3aXRob3V0IGFjcXVpcmluZyBh
bnkgbG9ja3MuCi0vLyAgICAgVGhpcyBpcyBzYWZlIGJlY2F1c2UgZWFjaCBzdWNoIGxpc3QgaXMg
b25seSBhY2Nlc3NlZCBieSBvbmUgdGhyZWFkLgotLy8gIDIuIFdlIGhhdmUgYSBsb2NrIHBlciBj
ZW50cmFsIGZyZWUtbGlzdCwgYW5kIGhvbGQgaXQgd2hpbGUgbWFuaXB1bGF0aW5nCi0vLyAgICAg
dGhlIGNlbnRyYWwgZnJlZSBsaXN0IGZvciBhIHBhcnRpY3VsYXIgc2l6ZS4KLS8vICAzLiBUaGUg
Y2VudHJhbCBwYWdlIGFsbG9jYXRvciBpcyBwcm90ZWN0ZWQgYnkgInBhZ2VoZWFwX2xvY2siLgot
Ly8gIDQuIFRoZSBwYWdlbWFwICh3aGljaCBtYXBzIGZyb20gcGFnZS1udW1iZXIgdG8gZGVzY3Jp
cHRvciksCi0vLyAgICAgY2FuIGJlIHJlYWQgd2l0aG91dCBob2xkaW5nIGFueSBsb2NrcywgYW5k
IHdyaXR0ZW4gd2hpbGUgaG9sZGluZwotLy8gICAgIHRoZSAicGFnZWhlYXBfbG9jayIuCi0vLyAg
NS4gVG8gaW1wcm92ZSBwZXJmb3JtYW5jZSwgYSBzdWJzZXQgb2YgdGhlIGluZm9ybWF0aW9uIG9u
ZSBjYW4gZ2V0Ci0vLyAgICAgZnJvbSB0aGUgcGFnZW1hcCBpcyBjYWNoZWQgaW4gYSBkYXRhIHN0
cnVjdHVyZSwgcGFnZW1hcF9jYWNoZV8sCi0vLyAgICAgdGhhdCBhdG9taWNhbGx5IHJlYWRzIGFu
ZCB3cml0ZXMgaXRzIGVudHJpZXMuICBUaGlzIGNhY2hlIGNhbiBiZQotLy8gICAgIHJlYWQgYW5k
IHdyaXR0ZW4gd2l0aG91dCBsb2NraW5nLgotLy8KLS8vICAgICBUaGlzIG11bHRpLXRocmVhZGVk
IGFjY2VzcyB0byB0aGUgcGFnZW1hcCBpcyBzYWZlIGZvciBmYWlybHkKLS8vICAgICBzdWJ0bGUg
cmVhc29ucy4gIFdlIGJhc2ljYWxseSBhc3N1bWUgdGhhdCB3aGVuIGFuIG9iamVjdCBYIGlzCi0v
LyAgICAgYWxsb2NhdGVkIGJ5IHRocmVhZCBBIGFuZCBkZWFsbG9jYXRlZCBieSB0aHJlYWQgQiwg
dGhlcmUgbXVzdAotLy8gICAgIGhhdmUgYmVlbiBhcHByb3ByaWF0ZSBzeW5jaHJvbml6YXRpb24g
aW4gdGhlIGhhbmRvZmYgb2Ygb2JqZWN0Ci0vLyAgICAgWCBmcm9tIHRocmVhZCBBIHRvIHRocmVh
ZCBCLiAgVGhlIHNhbWUgbG9naWMgYXBwbGllcyB0byBwYWdlbWFwX2NhY2hlXy4KLS8vCi0vLyBU
SEUgUEFHRUlELVRPLVNJWkVDTEFTUyBDQUNIRQotLy8gSG90IFBhZ2VJRC10by1zaXplY2xhc3Mg
bWFwcGluZ3MgYXJlIGhlbGQgYnkgcGFnZW1hcF9jYWNoZV8uICBJZiB0aGlzIGNhY2hlCi0vLyBy
ZXR1cm5zIDAgZm9yIGEgcGFydGljdWxhciBQYWdlSUQgdGhlbiB0aGF0IG1lYW5zICJubyBpbmZv
cm1hdGlvbiwiIG5vdCB0aGF0Ci0vLyB0aGUgc2l6ZWNsYXNzIGlzIDAuICBUaGUgY2FjaGUgbWF5
IGhhdmUgc3RhbGUgaW5mb3JtYXRpb24gZm9yIHBhZ2VzIHRoYXQgZG8KLS8vIG5vdCBob2xkIHRo
ZSBiZWdpbm5pbmcgb2YgYW55IGZyZWUoKSdhYmxlIG9iamVjdC4gIFN0YWxlbmVzcyBpcyBlbGlt
aW5hdGVkCi0vLyBpbiBQb3B1bGF0ZSgpIGZvciBwYWdlcyB3aXRoIHNpemVjbGFzcyA+IDAgb2Jq
ZWN0cywgYW5kIGluIGRvX21hbGxvYygpIGFuZAotLy8gZG9fbWVtYWxpZ24oKSBmb3IgYWxsIG90
aGVyIHJlbGV2YW50IHBhZ2VzLgotLy8KLS8vIFRPRE86IEJpYXMgcmVjbGFtYXRpb24gdG8gbGFy
Z2VyIGFkZHJlc3NlcwotLy8gVE9ETzogaW1wbGVtZW50IG1hbGxpbmZvL21hbGxvcHQKLS8vIFRP
RE86IEJldHRlciB0ZXN0aW5nCi0vLwotLy8gOS8yOC8yMDAzIChuZXcgcGFnZS1sZXZlbCBhbGxv
Y2F0b3IgcmVwbGFjZXMgcHRtYWxsb2MyKToKLS8vICogbWFsbG9jL2ZyZWUgb2Ygc21hbGwgb2Jq
ZWN0cyBnb2VzIGZyb20gfjMwMCBucyB0byB+NTAgbnMuCi0vLyAqIGFsbG9jYXRpb24gb2YgYSBy
ZWFzb25hYmx5IGNvbXBsaWNhdGVkIHN0cnVjdAotLy8gICBnb2VzIGZyb20gYWJvdXQgMTEwMCBu
cyB0byBhYm91dCAzMDAgbnMuCisvLyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcsIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAw
OSwgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJGYXN0TWFsbG9jLmgiCkBAIC05NCwyOCArNDQsNiBAQAogI2luY2x1ZGUgPG1hbGxvYy9t
YWxsb2MuaD4KICNlbmRpZgogCi0jaWZuZGVmIE5PX1RDTUFMTE9DX1NBTVBMRVMKLSNpZmRlZiBX
VEZfQ0hBTkdFUwotI2RlZmluZSBOT19UQ01BTExPQ19TQU1QTEVTCi0jZW5kaWYKLSNlbmRpZgot
Ci0jaWYgUExBVEZPUk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQot
I2RlZmluZSBVU0VfQk1BTExPQyAxCi0jZW5kaWYKLQotI2lmICEoZGVmaW5lZChVU0VfU1lTVEVN
X01BTExPQykgJiYgVVNFX1NZU1RFTV9NQUxMT0MpCi0jZGVmaW5lIEZPUkNFX1NZU1RFTV9NQUxM
T0MgMAotI2Vsc2UKLSNkZWZpbmUgRk9SQ0VfU1lTVEVNX01BTExPQyAxCi0jZW5kaWYKLQotLy8g
SGFyZGVuIHRoZSBwb2ludGVycyBzdG9yZWQgaW4gdGhlIFRDTWFsbG9jIGxpbmtlZCBsaXN0cwot
I2RlZmluZSBFTkFCTEVfVENNQUxMT0NfSEFSREVOSU5HIDEKLQotLy8gVXNlIGEgYmFja2dyb3Vu
ZCB0aHJlYWQgdG8gcGVyaW9kaWNhbGx5IHNjYXZlbmdlIG1lbW9yeSB0byByZWxlYXNlIGJhY2sg
dG8gdGhlIHN5c3RlbQotI2RlZmluZSBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0Vf
TUVNT1JZIDEKLQogbmFtZXNwYWNlIFdURiB7CiAKIHZvaWQqIGZhc3RaZXJvZWRNYWxsb2Moc2l6
ZV90IG4pIApAQCAtMTQ0LDcgKzcyLDcgQEAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFzdFpl
cm9lZE1hbGxvYwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAotI2lmIEZPUkNFX1NZU1RFTV9NQUxM
T0MKKyNpZiBkZWZpbmVkKFVTRV9TWVNURU1fTUFMTE9DKSAmJiBVU0VfU1lTVEVNX01BTExPQwog
CiAjaWYgT1MoV0lORE9XUykKICNpbmNsdWRlIDxtYWxsb2MuaD4KQEAgLTI1OCwxMyArMTg2LDcg
QEAgc2l6ZV90IGZhc3RNYWxsb2NTaXplKGNvbnN0IHZvaWQqIHApCiAKIH0gLy8gbmFtZXNwYWNl
IFdURgogCi0jaWYgT1MoREFSV0lOKQotLy8gVGhpcyBzeW1ib2wgaXMgcHJlc2VudCBpbiB0aGUg
SmF2YVNjcmlwdENvcmUgZXhwb3J0cyBmaWxlIGV2ZW4gd2hlbiBGYXN0TWFsbG9jIGlzIGRpc2Fi
bGVkLgotLy8gSXQgd2lsbCBuZXZlciBiZSB1c2VkIGluIHRoaXMgY2FzZSwgc28gaXQncyB0eXBl
IGFuZCB2YWx1ZSBhcmUgbGVzcyBpbnRlcmVzdGluZyB0aGFuIGl0cyBwcmVzZW5jZS4KLWV4dGVy
biAiQyIgV1RGX0VYUE9SVF9QUklWQVRFIGNvbnN0IGludCBqc2NvcmVfZmFzdG1hbGxvY19pbnRy
b3NwZWN0aW9uID0gMDsKLSNlbmRpZgotCi0jZWxpZiBkZWZpbmVkKFVTRV9CTUFMTE9DKSAmJiBV
U0VfQk1BTExPQyAvLyBGT1JDRV9TWVNURU1fTUFMTE9DCisjZWxzZSAvLyBkZWZpbmVkKFVTRV9T
WVNURU1fTUFMTE9DKSAmJiBVU0VfU1lTVEVNX01BTExPQwogCiAjaW5jbHVkZSA8Ym1hbGxvYy9i
bWFsbG9jLmg+CiAKQEAgLTM2Niw0NjMxICsyODgsNCBAQCBGYXN0TWFsbG9jU3RhdGlzdGljcyBm
YXN0TWFsbG9jU3RhdGlzdGljCiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCi0jZWxzZSAvLyBGT1JD
RV9TWVNURU1fTUFMTE9DCi0KLSNpbmNsdWRlICJUQ1BhY2tlZENhY2hlLmgiCi0jaW5jbHVkZSAi
VENQYWdlTWFwLmgiCi0jaW5jbHVkZSAiVENTcGluTG9jay5oIgotI2luY2x1ZGUgIlRDU3lzdGVt
QWxsb2MuaCIKLSNpbmNsdWRlICJUaHJlYWRTcGVjaWZpYy5oIgotI2luY2x1ZGUgPGFsZ29yaXRo
bT4KLSNpZiBVU0UoUFRIUkVBRFMpCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2VuZGlmCi0jaW5j
bHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+
Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpZiBIQVZFKEVSUk5PX0gpCi0jaW5jbHVkZSA8ZXJybm8u
aD4KLSNlbmRpZgotI2lmIE9TKFVOSVgpCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLSNp
ZiBPUyhXSU5ET1dTKQotI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCi0jZGVmaW5lIFdJTjMy
X0xFQU5fQU5EX01FQU4KLSNlbmRpZgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNlbmRpZgotCi0j
aWZkZWYgV1RGX0NIQU5HRVMKLQotI2lmIE9TKERBUldJTikKLSNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNlbmRpZgotCi0jaWYgSEFWRShESVNQQVRD
SF9IKQotI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+Ci0jZW5kaWYKLQotI2lmIE9TKERB
UldJTikKLSNpZiBkZWZpbmVkKF9faGFzX2luY2x1ZGUpICYmIF9faGFzX2luY2x1ZGUoPFN5c3Rl
bS9wdGhyZWFkX21hY2hkZXAuaD4pCi0jaW5jbHVkZSA8U3lzdGVtL3B0aHJlYWRfbWFjaGRlcC5o
PgotI2VuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19QVEtfRlJBTUVXT1JLX0pBVkFTQ1JJ
UFRDT1JFX0tFWTApCi0jZGVmaW5lIFdURl9VU0VfUFRIUkVBRF9HRVRTUEVDSUZJQ19ESVJFQ1Qg
MQotI2VuZGlmCi0KLSNpZm5kZWYgUFJJdVMKLSNkZWZpbmUgUFJJdVMgInp1IgotI2VuZGlmCi0K
LS8vIENhbGxpbmcgcHRocmVhZF9nZXRzcGVjaWZpYyB0aHJvdWdoIGEgZ2xvYmFsIGZ1bmN0aW9u
IHBvaW50ZXIgaXMgZmFzdGVyIHRoYW4gYSBub3JtYWwKLS8vIGNhbGwgdG8gdGhlIGZ1bmN0aW9u
IG9uIE1hYyBPUyBYLCBhbmQgaXQncyB1c2VkIGluIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGNvZGUu
IFNvIHdlCi0vLyB1c2UgYSBmdW5jdGlvbiBwb2ludGVyLiBCdXQgdGhhdCdzIG5vdCBuZWNlc3Nh
cmlseSBmYXN0ZXIgb24gb3RoZXIgcGxhdGZvcm1zLCBhbmQgd2UgaGFkCi0vLyBwcm9ibGVtcyB3
aXRoIHRoaXMgdGVjaG5pcXVlIG9uIFdpbmRvd3MsIHNvIHdlJ2xsIGRvIHRoaXMgb25seSBvbiBN
YWMgT1MgWC4KLSNpZiBPUyhEQVJXSU4pCi0jaWYgIVVTRShQVEhSRUFEX0dFVFNQRUNJRklDX0RJ
UkVDVCkKLXN0YXRpYyB2b2lkKiAoKnB0aHJlYWRfZ2V0c3BlY2lmaWNfZnVuY3Rpb25fcG9pbnRl
cikocHRocmVhZF9rZXlfdCkgPSBwdGhyZWFkX2dldHNwZWNpZmljOwotI2RlZmluZSBwdGhyZWFk
X2dldHNwZWNpZmljKGtleSkgcHRocmVhZF9nZXRzcGVjaWZpY19mdW5jdGlvbl9wb2ludGVyKGtl
eSkKLSNlbHNlCi0jZGVmaW5lIHB0aHJlYWRfZ2V0c3BlY2lmaWMoa2V5KSBfcHRocmVhZF9nZXRz
cGVjaWZpY19kaXJlY3Qoa2V5KQotI2RlZmluZSBwdGhyZWFkX3NldHNwZWNpZmljKGtleSwgdmFs
KSBfcHRocmVhZF9zZXRzcGVjaWZpY19kaXJlY3Qoa2V5LCAodmFsKSkKLSNlbmRpZgotI2VuZGlm
Ci0KLSNkZWZpbmUgREVGSU5FX1ZBUklBQkxFKHR5cGUsIG5hbWUsIHZhbHVlLCBtZWFuaW5nKSBc
Ci0gIG5hbWVzcGFjZSBGTEFHX19uYW1lc3BhY2VfZG9fbm90X3VzZV9kaXJlY3RseV91c2VfREVD
TEFSRV8jI3R5cGUjI19pbnN0ZWFkIHsgIFwKLSAgdHlwZSBGTEFHU18jI25hbWUodmFsdWUpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBjaGFyIEZMQUdTX25vIyNuYW1lOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICB1c2luZyBGTEFHX19uYW1lc3BhY2VfZG9fbm90X3Vz
ZV9kaXJlY3RseV91c2VfREVDTEFSRV8jI3R5cGUjI19pbnN0ZWFkOjpGTEFHU18jI25hbWUKLSAg
Ci0jZGVmaW5lIERFRklORV9pbnQ2NChuYW1lLCB2YWx1ZSwgbWVhbmluZykgXAotICBERUZJTkVf
VkFSSUFCTEUoaW50NjRfdCwgbmFtZSwgdmFsdWUsIG1lYW5pbmcpCi0gIAotI2RlZmluZSBERUZJ
TkVfZG91YmxlKG5hbWUsIHZhbHVlLCBtZWFuaW5nKSBcCi0gIERFRklORV9WQVJJQUJMRShkb3Vi
bGUsIG5hbWUsIHZhbHVlLCBtZWFuaW5nKQotCi1uYW1lc3BhY2UgV1RGIHsKLQotI2RlZmluZSBt
YWxsb2MgZmFzdE1hbGxvYwotI2RlZmluZSBjYWxsb2MgZmFzdENhbGxvYwotI2RlZmluZSBmcmVl
IGZhc3RGcmVlCi0jZGVmaW5lIHJlYWxsb2MgZmFzdFJlYWxsb2MKLQotI2RlZmluZSBNRVNTQUdF
IExPR19FUlJPUgotI2RlZmluZSBDSEVDS19DT05ESVRJT04gQVNTRVJUCi0KLSNpZiAhT1MoREFS
V0lOKQotc3RhdGljIGNvbnN0IGNoYXIga0xMSGFyZGVuaW5nTWFzayA9IDA7Ci0jZW5kaWYKLQot
dGVtcGxhdGUgPHVuc2lnbmVkPiBzdHJ1Y3QgRW50cm9weVNvdXJjZTsKLXRlbXBsYXRlIDw+IHN0
cnVjdCBFbnRyb3B5U291cmNlPDQ+IHsKLSAgICBzdGF0aWMgdWludDMyX3QgdmFsdWUoKQotICAg
IHsKLSNpZiBPUyhEQVJXSU4pCi0gICAgICAgIHJldHVybiBhcmM0cmFuZG9tKCk7Ci0jZWxzZQot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHN0YXRpY19jYXN0PHVpbnRwdHJf
dD4oY3VycmVudFRpbWUoKSAqIDEwMDAwKSBeIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pigm
a0xMSGFyZGVuaW5nTWFzaykpOwotI2VuZGlmCi0gICAgfQotfTsKLQotdGVtcGxhdGUgPD4gc3Ry
dWN0IEVudHJvcHlTb3VyY2U8OD4gewotICAgIHN0YXRpYyB1aW50NjRfdCB2YWx1ZSgpCi0gICAg
ewotICAgICAgICByZXR1cm4gRW50cm9weVNvdXJjZTw0Pjo6dmFsdWUoKSB8IChzdGF0aWNfY2Fz
dDx1aW50NjRfdD4oRW50cm9weVNvdXJjZTw0Pjo6dmFsdWUoKSkgPDwgMzIpOwotICAgIH0KLX07
Ci0KLSNpZiBFTkFCTEUoVENNQUxMT0NfSEFSREVOSU5HKQotLyoKLSAqIFRvIG1ha2UgaXQgaGFy
ZGVyIHRvIGV4cGxvaXQgdXNlLWFmdGVyIGZyZWUgc3R5bGUgZXhwbG9pdHMKLSAqIHdlIG1hc2sg
dGhlIGFkZHJlc3NlcyB3ZSBwdXQgaW50byBvdXIgbGlua2VkIGxpc3RzIHdpdGggdGhlCi0gKiBh
ZGRyZXNzIG9mIGtMTEhhcmRlbmluZ01hc2suICBEdWUgdG8gQVNMUiB0aGUgYWRkcmVzcyBvZgot
ICoga0xMSGFyZGVuaW5nTWFzayBzaG91bGQgYmUgc3VmZmljaWVudGx5IHJhbmRvbWl6ZWQgdG8g
bWFrZSBkaXJlY3QKLSAqIGZyZWVsaXN0IG1hbmlwdWxhdGlvbiBtdWNoIG1vcmUgZGlmZmljdWx0
LgotICovCi1lbnVtIHsKLSAgICBNYXNrS2V5U2hpZnQgPSAxMwotfTsKLQotc3RhdGljIEFMV0FZ
U19JTkxJTkUgdWludHB0cl90IGludGVybmFsRW50cm9weVZhbHVlKCkgCi17Ci0gICAgc3RhdGlj
IHVpbnRwdHJfdCB2YWx1ZSA9IEVudHJvcHlTb3VyY2U8c2l6ZW9mKHVpbnRwdHJfdCk+Ojp2YWx1
ZSgpIHwgMTsKLSAgICBBU1NFUlQodmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotI2Rl
ZmluZSBIQVJERU5JTkdfRU5UUk9QWSBpbnRlcm5hbEVudHJvcHlWYWx1ZSgpCi0jZGVmaW5lIFJP
VEFURV9WQUxVRSh2YWx1ZSwgYW1vdW50KSAoKCh2YWx1ZSkgPj4gKGFtb3VudCkpIHwgKCh2YWx1
ZSkgPDwgKHNpemVvZih2YWx1ZSkgKiA4IC0gKGFtb3VudCkpKSkKLSNpZiBDT01QSUxFUihNU1ZD
KQotI2RlZmluZSBYT1JfTUFTS19QVFJfV0lUSF9LRVkocHRyLCBrZXksIGVudHJvcHkpIChyZWlu
dGVycHJldF9jYXN0PGRlY2x0eXBlKHB0cik+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihw
dHIpXihST1RBVEVfVkFMVUUocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGtleSksIE1hc2tL
ZXlTaGlmdCleZW50cm9weSkpKQotI2Vsc2UKLSNkZWZpbmUgWE9SX01BU0tfUFRSX1dJVEhfS0VZ
KHB0ciwga2V5LCBlbnRyb3B5KSAocmVpbnRlcnByZXRfY2FzdDxfX3R5cGVvZl9fKHB0cik+KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpXihST1RBVEVfVkFMVUUocmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KGtleSksIE1hc2tLZXlTaGlmdCleZW50cm9weSkpKQotI2VuZGlmCi0K
LXN0YXRpYyBBTFdBWVNfSU5MSU5FIHVpbnQzMl90IGZyZWVkT2JqZWN0U3RhcnRQb2lzb24oKQot
ewotICAgIHN0YXRpYyB1aW50MzJfdCB2YWx1ZSA9IEVudHJvcHlTb3VyY2U8c2l6ZW9mKHVpbnQz
Ml90KT46OnZhbHVlKCkgfCAxOwotICAgIEFTU0VSVCh2YWx1ZSk7Ci0gICAgcmV0dXJuIHZhbHVl
OwotfQotCi1zdGF0aWMgQUxXQVlTX0lOTElORSB1aW50MzJfdCBmcmVlZE9iamVjdEVuZFBvaXNv
bigpCi17Ci0gICAgc3RhdGljIHVpbnQzMl90IHZhbHVlID0gRW50cm9weVNvdXJjZTxzaXplb2Yo
dWludDMyX3QpPjo6dmFsdWUoKSB8IDE7Ci0gICAgQVNTRVJUKHZhbHVlKTsKLSAgICByZXR1cm4g
dmFsdWU7Ci19Ci0KLSNkZWZpbmUgUFRSX1RPX1VJTlQzMihwdHIpIHN0YXRpY19jYXN0PHVpbnQz
Ml90PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocHRyKSkKLSNkZWZpbmUgRU5EX1BPSVNP
Tl9JTkRFWChhbGxvY2F0aW9uU2l6ZSkgKCgoYWxsb2NhdGlvblNpemUpIC0gc2l6ZW9mKHVpbnQz
Ml90KSkgLyBzaXplb2YodWludDMyX3QpKQotI2RlZmluZSBQT0lTT05fQUxMT0NBVElPTihhbGxv
Y2F0aW9uLCBhbGxvY2F0aW9uU2l6ZSkgZG8geyBcCi0gICAgQVNTRVJUKChhbGxvY2F0aW9uU2l6
ZSkgPj0gMiAqIHNpemVvZih1aW50MzJfdCkpOyBcCi0gICAgcmVpbnRlcnByZXRfY2FzdDx1aW50
MzJfdCo+KGFsbG9jYXRpb24pWzBdID0gMHhiYWRiZWVmMTsgXAotICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDMyX3QqPihhbGxvY2F0aW9uKVsxXSA9IDB4YmFkYmVlZjM7IFwKLSAgICBpZiAoKGFs
bG9jYXRpb25TaXplKSA8IDQgKiBzaXplb2YodWludDMyX3QpKSBcCi0gICAgICAgIGJyZWFrOyBc
Ci0gICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGFsbG9jYXRpb24pWzJdID0gMHhiYWRi
ZWVmNTsgXAotICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihhbGxvY2F0aW9uKVtFTkRf
UE9JU09OX0lOREVYKGFsbG9jYXRpb25TaXplKV0gPSAweGJhZGJlZWY3OyBcCi19IHdoaWxlIChm
YWxzZSk7Ci0KLSNkZWZpbmUgUE9JU09OX0RFQUxMT0NBVElPTl9FWFBMSUNJVChhbGxvY2F0aW9u
LCBhbGxvY2F0aW9uU2l6ZSwgc3RhcnRQb2lzb24sIGVuZFBvaXNvbikgZG8geyBcCi0gICAgQVNT
RVJUKChhbGxvY2F0aW9uU2l6ZSkgPj0gMiAqIHNpemVvZih1aW50MzJfdCkpOyBcCi0gICAgcmVp
bnRlcnByZXRfY2FzdF9wdHI8dWludDMyX3QqPihhbGxvY2F0aW9uKVswXSA9IDB4YmFkYmVlZjk7
IFwKLSAgICByZWludGVycHJldF9jYXN0X3B0cjx1aW50MzJfdCo+KGFsbG9jYXRpb24pWzFdID0g
MHhiYWRiZWVmYjsgXAotICAgIGlmICgoYWxsb2NhdGlvblNpemUpIDwgNCAqIHNpemVvZih1aW50
MzJfdCkpIFwKLSAgICAgICAgYnJlYWs7IFwKLSAgICByZWludGVycHJldF9jYXN0X3B0cjx1aW50
MzJfdCo+KGFsbG9jYXRpb24pWzJdID0gKHN0YXJ0UG9pc29uKSBeIFBUUl9UT19VSU5UMzIoYWxs
b2NhdGlvbik7IFwKLSAgICByZWludGVycHJldF9jYXN0X3B0cjx1aW50MzJfdCo+KGFsbG9jYXRp
b24pW0VORF9QT0lTT05fSU5ERVgoYWxsb2NhdGlvblNpemUpXSA9IChlbmRQb2lzb24pIF4gUFRS
X1RPX1VJTlQzMihhbGxvY2F0aW9uKTsgXAotfSB3aGlsZSAoZmFsc2UpCi0KLSNkZWZpbmUgUE9J
U09OX0RFQUxMT0NBVElPTihhbGxvY2F0aW9uLCBhbGxvY2F0aW9uU2l6ZSkgXAotICAgIFBPSVNP
Tl9ERUFMTE9DQVRJT05fRVhQTElDSVQoYWxsb2NhdGlvbiwgKGFsbG9jYXRpb25TaXplKSwgZnJl
ZWRPYmplY3RTdGFydFBvaXNvbigpLCBmcmVlZE9iamVjdEVuZFBvaXNvbigpKQotCi0jZGVmaW5l
IE1BWV9CRV9QT0lTT05FRChhbGxvY2F0aW9uLCBhbGxvY2F0aW9uU2l6ZSkgKCgoYWxsb2NhdGlv
blNpemUpID49IDQgKiBzaXplb2YodWludDMyX3QpKSAmJiAoIFwKLSAgICAocmVpbnRlcnByZXRf
Y2FzdDx1aW50MzJfdCo+KGFsbG9jYXRpb24pWzJdID09IChmcmVlZE9iamVjdFN0YXJ0UG9pc29u
KCkgXiBQVFJfVE9fVUlOVDMyKGFsbG9jYXRpb24pKSkgfHwgXAotICAgIChyZWludGVycHJldF9j
YXN0PHVpbnQzMl90Kj4oYWxsb2NhdGlvbilbRU5EX1BPSVNPTl9JTkRFWChhbGxvY2F0aW9uU2l6
ZSldID09IChmcmVlZE9iamVjdEVuZFBvaXNvbigpIF4gUFRSX1RPX1VJTlQzMihhbGxvY2F0aW9u
KSkpIFwKLSkpCi0KLSNkZWZpbmUgSVNfREVGSU5JVEVMWV9QT0lTT05FRChhbGxvY2F0aW9uLCBh
bGxvY2F0aW9uU2l6ZSkgKCgoYWxsb2NhdGlvblNpemUpIDwgNCAqIHNpemVvZih1aW50MzJfdCkp
IHx8ICggXAotICAgIChyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oYWxsb2NhdGlvbilbMl0g
PT0gKGZyZWVkT2JqZWN0U3RhcnRQb2lzb24oKSBeIFBUUl9UT19VSU5UMzIoYWxsb2NhdGlvbikp
KSAmJiBcCi0gICAgKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihhbGxvY2F0aW9uKVtFTkRf
UE9JU09OX0lOREVYKGFsbG9jYXRpb25TaXplKV0gPT0gKGZyZWVkT2JqZWN0RW5kUG9pc29uKCkg
XiBQVFJfVE9fVUlOVDMyKGFsbG9jYXRpb24pKSkgXAotKSkKLQotI2Vsc2UKLQotI2RlZmluZSBQ
T0lTT05fQUxMT0NBVElPTihhbGxvY2F0aW9uLCBhbGxvY2F0aW9uU2l6ZSkKLSNkZWZpbmUgUE9J
U09OX0RFQUxMT0NBVElPTihhbGxvY2F0aW9uLCBhbGxvY2F0aW9uU2l6ZSkKLSNkZWZpbmUgUE9J
U09OX0RFQUxMT0NBVElPTl9FWFBMSUNJVChhbGxvY2F0aW9uLCBhbGxvY2F0aW9uU2l6ZSwgc3Rh
cnRQb2lzb24sIGVuZFBvaXNvbikKLSNkZWZpbmUgTUFZX0JFX1BPSVNPTkVEKGFsbG9jYXRpb24s
IGFsbG9jYXRpb25TaXplKSAoZmFsc2UpCi0jZGVmaW5lIElTX0RFRklOSVRFTFlfUE9JU09ORUQo
YWxsb2NhdGlvbiwgYWxsb2NhdGlvblNpemUpICh0cnVlKQotI2RlZmluZSBYT1JfTUFTS19QVFJf
V0lUSF9LRVkocHRyLCBrZXksIGVudHJvcHkpICgoKHZvaWQpZW50cm9weSksICgodm9pZClrZXkp
LCBwdHIpCi0KLSNkZWZpbmUgSEFSREVOSU5HX0VOVFJPUFkgMAotCi0jZW5kaWYKLQotLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0vLyBDb25maWd1cmF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gVHlwZSB0aGF0IGNh
biBob2xkIHRoZSBsZW5ndGggb2YgYSBydW4gb2YgcGFnZXMKLXR5cGVkZWYgdWludHB0cl90IExl
bmd0aDsKLQotLy8gTm90IGFsbCBwb3NzaWJsZSBjb21iaW5hdGlvbnMgb2YgdGhlIGZvbGxvd2lu
ZyBwYXJhbWV0ZXJzIG1ha2UKLS8vIHNlbnNlLiAgSW4gcGFydGljdWxhciwgaWYga01heFNpemUg
aW5jcmVhc2VzLCB5b3UgbWF5IGhhdmUgdG8KLS8vIGluY3JlYXNlIGtOdW1DbGFzc2VzIGFzIHdl
bGwuCi0jZGVmaW5lIEtfUEFHRV9TSElGVF9NSU4gMTIKLSNkZWZpbmUgS19QQUdFX1NISUZUX01B
WCAxNAotI2RlZmluZSBLX05VTV9DTEFTU0VTX01BWCA3Nwotc3RhdGljIHNpemVfdCBrUGFnZVNo
aWZ0ICA9IDA7Ci1zdGF0aWMgc2l6ZV90IGtOdW1DbGFzc2VzID0gMDsKLXN0YXRpYyBzaXplX3Qg
a1BhZ2VTaXplICAgPSAwOwotc3RhdGljIExlbmd0aCBrTWF4VmFsaWRQYWdlcyA9IDA7Ci1zdGF0
aWMgY29uc3Qgc2l6ZV90IGtNYXhTaXplICAgID0gMzJ1ICogMTAyNDsKLXN0YXRpYyBjb25zdCBz
aXplX3Qga0FsaWduU2hpZnQgPSAzOwotc3RhdGljIGNvbnN0IHNpemVfdCBrQWxpZ25tZW50ICA9
IDEgPDwga0FsaWduU2hpZnQ7Ci0KLS8vIEFsbG9jYXRlcyBhIGJpZyBibG9jayBvZiBtZW1vcnkg
Zm9yIHRoZSBwYWdlbWFwIG9uY2Ugd2UgcmVhY2ggbW9yZSB0aGFuCi0vLyAxMjhNQgotc3RhdGlj
IGNvbnN0IHNpemVfdCBrUGFnZU1hcEJpZ0FsbG9jYXRpb25UaHJlc2hvbGQgPSAxMjggPDwgMjA7
Ci0KLS8vIE1pbmltdW0gbnVtYmVyIG9mIHBhZ2VzIHRvIGZldGNoIGZyb20gc3lzdGVtIGF0IGEg
dGltZS4gIE11c3QgYmUKLS8vIHNpZ25pZmljYW50bHkgYmlnZ2VyIHRoYW4ga1BhZ2VTaXplIHRv
IGFtb3J0aXplIHN5c3RlbS1jYWxsCi0vLyBvdmVyaGVhZCwgYW5kIGFsc28gdG8gcmVkdWNlIGV4
dGVybmFsIGZyYWdlbWVudGF0aW9uLiAgQWxzbywgd2UKLS8vIHNob3VsZCBrZWVwIHRoaXMgdmFs
dWUgYmlnIGJlY2F1c2UgdmFyaW91cyBpbmNhcm5hdGlvbnMgb2YgTGludXgKLS8vIGhhdmUgc21h
bGwgbGltaXRzIG9uIHRoZSBudW1iZXIgb2YgbW1hcCgpIHJlZ2lvbnMgcGVyCi0vLyBhZGRyZXNz
LXNwYWNlLgotc3RhdGljIGNvbnN0IHNpemVfdCBrTWluU3lzdGVtQWxsb2MgPSAxIDw8ICgyMCAt
IEtfUEFHRV9TSElGVF9NQVgpOwotCi0vLyBOdW1iZXIgb2Ygb2JqZWN0cyB0byBtb3ZlIGJldHdl
ZW4gYSBwZXItdGhyZWFkIGxpc3QgYW5kIGEgY2VudHJhbAotLy8gbGlzdCBpbiBvbmUgc2hvdC4g
IFdlIHdhbnQgdGhpcyB0byBiZSBub3QgdG9vIHNtYWxsIHNvIHdlIGNhbgotLy8gYW1vcnRpemUg
dGhlIGxvY2sgb3ZlcmhlYWQgZm9yIGFjY2Vzc2luZyB0aGUgY2VudHJhbCBsaXN0LiAgTWFraW5n
Ci0vLyBpdCB0b28gYmlnIG1heSB0ZW1wb3JhcmlseSBjYXVzZSB1bm5lY2Vzc2FyeSBtZW1vcnkg
d2FzdGFnZSBpbiB0aGUKLS8vIHBlci10aHJlYWQgZnJlZSBsaXN0IHVudGlsIHRoZSBzY2F2ZW5n
ZXIgY2xlYW5zIHVwIHRoZSBsaXN0Lgotc3RhdGljIGludCBudW1fb2JqZWN0c190b19tb3ZlW0tf
TlVNX0NMQVNTRVNfTUFYXTsKLQotLy8gTWF4aW11bSBsZW5ndGggd2UgYWxsb3cgYSBwZXItdGhy
ZWFkIGZyZWUtbGlzdCB0byBoYXZlIGJlZm9yZSB3ZQotLy8gbW92ZSBvYmplY3RzIGZyb20gaXQg
aW50byB0aGUgY29ycmVzcG9uZGluZyBjZW50cmFsIGZyZWUtbGlzdC4gIFdlCi0vLyB3YW50IHRo
aXMgYmlnIHRvIGF2b2lkIGxvY2tpbmcgdGhlIGNlbnRyYWwgZnJlZS1saXN0IHRvbyBvZnRlbi4g
IEl0Ci0vLyBzaG91bGQgbm90IGh1cnQgdG8gbWFrZSB0aGlzIGxpc3Qgc29tZXdoYXQgYmlnIGJl
Y2F1c2UgdGhlCi0vLyBzY2F2ZW5naW5nIGNvZGUgd2lsbCBzaHJpbmsgaXQgZG93biB3aGVuIGl0
cyBjb250ZW50cyBhcmUgbm90IGluIHVzZS4KLXN0YXRpYyBjb25zdCBpbnQga01heEZyZWVMaXN0
TGVuZ3RoID0gMjU2OwotCi0vLyBMb3dlciBhbmQgdXBwZXIgYm91bmRzIG9uIHRoZSBwZXItdGhy
ZWFkIGNhY2hlIHNpemVzCi1zdGF0aWMgY29uc3Qgc2l6ZV90IGtNaW5UaHJlYWRDYWNoZVNpemUg
PSBrTWF4U2l6ZSAqIDI7Ci1zdGF0aWMgY29uc3Qgc2l6ZV90IGtNYXhUaHJlYWRDYWNoZVNpemUg
PSAyIDw8IDIwOwotCi0vLyBEZWZhdWx0IGJvdW5kIG9uIHRoZSB0b3RhbCBhbW91bnQgb2YgdGhy
ZWFkIGNhY2hlcwotc3RhdGljIGNvbnN0IHNpemVfdCBrRGVmYXVsdE92ZXJhbGxUaHJlYWRDYWNo
ZVNpemUgPSAxNiA8PCAyMDsKLQotLy8gRm9yIGFsbCBzcGFuLWxlbmd0aHMgPCBrTWF4UGFnZXMg
d2Uga2VlcCBhbiBleGFjdC1zaXplIGxpc3QuCi0vLyBSRVFVSVJFRDoga01heFBhZ2VzID49IGtN
aW5TeXN0ZW1BbGxvYzsKLXN0YXRpYyBjb25zdCBzaXplX3Qga01heFBhZ2VzID0ga01pblN5c3Rl
bUFsbG9jOwotCi0vKiBUaGUgc21hbGxlc3QgcHJpbWUgPiAyXm4gKi8KLXN0YXRpYyBpbnQgcHJp
bWVzX2xpc3RbXSA9IHsKLSAgICAvLyBTbWFsbCB2YWx1ZXMgbWlnaHQgY2F1c2UgaGlnaCByYXRl
cyBvZiBzYW1wbGluZwotICAgIC8vIGFuZCBoZW5jZSBjb21tZW50ZWQgb3V0LgotICAgIC8vIDIs
IDUsIDExLCAxNywgMzcsIDY3LCAxMzEsIDI1NywKLSAgICAvLyA1MjEsIDEwMzEsIDIwNTMsIDQw
OTksIDgyMDksIDE2NDExLAotICAgIDMyNzcxLCA2NTUzNywgMTMxMTAxLCAyNjIxNDcsIDUyNDMw
OSwgMTA0ODU4MywKLSAgICAyMDk3MTY5LCA0MTk0MzE5LCA4Mzg4NjE3LCAxNjc3NzI1OSwgMzM1
NTQ0NjcgfTsKLQotLy8gVHdpY2UgdGhlIGFwcHJveGltYXRlIGdhcCBiZXR3ZWVuIHNhbXBsaW5n
IGFjdGlvbnMuCi0vLyBJLmUuLCB3ZSB0YWtlIG9uZSBzYW1wbGUgYXBwcm94aW1hdGVseSBvbmNl
IGV2ZXJ5Ci0vLyAgICAgIHRjbWFsbG9jX3NhbXBsZV9wYXJhbWV0ZXIvMgotLy8gYnl0ZXMgb2Yg
YWxsb2NhdGlvbiwgaS5lLiwgfiBvbmNlIGV2ZXJ5IDEyOEtCLgotLy8gTXVzdCBiZSBhIHByaW1l
IG51bWJlci4KLSNpZmRlZiBOT19UQ01BTExPQ19TQU1QTEVTCi1ERUZJTkVfaW50NjQodGNtYWxs
b2Nfc2FtcGxlX3BhcmFtZXRlciwgMCwKLSAgICAgICAgICAgICAiVW51c2VkOiBjb2RlIGlzIGNv
bXBpbGVkIHdpdGggTk9fVENNQUxMT0NfU0FNUExFUyIpOwotc3RhdGljIHNpemVfdCBzYW1wbGVf
cGVyaW9kID0gMDsKLSNlbHNlCi1ERUZJTkVfaW50NjQodGNtYWxsb2Nfc2FtcGxlX3BhcmFtZXRl
ciwgMjYyMTQ3LAotICAgICAgICAgIlR3aWNlIHRoZSBhcHByb3hpbWF0ZSBnYXAgYmV0d2VlbiBz
YW1wbGluZyBhY3Rpb25zLiIKLSAgICAgICAgICIgTXVzdCBiZSBhIHByaW1lIG51bWJlci4gT3Ro
ZXJ3aXNlIHdpbGwgYmUgcm91bmRlZCB1cCB0byBhICIKLSAgICAgICAgICIgbGFyZ2VyIHByaW1l
IG51bWJlciIpOwotc3RhdGljIHNpemVfdCBzYW1wbGVfcGVyaW9kID0gMjYyMTQ3OwotI2VuZGlm
Ci0KLS8vIFByb3RlY3RzIHNhbXBsZV9wZXJpb2QgYWJvdmUKLXN0YXRpYyBTcGluTG9jayBzYW1w
bGVfcGVyaW9kX2xvY2sgPSBTUElOTE9DS19JTklUSUFMSVpFUjsKLQotLy8gUGFyYW1ldGVycyBm
b3IgY29udHJvbGxpbmcgaG93IGZhc3QgbWVtb3J5IGlzIHJldHVybmVkIHRvIHRoZSBPUy4KLQot
REVGSU5FX2RvdWJsZSh0Y21hbGxvY19yZWxlYXNlX3JhdGUsIDEsCi0gICAgICAgICAgICAgICJS
YXRlIGF0IHdoaWNoIHdlIHJlbGVhc2UgdW51c2VkIG1lbW9yeSB0byB0aGUgc3lzdGVtLiAgIgot
ICAgICAgICAgICAgICAiWmVybyBtZWFucyB3ZSBuZXZlciByZWxlYXNlIG1lbW9yeSBiYWNrIHRv
IHRoZSBzeXN0ZW0uICAiCi0gICAgICAgICAgICAgICJJbmNyZWFzZSB0aGlzIGZsYWcgdG8gcmV0
dXJuIG1lbW9yeSBmYXN0ZXI7IGRlY3JlYXNlIGl0ICIKLSAgICAgICAgICAgICAgInRvIHJldHVy
biBtZW1vcnkgc2xvd2VyLiAgUmVhc29uYWJsZSByYXRlcyBhcmUgaW4gdGhlICIKLSAgICAgICAg
ICAgICAgInJhbmdlIFswLDEwXSIpOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE1hcHBpbmcgZnJvbSBz
aXplIHRvIHNpemVfY2xhc3MgYW5kIHZpY2UgdmVyc2EKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBTaXpl
cyA8PSAxMDI0IGhhdmUgYW4gYWxpZ25tZW50ID49IDguICBTbyBmb3Igc3VjaCBzaXplcyB3ZSBo
YXZlIGFuCi0vLyBhcnJheSBpbmRleGVkIGJ5IGNlaWwoc2l6ZS84KS4gIFNpemVzID4gMTAyNCBo
YXZlIGFuIGFsaWdubWVudCA+PSAxMjguCi0vLyBTbyBmb3IgdGhlc2UgbGFyZ2VyIHNpemVzIHdl
IGhhdmUgYW4gYXJyYXkgaW5kZXhlZCBieSBjZWlsKHNpemUvMTI4KS4KLS8vCi0vLyBXZSBmbGF0
dGVuIGJvdGggbG9naWNhbCBhcnJheXMgaW50byBvbmUgcGh5c2ljYWwgYXJyYXkgYW5kIHVzZQot
Ly8gYXJpdGhtZXRpYyB0byBjb21wdXRlIGFuIGFwcHJvcHJpYXRlIGluZGV4LiAgVGhlIGNvbnN0
YW50cyB1c2VkIGJ5Ci0vLyBDbGFzc0luZGV4KCkgd2VyZSBzZWxlY3RlZCB0byBtYWtlIHRoZSBm
bGF0dGVuaW5nIHdvcmsuCi0vLwotLy8gRXhhbXBsZXM6Ci0vLyAgIFNpemUgICAgICAgRXhwcmVz
c2lvbiAgICAgICAgICAgICAgICAgICAgICBJbmRleAotLy8gICAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgIDAgICAgICAgICAgKDAg
KyA3KSAvIDggICAgICAgICAgICAgICAgICAgICAwCi0vLyAgIDEgICAgICAgICAgKDEgKyA3KSAv
IDggICAgICAgICAgICAgICAgICAgICAxCi0vLyAgIC4uLgotLy8gICAxMDI0ICAgICAgICgxMDI0
ICsgNykgLyA4ICAgICAgICAgICAgICAgICAgMTI4Ci0vLyAgIDEwMjUgICAgICAgKDEwMjUgKyAx
MjcgKyAoMTIwPDw3KSkgLyAxMjggICAxMjkKLS8vICAgLi4uCi0vLyAgIDMyNzY4ICAgICAgKDMy
NzY4ICsgMTI3ICsgKDEyMDw8NykpIC8gMTI4ICAzNzYKLXN0YXRpYyBjb25zdCBzaXplX3Qga01h
eFNtYWxsU2l6ZSA9IDEwMjQ7Ci1zdGF0aWMgY29uc3QgaW50IHNoaWZ0X2Ftb3VudFsyXSA9IHsg
MywgNyB9OyAgLy8gRm9yIGRpdmlkZXMgYnkgOCBvciAxMjgKLXN0YXRpYyBjb25zdCBpbnQgYWRk
X2Ftb3VudFsyXSA9IHsgNywgMTI3ICsgKDEyMCA8PCA3KSB9Owotc3RhdGljIHVuc2lnbmVkIGNo
YXIgY2xhc3NfYXJyYXlbMzc3XTsKLQotLy8gQ29tcHV0ZSBpbmRleCBvZiB0aGUgY2xhc3NfYXJy
YXlbXSBlbnRyeSBmb3IgYSBnaXZlbiBzaXplCi1zdGF0aWMgaW5saW5lIGludCBDbGFzc0luZGV4
KHNpemVfdCBzKSB7Ci0gIGNvbnN0IGludCBpID0gKHMgPiBrTWF4U21hbGxTaXplKTsKLSAgcmV0
dXJuIHN0YXRpY19jYXN0PGludD4oKHMgKyBhZGRfYW1vdW50W2ldKSA+PiBzaGlmdF9hbW91bnRb
aV0pOwotfQotCi0vLyBNYXBwaW5nIGZyb20gc2l6ZSBjbGFzcyB0byBtYXggc2l6ZSBzdG9yYWJs
ZSBpbiB0aGF0IGNsYXNzCi1zdGF0aWMgc2l6ZV90IGNsYXNzX3RvX3NpemVbS19OVU1fQ0xBU1NF
U19NQVhdOwotCi0vLyBNYXBwaW5nIGZyb20gc2l6ZSBjbGFzcyB0byBudW1iZXIgb2YgcGFnZXMg
dG8gYWxsb2NhdGUgYXQgYSB0aW1lCi1zdGF0aWMgc2l6ZV90IGNsYXNzX3RvX3BhZ2VzW0tfTlVN
X0NMQVNTRVNfTUFYXTsKLQotLy8gSGFyZGVuZWQgc2luZ2x5IGxpbmtlZCBsaXN0LiAgV2UgbWFr
ZSB0aGlzIGEgY2xhc3MgdG8gYWxsb3cgY29tcGlsZXIgdG8KLS8vIHN0YXRpY2FsbHkgcHJldmVu
dCBtaXNtYXRjaGluZyBoYXJkZW5lZCBhbmQgbm9uLWhhcmRlbmVkIGxpc3QKLWNsYXNzIEhhcmRl
bmVkU0xMIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBIYXJkZW5lZFNMTCBj
cmVhdGUodm9pZCogdmFsdWUpCi0gICAgewotICAgICAgICBIYXJkZW5lZFNMTCByZXN1bHQ7Ci0g
ICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gdmFsdWU7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfQotCi0gICAgc3RhdGljIEFMV0FZU19JTkxJTkUgSGFyZGVuZWRTTEwgbnVsbCgpCi0gICAg
ewotICAgICAgICBIYXJkZW5lZFNMTCByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX3ZhbHVlID0g
MDsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgc2V0VmFsdWUodm9pZCogdmFsdWUpIHsgbV92YWx1ZSA9IHZhbHVlOyB9Ci0gICAgQUxXQVlT
X0lOTElORSB2b2lkKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KLSAgICBBTFdB
WVNfSU5MSU5FIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fdmFsdWU7IH0KLSAg
ICB0eXBlZGVmIHZvaWQqIChIYXJkZW5lZFNMTDo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOwotICAg
IEFMV0FZU19JTkxJTkUgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWUgPyAmSGFyZGVuZWRTTEw6Om1fdmFsdWUgOiAwOyB9Ci0KLSAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgSGFyZGVuZWRTTEwmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
ICE9IG90aGVyLm1fdmFsdWU7IH0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGFyZGVuZWRT
TEwmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7IH0KLQot
cHJpdmF0ZToKLSAgICB2b2lkKiBtX3ZhbHVlOwotfTsKLQotLy8gVHJhbnNmZXJDYWNoZSBpcyB1
c2VkIHRvIGNhY2hlIHRyYW5zZmVycyBvZiBudW1fb2JqZWN0c190b19tb3ZlW3NpemVfY2xhc3Nd
Ci0vLyBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIHRocmVhZCBjYWNoZXMgYW5kIHRoZSBjZW50cmFs
IGNhY2hlIGZvciBhIGdpdmVuIHNpemUKLS8vIGNsYXNzLgotc3RydWN0IFRDRW50cnkgewotICBI
YXJkZW5lZFNMTCBoZWFkOyAgLy8gSGVhZCBvZiBjaGFpbiBvZiBvYmplY3RzLgotICBIYXJkZW5l
ZFNMTCB0YWlsOyAgLy8gVGFpbCBvZiBjaGFpbiBvZiBvYmplY3RzLgotfTsKLS8vIEEgY2VudHJh
bCBjYWNoZSBmcmVlbGlzdCBjYW4gaGF2ZSBhbnl3aGVyZSBmcm9tIDAgdG8ga051bVRyYW5zZmVy
RW50cmllcwotLy8gc2xvdHMgdG8gcHV0IGxpbmsgbGlzdCBjaGFpbnMgaW50by4gIFRvIGtlZXAg
bWVtb3J5IHVzYWdlIGJvdW5kZWQgdGhlIHRvdGFsCi0vLyBudW1iZXIgb2YgVENFbnRyaWVzIGFj
cm9zcyBzaXplIGNsYXNzZXMgaXMgZml4ZWQuICBDdXJyZW50bHkgZWFjaCBzaXplCi0vLyBjbGFz
cyBpcyBpbml0aWFsbHkgZ2l2ZW4gb25lIFRDRW50cnkgd2hpY2ggYWxzbyBtZWFucyB0aGF0IHRo
ZSBtYXhpbXVtIGFueQotLy8gb25lIGNsYXNzIGNhbiBoYXZlIGlzIGtOdW1DbGFzc2VzLgotI2Rl
ZmluZSBLX05VTV9UUkFOU0ZFUl9FTlRSSUVTX01BWCBzdGF0aWNfY2FzdDxpbnQ+KEtfTlVNX0NM
QVNTRVNfTUFYKQotI2RlZmluZSBrTnVtVHJhbnNmZXJFbnRyaWVzIHN0YXRpY19jYXN0PGludD4o
a051bUNsYXNzZXMpCi0KLS8vIE5vdGU6IHRoZSBmb2xsb3dpbmcgb25seSB3b3JrcyBmb3IgIm4i
cyB0aGF0IGZpdCBpbiAzMi1iaXRzLCBidXQKLS8vIHRoYXQgaXMgZmluZSBzaW5jZSB3ZSBvbmx5
IHVzZSBpdCBmb3Igc21hbGwgc2l6ZXMuCi1zdGF0aWMgaW5saW5lIGludCBMZ0Zsb29yKHNpemVf
dCBuKSB7Ci0gIGludCBsb2cgPSAwOwotICBmb3IgKGludCBpID0gNDsgaSA+PSAwOyAtLWkpIHsK
LSAgICBpbnQgc2hpZnQgPSAoMSA8PCBpKTsKLSAgICBzaXplX3QgeCA9IG4gPj4gc2hpZnQ7Ci0g
ICAgaWYgKHggIT0gMCkgewotICAgICAgbiA9IHg7Ci0gICAgICBsb2cgKz0gc2hpZnQ7Ci0gICAg
fQotICB9Ci0gIEFTU0VSVChuID09IDEpOwotICByZXR1cm4gbG9nOwotfQotCi0vLyBGdW5jdGlv
bnMgZm9yIHVzaW5nIG91ciBzaW1wbGUgaGFyZGVuZWQgc2luZ2x5IGxpbmtlZCBsaXN0Ci1zdGF0
aWMgQUxXQVlTX0lOTElORSBIYXJkZW5lZFNMTCBTTExfTmV4dChIYXJkZW5lZFNMTCB0LCB1aW50
cHRyX3QgZW50cm9weSkgewotICAgIHZvaWQqIHRWYWx1ZU5leHQgPSAqKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCoqPih0LnZhbHVlKCkpKTsKLSAgICByZXR1cm4gSGFyZGVuZWRTTEw6OmNyZWF0ZShY
T1JfTUFTS19QVFJfV0lUSF9LRVkodFZhbHVlTmV4dCwgdC52YWx1ZSgpLCBlbnRyb3B5KSk7Ci19
Ci0KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgU0xMX1NldE5leHQoSGFyZGVuZWRTTEwgdCwg
SGFyZGVuZWRTTEwgbiwgdWludHB0cl90IGVudHJvcHkpIHsKLSAgICAqKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCoqPih0LnZhbHVlKCkpKSA9IFhPUl9NQVNLX1BUUl9XSVRIX0tFWShuLnZhbHVlKCks
IHQudmFsdWUoKSwgZW50cm9weSk7Ci19Ci0KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgU0xM
X1B1c2goSGFyZGVuZWRTTEwqIGxpc3QsIEhhcmRlbmVkU0xMIGVsZW1lbnQsIHVpbnRwdHJfdCBl
bnRyb3B5KSB7Ci0gIFNMTF9TZXROZXh0KGVsZW1lbnQsICpsaXN0LCBlbnRyb3B5KTsKLSAgKmxp
c3QgPSBlbGVtZW50OwotfQotCi1zdGF0aWMgQUxXQVlTX0lOTElORSBIYXJkZW5lZFNMTCBTTExf
UG9wKEhhcmRlbmVkU0xMICpsaXN0LCB1aW50cHRyX3QgZW50cm9weSkgewotICBIYXJkZW5lZFNM
TCByZXN1bHQgPSAqbGlzdDsKLSAgKmxpc3QgPSBTTExfTmV4dCgqbGlzdCwgZW50cm9weSk7Ci0g
IHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIFJlbW92ZSBOIGVsZW1lbnRzIGZyb20gYSBsaW5rZWQg
bGlzdCB0byB3aGljaCBoZWFkIHBvaW50cy4gIGhlYWQgd2lsbCBiZQotLy8gbW9kaWZpZWQgdG8g
cG9pbnQgdG8gdGhlIG5ldyBoZWFkLiAgc3RhcnQgYW5kIGVuZCB3aWxsIHBvaW50IHRvIHRoZSBm
aXJzdAotLy8gYW5kIGxhc3Qgbm9kZXMgb2YgdGhlIHJhbmdlLiAgTm90ZSB0aGF0IGVuZCB3aWxs
IHBvaW50IHRvIE5VTEwgYWZ0ZXIgdGhpcwotLy8gZnVuY3Rpb24gaXMgY2FsbGVkLgotCi1zdGF0
aWMgQUxXQVlTX0lOTElORSB2b2lkIFNMTF9Qb3BSYW5nZShIYXJkZW5lZFNMTCogaGVhZCwgaW50
IE4sIEhhcmRlbmVkU0xMICpzdGFydCwgSGFyZGVuZWRTTEwgKmVuZCwgdWludHB0cl90IGVudHJv
cHkpIHsKLSAgaWYgKE4gPT0gMCkgewotICAgICpzdGFydCA9IEhhcmRlbmVkU0xMOjpudWxsKCk7
Ci0gICAgKmVuZCA9IEhhcmRlbmVkU0xMOjpudWxsKCk7Ci0gICAgcmV0dXJuOwotICB9Ci0KLSAg
SGFyZGVuZWRTTEwgdG1wID0gKmhlYWQ7Ci0gIGZvciAoaW50IGkgPSAxOyBpIDwgTjsgKytpKSB7
Ci0gICAgdG1wID0gU0xMX05leHQodG1wLCBlbnRyb3B5KTsKLSAgfQotCi0gICpzdGFydCA9ICpo
ZWFkOwotICAqZW5kID0gdG1wOwotICAqaGVhZCA9IFNMTF9OZXh0KHRtcCwgZW50cm9weSk7Ci0g
IC8vIFVubGluayByYW5nZSBmcm9tIGxpc3QuCi0gIFNMTF9TZXROZXh0KHRtcCwgSGFyZGVuZWRT
TEw6Om51bGwoKSwgZW50cm9weSk7Ci19Ci0KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgU0xM
X1B1c2hSYW5nZShIYXJkZW5lZFNMTCAqaGVhZCwgSGFyZGVuZWRTTEwgc3RhcnQsIEhhcmRlbmVk
U0xMIGVuZCwgdWludHB0cl90IGVudHJvcHkpIHsKLSAgaWYgKCFzdGFydCkgcmV0dXJuOwotICBT
TExfU2V0TmV4dChlbmQsICpoZWFkLCBlbnRyb3B5KTsKLSAgKmhlYWQgPSBzdGFydDsKLX0KLQot
Ly8gU2V0dXAgaGVscGVyIGZ1bmN0aW9ucy4KLQotc3RhdGljIEFMV0FZU19JTkxJTkUgc2l6ZV90
IFNpemVDbGFzcyhzaXplX3Qgc2l6ZSkgewotICByZXR1cm4gY2xhc3NfYXJyYXlbQ2xhc3NJbmRl
eChzaXplKV07Ci19Ci0KLS8vIEdldCB0aGUgYnl0ZS1zaXplIGZvciBhIHNwZWNpZmllZCBjbGFz
cwotc3RhdGljIEFMV0FZU19JTkxJTkUgc2l6ZV90IEJ5dGVTaXplRm9yQ2xhc3Moc2l6ZV90IGNs
KSB7Ci0gIHJldHVybiBjbGFzc190b19zaXplW2NsXTsKLX0KLXN0YXRpYyBpbnQgTnVtTW92ZVNp
emUoc2l6ZV90IHNpemUpIHsKLSAgaWYgKHNpemUgPT0gMCkgcmV0dXJuIDA7Ci0gIC8vIFVzZSBh
cHByb3ggNjRrIHRyYW5zZmVycyBiZXR3ZWVuIHRocmVhZCBhbmQgY2VudHJhbCBjYWNoZXMuCi0g
IGludCBudW0gPSBzdGF0aWNfY2FzdDxpbnQ+KDY0LjAgKiAxMDI0LjAgLyBzaXplKTsKLSAgaWYg
KG51bSA8IDIpIG51bSA9IDI7Ci0gIC8vIENsYW1wIHdlbGwgYmVsb3cga01heEZyZWVMaXN0TGVu
Z3RoIHRvIGF2b2lkIHBpbmcgcG9uZyBiZXR3ZWVuIGNlbnRyYWwKLSAgLy8gYW5kIHRocmVhZCBj
YWNoZXMuCi0gIGlmIChudW0gPiBzdGF0aWNfY2FzdDxpbnQ+KDAuOCAqIGtNYXhGcmVlTGlzdExl
bmd0aCkpCi0gICAgbnVtID0gc3RhdGljX2Nhc3Q8aW50PigwLjggKiBrTWF4RnJlZUxpc3RMZW5n
dGgpOwotCi0gIC8vIEFsc28sIGF2b2lkIGJyaW5naW5nIGluIHRvbyBtYW55IG9iamVjdHMgaW50
byBzbWFsbCBvYmplY3QgZnJlZQotICAvLyBsaXN0cy4gIFRoZXJlIGFyZSBsb3RzIG9mIHN1Y2gg
bGlzdHMsIGFuZCBpZiB3ZSBhbGxvdyBlYWNoIG9uZSB0bwotICAvLyBmZXRjaCB0b28gbWFueSBh
dCBhIHRpbWUsIHdlIGVuZCB1cCBoYXZpbmcgdG8gc2NhdmVuZ2UgdG9vIG9mdGVuCi0gIC8vIChl
c3BlY2lhbGx5IHdoZW4gdGhlcmUgYXJlIGxvdHMgb2YgdGhyZWFkcyBhbmQgZWFjaCB0aHJlYWQg
Z2V0cyBhCi0gIC8vIHNtYWxsIGFsbG93YW5jZSBmb3IgaXRzIHRocmVhZCBjYWNoZSkuCi0gIC8v
Ci0gIC8vIFRPRE86IE1ha2UgdGhyZWFkIGNhY2hlIGZyZWUgbGlzdCBzaXplcyBkeW5hbWljIHNv
IHRoYXQgd2UgZG8gbm90Ci0gIC8vIGhhdmUgdG8gZXF1YWxseSBkaXZpZGUgYSBmaXhlZCByZXNv
dXJjZSBhbW9uZ3N0IGxvdHMgb2YgdGhyZWFkcy4KLSAgaWYgKG51bSA+IDMyKSBudW0gPSAzMjsK
LQotICByZXR1cm4gbnVtOwotfQotCi0vLyBJbml0aWFsaXplIHRoZSBtYXBwaW5nIGFycmF5cwot
c3RhdGljIHZvaWQgSW5pdFNpemVDbGFzc2VzKCkgewotI2lmIE9TKERBUldJTikKLSAga1BhZ2VT
aGlmdCA9IHZtX3BhZ2Vfc2hpZnQ7Ci0gIHN3aXRjaCAoa1BhZ2VTaGlmdCkgewotICBjYXNlIDEy
OgotICAgIGtOdW1DbGFzc2VzID0gNjg7Ci0gICAgYnJlYWs7Ci0gIGNhc2UgMTQ6Ci0gICAga051
bUNsYXNzZXMgPSA3NzsKLSAgICBicmVhazsKLSAgZGVmYXVsdDoKLSAgICBDUkFTSCgpOwotICB9
OwotI2Vsc2UKLSAga1BhZ2VTaGlmdCA9IDEyOwotICBrTnVtQ2xhc3NlcyA9IDY4OwotI2VuZGlm
Ci0gIGtQYWdlU2l6ZSA9IDEgPDwga1BhZ2VTaGlmdDsKLSAga01heFZhbGlkUGFnZXMgPSAofnN0
YXRpY19jYXN0PExlbmd0aD4oMCkpID4+IGtQYWdlU2hpZnQ7Ci0KLSAgLy8gRG8gc29tZSBzYW5p
dHkgY2hlY2tpbmcgb24gYWRkX2Ftb3VudFtdL3NoaWZ0X2Ftb3VudFtdL2NsYXNzX2FycmF5W10K
LSAgaWYgKENsYXNzSW5kZXgoMCkgPCAwKSB7Ci0gICAgTUVTU0FHRSgiSW52YWxpZCBjbGFzcyBp
bmRleCAlZCBmb3Igc2l6ZSAwXG4iLCBDbGFzc0luZGV4KDApKTsKLSAgICBDUkFTSCgpOwotICB9
Ci0gIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KENsYXNzSW5kZXgoa01heFNpemUpKSA+PSBzaXpl
b2YoY2xhc3NfYXJyYXkpKSB7Ci0gICAgTUVTU0FHRSgiSW52YWxpZCBjbGFzcyBpbmRleCAlZCBm
b3Iga01heFNpemVcbiIsIENsYXNzSW5kZXgoa01heFNpemUpKTsKLSAgICBDUkFTSCgpOwotICB9
Ci0KLSAgLy8gQ29tcHV0ZSB0aGUgc2l6ZSBjbGFzc2VzIHdlIHdhbnQgdG8gdXNlCi0gIHNpemVf
dCBzYyA9IDE7ICAgLy8gTmV4dCBzaXplIGNsYXNzIHRvIGFzc2lnbgotICB1bnNpZ25lZCBjaGFy
IGFsaWduc2hpZnQgPSBrQWxpZ25TaGlmdDsKLSAgaW50IGxhc3RfbGcgPSAtMTsKLSAgZm9yIChz
aXplX3Qgc2l6ZSA9IGtBbGlnbm1lbnQ7IHNpemUgPD0ga01heFNpemU7IHNpemUgKz0gKDEgPDwg
YWxpZ25zaGlmdCkpIHsKLSAgICBpbnQgbGcgPSBMZ0Zsb29yKHNpemUpOwotICAgIGlmIChsZyA+
IGxhc3RfbGcpIHsKLSAgICAgIC8vIEluY3JlYXNlIGFsaWdubWVudCBldmVyeSBzbyBvZnRlbi4K
LSAgICAgIC8vCi0gICAgICAvLyBTaW5jZSB3ZSBkb3VibGUgdGhlIGFsaWdubWVudCBldmVyeSB0
aW1lIHNpemUgZG91YmxlcyBhbmQKLSAgICAgIC8vIHNpemUgPj0gMTI4LCB0aGlzIG1lYW5zIHRo
YXQgc3BhY2Ugd2FzdGVkIGR1ZSB0byBhbGlnbm1lbnQgaXMKLSAgICAgIC8vIGF0IG1vc3QgMTYv
MTI4IGkuZS4sIDEyLjUlLiAgUGx1cyB3ZSBjYXAgdGhlIGFsaWdubWVudCBhdCAyNTYKLSAgICAg
IC8vIGJ5dGVzLCBzbyB0aGUgc3BhY2Ugd2FzdGVkIGFzIGEgcGVyY2VudGFnZSBzdGFydHMgZmFs
bGluZyBmb3IKLSAgICAgIC8vIHNpemVzID4gMksuCi0gICAgICBpZiAoKGxnID49IDcpICYmIChh
bGlnbnNoaWZ0IDwgOCkpIHsKLSAgICAgICAgYWxpZ25zaGlmdCsrOwotICAgICAgfQotICAgICAg
bGFzdF9sZyA9IGxnOwotICAgIH0KLQotICAgIC8vIEFsbG9jYXRlIGVub3VnaCBwYWdlcyBzbyBs
ZWZ0b3ZlciBpcyBsZXNzIHRoYW4gMS84IG9mIHRvdGFsLgotICAgIC8vIFRoaXMgYm91bmRzIHdh
c3RlZCBzcGFjZSB0byBhdCBtb3N0IDEyLjUlLgotICAgIHNpemVfdCBwc2l6ZSA9IGtQYWdlU2l6
ZTsKLSAgICB3aGlsZSAoKHBzaXplICUgc2l6ZSkgPiAocHNpemUgPj4gMykpIHsKLSAgICAgIHBz
aXplICs9IGtQYWdlU2l6ZTsKLSAgICB9Ci0gICAgY29uc3Qgc2l6ZV90IG15X3BhZ2VzID0gcHNp
emUgPj4ga1BhZ2VTaGlmdDsKLQotICAgIGlmIChzYyA+IDEgJiYgbXlfcGFnZXMgPT0gY2xhc3Nf
dG9fcGFnZXNbc2MtMV0pIHsKLSAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gbWVyZ2UgdGhpcyBpbnRv
IHRoZSBwcmV2aW91cyBjbGFzcyB3aXRob3V0Ci0gICAgICAvLyBpbmNyZWFzaW5nIHRoZSBmcmFn
bWVudGF0aW9uIG9mIHRoZSBwcmV2aW91cyBjbGFzcy4KLSAgICAgIGNvbnN0IHNpemVfdCBteV9v
YmplY3RzID0gKG15X3BhZ2VzIDw8IGtQYWdlU2hpZnQpIC8gc2l6ZTsKLSAgICAgIGNvbnN0IHNp
emVfdCBwcmV2X29iamVjdHMgPSAoY2xhc3NfdG9fcGFnZXNbc2MtMV0gPDwga1BhZ2VTaGlmdCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIGNsYXNzX3RvX3NpemVbc2MtMV07
Ci0gICAgICBpZiAobXlfb2JqZWN0cyA9PSBwcmV2X29iamVjdHMpIHsKLSAgICAgICAgLy8gQWRq
dXN0IGxhc3QgY2xhc3MgdG8gaW5jbHVkZSB0aGlzIHNpemUKLSAgICAgICAgY2xhc3NfdG9fc2l6
ZVtzYy0xXSA9IHNpemU7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgIH0KLQotICAg
IC8vIEFkZCBuZXcgY2xhc3MKLSAgICBjbGFzc190b19wYWdlc1tzY10gPSBteV9wYWdlczsKLSAg
ICBjbGFzc190b19zaXplW3NjXSA9IHNpemU7Ci0gICAgc2MrKzsKLSAgfQotICBpZiAoc2MgIT0g
a051bUNsYXNzZXMpIHsKLSAgICBNRVNTQUdFKCJ3cm9uZyBudW1iZXIgb2Ygc2l6ZSBjbGFzc2Vz
OiBmb3VuZCAlIiBQUkl1UyAiIGluc3RlYWQgb2YgJWRcbiIsCi0gICAgICAgICAgICBzYywgaW50
KGtOdW1DbGFzc2VzKSk7Ci0gICAgQ1JBU0goKTsKLSAgfQotCi0gIC8vIEluaXRpYWxpemUgdGhl
IG1hcHBpbmcgYXJyYXlzCi0gIGludCBuZXh0X3NpemUgPSAwOwotICBmb3IgKHVuc2lnbmVkIGNo
YXIgYyA9IDE7IGMgPCBrTnVtQ2xhc3NlczsgYysrKSB7Ci0gICAgY29uc3Qgc2l6ZV90IG1heF9z
aXplX2luX2NsYXNzID0gY2xhc3NfdG9fc2l6ZVtjXTsKLSAgICBmb3IgKHNpemVfdCBzID0gbmV4
dF9zaXplOyBzIDw9IG1heF9zaXplX2luX2NsYXNzOyBzICs9IGtBbGlnbm1lbnQpIHsKLSAgICAg
IGNsYXNzX2FycmF5W0NsYXNzSW5kZXgocyldID0gYzsKLSAgICB9Ci0gICAgbmV4dF9zaXplID0g
c3RhdGljX2Nhc3Q8aW50PihtYXhfc2l6ZV9pbl9jbGFzcyArIGtBbGlnbm1lbnQpOwotICB9Ci0K
LSAgLy8gRG91YmxlLWNoZWNrIHNpemVzIGp1c3QgdG8gYmUgc2FmZQotICBmb3IgKHNpemVfdCBz
aXplID0gMDsgc2l6ZSA8PSBrTWF4U2l6ZTsgc2l6ZSsrKSB7Ci0gICAgY29uc3Qgc2l6ZV90IHNj
ID0gU2l6ZUNsYXNzKHNpemUpOwotICAgIGlmIChzYyA9PSAwKSB7Ci0gICAgICBNRVNTQUdFKCJC
YWQgc2l6ZSBjbGFzcyAlIiBQUkl1UyAiIGZvciAlIiBQUkl1UyAiXG4iLCBzYywgc2l6ZSk7Ci0g
ICAgICBDUkFTSCgpOwotICAgIH0KLSAgICBpZiAoc2MgPiAxICYmIHNpemUgPD0gY2xhc3NfdG9f
c2l6ZVtzYy0xXSkgewotICAgICAgTUVTU0FHRSgiQWxsb2NhdGluZyB1bm5lY2Vzc2FyaWx5IGxh
cmdlIGNsYXNzICUiIFBSSXVTICIgZm9yICUiIFBSSXVTCi0gICAgICAgICAgICAgICJcbiIsIHNj
LCBzaXplKTsKLSAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIGlmIChzYyA+PSBrTnVtQ2xhc3Nl
cykgewotICAgICAgTUVTU0FHRSgiQmFkIHNpemUgY2xhc3MgJSIgUFJJdVMgIiBmb3IgJSIgUFJJ
dVMgIlxuIiwgc2MsIHNpemUpOwotICAgICAgQ1JBU0goKTsKLSAgICB9Ci0gICAgY29uc3Qgc2l6
ZV90IHMgPSBjbGFzc190b19zaXplW3NjXTsKLSAgICBpZiAoc2l6ZSA+IHMpIHsKLSAgICAgTUVT
U0FHRSgiQmFkIHNpemUgJSIgUFJJdVMgIiBmb3IgJSIgUFJJdVMgIiAoc2MgPSAlIiBQUkl1UyAi
KVxuIiwgcywgc2l6ZSwgc2MpOwotICAgICAgQ1JBU0goKTsKLSAgICB9Ci0gICAgaWYgKHMgPT0g
MCkgewotICAgICAgTUVTU0FHRSgiQmFkIHNpemUgJSIgUFJJdVMgIiBmb3IgJSIgUFJJdVMgIiAo
c2MgPSAlIiBQUkl1UyAiKVxuIiwgcywgc2l6ZSwgc2MpOwotICAgICAgQ1JBU0goKTsKLSAgICB9
Ci0gIH0KLQotICAvLyBJbml0aWFsaXplIHRoZSBudW1fb2JqZWN0c190b19tb3ZlIGFycmF5Lgot
ICBmb3IgKHNpemVfdCBjbCA9IDE7IGNsICA8IGtOdW1DbGFzc2VzOyArK2NsKSB7Ci0gICAgbnVt
X29iamVjdHNfdG9fbW92ZVtjbF0gPSBOdW1Nb3ZlU2l6ZShCeXRlU2l6ZUZvckNsYXNzKGNsKSk7
Ci0gIH0KLQotI2lmbmRlZiBXVEZfQ0hBTkdFUwotICBpZiAoZmFsc2UpIHsKLSAgICAvLyBEdW1w
IGNsYXNzIHNpemVzIGFuZCBtYXhpbXVtIGV4dGVybmFsIHdhc3RhZ2UgcGVyIHNpemUgY2xhc3MK
LSAgICBmb3IgKHNpemVfdCBjbCA9IDE7IGNsICA8IGtOdW1DbGFzc2VzOyArK2NsKSB7Ci0gICAg
ICBjb25zdCBpbnQgYWxsb2Nfc2l6ZSA9IGNsYXNzX3RvX3BhZ2VzW2NsXSA8PCBrUGFnZVNoaWZ0
OwotICAgICAgY29uc3QgaW50IGFsbG9jX29ianMgPSBhbGxvY19zaXplIC8gY2xhc3NfdG9fc2l6
ZVtjbF07Ci0gICAgICBjb25zdCBpbnQgbWluX3VzZWQgPSAoY2xhc3NfdG9fc2l6ZVtjbC0xXSAr
IDEpICogYWxsb2Nfb2JqczsKLSAgICAgIGNvbnN0IGludCBtYXhfd2FzdGUgPSBhbGxvY19zaXpl
IC0gbWluX3VzZWQ7Ci0gICAgICBNRVNTQUdFKCJTQyAlM2QgWyAlOGQgLi4gJThkIF0gZnJvbSAl
OGQgOyAlMi4wZiUlIG1heHdhc3RlXG4iLAotICAgICAgICAgICAgICBpbnQoY2wpLAotICAgICAg
ICAgICAgICBpbnQoY2xhc3NfdG9fc2l6ZVtjbC0xXSArIDEpLAotICAgICAgICAgICAgICBpbnQo
Y2xhc3NfdG9fc2l6ZVtjbF0pLAotICAgICAgICAgICAgICBpbnQoY2xhc3NfdG9fcGFnZXNbY2xd
IDw8IGtQYWdlU2hpZnQpLAotICAgICAgICAgICAgICBtYXhfd2FzdGUgKiAxMDAuMCAvIGFsbG9j
X3NpemUKLSAgICAgICAgICAgICAgKTsKLSAgICB9Ci0gIH0KLSNlbmRpZgotfQotCi0vLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0vLyBTaW1wbGUgYWxsb2NhdG9yIGZvciBvYmplY3RzIG9mIGEgc3BlY2lm
aWVkIHR5cGUuICBFeHRlcm5hbCBsb2NraW5nCi0vLyBpcyByZXF1aXJlZCBiZWZvcmUgYWNjZXNz
aW5nIG9uZSBvZiB0aGVzZSBvYmplY3RzLgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBNZXRh
ZGF0YSBhbGxvY2F0b3IgLS0ga2VlcHMgc3RhdHMgYWJvdXQgaG93IG1hbnkgYnl0ZXMgYWxsb2Nh
dGVkCi1zdGF0aWMgdWludDY0X3QgbWV0YWRhdGFfc3lzdGVtX2J5dGVzID0gMDsKLXN0YXRpYyB2
b2lkKiBNZXRhRGF0YUFsbG9jKHNpemVfdCBieXRlcykgewotICB2b2lkKiByZXN1bHQgPSBUQ01h
bGxvY19TeXN0ZW1BbGxvYyhieXRlcywgMCk7Ci0gIGlmIChyZXN1bHQgIT0gTlVMTCkgewotICAg
IG1ldGFkYXRhX3N5c3RlbV9ieXRlcyArPSBieXRlczsKLSAgfQotICByZXR1cm4gcmVzdWx0Owot
fQotCi0jaWYgZGVmaW5lZChXVEZfQ0hBTkdFUykgJiYgT1MoREFSV0lOKQotY2xhc3MgUmVtb3Rl
TWVtb3J5UmVhZGVyOwotI2VuZGlmCi0KLXRlbXBsYXRlIDxjbGFzcyBUPgotY2xhc3MgUGFnZUhl
YXBBbGxvY2F0b3IgewotIHByaXZhdGU6Ci0gIC8vIEhvdyBtdWNoIHRvIGFsbG9jYXRlIGZyb20g
c3lzdGVtIGF0IGEgdGltZQotICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtBbGxvY0luY3JlbWVudCA9
IDMyIDw8IDEwOwotCi0gIC8vIEFsaWduZWQgc2l6ZSBvZiBUCi0gIHN0YXRpYyBjb25zdCBzaXpl
X3Qga0FsaWduZWRTaXplCi0gID0gKCgoc2l6ZW9mKFQpICsga0FsaWdubWVudCAtIDEpIC8ga0Fs
aWdubWVudCkgKiBrQWxpZ25tZW50KTsKLQotICAvLyBGcmVlIGFyZWEgZnJvbSB3aGljaCB0byBj
YXJ2ZSBuZXcgb2JqZWN0cwotICBjaGFyKiBmcmVlX2FyZWFfOwotICBzaXplX3QgZnJlZV9hdmFp
bF87Ci0KLSAgLy8gTGlua2VkIGxpc3Qgb2YgYWxsIHJlZ2lvbnMgYWxsb2NhdGVkIGJ5IHRoaXMg
YWxsb2NhdG9yCi0gIEhhcmRlbmVkU0xMIGFsbG9jYXRlZF9yZWdpb25zXzsKLQotICAvLyBGcmVl
IGxpc3Qgb2YgYWxyZWFkeSBjYXJ2ZWQgb2JqZWN0cwotICBIYXJkZW5lZFNMTCBmcmVlX2xpc3Rf
OwotCi0gIC8vIE51bWJlciBvZiBhbGxvY2F0ZWQgYnV0IHVuZnJlZWQgb2JqZWN0cwotICBpbnQg
aW51c2VfOwotICB1aW50cHRyX3QgZW50cm9weV87Ci0KLSBwdWJsaWM6Ci0gIHZvaWQgSW5pdCh1
aW50cHRyX3QgZW50cm9weSkgewotICAgIEFTU0VSVChrQWxpZ25lZFNpemUgPD0ga0FsbG9jSW5j
cmVtZW50KTsKLSAgICBpbnVzZV8gPSAwOwotICAgIGFsbG9jYXRlZF9yZWdpb25zXyA9IEhhcmRl
bmVkU0xMOjpudWxsKCk7Ci0gICAgZnJlZV9hcmVhXyA9IE5VTEw7Ci0gICAgZnJlZV9hdmFpbF8g
PSAwOwotICAgIGZyZWVfbGlzdF8uc2V0VmFsdWUoTlVMTCk7Ci0gICAgZW50cm9weV8gPSBlbnRy
b3B5OwotICB9Ci0KLSAgVCogTmV3KCkgewotICAgIC8vIENvbnN1bHQgZnJlZSBsaXN0Ci0gICAg
dm9pZCogcmVzdWx0OwotICAgIGlmIChmcmVlX2xpc3RfKSB7Ci0gICAgICByZXN1bHQgPSBmcmVl
X2xpc3RfLnZhbHVlKCk7Ci0gICAgICBmcmVlX2xpc3RfID0gU0xMX05leHQoZnJlZV9saXN0Xywg
ZW50cm9weV8pOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoZnJlZV9hdmFpbF8gPCBrQWxpZ25l
ZFNpemUpIHsKLSAgICAgICAgLy8gTmVlZCBtb3JlIHJvb20KLSAgICAgICAgY2hhciogbmV3X2Fs
bG9jYXRpb24gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihNZXRhRGF0YUFsbG9jKGtBbGxvY0lu
Y3JlbWVudCkpOwotICAgICAgICBpZiAoIW5ld19hbGxvY2F0aW9uKQotICAgICAgICAgIENSQVNI
KCk7Ci0KLSAgICAgICAgSGFyZGVuZWRTTEwgbmV3X2hlYWQgPSBIYXJkZW5lZFNMTDo6Y3JlYXRl
KG5ld19hbGxvY2F0aW9uKTsKLSAgICAgICAgU0xMX1NldE5leHQobmV3X2hlYWQsIGFsbG9jYXRl
ZF9yZWdpb25zXywgZW50cm9weV8pOwotICAgICAgICBhbGxvY2F0ZWRfcmVnaW9uc18gPSBuZXdf
aGVhZDsKLSAgICAgICAgZnJlZV9hcmVhXyA9IG5ld19hbGxvY2F0aW9uICsga0FsaWduZWRTaXpl
OwotICAgICAgICBmcmVlX2F2YWlsXyA9IGtBbGxvY0luY3JlbWVudCAtIGtBbGlnbmVkU2l6ZTsK
LSAgICAgIH0KLSAgICAgIHJlc3VsdCA9IGZyZWVfYXJlYV87Ci0gICAgICBmcmVlX2FyZWFfICs9
IGtBbGlnbmVkU2l6ZTsKLSAgICAgIGZyZWVfYXZhaWxfIC09IGtBbGlnbmVkU2l6ZTsKLSAgICB9
Ci0gICAgaW51c2VfKys7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHJlc3VsdCk7
Ci0gIH0KLQotICB2b2lkIERlbGV0ZShUKiBwKSB7Ci0gICAgSGFyZGVuZWRTTEwgbmV3X2hlYWQg
PSBIYXJkZW5lZFNMTDo6Y3JlYXRlKHApOwotICAgIFNMTF9TZXROZXh0KG5ld19oZWFkLCBmcmVl
X2xpc3RfLCBlbnRyb3B5Xyk7Ci0gICAgZnJlZV9saXN0XyA9IG5ld19oZWFkOwotICAgIGludXNl
Xy0tOwotICB9Ci0KLSAgaW50IGludXNlKCkgY29uc3QgeyByZXR1cm4gaW51c2VfOyB9Ci0KLSNp
ZiBkZWZpbmVkKFdURl9DSEFOR0VTKSAmJiBPUyhEQVJXSU4pCi0gIHRlbXBsYXRlIDx0eXBlbmFt
ZSBSZWNvcmRlcj4KLSAgdm9pZCByZWNvcmRBZG1pbmlzdHJhdGl2ZVJlZ2lvbnMoUmVjb3JkZXIm
LCBjb25zdCBSZW1vdGVNZW1vcnlSZWFkZXImKTsKLSNlbmRpZgotfTsKLQotLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotLy8gU3BhbiAtIGEgY29udGlndW91cyBydW4gb2YgcGFnZXMKLS8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotLy8gVHlwZSB0aGF0IGNhbiBob2xkIGEgcGFnZSBudW1iZXIKLXR5cGVkZWYg
dWludHB0cl90IFBhZ2VJRDsKLQotLy8gQ29udmVydCBieXRlIHNpemUgaW50byBwYWdlcy4gIFRo
aXMgd29uJ3Qgb3ZlcmZsb3csIGJ1dCBtYXkgcmV0dXJuCi0vLyBhbiB1bnJlYXNvbmFibHkgbGFy
Z2UgdmFsdWUgaWYgYnl0ZXMgaXMgaHVnZSBlbm91Z2guCi1zdGF0aWMgaW5saW5lIExlbmd0aCBw
YWdlcyhzaXplX3QgYnl0ZXMpIHsKLSAgQVNTRVJUKGtQYWdlU2hpZnQgJiYga051bUNsYXNzZXMg
JiYga1BhZ2VTaXplKTsKLSAgcmV0dXJuIChieXRlcyA+PiBrUGFnZVNoaWZ0KSArCi0gICAgICAo
KGJ5dGVzICYgKGtQYWdlU2l6ZSAtIDEpKSA+IDAgPyAxIDogMCk7Ci19Ci0KLS8vIENvbnZlcnQg
YSB1c2VyIHNpemUgaW50byB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2lsbCBhY3R1YWxseSBi
ZQotLy8gYWxsb2NhdGVkCi1zdGF0aWMgc2l6ZV90IEFsbG9jYXRpb25TaXplKHNpemVfdCBieXRl
cykgewotICBBU1NFUlQoa1BhZ2VTaGlmdCAmJiBrTnVtQ2xhc3NlcyAmJiBrUGFnZVNpemUpOwot
ICBpZiAoYnl0ZXMgPiBrTWF4U2l6ZSkgewotICAgIC8vIExhcmdlIG9iamVjdDogd2UgYWxsb2Nh
dGUgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIHBhZ2VzCi0gICAgQVNTRVJUKGJ5dGVzIDw9IChrTWF4
VmFsaWRQYWdlcyA8PCBrUGFnZVNoaWZ0KSk7Ci0gICAgcmV0dXJuIHBhZ2VzKGJ5dGVzKSA8PCBr
UGFnZVNoaWZ0OwotICB9IGVsc2UgewotICAgIC8vIFNtYWxsIG9iamVjdDogZmluZCB0aGUgc2l6
ZSBjbGFzcyB0byB3aGljaCBpdCBiZWxvbmdzCi0gICAgcmV0dXJuIEJ5dGVTaXplRm9yQ2xhc3Mo
U2l6ZUNsYXNzKGJ5dGVzKSk7Ci0gIH0KLX0KLQotZW51bSB7Ci0gICAga1NwYW5Db29raWVCaXRz
ID0gMTAsCi0gICAga1NwYW5Db29raWVNYXNrID0gKDEgPDwgMTApIC0gMSwKLSAgICBrU3BhblRo
aXNTaGlmdCA9IDcKLX07Ci0KLXN0YXRpYyB1aW50MzJfdCBzcGFuVmFsaWRhdGlvbkNvb2tpZTsK
LXN0YXRpYyB1aW50MzJfdCBzcGFuSW5pdGlhbGl6ZXJDb29raWUoKQotewotICAgIHN0YXRpYyB1
aW50MzJfdCB2YWx1ZSA9IEVudHJvcHlTb3VyY2U8c2l6ZW9mKHVpbnQzMl90KT46OnZhbHVlKCkg
JiBrU3BhbkNvb2tpZU1hc2s7Ci0gICAgc3BhblZhbGlkYXRpb25Db29raWUgPSB2YWx1ZTsKLSAg
ICByZXR1cm4gdmFsdWU7Ci19Ci0KLS8vIEluZm9ybWF0aW9uIGtlcHQgZm9yIGEgc3BhbiAoYSBj
b250aWd1b3VzIHJ1biBvZiBwYWdlcykuCi1zdHJ1Y3QgU3BhbiB7Ci0gIFBhZ2VJRCAgICAgICAg
c3RhcnQ7ICAgICAgICAgIC8vIFN0YXJ0aW5nIHBhZ2UgbnVtYmVyCi0gIExlbmd0aCAgICAgICAg
bGVuZ3RoOyAgICAgICAgIC8vIE51bWJlciBvZiBwYWdlcyBpbiBzcGFuCi0gIFNwYW4qIG5leHQo
dWludHB0cl90IGVudHJvcHkpIGNvbnN0IHsgcmV0dXJuIFhPUl9NQVNLX1BUUl9XSVRIX0tFWSht
X25leHQsIHRoaXMsIGVudHJvcHkpOyB9Ci0gIFNwYW4qIHJlbW90ZU5leHQoY29uc3QgU3Bhbiog
cmVtb3RlU3BhblBvaW50ZXIsIHVpbnRwdHJfdCBlbnRyb3B5KSBjb25zdCB7IHJldHVybiBYT1Jf
TUFTS19QVFJfV0lUSF9LRVkobV9uZXh0LCByZW1vdGVTcGFuUG9pbnRlciwgZW50cm9weSk7IH0K
LSAgU3BhbiogcHJldih1aW50cHRyX3QgZW50cm9weSkgY29uc3QgeyByZXR1cm4gWE9SX01BU0tf
UFRSX1dJVEhfS0VZKG1fcHJldiwgdGhpcywgZW50cm9weSk7IH0KLSAgdm9pZCBzZXROZXh0KFNw
YW4qIG5leHQsIHVpbnRwdHJfdCBlbnRyb3B5KSB7IG1fbmV4dCA9IFhPUl9NQVNLX1BUUl9XSVRI
X0tFWShuZXh0LCB0aGlzLCBlbnRyb3B5KTsgfQotICB2b2lkIHNldFByZXYoU3BhbiogcHJldiwg
dWludHB0cl90IGVudHJvcHkpIHsgbV9wcmV2ID0gWE9SX01BU0tfUFRSX1dJVEhfS0VZKHByZXYs
IHRoaXMsIGVudHJvcHkpOyB9Ci0KLXByaXZhdGU6Ci0gIFNwYW4qICAgICAgICAgbV9uZXh0OyAg
ICAgICAgICAgLy8gVXNlZCB3aGVuIGluIGxpbmsgbGlzdAotICBTcGFuKiAgICAgICAgIG1fcHJl
djsgICAgICAgICAgIC8vIFVzZWQgd2hlbiBpbiBsaW5rIGxpc3QKLXB1YmxpYzoKLSAgSGFyZGVu
ZWRTTEwgICAgb2JqZWN0czsgICAgICAgIC8vIExpbmtlZCBsaXN0IG9mIGZyZWUgb2JqZWN0cwot
ICB1bnNpZ25lZCBpbnQgIGZyZWUgOiAxOyAgICAgICAvLyBJcyB0aGUgc3BhbiBmcmVlCi0jaWZu
ZGVmIE5PX1RDTUFMTE9DX1NBTVBMRVMKLSAgdW5zaWduZWQgaW50ICBzYW1wbGUgOiAxOyAgICAg
Ly8gU2FtcGxlZCBvYmplY3Q/Ci0jZW5kaWYKLSAgdW5zaWduZWQgaW50ICBzaXplY2xhc3MgOiA4
OyAgLy8gU2l6ZS1jbGFzcyBmb3Igc21hbGwgb2JqZWN0cyAob3IgMCkKLSAgdW5zaWduZWQgaW50
ICByZWZjb3VudCA6IDExOyAgLy8gTnVtYmVyIG9mIG5vbi1mcmVlIG9iamVjdHMKLSAgYm9vbCBk
ZWNvbW1pdHRlZCA6IDE7Ci0gIHZvaWQgaW5pdENvb2tpZSgpCi0gIHsKLSAgICAgIG1fY29va2ll
ID0gKChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odGhpcykgPj4ga1NwYW5UaGlzU2hpZnQp
ICYga1NwYW5Db29raWVNYXNrKSBeIHNwYW5Jbml0aWFsaXplckNvb2tpZSgpOwotICB9Ci0gIHZv
aWQgY2xlYXJDb29raWUoKSB7IG1fY29va2llID0gMDsgfQotICBib29sIGlzVmFsaWQoKSBjb25z
dAotICB7Ci0gICAgICByZXR1cm4gKCgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHRoaXMp
ID4+IGtTcGFuVGhpc1NoaWZ0KSAmIGtTcGFuQ29va2llTWFzaykgXiBtX2Nvb2tpZSkgPT0gc3Bh
blZhbGlkYXRpb25Db29raWU7Ci0gIH0KLXByaXZhdGU6Ci0gIHVpbnQzMl90IG1fY29va2llIDog
a1NwYW5Db29raWVCaXRzOwotCi0jdW5kZWYgU1BBTl9ISVNUT1JZCi0jaWZkZWYgU1BBTl9ISVNU
T1JZCi0gIC8vIEZvciBkZWJ1Z2dpbmcsIHdlIGNhbiBrZWVwIGEgbG9nIGV2ZW50cyBwZXIgc3Bh
bgotICBpbnQgbmV4dGhpc3Rvcnk7Ci0gIGNoYXIgaGlzdG9yeVs2NF07Ci0gIGludCB2YWx1ZVs2
NF07Ci0jZW5kaWYKLX07Ci0KLSNkZWZpbmUgQVNTRVJUX1NQQU5fQ09NTUlUVEVEKHNwYW4pIEFT
U0VSVCghc3Bhbi0+ZGVjb21taXR0ZWQpCi0KLSNpZmRlZiBTUEFOX0hJU1RPUlkKLXZvaWQgRXZl
bnQoU3Bhbiogc3BhbiwgY2hhciBvcCwgaW50IHYgPSAwKSB7Ci0gIHNwYW4tPmhpc3Rvcnlbc3Bh
bi0+bmV4dGhpc3RvcnldID0gb3A7Ci0gIHNwYW4tPnZhbHVlW3NwYW4tPm5leHRoaXN0b3J5XSA9
IHY7Ci0gIHNwYW4tPm5leHRoaXN0b3J5Kys7Ci0gIGlmIChzcGFuLT5uZXh0aGlzdG9yeSA9PSBz
aXplb2Yoc3Bhbi0+aGlzdG9yeSkpIHNwYW4tPm5leHRoaXN0b3J5ID0gMDsKLX0KLSNlbHNlCi0j
ZGVmaW5lIEV2ZW50KHMsbyx2KSAoKHZvaWQpIDApCi0jZW5kaWYKLQotLy8gQWxsb2NhdG9yL2Rl
YWxsb2NhdG9yIGZvciBzcGFucwotc3RhdGljIFBhZ2VIZWFwQWxsb2NhdG9yPFNwYW4+IHNwYW5f
YWxsb2NhdG9yOwotc3RhdGljIFNwYW4qIE5ld1NwYW4oUGFnZUlEIHAsIExlbmd0aCBsZW4pIHsK
LSAgU3BhbiogcmVzdWx0ID0gc3Bhbl9hbGxvY2F0b3IuTmV3KCk7Ci0gIG1lbXNldChyZXN1bHQs
IDAsIHNpemVvZigqcmVzdWx0KSk7Ci0gIHJlc3VsdC0+c3RhcnQgPSBwOwotICByZXN1bHQtPmxl
bmd0aCA9IGxlbjsKLSAgcmVzdWx0LT5pbml0Q29va2llKCk7Ci0jaWZkZWYgU1BBTl9ISVNUT1JZ
Ci0gIHJlc3VsdC0+bmV4dGhpc3RvcnkgPSAwOwotI2VuZGlmCi0gIHJldHVybiByZXN1bHQ7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBEZWxldGVTcGFuKFNwYW4qIHNwYW4pIHsKLSAgUkVMRUFT
RV9BU1NFUlQoc3Bhbi0+aXNWYWxpZCgpKTsKLSNpZm5kZWYgTkRFQlVHCi0gIC8vIEluIGRlYnVn
IG1vZGUsIHRyYXNoIHRoZSBjb250ZW50cyBvZiBkZWxldGVkIFNwYW5zCi0gIG1lbXNldChzcGFu
LCAweDNmLCBzaXplb2YoKnNwYW4pKTsKLSNlbmRpZgotICBzcGFuLT5jbGVhckNvb2tpZSgpOwot
ICBzcGFuX2FsbG9jYXRvci5EZWxldGUoc3Bhbik7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LS8vIERvdWJseSBsaW5rZWQgbGlzdCBvZiBzcGFucy4KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
c3RhdGljIGlubGluZSB2b2lkIERMTF9Jbml0KFNwYW4qIGxpc3QsIHVpbnRwdHJfdCBlbnRyb3B5
KSB7Ci0gIGxpc3QtPnNldE5leHQobGlzdCwgZW50cm9weSk7Ci0gIGxpc3QtPnNldFByZXYobGlz
dCwgZW50cm9weSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBETExfUmVtb3ZlKFNwYW4qIHNw
YW4sIHVpbnRwdHJfdCBlbnRyb3B5KSB7Ci0gIHNwYW4tPnByZXYoZW50cm9weSktPnNldE5leHQo
c3Bhbi0+bmV4dChlbnRyb3B5KSwgZW50cm9weSk7Ci0gIHNwYW4tPm5leHQoZW50cm9weSktPnNl
dFByZXYoc3Bhbi0+cHJldihlbnRyb3B5KSwgZW50cm9weSk7Ci0gIHNwYW4tPnNldFByZXYoTlVM
TCwgZW50cm9weSk7Ci0gIHNwYW4tPnNldE5leHQoTlVMTCwgZW50cm9weSk7Ci19Ci0KLXN0YXRp
YyBBTFdBWVNfSU5MSU5FIGJvb2wgRExMX0lzRW1wdHkoY29uc3QgU3BhbiogbGlzdCwgdWludHB0
cl90IGVudHJvcHkpIHsKLSAgcmV0dXJuIGxpc3QtPm5leHQoZW50cm9weSkgPT0gbGlzdDsKLX0K
LQotc3RhdGljIGludCBETExfTGVuZ3RoKGNvbnN0IFNwYW4qIGxpc3QsIHVpbnRwdHJfdCBlbnRy
b3B5KSB7Ci0gIGludCByZXN1bHQgPSAwOwotICBmb3IgKFNwYW4qIHMgPSBsaXN0LT5uZXh0KGVu
dHJvcHkpOyBzICE9IGxpc3Q7IHMgPSBzLT5uZXh0KGVudHJvcHkpKSB7Ci0gICAgcmVzdWx0Kys7
Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotI2lmIDAgLyogTm90IG5lZWRlZCBhdCB0aGUg
bW9tZW50IC0tIGNhdXNlcyBjb21waWxlciB3YXJuaW5ncyBpZiBub3QgdXNlZCAqLwotc3RhdGlj
IHZvaWQgRExMX1ByaW50KGNvbnN0IGNoYXIqIGxhYmVsLCBjb25zdCBTcGFuKiBsaXN0KSB7Ci0g
IE1FU1NBR0UoIiUtMTBzICVwOiIsIGxhYmVsLCBsaXN0KTsKLSAgZm9yIChjb25zdCBTcGFuKiBz
ID0gbGlzdC0+bmV4dDsgcyAhPSBsaXN0OyBzID0gcy0+bmV4dCkgewotICAgIE1FU1NBR0UoIiA8
JXAsJXUsJXU+Iiwgcywgcy0+c3RhcnQsIHMtPmxlbmd0aCk7Ci0gIH0KLSAgTUVTU0FHRSgiXG4i
KTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHZvaWQgRExMX1ByZXBlbmQoU3BhbiogbGlz
dCwgU3Bhbiogc3BhbiwgdWludHB0cl90IGVudHJvcHkpIHsKLSAgc3Bhbi0+c2V0TmV4dChsaXN0
LT5uZXh0KGVudHJvcHkpLCBlbnRyb3B5KTsKLSAgc3Bhbi0+c2V0UHJldihsaXN0LCBlbnRyb3B5
KTsKLSAgbGlzdC0+bmV4dChlbnRyb3B5KS0+c2V0UHJldihzcGFuLCBlbnRyb3B5KTsKLSAgbGlz
dC0+c2V0TmV4dChzcGFuLCBlbnRyb3B5KTsKLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBEYXRhIGtl
cHQgcGVyIHNpemUtY2xhc3MgaW4gY2VudHJhbCBjYWNoZQotLy8tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsYXNz
IFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3QgewotIHB1YmxpYzoKLSAgdm9pZCBJbml0KHNpemVf
dCBjbCwgdWludHB0cl90IGVudHJvcHkpOwotCi0gIC8vIFRoZXNlIG1ldGhvZHMgYWxsIGRvIGlu
dGVybmFsIGxvY2tpbmcuCi0KLSAgLy8gSW5zZXJ0IHRoZSBzcGVjaWZpZWQgcmFuZ2UgaW50byB0
aGUgY2VudHJhbCBmcmVlbGlzdC4gIE4gaXMgdGhlIG51bWJlciBvZgotICAvLyBlbGVtZW50cyBp
biB0aGUgcmFuZ2UuCi0gIHZvaWQgSW5zZXJ0UmFuZ2UoSGFyZGVuZWRTTEwgc3RhcnQsIEhhcmRl
bmVkU0xMIGVuZCwgaW50IE4pOwotCi0gIC8vIFJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgb2Yg
ZmV0Y2hlZCBlbGVtZW50cyBpbnRvIE4uCi0gIHZvaWQgUmVtb3ZlUmFuZ2UoSGFyZGVuZWRTTEwq
IHN0YXJ0LCBIYXJkZW5lZFNMTCogZW5kLCBpbnQgKk4pOwotCi0gIC8vIFJldHVybnMgdGhlIG51
bWJlciBvZiBmcmVlIG9iamVjdHMgaW4gY2FjaGUuCi0gIHNpemVfdCBsZW5ndGgoKSB7Ci0gICAg
U3BpbkxvY2tIb2xkZXIgaCgmbG9ja18pOwotICAgIHJldHVybiBjb3VudGVyXzsKLSAgfQotCi0g
IC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBmcmVlIG9iamVjdHMgaW4gdGhlIHRyYW5zZmVyIGNh
Y2hlLgotICBpbnQgdGNfbGVuZ3RoKCkgewotICAgIFNwaW5Mb2NrSG9sZGVyIGgoJmxvY2tfKTsK
LSAgICByZXR1cm4gdXNlZF9zbG90c18gKiBudW1fb2JqZWN0c190b19tb3ZlW3NpemVfY2xhc3Nf
XTsKLSAgfQotCi0jaWZkZWYgV1RGX0NIQU5HRVMKLSAgdGVtcGxhdGUgPGNsYXNzIEZpbmRlciwg
Y2xhc3MgUmVhZGVyPgotICB2b2lkIGVudW1lcmF0ZUZyZWVPYmplY3RzKEZpbmRlciYgZmluZGVy
LCBjb25zdCBSZWFkZXImIHJlYWRlciwgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdCogcmVtb3Rl
Q2VudHJhbEZyZWVMaXN0KQotICB7Ci0gICAgewotICAgICAgc3RhdGljIGNvbnN0IHB0cmRpZmZf
dCBlbXB0eU9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KCZlbXB0eV8pIC0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4odGhpcyk7Ci0gICAgICBTcGFuKiByZW1vdGVF
bXB0eSA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3Bhbio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJl
bW90ZUNlbnRyYWxGcmVlTGlzdCkgKyBlbXB0eU9mZnNldCk7Ci0gICAgICBTcGFuKiByZW1vdGVT
cGFuID0gbm9uZW1wdHlfLnJlbW90ZU5leHQocmVtb3RlRW1wdHksIGVudHJvcHlfKTsKLSAgICAg
IGZvciAoU3Bhbiogc3BhbiA9IHJlYWRlcihyZW1vdGVFbXB0eSk7IHNwYW4gJiYgc3BhbiAhPSAm
ZW1wdHlfOyByZW1vdGVTcGFuID0gc3Bhbi0+cmVtb3RlTmV4dChyZW1vdGVTcGFuLCBlbnRyb3B5
XyksIHNwYW4gPSAocmVtb3RlU3BhbiA/IHJlYWRlcihyZW1vdGVTcGFuKSA6IDApKQotICAgICAg
ICBBU1NFUlQoIXNwYW4tPm9iamVjdHMpOwotICAgIH0KLQotICAgIEFTU0VSVCghbm9uZW1wdHlf
Lm9iamVjdHMpOwotICAgIHN0YXRpYyBjb25zdCBwdHJkaWZmX3Qgbm9uZW1wdHlPZmZzZXQgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPigmbm9uZW1wdHlfKSAtIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KHRoaXMpOwotCi0gICAgU3BhbiogcmVtb3RlTm9uZW1wdHkgPSByZWlu
dGVycHJldF9jYXN0PFNwYW4qPihyZWludGVycHJldF9jYXN0PGNoYXIqPihyZW1vdGVDZW50cmFs
RnJlZUxpc3QpICsgbm9uZW1wdHlPZmZzZXQpOwotICAgIFNwYW4qIHJlbW90ZVNwYW4gPSBub25l
bXB0eV8ucmVtb3RlTmV4dChyZW1vdGVOb25lbXB0eSwgZW50cm9weV8pOwotCi0gICAgZm9yIChT
cGFuKiBzcGFuID0gcmVhZGVyKHJlbW90ZVNwYW4pOyBzcGFuICYmIHJlbW90ZVNwYW4gIT0gcmVt
b3RlTm9uZW1wdHk7IHJlbW90ZVNwYW4gPSBzcGFuLT5yZW1vdGVOZXh0KHJlbW90ZVNwYW4sIGVu
dHJvcHlfKSwgc3BhbiA9IChyZW1vdGVTcGFuID8gcmVhZGVyKHJlbW90ZVNwYW4pIDogMCkpIHsK
LSAgICAgIGZvciAoSGFyZGVuZWRTTEwgbmV4dE9iamVjdCA9IHNwYW4tPm9iamVjdHM7IG5leHRP
YmplY3Q7IG5leHRPYmplY3Quc2V0VmFsdWUocmVhZGVyLm5leHRFbnRyeUluSGFyZGVuZWRMaW5r
ZWRMaXN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihuZXh0T2JqZWN0LnZhbHVlKCkpLCBlbnRy
b3B5XykpKSB7Ci0gICAgICAgIGZpbmRlci52aXNpdChuZXh0T2JqZWN0LnZhbHVlKCkpOwotICAg
ICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IHNsb3QgPSAwOyBzbG90IDwgdXNlZF9zbG90c187
ICsrc2xvdCkgewotICAgICAgZm9yIChIYXJkZW5lZFNMTCBlbnRyeSA9IHRjX3Nsb3RzX1tzbG90
XS5oZWFkOyBlbnRyeTsgZW50cnkuc2V0VmFsdWUocmVhZGVyLm5leHRFbnRyeUluSGFyZGVuZWRM
aW5rZWRMaXN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihlbnRyeS52YWx1ZSgpKSwgZW50cm9w
eV8pKSkKLSAgICAgICAgZmluZGVyLnZpc2l0KGVudHJ5LnZhbHVlKCkpOwotICAgIH0KLSAgfQot
I2VuZGlmCi0KLSAgdWludHB0cl90IGVudHJvcHkoKSBjb25zdCB7IHJldHVybiBlbnRyb3B5Xzsg
fQotIHByaXZhdGU6Ci0gIC8vIFJFUVVJUkVTOiBsb2NrXyBpcyBoZWxkCi0gIC8vIFJlbW92ZSBv
YmplY3QgZnJvbSBjYWNoZSBhbmQgcmV0dXJuLgotICAvLyBSZXR1cm4gTlVMTCBpZiBubyBmcmVl
IGVudHJpZXMgaW4gY2FjaGUuCi0gIEhhcmRlbmVkU0xMIEZldGNoRnJvbVNwYW5zKCk7Ci0KLSAg
Ly8gUkVRVUlSRVM6IGxvY2tfIGlzIGhlbGQKLSAgLy8gUmVtb3ZlIG9iamVjdCBmcm9tIGNhY2hl
IGFuZCByZXR1cm4uICBGZXRjaGVzCi0gIC8vIGZyb20gcGFnZWhlYXAgaWYgY2FjaGUgaXMgZW1w
dHkuICBPbmx5IHJldHVybnMKLSAgLy8gTlVMTCBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCi0gIEhh
cmRlbmVkU0xMIEZldGNoRnJvbVNwYW5zU2FmZSgpOwotCi0gIC8vIFJFUVVJUkVTOiBsb2NrXyBp
cyBoZWxkCi0gIC8vIFJlbGVhc2UgYSBsaW5rZWQgbGlzdCBvZiBvYmplY3RzIHRvIHNwYW5zLgot
ICAvLyBNYXkgdGVtcG9yYXJpbHkgcmVsZWFzZSBsb2NrXy4KLSAgdm9pZCBSZWxlYXNlTGlzdFRv
U3BhbnMoSGFyZGVuZWRTTEwgc3RhcnQpOwotCi0gIC8vIFJFUVVJUkVTOiBsb2NrXyBpcyBoZWxk
Ci0gIC8vIFJlbGVhc2UgYW4gb2JqZWN0IHRvIHNwYW5zLgotICAvLyBNYXkgdGVtcG9yYXJpbHkg
cmVsZWFzZSBsb2NrXy4KLSAgQUxXQVlTX0lOTElORSB2b2lkIFJlbGVhc2VUb1NwYW5zKEhhcmRl
bmVkU0xMIG9iamVjdCk7Ci0KLSAgLy8gUkVRVUlSRVM6IGxvY2tfIGlzIGhlbGQKLSAgLy8gUG9w
dWxhdGUgY2FjaGUgYnkgZmV0Y2hpbmcgZnJvbSB0aGUgcGFnZSBoZWFwLgotICAvLyBNYXkgdGVt
cG9yYXJpbHkgcmVsZWFzZSBsb2NrXy4KLSAgQUxXQVlTX0lOTElORSB2b2lkIFBvcHVsYXRlKCk7
Ci0KLSAgLy8gUkVRVUlSRVM6IGxvY2sgaXMgaGVsZC4KLSAgLy8gVHJpZXMgdG8gbWFrZSByb29t
IGZvciBhIFRDRW50cnkuICBJZiB0aGUgY2FjaGUgaXMgZnVsbCBpdCB3aWxsIHRyeSB0bwotICAv
LyBleHBhbmQgaXQgYXQgdGhlIGNvc3Qgb2Ygc29tZSBvdGhlciBjYWNoZSBzaXplLiAgUmV0dXJu
IGZhbHNlIGlmIHRoZXJlIGlzCi0gIC8vIG5vIHNwYWNlLgotICBib29sIE1ha2VDYWNoZVNwYWNl
KCk7Ci0KLSAgLy8gUkVRVUlSRVM6IGxvY2tfIGZvciBsb2NrZWRfc2l6ZV9jbGFzcyBpcyBoZWxk
LgotICAvLyBQaWNrcyBhICJyYW5kb20iIHNpemUgY2xhc3MgdG8gc3RlYWwgVENFbnRyeSBzbG90
IGZyb20uICBJbiByZWFsaXR5IGl0Ci0gIC8vIGp1c3QgaXRlcmF0ZXMgb3ZlciB0aGUgc2l6ZWNs
YXNzZXMgYnV0IGRvZXMgc28gd2l0aG91dCB0YWtpbmcgYSBsb2NrLgotICAvLyBSZXR1cm5zIHRy
dWUgb24gc3VjY2Vzcy4KLSAgLy8gTWF5IHRlbXBvcmFyaWx5IGxvY2sgYSAicmFuZG9tIiBzaXpl
IGNsYXNzLgotICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIEV2aWN0UmFuZG9tU2l6ZUNsYXNz
KHNpemVfdCBsb2NrZWRfc2l6ZV9jbGFzcywgYm9vbCBmb3JjZSk7Ci0KLSAgLy8gUkVRVUlSRVM6
IGxvY2tfIGlzICpub3QqIGhlbGQuCi0gIC8vIFRyaWVzIHRvIHNocmluayB0aGUgQ2FjaGUuICBJ
ZiBmb3JjZSBpcyB0cnVlIGl0IHdpbGwgcmVsYXNlIG9iamVjdHMgdG8KLSAgLy8gc3BhbnMgaWYg
aXQgYWxsb3dzIGl0IHRvIHNocmluayB0aGUgY2FjaGUuICBSZXR1cm4gZmFsc2UgaWYgaXQgZmFp
bGVkIHRvCi0gIC8vIHNocmluayB0aGUgY2FjaGUuICBEZWNyZW1lbnRzIGNhY2hlX3NpemVfIG9u
IHN1Y2NlZXNzLgotICAvLyBNYXkgdGVtcG9yYXJpbHkgdGFrZSBsb2NrXy4gIElmIGl0IHRha2Vz
IGxvY2tfLCB0aGUgbG9ja2VkX3NpemVfY2xhc3MKLSAgLy8gbG9jayBpcyByZWxlYXNlZCB0byB0
aGUgdGhyZWFkIGZyb20gaG9sZGluZyB0d28gc2l6ZSBjbGFzcyBsb2NrcwotICAvLyBjb25jdXJy
ZW50bHkgd2hpY2ggY291bGQgbGVhZCB0byBhIGRlYWRsb2NrLgotICBib29sIFNocmlua0NhY2hl
KGludCBsb2NrZWRfc2l6ZV9jbGFzcywgYm9vbCBmb3JjZSk7Ci0KLSAgLy8gVGhpcyBsb2NrIHBy
b3RlY3RzIGFsbCB0aGUgZGF0YSBtZW1iZXJzLiAgY2FjaGVkX2VudHJpZXMgYW5kIGNhY2hlX3Np
emVfCi0gIC8vIG1heSBiZSBsb29rZWQgYXQgd2l0aG91dCBob2xkaW5nIHRoZSBsb2NrLgotICBT
cGluTG9jayBsb2NrXzsKLQotICAvLyBXZSBrZWVwIGxpbmtlZCBsaXN0cyBvZiBlbXB0eSBhbmQg
bm9uLWVtcHR5IHNwYW5zLgotICBzaXplX3QgICBzaXplX2NsYXNzXzsgICAgIC8vIE15IHNpemUg
Y2xhc3MKLSAgU3BhbiAgICAgZW1wdHlfOyAgICAgICAgICAvLyBEdW1teSBoZWFkZXIgZm9yIGxp
c3Qgb2YgZW1wdHkgc3BhbnMKLSAgU3BhbiAgICAgbm9uZW1wdHlfOyAgICAgICAvLyBEdW1teSBo
ZWFkZXIgZm9yIGxpc3Qgb2Ygbm9uLWVtcHR5IHNwYW5zCi0gIHNpemVfdCAgIGNvdW50ZXJfOyAg
ICAgICAgLy8gTnVtYmVyIG9mIGZyZWUgb2JqZWN0cyBpbiBjYWNoZSBlbnRyeQotCi0gIC8vIEhl
cmUgd2UgcmVzZXJ2ZSBzcGFjZSBmb3IgVENFbnRyeSBjYWNoZSBzbG90cy4gIFNpbmNlIG9uZSBz
aXplIGNsYXNzIGNhbgotICAvLyBlbmQgdXAgZ2V0dGluZyBhbGwgdGhlIFRDRW50cmllcyBxdW90
YSBpbiB0aGUgc3lzdGVtIHdlIGp1c3QgcHJlYWxsb2NhdGUKLSAgLy8gc3VmZmljaWVudCBudW1i
ZXIgb2YgZW50cmllcyBoZXJlLgotICBUQ0VudHJ5IHRjX3Nsb3RzX1tLX05VTV9UUkFOU0ZFUl9F
TlRSSUVTX01BWF07Ci0KLSAgLy8gTnVtYmVyIG9mIGN1cnJlbnRseSB1c2VkIGNhY2hlZCBlbnRy
aWVzIGluIHRjX3Nsb3RzXy4gIFRoaXMgdmFyaWFibGUgaXMKLSAgLy8gdXBkYXRlZCB1bmRlciBh
IGxvY2sgYnV0IGNhbiBiZSByZWFkIHdpdGhvdXQgb25lLgotICBpbnQzMl90IHVzZWRfc2xvdHNf
OwotICAvLyBUaGUgY3VycmVudCBudW1iZXIgb2Ygc2xvdHMgZm9yIHRoaXMgc2l6ZSBjbGFzcy4g
IFRoaXMgaXMgYW4KLSAgLy8gYWRhcHRpdmUgdmFsdWUgdGhhdCBpcyBpbmNyZWFzZWQgaWYgdGhl
cmUgaXMgbG90cyBvZiB0cmFmZmljCi0gIC8vIG9uIGEgZ2l2ZW4gc2l6ZSBjbGFzcy4KLSAgaW50
MzJfdCBjYWNoZV9zaXplXzsKLSAgdWludHB0cl90IGVudHJvcHlfOwotfTsKLQotI2lmIENPTVBJ
TEVSKENMQU5HKSAmJiBkZWZpbmVkKF9faGFzX3dhcm5pbmcpCi0jcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgcHVzaAotI2lmIF9faGFzX3dhcm5pbmcoIi1XdW51c2VkLXByaXZhdGUtZmllbGQiKQot
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXByaXZhdGUtZmllbGQi
Ci0jZW5kaWYKLSNlbmRpZgotCi0vLyBQYWQgZWFjaCBDZW50cmFsQ2FjaGUgb2JqZWN0IHRvIG11
bHRpcGxlIG9mIDY0IGJ5dGVzCi10ZW1wbGF0ZSA8c2l6ZV90IFNpemVUb1BhZD4KLWNsYXNzIFRD
TWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWRfVGVtcGxhdGUgOiBwdWJsaWMgVENNYWxsb2Nf
Q2VudHJhbF9GcmVlTGlzdCB7Ci1wcml2YXRlOgotICAgIGNoYXIgcGFkWzY0IC0gU2l6ZVRvUGFk
XTsKLX07Ci0KLS8vIFplcm8tc2l6ZSBzcGVjaWFsaXphdGlvbiB0byBhdm9pZCBjb21waWxlciBl
cnJvciB3aGVuIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3QgaGFwcGVucwotLy8gdG8gYmUgZXhh
Y3RseSA2NCBieXRlcy4KLXRlbXBsYXRlIDw+IGNsYXNzIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxp
c3RQYWRkZWRfVGVtcGxhdGU8MD4gOiBwdWJsaWMgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdCB7
Ci19OwotCi10eXBlZGVmIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWRfVGVtcGxhdGU8
c2l6ZW9mKFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3QpICUgNjQ+IFRDTWFsbG9jX0NlbnRyYWxf
RnJlZUxpc3RQYWRkZWQ7Ci0KLSNpZiBDT01QSUxFUihDTEFORykgJiYgZGVmaW5lZChfX2hhc193
YXJuaW5nKQotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAotI2VuZGlmCi0KLSNpZiBPUyhE
QVJXSU4pCi1zdHJ1Y3QgU3BhbjsKLWNsYXNzIFRDTWFsbG9jX1BhZ2VIZWFwOwotY2xhc3MgVENN
YWxsb2NfVGhyZWFkQ2FjaGU7Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUGFnZUhlYXBB
bGxvY2F0b3I7Ci0KLWNsYXNzIEZhc3RNYWxsb2Nab25lIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
dm9pZCBpbml0KCk7Ci0KLSAgICBzdGF0aWMga2Vybl9yZXR1cm5fdCBlbnVtZXJhdGUodGFza190
LCB2b2lkKiwgdW5zaWduZWQgdHlwZU1tYXNrLCB2bV9hZGRyZXNzX3Qgem9uZUFkZHJlc3MsIG1l
bW9yeV9yZWFkZXJfdCwgdm1fcmFuZ2VfcmVjb3JkZXJfdCk7Ci0gICAgc3RhdGljIHNpemVfdCBn
b29kU2l6ZShtYWxsb2Nfem9uZV90Kiwgc2l6ZV90IHNpemUpIHsgcmV0dXJuIHNpemU7IH0KLSAg
ICBzdGF0aWMgYm9vbGVhbl90IGNoZWNrKG1hbGxvY196b25lX3QqKSB7IHJldHVybiB0cnVlOyB9
Ci0gICAgc3RhdGljIHZvaWQgIHByaW50KG1hbGxvY196b25lX3QqLCBib29sZWFuX3QpIHsgfQot
ICAgIHN0YXRpYyB2b2lkIGxvZyhtYWxsb2Nfem9uZV90Kiwgdm9pZCopIHsgfQotICAgIHN0YXRp
YyB2b2lkIGZvcmNlTG9jayhtYWxsb2Nfem9uZV90KikgeyB9Ci0gICAgc3RhdGljIHZvaWQgZm9y
Y2VVbmxvY2sobWFsbG9jX3pvbmVfdCopIHsgfQotICAgIHN0YXRpYyB2b2lkIHN0YXRpc3RpY3Mo
bWFsbG9jX3pvbmVfdCosIG1hbGxvY19zdGF0aXN0aWNzX3QqIHN0YXRzKSB7IG1lbXNldChzdGF0
cywgMCwgc2l6ZW9mKG1hbGxvY19zdGF0aXN0aWNzX3QpKTsgfQotCi1wcml2YXRlOgotICAgIEZh
c3RNYWxsb2Nab25lKFRDTWFsbG9jX1BhZ2VIZWFwKiwgVENNYWxsb2NfVGhyZWFkQ2FjaGUqKiwg
VENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdFBhZGRlZCosIFBhZ2VIZWFwQWxsb2NhdG9yPFNwYW4+
KiwgUGFnZUhlYXBBbGxvY2F0b3I8VENNYWxsb2NfVGhyZWFkQ2FjaGU+Kik7Ci0gICAgc3RhdGlj
IHNpemVfdCBzaXplKG1hbGxvY196b25lX3QqLCBjb25zdCB2b2lkKik7Ci0gICAgc3RhdGljIHZv
aWQqIHpvbmVNYWxsb2MobWFsbG9jX3pvbmVfdCosIHNpemVfdCk7Ci0gICAgc3RhdGljIHZvaWQq
IHpvbmVDYWxsb2MobWFsbG9jX3pvbmVfdCosIHNpemVfdCBudW1JdGVtcywgc2l6ZV90IHNpemUp
OwotICAgIHN0YXRpYyB2b2lkIHpvbmVGcmVlKG1hbGxvY196b25lX3QqLCB2b2lkKik7Ci0gICAg
c3RhdGljIHZvaWQqIHpvbmVSZWFsbG9jKG1hbGxvY196b25lX3QqLCB2b2lkKiwgc2l6ZV90KTsK
LSAgICBzdGF0aWMgdm9pZCogem9uZVZhbGxvYyhtYWxsb2Nfem9uZV90Kiwgc2l6ZV90KSB7IExP
R19FUlJPUigidmFsbG9jIGlzIG5vdCBzdXBwb3J0ZWQiKTsgcmV0dXJuIDA7IH0KLSAgICBzdGF0
aWMgdm9pZCB6b25lRGVzdHJveShtYWxsb2Nfem9uZV90KikgeyB9Ci0KLSAgICBtYWxsb2Nfem9u
ZV90IG1fem9uZTsKLSAgICBUQ01hbGxvY19QYWdlSGVhcCogbV9wYWdlSGVhcDsKLSAgICBUQ01h
bGxvY19UaHJlYWRDYWNoZSoqIG1fdGhyZWFkSGVhcHM7Ci0gICAgVENNYWxsb2NfQ2VudHJhbF9G
cmVlTGlzdFBhZGRlZCogbV9jZW50cmFsQ2FjaGVzOwotICAgIFBhZ2VIZWFwQWxsb2NhdG9yPFNw
YW4+KiBtX3NwYW5BbGxvY2F0b3I7Ci0gICAgUGFnZUhlYXBBbGxvY2F0b3I8VENNYWxsb2NfVGhy
ZWFkQ2FjaGU+KiBtX3BhZ2VIZWFwQWxsb2NhdG9yOwotfTsKLQotLy8gVGhpcyBtZXRob2QgZGVj
bGFyYXRpb24sIGFuZCB0aGUgY29uc3RhbnRzIGJlbG93LCBhcmUgdGFrZW4gZnJvbSBMaWJjL2dl
bi9tYWxsb2MuYy4KLWV4dGVybiAiQyIgdm9pZCAoKm1hbGxvY19sb2dnZXIpKHVpbnQzMl90IHR5
cGVGbGFncywgdWludHB0cl90IHpvbmUsIHVpbnRwdHJfdCBzaXplLCB1aW50cHRyX3QgcG9pbnRl
ciwgdWludHB0cl90IHJldHVyblZhbHVlLCB1aW50MzJfdCBudW1iZXJPZkZyYW1lc1RvU2tpcCk7
Ci0KLSNlbmRpZgotCi1jbGFzcyBNYWxsb2NIb29rIHsKLSAgICBzdGF0aWMgYm9vbCBzdGFja0xv
Z2dpbmdFbmFibGVkOwotCi0jaWYgT1MoREFSV0lOKQotICAgIAotICAgIGVudW0gU3RhY2tMb2dn
aW5nVHlwZSB7Ci0gICAgICAgIFN0YWNrTG9nZ2luZ1R5cGVBbGxvYyA9IDIsCi0gICAgICAgIFN0
YWNrTG9nZ2luZ1R5cGVEZWFsbG9jID0gNCwKLSAgICB9OwotCi0gICAgc3RhdGljIHZvaWQgcmVj
b3JkKHVpbnQzMl90IHR5cGVGbGFncywgdWludHB0cl90IHpvbmUsIHVpbnRwdHJfdCBzaXplLCB2
b2lkKiBwb2ludGVyLCB2b2lkKiByZXR1cm5WYWx1ZSwgdWludDMyX3QgbnVtYmVyT2ZGcmFtZXNU
b1NraXApCi0gICAgewotICAgICAgICBtYWxsb2NfbG9nZ2VyKHR5cGVGbGFncywgem9uZSwgc2l6
ZSwgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBvaW50ZXIpLCByZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4ocmV0dXJuVmFsdWUpLCBudW1iZXJPZkZyYW1lc1RvU2tpcCk7Ci0gICAgfQot
Ci0gICAgc3RhdGljIE5FVkVSX0lOTElORSB2b2lkIHJlY29yZEFsbG9jYXRpb24odm9pZCogcG9p
bnRlciwgc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICAvLyBTdGFja0xvZ2dpbmdUeXBlQWxs
b2MgdGFrZXMgdGhlIG5ld2x5LWFsbG9jYXRlZCBhZGRyZXNzIGluIHRoZSByZXR1cm5WYWx1ZSBh
cmd1bWVudCwgdGhlIHNpemUgb2YgdGhlIGFsbG9jYXRpb24KLSAgICAgICAgLy8gaW4gdGhlIHNp
emUgYXJndW1lbnQgYW5kIGlnbm9yZXMgYWxsIG90aGVyIGFyZ3VtZW50cy4KLSAgICAgICAgcmVj
b3JkKFN0YWNrTG9nZ2luZ1R5cGVBbGxvYywgMCwgc2l6ZSwgMCwgcG9pbnRlciwgMCk7Ci0gICAg
fQotCi0gICAgc3RhdGljIE5FVkVSX0lOTElORSB2b2lkIHJlY29yZERlYWxsb2NhdGlvbih2b2lk
KiBwb2ludGVyKQotICAgIHsKLSAgICAgICAgLy8gU3RhY2tMb2dnaW5nVHlwZURlYWxsb2MgdGFr
ZXMgdGhlIHBvaW50ZXIgaW4gdGhlIHNpemUgYXJndW1lbnQgYW5kIGlnbm9yZXMgYWxsIG90aGVy
IGFyZ3VtZW50cy4KLSAgICAgICAgcmVjb3JkKFN0YWNrTG9nZ2luZ1R5cGVEZWFsbG9jLCAwLCBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocG9pbnRlciksIDAsIDAsIDApOwotICAgIH0KLQot
I2VuZGlmCi0KLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBpbml0KCkKLSAgICB7Ci0jaWYgT1Mo
REFSV0lOKQotICAgICAgICAvLyBJZiB0aGUgc3lzdGVtIGFsbG9jYXRvcidzIG1hbGxvY19sb2dn
ZXIgaGFzIGJlZW4gc2V0IHVwIHRoZW4gc3RhY2sgbG9nZ2luZyBpcyBlbmFibGVkLgotICAgICAg
ICBzdGFja0xvZ2dpbmdFbmFibGVkID0gbWFsbG9jX2xvZ2dlcjsKLSNlbmRpZgotICAgIH0KLQot
I2lmIE9TKERBUldJTikKLSAgICBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIEludm9rZU5ld0hv
b2sodm9pZCogcG9pbnRlciwgc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICBpZiAoVU5MSUtF
TFkoc3RhY2tMb2dnaW5nRW5hYmxlZCkpCi0gICAgICAgICAgICByZWNvcmRBbGxvY2F0aW9uKHBv
aW50ZXIsIHNpemUpOwotICAgIH0KLQotICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHZvaWQgSW52
b2tlRGVsZXRlSG9vayh2b2lkKiBwb2ludGVyKQotICAgIHsKLQotICAgICAgICBpZiAoVU5MSUtF
TFkoc3RhY2tMb2dnaW5nRW5hYmxlZCkpCi0gICAgICAgICAgICByZWNvcmREZWFsbG9jYXRpb24o
cG9pbnRlcik7Ci0gICAgfQotI2Vsc2UKLSAgICBzdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIElu
dm9rZU5ld0hvb2sodm9pZCosIHNpemVfdCkgeyB9Ci0gICAgc3RhdGljIEFMV0FZU19JTkxJTkUg
dm9pZCBJbnZva2VEZWxldGVIb29rKHZvaWQqKSB7IH0KLSNlbmRpZgotfTsKLWJvb2wgTWFsbG9j
SG9vazo6c3RhY2tMb2dnaW5nRW5hYmxlZCA9IGZhbHNlOwotCi0jZW5kaWYKLQotI2lmbmRlZiBX
VEZfQ0hBTkdFUwotLy8gVGhpcyAjaWZkZWYgc2hvdWxkIGFsbW9zdCBuZXZlciBiZSBzZXQuICBT
ZXQgTk9fVENNQUxMT0NfU0FNUExFUyBpZgotLy8geW91J3JlIHBvcnRpbmcgdG8gYSBzeXN0ZW0g
d2hlcmUgeW91IHJlYWxseSBjYW4ndCBnZXQgYSBzdGFja3RyYWNlLgotI2lmZGVmIE5PX1RDTUFM
TE9DX1NBTVBMRVMKLS8vIFdlIHVzZSAjZGVmaW5lIHNvIGNvZGUgY29tcGlsZXMgZXZlbiBpZiB5
b3UgI2luY2x1ZGUgc3RhY2t0cmFjZS5oIHNvbWVob3cuCi0jIGRlZmluZSBHZXRTdGFja1RyYWNl
KHN0YWNrLCBkZXB0aCwgc2tpcCkgICgwKQotI2Vsc2UKLSMgaW5jbHVkZSA8Z29vZ2xlL3N0YWNr
dHJhY2UuaD4KLSNlbmRpZgotI2VuZGlmCi0KLS8vIEV2ZW4gaWYgd2UgaGF2ZSBzdXBwb3J0IGZv
ciB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbiB0aGUgY29tcGlsZXIKLS8vIGFuZCBsaW5rZXIsIHRo
ZSBPUyBtYXkgbm90IHN1cHBvcnQgaXQuICBXZSBuZWVkIHRvIGNoZWNrIHRoYXQgYXQKLS8vIHJ1
bnRpbWUuICBSaWdodCBub3csIHdlIGhhdmUgdG8ga2VlcCBhIG1hbnVhbCBzZXQgb2YgImJhZCIg
T1Nlcy4KLSNpZiBkZWZpbmVkKEhBVkVfVExTKQotICBzdGF0aWMgYm9vbCBrZXJuZWxfc3VwcG9y
dHNfdGxzID0gZmFsc2U7ICAgICAgLy8gYmUgY29uc2VydmF0aXZlCi0gIHN0YXRpYyBpbmxpbmUg
Ym9vbCBLZXJuZWxTdXBwb3J0c1RMUygpIHsKLSAgICByZXR1cm4ga2VybmVsX3N1cHBvcnRzX3Rs
czsKLSAgfQotIyBpZiAhSEFWRV9ERUNMX1VOQU1FICAgLy8gaWYgdG9vIG9sZCBmb3IgdW5hbWUs
IHByb2JhYmx5IHRvbyBvbGQgZm9yIFRMUwotICAgIHN0YXRpYyB2b2lkIENoZWNrSWZLZXJuZWxT
dXBwb3J0c1RMUygpIHsKLSAgICAgIGtlcm5lbF9zdXBwb3J0c190bHMgPSBmYWxzZTsKLSAgICB9
Ci0jIGVsc2UKLSMgICBpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPiAgICAvLyBERUNMX1VOQU1FIGNo
ZWNrZWQgZm9yIDxzeXMvdXRzbmFtZS5oPiB0b28KLSAgICBzdGF0aWMgdm9pZCBDaGVja0lmS2Vy
bmVsU3VwcG9ydHNUTFMoKSB7Ci0gICAgICBzdHJ1Y3QgdXRzbmFtZSBidWY7Ci0gICAgICBpZiAo
dW5hbWUoJmJ1ZikgIT0gMCkgeyAgIC8vIHNob3VsZCBiZSBpbXBvc3NpYmxlCi0gICAgICAgIE1F
U1NBR0UoInVuYW1lIGZhaWxlZCBhc3N1bWluZyBubyBUTFMgc3VwcG9ydCAoZXJybm89JWQpXG4i
LCBlcnJubyk7Ci0gICAgICAgIGtlcm5lbF9zdXBwb3J0c190bHMgPSBmYWxzZTsKLSAgICAgIH0g
ZWxzZSBpZiAoc3RyY2FzZWNtcChidWYuc3lzbmFtZSwgImxpbnV4IikgPT0gMCkgewotICAgICAg
ICAvLyBUaGUgbGludXggY2FzZTogdGhlIGZpcnN0IGtlcm5lbCB0byBzdXBwb3J0IFRMUyB3YXMg
Mi42LjAKLSAgICAgICAgaWYgKGJ1Zi5yZWxlYXNlWzBdIDwgJzInICYmIGJ1Zi5yZWxlYXNlWzFd
ID09ICcuJykgICAgLy8gMC54IG9yIDEueAotICAgICAgICAgIGtlcm5lbF9zdXBwb3J0c190bHMg
PSBmYWxzZTsKLSAgICAgICAgZWxzZSBpZiAoYnVmLnJlbGVhc2VbMF0gPT0gJzInICYmIGJ1Zi5y
ZWxlYXNlWzFdID09ICcuJyAmJgotICAgICAgICAgICAgICAgICBidWYucmVsZWFzZVsyXSA+PSAn
MCcgJiYgYnVmLnJlbGVhc2VbMl0gPCAnNicgJiYKLSAgICAgICAgICAgICAgICAgYnVmLnJlbGVh
c2VbM10gPT0gJy4nKSAgICAgICAgICAgICAgICAgICAgICAgLy8gMi4wIC0gMi41Ci0gICAgICAg
ICAga2VybmVsX3N1cHBvcnRzX3RscyA9IGZhbHNlOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
a2VybmVsX3N1cHBvcnRzX3RscyA9IHRydWU7Ci0gICAgICB9IGVsc2UgeyAgICAgICAgLy8gc29t
ZSBvdGhlciBrZXJuZWwsIHdlJ2xsIGJlIG9wdGltaXNpdGljCi0gICAgICAgIGtlcm5lbF9zdXBw
b3J0c190bHMgPSB0cnVlOwotICAgICAgfQotICAgICAgLy8gVE9ETyhjc2lsdmVycyk6IFZMT0co
MSkgdGhlIHRscyBzdGF0dXMgb25jZSB3ZSBzdXBwb3J0IFJBV19WTE9HCi0gICAgfQotIyAgZW5k
aWYgIC8vIEhBVkVfREVDTF9VTkFNRQotI2VuZGlmICAgIC8vIEhBVkVfVExTCi0KLS8vIF9fVEhS
T1cgaXMgZGVmaW5lZCBpbiBnbGliYyBzeXN0ZW1zLiAgSXQgbWVhbnMsIGNvdW50ZXItaW50dWl0
aXZlbHksCi0vLyAiVGhpcyBmdW5jdGlvbiB3aWxsIG5ldmVyIHRocm93IGFuIGV4Y2VwdGlvbi4i
ICBJdCdzIGFuIG9wdGlvbmFsCi0vLyBvcHRpbWl6YXRpb24gdG9vbCwgYnV0IHdlIG1heSBuZWVk
IHRvIHVzZSBpdCB0byBtYXRjaCBnbGliYyBwcm90b3R5cGVzLgotI2lmbmRlZiBfX1RIUk9XICAg
IC8vIEkgZ3Vlc3Mgd2UncmUgbm90IG9uIGEgZ2xpYmMgc3lzdGVtCi0jIGRlZmluZSBfX1RIUk9X
ICAgLy8gX19USFJPVyBpcyBqdXN0IGFuIG9wdGltaXphdGlvbiwgc28gb2sgdG8gbWFrZSBpdCAi
IgotI2VuZGlmCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFN0YWNrIHRyYWNlcyBrZXB0IGZv
ciBzYW1wbGVkIGFsbG9jYXRpb25zCi0vLyAgIFRoZSBmb2xsb3dpbmcgc3RhdGUgaXMgcHJvdGVj
dGVkIGJ5IHBhZ2VoZWFwX2xvY2tfLgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0vLyBzaXplL2Rl
cHRoIGFyZSBtYWRlIHRoZSBzYW1lIHNpemUgYXMgYSBwb2ludGVyIHNvIHRoYXQgc29tZSBnZW5l
cmljCi0vLyBjb2RlIGJlbG93IGNhbiBjb252ZW5pZW50bHkgY2FzdCB0aGVtIGJhY2sgYW5kIGZv
cnRoIHRvIHZvaWQqLgotc3RhdGljIGNvbnN0IGludCBrTWF4U3RhY2tEZXB0aCA9IDMxOwotc3Ry
dWN0IFN0YWNrVHJhY2UgewotICB1aW50cHRyX3Qgc2l6ZTsgICAgICAgICAgLy8gU2l6ZSBvZiBv
YmplY3QKLSAgdWludHB0cl90IGRlcHRoOyAgICAgICAgIC8vIE51bWJlciBvZiBQQyB2YWx1ZXMg
c3RvcmVkIGluIGFycmF5IGJlbG93Ci0gIHZvaWQqICAgICBzdGFja1trTWF4U3RhY2tEZXB0aF07
Ci19Owotc3RhdGljIFBhZ2VIZWFwQWxsb2NhdG9yPFN0YWNrVHJhY2U+IHN0YWNrdHJhY2VfYWxs
b2NhdG9yOwotc3RhdGljIFNwYW4gc2FtcGxlZF9vYmplY3RzOwotCi0vLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0vLyBNYXAgZnJvbSBwYWdlLWlkIHRvIHBlci1wYWdlIGRhdGEKLS8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotLy8gV2UgdXNlIFBhZ2VNYXAyPD4gZm9yIDMyLWJpdCBhbmQgUGFnZU1hcDM8PiBm
b3IgNjQtYml0IG1hY2hpbmVzLgotLy8gV2UgYWxzbyB1c2UgYSBzaW1wbGUgb25lLWxldmVsIGNh
Y2hlIGZvciBob3QgUGFnZUlELXRvLXNpemVjbGFzcyBtYXBwaW5ncywKLS8vIGJlY2F1c2Ugc29t
ZXRpbWVzIHRoZSBzaXplY2xhc3MgaXMgYWxsIHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkLgotCi0v
LyBTZWxlY3RvciBjbGFzcyAtLSBnZW5lcmFsIHNlbGVjdG9yIHVzZXMgMy1sZXZlbCBtYXAKLXRl
bXBsYXRlIDxpbnQgQklUUz4gY2xhc3MgTWFwU2VsZWN0b3IgewotIHB1YmxpYzoKLSAgdHlwZWRl
ZiBUQ01hbGxvY19QYWdlTWFwMzxCSVRTLUtfUEFHRV9TSElGVF9NSU4+IFR5cGU7Ci0gIHR5cGVk
ZWYgUGFja2VkQ2FjaGU8QklUUywgdWludDY0X3Q+IENhY2hlVHlwZTsKLX07Ci0KLSNpZiBkZWZp
bmVkKFdURl9DSEFOR0VTKQotI2lmIENQVShYODZfNjQpIHx8IENQVShBUk02NCkKLS8vIE9uIGFs
bCBrbm93biBYODYtNjQgcGxhdGZvcm1zLCB0aGUgdXBwZXIgMTYgYml0cyBhcmUgYWx3YXlzIHVu
dXNlZCBhbmQgdGhlcmVmb3JlIAotLy8gY2FuIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIFBhZ2VNYXAg
a2V5LgotLy8gU2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWDg2LTY0I1ZpcnR1YWxf
YWRkcmVzc19zcGFjZV9kZXRhaWxzCi0KLXN0YXRpYyBjb25zdCBzaXplX3Qga0JpdHNVbnVzZWRP
bjY0Qml0ID0gMTY7Ci0jZWxzZQotc3RhdGljIGNvbnN0IHNpemVfdCBrQml0c1VudXNlZE9uNjRC
aXQgPSAwOwotI2VuZGlmCi0KLS8vIEEgdGhyZWUtbGV2ZWwgbWFwIGZvciA2NC1iaXQgbWFjaGlu
ZXMKLXRlbXBsYXRlIDw+IGNsYXNzIE1hcFNlbGVjdG9yPDY0PiB7Ci0gcHVibGljOgotICB0eXBl
ZGVmIFRDTWFsbG9jX1BhZ2VNYXAzPDY0IC0gS19QQUdFX1NISUZUX01JTiAtIGtCaXRzVW51c2Vk
T242NEJpdD4gVHlwZTsKLSAgdHlwZWRlZiBQYWNrZWRDYWNoZTw2NCwgdWludDY0X3Q+IENhY2hl
VHlwZTsKLX07Ci0jZW5kaWYKLQotLy8gQSB0d28tbGV2ZWwgbWFwIGZvciAzMi1iaXQgbWFjaGlu
ZXMKLXRlbXBsYXRlIDw+IGNsYXNzIE1hcFNlbGVjdG9yPDMyPiB7Ci0gcHVibGljOgotICB0eXBl
ZGVmIFRDTWFsbG9jX1BhZ2VNYXAyPDMyIC0gS19QQUdFX1NISUZUX01JTj4gVHlwZTsKLSAgdHlw
ZWRlZiBQYWNrZWRDYWNoZTwzMiAtIEtfUEFHRV9TSElGVF9NSU4sIHVpbnQxNl90PiBDYWNoZVR5
cGU7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBQYWdlLWxldmVsIGFsbG9jYXRvcgot
Ly8gICogRWFnZXIgY29hbGVzY2luZwotLy8KLS8vIEhlYXAgZm9yIHBhZ2UtbGV2ZWwgYWxsb2Nh
dGlvbi4gIFdlIGFsbG93IGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgYQotLy8gY29udGlndW91cyBy
dW5zIG9mIHBhZ2VzIChjYWxsZWQgYSAic3BhbiIpLgotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0j
aWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotLy8gVGhlIHBhZ2Ug
aGVhcCBtYWludGFpbnMgYSBmcmVlIGxpc3QgZm9yIHNwYW5zIHRoYXQgYXJlIG5vIGxvbmdlciBp
biB1c2UgYnkKLS8vIHRoZSBjZW50cmFsIGNhY2hlIG9yIGFueSB0aHJlYWQgY2FjaGVzLiBXZSB1
c2UgYSBiYWNrZ3JvdW5kIHRocmVhZCB0bwotLy8gcGVyaW9kaWNhbGx5IHNjYW4gdGhlIGZyZWUg
bGlzdCBhbmQgcmVsZWFzZSBhIHBlcmNlbnRhZ2Ugb2YgaXQgYmFjayB0byB0aGUgT1MuCi0KLS8v
IElmIGZyZWVfY29tbWl0dGVkX3BhZ2VzXyBleGNlZWRzIGtNaW5pbXVtRnJlZUNvbW1pdHRlZFBh
Z2VDb3VudCwgdGhlCi0vLyBiYWNrZ3JvdW5kIHRocmVhZDoKLS8vICAgICAtIHdha2VzIHVwCi0v
LyAgICAgLSBwYXVzZXMgZm9yIGtTY2F2ZW5nZURlbGF5SW5TZWNvbmRzCi0vLyAgICAgLSByZXR1
cm5zIHRvIHRoZSBPUyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIG1lbW9yeSB0aGF0IHJlbWFpbmVkIHVu
dXNlZCBkdXJpbmcKLS8vICAgICAgIHRoYXQgcGF1c2UgKGtTY2F2ZW5nZVBlcmNlbnRhZ2UgKiBt
aW5fZnJlZV9jb21taXR0ZWRfcGFnZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV8pCi0vLyBUaGUgZ29h
bCBvZiB0aGlzIHN0cmF0ZWd5IGlzIHRvIHJlZHVjZSBtZW1vcnkgcHJlc3N1cmUgaW4gYSB0aW1l
bHkgZmFzaGlvbgotLy8gd2hpbGUgYXZvaWRpbmcgdGhyYXNoaW5nIHRoZSBPUyBhbGxvY2F0b3Iu
Ci0KLS8vIFRpbWUgZGVsYXkgYmVmb3JlIHRoZSBwYWdlIGhlYXAgc2NhdmVuZ2VyIHdpbGwgY29u
c2lkZXIgcmV0dXJuaW5nIHBhZ2VzIHRvCi0vLyB0aGUgT1MuCi1zdGF0aWMgY29uc3QgaW50IGtT
Y2F2ZW5nZURlbGF5SW5TZWNvbmRzID0gMjsKLQotLy8gQXBwcm94aW1hdGUgcGVyY2VudGFnZSBv
ZiBmcmVlIGNvbW1pdHRlZCBwYWdlcyB0byByZXR1cm4gdG8gdGhlIE9TIGluIG9uZQotLy8gc2Nh
dmVuZ2UuCi1zdGF0aWMgY29uc3QgZmxvYXQga1NjYXZlbmdlUGVyY2VudGFnZSA9IC41ZjsKLQot
Ly8gbnVtYmVyIG9mIHNwYW4gbGlzdHMgdG8ga2VlcCBzcGFucyBpbiB3aGVuIG1lbW9yeSBpcyBy
ZXR1cm5lZC4KLXN0YXRpYyBjb25zdCBpbnQga01pblNwYW5MaXN0c1dpdGhTcGFucyA9IDMyOwot
Ci0vLyBOdW1iZXIgb2YgZnJlZSBjb21taXR0ZWQgcGFnZXMgdGhhdCB3ZSB3YW50IHRvIGtlZXAg
YXJvdW5kLiAgVGhlIG1pbmltdW0gbnVtYmVyIG9mIHBhZ2VzIHVzZWQgd2hlbiB0aGVyZQotLy8g
aXMgMSBzcGFuIGluIGVhY2ggb2YgdGhlIGZpcnN0IGtNaW5TcGFuTGlzdHNXaXRoU3BhbnMgc3Bh
bmxpc3RzLiAgQ3VycmVudGx5IDUyOCBwYWdlcy4KLXN0YXRpYyBjb25zdCBzaXplX3Qga01pbmlt
dW1GcmVlQ29tbWl0dGVkUGFnZUNvdW50ID0ga01pblNwYW5MaXN0c1dpdGhTcGFucyAqICgoMS4w
ZitrTWluU3Bhbkxpc3RzV2l0aFNwYW5zKSAvIDIuMGYpOwotCi0jZW5kaWYKLQotc3RhdGljIFNw
aW5Mb2NrIHBhZ2VoZWFwX2xvY2sgPSBTUElOTE9DS19JTklUSUFMSVpFUjsKLQotY2xhc3MgVENN
YWxsb2NfUGFnZUhlYXAgewotIHB1YmxpYzoKLSAgdm9pZCBpbml0KCk7Ci0KLSAgLy8gQWxsb2Nh
dGUgYSBydW4gb2YgIm4iIHBhZ2VzLiAgUmV0dXJucyB6ZXJvIGlmIG91dCBvZiBtZW1vcnkuCi0g
IFNwYW4qIE5ldyhMZW5ndGggbik7Ci0KLSAgLy8gRGVsZXRlIHRoZSBzcGFuICJbcCwgcCtuLTFd
Ii4KLSAgLy8gUkVRVUlSRVM6IHNwYW4gd2FzIHJldHVybmVkIGJ5IGVhcmxpZXIgY2FsbCB0byBO
ZXcoKSBhbmQKLSAgLy8gICAgICAgICAgIGhhcyBub3QgeWV0IGJlZW4gZGVsZXRlZC4KLSAgdm9p
ZCBEZWxldGUoU3Bhbiogc3Bhbik7Ci0KLSAgLy8gTWFyayBhbiBhbGxvY2F0ZWQgc3BhbiBhcyBi
ZWluZyB1c2VkIGZvciBzbWFsbCBvYmplY3RzIG9mIHRoZQotICAvLyBzcGVjaWZpZWQgc2l6ZS1j
bGFzcy4KLSAgLy8gUkVRVUlSRVM6IHNwYW4gd2FzIHJldHVybmVkIGJ5IGFuIGVhcmxpZXIgY2Fs
bCB0byBOZXcoKQotICAvLyAgICAgICAgICAgYW5kIGhhcyBub3QgeWV0IGJlZW4gZGVsZXRlZC4K
LSAgdm9pZCBSZWdpc3RlclNpemVDbGFzcyhTcGFuKiBzcGFuLCBzaXplX3Qgc2MpOwotCi0gIC8v
IFNwbGl0IGFuIGFsbG9jYXRlZCBzcGFuIGludG8gdHdvIHNwYW5zOiBvbmUgb2YgbGVuZ3RoICJu
IiBwYWdlcwotICAvLyBmb2xsb3dlZCBieSBhbm90aGVyIHNwYW4gb2YgbGVuZ3RoICJzcGFuLT5s
ZW5ndGggLSBuIiBwYWdlcy4KLSAgLy8gTW9kaWZpZXMgIipzcGFuIiB0byBwb2ludCB0byB0aGUg
Zmlyc3Qgc3BhbiBvZiBsZW5ndGggIm4iIHBhZ2VzLgotICAvLyBSZXR1cm5zIGEgcG9pbnRlciB0
byB0aGUgc2Vjb25kIHNwYW4uCi0gIC8vCi0gIC8vIFJFUVVJUkVTOiAiMCA8IG4gPCBzcGFuLT5s
ZW5ndGgiCi0gIC8vIFJFUVVJUkVTOiAhc3Bhbi0+ZnJlZQotICAvLyBSRVFVSVJFUzogc3Bhbi0+
c2l6ZWNsYXNzID09IDAKLSAgU3BhbiogU3BsaXQoU3Bhbiogc3BhbiwgTGVuZ3RoIG4pOwotCi0g
IC8vIFJldHVybiB0aGUgZGVzY3JpcHRvciBmb3IgdGhlIHNwZWNpZmllZCBwYWdlLgotICBpbmxp
bmUgU3BhbiogR2V0RGVzY3JpcHRvcihQYWdlSUQgcCkgY29uc3QgewotICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PFNwYW4qPihwYWdlbWFwXy5nZXQocCkpOwotICB9Ci0KLSNpZmRlZiBXVEZf
Q0hBTkdFUwotICBpbmxpbmUgU3BhbiogR2V0RGVzY3JpcHRvckVuc3VyZVNhZmUoUGFnZUlEIHAp
Ci0gIHsKLSAgICAgIHBhZ2VtYXBfLkVuc3VyZShwLCAxKTsKLSAgICAgIHJldHVybiBHZXREZXNj
cmlwdG9yKHApOwotICB9Ci0gICAgCi0gIHNpemVfdCBSZXR1cm5lZEJ5dGVzKCkgY29uc3Q7Ci0j
ZW5kaWYKLQotICAvLyBEdW1wIHN0YXRlIHRvIHN0ZGVycgotI2lmbmRlZiBXVEZfQ0hBTkdFUwot
ICB2b2lkIER1bXAoVENNYWxsb2NfUHJpbnRlciogb3V0KTsKLSNlbmRpZgotCi0gIC8vIFJldHVy
biBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIGZyb20gc3lzdGVtCi0gIGlubGluZSB1aW50NjRf
dCBTeXN0ZW1CeXRlcygpIGNvbnN0IHsgcmV0dXJuIHN5c3RlbV9ieXRlc187IH0KLQotICAvLyBS
ZXR1cm4gbnVtYmVyIG9mIGZyZWUgYnl0ZXMgaW4gaGVhcAotICB1aW50NjRfdCBGcmVlQnl0ZXMo
KSBjb25zdCB7Ci0gICAgQVNTRVJUKGtQYWdlU2hpZnQgJiYga051bUNsYXNzZXMgJiYga1BhZ2VT
aXplKTsKLSAgICByZXR1cm4gKHN0YXRpY19jYXN0PHVpbnQ2NF90PihmcmVlX3BhZ2VzXykgPDwg
a1BhZ2VTaGlmdCk7Ci0gIH0KLQotICBib29sIENoZWNrKCk7Ci0gIHNpemVfdCBDaGVja0xpc3Qo
U3BhbiogbGlzdCwgTGVuZ3RoIG1pbl9wYWdlcywgTGVuZ3RoIG1heF9wYWdlcywgYm9vbCBkZWNv
bW1pdHRlZCk7Ci0KLSAgLy8gUmVsZWFzZSBhbGwgcGFnZXMgb24gdGhlIGZyZWUgbGlzdCBmb3Ig
cmV1c2UgYnkgdGhlIE9TOgotICB2b2lkIFJlbGVhc2VGcmVlUGFnZXMoKTsKLSAgdm9pZCBSZWxl
YXNlRnJlZUxpc3QoU3BhbiosIFNwYW4qKTsKLQotICAvLyBSZXR1cm4gMCBpZiB3ZSBoYXZlIG5v
IGluZm9ybWF0aW9uLCBvciBlbHNlIHRoZSBjb3JyZWN0IHNpemVjbGFzcyBmb3IgcC4KLSAgLy8g
UmVhZHMgYW5kIHdyaXRlcyB0byBwYWdlbWFwX2NhY2hlXyBkbyBub3QgcmVxdWlyZSBsb2NraW5n
LgotICAvLyBUaGUgZW50cmllcyBhcmUgNjQgYml0cyBvbiA2NC1iaXQgaGFyZHdhcmUgYW5kIDE2
IGJpdHMgb24KLSAgLy8gMzItYml0IGhhcmR3YXJlLCBhbmQgd2UgZG9uJ3QgbWluZCByYWNpbmVz
cyBhcyBsb25nIGFzIGVhY2ggcmVhZCBvZgotICAvLyBhbiBlbnRyeSB5aWVsZHMgYSB2YWxpZCBl
bnRyeSwgbm90IGEgcGFydGlhbGx5IHVwZGF0ZWQgZW50cnkuCi0gIHNpemVfdCBHZXRTaXplQ2xh
c3NJZkNhY2hlZChQYWdlSUQgcCkgY29uc3QgewotICAgIHJldHVybiBwYWdlbWFwX2NhY2hlXy5H
ZXRPckRlZmF1bHQocCwgMCk7Ci0gIH0KLSAgdm9pZCBDYWNoZVNpemVDbGFzcyhQYWdlSUQgcCwg
c2l6ZV90IGNsKSBjb25zdCB7IHBhZ2VtYXBfY2FjaGVfLlB1dChwLCBjbCk7IH0KLQotIHByaXZh
dGU6Ci0gIC8vIFBpY2sgdGhlIGFwcHJvcHJpYXRlIG1hcCBhbmQgY2FjaGUgdHlwZXMgYmFzZWQg
b24gcG9pbnRlciBzaXplCi0gIHR5cGVkZWYgTWFwU2VsZWN0b3I8OCpzaXplb2YodWludHB0cl90
KT46OlR5cGUgUGFnZU1hcDsKLSAgdHlwZWRlZiBNYXBTZWxlY3Rvcjw4KnNpemVvZih1aW50cHRy
X3QpPjo6Q2FjaGVUeXBlIFBhZ2VNYXBDYWNoZTsKLSAgUGFnZU1hcCBwYWdlbWFwXzsKLSAgbXV0
YWJsZSBQYWdlTWFwQ2FjaGUgcGFnZW1hcF9jYWNoZV87Ci0KLSAgLy8gV2Ugc2VncmVnYXRlIHNw
YW5zIG9mIGEgZ2l2ZW4gc2l6ZSBpbnRvIHR3byBjaXJjdWxhciBsaW5rZWQKLSAgLy8gbGlzdHM6
IG9uZSBmb3Igbm9ybWFsIHNwYW5zLCBhbmQgb25lIGZvciBzcGFucyB3aG9zZSBtZW1vcnkKLSAg
Ly8gaGFzIGJlZW4gcmV0dXJuZWQgdG8gdGhlIHN5c3RlbS4KLSAgc3RydWN0IFNwYW5MaXN0IHsK
LSAgICBTcGFuICAgICAgICBub3JtYWw7Ci0gICAgU3BhbiAgICAgICAgcmV0dXJuZWQ7Ci0gIH07
Ci0KLSAgLy8gTGlzdCBvZiBmcmVlIHNwYW5zIG9mIGxlbmd0aCA+PSBrTWF4UGFnZXMKLSAgU3Bh
bkxpc3QgbGFyZ2VfOwotCi0gIC8vIEFycmF5IG1hcHBpbmcgZnJvbSBzcGFuIGxlbmd0aCB0byBh
IGRvdWJseSBsaW5rZWQgbGlzdCBvZiBmcmVlIHNwYW5zCi0gIFNwYW5MaXN0IGZyZWVfW2tNYXhQ
YWdlc107Ci0KLSAgLy8gTnVtYmVyIG9mIHBhZ2VzIGtlcHQgaW4gZnJlZSBsaXN0cwotICB1aW50
cHRyX3QgZnJlZV9wYWdlc187Ci0KLSAgLy8gVXNlZCBmb3IgaGFyZGVuaW5nCi0gIHVpbnRwdHJf
dCBlbnRyb3B5XzsKLQotICAvLyBCeXRlcyBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0KLSAgdWludDY0
X3Qgc3lzdGVtX2J5dGVzXzsKLQotI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5H
RV9NRU1PUlkKLSAgLy8gTnVtYmVyIG9mIHBhZ2VzIGtlcHQgaW4gZnJlZSBsaXN0cyB0aGF0IGFy
ZSBzdGlsbCBjb21taXR0ZWQuCi0gIExlbmd0aCBmcmVlX2NvbW1pdHRlZF9wYWdlc187Ci0KLSAg
Ly8gTWluaW11bSBudW1iZXIgb2YgZnJlZSBjb21taXR0ZWQgcGFnZXMgc2luY2UgbGFzdCBzY2F2
ZW5nZS4gKENhbiBiZSAwIGlmCi0gIC8vIHdlJ3ZlIGNvbW1pdHRlZCBuZXcgcGFnZXMgc2luY2Ug
dGhlIGxhc3Qgc2NhdmVuZ2UuKQotICBMZW5ndGggbWluX2ZyZWVfY29tbWl0dGVkX3BhZ2VzX3Np
bmNlX2xhc3Rfc2NhdmVuZ2VfOwotI2VuZGlmCi0KLSAgYm9vbCBHcm93SGVhcChMZW5ndGggbik7
Ci0KLSAgLy8gUkVRVUlSRVMgICBzcGFuLT5sZW5ndGggPj0gbgotICAvLyBSZW1vdmUgc3BhbiBm
cm9tIGl0cyBmcmVlIGxpc3QsIGFuZCBtb3ZlIGFueSBsZWZ0b3ZlciBwYXJ0IG9mCi0gIC8vIHNw
YW4gaW50byBhcHByb3ByaWF0ZSBmcmVlIGxpc3RzLiAgQWxzbyB1cGRhdGUgInNwYW4iIHRvIGhh
dmUKLSAgLy8gbGVuZ3RoIGV4YWN0bHkgIm4iIGFuZCBtYXJrIGl0IGFzIG5vbi1mcmVlIHNvIGl0
IGNhbiBiZSByZXR1cm5lZAotICAvLyB0byB0aGUgY2xpZW50LgotICAvLwotICAvLyAicmVsZWFz
ZWQiIGlzIHRydWUgaWZmICJzcGFuIiB3YXMgZm91bmQgb24gYSAicmV0dXJuZWQiIGxpc3QuCi0g
IHZvaWQgQ2FydmUoU3Bhbiogc3BhbiwgTGVuZ3RoIG4sIGJvb2wgcmVsZWFzZWQpOwotCi0gIHZv
aWQgUmVjb3JkU3BhbihTcGFuKiBzcGFuKSB7Ci0gICAgcGFnZW1hcF8uc2V0KHNwYW4tPnN0YXJ0
LCBzcGFuKTsKLSAgICBpZiAoc3Bhbi0+bGVuZ3RoID4gMSkgewotICAgICAgcGFnZW1hcF8uc2V0
KHNwYW4tPnN0YXJ0ICsgc3Bhbi0+bGVuZ3RoIC0gMSwgc3Bhbik7Ci0gICAgfQotICB9Ci0gIAot
ICAgIC8vIEFsbG9jYXRlIGEgbGFyZ2Ugc3BhbiBvZiBsZW5ndGggPT0gbi4gIElmIHN1Y2Nlc3Nm
dWwsIHJldHVybnMgYQotICAvLyBzcGFuIG9mIGV4YWN0bHkgdGhlIHNwZWNpZmllZCBsZW5ndGgu
ICBFbHNlLCByZXR1cm5zIE5VTEwuCi0gIFNwYW4qIEFsbG9jTGFyZ2UoTGVuZ3RoIG4pOwotCi0j
aWYgIVVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgLy8gSW5jcmVt
ZW50YWxseSByZWxlYXNlIHNvbWUgbWVtb3J5IHRvIHRoZSBzeXN0ZW0uCi0gIC8vIEluY3JlbWVu
dGFsU2NhdmVuZ2UobikgaXMgY2FsbGVkIHdoZW5ldmVyIG4gcGFnZXMgYXJlIGZyZWVkLgotICB2
b2lkIEluY3JlbWVudGFsU2NhdmVuZ2UoTGVuZ3RoIG4pOwotI2VuZGlmCi0KLSAgLy8gTnVtYmVy
IG9mIHBhZ2VzIHRvIGRlYWxsb2NhdGUgYmVmb3JlIGRvaW5nIG1vcmUgc2NhdmVuZ2luZwotICBp
bnQ2NF90IHNjYXZlbmdlX2NvdW50ZXJfOwotCi0gIC8vIEluZGV4IG9mIGxhc3QgZnJlZSBsaXN0
IHdlIHNjYXZlbmdlZAotICBzaXplX3Qgc2NhdmVuZ2VfaW5kZXhfOwotICAKLSNpZiBkZWZpbmVk
KFdURl9DSEFOR0VTKSAmJiBPUyhEQVJXSU4pCi0gIGZyaWVuZCBjbGFzcyBGYXN0TWFsbG9jWm9u
ZTsKLSNlbmRpZgotCi0jaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9S
WQotICB2b2lkIGluaXRpYWxpemVTY2F2ZW5nZXIoKTsKLSAgQUxXQVlTX0lOTElORSB2b2lkIHNp
Z25hbFNjYXZlbmdlcigpOwotICB2b2lkIHNjYXZlbmdlKCk7Ci0gIEFMV0FZU19JTkxJTkUgYm9v
bCBzaG91bGRTY2F2ZW5nZSgpIGNvbnN0OwotCi0jaWYgSEFWRShESVNQQVRDSF9IKSB8fCBPUyhX
SU5ET1dTKQotICB2b2lkIHBlcmlvZGljU2NhdmVuZ2UoKTsKLSAgQUxXQVlTX0lOTElORSBib29s
IGlzU2NhdmVuZ2VyU3VzcGVuZGVkKCk7Ci0gIEFMV0FZU19JTkxJTkUgdm9pZCBzY2hlZHVsZVNj
YXZlbmdlcigpOwotICBBTFdBWVNfSU5MSU5FIHZvaWQgcmVzY2hlZHVsZVNjYXZlbmdlcigpOwot
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc3VzcGVuZFNjYXZlbmdlcigpOwotI2VuZGlmCi0KLSNpZiBI
QVZFKERJU1BBVENIX0gpCi0gIGRpc3BhdGNoX3F1ZXVlX3QgbV9zY2F2ZW5nZVF1ZXVlOwotICBk
aXNwYXRjaF9zb3VyY2VfdCBtX3NjYXZlbmdlVGltZXI7Ci0gIGJvb2wgbV9zY2F2ZW5naW5nU3Vz
cGVuZGVkOwotI2VsaWYgT1MoV0lORE9XUykKLSAgc3RhdGljIHZvaWQgQ0FMTEJBQ0sgc2NhdmVu
Z2VyVGltZXJGaXJlZCh2b2lkKiwgQk9PTEVBTik7Ci0gIEhBTkRMRSBtX3NjYXZlbmdlUXVldWVU
aW1lcjsKLSNlbHNlIAotICBzdGF0aWMgTk9fUkVUVVJOX1dJVEhfVkFMVUUgdm9pZCogcnVuU2Nh
dmVuZ2VyVGhyZWFkKHZvaWQqKTsKLSAgTk9fUkVUVVJOIHZvaWQgc2NhdmVuZ2VyVGhyZWFkKCk7
Ci0KLSAgLy8gS2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgYmFja2dyb3VuZCB0aHJlYWQgaXMg
YWN0aXZlbHkgc2NhdmVuZ2luZyBtZW1vcnkgZXZlcnkga1NjYXZlbmdlRGVsYXlJblNlY29uZHMs
IG9yCi0gIC8vIGl0J3MgYmxvY2tlZCB3YWl0aW5nIGZvciBtb3JlIHBhZ2VzIHRvIGJlIGRlbGV0
ZWQuCi0gIGJvb2wgbV9zY2F2ZW5nZVRocmVhZEFjdGl2ZTsKLQotICBwdGhyZWFkX211dGV4X3Qg
bV9zY2F2ZW5nZU11dGV4OwotICBwdGhyZWFkX2NvbmRfdCBtX3NjYXZlbmdlQ29uZGl0aW9uOwot
I2VuZGlmCi0KLSNlbmRpZiAgLy8gVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01F
TU9SWQotfTsKLQotdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6aW5pdCgpCi17Ci0gIEFTU0VSVChr
UGFnZVNoaWZ0ICYmIGtOdW1DbGFzc2VzICYmIGtQYWdlU2l6ZSk7Ci0KLSAgcGFnZW1hcF8uaW5p
dChNZXRhRGF0YUFsbG9jKTsKLSAgcGFnZW1hcF9jYWNoZV8gPSBQYWdlTWFwQ2FjaGUoMCk7Ci0g
IGZyZWVfcGFnZXNfID0gMDsKLSAgc3lzdGVtX2J5dGVzXyA9IDA7Ci0gIGVudHJvcHlfID0gSEFS
REVOSU5HX0VOVFJPUFk7Ci0KLSNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0Vf
TUVNT1JZCi0gIGZyZWVfY29tbWl0dGVkX3BhZ2VzXyA9IDA7Ci0gIG1pbl9mcmVlX2NvbW1pdHRl
ZF9wYWdlc19zaW5jZV9sYXN0X3NjYXZlbmdlXyA9IDA7Ci0jZW5kaWYgIC8vIFVTRV9CQUNLR1JP
VU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLQotICBzY2F2ZW5nZV9jb3VudGVyXyA9IDA7
Ci0gIC8vIFN0YXJ0IHNjYXZlbmdpbmcgYXQga01heFBhZ2VzIGxpc3QKLSAgc2NhdmVuZ2VfaW5k
ZXhfID0ga01heFBhZ2VzLTE7Ci0gIEFTU0VSVChrTnVtQ2xhc3NlcyA8PSAoMSA8PCBQYWdlTWFw
Q2FjaGU6OmtWYWx1ZWJpdHMpKTsKLSAgRExMX0luaXQoJmxhcmdlXy5ub3JtYWwsIGVudHJvcHlf
KTsKLSAgRExMX0luaXQoJmxhcmdlXy5yZXR1cm5lZCwgZW50cm9weV8pOwotICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGtNYXhQYWdlczsgaSsrKSB7Ci0gICAgRExMX0luaXQoJmZyZWVfW2ldLm5v
cm1hbCwgZW50cm9weV8pOwotICAgIERMTF9Jbml0KCZmcmVlX1tpXS5yZXR1cm5lZCwgZW50cm9w
eV8pOwotICB9Ci0KLSNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZ
Ci0gIGluaXRpYWxpemVTY2F2ZW5nZXIoKTsKLSNlbmRpZiAgLy8gVVNFX0JBQ0tHUk9VTkRfVEhS
RUFEX1RPX1NDQVZFTkdFX01FTU9SWQotfQotCi0jaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RP
X1NDQVZFTkdFX01FTU9SWQotCi0jaWYgSEFWRShESVNQQVRDSF9IKQotCi12b2lkIFRDTWFsbG9j
X1BhZ2VIZWFwOjppbml0aWFsaXplU2NhdmVuZ2VyKCkKLXsKLSAgICBtX3NjYXZlbmdlUXVldWUg
PSBkaXNwYXRjaF9xdWV1ZV9jcmVhdGUoImNvbS5hcHBsZS5KYXZhU2NyaXB0Q29yZS5GYXN0TWFs
bG9jU2F2ZW5nZXIiLCBOVUxMKTsKLSAgICBtX3NjYXZlbmdlVGltZXIgPSBkaXNwYXRjaF9zb3Vy
Y2VfY3JlYXRlKERJU1BBVENIX1NPVVJDRV9UWVBFX1RJTUVSLCAwLCAwLCBtX3NjYXZlbmdlUXVl
dWUpOwotICAgIHVpbnQ2NF90IHNjYXZlbmdlRGVsYXlJbk5hbm9zZWNvbmRzID0ga1NjYXZlbmdl
RGVsYXlJblNlY29uZHMgKiBOU0VDX1BFUl9TRUM7Ci0gICAgZGlzcGF0Y2hfdGltZV90IHN0YXJ0
VGltZSA9IGRpc3BhdGNoX3RpbWUoRElTUEFUQ0hfVElNRV9OT1csIHNjYXZlbmdlRGVsYXlJbk5h
bm9zZWNvbmRzKTsKLSAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X3RpbWVyKG1fc2NhdmVuZ2VUaW1l
ciwgc3RhcnRUaW1lLCBzY2F2ZW5nZURlbGF5SW5OYW5vc2Vjb25kcywgc2NhdmVuZ2VEZWxheUlu
TmFub3NlY29uZHMgLyAxMCk7Ci0gICAgZGlzcGF0Y2hfc291cmNlX3NldF9ldmVudF9oYW5kbGVy
KG1fc2NhdmVuZ2VUaW1lciwgXnsgcGVyaW9kaWNTY2F2ZW5nZSgpOyB9KTsKLSAgICBtX3NjYXZl
bmdpbmdTdXNwZW5kZWQgPSB0cnVlOwotfQotCi1BTFdBWVNfSU5MSU5FIGJvb2wgVENNYWxsb2Nf
UGFnZUhlYXA6OmlzU2NhdmVuZ2VyU3VzcGVuZGVkKCkKLXsKLSAgICBBU1NFUlQocGFnZWhlYXBf
bG9jay5Jc0hlbGQoKSk7Ci0gICAgcmV0dXJuIG1fc2NhdmVuZ2luZ1N1c3BlbmRlZDsKLX0KLQot
QUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpzY2hlZHVsZVNjYXZlbmdlcigp
Ci17Ci0gICAgQVNTRVJUKHBhZ2VoZWFwX2xvY2suSXNIZWxkKCkpOwotICAgIG1fc2NhdmVuZ2lu
Z1N1c3BlbmRlZCA9IGZhbHNlOwotICAgIGRpc3BhdGNoX3Jlc3VtZShtX3NjYXZlbmdlVGltZXIp
OwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OnJlc2NoZWR1bGVT
Y2F2ZW5nZXIoKQotewotICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZSBmb3IgbGliZGlzcGF0Y2gu
Ci19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6c3VzcGVuZFNjYXZl
bmdlcigpCi17Ci0gICAgQVNTRVJUKHBhZ2VoZWFwX2xvY2suSXNIZWxkKCkpOwotICAgIG1fc2Nh
dmVuZ2luZ1N1c3BlbmRlZCA9IHRydWU7Ci0gICAgZGlzcGF0Y2hfc3VzcGVuZChtX3NjYXZlbmdl
VGltZXIpOwotfQotCi0jZWxpZiBPUyhXSU5ET1dTKQotCi12b2lkIFRDTWFsbG9jX1BhZ2VIZWFw
OjpzY2F2ZW5nZXJUaW1lckZpcmVkKHZvaWQqIGNvbnRleHQsIEJPT0xFQU4pCi17Ci0gICAgc3Rh
dGljX2Nhc3Q8VENNYWxsb2NfUGFnZUhlYXAqPihjb250ZXh0KS0+cGVyaW9kaWNTY2F2ZW5nZSgp
OwotfQotCi12b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjppbml0aWFsaXplU2NhdmVuZ2VyKCkKLXsK
LSAgICBtX3NjYXZlbmdlUXVldWVUaW1lciA9IDA7Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBU
Q01hbGxvY19QYWdlSGVhcDo6aXNTY2F2ZW5nZXJTdXNwZW5kZWQoKQotewotICAgIEFTU0VSVChw
YWdlaGVhcF9sb2NrLklzSGVsZCgpKTsKLSAgICByZXR1cm4gIW1fc2NhdmVuZ2VRdWV1ZVRpbWVy
OwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OnNjaGVkdWxlU2Nh
dmVuZ2VyKCkKLXsKLSAgICAvLyBXZSBuZWVkIHRvIHVzZSBXVF9FWEVDVVRFT05MWU9OQ0UgaGVy
ZSBhbmQgcmVzY2hlZHVsZSB0aGUgdGltZXIsIGJlY2F1c2UKLSAgICAvLyBXaW5kb3dzIHdpbGwg
ZmlyZSB0aGUgdGltZXIgZXZlbnQgZXZlbiB3aGVuIHRoZSBmdW5jdGlvbiBpcyBhbHJlYWR5IHJ1
bm5pbmcuCi0gICAgQVNTRVJUKHBhZ2VoZWFwX2xvY2suSXNIZWxkKCkpOwotICAgIENyZWF0ZVRp
bWVyUXVldWVUaW1lcigmbV9zY2F2ZW5nZVF1ZXVlVGltZXIsIDAsIHNjYXZlbmdlclRpbWVyRmly
ZWQsIHRoaXMsIGtTY2F2ZW5nZURlbGF5SW5TZWNvbmRzICogMTAwMCwgMCwgV1RfRVhFQ1VURU9O
TFlPTkNFKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpyZXNj
aGVkdWxlU2NhdmVuZ2VyKCkKLXsKLSAgICAvLyBXZSBtdXN0IGRlbGV0ZSB0aGUgdGltZXIgYW5k
IGNyZWF0ZSBpdCBhZ2FpbiwgYmVjYXVzZSBpdCBpcyBub3QgcG9zc2libGUgdG8gcmV0cmlnZ2Vy
IGEgdGltZXIgb24gV2luZG93cy4KLSAgICBzdXNwZW5kU2NhdmVuZ2VyKCk7Ci0gICAgc2NoZWR1
bGVTY2F2ZW5nZXIoKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jX1BhZ2VIZWFw
OjpzdXNwZW5kU2NhdmVuZ2VyKCkKLXsKLSAgICBBU1NFUlQocGFnZWhlYXBfbG9jay5Jc0hlbGQo
KSk7Ci0gICAgSEFORExFIHNjYXZlbmdlUXVldWVUaW1lciA9IG1fc2NhdmVuZ2VRdWV1ZVRpbWVy
OwotICAgIG1fc2NhdmVuZ2VRdWV1ZVRpbWVyID0gMDsKLSAgICBEZWxldGVUaW1lclF1ZXVlVGlt
ZXIoMCwgc2NhdmVuZ2VRdWV1ZVRpbWVyLCAwKTsKLX0KLQotI2Vsc2UKLQotdm9pZCBUQ01hbGxv
Y19QYWdlSGVhcDo6aW5pdGlhbGl6ZVNjYXZlbmdlcigpCi17Ci0gICAgLy8gQ3JlYXRlIGEgbm9u
LXJlY3Vyc2l2ZSBtdXRleC4KLSNpZiAhZGVmaW5lZChQVEhSRUFEX01VVEVYX05PUk1BTCkgfHwg
UFRIUkVBRF9NVVRFWF9OT1JNQUwgPT0gUFRIUkVBRF9NVVRFWF9ERUZBVUxUCi0gICAgcHRocmVh
ZF9tdXRleF9pbml0KCZtX3NjYXZlbmdlTXV0ZXgsIDApOwotI2Vsc2UKLSAgICBwdGhyZWFkX211
dGV4YXR0cl90IGF0dHI7Ci0gICAgcHRocmVhZF9tdXRleGF0dHJfaW5pdCgmYXR0cik7Ci0gICAg
cHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSgmYXR0ciwgUFRIUkVBRF9NVVRFWF9OT1JNQUwpOwot
Ci0gICAgcHRocmVhZF9tdXRleF9pbml0KCZtX3NjYXZlbmdlTXV0ZXgsICZhdHRyKTsKLQotICAg
IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3koJmF0dHIpOwotI2VuZGlmCi0KLSAgICBwdGhyZWFk
X2NvbmRfaW5pdCgmbV9zY2F2ZW5nZUNvbmRpdGlvbiwgMCk7Ci0gICAgbV9zY2F2ZW5nZVRocmVh
ZEFjdGl2ZSA9IHRydWU7Ci0gICAgcHRocmVhZF90IHRocmVhZDsKLSAgICBwdGhyZWFkX2NyZWF0
ZSgmdGhyZWFkLCAwLCBydW5TY2F2ZW5nZXJUaHJlYWQsIHRoaXMpOwotfQotCi12b2lkKiBUQ01h
bGxvY19QYWdlSGVhcDo6cnVuU2NhdmVuZ2VyVGhyZWFkKHZvaWQqIGNvbnRleHQpCi17Ci0gICAg
c3RhdGljX2Nhc3Q8VENNYWxsb2NfUGFnZUhlYXAqPihjb250ZXh0KS0+c2NhdmVuZ2VyVGhyZWFk
KCk7Ci0jaWYgKENPTVBJTEVSKE1TVkMpIHx8IENPTVBJTEVSKFNVTkNDKSkKLSAgICAvLyBXaXRo
b3V0IHRoaXMsIFZpc3VhbCBTdHVkaW8gYW5kIFN1biBTdHVkaW8gd2lsbCBjb21wbGFpbiB0aGF0
IHRoaXMgbWV0aG9kIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLgotICAgIHJldHVybiAwOwotI2Vu
ZGlmCi19Ci0KLUFMV0FZU19JTkxJTkUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6c2lnbmFsU2Nh
dmVuZ2VyKCkKLXsKLSAgICAvLyBzaG91bGRTY2F2ZW5nZSgpIHNob3VsZCBiZSBjYWxsZWQgb25s
eSB3aGVuIHRoZSBwYWdlaGVhcF9sb2NrIHNwaW5sb2NrIGlzIGhlbGQsIGFkZGl0aW9uYWxseSwg
Ci0gICAgLy8gbV9zY2F2ZW5nZVRocmVhZEFjdGl2ZSBpcyBvbmx5IHNldCB0byBmYWxzZSB3aGls
c3QgcGFnZWhlYXBfbG9jayBpcyBoZWxkLiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoaXMgaXMK
LSAgICAvLyB0YWtlbiBwcmlvciB0byBjYWxsaW5nIHRoaXMgbWV0aG9kLiBJZiB0aGUgc2NhdmVu
Z2VyIHRocmVhZCBpcyBzbGVlcGluZyBhbmQgc2hvdWxkU2NhdmVuZ2UoKSBpbmRpY2F0ZXMgdGhl
cmUKLSAgICAvLyBpcyBtZW1vcnkgdG8gZnJlZSB0aGUgc2NhdmVuZ2VyIHRocmVhZCBpcyBzaWdu
YWxsZWQgdG8gc3RhcnQuCi0gICAgQVNTRVJUKHBhZ2VoZWFwX2xvY2suSXNIZWxkKCkpOwotICAg
IGlmICghbV9zY2F2ZW5nZVRocmVhZEFjdGl2ZSAmJiBzaG91bGRTY2F2ZW5nZSgpKQotICAgICAg
ICBwdGhyZWFkX2NvbmRfc2lnbmFsKCZtX3NjYXZlbmdlQ29uZGl0aW9uKTsKLX0KLQotI2VuZGlm
Ci0KLXZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OnNjYXZlbmdlKCkKLXsKLSAgICBBU1NFUlQoa1Bh
Z2VTaGlmdCAmJiBrTnVtQ2xhc3NlcyAmJiBrUGFnZVNpemUpOwotICAgIHNpemVfdCBwYWdlc1Rv
UmVsZWFzZSA9IG1pbl9mcmVlX2NvbW1pdHRlZF9wYWdlc19zaW5jZV9sYXN0X3NjYXZlbmdlXyAq
IGtTY2F2ZW5nZVBlcmNlbnRhZ2U7Ci0gICAgc2l6ZV90IHRhcmdldFBhZ2VDb3VudCA9IHN0ZDo6
bWF4PHNpemVfdD4oa01pbmltdW1GcmVlQ29tbWl0dGVkUGFnZUNvdW50LCBmcmVlX2NvbW1pdHRl
ZF9wYWdlc18gLSBwYWdlc1RvUmVsZWFzZSk7Ci0KLSAgICBMZW5ndGggbGFzdEZyZWVDb21taXR0
ZWRQYWdlcyA9IGZyZWVfY29tbWl0dGVkX3BhZ2VzXzsKLSAgICB3aGlsZSAoZnJlZV9jb21taXR0
ZWRfcGFnZXNfID4gdGFyZ2V0UGFnZUNvdW50KSB7Ci0gICAgICAgIEFTU0VSVChDaGVjaygpKTsK
LSAgICAgICAgZm9yIChpbnQgaSA9IGtNYXhQYWdlczsgaSA+IDAgJiYgZnJlZV9jb21taXR0ZWRf
cGFnZXNfID49IHRhcmdldFBhZ2VDb3VudDsgaS0tKSB7Ci0gICAgICAgICAgICBTcGFuTGlzdCog
c2xpc3QgPSAoc3RhdGljX2Nhc3Q8c2l6ZV90PihpKSA9PSBrTWF4UGFnZXMpID8gJmxhcmdlXyA6
ICZmcmVlX1tpXTsKLSAgICAgICAgICAgIC8vIElmIHRoZSBzcGFuIHNpemUgaXMgYmlnZ2VyIHRo
YW4ga01pblNwYW5MaXN0c1dpdGhTcGFucyBwYWdlcyByZXR1cm4gYWxsIHRoZSBzcGFucyBpbiB0
aGUgbGlzdCwgZWxzZSByZXR1cm4gYWxsIGJ1dCAxIHNwYW4uICAKLSAgICAgICAgICAgIC8vIFJl
dHVybiBvbmx5IDUwJSBvZiBhIHNwYW5saXN0IGF0IGEgdGltZSBzbyBzcGFucyBvZiBzaXplIDEg
YXJlIG5vdCB0aGUgb25seSBvbmVzIGxlZnQuCi0gICAgICAgICAgICBzaXplX3QgbGVuZ3RoID0g
RExMX0xlbmd0aCgmc2xpc3QtPm5vcm1hbCwgZW50cm9weV8pOwotICAgICAgICAgICAgc2l6ZV90
IG51bVNwYW5zVG9SZXR1cm4gPSAoaSA+IGtNaW5TcGFuTGlzdHNXaXRoU3BhbnMpID8gbGVuZ3Ro
IDogbGVuZ3RoIC8gMjsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBzdGF0aWNfY2FzdDxz
aXplX3Q+KGopIDwgbnVtU3BhbnNUb1JldHVybiAmJiAhRExMX0lzRW1wdHkoJnNsaXN0LT5ub3Jt
YWwsIGVudHJvcHlfKSAmJiBmcmVlX2NvbW1pdHRlZF9wYWdlc18gPiB0YXJnZXRQYWdlQ291bnQ7
IGorKykgewotICAgICAgICAgICAgICAgIFNwYW4qIHMgPSBzbGlzdC0+bm9ybWFsLnByZXYoZW50
cm9weV8pOwotICAgICAgICAgICAgICAgIERMTF9SZW1vdmUocywgZW50cm9weV8pOwotICAgICAg
ICAgICAgICAgIEFTU0VSVCghcy0+ZGVjb21taXR0ZWQpOwotICAgICAgICAgICAgICAgIGlmICgh
cy0+ZGVjb21taXR0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgVENNYWxsb2NfU3lzdGVtUmVs
ZWFzZShyZWludGVycHJldF9jYXN0PHZvaWQqPihzLT5zdGFydCA8PCBrUGFnZVNoaWZ0KSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXpl
X3Q+KHMtPmxlbmd0aCA8PCBrUGFnZVNoaWZ0KSk7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VS
VChmcmVlX2NvbW1pdHRlZF9wYWdlc18gPj0gcy0+bGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAg
ICAgZnJlZV9jb21taXR0ZWRfcGFnZXNfIC09IHMtPmxlbmd0aDsKLSAgICAgICAgICAgICAgICAg
ICAgcy0+ZGVjb21taXR0ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBETExfUHJlcGVuZCgmc2xpc3QtPnJldHVybmVkLCBzLCBlbnRyb3B5Xyk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobGFzdEZyZWVDb21taXR0ZWRQYWdlcyA9
PSBmcmVlX2NvbW1pdHRlZF9wYWdlc18pCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgbGFz
dEZyZWVDb21taXR0ZWRQYWdlcyA9IGZyZWVfY29tbWl0dGVkX3BhZ2VzXzsKLSAgICB9Ci0KLSAg
ICBtaW5fZnJlZV9jb21taXR0ZWRfcGFnZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV8gPSBmcmVlX2Nv
bW1pdHRlZF9wYWdlc187Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBUQ01hbGxvY19QYWdlSGVh
cDo6c2hvdWxkU2NhdmVuZ2UoKSBjb25zdCAKLXsKLSAgICByZXR1cm4gZnJlZV9jb21taXR0ZWRf
cGFnZXNfID4ga01pbmltdW1GcmVlQ29tbWl0dGVkUGFnZUNvdW50OyAKLX0KLQotI2VuZGlmICAv
LyBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0KLWlubGluZSBTcGFu
KiBUQ01hbGxvY19QYWdlSGVhcDo6TmV3KExlbmd0aCBuKSB7Ci0gIEFTU0VSVChDaGVjaygpKTsK
LSAgQVNTRVJUKG4gPiAwKTsKLQotICAvLyBGaW5kIGZpcnN0IHNpemUgPj0gbiB0aGF0IGhhcyBh
IG5vbi1lbXB0eSBsaXN0Ci0gIGZvciAoTGVuZ3RoIHMgPSBuOyBzIDwga01heFBhZ2VzOyBzKysp
IHsKLSAgICBTcGFuKiBsbCA9IE5VTEw7Ci0gICAgYm9vbCByZWxlYXNlZCA9IGZhbHNlOwotICAg
IGlmICghRExMX0lzRW1wdHkoJmZyZWVfW3NdLm5vcm1hbCwgZW50cm9weV8pKSB7Ci0gICAgICAv
LyBGb3VuZCBub3JtYWwgc3BhbgotICAgICAgbGwgPSAmZnJlZV9bc10ubm9ybWFsOwotICAgIH0g
ZWxzZSBpZiAoIURMTF9Jc0VtcHR5KCZmcmVlX1tzXS5yZXR1cm5lZCwgZW50cm9weV8pKSB7Ci0g
ICAgICAvLyBGb3VuZCByZXR1cm5lZCBzcGFuOyByZWFsbG9jYXRlIGl0Ci0gICAgICBsbCA9ICZm
cmVlX1tzXS5yZXR1cm5lZDsKLSAgICAgIHJlbGVhc2VkID0gdHJ1ZTsKLSAgICB9IGVsc2Ugewot
ICAgICAgLy8gS2VlcCBsb29raW5nIGluIGxhcmdlciBjbGFzc2VzCi0gICAgICBjb250aW51ZTsK
LSAgICB9Ci0KLSAgICBTcGFuKiByZXN1bHQgPSBsbC0+bmV4dChlbnRyb3B5Xyk7Ci0gICAgQ2Fy
dmUocmVzdWx0LCBuLCByZWxlYXNlZCk7Ci0jaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1ND
QVZFTkdFX01FTU9SWQotICAgIC8vIFRoZSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyb20g
YSBzcGFuIHRoYXQncyBpbiB0aGUgbm9ybWFsIHNwYW4gbGlzdCAoYWxyZWFkeSBjb21taXR0ZWQp
LiAgVXBkYXRlIHRoZQotICAgIC8vIGZyZWUgY29tbWl0dGVkIHBhZ2VzIGNvdW50LgotICAgIEFT
U0VSVChmcmVlX2NvbW1pdHRlZF9wYWdlc18gPj0gbik7Ci0gICAgZnJlZV9jb21taXR0ZWRfcGFn
ZXNfIC09IG47Ci0gICAgaWYgKGZyZWVfY29tbWl0dGVkX3BhZ2VzXyA8IG1pbl9mcmVlX2NvbW1p
dHRlZF9wYWdlc19zaW5jZV9sYXN0X3NjYXZlbmdlXykgCi0gICAgICBtaW5fZnJlZV9jb21taXR0
ZWRfcGFnZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV8gPSBmcmVlX2NvbW1pdHRlZF9wYWdlc187Ci0j
ZW5kaWYgIC8vIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgICBB
U1NFUlQoQ2hlY2soKSk7Ci0gICAgZnJlZV9wYWdlc18gLT0gbjsKLSAgICByZXR1cm4gcmVzdWx0
OwotICB9Ci0KLSAgU3BhbiogcmVzdWx0ID0gQWxsb2NMYXJnZShuKTsKLSAgaWYgKHJlc3VsdCAh
PSBOVUxMKSB7Ci0gICAgICBBU1NFUlRfU1BBTl9DT01NSVRURUQocmVzdWx0KTsKLSAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gIH0KLQotICAvLyBHcm93IHRoZSBoZWFwIGFuZCB0cnkgYWdhaW4KLSAg
aWYgKCFHcm93SGVhcChuKSkgewotICAgIEFTU0VSVChDaGVjaygpKTsKLSAgICByZXR1cm4gTlVM
TDsKLSAgfQotCi0gIHJldHVybiBOZXcobik7Ci19Ci0KLVNwYW4qIFRDTWFsbG9jX1BhZ2VIZWFw
OjpBbGxvY0xhcmdlKExlbmd0aCBuKSB7Ci0gIC8vIGZpbmQgdGhlIGJlc3Qgc3BhbiAoY2xvc2Vz
dCB0byBuIGluIHNpemUpLgotICAvLyBUaGUgZm9sbG93aW5nIGxvb3BzIGltcGxlbWVudHMgYWRk
cmVzcy1vcmRlcmVkIGJlc3QtZml0LgotICBib29sIGZyb21fcmVsZWFzZWQgPSBmYWxzZTsKLSAg
U3BhbiAqYmVzdCA9IE5VTEw7Ci0KLSAgLy8gU2VhcmNoIHRocm91Z2ggbm9ybWFsIGxpc3QKLSAg
Zm9yIChTcGFuKiBzcGFuID0gbGFyZ2VfLm5vcm1hbC5uZXh0KGVudHJvcHlfKTsKLSAgICAgICBz
cGFuICE9ICZsYXJnZV8ubm9ybWFsOwotICAgICAgIHNwYW4gPSBzcGFuLT5uZXh0KGVudHJvcHlf
KSkgewotICAgIGlmIChzcGFuLT5sZW5ndGggPj0gbikgewotICAgICAgaWYgKChiZXN0ID09IE5V
TEwpCi0gICAgICAgICAgfHwgKHNwYW4tPmxlbmd0aCA8IGJlc3QtPmxlbmd0aCkKLSAgICAgICAg
ICB8fCAoKHNwYW4tPmxlbmd0aCA9PSBiZXN0LT5sZW5ndGgpICYmIChzcGFuLT5zdGFydCA8IGJl
c3QtPnN0YXJ0KSkpIHsKLSAgICAgICAgYmVzdCA9IHNwYW47Ci0gICAgICAgIGZyb21fcmVsZWFz
ZWQgPSBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBTZWFyY2ggdGhyb3VnaCBy
ZWxlYXNlZCBsaXN0IGluIGNhc2UgaXQgaGFzIGEgYmV0dGVyIGZpdAotICBmb3IgKFNwYW4qIHNw
YW4gPSBsYXJnZV8ucmV0dXJuZWQubmV4dChlbnRyb3B5Xyk7Ci0gICAgICAgc3BhbiAhPSAmbGFy
Z2VfLnJldHVybmVkOwotICAgICAgIHNwYW4gPSBzcGFuLT5uZXh0KGVudHJvcHlfKSkgewotICAg
IGlmIChzcGFuLT5sZW5ndGggPj0gbikgewotICAgICAgaWYgKChiZXN0ID09IE5VTEwpCi0gICAg
ICAgICAgfHwgKHNwYW4tPmxlbmd0aCA8IGJlc3QtPmxlbmd0aCkKLSAgICAgICAgICB8fCAoKHNw
YW4tPmxlbmd0aCA9PSBiZXN0LT5sZW5ndGgpICYmIChzcGFuLT5zdGFydCA8IGJlc3QtPnN0YXJ0
KSkpIHsKLSAgICAgICAgYmVzdCA9IHNwYW47Ci0gICAgICAgIGZyb21fcmVsZWFzZWQgPSB0cnVl
OwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIGlmIChiZXN0ICE9IE5VTEwpIHsKLSAgICBDYXJ2
ZShiZXN0LCBuLCBmcm9tX3JlbGVhc2VkKTsKLSNpZiBVU0VfQkFDS0dST1VORF9USFJFQURfVE9f
U0NBVkVOR0VfTUVNT1JZCi0gICAgLy8gVGhlIG5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgaXMgZnJv
bSBhIHNwYW4gdGhhdCdzIGluIHRoZSBub3JtYWwgc3BhbiBsaXN0IChhbHJlYWR5IGNvbW1pdHRl
ZCkuICBVcGRhdGUgdGhlCi0gICAgLy8gZnJlZSBjb21taXR0ZWQgcGFnZXMgY291bnQuCi0gICAg
QVNTRVJUKGZyZWVfY29tbWl0dGVkX3BhZ2VzXyA+PSBuKTsKLSAgICBmcmVlX2NvbW1pdHRlZF9w
YWdlc18gLT0gbjsKLSAgICBpZiAoZnJlZV9jb21taXR0ZWRfcGFnZXNfIDwgbWluX2ZyZWVfY29t
bWl0dGVkX3BhZ2VzX3NpbmNlX2xhc3Rfc2NhdmVuZ2VfKQotICAgICAgbWluX2ZyZWVfY29tbWl0
dGVkX3BhZ2VzX3NpbmNlX2xhc3Rfc2NhdmVuZ2VfID0gZnJlZV9jb21taXR0ZWRfcGFnZXNfOwot
I2VuZGlmICAvLyBVU0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gICAg
QVNTRVJUKENoZWNrKCkpOwotICAgIGZyZWVfcGFnZXNfIC09IG47Ci0gICAgcmV0dXJuIGJlc3Q7
Ci0gIH0KLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLVNwYW4qIFRDTWFsbG9jX1BhZ2VIZWFwOjpTcGxp
dChTcGFuKiBzcGFuLCBMZW5ndGggbikgewotICBBU1NFUlQoMCA8IG4pOwotICBBU1NFUlQobiA8
IHNwYW4tPmxlbmd0aCk7Ci0gIEFTU0VSVCghc3Bhbi0+ZnJlZSk7Ci0gIEFTU0VSVChzcGFuLT5z
aXplY2xhc3MgPT0gMCk7Ci0gIEV2ZW50KHNwYW4sICdUJywgbik7Ci0KLSAgY29uc3QgTGVuZ3Ro
IGV4dHJhID0gc3Bhbi0+bGVuZ3RoIC0gbjsKLSAgU3BhbiogbGVmdG92ZXIgPSBOZXdTcGFuKHNw
YW4tPnN0YXJ0ICsgbiwgZXh0cmEpOwotICBFdmVudChsZWZ0b3ZlciwgJ1UnLCBleHRyYSk7Ci0g
IFJlY29yZFNwYW4obGVmdG92ZXIpOwotICBwYWdlbWFwXy5zZXQoc3Bhbi0+c3RhcnQgKyBuIC0g
MSwgc3Bhbik7IC8vIFVwZGF0ZSBtYXAgZnJvbSBwYWdlaWQgdG8gc3BhbgotICBzcGFuLT5sZW5n
dGggPSBuOwotCi0gIHJldHVybiBsZWZ0b3ZlcjsKLX0KLQotaW5saW5lIHZvaWQgVENNYWxsb2Nf
UGFnZUhlYXA6OkNhcnZlKFNwYW4qIHNwYW4sIExlbmd0aCBuLCBib29sIHJlbGVhc2VkKSB7Ci0g
IEFTU0VSVChrUGFnZVNoaWZ0ICYmIGtOdW1DbGFzc2VzICYmIGtQYWdlU2l6ZSk7Ci0gIEFTU0VS
VChuID4gMCk7Ci0gIERMTF9SZW1vdmUoc3BhbiwgZW50cm9weV8pOwotICBzcGFuLT5mcmVlID0g
MDsKLSAgRXZlbnQoc3BhbiwgJ0EnLCBuKTsKLQotICBpZiAocmVsZWFzZWQpIHsKLSAgICAvLyBJ
ZiB0aGUgc3BhbiBjaG9zZW4gdG8gY2FydmUgZnJvbSBpcyBkZWNvbW1pdGVkLCBjb21taXQgdGhl
IGVudGlyZSBzcGFuIGF0IG9uY2UgdG8gYXZvaWQgY29tbWl0dGluZyBzcGFucyAxIHBhZ2UgYXQg
YSB0aW1lLgotICAgIEFTU0VSVChzcGFuLT5kZWNvbW1pdHRlZCk7Ci0gICAgVENNYWxsb2NfU3lz
dGVtQ29tbWl0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNwYW4tPnN0YXJ0IDw8IGtQYWdlU2hp
ZnQpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KHNwYW4tPmxlbmd0aCA8PCBrUGFnZVNoaWZ0KSk7Ci0g
ICAgc3Bhbi0+ZGVjb21taXR0ZWQgPSBmYWxzZTsKLSNpZiBVU0VfQkFDS0dST1VORF9USFJFQURf
VE9fU0NBVkVOR0VfTUVNT1JZCi0gICAgZnJlZV9jb21taXR0ZWRfcGFnZXNfICs9IHNwYW4tPmxl
bmd0aDsKLSNlbmRpZgotICB9Ci0gIAotICBjb25zdCBpbnQgZXh0cmEgPSBzdGF0aWNfY2FzdDxp
bnQ+KHNwYW4tPmxlbmd0aCAtIG4pOwotICBBU1NFUlQoZXh0cmEgPj0gMCk7Ci0gIGlmIChleHRy
YSA+IDApIHsKLSAgICBTcGFuKiBsZWZ0b3ZlciA9IE5ld1NwYW4oc3Bhbi0+c3RhcnQgKyBuLCBl
eHRyYSk7Ci0gICAgbGVmdG92ZXItPmZyZWUgPSAxOwotICAgIGxlZnRvdmVyLT5kZWNvbW1pdHRl
ZCA9IGZhbHNlOwotICAgIEV2ZW50KGxlZnRvdmVyLCAnUycsIGV4dHJhKTsKLSAgICBSZWNvcmRT
cGFuKGxlZnRvdmVyKTsKLQotICAgIC8vIFBsYWNlIGxlZnRvdmVyIHNwYW4gb24gYXBwcm9wcmlh
dGUgZnJlZSBsaXN0Ci0gICAgU3Bhbkxpc3QqIGxpc3RwYWlyID0gKHN0YXRpY19jYXN0PHNpemVf
dD4oZXh0cmEpIDwga01heFBhZ2VzKSA/ICZmcmVlX1tleHRyYV0gOiAmbGFyZ2VfOwotICAgIFNw
YW4qIGRzdCA9ICZsaXN0cGFpci0+bm9ybWFsOwotICAgIERMTF9QcmVwZW5kKGRzdCwgbGVmdG92
ZXIsIGVudHJvcHlfKTsKLQotICAgIHNwYW4tPmxlbmd0aCA9IG47Ci0gICAgcGFnZW1hcF8uc2V0
KHNwYW4tPnN0YXJ0ICsgbiAtIDEsIHNwYW4pOwotICB9Ci19Ci0KLXN0YXRpYyBBTFdBWVNfSU5M
SU5FIHZvaWQgbWVyZ2VEZWNvbW1pdHRlZFN0YXRlcyhTcGFuKiBkZXN0aW5hdGlvbiwgU3Bhbiog
b3RoZXIpCi17Ci0gICAgQVNTRVJUKGtQYWdlU2hpZnQgJiYga051bUNsYXNzZXMgJiYga1BhZ2VT
aXplKTsKLSAgICBpZiAoZGVzdGluYXRpb24tPmRlY29tbWl0dGVkICYmICFvdGhlci0+ZGVjb21t
aXR0ZWQpIHsKLSAgICAgICAgVENNYWxsb2NfU3lzdGVtUmVsZWFzZShyZWludGVycHJldF9jYXN0
PHZvaWQqPihvdGhlci0+c3RhcnQgPDwga1BhZ2VTaGlmdCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90PihvdGhlci0+bGVuZ3RoIDw8IGtQYWdlU2hp
ZnQpKTsKLSAgICB9IGVsc2UgaWYgKG90aGVyLT5kZWNvbW1pdHRlZCAmJiAhZGVzdGluYXRpb24t
PmRlY29tbWl0dGVkKSB7Ci0gICAgICAgIFRDTWFsbG9jX1N5c3RlbVJlbGVhc2UocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oZGVzdGluYXRpb24tPnN0YXJ0IDw8IGtQYWdlU2hpZnQpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4oZGVzdGluYXRpb24t
Pmxlbmd0aCA8PCBrUGFnZVNoaWZ0KSk7Ci0gICAgICAgIGRlc3RpbmF0aW9uLT5kZWNvbW1pdHRl
ZCA9IHRydWU7Ci0gICAgfQotfQotCi1pbmxpbmUgdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6RGVs
ZXRlKFNwYW4qIHNwYW4pIHsKLSAgQVNTRVJUKENoZWNrKCkpOwotICBBU1NFUlQoIXNwYW4tPmZy
ZWUpOwotICBBU1NFUlQoc3Bhbi0+bGVuZ3RoID4gMCk7Ci0gIEFTU0VSVChHZXREZXNjcmlwdG9y
KHNwYW4tPnN0YXJ0KSA9PSBzcGFuKTsKLSAgQVNTRVJUKEdldERlc2NyaXB0b3Ioc3Bhbi0+c3Rh
cnQgKyBzcGFuLT5sZW5ndGggLSAxKSA9PSBzcGFuKTsKLSAgc3Bhbi0+c2l6ZWNsYXNzID0gMDsK
LSNpZm5kZWYgTk9fVENNQUxMT0NfU0FNUExFUwotICBzcGFuLT5zYW1wbGUgPSAwOwotI2VuZGlm
Ci0KLSAgLy8gQ29hbGVzY2UgLS0gd2UgZ3VhcmFudGVlIHRoYXQgInAiICE9IDAsIHNvIG5vIGJv
dW5kcyBjaGVja2luZwotICAvLyBuZWNlc3NhcnkuICBXZSBkbyBub3QgYm90aGVyIHJlc2V0dGlu
ZyB0aGUgc3RhbGUgcGFnZW1hcAotICAvLyBlbnRyaWVzIGZvciB0aGUgcGllY2VzIHdlIGFyZSBt
ZXJnaW5nIHRvZ2V0aGVyIGJlY2F1c2Ugd2Ugb25seQotICAvLyBjYXJlIGFib3V0IHRoZSBwYWdl
bWFwIGVudHJpZXMgZm9yIHRoZSBib3VuZGFyaWVzLgotI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVB
RF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgLy8gVHJhY2sgdGhlIHRvdGFsIHNpemUgb2YgdGhlIG5l
aWdoYm9yaW5nIGZyZWUgc3BhbnMgdGhhdCBhcmUgY29tbWl0dGVkLgotICBMZW5ndGggbmVpZ2hi
b3JpbmdDb21taXR0ZWRTcGFuc0xlbmd0aCA9IDA7Ci0jZW5kaWYKLSAgY29uc3QgUGFnZUlEIHAg
PSBzcGFuLT5zdGFydDsKLSAgY29uc3QgTGVuZ3RoIG4gPSBzcGFuLT5sZW5ndGg7Ci0gIFNwYW4q
IHByZXYgPSBHZXREZXNjcmlwdG9yKHAtMSk7Ci0gIGlmIChwcmV2ICE9IE5VTEwgJiYgcHJldi0+
ZnJlZSkgewotICAgIC8vIE1lcmdlIHByZWNlZGluZyBzcGFuIGludG8gdGhpcyBzcGFuCi0gICAg
QVNTRVJUKHByZXYtPnN0YXJ0ICsgcHJldi0+bGVuZ3RoID09IHApOwotICAgIGNvbnN0IExlbmd0
aCBsZW4gPSBwcmV2LT5sZW5ndGg7Ci0jaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZF
TkdFX01FTU9SWQotICAgIGlmICghcHJldi0+ZGVjb21taXR0ZWQpCi0gICAgICAgIG5laWdoYm9y
aW5nQ29tbWl0dGVkU3BhbnNMZW5ndGggKz0gbGVuOwotI2VuZGlmCi0gICAgbWVyZ2VEZWNvbW1p
dHRlZFN0YXRlcyhzcGFuLCBwcmV2KTsKLSAgICBETExfUmVtb3ZlKHByZXYsIGVudHJvcHlfKTsK
LSAgICBEZWxldGVTcGFuKHByZXYpOwotICAgIHNwYW4tPnN0YXJ0IC09IGxlbjsKLSAgICBzcGFu
LT5sZW5ndGggKz0gbGVuOwotICAgIHBhZ2VtYXBfLnNldChzcGFuLT5zdGFydCwgc3Bhbik7Ci0g
ICAgRXZlbnQoc3BhbiwgJ0wnLCBsZW4pOwotICB9Ci0gIFNwYW4qIG5leHQgPSBHZXREZXNjcmlw
dG9yKHArbik7Ci0gIGlmIChuZXh0ICE9IE5VTEwgJiYgbmV4dC0+ZnJlZSkgewotICAgIC8vIE1l
cmdlIG5leHQgc3BhbiBpbnRvIHRoaXMgc3BhbgotICAgIEFTU0VSVChuZXh0LT5zdGFydCA9PSBw
K24pOwotICAgIGNvbnN0IExlbmd0aCBsZW4gPSBuZXh0LT5sZW5ndGg7Ci0jaWYgVVNFX0JBQ0tH
Uk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICAgIGlmICghbmV4dC0+ZGVjb21taXR0
ZWQpCi0gICAgICAgIG5laWdoYm9yaW5nQ29tbWl0dGVkU3BhbnNMZW5ndGggKz0gbGVuOwotI2Vu
ZGlmCi0gICAgbWVyZ2VEZWNvbW1pdHRlZFN0YXRlcyhzcGFuLCBuZXh0KTsKLSAgICBETExfUmVt
b3ZlKG5leHQsIGVudHJvcHlfKTsKLSAgICBEZWxldGVTcGFuKG5leHQpOwotICAgIHNwYW4tPmxl
bmd0aCArPSBsZW47Ci0gICAgcGFnZW1hcF8uc2V0KHNwYW4tPnN0YXJ0ICsgc3Bhbi0+bGVuZ3Ro
IC0gMSwgc3Bhbik7Ci0gICAgRXZlbnQoc3BhbiwgJ1InLCBsZW4pOwotICB9Ci0KLSAgRXZlbnQo
c3BhbiwgJ0QnLCBzcGFuLT5sZW5ndGgpOwotICBzcGFuLT5mcmVlID0gMTsKLSAgaWYgKHNwYW4t
PmRlY29tbWl0dGVkKSB7Ci0gICAgaWYgKHNwYW4tPmxlbmd0aCA8IGtNYXhQYWdlcykKLSAgICAg
IERMTF9QcmVwZW5kKCZmcmVlX1tzcGFuLT5sZW5ndGhdLnJldHVybmVkLCBzcGFuLCBlbnRyb3B5
Xyk7Ci0gICAgZWxzZQotICAgICAgRExMX1ByZXBlbmQoJmxhcmdlXy5yZXR1cm5lZCwgc3Bhbiwg
ZW50cm9weV8pOwotICB9IGVsc2UgewotICAgIGlmIChzcGFuLT5sZW5ndGggPCBrTWF4UGFnZXMp
Ci0gICAgICBETExfUHJlcGVuZCgmZnJlZV9bc3Bhbi0+bGVuZ3RoXS5ub3JtYWwsIHNwYW4sIGVu
dHJvcHlfKTsKLSAgICBlbHNlCi0gICAgICBETExfUHJlcGVuZCgmbGFyZ2VfLm5vcm1hbCwgc3Bh
biwgZW50cm9weV8pOwotICB9Ci0gIGZyZWVfcGFnZXNfICs9IG47Ci0KLSNpZiBVU0VfQkFDS0dS
T1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gIGlmIChzcGFuLT5kZWNvbW1pdHRlZCkg
ewotICAgICAgLy8gSWYgdGhlIG1lcmdlZCBzcGFuIGlzIGRlY29tbWl0dGVkLCB0aGF0IG1lYW5z
IHdlIGRlY29tbWl0dGVkIGFueSBuZWlnaGJvcmluZyBzcGFucyB0aGF0IHdlcmUKLSAgICAgIC8v
IGNvbW1pdHRlZC4gIFVwZGF0ZSB0aGUgZnJlZSBjb21taXR0ZWQgcGFnZXMgY291bnQuCi0gICAg
ICBmcmVlX2NvbW1pdHRlZF9wYWdlc18gLT0gbmVpZ2hib3JpbmdDb21taXR0ZWRTcGFuc0xlbmd0
aDsKLSAgICAgIGlmIChmcmVlX2NvbW1pdHRlZF9wYWdlc18gPCBtaW5fZnJlZV9jb21taXR0ZWRf
cGFnZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV8pCi0gICAgICAgICAgICBtaW5fZnJlZV9jb21taXR0
ZWRfcGFnZXNfc2luY2VfbGFzdF9zY2F2ZW5nZV8gPSBmcmVlX2NvbW1pdHRlZF9wYWdlc187Ci0g
IH0gZWxzZSB7Ci0gICAgICAvLyBJZiB0aGUgbWVyZ2VkIHNwYW4gcmVtYWlucyBjb21taXR0ZWQs
IGFkZCB0aGUgZGVsZXRlZCBzcGFuJ3Mgc2l6ZSB0byB0aGUgZnJlZSBjb21taXR0ZWQgcGFnZXMg
Y291bnQuCi0gICAgICBmcmVlX2NvbW1pdHRlZF9wYWdlc18gKz0gbjsKLSAgfQotCi0gIC8vIE1h
a2Ugc3VyZSB0aGUgc2NhdmVuZ2UgdGhyZWFkIGJlY29tZXMgYWN0aXZlIGlmIHdlIGhhdmUgZW5v
dWdoIGZyZWVkIHBhZ2VzIHRvIHJlbGVhc2Ugc29tZSBiYWNrIHRvIHRoZSBzeXN0ZW0uCi0gIHNp
Z25hbFNjYXZlbmdlcigpOwotI2Vsc2UKLSAgSW5jcmVtZW50YWxTY2F2ZW5nZShuKTsKLSNlbmRp
ZgotCi0gIEFTU0VSVChDaGVjaygpKTsKLX0KLQotI2lmICFVU0VfQkFDS0dST1VORF9USFJFQURf
VE9fU0NBVkVOR0VfTUVNT1JZCi12b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpJbmNyZW1lbnRhbFNj
YXZlbmdlKExlbmd0aCBuKSB7Ci0gIEFTU0VSVChrUGFnZVNoaWZ0ICYmIGtOdW1DbGFzc2VzICYm
IGtQYWdlU2l6ZSk7Ci0gIC8vIEZhc3QgcGF0aDsgbm90IHlldCB0aW1lIHRvIHJlbGVhc2UgbWVt
b3J5Ci0gIHNjYXZlbmdlX2NvdW50ZXJfIC09IG47Ci0gIGlmIChzY2F2ZW5nZV9jb3VudGVyXyA+
PSAwKSByZXR1cm47ICAvLyBOb3QgeWV0IHRpbWUgdG8gc2NhdmVuZ2UKLQotI2lmIFBMQVRGT1JN
KElPUykKLSAgc3RhdGljIGNvbnN0IHNpemVfdCBrRGVmYXVsdFJlbGVhc2VEZWxheSA9IDY0Owot
I2Vsc2UKLSAgLy8gSWYgdGhlcmUgaXMgbm90aGluZyB0byByZWxlYXNlLCB3YWl0IGZvciBzbyBt
YW55IHBhZ2VzIGJlZm9yZQotICAvLyBzY2F2ZW5naW5nIGFnYWluLiAgV2l0aCA0SyBwYWdlcywg
dGhpcyBjb21lcyB0byAxNk1CIG9mIG1lbW9yeS4KLSAgc3RhdGljIGNvbnN0IHNpemVfdCBrRGVm
YXVsdFJlbGVhc2VEZWxheSA9IDEgPDwgODsKLSNlbmRpZgotCi0gIC8vIEZpbmQgaW5kZXggb2Yg
ZnJlZSBsaXN0IHRvIHNjYXZlbmdlCi0gIHNpemVfdCBpbmRleCA9IHNjYXZlbmdlX2luZGV4XyAr
IDE7Ci0gIHVpbnRwdHJfdCBlbnRyb3B5ID0gZW50cm9weV87Ci0gIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwga01heFBhZ2VzKzE7IGkrKykgewotICAgIGlmIChpbmRleCA+IGtNYXhQYWdlcykgaW5k
ZXggPSAwOwotICAgIFNwYW5MaXN0KiBzbGlzdCA9IChpbmRleCA9PSBrTWF4UGFnZXMpID8gJmxh
cmdlXyA6ICZmcmVlX1tpbmRleF07Ci0gICAgaWYgKCFETExfSXNFbXB0eSgmc2xpc3QtPm5vcm1h
bCwgZW50cm9weSkpIHsKLSAgICAgIC8vIFJlbGVhc2UgdGhlIGxhc3Qgc3BhbiBvbiB0aGUgbm9y
bWFsIHBvcnRpb24gb2YgdGhpcyBsaXN0Ci0gICAgICBTcGFuKiBzID0gc2xpc3QtPm5vcm1hbC5w
cmV2KGVudHJvcHkpOwotICAgICAgRExMX1JlbW92ZShzLCBlbnRyb3B5Xyk7Ci0gICAgICBUQ01h
bGxvY19TeXN0ZW1SZWxlYXNlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHMtPnN0YXJ0IDw8IGtQ
YWdlU2hpZnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXpl
X3Q+KHMtPmxlbmd0aCA8PCBrUGFnZVNoaWZ0KSk7Ci0gICAgICBzLT5kZWNvbW1pdHRlZCA9IHRy
dWU7Ci0gICAgICBETExfUHJlcGVuZCgmc2xpc3QtPnJldHVybmVkLCBzLCBlbnRyb3B5KTsKLQot
I2lmIFBMQVRGT1JNKElPUykKLSAgICAgIHNjYXZlbmdlX2NvdW50ZXJfID0gc3RkOjptYXg8c2l6
ZV90PigxNlVMLCBzdGQ6Om1pbjxzaXplX3Q+KGtEZWZhdWx0UmVsZWFzZURlbGF5LCBrRGVmYXVs
dFJlbGVhc2VEZWxheSAtIChmcmVlX3BhZ2VzXyAvIGtEZWZhdWx0UmVsZWFzZURlbGF5KSkpOwot
I2Vsc2UKLSAgICAgIHNjYXZlbmdlX2NvdW50ZXJfID0gc3RkOjptYXg8c2l6ZV90Pig2NFVMLCBz
dGQ6Om1pbjxzaXplX3Q+KGtEZWZhdWx0UmVsZWFzZURlbGF5LCBrRGVmYXVsdFJlbGVhc2VEZWxh
eSAtIChmcmVlX3BhZ2VzXyAvIGtEZWZhdWx0UmVsZWFzZURlbGF5KSkpOwotI2VuZGlmCi0KLSAg
ICAgIGlmIChpbmRleCA9PSBrTWF4UGFnZXMgJiYgIURMTF9Jc0VtcHR5KCZzbGlzdC0+bm9ybWFs
LCBlbnRyb3B5KSkKLSAgICAgICAgc2NhdmVuZ2VfaW5kZXhfID0gaW5kZXggLSAxOwotICAgICAg
ZWxzZQotICAgICAgICBzY2F2ZW5nZV9pbmRleF8gPSBpbmRleDsKLSAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgaW5kZXgrKzsKLSAgfQotCi0gIC8vIE5vdGhpbmcgdG8gc2NhdmVuZ2UsIGRlbGF5
IGZvciBhIHdoaWxlCi0gIHNjYXZlbmdlX2NvdW50ZXJfID0ga0RlZmF1bHRSZWxlYXNlRGVsYXk7
Ci19Ci0jZW5kaWYKLQotdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6UmVnaXN0ZXJTaXplQ2xhc3Mo
U3Bhbiogc3Bhbiwgc2l6ZV90IHNjKSB7Ci0gIC8vIEFzc29jaWF0ZSBzcGFuIG9iamVjdCB3aXRo
IGFsbCBpbnRlcmlvciBwYWdlcyBhcyB3ZWxsCi0gIEFTU0VSVCghc3Bhbi0+ZnJlZSk7Ci0gIEFT
U0VSVChHZXREZXNjcmlwdG9yKHNwYW4tPnN0YXJ0KSA9PSBzcGFuKTsKLSAgQVNTRVJUKEdldERl
c2NyaXB0b3Ioc3Bhbi0+c3RhcnQrc3Bhbi0+bGVuZ3RoLTEpID09IHNwYW4pOwotICBFdmVudChz
cGFuLCAnQycsIHNjKTsKLSAgc3Bhbi0+c2l6ZWNsYXNzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
aW50PihzYyk7Ci0gIGZvciAoTGVuZ3RoIGkgPSAxOyBpIDwgc3Bhbi0+bGVuZ3RoLTE7IGkrKykg
ewotICAgIHBhZ2VtYXBfLnNldChzcGFuLT5zdGFydCtpLCBzcGFuKTsKLSAgfQotfQotICAgIAot
I2lmZGVmIFdURl9DSEFOR0VTCi1zaXplX3QgVENNYWxsb2NfUGFnZUhlYXA6OlJldHVybmVkQnl0
ZXMoKSBjb25zdCB7Ci0gICAgQVNTRVJUKGtQYWdlU2hpZnQgJiYga051bUNsYXNzZXMgJiYga1Bh
Z2VTaXplKTsKLSAgICBzaXplX3QgcmVzdWx0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIHMgPSAw
OyBzIDwga01heFBhZ2VzOyBzKyspIHsKLSAgICAgICAgY29uc3QgaW50IHJfbGVuZ3RoID0gRExM
X0xlbmd0aCgmZnJlZV9bc10ucmV0dXJuZWQsIGVudHJvcHlfKTsKLSAgICAgICAgdW5zaWduZWQg
cl9wYWdlcyA9IHMgKiByX2xlbmd0aDsKLSAgICAgICAgcmVzdWx0ICs9IHJfcGFnZXMgPDwga1Bh
Z2VTaGlmdDsKLSAgICB9Ci0gICAgCi0gICAgZm9yIChTcGFuKiBzID0gbGFyZ2VfLnJldHVybmVk
Lm5leHQoZW50cm9weV8pOyBzICE9ICZsYXJnZV8ucmV0dXJuZWQ7IHMgPSBzLT5uZXh0KGVudHJv
cHlfKSkKLSAgICAgICAgcmVzdWx0ICs9IHMtPmxlbmd0aCA8PCBrUGFnZVNoaWZ0OwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0jZW5kaWYKLQotI2lmbmRlZiBXVEZfQ0hBTkdFUwotc3RhdGljIGRv
dWJsZSBQYWdlc1RvTUIodWludDY0X3QgcGFnZXMpIHsKLSAgQVNTRVJUKGtQYWdlU2hpZnQgJiYg
a051bUNsYXNzZXMgJiYga1BhZ2VTaXplKTsKLSAgcmV0dXJuIChwYWdlcyA8PCBrUGFnZVNoaWZ0
KSAvIDEwNDg1NzYuMDsKLX0KLQotdm9pZCBUQ01hbGxvY19QYWdlSGVhcDo6RHVtcChUQ01hbGxv
Y19QcmludGVyKiBvdXQpIHsKLSAgaW50IG5vbmVtcHR5X3NpemVzID0gMDsKLSAgZm9yIChpbnQg
cyA9IDA7IHMgPCBrTWF4UGFnZXM7IHMrKykgewotICAgIGlmICghRExMX0lzRW1wdHkoJmZyZWVf
W3NdLm5vcm1hbCkgfHwgIURMTF9Jc0VtcHR5KCZmcmVlX1tzXS5yZXR1cm5lZCkpIHsKLSAgICAg
IG5vbmVtcHR5X3NpemVzKys7Ci0gICAgfQotICB9Ci0gIG91dC0+cHJpbnRmKCItLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICBvdXQtPnByaW50
ZigiUGFnZUhlYXA6ICVkIHNpemVzOyAlNi4xZiBNQiBmcmVlXG4iLAotICAgICAgICAgICAgICBu
b25lbXB0eV9zaXplcywgUGFnZXNUb01CKGZyZWVfcGFnZXNfKSk7Ci0gIG91dC0+cHJpbnRmKCIt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICB1
aW50NjRfdCB0b3RhbF9ub3JtYWwgPSAwOwotICB1aW50NjRfdCB0b3RhbF9yZXR1cm5lZCA9IDA7
Ci0gIGZvciAoaW50IHMgPSAwOyBzIDwga01heFBhZ2VzOyBzKyspIHsKLSAgICBjb25zdCBpbnQg
bl9sZW5ndGggPSBETExfTGVuZ3RoKCZmcmVlX1tzXS5ub3JtYWwpOwotICAgIGNvbnN0IGludCBy
X2xlbmd0aCA9IERMTF9MZW5ndGgoJmZyZWVfW3NdLnJldHVybmVkKTsKLSAgICBpZiAobl9sZW5n
dGggKyByX2xlbmd0aCA+IDApIHsKLSAgICAgIHVpbnQ2NF90IG5fcGFnZXMgPSBzICogbl9sZW5n
dGg7Ci0gICAgICB1aW50NjRfdCByX3BhZ2VzID0gcyAqIHJfbGVuZ3RoOwotICAgICAgdG90YWxf
bm9ybWFsICs9IG5fcGFnZXM7Ci0gICAgICB0b3RhbF9yZXR1cm5lZCArPSByX3BhZ2VzOwotICAg
ICAgb3V0LT5wcmludGYoIiU2dSBwYWdlcyAqICU2dSBzcGFucyB+ICU2LjFmIE1COyAlNi4xZiBN
QiBjdW0iCi0gICAgICAgICAgICAgICAgICAiOyB1bm1hcHBlZDogJTYuMWYgTUI7ICU2LjFmIE1C
IGN1bVxuIiwKLSAgICAgICAgICAgICAgICAgIHMsCi0gICAgICAgICAgICAgICAgICAobl9sZW5n
dGggKyByX2xlbmd0aCksCi0gICAgICAgICAgICAgICAgICBQYWdlc1RvTUIobl9wYWdlcyArIHJf
cGFnZXMpLAotICAgICAgICAgICAgICAgICAgUGFnZXNUb01CKHRvdGFsX25vcm1hbCArIHRvdGFs
X3JldHVybmVkKSwKLSAgICAgICAgICAgICAgICAgIFBhZ2VzVG9NQihyX3BhZ2VzKSwKLSAgICAg
ICAgICAgICAgICAgIFBhZ2VzVG9NQih0b3RhbF9yZXR1cm5lZCkpOwotICAgIH0KLSAgfQotCi0g
IHVpbnQ2NF90IG5fcGFnZXMgPSAwOwotICB1aW50NjRfdCByX3BhZ2VzID0gMDsKLSAgaW50IG5f
c3BhbnMgPSAwOwotICBpbnQgcl9zcGFucyA9IDA7Ci0gIG91dC0+cHJpbnRmKCJOb3JtYWwgbGFy
Z2Ugc3BhbnM6XG4iKTsKLSAgZm9yIChTcGFuKiBzID0gbGFyZ2VfLm5vcm1hbC5uZXh0OyBzICE9
ICZsYXJnZV8ubm9ybWFsOyBzID0gcy0+bmV4dCkgewotICAgIG91dC0+cHJpbnRmKCIgICBbICU2
IiBQUkl1UyAiIHBhZ2VzIF0gJTYuMWYgTUJcbiIsCi0gICAgICAgICAgICAgICAgcy0+bGVuZ3Ro
LCBQYWdlc1RvTUIocy0+bGVuZ3RoKSk7Ci0gICAgbl9wYWdlcyArPSBzLT5sZW5ndGg7Ci0gICAg
bl9zcGFucysrOwotICB9Ci0gIG91dC0+cHJpbnRmKCJVbm1hcHBlZCBsYXJnZSBzcGFuczpcbiIp
OwotICBmb3IgKFNwYW4qIHMgPSBsYXJnZV8ucmV0dXJuZWQubmV4dDsgcyAhPSAmbGFyZ2VfLnJl
dHVybmVkOyBzID0gcy0+bmV4dCkgewotICAgIG91dC0+cHJpbnRmKCIgICBbICU2IiBQUkl1UyAi
IHBhZ2VzIF0gJTYuMWYgTUJcbiIsCi0gICAgICAgICAgICAgICAgcy0+bGVuZ3RoLCBQYWdlc1Rv
TUIocy0+bGVuZ3RoKSk7Ci0gICAgcl9wYWdlcyArPSBzLT5sZW5ndGg7Ci0gICAgcl9zcGFucysr
OwotICB9Ci0gIHRvdGFsX25vcm1hbCArPSBuX3BhZ2VzOwotICB0b3RhbF9yZXR1cm5lZCArPSBy
X3BhZ2VzOwotICBvdXQtPnByaW50ZigiPjI1NSAgIGxhcmdlICogJTZ1IHNwYW5zIH4gJTYuMWYg
TUI7ICU2LjFmIE1CIGN1bSIKLSAgICAgICAgICAgICAgIjsgdW5tYXBwZWQ6ICU2LjFmIE1COyAl
Ni4xZiBNQiBjdW1cbiIsCi0gICAgICAgICAgICAgIChuX3NwYW5zICsgcl9zcGFucyksCi0gICAg
ICAgICAgICAgIFBhZ2VzVG9NQihuX3BhZ2VzICsgcl9wYWdlcyksCi0gICAgICAgICAgICAgIFBh
Z2VzVG9NQih0b3RhbF9ub3JtYWwgKyB0b3RhbF9yZXR1cm5lZCksCi0gICAgICAgICAgICAgIFBh
Z2VzVG9NQihyX3BhZ2VzKSwKLSAgICAgICAgICAgICAgUGFnZXNUb01CKHRvdGFsX3JldHVybmVk
KSk7Ci19Ci0jZW5kaWYKLQotYm9vbCBUQ01hbGxvY19QYWdlSGVhcDo6R3Jvd0hlYXAoTGVuZ3Ro
IG4pIHsKLSAgQVNTRVJUKGtQYWdlU2hpZnQgJiYga051bUNsYXNzZXMgJiYga1BhZ2VTaXplKTsK
LSAgQVNTRVJUKGtNYXhQYWdlcyA+PSBrTWluU3lzdGVtQWxsb2MpOwotICBpZiAobiA+IGtNYXhW
YWxpZFBhZ2VzKSByZXR1cm4gZmFsc2U7Ci0gIExlbmd0aCBhc2sgPSAobj5rTWluU3lzdGVtQWxs
b2MpID8gbiA6IHN0YXRpY19jYXN0PExlbmd0aD4oa01pblN5c3RlbUFsbG9jKTsKLSAgc2l6ZV90
IGFjdHVhbF9zaXplOwotICB2b2lkKiBwdHIgPSBUQ01hbGxvY19TeXN0ZW1BbGxvYyhhc2sgPDwg
a1BhZ2VTaGlmdCwgJmFjdHVhbF9zaXplLCBrUGFnZVNpemUpOwotICBpZiAocHRyID09IE5VTEwp
IHsKLSAgICBpZiAobiA8IGFzaykgewotICAgICAgLy8gVHJ5IGdyb3dpbmcganVzdCAibiIgcGFn
ZXMKLSAgICAgIGFzayA9IG47Ci0gICAgICBwdHIgPSBUQ01hbGxvY19TeXN0ZW1BbGxvYyhhc2sg
PDwga1BhZ2VTaGlmdCwgJmFjdHVhbF9zaXplLCBrUGFnZVNpemUpOwotICAgIH0KLSAgICBpZiAo
cHRyID09IE5VTEwpIHJldHVybiBmYWxzZTsKLSAgfQotICBhc2sgPSBhY3R1YWxfc2l6ZSA+PiBr
UGFnZVNoaWZ0OwotCi0gIHVpbnQ2NF90IG9sZF9zeXN0ZW1fYnl0ZXMgPSBzeXN0ZW1fYnl0ZXNf
OwotICBzeXN0ZW1fYnl0ZXNfICs9IChhc2sgPDwga1BhZ2VTaGlmdCk7Ci0gIGNvbnN0IFBhZ2VJ
RCBwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHB0cikgPj4ga1BhZ2VTaGlmdDsKLSAg
QVNTRVJUKHAgPiAwKTsKLQotICAvLyBJZiB3ZSBoYXZlIGFscmVhZHkgYSBsb3Qgb2YgcGFnZXMg
YWxsb2NhdGVkLCBqdXN0IHByZSBhbGxvY2F0ZSBhIGJ1bmNoIG9mCi0gIC8vIG1lbW9yeSBmb3Ig
dGhlIHBhZ2UgbWFwLiBUaGlzIHByZXZlbnRzIGZyYWdtZW50YXRpb24gYnkgcGFnZW1hcCBtZXRh
ZGF0YQotICAvLyB3aGVuIGEgcHJvZ3JhbSBrZWVwcyBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGxh
cmdlIGJsb2Nrcy4KLQotICBpZiAob2xkX3N5c3RlbV9ieXRlcyA8IGtQYWdlTWFwQmlnQWxsb2Nh
dGlvblRocmVzaG9sZAotICAgICAgJiYgc3lzdGVtX2J5dGVzXyA+PSBrUGFnZU1hcEJpZ0FsbG9j
YXRpb25UaHJlc2hvbGQpIHsKLSAgICBwYWdlbWFwXy5QcmVhbGxvY2F0ZU1vcmVNZW1vcnkoKTsK
LSAgfQotCi0gIC8vIE1ha2Ugc3VyZSBwYWdlbWFwXyBoYXMgZW50cmllcyBmb3IgYWxsIG9mIHRo
ZSBuZXcgcGFnZXMuCi0gIC8vIFBsdXMgZW5zdXJlIG9uZSBiZWZvcmUgYW5kIG9uZSBhZnRlciBz
byBjb2FsZXNjaW5nIGNvZGUKLSAgLy8gZG9lcyBub3QgbmVlZCBib3VuZHMtY2hlY2tpbmcuCi0g
IGlmIChwYWdlbWFwXy5FbnN1cmUocC0xLCBhc2srMikpIHsKLSAgICAvLyBQcmV0ZW5kIHRoZSBu
ZXcgYXJlYSBpcyBhbGxvY2F0ZWQgYW5kIHRoZW4gRGVsZXRlKCkgaXQgdG8KLSAgICAvLyBjYXVz
ZSBhbnkgbmVjZXNzYXJ5IGNvYWxlc2NpbmcgdG8gb2NjdXIuCi0gICAgLy8KLSAgICAvLyBXZSBk
byBub3QgYWRqdXN0IGZyZWVfcGFnZXNfIGhlcmUgc2luY2UgRGVsZXRlKCkgd2lsbCBkbyBpdCBm
b3IgdXMuCi0gICAgU3Bhbiogc3BhbiA9IE5ld1NwYW4ocCwgYXNrKTsKLSAgICBSZWNvcmRTcGFu
KHNwYW4pOwotICAgIERlbGV0ZShzcGFuKTsKLSAgICBBU1NFUlQoQ2hlY2soKSk7Ci0gICAgcmV0
dXJuIHRydWU7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gV2UgY291bGQgbm90IGFsbG9jYXRlIG1lbW9y
eSB3aXRoaW4gInBhZ2VtYXBfIgotICAgIC8vIFRPRE86IE9uY2Ugd2UgY2FuIHJldHVybiBtZW1v
cnkgdG8gdGhlIHN5c3RlbSwgcmV0dXJuIHRoZSBuZXcgc3BhbgotICAgIHJldHVybiBmYWxzZTsK
LSAgfQotfQotCi1ib29sIFRDTWFsbG9jX1BhZ2VIZWFwOjpDaGVjaygpIHsKLSNpZiBVU0VfQkFD
S0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gIHNpemVfdCB0b3RhbEZyZWVDb21t
aXR0ZWQgPSAwOwotI2VuZGlmCi0gIEFTU0VSVChmcmVlX1swXS5ub3JtYWwubmV4dChlbnRyb3B5
XykgPT0gJmZyZWVfWzBdLm5vcm1hbCk7Ci0gIEFTU0VSVChmcmVlX1swXS5yZXR1cm5lZC5uZXh0
KGVudHJvcHlfKSA9PSAmZnJlZV9bMF0ucmV0dXJuZWQpOwotI2lmIFVTRV9CQUNLR1JPVU5EX1RI
UkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgdG90YWxGcmVlQ29tbWl0dGVkID0gQ2hlY2tMaXN0
KCZsYXJnZV8ubm9ybWFsLCBrTWF4UGFnZXMsIDEwMDAwMDAwMDAsIGZhbHNlKTsKLSNlbHNlCi0g
IENoZWNrTGlzdCgmbGFyZ2VfLm5vcm1hbCwga01heFBhZ2VzLCAxMDAwMDAwMDAwLCBmYWxzZSk7
Ci0jZW5kaWYKLSAgICBDaGVja0xpc3QoJmxhcmdlXy5yZXR1cm5lZCwga01heFBhZ2VzLCAxMDAw
MDAwMDAwLCB0cnVlKTsKLSAgZm9yIChMZW5ndGggcyA9IDE7IHMgPCBrTWF4UGFnZXM7IHMrKykg
ewotI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgICB0b3Rh
bEZyZWVDb21taXR0ZWQgKz0gQ2hlY2tMaXN0KCZmcmVlX1tzXS5ub3JtYWwsIHMsIHMsIGZhbHNl
KTsKLSNlbHNlCi0gICAgQ2hlY2tMaXN0KCZmcmVlX1tzXS5ub3JtYWwsIHMsIHMsIGZhbHNlKTsK
LSNlbmRpZgotICAgIENoZWNrTGlzdCgmZnJlZV9bc10ucmV0dXJuZWQsIHMsIHMsIHRydWUpOwot
ICB9Ci0jaWYgVVNFX0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotICBBU1NF
UlQodG90YWxGcmVlQ29tbWl0dGVkID09IGZyZWVfY29tbWl0dGVkX3BhZ2VzXyk7Ci0jZW5kaWYK
LSAgcmV0dXJuIHRydWU7Ci19Ci0KLSNpZiBBU1NFUlRfRElTQUJMRUQKLXNpemVfdCBUQ01hbGxv
Y19QYWdlSGVhcDo6Q2hlY2tMaXN0KFNwYW4qLCBMZW5ndGgsIExlbmd0aCwgYm9vbCkgewotICBy
ZXR1cm4gMDsKLX0KLSNlbHNlCi1zaXplX3QgVENNYWxsb2NfUGFnZUhlYXA6OkNoZWNrTGlzdChT
cGFuKiBsaXN0LCBMZW5ndGggbWluX3BhZ2VzLCBMZW5ndGggbWF4X3BhZ2VzLCBib29sIGRlY29t
bWl0dGVkKSB7Ci0gIHNpemVfdCBmcmVlQ291bnQgPSAwOwotICBmb3IgKFNwYW4qIHMgPSBsaXN0
LT5uZXh0KGVudHJvcHlfKTsgcyAhPSBsaXN0OyBzID0gcy0+bmV4dChlbnRyb3B5XykpIHsKLSAg
ICBDSEVDS19DT05ESVRJT04ocy0+ZnJlZSk7Ci0gICAgQ0hFQ0tfQ09ORElUSU9OKHMtPmxlbmd0
aCA+PSBtaW5fcGFnZXMpOwotICAgIENIRUNLX0NPTkRJVElPTihzLT5sZW5ndGggPD0gbWF4X3Bh
Z2VzKTsKLSAgICBDSEVDS19DT05ESVRJT04oR2V0RGVzY3JpcHRvcihzLT5zdGFydCkgPT0gcyk7
Ci0gICAgQ0hFQ0tfQ09ORElUSU9OKEdldERlc2NyaXB0b3Iocy0+c3RhcnQrcy0+bGVuZ3RoLTEp
ID09IHMpOwotICAgIENIRUNLX0NPTkRJVElPTihzLT5kZWNvbW1pdHRlZCA9PSBkZWNvbW1pdHRl
ZCk7Ci0gICAgZnJlZUNvdW50ICs9IHMtPmxlbmd0aDsKLSAgfQotICByZXR1cm4gZnJlZUNvdW50
OwotfQotI2VuZGlmCi0KLXZvaWQgVENNYWxsb2NfUGFnZUhlYXA6OlJlbGVhc2VGcmVlTGlzdChT
cGFuKiBsaXN0LCBTcGFuKiByZXR1cm5lZCkgewotICBBU1NFUlQoa1BhZ2VTaGlmdCAmJiBrTnVt
Q2xhc3NlcyAmJiBrUGFnZVNpemUpOwotICAvLyBXYWxrIGJhY2t3YXJkcyB0aHJvdWdoIGxpc3Qg
c28gdGhhdCB3aGVuIHdlIHB1c2ggdGhlc2UKLSAgLy8gc3BhbnMgb24gdGhlICJyZXR1cm5lZCIg
bGlzdCwgd2UgcHJlc2VydmUgdGhlIG9yZGVyLgotI2lmIFVTRV9CQUNLR1JPVU5EX1RIUkVBRF9U
T19TQ0FWRU5HRV9NRU1PUlkKLSAgc2l6ZV90IGZyZWVQYWdlUmVkdWN0aW9uID0gMDsKLSNlbmRp
ZgotCi0gIHdoaWxlICghRExMX0lzRW1wdHkobGlzdCwgZW50cm9weV8pKSB7Ci0gICAgU3Bhbiog
cyA9IGxpc3QtPnByZXYoZW50cm9weV8pOwotCi0gICAgRExMX1JlbW92ZShzLCBlbnRyb3B5Xyk7
Ci0gICAgcy0+ZGVjb21taXR0ZWQgPSB0cnVlOwotICAgIERMTF9QcmVwZW5kKHJldHVybmVkLCBz
LCBlbnRyb3B5Xyk7Ci0gICAgVENNYWxsb2NfU3lzdGVtUmVsZWFzZShyZWludGVycHJldF9jYXN0
PHZvaWQqPihzLT5zdGFydCA8PCBrUGFnZVNoaWZ0KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PHNpemVfdD4ocy0+bGVuZ3RoIDw8IGtQYWdlU2hpZnQpKTsKLSNpZiBV
U0VfQkFDS0dST1VORF9USFJFQURfVE9fU0NBVkVOR0VfTUVNT1JZCi0gICAgZnJlZVBhZ2VSZWR1
Y3Rpb24gKz0gcy0+bGVuZ3RoOwotI2VuZGlmCi0gIH0KLQotI2lmIFVTRV9CQUNLR1JPVU5EX1RI
UkVBRF9UT19TQ0FWRU5HRV9NRU1PUlkKLSAgICBmcmVlX2NvbW1pdHRlZF9wYWdlc18gLT0gZnJl
ZVBhZ2VSZWR1Y3Rpb247Ci0gICAgaWYgKGZyZWVfY29tbWl0dGVkX3BhZ2VzXyA8IG1pbl9mcmVl
X2NvbW1pdHRlZF9wYWdlc19zaW5jZV9sYXN0X3NjYXZlbmdlXykgCi0gICAgICAgIG1pbl9mcmVl
X2NvbW1pdHRlZF9wYWdlc19zaW5jZV9sYXN0X3NjYXZlbmdlXyA9IGZyZWVfY29tbWl0dGVkX3Bh
Z2VzXzsKLSNlbmRpZgotfQotCi12b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpSZWxlYXNlRnJlZVBh
Z2VzKCkgewotICBmb3IgKExlbmd0aCBzID0gMDsgcyA8IGtNYXhQYWdlczsgcysrKSB7Ci0gICAg
UmVsZWFzZUZyZWVMaXN0KCZmcmVlX1tzXS5ub3JtYWwsICZmcmVlX1tzXS5yZXR1cm5lZCk7Ci0g
IH0KLSAgUmVsZWFzZUZyZWVMaXN0KCZsYXJnZV8ubm9ybWFsLCAmbGFyZ2VfLnJldHVybmVkKTsK
LSAgQVNTRVJUKENoZWNrKCkpOwotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEZyZWUgbGlzdAotLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0KLWNsYXNzIFRDTWFsbG9jX1RocmVhZENhY2hlX0ZyZWVMaXN0IHsKLSBwcml2
YXRlOgotICBIYXJkZW5lZFNMTCBsaXN0XzsgICAgICAgLy8gTGlua2VkIGxpc3Qgb2Ygbm9kZXMK
LSAgdWludDE2X3QgbGVuZ3RoXzsgICAgIC8vIEN1cnJlbnQgbGVuZ3RoCi0gIHVpbnQxNl90IGxv
d2F0ZXJfOyAgICAvLyBMb3cgd2F0ZXIgbWFyayBmb3IgbGlzdCBsZW5ndGgKLSAgdWludHB0cl90
IGVudHJvcHlfOyAgIC8vIEVudHJvcHkgc291cmNlIGZvciBoYXJkZW5pbmcKLQotIHB1YmxpYzoK
LSAgdm9pZCBJbml0KHVpbnRwdHJfdCBlbnRyb3B5KSB7Ci0gICAgbGlzdF8uc2V0VmFsdWUoTlVM
TCk7Ci0gICAgbGVuZ3RoXyA9IDA7Ci0gICAgbG93YXRlcl8gPSAwOwotICAgIGVudHJvcHlfID0g
ZW50cm9weTsKLSNpZiBFTkFCTEUoVENNQUxMT0NfSEFSREVOSU5HKQotICAgIEFTU0VSVChlbnRy
b3B5Xyk7Ci0jZW5kaWYKLSAgfQotCi0gIC8vIFJldHVybiBjdXJyZW50IGxlbmd0aCBvZiBsaXN0
Ci0gIGludCBsZW5ndGgoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGxlbmd0aF87Ci0gIH0KLQotICAv
LyBJcyBsaXN0IGVtcHR5PwotICBib29sIGVtcHR5KCkgY29uc3QgewotICAgIHJldHVybiAhbGlz
dF87Ci0gIH0KLQotICAvLyBMb3ctd2F0ZXIgbWFyayBtYW5hZ2VtZW50Ci0gIGludCBsb3d3YXRl
cm1hcmsoKSBjb25zdCB7IHJldHVybiBsb3dhdGVyXzsgfQotICB2b2lkIGNsZWFyX2xvd3dhdGVy
bWFyaygpIHsgbG93YXRlcl8gPSBsZW5ndGhfOyB9Ci0KLSAgQUxXQVlTX0lOTElORSB2b2lkIFB1
c2goSGFyZGVuZWRTTEwgcHRyKSB7Ci0gICAgU0xMX1B1c2goJmxpc3RfLCBwdHIsIGVudHJvcHlf
KTsKLSAgICBsZW5ndGhfKys7Ci0gIH0KLQotICB2b2lkIFB1c2hSYW5nZShpbnQgTiwgSGFyZGVu
ZWRTTEwgc3RhcnQsIEhhcmRlbmVkU0xMIGVuZCkgewotICAgIFNMTF9QdXNoUmFuZ2UoJmxpc3Rf
LCBzdGFydCwgZW5kLCBlbnRyb3B5Xyk7Ci0gICAgbGVuZ3RoXyA9IGxlbmd0aF8gKyBzdGF0aWNf
Y2FzdDx1aW50MTZfdD4oTik7Ci0gIH0KLQotICB2b2lkIFBvcFJhbmdlKGludCBOLCBIYXJkZW5l
ZFNMTCogc3RhcnQsIEhhcmRlbmVkU0xMKiBlbmQpIHsKLSAgICBTTExfUG9wUmFuZ2UoJmxpc3Rf
LCBOLCBzdGFydCwgZW5kLCBlbnRyb3B5Xyk7Ci0gICAgQVNTRVJUKGxlbmd0aF8gPj0gTik7Ci0g
ICAgbGVuZ3RoXyA9IGxlbmd0aF8gLSBzdGF0aWNfY2FzdDx1aW50MTZfdD4oTik7Ci0gICAgaWYg
KGxlbmd0aF8gPCBsb3dhdGVyXykgbG93YXRlcl8gPSBsZW5ndGhfOwotICB9Ci0KLSAgQUxXQVlT
X0lOTElORSB2b2lkKiBQb3AoKSB7Ci0gICAgQVNTRVJUKGxpc3RfKTsKLSAgICBsZW5ndGhfLS07
Ci0gICAgaWYgKGxlbmd0aF8gPCBsb3dhdGVyXykgbG93YXRlcl8gPSBsZW5ndGhfOwotICAgIHJl
dHVybiBTTExfUG9wKCZsaXN0XywgZW50cm9weV8pLnZhbHVlKCk7Ci0gIH0KLQotICAgIC8vIFJ1
bnMgdGhyb3VnaCB0aGUgbGlua2VkIGxpc3QgdG8gZW5zdXJlIHRoYXQKLSAgICAvLyB3ZSBjYW4g
ZG8gdGhhdCwgYW5kIGVuc3VyZXMgdGhhdCAnbWlzc2luZycKLSAgICAvLyBpcyBub3QgcHJlc2Vu
dAotICAgIE5FVkVSX0lOTElORSB2b2lkIFZhbGlkYXRlKEhhcmRlbmVkU0xMIG1pc3NpbmcsIHNp
emVfdCBzaXplKSB7Ci0gICAgICAgIEhhcmRlbmVkU0xMIG5vZGUgPSBsaXN0XzsKLSAgICAgICAg
VU5VU0VEX1BBUkFNKHNpemUpOwotICAgICAgICB3aGlsZSAobm9kZSkgewotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQobm9kZSAhPSBtaXNzaW5nKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKElTX0RFRklOSVRFTFlfUE9JU09ORUQobm9kZS52YWx1ZSgpLCBzaXplKSk7Ci0gICAgICAg
ICAgICBub2RlID0gU0xMX05leHQobm9kZSwgZW50cm9weV8pOwotICAgICAgICB9Ci0gICAgfQot
Ci0jaWZkZWYgV1RGX0NIQU5HRVMKLSAgdGVtcGxhdGUgPGNsYXNzIEZpbmRlciwgY2xhc3MgUmVh
ZGVyPgotICB2b2lkIGVudW1lcmF0ZUZyZWVPYmplY3RzKEZpbmRlciYgZmluZGVyLCBjb25zdCBS
ZWFkZXImIHJlYWRlcikKLSAgewotICAgICAgZm9yIChIYXJkZW5lZFNMTCBuZXh0T2JqZWN0ID0g
bGlzdF87IG5leHRPYmplY3Q7IG5leHRPYmplY3Quc2V0VmFsdWUocmVhZGVyLm5leHRFbnRyeUlu
SGFyZGVuZWRMaW5rZWRMaXN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihuZXh0T2JqZWN0LnZh
bHVlKCkpLCBlbnRyb3B5XykpKQotICAgICAgICAgIGZpbmRlci52aXNpdChuZXh0T2JqZWN0LnZh
bHVlKCkpOwotICB9Ci0jZW5kaWYKLX07Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRGF0YSBrZXB0IHBl
ciB0aHJlYWQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbGFzcyBUQ01hbGxvY19UaHJlYWRDYWNoZSB7Ci0g
cHJpdmF0ZToKLSAgdHlwZWRlZiBUQ01hbGxvY19UaHJlYWRDYWNoZV9GcmVlTGlzdCBGcmVlTGlz
dDsKLSNpZiBPUyhXSU5ET1dTKQotICB0eXBlZGVmIERXT1JEIFRocmVhZElkZW50aWZpZXI7Ci0j
ZWxzZQotICB0eXBlZGVmIHB0aHJlYWRfdCBUaHJlYWRJZGVudGlmaWVyOwotI2VuZGlmCi0KLSAg
c2l6ZV90ICAgICAgICBzaXplXzsgICAgICAgICAgICAgICAgICAvLyBDb21iaW5lZCBzaXplIG9m
IGRhdGEKLSAgVGhyZWFkSWRlbnRpZmllciB0aWRfOyAgICAgICAgICAgICAgICAvLyBXaGljaCB0
aHJlYWQgb3ducyBpdAotICBib29sICAgICAgICAgIGluX3NldHNwZWNpZmljXzsgICAgICAgICAg
IC8vIENhbGxlZCBwdGhyZWFkX3NldHNwZWNpZmljPwotICBGcmVlTGlzdCAgICAgIGxpc3RfW0tf
TlVNX0NMQVNTRVNfTUFYXTsgICAgIC8vIEFycmF5IGluZGV4ZWQgYnkgc2l6ZS1jbGFzcwotCi0g
IC8vIFdlIHNhbXBsZSBhbGxvY2F0aW9ucywgYmlhc2VkIGJ5IHRoZSBzaXplIG9mIHRoZSBhbGxv
Y2F0aW9uCi0gIHVpbnQzMl90ICAgICAgcm5kXzsgICAgICAgICAgICAgICAgICAgLy8gQ2hlYXAg
cmFuZG9tIG51bWJlciBnZW5lcmF0b3IKLSAgc2l6ZV90ICAgICAgICBieXRlc191bnRpbF9zYW1w
bGVfOyAgICAvLyBCeXRlcyB1bnRpbCB3ZSBzYW1wbGUgbmV4dAotCi0gIHVpbnRwdHJfdCAgICAg
ZW50cm9weV87ICAgICAgICAgICAgICAgLy8gRW50cm9weSB2YWx1ZSB1c2VkIGZvciBoYXJkZW5p
bmcKLQotICAvLyBBbGxvY2F0ZSBhIG5ldyBoZWFwLiBSRVFVSVJFUzogcGFnZWhlYXBfbG9jayBp
cyBoZWxkLgotICBzdGF0aWMgaW5saW5lIFRDTWFsbG9jX1RocmVhZENhY2hlKiBOZXdIZWFwKFRo
cmVhZElkZW50aWZpZXIgdGlkLCB1aW50cHRyX3QgZW50cm9weSk7Ci0KLSAgLy8gVXNlIG9ubHkg
YXMgcHRocmVhZCB0aHJlYWQtc3BlY2lmaWMgZGVzdHJ1Y3RvciBmdW5jdGlvbi4KLSAgc3RhdGlj
IHZvaWQgRGVzdHJveVRocmVhZENhY2hlKHZvaWQqIHB0cik7Ci0gcHVibGljOgotICAvLyBBbGwg
VGhyZWFkQ2FjaGUgb2JqZWN0cyBhcmUga2VwdCBpbiBhIGxpbmtlZCBsaXN0IChmb3Igc3RhdHMg
Y29sbGVjdGlvbikKLSAgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIG5leHRfOwotICBUQ01hbGxvY19U
aHJlYWRDYWNoZSogcHJldl87Ci0KLSAgdm9pZCBJbml0KFRocmVhZElkZW50aWZpZXIgdGlkLCB1
aW50cHRyX3QgZW50cm9weSk7Ci0gIHZvaWQgQ2xlYW51cCgpOwotCi0gIC8vIEFjY2Vzc29ycyAo
bW9zdGx5IGp1c3QgZm9yIHByaW50aW5nIHN0YXRzKQotICBpbnQgZnJlZWxpc3RfbGVuZ3RoKHNp
emVfdCBjbCkgY29uc3QgeyByZXR1cm4gbGlzdF9bY2xdLmxlbmd0aCgpOyB9Ci0KLSAgLy8gVG90
YWwgYnl0ZSBzaXplIGluIGNhY2hlCi0gIHNpemVfdCBTaXplKCkgY29uc3QgeyByZXR1cm4gc2l6
ZV87IH0KLQotICBBTFdBWVNfSU5MSU5FIHZvaWQqIEFsbG9jYXRlKHNpemVfdCBzaXplKTsKLSAg
dm9pZCBEZWFsbG9jYXRlKEhhcmRlbmVkU0xMIHB0ciwgc2l6ZV90IHNpemVfY2xhc3MpOwotCi0g
IEFMV0FZU19JTkxJTkUgdm9pZCBGZXRjaEZyb21DZW50cmFsQ2FjaGUoc2l6ZV90IGNsLCBzaXpl
X3QgYWxsb2NhdGlvblNpemUpOwotICB2b2lkIFJlbGVhc2VUb0NlbnRyYWxDYWNoZShzaXplX3Qg
Y2wsIGludCBOKTsKLSAgdm9pZCBTY2F2ZW5nZSgpOwotICB2b2lkIFByaW50KCkgY29uc3Q7Ci0K
LSAgLy8gUmVjb3JkIGFsbG9jYXRpb24gb2YgImsiIGJ5dGVzLiAgUmV0dXJuIHRydWUgaWZmIGFs
bG9jYXRpb24KLSAgLy8gc2hvdWxkIGJlIHNhbXBsZWQKLSAgYm9vbCBTYW1wbGVBbGxvY2F0aW9u
KHNpemVfdCBrKTsKLQotICAvLyBQaWNrIG5leHQgc2FtcGxpbmcgcG9pbnQKLSAgdm9pZCBQaWNr
TmV4dFNhbXBsZShzaXplX3Qgayk7Ci0KLSAgc3RhdGljIHZvaWQgICAgICAgICAgICAgICAgICBJ
bml0TW9kdWxlKCk7Ci0gIHN0YXRpYyB2b2lkICAgICAgICAgICAgICAgICAgSW5pdFRTRCgpOwot
ICBzdGF0aWMgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIEdldFRocmVhZEhlYXAoKTsKLSAgc3RhdGlj
IFRDTWFsbG9jX1RocmVhZENhY2hlKiBHZXRDYWNoZSgpOwotICBzdGF0aWMgVENNYWxsb2NfVGhy
ZWFkQ2FjaGUqIEdldENhY2hlSWZQcmVzZW50KCk7Ci0gIHN0YXRpYyBUQ01hbGxvY19UaHJlYWRD
YWNoZSogQ3JlYXRlQ2FjaGVJZk5lY2Vzc2FyeSgpOwotICBzdGF0aWMgdm9pZCAgICAgICAgICAg
ICAgICAgIERlbGV0ZUNhY2hlKFRDTWFsbG9jX1RocmVhZENhY2hlKiBoZWFwKTsKLSAgc3RhdGlj
IHZvaWQgICAgICAgICAgICAgICAgICBCZWNvbWVJZGxlKCk7Ci0gIHN0YXRpYyB2b2lkICAgICAg
ICAgICAgICAgICAgUmVjb21wdXRlVGhyZWFkQ2FjaGVTaXplKCk7Ci0KLSNpZmRlZiBXVEZfQ0hB
TkdFUwotICB0ZW1wbGF0ZSA8Y2xhc3MgRmluZGVyLCBjbGFzcyBSZWFkZXI+Ci0gIHZvaWQgZW51
bWVyYXRlRnJlZU9iamVjdHMoRmluZGVyJiBmaW5kZXIsIGNvbnN0IFJlYWRlciYgcmVhZGVyKQot
ICB7Ci0gICAgICBBU1NFUlQoa1BhZ2VTaGlmdCAmJiBrTnVtQ2xhc3NlcyAmJiBrUGFnZVNpemUp
OwotICAgICAgZm9yICh1bnNpZ25lZCBzaXplQ2xhc3MgPSAwOyBzaXplQ2xhc3MgPCBrTnVtQ2xh
c3Nlczsgc2l6ZUNsYXNzKyspCi0gICAgICAgICAgbGlzdF9bc2l6ZUNsYXNzXS5lbnVtZXJhdGVG
cmVlT2JqZWN0cyhmaW5kZXIsIHJlYWRlcik7Ci0gIH0KLSNlbmRpZgotfTsKLQotLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0vLyBHbG9iYWwgdmFyaWFibGVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLy8gQ2VudHJhbCBjYWNo
ZSAtLSBhIGNvbGxlY3Rpb24gb2YgZnJlZS1saXN0cywgb25lIHBlciBzaXplLWNsYXNzLgotLy8g
V2UgaGF2ZSBhIHNlcGFyYXRlIGxvY2sgcGVyIGZyZWUtbGlzdCB0byByZWR1Y2UgY29udGVudGlv
bi4KLXN0YXRpYyBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0UGFkZGVkIGNlbnRyYWxfY2FjaGVb
S19OVU1fQ0xBU1NFU19NQVhdOwotCi0vLyBQYWdlLWxldmVsIGFsbG9jYXRvcgotc3RhdGljIEFs
bG9jQWxpZ25tZW50SW50ZWdlciBwYWdlaGVhcF9tZW1vcnlbKHNpemVvZihUQ01hbGxvY19QYWdl
SGVhcCkgKyBzaXplb2YoQWxsb2NBbGlnbm1lbnRJbnRlZ2VyKSAtIDEpIC8gc2l6ZW9mKEFsbG9j
QWxpZ25tZW50SW50ZWdlcildOwotc3RhdGljIGJvb2wgcGhpbml0ZWQgPSBmYWxzZTsKLQotLy8g
QXZvaWQgZXh0cmEgbGV2ZWwgb2YgaW5kaXJlY3Rpb24gYnkgbWFraW5nICJwYWdlaGVhcCIgYmUg
anVzdCBhbiBhbGlhcwotLy8gb2YgcGFnZWhlYXBfbWVtb3J5LgotdHlwZWRlZiB1bmlvbiB7Ci0g
ICAgdm9pZCogbV9tZW1vcnk7Ci0gICAgVENNYWxsb2NfUGFnZUhlYXAqIG1fcGFnZUhlYXA7Ci19
IFBhZ2VIZWFwVW5pb247Ci0KLXN0YXRpYyBpbmxpbmUgVENNYWxsb2NfUGFnZUhlYXAqIGdldFBh
Z2VIZWFwKCkKLXsKLSAgICBQYWdlSGVhcFVuaW9uIHUgPSB7ICZwYWdlaGVhcF9tZW1vcnlbMF0g
fTsKLSAgICByZXR1cm4gdS5tX3BhZ2VIZWFwOwotfQotCi0jZGVmaW5lIHBhZ2VoZWFwIGdldFBh
Z2VIZWFwKCkKLQotc2l6ZV90IGZhc3RNYWxsb2NHb29kU2l6ZShzaXplX3QgYnl0ZXMpCi17Ci0g
ICAgaWYgKCFwaGluaXRlZCkKLSAgICAgICAgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkluaXRNb2R1
bGUoKTsKLSAgICByZXR1cm4gQWxsb2NhdGlvblNpemUoYnl0ZXMpOwotfQotCi0jaWYgVVNFX0JB
Q0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWQotCi0jaWYgSEFWRShESVNQQVRDSF9I
KSB8fCBPUyhXSU5ET1dTKQotCi12b2lkIFRDTWFsbG9jX1BhZ2VIZWFwOjpwZXJpb2RpY1NjYXZl
bmdlKCkKLXsKLSAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKLSAgICBwYWdl
aGVhcC0+c2NhdmVuZ2UoKTsKLQotICAgIGlmIChzaG91bGRTY2F2ZW5nZSgpKSB7Ci0gICAgICAg
IHJlc2NoZWR1bGVTY2F2ZW5nZXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN1
c3BlbmRTY2F2ZW5nZXIoKTsKLX0KLQotQUxXQVlTX0lOTElORSB2b2lkIFRDTWFsbG9jX1BhZ2VI
ZWFwOjpzaWduYWxTY2F2ZW5nZXIoKQotewotICAgIEFTU0VSVChwYWdlaGVhcF9sb2NrLklzSGVs
ZCgpKTsKLSAgICBpZiAoaXNTY2F2ZW5nZXJTdXNwZW5kZWQoKSAmJiBzaG91bGRTY2F2ZW5nZSgp
KQotICAgICAgICBzY2hlZHVsZVNjYXZlbmdlcigpOwotfQotCi0jZWxzZQotCi12b2lkIFRDTWFs
bG9jX1BhZ2VIZWFwOjpzY2F2ZW5nZXJUaHJlYWQoKQotewotI2lmIEhBVkUoUFRIUkVBRF9TRVRO
QU1FX05QKQotICAgIHB0aHJlYWRfc2V0bmFtZV9ucCgiSmF2YVNjcmlwdENvcmU6IEZhc3RNYWxs
b2Mgc2NhdmVuZ2VyIik7Ci0jZW5kaWYKLQotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIHBhZ2Vo
ZWFwX2xvY2suTG9jaygpOwotICAgICAgICBpZiAoIXNob3VsZFNjYXZlbmdlKCkpIHsKLSAgICAg
ICAgICAgIC8vIFNldCB0byBmYWxzZSBzbyB0aGF0IHNpZ25hbFNjYXZlbmdlcigpIHdpbGwgY2hl
Y2sgd2hldGhlciB3ZSBuZWVkIHRvIGJlIHNpZ2FubGxlZC4KLSAgICAgICAgICAgIG1fc2NhdmVu
Z2VUaHJlYWRBY3RpdmUgPSBmYWxzZTsKLQotICAgICAgICAgICAgLy8gV2UgbmVlZCB0byB1bmxv
Y2sgbm93LCBhcyB0aGlzIHRocmVhZCB3aWxsIGJsb2NrIG9uIHRoZSBjb25kdmFyIHVudGlsIHNj
YXZlbmdpbmcgaXMgcmVxdWlyZWQuCi0gICAgICAgICAgICBwYWdlaGVhcF9sb2NrLlVubG9jaygp
OwotCi0gICAgICAgICAgICAvLyBCbG9jayB1bnRpbCB0aGVyZSBhcmUgZW5vdWdoIGZyZWUgY29t
bWl0dGVkIHBhZ2VzIHRvIHJlbGVhc2UgYmFjayB0byB0aGUgc3lzdGVtLgotICAgICAgICAgICAg
cHRocmVhZF9tdXRleF9sb2NrKCZtX3NjYXZlbmdlTXV0ZXgpOwotICAgICAgICAgICAgcHRocmVh
ZF9jb25kX3dhaXQoJm1fc2NhdmVuZ2VDb25kaXRpb24sICZtX3NjYXZlbmdlTXV0ZXgpOwotICAg
ICAgICAgICAgLy8gQWZ0ZXIgZXhpdGluZyB0aGUgcHRocmVhZF9jb25kX3dhaXQsIHdlIGhvbGQg
dGhlIGxvY2sgb24gbV9zY2F2ZW5nZU11dGV4LiBVbmxvY2sgaXQgdG8gcHJldmVudAotICAgICAg
ICAgICAgLy8gZGVhZGxvY2sgbmV4dCB0aW1lIHJvdW5kIHRoZSBsb29wLgotICAgICAgICAgICAg
cHRocmVhZF9tdXRleF91bmxvY2soJm1fc2NhdmVuZ2VNdXRleCk7Ci0KLSAgICAgICAgICAgIC8v
IFNldCB0byB0cnVlIHRvIHByZXZlbnQgdW5uZWNlc3Nhcnkgc2lnbmFsbGluZyBvZiB0aGUgY29u
ZHZhci4KLSAgICAgICAgICAgIG1fc2NhdmVuZ2VUaHJlYWRBY3RpdmUgPSB0cnVlOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIHBhZ2VoZWFwX2xvY2suVW5sb2NrKCk7Ci0KLSAgICAgICAg
Ly8gV2FpdCBmb3IgYSB3aGlsZSB0byBjYWxjdWxhdGUgaG93IG11Y2ggbWVtb3J5IHJlbWFpbnMg
dW51c2VkIGR1cmluZyB0aGlzIHBhdXNlLgotICAgICAgICBzbGVlcChrU2NhdmVuZ2VEZWxheUlu
U2Vjb25kcyk7Ci0KLSAgICAgICAgewotICAgICAgICAgICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFn
ZWhlYXBfbG9jayk7Ci0gICAgICAgICAgICBwYWdlaGVhcC0+c2NhdmVuZ2UoKTsKLSAgICAgICAg
fQotICAgIH0KLX0KLQotI2VuZGlmCi0KLSNlbmRpZgotCi0vLyBJZiBUTFMgaXMgYXZhaWxhYmxl
LCB3ZSBhbHNvIHN0b3JlIGEgY29weQotLy8gb2YgdGhlIHBlci10aHJlYWQgb2JqZWN0IGluIGEg
X190aHJlYWQgdmFyaWFibGUKLS8vIHNpbmNlIF9fdGhyZWFkIHZhcmlhYmxlcyBhcmUgZmFzdGVy
IHRvIHJlYWQKLS8vIHRoYW4gcHRocmVhZF9nZXRzcGVjaWZpYygpLiAgV2Ugc3RpbGwgbmVlZAot
Ly8gcHRocmVhZF9zZXRzcGVjaWZpYygpIGJlY2F1c2UgX190aHJlYWQKLS8vIHZhcmlhYmxlcyBw
cm92aWRlIG5vIHdheSB0byBydW4gY2xlYW51cAotLy8gY29kZSB3aGVuIGEgdGhyZWFkIGlzIGRl
c3Ryb3llZC4KLSNpZmRlZiBIQVZFX1RMUwotc3RhdGljIF9fdGhyZWFkIFRDTWFsbG9jX1RocmVh
ZENhY2hlICp0aHJlYWRsb2NhbF9oZWFwOwotI2VuZGlmCi0vLyBUaHJlYWQtc3BlY2lmaWMga2V5
LiAgSW5pdGlhbGl6YXRpb24gaGVyZSBpcyBzb21ld2hhdCB0cmlja3kKLS8vIGJlY2F1c2Ugc29t
ZSBMaW51eCBzdGFydHVwIGNvZGUgaW52b2tlcyBtYWxsb2MoKSBiZWZvcmUgaXQKLS8vIGlzIGlu
IGEgZ29vZCBlbm91Z2ggc3RhdGUgdG8gaGFuZGxlIHB0aHJlYWRfa2V5Y3JlYXRlKCkuCi0vLyBU
aGVyZWZvcmUsIHdlIHVzZSBUU0Qga2V5cyBvbmx5IGFmdGVyIHRzZF9pbml0ZWQgaXMgc2V0IHRv
IHRydWUuCi0vLyBVbnRpbCB0aGVuLCB3ZSB1c2UgYSBzbG93IHBhdGggdG8gZ2V0IHRoZSBoZWFw
IG9iamVjdC4KLXN0YXRpYyBib29sIHRzZF9pbml0ZWQgPSBmYWxzZTsKLSNpZiBVU0UoUFRIUkVB
RF9HRVRTUEVDSUZJQ19ESVJFQ1QpCi1zdGF0aWMgY29uc3QgcHRocmVhZF9rZXlfdCBoZWFwX2tl
eSA9IF9fUFRLX0ZSQU1FV09SS19KQVZBU0NSSVBUQ09SRV9LRVkwOwotI2Vsc2UKLXN0YXRpYyBU
aHJlYWRTcGVjaWZpY0tleSBoZWFwX2tleTsKLSNlbmRpZgotCi1zdGF0aWMgQUxXQVlTX0lOTElO
RSB2b2lkIHNldFRocmVhZEhlYXAoVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGhlYXApCi17Ci0jaWYg
VVNFKFBUSFJFQURfR0VUU1BFQ0lGSUNfRElSRUNUKQotICAgIC8vIENhbid0IGhhdmUgdHdvIGxp
YnJhcmllcyBib3RoIGRvaW5nIHRoaXMgaW4gdGhlIHNhbWUgcHJvY2VzcywKLSAgICAvLyBzbyBj
aGVjayBhbmQgbWFrZSB0aGlzIGNyYXNoIHJpZ2h0IGF3YXkuCi0gICAgaWYgKHB0aHJlYWRfZ2V0
c3BlY2lmaWMoaGVhcF9rZXkpKQotICAgICAgICBDUkFTSCgpOwotI2VuZGlmCi0KLSNpZiBPUyhE
QVJXSU4pCi0gICAgLy8gU3RpbGwgZG8gcHRocmVhZF9zZXRzcGVjaWZpYyBldmVuIGlmIHRoZXJl
J3MgYW4gYWx0ZXJuYXRlIGZvcm0KLSAgICAvLyBvZiB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbiB1
c2UsIHRvIGJlbmVmaXQgZnJvbSB0aGUgZGVsZXRlIGNhbGxiYWNrLgotICAgIHB0aHJlYWRfc2V0
c3BlY2lmaWMoaGVhcF9rZXksIGhlYXApOwotI2Vsc2UKLSAgICB0aHJlYWRTcGVjaWZpY1NldCho
ZWFwX2tleSwgaGVhcCk7Ci0jZW5kaWYKLX0KLQotLy8gQWxsb2NhdG9yIGZvciB0aHJlYWQgaGVh
cHMKLXN0YXRpYyBQYWdlSGVhcEFsbG9jYXRvcjxUQ01hbGxvY19UaHJlYWRDYWNoZT4gdGhyZWFk
aGVhcF9hbGxvY2F0b3I7Ci0KLS8vIExpbmtlZCBsaXN0IG9mIGhlYXAgb2JqZWN0cy4gIFByb3Rl
Y3RlZCBieSBwYWdlaGVhcF9sb2NrLgotc3RhdGljIFRDTWFsbG9jX1RocmVhZENhY2hlKiB0aHJl
YWRfaGVhcHMgPSBOVUxMOwotc3RhdGljIGludCB0aHJlYWRfaGVhcF9jb3VudCA9IDA7Ci0KLS8v
IE92ZXJhbGwgdGhyZWFkIGNhY2hlIHNpemUuICBQcm90ZWN0ZWQgYnkgcGFnZWhlYXBfbG9jay4K
LXN0YXRpYyBzaXplX3Qgb3ZlcmFsbF90aHJlYWRfY2FjaGVfc2l6ZSA9IGtEZWZhdWx0T3ZlcmFs
bFRocmVhZENhY2hlU2l6ZTsKLQotLy8gR2xvYmFsIHBlci10aHJlYWQgY2FjaGUgc2l6ZS4gIFdy
aXRlcyBhcmUgcHJvdGVjdGVkIGJ5Ci0vLyBwYWdlaGVhcF9sb2NrLiAgUmVhZHMgYXJlIGRvbmUg
d2l0aG91dCBhbnkgbG9ja2luZywgd2hpY2ggc2hvdWxkIGJlCi0vLyBmaW5lIGFzIGxvbmcgYXMg
c2l6ZV90IGNhbiBiZSB3cml0dGVuIGF0b21pY2FsbHkgYW5kIHdlIGRvbid0IHBsYWNlCi0vLyBp
bnZhcmlhbnRzIGJldHdlZW4gdGhpcyB2YXJpYWJsZSBhbmQgb3RoZXIgcGllY2VzIG9mIHN0YXRl
Lgotc3RhdGljIHZvbGF0aWxlIHNpemVfdCBwZXJfdGhyZWFkX2NhY2hlX3NpemUgPSBrTWF4VGhy
ZWFkQ2FjaGVTaXplOwotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIENlbnRyYWwgY2FjaGUgaW1wbGVtZW50
YXRpb24KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6Oklu
aXQoc2l6ZV90IGNsLCB1aW50cHRyX3QgZW50cm9weSkgewotICBBU1NFUlQoa1BhZ2VTaGlmdCAm
JiBrTnVtQ2xhc3NlcyAmJiBrUGFnZVNpemUpOwotICBsb2NrXy5Jbml0KCk7Ci0gIHNpemVfY2xh
c3NfID0gY2w7Ci0gIGVudHJvcHlfID0gZW50cm9weTsKLSNpZiBFTkFCTEUoVENNQUxMT0NfSEFS
REVOSU5HKQotICBBU1NFUlQoZW50cm9weV8pOwotI2VuZGlmCi0gIERMTF9Jbml0KCZlbXB0eV8s
IGVudHJvcHlfKTsKLSAgRExMX0luaXQoJm5vbmVtcHR5XywgZW50cm9weV8pOwotICBjb3VudGVy
XyA9IDA7Ci0KLSAgY2FjaGVfc2l6ZV8gPSAxOwotICB1c2VkX3Nsb3RzXyA9IDA7Ci0gIEFTU0VS
VChjYWNoZV9zaXplXyA8PSBrTnVtVHJhbnNmZXJFbnRyaWVzKTsKLX0KLQotdm9pZCBUQ01hbGxv
Y19DZW50cmFsX0ZyZWVMaXN0OjpSZWxlYXNlTGlzdFRvU3BhbnMoSGFyZGVuZWRTTEwgc3RhcnQp
IHsKLSAgd2hpbGUgKHN0YXJ0KSB7Ci0gICAgSGFyZGVuZWRTTEwgbmV4dCA9IFNMTF9OZXh0KHN0
YXJ0LCBlbnRyb3B5Xyk7Ci0gICAgUmVsZWFzZVRvU3BhbnMoc3RhcnQpOwotICAgIHN0YXJ0ID0g
bmV4dDsKLSAgfQotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVl
TGlzdDo6UmVsZWFzZVRvU3BhbnMoSGFyZGVuZWRTTEwgb2JqZWN0KSB7Ci0gIEFTU0VSVChrUGFn
ZVNoaWZ0ICYmIGtOdW1DbGFzc2VzICYmIGtQYWdlU2l6ZSk7Ci0gIGNvbnN0IFBhZ2VJRCBwID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG9iamVjdC52YWx1ZSgpKSA+PiBrUGFnZVNoaWZ0
OwotICBTcGFuKiBzcGFuID0gcGFnZWhlYXAtPkdldERlc2NyaXB0b3IocCk7Ci0gIEFTU0VSVChz
cGFuICE9IE5VTEwpOwotICBBU1NFUlQoc3Bhbi0+cmVmY291bnQgPiAwKTsKLQotICAvLyBJZiBz
cGFuIGlzIGVtcHR5LCBtb3ZlIGl0IHRvIG5vbi1lbXB0eSBsaXN0Ci0gIGlmICghc3Bhbi0+b2Jq
ZWN0cykgewotICAgIERMTF9SZW1vdmUoc3BhbiwgZW50cm9weV8pOwotICAgIERMTF9QcmVwZW5k
KCZub25lbXB0eV8sIHNwYW4sIGVudHJvcHlfKTsKLSAgICBFdmVudChzcGFuLCAnTicsIDApOwot
ICB9Ci0KLSAgLy8gVGhlIGZvbGxvd2luZyBjaGVjayBpcyBleHBlbnNpdmUsIHNvIGl0IGlzIGRp
c2FibGVkIGJ5IGRlZmF1bHQKLSAgaWYgKGZhbHNlKSB7Ci0gICAgLy8gQ2hlY2sgdGhhdCBvYmpl
Y3QgZG9lcyBub3Qgb2NjdXIgaW4gbGlzdAotICAgIHVuc2lnbmVkIGdvdCA9IDA7Ci0gICAgZm9y
IChIYXJkZW5lZFNMTCBwID0gc3Bhbi0+b2JqZWN0czsgIXA7IFNMTF9OZXh0KHAsIGVudHJvcHlf
KSkgewotICAgICAgQVNTRVJUKHAudmFsdWUoKSAhPSBvYmplY3QudmFsdWUoKSk7Ci0gICAgICBn
b3QrKzsKLSAgICB9Ci0gICAgQVNTRVJUKGdvdCArIHNwYW4tPnJlZmNvdW50ID09Ci0gICAgICAg
ICAgIChzcGFuLT5sZW5ndGg8PGtQYWdlU2hpZnQpL0J5dGVTaXplRm9yQ2xhc3Moc3Bhbi0+c2l6
ZWNsYXNzKSk7Ci0gIH0KLQotICBjb3VudGVyXysrOwotICBzcGFuLT5yZWZjb3VudC0tOwotICBp
ZiAoc3Bhbi0+cmVmY291bnQgPT0gMCkgewotICAgIEV2ZW50KHNwYW4sICcjJywgMCk7Ci0gICAg
Y291bnRlcl8gLT0gKHNwYW4tPmxlbmd0aDw8a1BhZ2VTaGlmdCkgLyBCeXRlU2l6ZUZvckNsYXNz
KHNwYW4tPnNpemVjbGFzcyk7Ci0gICAgRExMX1JlbW92ZShzcGFuLCBlbnRyb3B5Xyk7Ci0KLSAg
ICAvLyBSZWxlYXNlIGNlbnRyYWwgbGlzdCBsb2NrIHdoaWxlIG9wZXJhdGluZyBvbiBwYWdlaGVh
cAotICAgIGxvY2tfLlVubG9jaygpOwotICAgIHsKLSAgICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBh
Z2VoZWFwX2xvY2spOwotICAgICAgcGFnZWhlYXAtPkRlbGV0ZShzcGFuKTsKLSAgICB9Ci0gICAg
bG9ja18uTG9jaygpOwotICB9IGVsc2UgewotICAgIFNMTF9TZXROZXh0KG9iamVjdCwgc3Bhbi0+
b2JqZWN0cywgZW50cm9weV8pOwotICAgIHNwYW4tPm9iamVjdHMuc2V0VmFsdWUob2JqZWN0LnZh
bHVlKCkpOwotICB9Ci19Ci0KLUFMV0FZU19JTkxJTkUgYm9vbCBUQ01hbGxvY19DZW50cmFsX0Zy
ZWVMaXN0OjpFdmljdFJhbmRvbVNpemVDbGFzcygKLSAgICBzaXplX3QgbG9ja2VkX3NpemVfY2xh
c3MsIGJvb2wgZm9yY2UpIHsKLSAgQVNTRVJUKGtQYWdlU2hpZnQgJiYga051bUNsYXNzZXMgJiYg
a1BhZ2VTaXplKTsKLSAgc3RhdGljIGludCByYWNlX2NvdW50ZXIgPSAwOwotICBpbnQgdCA9IHJh
Y2VfY291bnRlcisrOyAgLy8gVXBkYXRlZCB3aXRob3V0IGEgbG9jaywgYnV0IHdobyBjYXJlcy4K
LSAgaWYgKHQgPj0gc3RhdGljX2Nhc3Q8aW50PihrTnVtQ2xhc3NlcykpIHsKLSAgICB3aGlsZSAo
dCA+PSBzdGF0aWNfY2FzdDxpbnQ+KGtOdW1DbGFzc2VzKSkgewotICAgICAgdCAtPSBrTnVtQ2xh
c3NlczsKLSAgICB9Ci0gICAgcmFjZV9jb3VudGVyID0gdDsKLSAgfQotICBBU1NFUlQodCA+PSAw
KTsKLSAgQVNTRVJUKHQgPCBzdGF0aWNfY2FzdDxpbnQ+KGtOdW1DbGFzc2VzKSk7Ci0gIGlmICh0
ID09IHN0YXRpY19jYXN0PGludD4obG9ja2VkX3NpemVfY2xhc3MpKSByZXR1cm4gZmFsc2U7Ci0g
IHJldHVybiBjZW50cmFsX2NhY2hlW3RdLlNocmlua0NhY2hlKHN0YXRpY19jYXN0PGludD4obG9j
a2VkX3NpemVfY2xhc3MpLCBmb3JjZSk7Ci19Ci0KLWJvb2wgVENNYWxsb2NfQ2VudHJhbF9GcmVl
TGlzdDo6TWFrZUNhY2hlU3BhY2UoKSB7Ci0gIEFTU0VSVChrUGFnZVNoaWZ0ICYmIGtOdW1DbGFz
c2VzICYmIGtQYWdlU2l6ZSk7Ci0gIC8vIElzIHRoZXJlIHJvb20gaW4gdGhlIGNhY2hlPwotICBp
ZiAodXNlZF9zbG90c18gPCBjYWNoZV9zaXplXykgcmV0dXJuIHRydWU7Ci0gIC8vIENoZWNrIGlm
IHdlIGNhbiBleHBhbmQgdGhpcyBjYWNoZT8KLSAgaWYgKGNhY2hlX3NpemVfID09IGtOdW1UcmFu
c2ZlckVudHJpZXMpIHJldHVybiBmYWxzZTsKLSAgLy8gT2ssIHdlJ2xsIHRyeSB0byBncmFiIGFu
IGVudHJ5IGZyb20gc29tZSBvdGhlciBzaXplIGNsYXNzLgotICBpZiAoRXZpY3RSYW5kb21TaXpl
Q2xhc3Moc2l6ZV9jbGFzc18sIGZhbHNlKSB8fAotICAgICAgRXZpY3RSYW5kb21TaXplQ2xhc3Mo
c2l6ZV9jbGFzc18sIHRydWUpKSB7Ci0gICAgLy8gU3VjY2VlZGVkIGluIGV2aWN0aW5nLCB3ZSdy
ZSBnb2luZyB0byBtYWtlIG91ciBjYWNoZSBsYXJnZXIuCi0gICAgY2FjaGVfc2l6ZV8rKzsKLSAg
ICByZXR1cm4gdHJ1ZTsKLSAgfQotICByZXR1cm4gZmFsc2U7Ci19Ci0KLQotbmFtZXNwYWNlIHsK
LWNsYXNzIExvY2tJbnZlcnRlciB7Ci0gcHJpdmF0ZToKLSAgU3BpbkxvY2sgKmhlbGRfLCAqdGVt
cF87Ci0gcHVibGljOgotICBpbmxpbmUgZXhwbGljaXQgTG9ja0ludmVydGVyKFNwaW5Mb2NrKiBo
ZWxkLCBTcGluTG9jayAqdGVtcCkKLSAgICA6IGhlbGRfKGhlbGQpLCB0ZW1wXyh0ZW1wKSB7IGhl
bGRfLT5VbmxvY2soKTsgdGVtcF8tPkxvY2soKTsgfQotICBpbmxpbmUgfkxvY2tJbnZlcnRlcigp
IHsgdGVtcF8tPlVubG9jaygpOyBoZWxkXy0+TG9jaygpOyAgfQotfTsKLX0KLQotYm9vbCBUQ01h
bGxvY19DZW50cmFsX0ZyZWVMaXN0OjpTaHJpbmtDYWNoZShpbnQgbG9ja2VkX3NpemVfY2xhc3Ms
IGJvb2wgZm9yY2UpIHsKLSAgLy8gU3RhcnQgd2l0aCBhIHF1aWNrIGNoZWNrIHdpdGhvdXQgdGFr
aW5nIGEgbG9jay4KLSAgaWYgKGNhY2hlX3NpemVfID09IDApIHJldHVybiBmYWxzZTsKLSAgLy8g
V2UgZG9uJ3QgZXZpY3QgZnJvbSBhIGZ1bGwgY2FjaGUgdW5sZXNzIHdlIGFyZSAnZm9yY2luZycu
Ci0gIGlmIChmb3JjZSA9PSBmYWxzZSAmJiB1c2VkX3Nsb3RzXyA9PSBjYWNoZV9zaXplXykgcmV0
dXJuIGZhbHNlOwotCi0gIC8vIEdyYWIgbG9jaywgYnV0IGZpcnN0IHJlbGVhc2UgdGhlIG90aGVy
IGxvY2sgaGVsZCBieSB0aGlzIHRocmVhZC4gIFdlIHVzZQotICAvLyB0aGUgbG9jayBpbnZlcnRl
ciB0byBlbnN1cmUgdGhhdCB3ZSBuZXZlciBob2xkIHR3byBzaXplIGNsYXNzIGxvY2tzCi0gIC8v
IGNvbmN1cnJlbnRseS4gIFRoYXQgY2FuIGNyZWF0ZSBhIGRlYWRsb2NrIGJlY2F1c2UgdGhlcmUg
aXMgbm8gd2VsbAotICAvLyBkZWZpbmVkIG5lc3Rpbmcgb3JkZXIuCi0gIExvY2tJbnZlcnRlciBs
aSgmY2VudHJhbF9jYWNoZVtsb2NrZWRfc2l6ZV9jbGFzc10ubG9ja18sICZsb2NrXyk7Ci0gIEFT
U0VSVCh1c2VkX3Nsb3RzXyA8PSBjYWNoZV9zaXplXyk7Ci0gIEFTU0VSVCgwIDw9IGNhY2hlX3Np
emVfKTsKLSAgaWYgKGNhY2hlX3NpemVfID09IDApIHJldHVybiBmYWxzZTsKLSAgaWYgKHVzZWRf
c2xvdHNfID09IGNhY2hlX3NpemVfKSB7Ci0gICAgaWYgKGZvcmNlID09IGZhbHNlKSByZXR1cm4g
ZmFsc2U7Ci0gICAgLy8gUmVsZWFzZUxpc3RUb1NwYW5zIHJlbGVhc2VzIHRoZSBsb2NrLCBzbyB3
ZSBoYXZlIHRvIG1ha2UgYWxsIHRoZQotICAgIC8vIHVwZGF0ZXMgdG8gdGhlIGNlbnRyYWwgbGlz
dCBiZWZvcmUgY2FsbGluZyBpdC4KLSAgICBjYWNoZV9zaXplXy0tOwotICAgIHVzZWRfc2xvdHNf
LS07Ci0gICAgUmVsZWFzZUxpc3RUb1NwYW5zKHRjX3Nsb3RzX1t1c2VkX3Nsb3RzX10uaGVhZCk7
Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgY2FjaGVfc2l6ZV8tLTsKLSAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6SW5zZXJ0UmFuZ2UoSGFyZGVu
ZWRTTEwgc3RhcnQsIEhhcmRlbmVkU0xMIGVuZCwgaW50IE4pIHsKLSAgQVNTRVJUKGtQYWdlU2hp
ZnQgJiYga051bUNsYXNzZXMgJiYga1BhZ2VTaXplKTsKLSAgU3BpbkxvY2tIb2xkZXIgaCgmbG9j
a18pOwotICBpZiAoTiA9PSBudW1fb2JqZWN0c190b19tb3ZlW3NpemVfY2xhc3NfXSAmJgotICAg
IE1ha2VDYWNoZVNwYWNlKCkpIHsKLSAgICBpbnQgc2xvdCA9IHVzZWRfc2xvdHNfKys7Ci0gICAg
QVNTRVJUKHNsb3QgPj0wKTsKLSAgICBBU1NFUlQoc2xvdCA8IGtOdW1UcmFuc2ZlckVudHJpZXMp
OwotICAgIFRDRW50cnkgKmVudHJ5ID0gJnRjX3Nsb3RzX1tzbG90XTsKLSAgICBlbnRyeS0+aGVh
ZCA9IHN0YXJ0OwotICAgIGVudHJ5LT50YWlsID0gZW5kOwotICAgIHJldHVybjsKLSAgfQotICBS
ZWxlYXNlTGlzdFRvU3BhbnMoc3RhcnQpOwotfQotCi1BTFdBWVNfSU5MSU5FIHZvaWQgVENNYWxs
b2NfQ2VudHJhbF9GcmVlTGlzdDo6UmVtb3ZlUmFuZ2UoSGFyZGVuZWRTTEwqIHN0YXJ0LCBIYXJk
ZW5lZFNMTCogZW5kLCBpbnQgKk4pIHsKLSAgaW50IG51bSA9ICpOOwotICBBU1NFUlQobnVtID4g
MCk7Ci0KLSAgU3BpbkxvY2tIb2xkZXIgaCgmbG9ja18pOwotICBpZiAobnVtID09IG51bV9vYmpl
Y3RzX3RvX21vdmVbc2l6ZV9jbGFzc19dICYmIHVzZWRfc2xvdHNfID4gMCkgewotICAgIGludCBz
bG90ID0gLS11c2VkX3Nsb3RzXzsKLSAgICBBU1NFUlQoc2xvdCA+PSAwKTsKLSAgICBUQ0VudHJ5
ICplbnRyeSA9ICZ0Y19zbG90c19bc2xvdF07Ci0gICAgKnN0YXJ0ID0gZW50cnktPmhlYWQ7Ci0g
ICAgKmVuZCA9IGVudHJ5LT50YWlsOwotICAgIHJldHVybjsKLSAgfQotCi0gIC8vIFRPRE86IFBy
ZWZldGNoIG11bHRpcGxlIFRDRW50cmllcz8KLSAgSGFyZGVuZWRTTEwgdGFpbCA9IEZldGNoRnJv
bVNwYW5zU2FmZSgpOwotICBpZiAoIXRhaWwpIHsKLSAgICAvLyBXZSBhcmUgY29tcGxldGVseSBv
dXQgb2YgbWVtb3J5LgotICAgICpzdGFydCA9ICplbmQgPSBIYXJkZW5lZFNMTDo6bnVsbCgpOwot
ICAgICpOID0gMDsKLSAgICByZXR1cm47Ci0gIH0KLQotICBTTExfU2V0TmV4dCh0YWlsLCBIYXJk
ZW5lZFNMTDo6bnVsbCgpLCBlbnRyb3B5Xyk7Ci0gIEhhcmRlbmVkU0xMIGhlYWQgPSB0YWlsOwot
ICBpbnQgY291bnQgPSAxOwotICB3aGlsZSAoY291bnQgPCBudW0pIHsKLSAgICBIYXJkZW5lZFNM
TCB0ID0gRmV0Y2hGcm9tU3BhbnMoKTsKLSAgICBpZiAoIXQpIGJyZWFrOwotICAgIFNMTF9QdXNo
KCZoZWFkLCB0LCBlbnRyb3B5Xyk7Ci0gICAgY291bnQrKzsKLSAgfQotICAqc3RhcnQgPSBoZWFk
OwotICAqZW5kID0gdGFpbDsKLSAgKk4gPSBjb3VudDsKLX0KLQotCi1BTFdBWVNfSU5MSU5FIEhh
cmRlbmVkU0xMIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6OkZldGNoRnJvbVNwYW5zU2FmZSgp
IHsKLSAgSGFyZGVuZWRTTEwgdCA9IEZldGNoRnJvbVNwYW5zKCk7Ci0gIGlmICghdCkgewotICAg
IFBvcHVsYXRlKCk7Ci0gICAgdCA9IEZldGNoRnJvbVNwYW5zKCk7Ci0gIH0KLSAgcmV0dXJuIHQ7
Ci19Ci0KLUhhcmRlbmVkU0xMIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3Q6OkZldGNoRnJvbVNw
YW5zKCkgewotICBpZiAoRExMX0lzRW1wdHkoJm5vbmVtcHR5XywgZW50cm9weV8pKSByZXR1cm4g
SGFyZGVuZWRTTEw6Om51bGwoKTsKLSAgU3Bhbiogc3BhbiA9IG5vbmVtcHR5Xy5uZXh0KGVudHJv
cHlfKTsKLQotICBBU1NFUlQoc3Bhbi0+b2JqZWN0cyk7Ci0gIEFTU0VSVF9TUEFOX0NPTU1JVFRF
RChzcGFuKTsKLSAgc3Bhbi0+cmVmY291bnQrKzsKLSAgSGFyZGVuZWRTTEwgcmVzdWx0ID0gc3Bh
bi0+b2JqZWN0czsKLSAgc3Bhbi0+b2JqZWN0cyA9IFNMTF9OZXh0KHJlc3VsdCwgZW50cm9weV8p
OwotICBpZiAoIXNwYW4tPm9iamVjdHMpIHsKLSAgICAvLyBNb3ZlIHRvIGVtcHR5IGxpc3QKLSAg
ICBETExfUmVtb3ZlKHNwYW4sIGVudHJvcHlfKTsKLSAgICBETExfUHJlcGVuZCgmZW1wdHlfLCBz
cGFuLCBlbnRyb3B5Xyk7Ci0gICAgRXZlbnQoc3BhbiwgJ0UnLCAwKTsKLSAgfQotICBjb3VudGVy
Xy0tOwotICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyBGZXRjaCBtZW1vcnkgZnJvbSB0aGUgc3lz
dGVtIGFuZCBhZGQgdG8gdGhlIGNlbnRyYWwgY2FjaGUgZnJlZWxpc3QuCi1BTFdBWVNfSU5MSU5F
IHZvaWQgVENNYWxsb2NfQ2VudHJhbF9GcmVlTGlzdDo6UG9wdWxhdGUoKSB7Ci0gIEFTU0VSVChr
UGFnZVNoaWZ0ICYmIGtOdW1DbGFzc2VzICYmIGtQYWdlU2l6ZSk7Ci0gIC8vIFJlbGVhc2UgY2Vu
dHJhbCBsaXN0IGxvY2sgd2hpbGUgb3BlcmF0aW5nIG9uIHBhZ2VoZWFwCi0gIGxvY2tfLlVubG9j
aygpOwotICBjb25zdCBzaXplX3QgbnBhZ2VzID0gY2xhc3NfdG9fcGFnZXNbc2l6ZV9jbGFzc19d
OwotCi0gIFNwYW4qIHNwYW47Ci0gIHsKLSAgICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9s
b2NrKTsKLSAgICBzcGFuID0gcGFnZWhlYXAtPk5ldyhucGFnZXMpOwotICAgIGlmIChzcGFuKSBw
YWdlaGVhcC0+UmVnaXN0ZXJTaXplQ2xhc3Moc3Bhbiwgc2l6ZV9jbGFzc18pOwotICB9Ci0gIGlm
IChzcGFuID09IE5VTEwpIHsKLSNpZiBIQVZFKEVSUk5PX0gpCi0gICAgTUVTU0FHRSgiYWxsb2Nh
dGlvbiBmYWlsZWQ6ICVkXG4iLCBlcnJubyk7Ci0jZWxpZiBPUyhXSU5ET1dTKQotICAgIE1FU1NB
R0UoImFsbG9jYXRpb24gZmFpbGVkOiAlZFxuIiwgOjpHZXRMYXN0RXJyb3IoKSk7Ci0jZWxzZQot
ICAgIE1FU1NBR0UoImFsbG9jYXRpb24gZmFpbGVkXG4iKTsKLSNlbmRpZgotICAgIGxvY2tfLkxv
Y2soKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgQVNTRVJUX1NQQU5fQ09NTUlUVEVEKHNwYW4pOwot
ICBBU1NFUlQoc3Bhbi0+bGVuZ3RoID09IG5wYWdlcyk7Ci0gIC8vIENhY2hlIHNpemVjbGFzcyBp
bmZvIGVhZ2VybHkuICBMb2NraW5nIGlzIG5vdCBuZWNlc3NhcnkuCi0gIC8vIChJbnN0ZWFkIG9m
IGJlaW5nIGVhZ2VyLCB3ZSBjb3VsZCBqdXN0IHJlcGxhY2UgYW55IHN0YWxlIGluZm8KLSAgLy8g
YWJvdXQgdGhpcyBzcGFuLCBidXQgdGhhdCBzZWVtcyB0byBiZSBubyBiZXR0ZXIgaW4gcHJhY3Rp
Y2UuKQotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5wYWdlczsgaSsrKSB7Ci0gICAgcGFnZWhl
YXAtPkNhY2hlU2l6ZUNsYXNzKHNwYW4tPnN0YXJ0ICsgaSwgc2l6ZV9jbGFzc18pOwotICB9Ci0K
LSAgLy8gU3BsaXQgdGhlIGJsb2NrIGludG8gcGllY2VzIGFuZCBhZGQgdG8gdGhlIGZyZWUtbGlz
dAotICAvLyBUT0RPOiBjb2xvcmluZyBvZiBvYmplY3RzIHRvIGF2b2lkIGNhY2hlIGNvbmZsaWN0
cz8KLSAgSGFyZGVuZWRTTEwgaGVhZCA9IEhhcmRlbmVkU0xMOjpudWxsKCk7Ci0gIGNoYXIqIHN0
YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oc3Bhbi0+c3RhcnQgPDwga1BhZ2VTaGlmdCk7
Ci0gIGNvbnN0IHNpemVfdCBzaXplID0gQnl0ZVNpemVGb3JDbGFzcyhzaXplX2NsYXNzXyk7Ci0g
IGNoYXIqIHB0ciA9IHN0YXJ0ICsgKG5wYWdlcyA8PCBrUGFnZVNoaWZ0KSAtICgobnBhZ2VzIDw8
IGtQYWdlU2hpZnQpICUgc2l6ZSk7Ci0gIGludCBudW0gPSAwOwotI2lmIEVOQUJMRShUQ01BTExP
Q19IQVJERU5JTkcpCi0gIHVpbnQzMl90IHN0YXJ0UG9pc29uID0gZnJlZWRPYmplY3RTdGFydFBv
aXNvbigpOwotICB1aW50MzJfdCBlbmRQb2lzb24gPSBmcmVlZE9iamVjdEVuZFBvaXNvbigpOwot
I2VuZGlmCi0KLSAgd2hpbGUgKHB0ciA+IHN0YXJ0KSB7Ci0gICAgcHRyIC09IHNpemU7Ci0gICAg
SGFyZGVuZWRTTEwgbm9kZSA9IEhhcmRlbmVkU0xMOjpjcmVhdGUocHRyKTsKLSAgICBQT0lTT05f
REVBTExPQ0FUSU9OX0VYUExJQ0lUKHB0ciwgc2l6ZSwgc3RhcnRQb2lzb24sIGVuZFBvaXNvbik7
Ci0gICAgU0xMX1NldE5leHQobm9kZSwgaGVhZCwgZW50cm9weV8pOwotICAgIGhlYWQgPSBub2Rl
OwotICAgIG51bSsrOwotICB9Ci0gIEFTU0VSVChwdHIgPT0gc3RhcnQpOwotICBBU1NFUlQocHRy
ID09IGhlYWQudmFsdWUoKSk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIHsKLSAgICAgICAgSGFyZGVu
ZWRTTEwgbm9kZSA9IGhlYWQ7Ci0gICAgICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgICAgICBB
U1NFUlQoSVNfREVGSU5JVEVMWV9QT0lTT05FRChub2RlLnZhbHVlKCksIHNpemUpKTsKLSAgICAg
ICAgICAgIG5vZGUgPSBTTExfTmV4dChub2RlLCBlbnRyb3B5Xyk7Ci0gICAgICAgIH0KLSAgICB9
Ci0jZW5kaWYKLSAgc3Bhbi0+b2JqZWN0cyA9IGhlYWQ7Ci0gIEFTU0VSVChzcGFuLT5vYmplY3Rz
LnZhbHVlKCkgPT0gaGVhZC52YWx1ZSgpKTsKLSAgc3Bhbi0+cmVmY291bnQgPSAwOyAvLyBObyBz
dWItb2JqZWN0IGluIHVzZSB5ZXQKLQotICAvLyBBZGQgc3BhbiB0byBsaXN0IG9mIG5vbi1lbXB0
eSBzcGFucwotICBsb2NrXy5Mb2NrKCk7Ci0gIERMTF9QcmVwZW5kKCZub25lbXB0eV8sIHNwYW4s
IGVudHJvcHlfKTsKLSAgY291bnRlcl8gKz0gbnVtOwotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIFRD
TWFsbG9jX1RocmVhZENhY2hlIGltcGxlbWVudGF0aW9uCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotaW5saW5l
IGJvb2wgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OlNhbXBsZUFsbG9jYXRpb24oc2l6ZV90IGspIHsK
LSAgaWYgKGJ5dGVzX3VudGlsX3NhbXBsZV8gPCBrKSB7Ci0gICAgUGlja05leHRTYW1wbGUoayk7
Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0gZWxzZSB7Ci0gICAgYnl0ZXNfdW50aWxfc2FtcGxlXyAt
PSBrOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQotCi12b2lkIFRDTWFsbG9jX1RocmVhZENh
Y2hlOjpJbml0KFRocmVhZElkZW50aWZpZXIgdGlkLCB1aW50cHRyX3QgZW50cm9weSkgewotICBB
U1NFUlQoa1BhZ2VTaGlmdCAmJiBrTnVtQ2xhc3NlcyAmJiBrUGFnZVNpemUpOwotICBzaXplXyA9
IDA7Ci0gIG5leHRfID0gTlVMTDsKLSAgcHJldl8gPSBOVUxMOwotICB0aWRfICA9IHRpZDsKLSAg
aW5fc2V0c3BlY2lmaWNfID0gZmFsc2U7Ci0gIGVudHJvcHlfID0gZW50cm9weTsKLSNpZiBFTkFC
TEUoVENNQUxMT0NfSEFSREVOSU5HKQotICBBU1NFUlQoZW50cm9weV8pOwotI2VuZGlmCi0gIGZv
ciAoc2l6ZV90IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgewotICAgIGxpc3RfW2Ns
XS5Jbml0KGVudHJvcHlfKTsKLSAgfQotCi0gIC8vIEluaXRpYWxpemUgUk5HIC0tIHJ1biBpdCBm
b3IgYSBiaXQgdG8gZ2V0IHRvIGdvb2QgdmFsdWVzCi0gIGJ5dGVzX3VudGlsX3NhbXBsZV8gPSAw
OwotICBybmRfID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Pih0aGlzKSk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKLSAgICBQaWNr
TmV4dFNhbXBsZShzdGF0aWNfY2FzdDxzaXplX3Q+KEZMQUdTX3RjbWFsbG9jX3NhbXBsZV9wYXJh
bWV0ZXIgKiAyKSk7Ci0gIH0KLX0KLQotdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6Q2xlYW51
cCgpIHsKLSAgQVNTRVJUKGtQYWdlU2hpZnQgJiYga051bUNsYXNzZXMgJiYga1BhZ2VTaXplKTsK
LSAgLy8gUHV0IHVudXNlZCBtZW1vcnkgYmFjayBpbnRvIGNlbnRyYWwgY2FjaGUKLSAgZm9yIChz
aXplX3QgY2wgPSAwOyBjbCA8IGtOdW1DbGFzc2VzOyArK2NsKSB7Ci0gICAgaWYgKGxpc3RfW2Ns
XS5sZW5ndGgoKSA+IDApIHsKLSAgICAgIFJlbGVhc2VUb0NlbnRyYWxDYWNoZShjbCwgbGlzdF9b
Y2xdLmxlbmd0aCgpKTsKLSAgICB9Ci0gIH0KLX0KLQotQUxXQVlTX0lOTElORSB2b2lkKiBUQ01h
bGxvY19UaHJlYWRDYWNoZTo6QWxsb2NhdGUoc2l6ZV90IHNpemUpIHsKLSAgQVNTRVJUKHNpemUg
PD0ga01heFNpemUpOwotICBjb25zdCBzaXplX3QgY2wgPSBTaXplQ2xhc3Moc2l6ZSk7Ci0gIEZy
ZWVMaXN0KiBsaXN0ID0gJmxpc3RfW2NsXTsKLSAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gQnl0
ZVNpemVGb3JDbGFzcyhjbCk7Ci0gIGlmIChsaXN0LT5lbXB0eSgpKSB7Ci0gICAgRmV0Y2hGcm9t
Q2VudHJhbENhY2hlKGNsLCBhbGxvY2F0aW9uU2l6ZSk7Ci0gICAgaWYgKGxpc3QtPmVtcHR5KCkp
IHJldHVybiBOVUxMOwotICB9Ci0gIHNpemVfIC09IGFsbG9jYXRpb25TaXplOwotICB2b2lkKiBy
ZXN1bHQgPSBsaXN0LT5Qb3AoKTsKLSAgaWYgKCFyZXN1bHQpCi0gICAgICByZXR1cm4gMDsKLSAg
UkVMRUFTRV9BU1NFUlQoSVNfREVGSU5JVEVMWV9QT0lTT05FRChyZXN1bHQsIGFsbG9jYXRpb25T
aXplKSk7Ci0gIFBPSVNPTl9BTExPQ0FUSU9OKHJlc3VsdCwgYWxsb2NhdGlvblNpemUpOwotICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1pbmxpbmUgdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6RGVh
bGxvY2F0ZShIYXJkZW5lZFNMTCBwdHIsIHNpemVfdCBjbCkgewotICBzaXplX3QgYWxsb2NhdGlv
blNpemUgPSBCeXRlU2l6ZUZvckNsYXNzKGNsKTsKLSAgc2l6ZV8gKz0gYWxsb2NhdGlvblNpemU7
Ci0gIEZyZWVMaXN0KiBsaXN0ID0gJmxpc3RfW2NsXTsKLSAgaWYgKE1BWV9CRV9QT0lTT05FRChw
dHIudmFsdWUoKSwgYWxsb2NhdGlvblNpemUpKQotICAgICAgbGlzdC0+VmFsaWRhdGUocHRyLCBh
bGxvY2F0aW9uU2l6ZSk7Ci0KLSAgUE9JU09OX0RFQUxMT0NBVElPTihwdHIudmFsdWUoKSwgYWxs
b2NhdGlvblNpemUpOwotICBsaXN0LT5QdXNoKHB0cik7Ci0gIC8vIElmIGVub3VnaCBkYXRhIGlz
IGZyZWUsIHB1dCBiYWNrIGludG8gY2VudHJhbCBjYWNoZQotICBpZiAobGlzdC0+bGVuZ3RoKCkg
PiBrTWF4RnJlZUxpc3RMZW5ndGgpIHsKLSAgICBSZWxlYXNlVG9DZW50cmFsQ2FjaGUoY2wsIG51
bV9vYmplY3RzX3RvX21vdmVbY2xdKTsKLSAgfQotICBpZiAoc2l6ZV8gPj0gcGVyX3RocmVhZF9j
YWNoZV9zaXplKSBTY2F2ZW5nZSgpOwotfQotCi0vLyBSZW1vdmUgc29tZSBvYmplY3RzIG9mIGNs
YXNzICJjbCIgZnJvbSBjZW50cmFsIGNhY2hlIGFuZCBhZGQgdG8gdGhyZWFkIGhlYXAKLUFMV0FZ
U19JTkxJTkUgdm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6RmV0Y2hGcm9tQ2VudHJhbENhY2hl
KHNpemVfdCBjbCwgc2l6ZV90IGFsbG9jYXRpb25TaXplKSB7Ci0gIGludCBmZXRjaF9jb3VudCA9
IG51bV9vYmplY3RzX3RvX21vdmVbY2xdOwotICBIYXJkZW5lZFNMTCBzdGFydCwgZW5kOwotICBj
ZW50cmFsX2NhY2hlW2NsXS5SZW1vdmVSYW5nZSgmc3RhcnQsICZlbmQsICZmZXRjaF9jb3VudCk7
Ci0gIGxpc3RfW2NsXS5QdXNoUmFuZ2UoZmV0Y2hfY291bnQsIHN0YXJ0LCBlbmQpOwotICBzaXpl
XyArPSBhbGxvY2F0aW9uU2l6ZSAqIGZldGNoX2NvdW50OwotfQotCi0vLyBSZW1vdmUgc29tZSBv
YmplY3RzIG9mIGNsYXNzICJjbCIgZnJvbSB0aHJlYWQgaGVhcCBhbmQgYWRkIHRvIGNlbnRyYWwg
Y2FjaGUKLWlubGluZSB2b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpSZWxlYXNlVG9DZW50cmFs
Q2FjaGUoc2l6ZV90IGNsLCBpbnQgTikgewotICBBU1NFUlQoTiA+IDApOwotICBGcmVlTGlzdCog
c3JjID0gJmxpc3RfW2NsXTsKLSAgaWYgKE4gPiBzcmMtPmxlbmd0aCgpKSBOID0gc3JjLT5sZW5n
dGgoKTsKLSAgc2l6ZV8gLT0gTipCeXRlU2l6ZUZvckNsYXNzKGNsKTsKLQotICAvLyBXZSByZXR1
cm4gcHJlcGFja2FnZWQgY2hhaW5zIG9mIHRoZSBjb3JyZWN0IHNpemUgdG8gdGhlIGNlbnRyYWwg
Y2FjaGUuCi0gIC8vIFRPRE86IFVzZSB0aGUgc2FtZSBmb3JtYXQgaW50ZXJuYWxseSBpbiB0aGUg
dGhyZWFkIGNhY2hlcz8KLSAgaW50IGJhdGNoX3NpemUgPSBudW1fb2JqZWN0c190b19tb3ZlW2Ns
XTsKLSAgd2hpbGUgKE4gPiBiYXRjaF9zaXplKSB7Ci0gICAgSGFyZGVuZWRTTEwgdGFpbCwgaGVh
ZDsKLSAgICBzcmMtPlBvcFJhbmdlKGJhdGNoX3NpemUsICZoZWFkLCAmdGFpbCk7Ci0gICAgY2Vu
dHJhbF9jYWNoZVtjbF0uSW5zZXJ0UmFuZ2UoaGVhZCwgdGFpbCwgYmF0Y2hfc2l6ZSk7Ci0gICAg
TiAtPSBiYXRjaF9zaXplOwotICB9Ci0gIEhhcmRlbmVkU0xMIHRhaWwsIGhlYWQ7Ci0gIHNyYy0+
UG9wUmFuZ2UoTiwgJmhlYWQsICZ0YWlsKTsKLSAgY2VudHJhbF9jYWNoZVtjbF0uSW5zZXJ0UmFu
Z2UoaGVhZCwgdGFpbCwgTik7Ci19Ci0KLS8vIFJlbGVhc2UgaWRsZSBtZW1vcnkgdG8gdGhlIGNl
bnRyYWwgY2FjaGUKLWlubGluZSB2b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpTY2F2ZW5nZSgp
IHsKLSAgQVNTRVJUKGtQYWdlU2hpZnQgJiYga051bUNsYXNzZXMgJiYga1BhZ2VTaXplKTsKLSAg
Ly8gSWYgdGhlIGxvdy13YXRlciBtYXJrIGZvciB0aGUgZnJlZSBsaXN0IGlzIEwsIGl0IG1lYW5z
IHdlIHdvdWxkCi0gIC8vIG5vdCBoYXZlIGhhZCB0byBhbGxvY2F0ZSBhbnl0aGluZyBmcm9tIHRo
ZSBjZW50cmFsIGNhY2hlIGV2ZW4gaWYKLSAgLy8gd2UgaGFkIHJlZHVjZWQgdGhlIGZyZWUgbGlz
dCBzaXplIGJ5IEwuICBXZSBhaW0gdG8gZ2V0IGNsb3NlciB0bwotICAvLyB0aGF0IHNpdHVhdGlv
biBieSBkcm9wcGluZyBMLzIgbm9kZXMgZnJvbSB0aGUgZnJlZSBsaXN0LiAgVGhpcwotICAvLyBt
YXkgbm90IHJlbGVhc2UgbXVjaCBtZW1vcnksIGJ1dCBpZiBzbyB3ZSB3aWxsIGNhbGwgc2NhdmVu
Z2UgYWdhaW4KLSAgLy8gcHJldHR5IHNvb24gYW5kIHRoZSBsb3ctd2F0ZXIgbWFya3Mgd2lsbCBi
ZSBoaWdoIG9uIHRoYXQgY2FsbC4KLSAgLy9pbnQ2NCBzdGFydCA9IEN5Y2xlQ2xvY2s6Ok5vdygp
OwotCi0gIGZvciAoc2l6ZV90IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgY2wrKykgewotICAg
IEZyZWVMaXN0KiBsaXN0ID0gJmxpc3RfW2NsXTsKLSAgICBjb25zdCBpbnQgbG93bWFyayA9IGxp
c3QtPmxvd3dhdGVybWFyaygpOwotICAgIGlmIChsb3dtYXJrID4gMCkgewotICAgICAgY29uc3Qg
aW50IGRyb3AgPSAobG93bWFyayA+IDEpID8gbG93bWFyay8yIDogMTsKLSAgICAgIFJlbGVhc2VU
b0NlbnRyYWxDYWNoZShjbCwgZHJvcCk7Ci0gICAgfQotICAgIGxpc3QtPmNsZWFyX2xvd3dhdGVy
bWFyaygpOwotICB9Ci0KLSAgLy9pbnQ2NCBmaW5pc2ggPSBDeWNsZUNsb2NrOjpOb3coKTsKLSAg
Ly9DeWNsZVRpbWVyIGN0OwotICAvL01FU1NBR0UoIkdDOiAlLjBmIG5zXG4iLCBjdC5DeWNsZXNU
b1VzZWMoZmluaXNoLXN0YXJ0KSoxMDAwLjApOwotfQotCi12b2lkIFRDTWFsbG9jX1RocmVhZENh
Y2hlOjpQaWNrTmV4dFNhbXBsZShzaXplX3QgaykgewotICAvLyBNYWtlIG5leHQgInJhbmRvbSIg
bnVtYmVyCi0gIC8vIHheMzIreF4yMit4XjIreF4xKzEgaXMgYSBwcmltaXRpdmUgcG9seW5vbWlh
bCBmb3IgcmFuZG9tIG51bWJlcnMKLSAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGtQb2x5ID0gKDEg
PDwgMjIpIHwgKDEgPDwgMikgfCAoMSA8PCAxKSB8ICgxIDw8IDApOwotICB1aW50MzJfdCByID0g
cm5kXzsKLSAgcm5kXyA9IChyIDw8IDEpIF4gKChzdGF0aWNfY2FzdDxpbnQzMl90PihyKSA+PiAz
MSkgJiBrUG9seSk7Ci0KLSAgLy8gTmV4dCBwb2ludCBpcyAicm5kXyAlIChzYW1wbGVfcGVyaW9k
KSIuICBJLmUuLCBhdmVyYWdlCi0gIC8vIGluY3JlbWVudCBpcyAic2FtcGxlX3BlcmlvZC8yIi4K
LSAgY29uc3QgaW50IGZsYWdfdmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQ+KEZMQUdTX3RjbWFsbG9j
X3NhbXBsZV9wYXJhbWV0ZXIpOwotICBzdGF0aWMgaW50IGxhc3RfZmxhZ192YWx1ZSA9IC0xOwot
Ci0gIGlmIChmbGFnX3ZhbHVlICE9IGxhc3RfZmxhZ192YWx1ZSkgewotICAgIFNwaW5Mb2NrSG9s
ZGVyIGgoJnNhbXBsZV9wZXJpb2RfbG9jayk7Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpID0gMDsg
aSA8IChzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihwcmltZXNfbGlzdCkvc2l6ZW9mKHByaW1lc19s
aXN0WzBdKSkgLSAxKTsgaSsrKSB7Ci0gICAgICBpZiAocHJpbWVzX2xpc3RbaV0gPj0gZmxhZ192
YWx1ZSkgewotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gICAgc2FtcGxlX3Blcmlv
ZCA9IHByaW1lc19saXN0W2ldOwotICAgIGxhc3RfZmxhZ192YWx1ZSA9IGZsYWdfdmFsdWU7Ci0g
IH0KLQotICBieXRlc191bnRpbF9zYW1wbGVfICs9IHJuZF8gJSBzYW1wbGVfcGVyaW9kOwotCi0g
IGlmIChrID4gKHN0YXRpY19jYXN0PHNpemVfdD4oLTEpID4+IDIpKSB7Ci0gICAgLy8gSWYgdGhl
IHVzZXIgaGFzIGFza2VkIGZvciBhIGh1Z2UgYWxsb2NhdGlvbiB0aGVuIGl0IGlzIHBvc3NpYmxl
Ci0gICAgLy8gZm9yIHRoZSBjb2RlIGJlbG93IHRvIGxvb3AgaW5maW5pdGVseS4gIEp1c3QgcmV0
dXJuIChub3RlIHRoYXQKLSAgICAvLyB0aGlzIHRocm93cyBvZmYgdGhlIHNhbXBsaW5nIGFjY3Vy
YWN5IHNvbWV3aGF0LCBidXQgYSB1c2VyIHdobwotICAgIC8vIGlzIGFsbG9jYXRpbmcgbW9yZSB0
aGFuIDFHIG9mIG1lbW9yeSBhdCBhIHRpbWUgY2FuIGxpdmUgd2l0aCBhCi0gICAgLy8gbWlub3Ig
aW5hY2N1cmFjeSBpbiBwcm9maWxpbmcgb2Ygc21hbGwgYWxsb2NhdGlvbnMsIGFuZCBhbHNvCi0g
ICAgLy8gd291bGQgcmF0aGVyIG5vdCB3YWl0IGZvciB0aGUgbG9vcCBiZWxvdyB0byB0ZXJtaW5h
dGUpLgotICAgIHJldHVybjsKLSAgfQotCi0gIHdoaWxlIChieXRlc191bnRpbF9zYW1wbGVfIDwg
aykgewotICAgIC8vIEluY3JlYXNlIGJ5dGVzX3VudGlsX3NhbXBsZV8gYnkgZW5vdWdoIGF2ZXJh
Z2Ugc2FtcGxpbmcgcGVyaW9kcwotICAgIC8vIChzYW1wbGVfcGVyaW9kID4+IDEpIHRvIGFsbG93
IHVzIHRvIHNhbXBsZSBwYXN0IHRoZSBjdXJyZW50Ci0gICAgLy8gYWxsb2NhdGlvbi4KLSAgICBi
eXRlc191bnRpbF9zYW1wbGVfICs9IChzYW1wbGVfcGVyaW9kID4+IDEpOwotICB9Ci0KLSAgYnl0
ZXNfdW50aWxfc2FtcGxlXyAtPSBrOwotfQotCi12b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpJ
bml0TW9kdWxlKCkgewotICAvLyBUaGVyZSBpcyBhIHNsaWdodCBwb3RlbnRpYWwgcmFjZSBoZXJl
IGJlY2F1c2Ugb2YgZG91YmxlLWNoZWNrZWQKLSAgLy8gbG9ja2luZyBpZGlvbS4gIEhvd2V2ZXIs
IGFzIGxvbmcgYXMgdGhlIHByb2dyYW0gZG9lcyBhIHNtYWxsCi0gIC8vIGFsbG9jYXRpb24gYmVm
b3JlIHN3aXRjaGluZyB0byBtdWx0aS10aHJlYWRlZCBtb2RlLCB3ZSB3aWxsIGJlCi0gIC8vIGZp
bmUuICBXZSBpbmNyZWFzZSB0aGUgY2hhbmNlcyBvZiBkb2luZyBzdWNoIGEgc21hbGwgYWxsb2Nh
dGlvbgotICAvLyBieSBkb2luZyBvbmUgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBtb2R1bGVf
ZW50ZXJfZXhpdF9ob29rCi0gIC8vIG9iamVjdCBkZWNsYXJlZCBiZWxvdy4KLSAgU3BpbkxvY2tI
b2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7Ci0gIGlmICghcGhpbml0ZWQpIHsKLSAgICB1aW50cHRy
X3QgZW50cm9weSA9IEhBUkRFTklOR19FTlRST1BZOwotI2lmZGVmIFdURl9DSEFOR0VTCi0gICAg
SW5pdFRTRCgpOwotI2VuZGlmCi0gICAgSW5pdFNpemVDbGFzc2VzKCk7Ci0gICAgdGhyZWFkaGVh
cF9hbGxvY2F0b3IuSW5pdChlbnRyb3B5KTsKLSAgICBzcGFuX2FsbG9jYXRvci5Jbml0KGVudHJv
cHkpOwotICAgIHNwYW5fYWxsb2NhdG9yLk5ldygpOyAvLyBSZWR1Y2UgY2FjaGUgY29uZmxpY3Rz
Ci0gICAgc3Bhbl9hbGxvY2F0b3IuTmV3KCk7IC8vIFJlZHVjZSBjYWNoZSBjb25mbGljdHMKLSAg
ICBzdGFja3RyYWNlX2FsbG9jYXRvci5Jbml0KGVudHJvcHkpOwotICAgIERMTF9Jbml0KCZzYW1w
bGVkX29iamVjdHMsIGVudHJvcHkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwga051bUNs
YXNzZXM7ICsraSkgewotICAgICAgY2VudHJhbF9jYWNoZVtpXS5Jbml0KGksIGVudHJvcHkpOwot
ICAgIH0KLSAgICBwYWdlaGVhcC0+aW5pdCgpOwotICAgIHBoaW5pdGVkID0gMTsKLSNpZiBkZWZp
bmVkKFdURl9DSEFOR0VTKSAmJiBPUyhEQVJXSU4pCi0gICAgTWFsbG9jSG9vazo6aW5pdCgpOwot
ICAgIEZhc3RNYWxsb2Nab25lOjppbml0KCk7Ci0jZW5kaWYKLSAgfQotfQotCi1pbmxpbmUgVENN
YWxsb2NfVGhyZWFkQ2FjaGUqIFRDTWFsbG9jX1RocmVhZENhY2hlOjpOZXdIZWFwKFRocmVhZElk
ZW50aWZpZXIgdGlkLCB1aW50cHRyX3QgZW50cm9weSkgewotICAvLyBDcmVhdGUgdGhlIGhlYXAg
YW5kIGFkZCBpdCB0byB0aGUgbGlua2VkIGxpc3QKLSAgVENNYWxsb2NfVGhyZWFkQ2FjaGUgKmhl
YXAgPSB0aHJlYWRoZWFwX2FsbG9jYXRvci5OZXcoKTsKLSAgaGVhcC0+SW5pdCh0aWQsIGVudHJv
cHkpOwotICBoZWFwLT5uZXh0XyA9IHRocmVhZF9oZWFwczsKLSAgaGVhcC0+cHJldl8gPSBOVUxM
OwotICBpZiAodGhyZWFkX2hlYXBzICE9IE5VTEwpIHRocmVhZF9oZWFwcy0+cHJldl8gPSBoZWFw
OwotICB0aHJlYWRfaGVhcHMgPSBoZWFwOwotICB0aHJlYWRfaGVhcF9jb3VudCsrOwotICBSZWNv
bXB1dGVUaHJlYWRDYWNoZVNpemUoKTsKLSAgcmV0dXJuIGhlYXA7Ci19Ci0KLWlubGluZSBUQ01h
bGxvY19UaHJlYWRDYWNoZSogVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkdldFRocmVhZEhlYXAoKSB7
Ci0jaWZkZWYgSEFWRV9UTFMKLSAgICAvLyBfX3RocmVhZCBpcyBmYXN0ZXIsIGJ1dCBvbmx5IHdo
ZW4gdGhlIGtlcm5lbCBzdXBwb3J0cyBpdAotICBpZiAoS2VybmVsU3VwcG9ydHNUTFMoKSkKLSAg
ICByZXR1cm4gdGhyZWFkbG9jYWxfaGVhcDsKLSNlbGlmIE9TKERBUldJTikKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VENNYWxsb2NfVGhyZWFkQ2FjaGUqPihwdGhyZWFkX2dldHNwZWNpZmljKGhl
YXBfa2V5KSk7Ci0jZWxzZQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUQ01hbGxvY19UaHJlYWRD
YWNoZSo+KHRocmVhZFNwZWNpZmljR2V0KGhlYXBfa2V5KSk7Ci0jZW5kaWYKLX0KLQotaW5saW5l
IFRDTWFsbG9jX1RocmVhZENhY2hlKiBUQ01hbGxvY19UaHJlYWRDYWNoZTo6R2V0Q2FjaGUoKSB7
Ci0gIFRDTWFsbG9jX1RocmVhZENhY2hlKiBwdHIgPSBOVUxMOwotICBpZiAoIXRzZF9pbml0ZWQp
IHsKLSAgICBJbml0TW9kdWxlKCk7Ci0gIH0gZWxzZSB7Ci0gICAgcHRyID0gR2V0VGhyZWFkSGVh
cCgpOwotICB9Ci0gIGlmIChwdHIgPT0gTlVMTCkgcHRyID0gQ3JlYXRlQ2FjaGVJZk5lY2Vzc2Fy
eSgpOwotICByZXR1cm4gcHRyOwotfQotCi0vLyBJbiBkZWxldGlvbiBwYXRocywgd2UgZG8gbm90
IHRyeSB0byBjcmVhdGUgYSB0aHJlYWQtY2FjaGUuICBUaGlzIGlzCi0vLyBiZWNhdXNlIHdlIG1h
eSBiZSBpbiB0aGUgdGhyZWFkIGRlc3RydWN0aW9uIGNvZGUgYW5kIG1heSBoYXZlCi0vLyBhbHJl
YWR5IGNsZWFuZWQgdXAgdGhlIGNhY2hlIGZvciB0aGlzIHRocmVhZC4KLWlubGluZSBUQ01hbGxv
Y19UaHJlYWRDYWNoZSogVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkdldENhY2hlSWZQcmVzZW50KCkg
ewotICBpZiAoIXRzZF9pbml0ZWQpIHJldHVybiBOVUxMOwotICB2b2lkKiBjb25zdCBwID0gR2V0
VGhyZWFkSGVhcCgpOwotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUQ01hbGxvY19UaHJlYWRD
YWNoZSo+KHApOwotfQotCi12b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpJbml0VFNEKCkgewot
ICBBU1NFUlQoIXRzZF9pbml0ZWQpOwotI2lmIFVTRShQVEhSRUFEX0dFVFNQRUNJRklDX0RJUkVD
VCkKLSAgcHRocmVhZF9rZXlfaW5pdF9ucChoZWFwX2tleSwgRGVzdHJveVRocmVhZENhY2hlKTsK
LSNlbHNlCi0gIHRocmVhZFNwZWNpZmljS2V5Q3JlYXRlKCZoZWFwX2tleSwgRGVzdHJveVRocmVh
ZENhY2hlKTsKLSNlbmRpZgotICB0c2RfaW5pdGVkID0gdHJ1ZTsKLSAgICAKLSNpZiAhT1MoV0lO
RE9XUykKLSAgLy8gV2UgbWF5IGhhdmUgdXNlZCBhIGZha2UgcHRocmVhZF90IGZvciB0aGUgbWFp
biB0aHJlYWQuICBGaXggaXQuCi0gIHB0aHJlYWRfdCB6ZXJvOwotICBtZW1zZXQoJnplcm8sIDAs
IHNpemVvZih6ZXJvKSk7Ci0jZW5kaWYKLSNpZm5kZWYgV1RGX0NIQU5HRVMKLSAgU3BpbkxvY2tI
b2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7Ci0jZWxzZQotICBBU1NFUlQocGFnZWhlYXBfbG9jay5J
c0hlbGQoKSk7Ci0jZW5kaWYKLSAgZm9yIChUQ01hbGxvY19UaHJlYWRDYWNoZSogaCA9IHRocmVh
ZF9oZWFwczsgaCAhPSBOVUxMOyBoID0gaC0+bmV4dF8pIHsKLSNpZiBPUyhXSU5ET1dTKQotICAg
IGlmIChoLT50aWRfID09IDApIHsKLSAgICAgIGgtPnRpZF8gPSBHZXRDdXJyZW50VGhyZWFkSWQo
KTsKLSAgICB9Ci0jZWxzZQotICAgIGlmIChwdGhyZWFkX2VxdWFsKGgtPnRpZF8sIHplcm8pKSB7
Ci0gICAgICBoLT50aWRfID0gcHRocmVhZF9zZWxmKCk7Ci0gICAgfQotI2VuZGlmCi0gIH0KLX0K
LQotVENNYWxsb2NfVGhyZWFkQ2FjaGUqIFRDTWFsbG9jX1RocmVhZENhY2hlOjpDcmVhdGVDYWNo
ZUlmTmVjZXNzYXJ5KCkgewotICAvLyBJbml0aWFsaXplIHBlci10aHJlYWQgZGF0YSBpZiBuZWNl
c3NhcnkKLSAgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGhlYXAgPSBOVUxMOwotICB7Ci0gICAgU3Bp
bkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7Ci0KLSNpZiBPUyhXSU5ET1dTKQotICAgIERX
T1JEIG1lOwotICAgIGlmICghdHNkX2luaXRlZCkgewotICAgICAgbWUgPSAwOwotICAgIH0gZWxz
ZSB7Ci0gICAgICBtZSA9IEdldEN1cnJlbnRUaHJlYWRJZCgpOwotICAgIH0KLSNlbHNlCi0gICAg
Ly8gRWFybHkgb24gaW4gZ2xpYmMncyBsaWZlLCB3ZSBjYW5ub3QgZXZlbiBjYWxsIHB0aHJlYWRf
c2VsZigpCi0gICAgcHRocmVhZF90IG1lOwotICAgIGlmICghdHNkX2luaXRlZCkgewotICAgICAg
bWVtc2V0KCZtZSwgMCwgc2l6ZW9mKG1lKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG1lID0gcHRo
cmVhZF9zZWxmKCk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvLyBUaGlzIG1heSBiZSBhIHJlY3Vy
c2l2ZSBtYWxsb2MgY2FsbCBmcm9tIHB0aHJlYWRfc2V0c3BlY2lmaWMoKQotICAgIC8vIEluIHRo
YXQgY2FzZSwgdGhlIGhlYXAgZm9yIHRoaXMgdGhyZWFkIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRl
ZAotICAgIC8vIGFuZCBhZGRlZCB0byB0aGUgbGlua2VkIGxpc3QuICBTbyB3ZSBzZWFyY2ggZm9y
IHRoYXQgZmlyc3QuCi0gICAgZm9yIChUQ01hbGxvY19UaHJlYWRDYWNoZSogaCA9IHRocmVhZF9o
ZWFwczsgaCAhPSBOVUxMOyBoID0gaC0+bmV4dF8pIHsKLSNpZiBPUyhXSU5ET1dTKQotICAgICAg
aWYgKGgtPnRpZF8gPT0gbWUpIHsKLSNlbHNlCi0gICAgICBpZiAocHRocmVhZF9lcXVhbChoLT50
aWRfLCBtZSkpIHsKLSNlbmRpZgotICAgICAgICBoZWFwID0gaDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGhlYXAgPT0gTlVMTCkgaGVhcCA9IE5ld0hlYXAobWUs
IEhBUkRFTklOR19FTlRST1BZKTsKLSAgfQotCi0gIC8vIFdlIGNhbGwgcHRocmVhZF9zZXRzcGVj
aWZpYygpIG91dHNpZGUgdGhlIGxvY2sgYmVjYXVzZSBpdCBtYXkKLSAgLy8gY2FsbCBtYWxsb2Mo
KSByZWN1cnNpdmVseS4gIFRoZSByZWN1cnNpdmUgY2FsbCB3aWxsIG5ldmVyIGdldAotICAvLyBo
ZXJlIGFnYWluIGJlY2F1c2UgaXQgd2lsbCBmaW5kIHRoZSBhbHJlYWR5IGFsbG9jYXRlZCBoZWFw
IGluIHRoZQotICAvLyBsaW5rZWQgbGlzdCBvZiBoZWFwcy4KLSAgaWYgKCFoZWFwLT5pbl9zZXRz
cGVjaWZpY18gJiYgdHNkX2luaXRlZCkgewotICAgIGhlYXAtPmluX3NldHNwZWNpZmljXyA9IHRy
dWU7Ci0gICAgc2V0VGhyZWFkSGVhcChoZWFwKTsKLSAgfQotICByZXR1cm4gaGVhcDsKLX0KLQot
dm9pZCBUQ01hbGxvY19UaHJlYWRDYWNoZTo6QmVjb21lSWRsZSgpIHsKLSAgaWYgKCF0c2RfaW5p
dGVkKSByZXR1cm47ICAgICAgICAgICAgICAvLyBObyBjYWNoZXMgeWV0Ci0gIFRDTWFsbG9jX1Ro
cmVhZENhY2hlKiBoZWFwID0gR2V0VGhyZWFkSGVhcCgpOwotICBpZiAoaGVhcCA9PSBOVUxMKSBy
ZXR1cm47ICAgICAgICAgICAgIC8vIE5vIHRocmVhZCBjYWNoZSB0byByZW1vdmUKLSAgaWYgKGhl
YXAtPmluX3NldHNwZWNpZmljXykgcmV0dXJuOyAgICAvLyBEbyBub3QgZGlzdHVyYiB0aGUgYWN0
aXZlIGNhbGxlcgotCi0gIGhlYXAtPmluX3NldHNwZWNpZmljXyA9IHRydWU7Ci0gIHNldFRocmVh
ZEhlYXAoTlVMTCk7Ci0jaWZkZWYgSEFWRV9UTFMKLSAgLy8gQWxzbyB1cGRhdGUgdGhlIGNvcHkg
aW4gX190aHJlYWQKLSAgdGhyZWFkbG9jYWxfaGVhcCA9IE5VTEw7Ci0jZW5kaWYKLSAgaGVhcC0+
aW5fc2V0c3BlY2lmaWNfID0gZmFsc2U7Ci0gIGlmIChHZXRUaHJlYWRIZWFwKCkgPT0gaGVhcCkg
ewotICAgIC8vIFNvbWVob3cgaGVhcCBnb3QgcmVpbnN0YXRlZCBieSBhIHJlY3Vyc2l2ZSBjYWxs
IHRvIG1hbGxvYwotICAgIC8vIGZyb20gcHRocmVhZF9zZXRzcGVjaWZpYy4gIFdlIGdpdmUgdXAg
aW4gdGhpcyBjYXNlLgotICAgIHJldHVybjsKLSAgfQotCi0gIC8vIFdlIGNhbiBub3cgZ2V0IHJp
ZCBvZiB0aGUgaGVhcAotICBEZWxldGVDYWNoZShoZWFwKTsKLX0KLQotdm9pZCBUQ01hbGxvY19U
aHJlYWRDYWNoZTo6RGVzdHJveVRocmVhZENhY2hlKHZvaWQqIHB0cikgewotICAvLyBOb3RlIHRo
YXQgInB0ciIgY2Fubm90IGJlIE5VTEwgc2luY2UgcHRocmVhZCBwcm9taXNlcyBub3QKLSAgLy8g
dG8gaW52b2tlIHRoZSBkZXN0cnVjdG9yIG9uIE5VTEwgdmFsdWVzLCBidXQgZm9yIHNhZmV0eSwK
LSAgLy8gd2UgY2hlY2sgYW55d2F5LgotICBpZiAocHRyID09IE5VTEwpIHJldHVybjsKLSNpZmRl
ZiBIQVZFX1RMUwotICAvLyBQcmV2ZW50IGZhc3QgcGF0aCBvZiBHZXRUaHJlYWRIZWFwKCkgZnJv
bSByZXR1cm5pbmcgaGVhcC4KLSAgdGhyZWFkbG9jYWxfaGVhcCA9IE5VTEw7Ci0jZW5kaWYKLSAg
RGVsZXRlQ2FjaGUocmVpbnRlcnByZXRfY2FzdDxUQ01hbGxvY19UaHJlYWRDYWNoZSo+KHB0cikp
OwotfQotCi12b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpEZWxldGVDYWNoZShUQ01hbGxvY19U
aHJlYWRDYWNoZSogaGVhcCkgewotICAvLyBSZW1vdmUgYWxsIG1lbW9yeSBmcm9tIGhlYXAKLSAg
aGVhcC0+Q2xlYW51cCgpOwotCi0gIC8vIFJlbW92ZSBmcm9tIGxpbmtlZCBsaXN0Ci0gIFNwaW5M
b2NrSG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwotICBpZiAoaGVhcC0+bmV4dF8gIT0gTlVMTCkg
aGVhcC0+bmV4dF8tPnByZXZfID0gaGVhcC0+cHJldl87Ci0gIGlmIChoZWFwLT5wcmV2XyAhPSBO
VUxMKSBoZWFwLT5wcmV2Xy0+bmV4dF8gPSBoZWFwLT5uZXh0XzsKLSAgaWYgKHRocmVhZF9oZWFw
cyA9PSBoZWFwKSB0aHJlYWRfaGVhcHMgPSBoZWFwLT5uZXh0XzsKLSAgdGhyZWFkX2hlYXBfY291
bnQtLTsKLSAgUmVjb21wdXRlVGhyZWFkQ2FjaGVTaXplKCk7Ci0KLSAgdGhyZWFkaGVhcF9hbGxv
Y2F0b3IuRGVsZXRlKGhlYXApOwotfQotCi12b2lkIFRDTWFsbG9jX1RocmVhZENhY2hlOjpSZWNv
bXB1dGVUaHJlYWRDYWNoZVNpemUoKSB7Ci0gIC8vIERpdmlkZSBhdmFpbGFibGUgc3BhY2UgYWNy
b3NzIHRocmVhZHMKLSAgaW50IG4gPSB0aHJlYWRfaGVhcF9jb3VudCA+IDAgPyB0aHJlYWRfaGVh
cF9jb3VudCA6IDE7Ci0gIHNpemVfdCBzcGFjZSA9IG92ZXJhbGxfdGhyZWFkX2NhY2hlX3NpemUg
LyBuOwotCi0gIC8vIExpbWl0IHRvIGFsbG93ZWQgcmFuZ2UKLSAgaWYgKHNwYWNlIDwga01pblRo
cmVhZENhY2hlU2l6ZSkgc3BhY2UgPSBrTWluVGhyZWFkQ2FjaGVTaXplOwotICBpZiAoc3BhY2Ug
PiBrTWF4VGhyZWFkQ2FjaGVTaXplKSBzcGFjZSA9IGtNYXhUaHJlYWRDYWNoZVNpemU7Ci0KLSAg
cGVyX3RocmVhZF9jYWNoZV9zaXplID0gc3BhY2U7Ci19Ci0KLXZvaWQgVENNYWxsb2NfVGhyZWFk
Q2FjaGU6OlByaW50KCkgY29uc3QgewotICBBU1NFUlQoa1BhZ2VTaGlmdCAmJiBrTnVtQ2xhc3Nl
cyAmJiBrUGFnZVNpemUpOwotICBmb3IgKHNpemVfdCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7
ICsrY2wpIHsKLSAgICBNRVNTQUdFKCIgICAgICAlNSIgUFJJdVMgIiA6ICU0ZCBsZW47ICU0ZCBs
b1xuIiwKLSAgICAgICAgICAgIEJ5dGVTaXplRm9yQ2xhc3MoY2wpLAotICAgICAgICAgICAgbGlz
dF9bY2xdLmxlbmd0aCgpLAotICAgICAgICAgICAgbGlzdF9bY2xdLmxvd3dhdGVybWFyaygpKTsK
LSAgfQotfQotCi0vLyBFeHRyYWN0IGludGVyZXN0aW5nIHN0YXRzCi1zdHJ1Y3QgVENNYWxsb2NT
dGF0cyB7Ci0gIHVpbnQ2NF90IHN5c3RlbV9ieXRlczsgICAgICAgIC8vIEJ5dGVzIGFsbG9jZWQg
ZnJvbSBzeXN0ZW0KLSAgdWludDY0X3QgdGhyZWFkX2J5dGVzOyAgICAgICAgLy8gQnl0ZXMgaW4g
dGhyZWFkIGNhY2hlcwotICB1aW50NjRfdCBjZW50cmFsX2J5dGVzOyAgICAgICAvLyBCeXRlcyBp
biBjZW50cmFsIGNhY2hlCi0gIHVpbnQ2NF90IHRyYW5zZmVyX2J5dGVzOyAgICAgIC8vIEJ5dGVz
IGluIGNlbnRyYWwgdHJhbnNmZXIgY2FjaGUKLSAgdWludDY0X3QgcGFnZWhlYXBfYnl0ZXM7ICAg
ICAgLy8gQnl0ZXMgaW4gcGFnZSBoZWFwCi0gIHVpbnQ2NF90IG1ldGFkYXRhX2J5dGVzOyAgICAg
IC8vIEJ5dGVzIGFsbG9jZWQgZm9yIG1ldGFkYXRhCi19OwotCi0jaWZuZGVmIFdURl9DSEFOR0VT
Ci0vLyBHZXQgc3RhdHMgaW50byAiciIuICBBbHNvIGdldCBwZXItc2l6ZS1jbGFzcyBjb3VudHMg
aWYgY2xhc3NfY291bnQgIT0gTlVMTAotc3RhdGljIHZvaWQgRXh0cmFjdFN0YXRzKFRDTWFsbG9j
U3RhdHMqIHIsIHVpbnQ2NF90KiBjbGFzc19jb3VudCkgewotICBBU1NFUlQoa1BhZ2VTaGlmdCAm
JiBrTnVtQ2xhc3NlcyAmJiBrUGFnZVNpemUpOwotICByLT5jZW50cmFsX2J5dGVzID0gMDsKLSAg
ci0+dHJhbnNmZXJfYnl0ZXMgPSAwOwotICBmb3IgKGludCBjbCA9IDA7IGNsIDwga051bUNsYXNz
ZXM7ICsrY2wpIHsKLSAgICBjb25zdCBpbnQgbGVuZ3RoID0gY2VudHJhbF9jYWNoZVtjbF0ubGVu
Z3RoKCk7Ci0gICAgY29uc3QgaW50IHRjX2xlbmd0aCA9IGNlbnRyYWxfY2FjaGVbY2xdLnRjX2xl
bmd0aCgpOwotICAgIHItPmNlbnRyYWxfYnl0ZXMgKz0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJ5
dGVTaXplRm9yQ2xhc3MoY2wpKSAqIGxlbmd0aDsKLSAgICByLT50cmFuc2Zlcl9ieXRlcyArPQot
ICAgICAgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEJ5dGVTaXplRm9yQ2xhc3MoY2wpKSAqIHRjX2xl
bmd0aDsKLSAgICBpZiAoY2xhc3NfY291bnQpIGNsYXNzX2NvdW50W2NsXSA9IGxlbmd0aCArIHRj
X2xlbmd0aDsKLSAgfQotCi0gIC8vIEFkZCBzdGF0cyBmcm9tIHBlci10aHJlYWQgaGVhcHMKLSAg
ci0+dGhyZWFkX2J5dGVzID0gMDsKLSAgeyAvLyBzY29wZQotICAgIFNwaW5Mb2NrSG9sZGVyIGgo
JnBhZ2VoZWFwX2xvY2spOwotICAgIGZvciAoVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGggPSB0aHJl
YWRfaGVhcHM7IGggIT0gTlVMTDsgaCA9IGgtPm5leHRfKSB7Ci0gICAgICByLT50aHJlYWRfYnl0
ZXMgKz0gaC0+U2l6ZSgpOwotICAgICAgaWYgKGNsYXNzX2NvdW50KSB7Ci0gICAgICAgIGZvciAo
c2l6ZV90IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgewotICAgICAgICAgIGNsYXNz
X2NvdW50W2NsXSArPSBoLT5mcmVlbGlzdF9sZW5ndGgoY2wpOwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgfQotICB9Ci0KLSAgeyAvL3Njb3BlCi0gICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhl
YXBfbG9jayk7Ci0gICAgci0+c3lzdGVtX2J5dGVzID0gcGFnZWhlYXAtPlN5c3RlbUJ5dGVzKCk7
Ci0gICAgci0+bWV0YWRhdGFfYnl0ZXMgPSBtZXRhZGF0YV9zeXN0ZW1fYnl0ZXM7Ci0gICAgci0+
cGFnZWhlYXBfYnl0ZXMgPSBwYWdlaGVhcC0+RnJlZUJ5dGVzKCk7Ci0gIH0KLX0KLSNlbmRpZgot
Ci0jaWZuZGVmIFdURl9DSEFOR0VTCi0vLyBXUklURSBzdGF0cyB0byAib3V0Igotc3RhdGljIHZv
aWQgRHVtcFN0YXRzKFRDTWFsbG9jX1ByaW50ZXIqIG91dCwgaW50IGxldmVsKSB7Ci0gIEFTU0VS
VChrUGFnZVNoaWZ0ICYmIGtOdW1DbGFzc2VzICYmIGtQYWdlU2l6ZSk7Ci0gIFRDTWFsbG9jU3Rh
dHMgc3RhdHM7Ci0gIHVpbnQ2NF90IGNsYXNzX2NvdW50W2tOdW1DbGFzc2VzXTsKLSAgRXh0cmFj
dFN0YXRzKCZzdGF0cywgKGxldmVsID49IDIgPyBjbGFzc19jb3VudCA6IE5VTEwpKTsKLQotICBp
ZiAobGV2ZWwgPj0gMikgewotICAgIG91dC0+cHJpbnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICAgIHVpbnQ2NF90IGN1bXVsYXRpdmUg
PSAwOwotICAgIGZvciAoaW50IGNsID0gMDsgY2wgPCBrTnVtQ2xhc3NlczsgKytjbCkgewotICAg
ICAgaWYgKGNsYXNzX2NvdW50W2NsXSA+IDApIHsKLSAgICAgICAgdWludDY0X3QgY2xhc3NfYnl0
ZXMgPSBjbGFzc19jb3VudFtjbF0gKiBCeXRlU2l6ZUZvckNsYXNzKGNsKTsKLSAgICAgICAgY3Vt
dWxhdGl2ZSArPSBjbGFzc19ieXRlczsKLSAgICAgICAgb3V0LT5wcmludGYoImNsYXNzICUzZCBb
ICU4IiBQUkl1UyAiIGJ5dGVzIF0gOiAiCi0gICAgICAgICAgICAgICAgIiU4IiBQUkl1NjQgIiBv
YmpzOyAlNS4xZiBNQjsgJTUuMWYgY3VtIE1CXG4iLAotICAgICAgICAgICAgICAgIGNsLCBCeXRl
U2l6ZUZvckNsYXNzKGNsKSwKLSAgICAgICAgICAgICAgICBjbGFzc19jb3VudFtjbF0sCi0gICAg
ICAgICAgICAgICAgY2xhc3NfYnl0ZXMgLyAxMDQ4NTc2LjAsCi0gICAgICAgICAgICAgICAgY3Vt
dWxhdGl2ZSAvIDEwNDg1NzYuMCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgU3BpbkxvY2tIb2xk
ZXIgaCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgcGFnZWhlYXAtPkR1bXAob3V0KTsKLSAgfQotCi0g
IGNvbnN0IHVpbnQ2NF90IGJ5dGVzX2luX3VzZSA9IHN0YXRzLnN5c3RlbV9ieXRlcwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtIHN0YXRzLnBhZ2VoZWFwX2J5dGVzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMuY2VudHJhbF9ieXRlcwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAtIHN0YXRzLnRyYW5zZmVyX2J5dGVzCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC0gc3RhdHMudGhyZWFkX2J5dGVzOwotCi0gIG91dC0+cHJp
bnRmKCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIK
LSAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBIZWFwIHNpemVcbiIKLSAgICAg
ICAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBCeXRlcyBpbiB1c2UgYnkgYXBwbGljYXRp
b25cbiIKLSAgICAgICAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBCeXRlcyBmcmVlIGlu
IHBhZ2UgaGVhcFxuIgotICAgICAgICAgICAgICAiTUFMTE9DOiAlMTIiIFBSSXU2NCAiIEJ5dGVz
IGZyZWUgaW4gY2VudHJhbCBjYWNoZVxuIgotICAgICAgICAgICAgICAiTUFMTE9DOiAlMTIiIFBS
SXU2NCAiIEJ5dGVzIGZyZWUgaW4gdHJhbnNmZXIgY2FjaGVcbiIKLSAgICAgICAgICAgICAgIk1B
TExPQzogJTEyIiBQUkl1NjQgIiBCeXRlcyBmcmVlIGluIHRocmVhZCBjYWNoZXNcbiIKLSAgICAg
ICAgICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBTcGFucyBpbiB1c2VcbiIKLSAgICAgICAg
ICAgICAgIk1BTExPQzogJTEyIiBQUkl1NjQgIiBUaHJlYWQgaGVhcHMgaW4gdXNlXG4iCi0gICAg
ICAgICAgICAgICJNQUxMT0M6ICUxMiIgUFJJdTY0ICIgTWV0YWRhdGEgYWxsb2NhdGVkXG4iCi0g
ICAgICAgICAgICAgICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS1cbiIsCi0gICAgICAgICAgICAgIHN0YXRzLnN5c3RlbV9ieXRlcywKLSAgICAgICAgICAg
ICAgYnl0ZXNfaW5fdXNlLAotICAgICAgICAgICAgICBzdGF0cy5wYWdlaGVhcF9ieXRlcywKLSAg
ICAgICAgICAgICAgc3RhdHMuY2VudHJhbF9ieXRlcywKLSAgICAgICAgICAgICAgc3RhdHMudHJh
bnNmZXJfYnl0ZXMsCi0gICAgICAgICAgICAgIHN0YXRzLnRocmVhZF9ieXRlcywKLSAgICAgICAg
ICAgICAgdWludDY0X3Qoc3Bhbl9hbGxvY2F0b3IuaW51c2UoKSksCi0gICAgICAgICAgICAgIHVp
bnQ2NF90KHRocmVhZGhlYXBfYWxsb2NhdG9yLmludXNlKCkpLAotICAgICAgICAgICAgICBzdGF0
cy5tZXRhZGF0YV9ieXRlcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIFByaW50U3RhdHMoaW50IGxldmVs
KSB7Ci0gIGNvbnN0IGludCBrQnVmZmVyU2l6ZSA9IDE2IDw8IDEwOwotICBjaGFyKiBidWZmZXIg
PSBuZXcgY2hhcltrQnVmZmVyU2l6ZV07Ci0gIFRDTWFsbG9jX1ByaW50ZXIgcHJpbnRlcihidWZm
ZXIsIGtCdWZmZXJTaXplKTsKLSAgRHVtcFN0YXRzKCZwcmludGVyLCBsZXZlbCk7Ci0gIHdyaXRl
KFNUREVSUl9GSUxFTk8sIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpOwotICBkZWxldGVbXSBidWZm
ZXI7Ci19Ci0KLXN0YXRpYyB2b2lkKiogRHVtcFN0YWNrVHJhY2VzKCkgewotICAvLyBDb3VudCBo
b3cgbXVjaCBzcGFjZSB3ZSBuZWVkCi0gIGludCBuZWVkZWRfc2xvdHMgPSAwOwotICB7Ci0gICAg
U3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgZm9yIChTcGFuKiBzID0gc2Ft
cGxlZF9vYmplY3RzLm5leHQ7IHMgIT0gJnNhbXBsZWRfb2JqZWN0czsgcyA9IHMtPm5leHQpIHsK
LSAgICAgIFN0YWNrVHJhY2UqIHN0YWNrID0gcmVpbnRlcnByZXRfY2FzdDxTdGFja1RyYWNlKj4o
cy0+b2JqZWN0cyk7Ci0gICAgICBuZWVkZWRfc2xvdHMgKz0gMyArIHN0YWNrLT5kZXB0aDsKLSAg
ICB9Ci0gICAgbmVlZGVkX3Nsb3RzICs9IDEwMDsgICAgICAgICAgICAvLyBTbG9wIGluIGNhc2Ug
c2FtcGxlIGdyb3dzCi0gICAgbmVlZGVkX3Nsb3RzICs9IG5lZWRlZF9zbG90cy84OyAvLyBBbiBl
eHRyYSAxMi41JSBzbG9wCi0gIH0KLQotICB2b2lkKiogcmVzdWx0ID0gbmV3IHZvaWQqW25lZWRl
ZF9zbG90c107Ci0gIGlmIChyZXN1bHQgPT0gTlVMTCkgewotICAgIE1FU1NBR0UoInRjbWFsbG9j
OiBjb3VsZCBub3QgYWxsb2NhdGUgJWQgc2xvdHMgZm9yIHN0YWNrIHRyYWNlc1xuIiwKLSAgICAg
ICAgICAgIG5lZWRlZF9zbG90cyk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLQotICBTcGluTG9j
a0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKLSAgaW50IHVzZWRfc2xvdHMgPSAwOwotICBmb3Ig
KFNwYW4qIHMgPSBzYW1wbGVkX29iamVjdHMubmV4dDsgcyAhPSAmc2FtcGxlZF9vYmplY3RzOyBz
ID0gcy0+bmV4dCkgewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHVzZWRf
c2xvdHMgPCBuZWVkZWRfc2xvdHMpOyAvLyBOZWVkIHRvIGxlYXZlIHJvb20gZm9yIHRlcm1pbmF0
b3IKLSAgICBTdGFja1RyYWNlKiBzdGFjayA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3RhY2tUcmFjZSo+
KHMtPm9iamVjdHMpOwotICAgIGlmICh1c2VkX3Nsb3RzICsgMyArIHN0YWNrLT5kZXB0aCA+PSBu
ZWVkZWRfc2xvdHMpIHsKLSAgICAgIC8vIE5vIG1vcmUgcm9vbQotICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgcmVzdWx0W3VzZWRfc2xvdHMrMF0gPSByZWludGVycHJldF9jYXN0PHZvaWQqPihz
dGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpKTsKLSAgICByZXN1bHRbdXNlZF9zbG90cysxXSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YWNrLT5zaXplKTsKLSAgICByZXN1bHRbdXNlZF9zbG90
cysyXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YWNrLT5kZXB0aCk7Ci0gICAgZm9yIChp
bnQgZCA9IDA7IGQgPCBzdGFjay0+ZGVwdGg7IGQrKykgewotICAgICAgcmVzdWx0W3VzZWRfc2xv
dHMrMytkXSA9IHN0YWNrLT5zdGFja1tkXTsKLSAgICB9Ci0gICAgdXNlZF9zbG90cyArPSAzICsg
c3RhY2stPmRlcHRoOwotICB9Ci0gIHJlc3VsdFt1c2VkX3Nsb3RzXSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMCkpOwotICByZXR1cm4gcmVzdWx0Owot
fQotI2VuZGlmCi0KLSNpZm5kZWYgV1RGX0NIQU5HRVMKLQotLy8gVENNYWxsb2MncyBzdXBwb3J0
IGZvciBleHRyYSBtYWxsb2MgaW50ZXJmYWNlcwotY2xhc3MgVENNYWxsb2NJbXBsZW1lbnRhdGlv
biA6IHB1YmxpYyBNYWxsb2NFeHRlbnNpb24gewotIHB1YmxpYzoKLSAgdmlydHVhbCB2b2lkIEdl
dFN0YXRzKGNoYXIqIGJ1ZmZlciwgaW50IGJ1ZmZlcl9sZW5ndGgpIHsKLSAgICBBU1NFUlQoYnVm
ZmVyX2xlbmd0aCA+IDApOwotICAgIFRDTWFsbG9jX1ByaW50ZXIgcHJpbnRlcihidWZmZXIsIGJ1
ZmZlcl9sZW5ndGgpOwotCi0gICAgLy8gUHJpbnQgbGV2ZWwgb25lIHN0YXRzIHVubGVzcyBsb3Rz
IG9mIHNwYWNlIGlzIGF2YWlsYWJsZQotICAgIGlmIChidWZmZXJfbGVuZ3RoIDwgMTAwMDApIHsK
LSAgICAgIER1bXBTdGF0cygmcHJpbnRlciwgMSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIER1bXBT
dGF0cygmcHJpbnRlciwgMik7Ci0gICAgfQotICB9Ci0KLSAgdmlydHVhbCB2b2lkKiogUmVhZFN0
YWNrVHJhY2VzKCkgewotICAgIHJldHVybiBEdW1wU3RhY2tUcmFjZXMoKTsKLSAgfQotCi0gIHZp
cnR1YWwgYm9vbCBHZXROdW1lcmljUHJvcGVydHkoY29uc3QgY2hhciogbmFtZSwgc2l6ZV90KiB2
YWx1ZSkgewotICAgIEFTU0VSVChuYW1lICE9IE5VTEwpOwotCi0gICAgaWYgKHN0cmNtcChuYW1l
LCAiZ2VuZXJpYy5jdXJyZW50X2FsbG9jYXRlZF9ieXRlcyIpID09IDApIHsKLSAgICAgIFRDTWFs
bG9jU3RhdHMgc3RhdHM7Ci0gICAgICBFeHRyYWN0U3RhdHMoJnN0YXRzLCBOVUxMKTsKLSAgICAg
ICp2YWx1ZSA9IHN0YXRzLnN5c3RlbV9ieXRlcwotICAgICAgICAgICAgICAgLSBzdGF0cy50aHJl
YWRfYnl0ZXMKLSAgICAgICAgICAgICAgIC0gc3RhdHMuY2VudHJhbF9ieXRlcwotICAgICAgICAg
ICAgICAgLSBzdGF0cy5wYWdlaGVhcF9ieXRlczsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIGlmIChzdHJjbXAobmFtZSwgImdlbmVyaWMuaGVhcF9zaXplIikgPT0gMCkgewotICAg
ICAgVENNYWxsb2NTdGF0cyBzdGF0czsKLSAgICAgIEV4dHJhY3RTdGF0cygmc3RhdHMsIE5VTEwp
OwotICAgICAgKnZhbHVlID0gc3RhdHMuc3lzdGVtX2J5dGVzOwotICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgaWYgKHN0cmNtcChuYW1lLCAidGNtYWxsb2Muc2xhY2tfYnl0ZXMiKSA9
PSAwKSB7Ci0gICAgICAvLyBXZSBhc3N1bWUgdGhhdCBieXRlcyBpbiB0aGUgcGFnZSBoZWFwIGFy
ZSBub3QgZnJhZ21lbnRlZCB0b28KLSAgICAgIC8vIGJhZGx5LCBhbmQgYXJlIHRoZXJlZm9yZSBh
dmFpbGFibGUgZm9yIGFsbG9jYXRpb24uCi0gICAgICBTcGluTG9ja0hvbGRlciBsKCZwYWdlaGVh
cF9sb2NrKTsKLSAgICAgICp2YWx1ZSA9IHBhZ2VoZWFwLT5GcmVlQnl0ZXMoKTsKLSAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChzdHJjbXAobmFtZSwgInRjbWFsbG9jLm1heF90
b3RhbF90aHJlYWRfY2FjaGVfYnl0ZXMiKSA9PSAwKSB7Ci0gICAgICBTcGluTG9ja0hvbGRlciBs
KCZwYWdlaGVhcF9sb2NrKTsKLSAgICAgICp2YWx1ZSA9IG92ZXJhbGxfdGhyZWFkX2NhY2hlX3Np
emU7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyY21wKG5hbWUsICJ0
Y21hbGxvYy5jdXJyZW50X3RvdGFsX3RocmVhZF9jYWNoZV9ieXRlcyIpID09IDApIHsKLSAgICAg
IFRDTWFsbG9jU3RhdHMgc3RhdHM7Ci0gICAgICBFeHRyYWN0U3RhdHMoJnN0YXRzLCBOVUxMKTsK
LSAgICAgICp2YWx1ZSA9IHN0YXRzLnRocmVhZF9ieXRlczsKLSAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHZpcnR1YWwgYm9vbCBTZXROdW1l
cmljUHJvcGVydHkoY29uc3QgY2hhciogbmFtZSwgc2l6ZV90IHZhbHVlKSB7Ci0gICAgQVNTRVJU
KG5hbWUgIT0gTlVMTCk7Ci0KLSAgICBpZiAoc3RyY21wKG5hbWUsICJ0Y21hbGxvYy5tYXhfdG90
YWxfdGhyZWFkX2NhY2hlX2J5dGVzIikgPT0gMCkgewotICAgICAgLy8gQ2xpcCB0aGUgdmFsdWUg
dG8gYSByZWFzb25hYmxlIHJhbmdlCi0gICAgICBpZiAodmFsdWUgPCBrTWluVGhyZWFkQ2FjaGVT
aXplKSB2YWx1ZSA9IGtNaW5UaHJlYWRDYWNoZVNpemU7Ci0gICAgICBpZiAodmFsdWUgPiAoMTw8
MzApKSB2YWx1ZSA9ICgxPDwzMCk7ICAgICAvLyBMaW1pdCB0byAxR0IKLQotICAgICAgU3Bpbkxv
Y2tIb2xkZXIgbCgmcGFnZWhlYXBfbG9jayk7Ci0gICAgICBvdmVyYWxsX3RocmVhZF9jYWNoZV9z
aXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pih2YWx1ZSk7Ci0gICAgICBUQ01hbGxvY19UaHJlYWRD
YWNoZTo6UmVjb21wdXRlVGhyZWFkQ2FjaGVTaXplKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICB2aXJ0dWFsIHZvaWQgTWFya1RocmVh
ZElkbGUoKSB7Ci0gICAgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkJlY29tZUlkbGUoKTsKLSAgfQot
Ci0gIHZpcnR1YWwgdm9pZCBSZWxlYXNlRnJlZU1lbW9yeSgpIHsKLSAgICBTcGluTG9ja0hvbGRl
ciBoKCZwYWdlaGVhcF9sb2NrKTsKLSAgICBwYWdlaGVhcC0+UmVsZWFzZUZyZWVQYWdlcygpOwot
ICB9Ci19OwotI2VuZGlmCi0KLS8vIFRoZSBjb25zdHJ1Y3RvciBhbGxvY2F0ZXMgYW4gb2JqZWN0
IHRvIGVuc3VyZSB0aGF0IGluaXRpYWxpemF0aW9uCi0vLyBydW5zIGJlZm9yZSBtYWluKCksIGFu
ZCB0aGVyZWZvcmUgd2UgZG8gbm90IGhhdmUgYSBjaGFuY2UgdG8gYmVjb21lCi0vLyBtdWx0aS10
aHJlYWRlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24uICBXZSBhbHNvIGNyZWF0ZSB0aGUgVFNEIGtl
eQotLy8gaGVyZS4gIFByZXN1bWFibHkgYnkgdGhlIHRpbWUgdGhpcyBjb25zdHJ1Y3RvciBydW5z
LCBnbGliYyBpcyBpbgotLy8gZ29vZCBlbm91Z2ggc2hhcGUgdG8gaGFuZGxlIHB0aHJlYWRfa2V5
X2NyZWF0ZSgpLgotLy8KLS8vIFRoZSBjb25zdHJ1Y3RvciBhbHNvIHRha2VzIHRoZSBvcHBvcnR1
bml0eSB0byB0ZWxsIFNUTCB0byB1c2UKLS8vIHRjbWFsbG9jLiAgV2Ugd2FudCB0byBkbyB0aGlz
IGVhcmx5LCBiZWZvcmUgY29uc3RydWN0IHRpbWUsIHNvCi0vLyBhbGwgdXNlciBTVEwgYWxsb2Nh
dGlvbnMgZ28gdGhyb3VnaCB0Y21hbGxvYyAod2hpY2ggd29ya3MgcmVhbGx5Ci0vLyB3ZWxsIGZv
ciBTVEwpLgotLy8KLS8vIFRoZSBkZXN0cnVjdG9yIHByaW50cyBzdGF0cyB3aGVuIHRoZSBwcm9n
cmFtIGV4aXRzLgotY2xhc3MgVENNYWxsb2NHdWFyZCB7Ci0gcHVibGljOgotCi0gIFRDTWFsbG9j
R3VhcmQoKSB7Ci0jaWZkZWYgSEFWRV9UTFMgICAgLy8gdGhpcyBpcyB0cnVlIGlmIHRoZSBjYy9s
ZC9saWJjIGNvbWJvIHN1cHBvcnQgVExTCi0gICAgLy8gQ2hlY2sgd2hldGhlciB0aGUga2VybmVs
IGFsc28gc3VwcG9ydHMgVExTIChuZWVkcyB0byBoYXBwZW4gYXQgcnVudGltZSkKLSAgICBDaGVj
a0lmS2VybmVsU3VwcG9ydHNUTFMoKTsKLSNlbmRpZgotI2lmbmRlZiBXVEZfQ0hBTkdFUwotI2lm
ZGVmIFdJTjMyICAgICAgICAgICAgICAgICAgICAvLyBwYXRjaCB0aGUgd2luZG93cyBWaXJ0dWFs
QWxsb2MsIGV0Yy4KLSAgICBQYXRjaFdpbmRvd3NGdW5jdGlvbnMoKTsgICAgLy8gZGVmaW5lZCBp
biB3aW5kb3dzL3BhdGNoX2Z1bmN0aW9ucy5jYwotI2VuZGlmCi0jZW5kaWYKLSAgICBmcmVlKG1h
bGxvYygxKSk7Ci0gICAgVENNYWxsb2NfVGhyZWFkQ2FjaGU6OkluaXRUU0QoKTsKLSAgICBmcmVl
KG1hbGxvYygxKSk7Ci0jaWZuZGVmIFdURl9DSEFOR0VTCi0gICAgTWFsbG9jRXh0ZW5zaW9uOjpS
ZWdpc3RlcihuZXcgVENNYWxsb2NJbXBsZW1lbnRhdGlvbik7Ci0jZW5kaWYKLSAgfQotCi0jaWZu
ZGVmIFdURl9DSEFOR0VTCi0gIH5UQ01hbGxvY0d1YXJkKCkgewotICAgIGNvbnN0IGNoYXIqIGVu
diA9IGdldGVudigiTUFMTE9DU1RBVFMiKTsKLSAgICBpZiAoZW52ICE9IE5VTEwpIHsKLSAgICAg
IGludCBsZXZlbCA9IGF0b2koZW52KTsKLSAgICAgIGlmIChsZXZlbCA8IDEpIGxldmVsID0gMTsK
LSAgICAgIFByaW50U3RhdHMobGV2ZWwpOwotICAgIH0KLSNpZmRlZiBXSU4zMgotICAgIFVucGF0
Y2hXaW5kb3dzRnVuY3Rpb25zKCk7Ci0jZW5kaWYKLSAgfQotI2VuZGlmCi19OwotCi0jaWZuZGVm
IFdURl9DSEFOR0VTCi1zdGF0aWMgVENNYWxsb2NHdWFyZCBtb2R1bGVfZW50ZXJfZXhpdF9ob29r
OwotI2VuZGlmCi0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBIZWxwZXJzIGZvciB0aGUgZXhwb3J0ZWQg
cm91dGluZXMgYmVsb3cKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jaWZuZGVmIFdURl9DSEFOR0VTCi0KLXN0
YXRpYyBTcGFuKiBEb1NhbXBsZWRBbGxvY2F0aW9uKHNpemVfdCBzaXplKSB7Ci0KLSAgLy8gR3Jh
YiB0aGUgc3RhY2sgdHJhY2Ugb3V0c2lkZSB0aGUgaGVhcCBsb2NrCi0gIFN0YWNrVHJhY2UgdG1w
OwotICB0bXAuZGVwdGggPSBHZXRTdGFja1RyYWNlKHRtcC5zdGFjaywga01heFN0YWNrRGVwdGgs
IDEpOwotICB0bXAuc2l6ZSA9IHNpemU7Ci0KLSAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBf
bG9jayk7Ci0gIC8vIEFsbG9jYXRlIHNwYW4KLSAgU3BhbiAqc3BhbiA9IHBhZ2VoZWFwLT5OZXco
cGFnZXMoc2l6ZSA9PSAwID8gMSA6IHNpemUpKTsKLSAgaWYgKHNwYW4gPT0gTlVMTCkgewotICAg
IHJldHVybiBOVUxMOwotICB9Ci0KLSAgLy8gQWxsb2NhdGUgc3RhY2sgdHJhY2UKLSAgU3RhY2tU
cmFjZSAqc3RhY2sgPSBzdGFja3RyYWNlX2FsbG9jYXRvci5OZXcoKTsKLSAgaWYgKHN0YWNrID09
IE5VTEwpIHsKLSAgICAvLyBTYW1wbGluZyBmYWlsZWQgYmVjYXVzZSBvZiBsYWNrIG9mIG1lbW9y
eQotICAgIHJldHVybiBzcGFuOwotICB9Ci0KLSAgKnN0YWNrID0gdG1wOwotICBzcGFuLT5zYW1w
bGUgPSAxOwotICBzcGFuLT5vYmplY3RzID0gc3RhY2s7Ci0gIERMTF9QcmVwZW5kKCZzYW1wbGVk
X29iamVjdHMsIHNwYW4pOwotCi0gIHJldHVybiBzcGFuOwotfQotI2VuZGlmCi0KLSNpZiAhQVNT
RVJUX0RJU0FCTEVECi1zdGF0aWMgaW5saW5lIGJvb2wgQ2hlY2tDYWNoZWRTaXplQ2xhc3Modm9p
ZCAqcHRyKSB7Ci0gIEFTU0VSVChrUGFnZVNoaWZ0ICYmIGtOdW1DbGFzc2VzICYmIGtQYWdlU2l6
ZSk7Ci0gIFBhZ2VJRCBwID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHB0cikgPj4ga1Bh
Z2VTaGlmdDsKLSAgc2l6ZV90IGNhY2hlZF92YWx1ZSA9IHBhZ2VoZWFwLT5HZXRTaXplQ2xhc3NJ
ZkNhY2hlZChwKTsKLSAgcmV0dXJuIGNhY2hlZF92YWx1ZSA9PSAwIHx8Ci0gICAgICBjYWNoZWRf
dmFsdWUgPT0gcGFnZWhlYXAtPkdldERlc2NyaXB0b3IocCktPnNpemVjbGFzczsKLX0KLSNlbmRp
ZgotCi1zdGF0aWMgaW5saW5lIHZvaWQqIENoZWNrZWRNYWxsb2NSZXN1bHQodm9pZCAqcmVzdWx0
KQotewotICBBU1NFUlQocmVzdWx0ID09IDAgfHwgQ2hlY2tDYWNoZWRTaXplQ2xhc3MocmVzdWx0
KSk7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCogU3BhblRvTWFs
bG9jUmVzdWx0KFNwYW4gKnNwYW4pIHsKLSAgQVNTRVJUKGtQYWdlU2hpZnQgJiYga051bUNsYXNz
ZXMgJiYga1BhZ2VTaXplKTsKLSAgQVNTRVJUX1NQQU5fQ09NTUlUVEVEKHNwYW4pOwotICBwYWdl
aGVhcC0+Q2FjaGVTaXplQ2xhc3Moc3Bhbi0+c3RhcnQsIDApOwotICB2b2lkKiByZXN1bHQgPSBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihzcGFuLT5zdGFydCA8PCBrUGFnZVNoaWZ0KTsKLSAgUE9J
U09OX0FMTE9DQVRJT04ocmVzdWx0LCBzcGFuLT5sZW5ndGggPDwga1BhZ2VTaGlmdCk7Ci0gIHJl
dHVybiBDaGVja2VkTWFsbG9jUmVzdWx0KHJlc3VsdCk7Ci19Ci0KLSNpZmRlZiBXVEZfQ0hBTkdF
UwotdGVtcGxhdGUgPGJvb2wgY3Jhc2hPbkZhaWx1cmU+Ci0jZW5kaWYKLXN0YXRpYyBBTFdBWVNf
SU5MSU5FIHZvaWQqIGRvX21hbGxvYyhzaXplX3Qgc2l6ZSkgewotICB2b2lkKiByZXQgPSBOVUxM
OwotCi0gIC8vIFRoZSBmb2xsb3dpbmcgY2FsbCBmb3JjZXMgbW9kdWxlIGluaXRpYWxpemF0aW9u
Ci0gIFRDTWFsbG9jX1RocmVhZENhY2hlKiBoZWFwID0gVENNYWxsb2NfVGhyZWFkQ2FjaGU6Okdl
dENhY2hlKCk7Ci0jaWZuZGVmIFdURl9DSEFOR0VTCi0gIGlmICgoRkxBR1NfdGNtYWxsb2Nfc2Ft
cGxlX3BhcmFtZXRlciA+IDApICYmIGhlYXAtPlNhbXBsZUFsbG9jYXRpb24oc2l6ZSkpIHsKLSAg
ICBTcGFuKiBzcGFuID0gRG9TYW1wbGVkQWxsb2NhdGlvbihzaXplKTsKLSAgICBpZiAoc3BhbiAh
PSBOVUxMKSB7Ci0gICAgICByZXQgPSBTcGFuVG9NYWxsb2NSZXN1bHQoc3Bhbik7Ci0gICAgfQot
ICB9IGVsc2UKLSNlbmRpZgotICBpZiAoc2l6ZSA+IGtNYXhTaXplKSB7Ci0gICAgLy8gVXNlIHBh
Z2UtbGV2ZWwgYWxsb2NhdG9yCi0gICAgU3BpbkxvY2tIb2xkZXIgaCgmcGFnZWhlYXBfbG9jayk7
Ci0gICAgU3Bhbiogc3BhbiA9IHBhZ2VoZWFwLT5OZXcocGFnZXMoc2l6ZSkpOwotICAgIGlmIChz
cGFuICE9IE5VTEwpIHsKLSAgICAgIHJldCA9IFNwYW5Ub01hbGxvY1Jlc3VsdChzcGFuKTsKLSAg
ICB9Ci0gIH0gZWxzZSB7Ci0gICAgLy8gVGhlIGNvbW1vbiBjYXNlLCBhbmQgYWxzbyB0aGUgc2lt
cGxlc3QuICBUaGlzIGp1c3QgcG9wcyB0aGUKLSAgICAvLyBzaXplLWFwcHJvcHJpYXRlIGZyZWVs
aXN0LCBhZmVyIHJlcGxlbmlzaGluZyBpdCBpZiBpdCdzIGVtcHR5LgotICAgIHJldCA9IENoZWNr
ZWRNYWxsb2NSZXN1bHQoaGVhcC0+QWxsb2NhdGUoc2l6ZSkpOwotICB9Ci0gIGlmICghcmV0KSB7
Ci0jaWZkZWYgV1RGX0NIQU5HRVMKLSAgICBpZiAoY3Jhc2hPbkZhaWx1cmUpIC8vIFRoaXMgYnJh
bmNoIHNob3VsZCBiZSBvcHRpbWl6ZWQgb3V0IGJ5IHRoZSBjb21waWxlci4KLSAgICAgICAgQ1JB
U0goKTsKLSNlbHNlCi0gICAgZXJybm8gPSBFTk9NRU07Ci0jZW5kaWYKLSAgfQotICByZXR1cm4g
cmV0OwotfQotCi1zdGF0aWMgQUxXQVlTX0lOTElORSB2b2lkIGRvX2ZyZWUodm9pZCogcHRyKSB7
Ci0gIGlmIChwdHIgPT0gTlVMTCkgcmV0dXJuOwotICBBU1NFUlQocGFnZWhlYXAgIT0gTlVMTCk7
ICAvLyBTaG91bGQgbm90IGNhbGwgZnJlZSgpIGJlZm9yZSBtYWxsb2MoKQotICBBU1NFUlQoa1Bh
Z2VTaGlmdCAmJiBrTnVtQ2xhc3NlcyAmJiBrUGFnZVNpemUpOwotICBjb25zdCBQYWdlSUQgcCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpID4+IGtQYWdlU2hpZnQ7Ci0gIFNwYW4q
IHNwYW4gPSBwYWdlaGVhcC0+R2V0RGVzY3JpcHRvcihwKTsKLSAgUkVMRUFTRV9BU1NFUlQoc3Bh
bi0+aXNWYWxpZCgpKTsKLSAgc2l6ZV90IGNsID0gc3Bhbi0+c2l6ZWNsYXNzOwotCi0gIGlmIChj
bCkgewotICAgIHNpemVfdCBieXRlU2l6ZUZvckNsYXNzID0gQnl0ZVNpemVGb3JDbGFzcyhjbCk7
Ci0jaWYgIShDUFUoQVJNX1RIVU1CMikgJiYgIUNQVShBUFBMRV9BUk1WN1MpKQotICAgIFJFTEVB
U0VfQVNTRVJUKCEoKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHB0cikgLSByZWludGVycHJldF9j
YXN0PGNoYXIqPihzcGFuLT5zdGFydCA8PCBrUGFnZVNoaWZ0KSkgJSBieXRlU2l6ZUZvckNsYXNz
KSk7Ci0jZW5kaWYKLSAgICBwYWdlaGVhcC0+Q2FjaGVTaXplQ2xhc3MocCwgY2wpOwotCi0jaWZu
ZGVmIE5PX1RDTUFMTE9DX1NBTVBMRVMKLSAgICBBU1NFUlQoIXBhZ2VoZWFwLT5HZXREZXNjcmlw
dG9yKHApLT5zYW1wbGUpOwotI2VuZGlmCi0gICAgVENNYWxsb2NfVGhyZWFkQ2FjaGUqIGhlYXAg
PSBUQ01hbGxvY19UaHJlYWRDYWNoZTo6R2V0Q2FjaGVJZlByZXNlbnQoKTsKLSAgICBpZiAoaGVh
cCAhPSBOVUxMKSB7Ci0gICAgICBoZWFwLT5EZWFsbG9jYXRlKEhhcmRlbmVkU0xMOjpjcmVhdGUo
cHRyKSwgY2wpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBEZWxldGUgZGlyZWN0bHkgaW50byBj
ZW50cmFsIGNhY2hlCi0gICAgICBQT0lTT05fREVBTExPQ0FUSU9OKHB0ciwgYnl0ZVNpemVGb3JD
bGFzcyk7Ci0gICAgICBTTExfU2V0TmV4dChIYXJkZW5lZFNMTDo6Y3JlYXRlKHB0ciksIEhhcmRl
bmVkU0xMOjpudWxsKCksIGNlbnRyYWxfY2FjaGVbY2xdLmVudHJvcHkoKSk7Ci0gICAgICBjZW50
cmFsX2NhY2hlW2NsXS5JbnNlcnRSYW5nZShIYXJkZW5lZFNMTDo6Y3JlYXRlKHB0ciksIEhhcmRl
bmVkU0xMOjpjcmVhdGUocHRyKSwgMSk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIFNwaW5Mb2Nr
SG9sZGVyIGgoJnBhZ2VoZWFwX2xvY2spOwotICAgIEFTU0VSVChyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4ocHRyKSAlIGtQYWdlU2l6ZSA9PSAwKTsKLSAgICBBU1NFUlQoc3BhbiAhPSBOVUxM
ICYmIHNwYW4tPnN0YXJ0ID09IHApOwotI2lmbmRlZiBOT19UQ01BTExPQ19TQU1QTEVTCi0gICAg
aWYgKHNwYW4tPnNhbXBsZSkgewotICAgICAgRExMX1JlbW92ZShzcGFuKTsKLSAgICAgIHN0YWNr
dHJhY2VfYWxsb2NhdG9yLkRlbGV0ZShyZWludGVycHJldF9jYXN0PFN0YWNrVHJhY2UqPihzcGFu
LT5vYmplY3RzKSk7Ci0gICAgICBzcGFuLT5vYmplY3RzID0gTlVMTDsKLSAgICB9Ci0jZW5kaWYK
LSAgICBSRUxFQVNFX0FTU0VSVChyZWludGVycHJldF9jYXN0PHZvaWQqPihzcGFuLT5zdGFydCA8
PCBrUGFnZVNoaWZ0KSA9PSBwdHIpOwotICAgIFBPSVNPTl9ERUFMTE9DQVRJT04ocHRyLCBzcGFu
LT5sZW5ndGggPDwga1BhZ2VTaGlmdCk7Ci0gICAgcGFnZWhlYXAtPkRlbGV0ZShzcGFuKTsKLSAg
fQotfQotCi0vLyBGb3IgdXNlIGJ5IGV4cG9ydGVkIHJvdXRpbmVzIGJlbG93IHRoYXQgd2FudCBz
cGVjaWZpYyBhbGlnbm1lbnRzCi0vLwotLy8gTm90ZTogdGhpcyBjb2RlIGNhbiBiZSBzbG93LCBh
bmQgY2FuIHNpZ25pZmljYW50bHkgZnJhZ21lbnQgbWVtb3J5LgotLy8gVGhlIGV4cGVjdGF0aW9u
IGlzIHRoYXQgbWVtYWxpZ24vcG9zaXhfbWVtYWxpZ24vdmFsbG9jL3B2YWxsb2Mgd2lsbAotLy8g
bm90IGJlIGludm9rZWQgdmVyeSBvZnRlbi4gIFRoaXMgcmVxdWlyZW1lbnQgc2ltcGxpZmllcyBv
dXIKLS8vIGltcGxlbWVudGF0aW9uIGFuZCBhbGxvd3MgdXMgdG8gdHVuZSBmb3IgZXhwZWN0ZWQg
YWxsb2NhdGlvbgotLy8gcGF0dGVybnMuCi1zdGF0aWMgdm9pZCogZG9fbWVtYWxpZ24oc2l6ZV90
IGFsaWduLCBzaXplX3Qgc2l6ZSkgewotICBBU1NFUlQoKGFsaWduICYgKGFsaWduIC0gMSkpID09
IDApOwotICBBU1NFUlQoYWxpZ24gPiAwKTsKLSAgaWYgKHBhZ2VoZWFwID09IE5VTEwpIFRDTWFs
bG9jX1RocmVhZENhY2hlOjpJbml0TW9kdWxlKCk7Ci0gIEFTU0VSVChrUGFnZVNoaWZ0ICYmIGtO
dW1DbGFzc2VzICYmIGtQYWdlU2l6ZSk7Ci0KLSAgLy8gQWxsb2NhdGUgYXQgbGVhc3Qgb25lIGJ5
dGUgdG8gYXZvaWQgYm91bmRhcnkgY29uZGl0aW9ucyBiZWxvdwotICBpZiAoc2l6ZSA9PSAwKSBz
aXplID0gMTsKLQotICBpZiAoc2l6ZSA8PSBrTWF4U2l6ZSAmJiBhbGlnbiA8IGtQYWdlU2l6ZSkg
ewotICAgIC8vIFNlYXJjaCB0aHJvdWdoIGFjY2VwdGFibGUgc2l6ZSBjbGFzc2VzIGxvb2tpbmcg
Zm9yIG9uZSB3aXRoCi0gICAgLy8gZW5vdWdoIGFsaWdubWVudC4gIFRoaXMgZGVwZW5kcyBvbiB0
aGUgZmFjdCB0aGF0Ci0gICAgLy8gSW5pdFNpemVDbGFzc2VzKCkgY3VycmVudGx5IHByb2R1Y2Vz
IHNldmVyYWwgc2l6ZSBjbGFzc2VzIHRoYXQKLSAgICAvLyBhcmUgYWxpZ25lZCBhdCBwb3dlcnMg
b2YgdHdvLiAgV2Ugd2lsbCB3YXN0ZSB0aW1lIGFuZCBzcGFjZSBpZgotICAgIC8vIHdlIG1pc3Mg
aW4gdGhlIHNpemUgY2xhc3MgYXJyYXksIGJ1dCB0aGF0IGlzIGRlZW1lZCBhY2NlcHRhYmxlCi0g
ICAgLy8gc2luY2UgbWVtYWxpZ24oKSBzaG91bGQgYmUgdXNlZCByYXJlbHkuCi0gICAgc2l6ZV90
IGNsID0gU2l6ZUNsYXNzKHNpemUpOwotICAgIHdoaWxlIChjbCA8IGtOdW1DbGFzc2VzICYmICgo
Y2xhc3NfdG9fc2l6ZVtjbF0gJiAoYWxpZ24gLSAxKSkgIT0gMCkpIHsKLSAgICAgIGNsKys7Ci0g
ICAgfQotICAgIGlmIChjbCA8IGtOdW1DbGFzc2VzKSB7Ci0gICAgICBUQ01hbGxvY19UaHJlYWRD
YWNoZSogaGVhcCA9IFRDTWFsbG9jX1RocmVhZENhY2hlOjpHZXRDYWNoZSgpOwotICAgICAgcmV0
dXJuIENoZWNrZWRNYWxsb2NSZXN1bHQoaGVhcC0+QWxsb2NhdGUoY2xhc3NfdG9fc2l6ZVtjbF0p
KTsKLSAgICB9Ci0gIH0KLQotICAvLyBXZSB3aWxsIGFsbG9jYXRlIGRpcmVjdGx5IGZyb20gdGhl
IHBhZ2UgaGVhcAotICBTcGluTG9ja0hvbGRlciBoKCZwYWdlaGVhcF9sb2NrKTsKLQotICBpZiAo
YWxpZ24gPD0ga1BhZ2VTaXplKSB7Ci0gICAgLy8gQW55IHBhZ2UtbGV2ZWwgYWxsb2NhdGlvbiB3
aWxsIGJlIGZpbmUKLSAgICAvLyBUT0RPOiBXZSBjb3VsZCBwdXQgdGhlIHJlc3Qgb2YgdGhpcyBw
YWdlIGluIHRoZSBhcHByb3ByaWF0ZQotICAgIC8vIFRPRE86IGNhY2hlIGJ1dCBpdCBkb2VzIG5v
dCBzZWVtIHdvcnRoIGl0LgotICAgIFNwYW4qIHNwYW4gPSBwYWdlaGVhcC0+TmV3KHBhZ2VzKHNp
emUpKTsKLSAgICByZXR1cm4gc3BhbiA9PSBOVUxMID8gTlVMTCA6IFNwYW5Ub01hbGxvY1Jlc3Vs
dChzcGFuKTsKLSAgfQotCi0gIC8vIEFsbG9jYXRlIGV4dHJhIHBhZ2VzIGFuZCBjYXJ2ZSBvZmYg
YW4gYWxpZ25lZCBwb3J0aW9uCi0gIGNvbnN0IExlbmd0aCBhbGxvYyA9IHBhZ2VzKHNpemUgKyBh
bGlnbik7Ci0gIFNwYW4qIHNwYW4gPSBwYWdlaGVhcC0+TmV3KGFsbG9jKTsKLSAgaWYgKHNwYW4g
PT0gTlVMTCkgcmV0dXJuIE5VTEw7Ci0KLSAgLy8gU2tpcCBzdGFydGluZyBwb3J0aW9uIHNvIHRo
YXQgd2UgZW5kIHVwIGFsaWduZWQKLSAgTGVuZ3RoIHNraXAgPSAwOwotICB3aGlsZSAoKCgoc3Bh
bi0+c3RhcnQrc2tpcCkgPDwga1BhZ2VTaGlmdCkgJiAoYWxpZ24gLSAxKSkgIT0gMCkgewotICAg
IHNraXArKzsKLSAgfQotICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihza2lwIDwg
YWxsb2MpOwotICBpZiAoc2tpcCA+IDApIHsKLSAgICBTcGFuKiByZXN0ID0gcGFnZWhlYXAtPlNw
bGl0KHNwYW4sIHNraXApOwotICAgIHBhZ2VoZWFwLT5EZWxldGUoc3Bhbik7Ci0gICAgc3BhbiA9
IHJlc3Q7Ci0gIH0KLQotICAvLyBTa2lwIHRyYWlsaW5nIHBvcnRpb24gdGhhdCB3ZSBkbyBub3Qg
bmVlZCB0byByZXR1cm4KLSAgY29uc3QgTGVuZ3RoIG5lZWRlZCA9IHBhZ2VzKHNpemUpOwotICBB
U1NFUlQoc3Bhbi0+bGVuZ3RoID49IG5lZWRlZCk7Ci0gIGlmIChzcGFuLT5sZW5ndGggPiBuZWVk
ZWQpIHsKLSAgICBTcGFuKiB0cmFpbGVyID0gcGFnZWhlYXAtPlNwbGl0KHNwYW4sIG5lZWRlZCk7
Ci0gICAgcGFnZWhlYXAtPkRlbGV0ZSh0cmFpbGVyKTsKLSAgfQotICByZXR1cm4gU3BhblRvTWFs
bG9jUmVzdWx0KHNwYW4pOwotfQotCi0vLyBIZWxwZXJzIGZvciB1c2UgYnkgZXhwb3J0ZWQgcm91
dGluZXMgYmVsb3c6Ci0KLSNpZm5kZWYgV1RGX0NIQU5HRVMKLXN0YXRpYyBpbmxpbmUgdm9pZCBk
b19tYWxsb2Nfc3RhdHMoKSB7Ci0gIFByaW50U3RhdHMoMSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
aW50IGRvX21hbGxvcHQoaW50LCBpbnQpIHsKLSAgcmV0dXJuIDE7ICAgICAvLyBJbmRpY2F0ZXMg
ZXJyb3IKLX0KLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9TVFJVQ1RfTUFMTElORk8gIC8vIG1hbGxp
bmZvIGlzbid0IGRlZmluZWQgb24gZnJlZWJzZCwgZm9yIGluc3RhbmNlCi1zdGF0aWMgaW5saW5l
IHN0cnVjdCBtYWxsaW5mbyBkb19tYWxsaW5mbygpIHsKLSAgVENNYWxsb2NTdGF0cyBzdGF0czsK
LSAgRXh0cmFjdFN0YXRzKCZzdGF0cywgTlVMTCk7Ci0KLSAgLy8gSnVzdCBzb21lIG9mIHRoZSBm
aWVsZHMgYXJlIGZpbGxlZCBpbi4KLSAgc3RydWN0IG1hbGxpbmZvIGluZm87Ci0gIG1lbXNldCgm
aW5mbywgMCwgc2l6ZW9mKGluZm8pKTsKLQotICAvLyBVbmZvcnR1bmF0ZWx5LCB0aGUgc3RydWN0
IGNvbnRhaW5zICJpbnQiIGZpZWxkLCBzbyBzb21lIG9mIHRoZQotICAvLyBzaXplIHZhbHVlcyB3
aWxsIGJlIHRydW5jYXRlZC4KLSAgaW5mby5hcmVuYSAgICAgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0
YXRzLnN5c3RlbV9ieXRlcyk7Ci0gIGluZm8uZnNtYmxrcyAgID0gc3RhdGljX2Nhc3Q8aW50Pihz
dGF0cy50aHJlYWRfYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsg
c3RhdHMuY2VudHJhbF9ieXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KyBzdGF0cy50cmFuc2Zlcl9ieXRlcyk7Ci0gIGluZm8uZm9yZGJsa3MgID0gc3RhdGljX2Nhc3Q8
aW50PihzdGF0cy5wYWdlaGVhcF9ieXRlcyk7Ci0gIGluZm8udW9yZGJsa3MgID0gc3RhdGljX2Nh
c3Q8aW50PihzdGF0cy5zeXN0ZW1fYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC0gc3RhdHMudGhyZWFkX2J5dGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAtIHN0YXRzLmNlbnRyYWxfYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC0gc3RhdHMudHJhbnNmZXJfYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC0gc3RhdHMucGFnZWhlYXBfYnl0ZXMpOwotCi0gIHJldHVybiBpbmZvOwot
fQotI2VuZGlmCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gRXhwb3J0ZWQgcm91dGluZXMKLS8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi0vLyBDQVZFQVQ6IFRoZSBjb2RlIHN0cnVjdHVyZSBiZWxvdyBlbnN1cmVzIHRoYXQg
TWFsbG9jSG9vayBtZXRob2RzIGFyZSBhbHdheXMKLS8vICAgICAgICAgY2FsbGVkIGZyb20gdGhl
IHN0YWNrIGZyYW1lIG9mIHRoZSBpbnZva2VkIGFsbG9jYXRpb24gZnVuY3Rpb24uCi0vLyAgICAg
ICAgIGhlYXAtY2hlY2tlci5jYyBkZXBlbmRzIG9uIHRoaXMgdG8gc3RhcnQgYSBzdGFjayB0cmFj
ZSBmcm9tCi0vLyAgICAgICAgIHRoZSBjYWxsIHRvIHRoZSAoZGUpYWxsb2NhdGlvbiBmdW5jdGlv
bi4KLQotI2lmbmRlZiBXVEZfQ0hBTkdFUwotZXh0ZXJuICJDIiAKLSNlbHNlCi0jZGVmaW5lIGRv
X21hbGxvYyBkb19tYWxsb2M8Y3Jhc2hPbkZhaWx1cmU+Ci0KLXRlbXBsYXRlIDxib29sIGNyYXNo
T25GYWlsdXJlPgotQUxXQVlTX0lOTElORSB2b2lkKiBtYWxsb2Moc2l6ZV90KTsKLQotdm9pZCog
ZmFzdEFsaWduZWRNYWxsb2Moc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIAotewotICAg
IHJldHVybiBkb19tZW1hbGlnbihhbGlnbm1lbnQsIHNpemUpOwotfQotCi12b2lkIGZhc3RBbGln
bmVkRnJlZSh2b2lkKiBwKSAKLXsKLSAgICBkb19mcmVlKHApOwotfQotCi12b2lkKiBmYXN0TWFs
bG9jKHNpemVfdCBzaXplKQotewotICAgIHZvaWQqIHJlc3VsdCA9IG1hbGxvYzx0cnVlPihzaXpl
KTsKLSNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQotICAgIGRhdGFMb2dGKCJmYXN0TWFs
bG9jIGFsbG9jYXRpbmcgJWx1IGJ5dGVzIChmYXN0TWFsbG9jKTogJXAuXG4iLCBzaXplLCByZXN1
bHQpOwotI2VuZGlmCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotVHJ5TWFsbG9jUmV0dXJuVmFs
dWUgdHJ5RmFzdE1hbGxvYyhzaXplX3Qgc2l6ZSkKLXsKLSAgICBUcnlNYWxsb2NSZXR1cm5WYWx1
ZSByZXN1bHQgPSBtYWxsb2M8ZmFsc2U+KHNpemUpOwotI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xP
R0dJTkcpCi0gICAgdm9pZCogcG9pbnRlcjsKLSAgICAodm9pZClyZXN1bHQuZ2V0VmFsdWUocG9p
bnRlcik7Ci0gICAgZGF0YUxvZ0YoImZhc3RNYWxsb2MgYWxsb2NhdGluZyAlbHUgYnl0ZXMgKHRy
eUZhc3RNYWxsb2MpOiAlcC5cbiIsIHNpemUsIHBvaW50ZXIpOwotI2VuZGlmCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotdGVtcGxhdGUgPGJvb2wgY3Jhc2hPbkZhaWx1cmU+Ci1BTFdBWVNfSU5M
SU5FCi0jZW5kaWYKLXZvaWQqIG1hbGxvYyhzaXplX3Qgc2l6ZSkgewotICB2b2lkKiByZXN1bHQg
PSBkb19tYWxsb2Moc2l6ZSk7Ci0gIE1hbGxvY0hvb2s6Okludm9rZU5ld0hvb2socmVzdWx0LCBz
aXplKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotI2lmbmRlZiBXVEZfQ0hBTkdFUwotZXh0ZXJu
ICJDIiAKLSNlbmRpZgotdm9pZCBmcmVlKHZvaWQqIHB0cikgewotI2lmIEVOQUJMRShBTExPQ0FU
SU9OX0xPR0dJTkcpCi0gICAgZGF0YUxvZ0YoImZhc3RGcmVlIGZyZWVpbmcgJXAuXG4iLCBwdHIp
OwotI2VuZGlmCi0gICAgCi0gIE1hbGxvY0hvb2s6Okludm9rZURlbGV0ZUhvb2socHRyKTsKLSAg
ZG9fZnJlZShwdHIpOwotfQotCi0jaWZuZGVmIFdURl9DSEFOR0VTCi1leHRlcm4gIkMiIAotI2Vs
c2UKLXRlbXBsYXRlIDxib29sIGNyYXNoT25GYWlsdXJlPgotQUxXQVlTX0lOTElORSB2b2lkKiBj
YWxsb2Moc2l6ZV90LCBzaXplX3QpOwotCi12b2lkKiBmYXN0Q2FsbG9jKHNpemVfdCBuLCBzaXpl
X3QgZWxlbV9zaXplKQotewotICAgIHZvaWQqIHJlc3VsdCA9IGNhbGxvYzx0cnVlPihuLCBlbGVt
X3NpemUpOwotI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCi0gICAgZGF0YUxvZ0YoImZh
c3RNYWxsb2MgY29udGlndW91c2x5IGFsbG9jYXRpbmcgJWx1ICogJWx1IGJ5dGVzIChmYXN0Q2Fs
bG9jKTogJXAuXG4iLCBuLCBlbGVtX3NpemUsIHJlc3VsdCk7Ci0jZW5kaWYKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1UcnlNYWxsb2NSZXR1cm5WYWx1ZSB0cnlGYXN0Q2FsbG9jKHNpemVfdCBu
LCBzaXplX3QgZWxlbV9zaXplKQotewotICAgIHZvaWQqIHJlc3VsdCA9IGNhbGxvYzxmYWxzZT4o
biwgZWxlbV9zaXplKTsKLSNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQotICAgIGRhdGFM
b2dGKCJmYXN0TWFsbG9jIGNvbnRpZ3VvdXNseSBhbGxvY2F0aW5nICVsdSAqICVsdSBieXRlcyAo
dHJ5RmFzdENhbGxvYyk6ICVwLlxuIiwgbiwgZWxlbV9zaXplLCByZXN1bHQpOwotI2VuZGlmCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdGVtcGxhdGUgPGJvb2wgY3Jhc2hPbkZhaWx1cmU+Ci1B
TFdBWVNfSU5MSU5FCi0jZW5kaWYKLXZvaWQqIGNhbGxvYyhzaXplX3Qgbiwgc2l6ZV90IGVsZW1f
c2l6ZSkgewotICBzaXplX3QgdG90YWxCeXRlcyA9IG4gKiBlbGVtX3NpemU7Ci0gICAgCi0gIC8v
IFByb3RlY3QgYWdhaW5zdCBvdmVyZmxvdwotICBpZiAobiA+IDEgJiYgZWxlbV9zaXplICYmICh0
b3RhbEJ5dGVzIC8gZWxlbV9zaXplKSAhPSBuKQotICAgIHJldHVybiAwOwotCi0gICAgdm9pZCog
cmVzdWx0ID0gZG9fbWFsbG9jKHRvdGFsQnl0ZXMpOwotICAgIGlmIChyZXN1bHQgIT0gTlVMTCkg
ewotICAgICAgICBtZW1zZXQocmVzdWx0LCAwLCB0b3RhbEJ5dGVzKTsKLSAgICB9Ci0KLSAgTWFs
bG9jSG9vazo6SW52b2tlTmV3SG9vayhyZXN1bHQsIHRvdGFsQnl0ZXMpOwotICByZXR1cm4gcmVz
dWx0OwotfQotCi0vLyBTaW5jZSBjZnJlZSBpc24ndCB1c2VkIGFueXdoZXJlLCB3ZSBkb24ndCBj
b21waWxlIGl0IGluLgotI2lmbmRlZiBXVEZfQ0hBTkdFUwotI2lmbmRlZiBXVEZfQ0hBTkdFUwot
ZXh0ZXJuICJDIiAKLSNlbmRpZgotdm9pZCBjZnJlZSh2b2lkKiBwdHIpIHsKLSNpZm5kZWYgV1RG
X0NIQU5HRVMKLSAgICBNYWxsb2NIb29rOjpJbnZva2VEZWxldGVIb29rKHB0cik7Ci0jZW5kaWYK
LSAgZG9fZnJlZShwdHIpOwotfQotI2VuZGlmCi0KLSNpZm5kZWYgV1RGX0NIQU5HRVMKLWV4dGVy
biAiQyIgCi0jZWxzZQotdGVtcGxhdGUgPGJvb2wgY3Jhc2hPbkZhaWx1cmU+Ci1BTFdBWVNfSU5M
SU5FIHZvaWQqIHJlYWxsb2Modm9pZCosIHNpemVfdCk7Ci0KLXZvaWQqIGZhc3RSZWFsbG9jKHZv
aWQqIG9sZF9wdHIsIHNpemVfdCBuZXdfc2l6ZSkKLXsKLSAgICB2b2lkKiByZXN1bHQgPSByZWFs
bG9jPHRydWU+KG9sZF9wdHIsIG5ld19zaXplKTsKLSNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dH
SU5HKQotICAgIGRhdGFMb2dGKCJmYXN0TWFsbG9jIHJlYWxsb2NhdGluZyAlbHUgYnl0ZXMgKGZh
c3RSZWFsbG9jKTogJXAgLT4gJXAuXG4iLCBuZXdfc2l6ZSwgb2xkX3B0ciwgcmVzdWx0KTsKLSNl
bmRpZgotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVRyeU1hbGxvY1JldHVyblZhbHVlIHRyeUZh
c3RSZWFsbG9jKHZvaWQqIG9sZF9wdHIsIHNpemVfdCBuZXdfc2l6ZSkKLXsKLSAgICB2b2lkKiBy
ZXN1bHQgPSByZWFsbG9jPGZhbHNlPihvbGRfcHRyLCBuZXdfc2l6ZSk7Ci0jaWYgRU5BQkxFKEFM
TE9DQVRJT05fTE9HR0lORykKLSAgICBkYXRhTG9nRigiZmFzdE1hbGxvYyByZWFsbG9jYXRpbmcg
JWx1IGJ5dGVzICh0cnlGYXN0UmVhbGxvYyk6ICVwIC0+ICVwLlxuIiwgbmV3X3NpemUsIG9sZF9w
dHIsIHJlc3VsdCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0ZSA8
Ym9vbCBjcmFzaE9uRmFpbHVyZT4KLUFMV0FZU19JTkxJTkUKLSNlbmRpZgotdm9pZCogcmVhbGxv
Yyh2b2lkKiBvbGRfcHRyLCBzaXplX3QgbmV3X3NpemUpIHsKLSAgaWYgKG9sZF9wdHIgPT0gTlVM
TCkgewotICAgIHZvaWQqIHJlc3VsdCA9IGRvX21hbGxvYyhuZXdfc2l6ZSk7Ci0gICAgTWFsbG9j
SG9vazo6SW52b2tlTmV3SG9vayhyZXN1bHQsIG5ld19zaXplKTsKLSAgICByZXR1cm4gcmVzdWx0
OwotICB9Ci0gIGlmIChuZXdfc2l6ZSA9PSAwKSB7Ci0gICAgTWFsbG9jSG9vazo6SW52b2tlRGVs
ZXRlSG9vayhvbGRfcHRyKTsKLSAgICBmcmVlKG9sZF9wdHIpOwotICAgIHJldHVybiBOVUxMOwot
ICB9Ci0KLSAgQVNTRVJUKHBhZ2VoZWFwICE9IE5VTEwpOyAgLy8gU2hvdWxkIG5vdCBjYWxsIHJl
YWxsb2MoKSBiZWZvcmUgbWFsbG9jKCkKLSAgQVNTRVJUKGtQYWdlU2hpZnQgJiYga051bUNsYXNz
ZXMgJiYga1BhZ2VTaXplKTsKLQotICAvLyBHZXQgdGhlIHNpemUgb2YgdGhlIG9sZCBlbnRyeQot
ICBjb25zdCBQYWdlSUQgcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihvbGRfcHRyKSA+
PiBrUGFnZVNoaWZ0OwotICBzaXplX3QgY2wgPSBwYWdlaGVhcC0+R2V0U2l6ZUNsYXNzSWZDYWNo
ZWQocCk7Ci0gIFNwYW4gKnNwYW4gPSBOVUxMOwotICBzaXplX3Qgb2xkX3NpemU7Ci0gIGlmIChj
bCA9PSAwKSB7Ci0gICAgc3BhbiA9IHBhZ2VoZWFwLT5HZXREZXNjcmlwdG9yKHApOwotICAgIGNs
ID0gc3Bhbi0+c2l6ZWNsYXNzOwotICAgIHBhZ2VoZWFwLT5DYWNoZVNpemVDbGFzcyhwLCBjbCk7
Ci0gIH0KLSAgaWYgKGNsICE9IDApIHsKLSAgICBvbGRfc2l6ZSA9IEJ5dGVTaXplRm9yQ2xhc3Mo
Y2wpOwotICB9IGVsc2UgewotICAgIEFTU0VSVChzcGFuICE9IE5VTEwpOwotICAgIG9sZF9zaXpl
ID0gc3Bhbi0+bGVuZ3RoIDw8IGtQYWdlU2hpZnQ7Ci0gIH0KLQotICAvLyBSZWFsbG9jYXRlIGlm
IHRoZSBuZXcgc2l6ZSBpcyBsYXJnZXIgdGhhbiB0aGUgb2xkIHNpemUsCi0gIC8vIG9yIGlmIHRo
ZSBuZXcgc2l6ZSBpcyBzaWduaWZpY2FudGx5IHNtYWxsZXIgdGhhbiB0aGUgb2xkIHNpemUuCi0g
IGlmICgobmV3X3NpemUgPiBvbGRfc2l6ZSkgfHwgKEFsbG9jYXRpb25TaXplKG5ld19zaXplKSA8
IG9sZF9zaXplKSkgewotICAgIC8vIE5lZWQgdG8gcmVhbGxvY2F0ZQotICAgIHZvaWQqIG5ld19w
dHIgPSBkb19tYWxsb2MobmV3X3NpemUpOwotICAgIGlmIChuZXdfcHRyID09IE5VTEwpIHsKLSAg
ICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKG5l
d19wdHIsIG5ld19zaXplKTsKLSAgICBtZW1jcHkobmV3X3B0ciwgb2xkX3B0ciwgKChvbGRfc2l6
ZSA8IG5ld19zaXplKSA/IG9sZF9zaXplIDogbmV3X3NpemUpKTsKLSAgICBNYWxsb2NIb29rOjpJ
bnZva2VEZWxldGVIb29rKG9sZF9wdHIpOwotICAgIC8vIFdlIGNvdWxkIHVzZSBhIHZhcmlhbnQg
b2YgZG9fZnJlZSgpIHRoYXQgbGV2ZXJhZ2VzIHRoZSBmYWN0Ci0gICAgLy8gdGhhdCB3ZSBhbHJl
YWR5IGtub3cgdGhlIHNpemVjbGFzcyBvZiBvbGRfcHRyLiAgVGhlIGJlbmVmaXQKLSAgICAvLyB3
b3VsZCBiZSBzbWFsbCwgc28gZG9uJ3QgYm90aGVyLgotICAgIGRvX2ZyZWUob2xkX3B0cik7Ci0g
ICAgcmV0dXJuIG5ld19wdHI7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0dXJuIG9sZF9wdHI7Ci0gIH0K
LX0KLQotI2lmZGVmIFdURl9DSEFOR0VTCi0jdW5kZWYgZG9fbWFsbG9jCi0jZWxzZQotCi1zdGF0
aWMgU3BpbkxvY2sgc2V0X25ld19oYW5kbGVyX2xvY2sgPSBTUElOTE9DS19JTklUSUFMSVpFUjsK
LQotc3RhdGljIGlubGluZSB2b2lkKiBjcHBfYWxsb2Moc2l6ZV90IHNpemUsIGJvb2wgbm90aHJv
dykgewotICBmb3IgKDs7KSB7Ci0gICAgdm9pZCogcCA9IGRvX21hbGxvYyhzaXplKTsKLSNpZmRl
ZiBQUkVBTlNJTkVXCi0gICAgcmV0dXJuIHA7Ci0jZWxzZQotICAgIGlmIChwID09IE5VTEwpIHsg
IC8vIGFsbG9jYXRpb24gZmFpbGVkCi0gICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgbmV3IGhhbmRs
ZXIuICBOQjogdGhpcyBmdW5jdGlvbiBpcyBub3QKLSAgICAgIC8vIHRocmVhZC1zYWZlLiAgV2Ug
bWFrZSBhIGZlZWJsZSBzdGFiIGF0IG1ha2luZyBpdCBzbyBoZXJlLCBidXQKLSAgICAgIC8vIHRo
aXMgbG9jayBvbmx5IHByb3RlY3RzIGFnYWluc3QgdGNtYWxsb2MgaW50ZXJmZXJpbmcgd2l0aAot
ICAgICAgLy8gaXRzZWxmLCBub3Qgd2l0aCBvdGhlciBsaWJyYXJpZXMgY2FsbGluZyBzZXRfbmV3
X2hhbmRsZXIuCi0gICAgICBzdGQ6Om5ld19oYW5kbGVyIG5oOwotICAgICAgewotICAgICAgICBT
cGluTG9ja0hvbGRlciBoKCZzZXRfbmV3X2hhbmRsZXJfbG9jayk7Ci0gICAgICAgIG5oID0gc3Rk
OjpzZXRfbmV3X2hhbmRsZXIoMCk7Ci0gICAgICAgICh2b2lkKSBzdGQ6OnNldF9uZXdfaGFuZGxl
cihuaCk7Ci0gICAgICB9Ci0gICAgICAvLyBJZiBubyBuZXdfaGFuZGxlciBpcyBlc3RhYmxpc2hl
ZCwgdGhlIGFsbG9jYXRpb24gZmFpbGVkLgotICAgICAgaWYgKCFuaCkgewotICAgICAgICBpZiAo
bm90aHJvdykgcmV0dXJuIDA7Ci0gICAgICAgIHRocm93IHN0ZDo6YmFkX2FsbG9jKCk7Ci0gICAg
ICB9Ci0gICAgICAvLyBPdGhlcndpc2UsIHRyeSB0aGUgbmV3X2hhbmRsZXIuICBJZiBpdCByZXR1
cm5zLCByZXRyeSB0aGUKLSAgICAgIC8vIGFsbG9jYXRpb24uICBJZiBpdCB0aHJvd3Mgc3RkOjpi
YWRfYWxsb2MsIGZhaWwgdGhlIGFsbG9jYXRpb24uCi0gICAgICAvLyBpZiBpdCB0aHJvd3Mgc29t
ZXRoaW5nIGVsc2UsIGRvbid0IGludGVyZmVyZS4KLSAgICAgIHRyeSB7Ci0gICAgICAgICgqbmgp
KCk7Ci0gICAgICB9IGNhdGNoIChjb25zdCBzdGQ6OmJhZF9hbGxvYyYpIHsKLSAgICAgICAgaWYg
KCFub3Rocm93KSB0aHJvdzsKLSAgICAgICAgcmV0dXJuIHA7Ci0gICAgICB9Ci0gICAgfSBlbHNl
IHsgIC8vIGFsbG9jYXRpb24gc3VjY2VzcwotICAgICAgcmV0dXJuIHA7Ci0gICAgfQotI2VuZGlm
Ci0gIH0KLX0KLQotZXh0ZXJuICJDIiB2b2lkKiBtZW1hbGlnbihzaXplX3QgYWxpZ24sIHNpemVf
dCBzaXplKSBfX1RIUk9XIHsKLSAgdm9pZCogcmVzdWx0ID0gZG9fbWVtYWxpZ24oYWxpZ24sIHNp
emUpOwotICBNYWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3VsdCwgc2l6ZSk7Ci0gIHJldHVy
biByZXN1bHQ7Ci19Ci0KLWV4dGVybiAiQyIgaW50IHBvc2l4X21lbWFsaWduKHZvaWQqKiByZXN1
bHRfcHRyLCBzaXplX3QgYWxpZ24sIHNpemVfdCBzaXplKQotICAgIF9fVEhST1cgewotICBpZiAo
KChhbGlnbiAlIHNpemVvZih2b2lkKikpICE9IDApIHx8Ci0gICAgICAoKGFsaWduICYgKGFsaWdu
IC0gMSkpICE9IDApIHx8Ci0gICAgICAoYWxpZ24gPT0gMCkpIHsKLSAgICByZXR1cm4gRUlOVkFM
OwotICB9Ci0KLSAgdm9pZCogcmVzdWx0ID0gZG9fbWVtYWxpZ24oYWxpZ24sIHNpemUpOwotICBN
YWxsb2NIb29rOjpJbnZva2VOZXdIb29rKHJlc3VsdCwgc2l6ZSk7Ci0gIGlmIChyZXN1bHQgPT0g
TlVMTCkgewotICAgIHJldHVybiBFTk9NRU07Ci0gIH0gZWxzZSB7Ci0gICAgKnJlc3VsdF9wdHIg
PSByZXN1bHQ7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLX0KLQotc3RhdGljIHNpemVfdCBwYWdlc2l6
ZSA9IDA7Ci0KLWV4dGVybiAiQyIgdm9pZCogdmFsbG9jKHNpemVfdCBzaXplKSBfX1RIUk9XIHsK
LSAgLy8gQWxsb2NhdGUgcGFnZS1hbGlnbmVkIG9iamVjdCBvZiBsZW5ndGggPj0gc2l6ZSBieXRl
cwotICBpZiAocGFnZXNpemUgPT0gMCkgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOwotICB2b2lk
KiByZXN1bHQgPSBkb19tZW1hbGlnbihwYWdlc2l6ZSwgc2l6ZSk7Ci0gIE1hbGxvY0hvb2s6Oklu
dm9rZU5ld0hvb2socmVzdWx0LCBzaXplKTsKLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZXh0ZXJu
ICJDIiB2b2lkKiBwdmFsbG9jKHNpemVfdCBzaXplKSBfX1RIUk9XIHsKLSAgLy8gUm91bmQgdXAg
c2l6ZSB0byBhIG11bHRpcGxlIG9mIHBhZ2VzaXplCi0gIGlmIChwYWdlc2l6ZSA9PSAwKSBwYWdl
c2l6ZSA9IGdldHBhZ2VzaXplKCk7Ci0gIHNpemUgPSAoc2l6ZSArIHBhZ2VzaXplIC0gMSkgJiB+
KHBhZ2VzaXplIC0gMSk7Ci0gIHZvaWQqIHJlc3VsdCA9IGRvX21lbWFsaWduKHBhZ2VzaXplLCBz
aXplKTsKLSAgTWFsbG9jSG9vazo6SW52b2tlTmV3SG9vayhyZXN1bHQsIHNpemUpOwotICByZXR1
cm4gcmVzdWx0OwotfQotCi1leHRlcm4gIkMiIHZvaWQgbWFsbG9jX3N0YXRzKHZvaWQpIHsKLSAg
ZG9fbWFsbG9jX3N0YXRzKCk7Ci19Ci0KLWV4dGVybiAiQyIgaW50IG1hbGxvcHQoaW50IGNtZCwg
aW50IHZhbHVlKSB7Ci0gIHJldHVybiBkb19tYWxsb3B0KGNtZCwgdmFsdWUpOwotfQotCi0jaWZk
ZWYgSEFWRV9TVFJVQ1RfTUFMTElORk8KLWV4dGVybiAiQyIgc3RydWN0IG1hbGxpbmZvIG1hbGxp
bmZvKHZvaWQpIHsKLSAgcmV0dXJuIGRvX21hbGxpbmZvKCk7Ci19Ci0jZW5kaWYKLQotLy8tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0vLyBTb21lIGxpYnJhcnkgcm91dGluZXMgb24gUmVkSGF0IDkgYWxsb2NhdGUgbWVt
b3J5IHVzaW5nIG1hbGxvYygpCi0vLyBhbmQgZnJlZSBpdCB1c2luZyBfX2xpYmNfZnJlZSgpIChv
ciB2aWNlLXZlcnNhKS4gIFNpbmNlIHdlIHByb3ZpZGUKLS8vIG91ciBvd24gaW1wbGVtZW50YXRp
b25zIG9mIG1hbGxvYy9mcmVlLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0Ci0vLyB0aGUgX19s
aWJjX1hYWCB2YXJpYW50cyAoZGVmaW5lZCBhcyBwYXJ0IG9mIGdsaWJjKSBhbHNvIHBvaW50IHRv
Ci0vLyB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbnMuCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmIGRlZmlu
ZWQoX19HTElCQ19fKQotZXh0ZXJuICJDIiB7Ci0jaWYgQ09NUElMRVIoR0NDKSAmJiAhZGVmaW5l
ZChfX01BQ0hfXykgJiYgZGVmaW5lZChIQVZFX19fQVRUUklCVVRFX18pCi0gIC8vIFBvdGVudGlh
bGx5IGZhc3RlciB2YXJpYW50cyB0aGF0IHVzZSB0aGUgZ2NjIGFsaWFzIGV4dGVuc2lvbi4KLSAg
Ly8gTWFjaC1PIChEYXJ3aW4pIGRvZXMgbm90IHN1cHBvcnQgd2VhayBhbGlhc2VzLCBoZW5jZSB0
aGUgX19NQUNIX18gY2hlY2suCi0jIGRlZmluZSBBTElBUyh4KSBfX2F0dHJpYnV0ZV9fICgod2Vh
aywgYWxpYXMgKHgpKSkKLSAgdm9pZCogX19saWJjX21hbGxvYyhzaXplX3Qgc2l6ZSkgICAgICAg
ICAgICAgIEFMSUFTKCJtYWxsb2MiKTsKLSAgdm9pZCAgX19saWJjX2ZyZWUodm9pZCogcHRyKSAg
ICAgICAgICAgICAgICAgIEFMSUFTKCJmcmVlIik7Ci0gIHZvaWQqIF9fbGliY19yZWFsbG9jKHZv
aWQqIHB0ciwgc2l6ZV90IHNpemUpICBBTElBUygicmVhbGxvYyIpOwotICB2b2lkKiBfX2xpYmNf
Y2FsbG9jKHNpemVfdCBuLCBzaXplX3Qgc2l6ZSkgICAgQUxJQVMoImNhbGxvYyIpOwotICB2b2lk
ICBfX2xpYmNfY2ZyZWUodm9pZCogcHRyKSAgICAgICAgICAgICAgICAgQUxJQVMoImNmcmVlIik7
Ci0gIHZvaWQqIF9fbGliY19tZW1hbGlnbihzaXplX3QgYWxpZ24sIHNpemVfdCBzKSBBTElBUygi
bWVtYWxpZ24iKTsKLSAgdm9pZCogX19saWJjX3ZhbGxvYyhzaXplX3Qgc2l6ZSkgICAgICAgICAg
ICAgIEFMSUFTKCJ2YWxsb2MiKTsKLSAgdm9pZCogX19saWJjX3B2YWxsb2Moc2l6ZV90IHNpemUp
ICAgICAgICAgICAgIEFMSUFTKCJwdmFsbG9jIik7Ci0gIGludCBfX3Bvc2l4X21lbWFsaWduKHZv
aWQqKiByLCBzaXplX3QgYSwgc2l6ZV90IHMpIEFMSUFTKCJwb3NpeF9tZW1hbGlnbiIpOwotIyB1
bmRlZiBBTElBUwotIyBlbHNlICAgLyogbm90IF9fR05VQ19fICovCi0gIC8vIFBvcnRhYmxlIHdy
YXBwZXJzCi0gIHZvaWQqIF9fbGliY19tYWxsb2Moc2l6ZV90IHNpemUpICAgICAgICAgICAgICB7
IHJldHVybiBtYWxsb2Moc2l6ZSk7ICAgICAgIH0KLSAgdm9pZCAgX19saWJjX2ZyZWUodm9pZCog
cHRyKSAgICAgICAgICAgICAgICAgIHsgZnJlZShwdHIpOyAgICAgICAgICAgICAgICAgfQotICB2
b2lkKiBfX2xpYmNfcmVhbGxvYyh2b2lkKiBwdHIsIHNpemVfdCBzaXplKSAgeyByZXR1cm4gcmVh
bGxvYyhwdHIsIHNpemUpOyB9Ci0gIHZvaWQqIF9fbGliY19jYWxsb2Moc2l6ZV90IG4sIHNpemVf
dCBzaXplKSAgICB7IHJldHVybiBjYWxsb2Mobiwgc2l6ZSk7ICAgIH0KLSAgdm9pZCAgX19saWJj
X2NmcmVlKHZvaWQqIHB0cikgICAgICAgICAgICAgICAgIHsgY2ZyZWUocHRyKTsgICAgICAgICAg
ICAgICAgfQotICB2b2lkKiBfX2xpYmNfbWVtYWxpZ24oc2l6ZV90IGFsaWduLCBzaXplX3Qgcykg
eyByZXR1cm4gbWVtYWxpZ24oYWxpZ24sIHMpOyB9Ci0gIHZvaWQqIF9fbGliY192YWxsb2Moc2l6
ZV90IHNpemUpICAgICAgICAgICAgICB7IHJldHVybiB2YWxsb2Moc2l6ZSk7ICAgICAgIH0KLSAg
dm9pZCogX19saWJjX3B2YWxsb2Moc2l6ZV90IHNpemUpICAgICAgICAgICAgIHsgcmV0dXJuIHB2
YWxsb2Moc2l6ZSk7ICAgICAgfQotICBpbnQgX19wb3NpeF9tZW1hbGlnbih2b2lkKiogciwgc2l6
ZV90IGEsIHNpemVfdCBzKSB7Ci0gICAgcmV0dXJuIHBvc2l4X21lbWFsaWduKHIsIGEsIHMpOwot
ICB9Ci0jIGVuZGlmICAvKiBfX0dOVUNfXyAqLwotfQotI2VuZGlmICAgLyogX19HTElCQ19fICov
Ci0KLS8vIE92ZXJyaWRlIF9fbGliY19tZW1hbGlnbiBpbiBsaWJjIG9uIGxpbnV4IGJveGVzIHNw
ZWNpYWxseS4KLS8vIFRoZXkgaGF2ZSBhIGJ1ZyBpbiBsaWJjIHRoYXQgY2F1c2VzIHRoZW0gdG8g
KHZlcnkgcmFyZWx5KSBhbGxvY2F0ZQotLy8gd2l0aCBfX2xpYmNfbWVtYWxpZ24oKSB5ZXQgZGVh
bGxvY2F0ZSB3aXRoIGZyZWUoKSBhbmQgdGhlCi0vLyBkZWZpbml0aW9ucyBhYm92ZSBkb24ndCBj
YXRjaCBpdC4KLS8vIFRoaXMgZnVuY3Rpb24gaXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBydWxlIG9m
IGNhbGxpbmcgTWFsbG9jSG9vayBtZXRob2QKLS8vIGZyb20gdGhlIHN0YWNrIGZyYW1lIG9mIHRo
ZSBhbGxvY2F0aW9uIGZ1bmN0aW9uOwotLy8gaGVhcC1jaGVja2VyIGhhbmRsZXMgdGhpcyBzcGVj
aWFsIGNhc2UgZXhwbGljaXRseS4KLXN0YXRpYyB2b2lkICpNZW1hbGlnbk92ZXJyaWRlKHNpemVf
dCBhbGlnbiwgc2l6ZV90IHNpemUsIGNvbnN0IHZvaWQgKmNhbGxlcikKLSAgICBfX1RIUk9XIHsK
LSAgdm9pZCogcmVzdWx0ID0gZG9fbWVtYWxpZ24oYWxpZ24sIHNpemUpOwotICBNYWxsb2NIb29r
OjpJbnZva2VOZXdIb29rKHJlc3VsdCwgc2l6ZSk7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci12b2lk
ICooKl9fbWVtYWxpZ25faG9vaykoc2l6ZV90LCBzaXplX3QsIGNvbnN0IHZvaWQgKikgPSBNZW1h
bGlnbk92ZXJyaWRlOwotCi0jZW5kaWYKLQotI2lmZGVmIFdURl9DSEFOR0VTCi12b2lkIHJlbGVh
c2VGYXN0TWFsbG9jRnJlZU1lbW9yeUZvclRoaXNUaHJlYWQoKQotewotICAgIGlmIChUQ01hbGxv
Y19UaHJlYWRDYWNoZSogdGhyZWFkQ2FjaGUgPSBUQ01hbGxvY19UaHJlYWRDYWNoZTo6R2V0Q2Fj
aGVJZlByZXNlbnQoKSkKLSAgICAgICAgdGhyZWFkQ2FjaGUtPkNsZWFudXAoKTsKLX0KLQotdm9p
ZCByZWxlYXNlRmFzdE1hbGxvY0ZyZWVNZW1vcnkoKQotewotICAgIHJlbGVhc2VGYXN0TWFsbG9j
RnJlZU1lbW9yeUZvclRoaXNUaHJlYWQoKTsKLQotICAgIFNwaW5Mb2NrSG9sZGVyIGgoJnBhZ2Vo
ZWFwX2xvY2spOwotICAgIHBhZ2VoZWFwLT5SZWxlYXNlRnJlZVBhZ2VzKCk7Ci19Ci0KLUZhc3RN
YWxsb2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWNzKCkKLXsKLSAgICBBU1NFUlQoa1Bh
Z2VTaGlmdCAmJiBrTnVtQ2xhc3NlcyAmJiBrUGFnZVNpemUpOwotICAgIEZhc3RNYWxsb2NTdGF0
aXN0aWNzIHN0YXRpc3RpY3M7Ci0KLSAgICBTcGluTG9ja0hvbGRlciBsb2NrSG9sZGVyKCZwYWdl
aGVhcF9sb2NrKTsKLSAgICBzdGF0aXN0aWNzLnJlc2VydmVkVk1CeXRlcyA9IHN0YXRpY19jYXN0
PHNpemVfdD4ocGFnZWhlYXAtPlN5c3RlbUJ5dGVzKCkpOwotICAgIHN0YXRpc3RpY3MuY29tbWl0
dGVkVk1CeXRlcyA9IHN0YXRpc3RpY3MucmVzZXJ2ZWRWTUJ5dGVzIC0gcGFnZWhlYXAtPlJldHVy
bmVkQnl0ZXMoKTsKLQotICAgIHN0YXRpc3RpY3MuZnJlZUxpc3RCeXRlcyA9IDA7Ci0gICAgZm9y
ICh1bnNpZ25lZCBjbCA9IDA7IGNsIDwga051bUNsYXNzZXM7ICsrY2wpIHsKLSAgICAgICAgY29u
c3QgaW50IGxlbmd0aCA9IGNlbnRyYWxfY2FjaGVbY2xdLmxlbmd0aCgpOwotICAgICAgICBjb25z
dCBpbnQgdGNfbGVuZ3RoID0gY2VudHJhbF9jYWNoZVtjbF0udGNfbGVuZ3RoKCk7Ci0KLSAgICAg
ICAgc3RhdGlzdGljcy5mcmVlTGlzdEJ5dGVzICs9IEJ5dGVTaXplRm9yQ2xhc3MoY2wpICogKGxl
bmd0aCArIHRjX2xlbmd0aCk7Ci0gICAgfQotICAgIGZvciAoVENNYWxsb2NfVGhyZWFkQ2FjaGUq
IHRocmVhZENhY2hlID0gdGhyZWFkX2hlYXBzOyB0aHJlYWRDYWNoZSA7IHRocmVhZENhY2hlID0g
dGhyZWFkQ2FjaGUtPm5leHRfKQotICAgICAgICBzdGF0aXN0aWNzLmZyZWVMaXN0Qnl0ZXMgKz0g
dGhyZWFkQ2FjaGUtPlNpemUoKTsKLQotICAgIHJldHVybiBzdGF0aXN0aWNzOwotfQotCi1zaXpl
X3QgZmFzdE1hbGxvY1NpemUoY29uc3Qgdm9pZCogcHRyKQotewotICAgIGlmIChwYWdlaGVhcCA9
PSBOVUxMKSBUQ01hbGxvY19UaHJlYWRDYWNoZTo6SW5pdE1vZHVsZSgpOwotICAgIEFTU0VSVChr
UGFnZVNoaWZ0ICYmIGtOdW1DbGFzc2VzICYmIGtQYWdlU2l6ZSk7Ci0KLSAgICBjb25zdCBQYWdl
SUQgcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwdHIpID4+IGtQYWdlU2hpZnQ7Ci0g
ICAgU3Bhbiogc3BhbiA9IHBhZ2VoZWFwLT5HZXREZXNjcmlwdG9yRW5zdXJlU2FmZShwKTsKLQot
ICAgIGlmICghc3BhbiB8fCBzcGFuLT5mcmVlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGZv
ciAoSGFyZGVuZWRTTEwgZnJlZSA9IHNwYW4tPm9iamVjdHM7IGZyZWU7IGZyZWUgPSBTTExfTmV4
dChmcmVlLCBIQVJERU5JTkdfRU5UUk9QWSkpIHsKLSAgICAgICAgaWYgKHB0ciA9PSBmcmVlLnZh
bHVlKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAoc2l6ZV90IGNs
ID0gc3Bhbi0+c2l6ZWNsYXNzKQotICAgICAgICByZXR1cm4gQnl0ZVNpemVGb3JDbGFzcyhjbCk7
Ci0KLSAgICByZXR1cm4gc3Bhbi0+bGVuZ3RoIDw8IGtQYWdlU2hpZnQ7Ci19Ci0KLSNpZiBPUyhE
QVJXSU4pCi1jbGFzcyBSZW1vdGVNZW1vcnlSZWFkZXIgewotICAgIHRhc2tfdCBtX3Rhc2s7Ci0g
ICAgbWVtb3J5X3JlYWRlcl90KiBtX3JlYWRlcjsKLQotcHVibGljOgotICAgIFJlbW90ZU1lbW9y
eVJlYWRlcih0YXNrX3QgdGFzaywgbWVtb3J5X3JlYWRlcl90KiByZWFkZXIpCi0gICAgICAgIDog
bV90YXNrKHRhc2spCi0gICAgICAgICwgbV9yZWFkZXIocmVhZGVyKQotICAgIHsgfQotCi0gICAg
dm9pZCogb3BlcmF0b3IoKSh2bV9hZGRyZXNzX3QgYWRkcmVzcywgc2l6ZV90IHNpemUpIGNvbnN0
Ci0gICAgewotICAgICAgICB2b2lkKiBvdXRwdXQ7Ci0gICAgICAgIGtlcm5fcmV0dXJuX3QgZXJy
ID0gKCptX3JlYWRlcikobV90YXNrLCBhZGRyZXNzLCBzaXplLCBzdGF0aWNfY2FzdDx2b2lkKio+
KCZvdXRwdXQpKTsKLSAgICAgICAgaWYgKGVycikKLSAgICAgICAgICAgIG91dHB1dCA9IDA7Ci0g
ICAgICAgIHJldHVybiBvdXRwdXQ7Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
Ci0gICAgVCogb3BlcmF0b3IoKShUKiBhZGRyZXNzLCBzaXplX3Qgc2l6ZSA9IHNpemVvZihUKSkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4oKCp0aGlzKShyZWlu
dGVycHJldF9jYXN0PHZtX2FkZHJlc3NfdD4oYWRkcmVzcyksIHNpemUpKTsKLSAgICB9Ci0KLSAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICBUKiBuZXh0RW50cnlJbkhhcmRlbmVkTGlua2Vk
TGlzdChUKiogcmVtb3RlQWRkcmVzcywgdWludHB0cl90IGVudHJvcHkpIGNvbnN0Ci0gICAgewot
ICAgICAgICBUKiogbG9jYWxBZGRyZXNzID0gKCp0aGlzKShyZW1vdGVBZGRyZXNzKTsKLSAgICAg
ICAgaWYgKCFsb2NhbEFkZHJlc3MpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgVCog
aGFyZGVuZWROZXh0ID0gKmxvY2FsQWRkcmVzczsKLSAgICAgICAgaWYgKCFoYXJkZW5lZE5leHQg
fHwgaGFyZGVuZWROZXh0ID09ICh2b2lkKillbnRyb3B5KQotICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgIHJldHVybiBYT1JfTUFTS19QVFJfV0lUSF9LRVkoaGFyZGVuZWROZXh0LCByZW1v
dGVBZGRyZXNzLCBlbnRyb3B5KTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
LXRlbXBsYXRlIDx0eXBlbmFtZSBSZWNvcmRlcj4KLXZvaWQgUGFnZUhlYXBBbGxvY2F0b3I8VD46
OnJlY29yZEFkbWluaXN0cmF0aXZlUmVnaW9ucyhSZWNvcmRlciYgcmVjb3JkZXIsIGNvbnN0IFJl
bW90ZU1lbW9yeVJlYWRlciYgcmVhZGVyKQotewotICAgIGZvciAoSGFyZGVuZWRTTEwgYWRtaW5B
bGxvY2F0aW9uID0gYWxsb2NhdGVkX3JlZ2lvbnNfOyBhZG1pbkFsbG9jYXRpb247IGFkbWluQWxs
b2NhdGlvbi5zZXRWYWx1ZShyZWFkZXIubmV4dEVudHJ5SW5IYXJkZW5lZExpbmtlZExpc3QocmVp
bnRlcnByZXRfY2FzdDx2b2lkKio+KGFkbWluQWxsb2NhdGlvbi52YWx1ZSgpKSwgZW50cm9weV8p
KSkKLSAgICAgICAgcmVjb3JkZXIucmVjb3JkUmVnaW9uKHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRk
cmVzc190PihhZG1pbkFsbG9jYXRpb24udmFsdWUoKSksIGtBbGxvY0luY3JlbWVudCk7Ci19Ci0K
LWNsYXNzIEZyZWVPYmplY3RGaW5kZXIgewotICAgIGNvbnN0IFJlbW90ZU1lbW9yeVJlYWRlciYg
bV9yZWFkZXI7Ci0gICAgSGFzaFNldDx2b2lkKj4gbV9mcmVlT2JqZWN0czsKLQotcHVibGljOgot
ICAgIEZyZWVPYmplY3RGaW5kZXIoY29uc3QgUmVtb3RlTWVtb3J5UmVhZGVyJiByZWFkZXIpIDog
bV9yZWFkZXIocmVhZGVyKSB7IH0KLQotICAgIHZvaWQgdmlzaXQodm9pZCogcHRyKSB7IG1fZnJl
ZU9iamVjdHMuYWRkKHB0cik7IH0KLSAgICBib29sIGlzRnJlZU9iamVjdCh2b2lkKiBwdHIpIGNv
bnN0IHsgcmV0dXJuIG1fZnJlZU9iamVjdHMuY29udGFpbnMocHRyKTsgfQotICAgIGJvb2wgaXNG
cmVlT2JqZWN0KHZtX2FkZHJlc3NfdCBwdHIpIGNvbnN0IHsgcmV0dXJuIGlzRnJlZU9iamVjdChy
ZWludGVycHJldF9jYXN0PHZvaWQqPihwdHIpKTsgfQotICAgIHNpemVfdCBmcmVlT2JqZWN0Q291
bnQoKSBjb25zdCB7IHJldHVybiBtX2ZyZWVPYmplY3RzLnNpemUoKTsgfQotCi0gICAgdm9pZCBm
aW5kRnJlZU9iamVjdHMoVENNYWxsb2NfVGhyZWFkQ2FjaGUqIHRocmVhZENhY2hlKQotICAgIHsK
LSAgICAgICAgZm9yICg7IHRocmVhZENhY2hlOyB0aHJlYWRDYWNoZSA9ICh0aHJlYWRDYWNoZS0+
bmV4dF8gPyBtX3JlYWRlcih0aHJlYWRDYWNoZS0+bmV4dF8pIDogMCkpCi0gICAgICAgICAgICB0
aHJlYWRDYWNoZS0+ZW51bWVyYXRlRnJlZU9iamVjdHMoKnRoaXMsIG1fcmVhZGVyKTsKLSAgICB9
Ci0KLSAgICB2b2lkIGZpbmRGcmVlT2JqZWN0cyhUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0UGFk
ZGVkKiBjZW50cmFsRnJlZUxpc3QsIHNpemVfdCBudW1TaXplcywgVENNYWxsb2NfQ2VudHJhbF9G
cmVlTGlzdFBhZGRlZCogcmVtb3RlQ2VudHJhbEZyZWVMaXN0KQotICAgIHsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVNpemVzOyBpKyspCi0gICAgICAgICAgICBjZW50cmFs
RnJlZUxpc3RbaV0uZW51bWVyYXRlRnJlZU9iamVjdHMoKnRoaXMsIG1fcmVhZGVyLCByZW1vdGVD
ZW50cmFsRnJlZUxpc3QgKyBpKTsKLSAgICB9Ci19OwotCi1jbGFzcyBQYWdlTWFwRnJlZU9iamVj
dEZpbmRlciB7Ci0gICAgY29uc3QgUmVtb3RlTWVtb3J5UmVhZGVyJiBtX3JlYWRlcjsKLSAgICBG
cmVlT2JqZWN0RmluZGVyJiBtX2ZyZWVPYmplY3RGaW5kZXI7Ci0gICAgdWludHB0cl90IG1fZW50
cm9weTsKLQotcHVibGljOgotICAgIFBhZ2VNYXBGcmVlT2JqZWN0RmluZGVyKGNvbnN0IFJlbW90
ZU1lbW9yeVJlYWRlciYgcmVhZGVyLCBGcmVlT2JqZWN0RmluZGVyJiBmcmVlT2JqZWN0RmluZGVy
LCB1aW50cHRyX3QgZW50cm9weSkKLSAgICAgICAgOiBtX3JlYWRlcihyZWFkZXIpCi0gICAgICAg
ICwgbV9mcmVlT2JqZWN0RmluZGVyKGZyZWVPYmplY3RGaW5kZXIpCi0gICAgICAgICwgbV9lbnRy
b3B5KGVudHJvcHkpCi0gICAgewotI2lmIEVOQUJMRShUQ01BTExPQ19IQVJERU5JTkcpCi0gICAg
ICAgIEFTU0VSVChtX2VudHJvcHkpOwotI2VuZGlmCi0gICAgfQotCi0gICAgaW50IHZpc2l0KHZv
aWQqIHB0cikgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChrUGFnZVNoaWZ0ICYmIGtOdW1D
bGFzc2VzICYmIGtQYWdlU2l6ZSk7Ci0gICAgICAgIGlmICghcHRyKQotICAgICAgICAgICAgcmV0
dXJuIDE7Ci0KLSAgICAgICAgU3Bhbiogc3BhbiA9IG1fcmVhZGVyKHJlaW50ZXJwcmV0X2Nhc3Q8
U3Bhbio+KHB0cikpOwotICAgICAgICBpZiAoIXNwYW4pCi0gICAgICAgICAgICByZXR1cm4gMTsK
LQotICAgICAgICBpZiAoc3Bhbi0+ZnJlZSkgewotICAgICAgICAgICAgdm9pZCogcHRyID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oc3Bhbi0+c3RhcnQgPDwga1BhZ2VTaGlmdCk7Ci0gICAgICAg
ICAgICBtX2ZyZWVPYmplY3RGaW5kZXIudmlzaXQocHRyKTsKLSAgICAgICAgfSBlbHNlIGlmIChz
cGFuLT5zaXplY2xhc3MpIHsKLSAgICAgICAgICAgIC8vIFdhbGsgdGhlIGZyZWUgbGlzdCBvZiB0
aGUgc21hbGwtb2JqZWN0IHNwYW4sIGtlZXBpbmcgdHJhY2sgb2YgZWFjaCBvYmplY3Qgc2Vlbgot
ICAgICAgICAgICAgZm9yIChIYXJkZW5lZFNMTCBuZXh0T2JqZWN0ID0gc3Bhbi0+b2JqZWN0czsg
bmV4dE9iamVjdDsgbmV4dE9iamVjdC5zZXRWYWx1ZShtX3JlYWRlci5uZXh0RW50cnlJbkhhcmRl
bmVkTGlua2VkTGlzdChyZWludGVycHJldF9jYXN0PHZvaWQqKj4obmV4dE9iamVjdC52YWx1ZSgp
KSwgbV9lbnRyb3B5KSkpCi0gICAgICAgICAgICAgICAgbV9mcmVlT2JqZWN0RmluZGVyLnZpc2l0
KG5leHRPYmplY3QudmFsdWUoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHNwYW4tPmxl
bmd0aDsKLSAgICB9Ci19OwotCi1jbGFzcyBQYWdlTWFwTWVtb3J5VXNhZ2VSZWNvcmRlciB7Ci0g
ICAgdGFza190IG1fdGFzazsKLSAgICB2b2lkKiBtX2NvbnRleHQ7Ci0gICAgdW5zaWduZWQgbV90
eXBlTWFzazsKLSAgICB2bV9yYW5nZV9yZWNvcmRlcl90KiBtX3JlY29yZGVyOwotICAgIGNvbnN0
IFJlbW90ZU1lbW9yeVJlYWRlciYgbV9yZWFkZXI7Ci0gICAgY29uc3QgRnJlZU9iamVjdEZpbmRl
ciYgbV9mcmVlT2JqZWN0RmluZGVyOwotCi0gICAgSGFzaFNldDx2b2lkKj4gbV9zZWVuUG9pbnRl
cnM7Ci0gICAgVmVjdG9yPFNwYW4qPiBtX2NvYWxlc2NlZFNwYW5zOwotCi1wdWJsaWM6Ci0gICAg
UGFnZU1hcE1lbW9yeVVzYWdlUmVjb3JkZXIodGFza190IHRhc2ssIHZvaWQqIGNvbnRleHQsIHVu
c2lnbmVkIHR5cGVNYXNrLCB2bV9yYW5nZV9yZWNvcmRlcl90KiByZWNvcmRlciwgY29uc3QgUmVt
b3RlTWVtb3J5UmVhZGVyJiByZWFkZXIsIGNvbnN0IEZyZWVPYmplY3RGaW5kZXImIGZyZWVPYmpl
Y3RGaW5kZXIpCi0gICAgICAgIDogbV90YXNrKHRhc2spCi0gICAgICAgICwgbV9jb250ZXh0KGNv
bnRleHQpCi0gICAgICAgICwgbV90eXBlTWFzayh0eXBlTWFzaykKLSAgICAgICAgLCBtX3JlY29y
ZGVyKHJlY29yZGVyKQotICAgICAgICAsIG1fcmVhZGVyKHJlYWRlcikKLSAgICAgICAgLCBtX2Zy
ZWVPYmplY3RGaW5kZXIoZnJlZU9iamVjdEZpbmRlcikKLSAgICB7IH0KLQotICAgIH5QYWdlTWFw
TWVtb3J5VXNhZ2VSZWNvcmRlcigpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1fY29hbGVzY2Vk
U3BhbnMuc2l6ZSgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlY29yZFBlbmRpbmdSZWdpb25zKCkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChrUGFnZVNoaWZ0ICYmIGtOdW1DbGFzc2VzICYmIGtQYWdl
U2l6ZSk7Ci0KLSAgICAgICAgYm9vbCByZWNvcmRSZWdpb25zQ29udGFpbmluZ1BvaW50ZXJzID0g
bV90eXBlTWFzayAmIE1BTExPQ19QVFJfUkVHSU9OX1JBTkdFX1RZUEU7Ci0gICAgICAgIGJvb2wg
cmVjb3JkQWxsb2NhdGlvbnMgPSBtX3R5cGVNYXNrICYgTUFMTE9DX1BUUl9JTl9VU0VfUkFOR0Vf
VFlQRTsKLQotICAgICAgICBpZiAoIXJlY29yZFJlZ2lvbnNDb250YWluaW5nUG9pbnRlcnMgJiYg
IXJlY29yZEFsbG9jYXRpb25zKSB7Ci0gICAgICAgICAgICBtX2NvYWxlc2NlZFNwYW5zLmNsZWFy
KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBWZWN0b3I8dm1f
cmFuZ2VfdCwgMjU2PiBwb2ludGVyUmVnaW9uczsKLSAgICAgICAgVmVjdG9yPHZtX3JhbmdlX3Qs
IDEwMjQ+IGFsbG9jYXRlZFBvaW50ZXJzOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fY29hbGVzY2VkU3BhbnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFNwYW4gKnRoZVNw
YW4gPSBtX2NvYWxlc2NlZFNwYW5zW2ldOwotICAgICAgICAgICAgdm1fYWRkcmVzc190IHNwYW5T
dGFydEFkZHJlc3MgPSB0aGVTcGFuLT5zdGFydCA8PCBrUGFnZVNoaWZ0OwotICAgICAgICAgICAg
dm1fc2l6ZV90IHNwYW5TaXplSW5CeXRlcyA9IHRoZVNwYW4tPmxlbmd0aCAqIGtQYWdlU2l6ZTsK
LQotICAgICAgICAgICAgaWYgKHJlY29yZFJlZ2lvbnNDb250YWluaW5nUG9pbnRlcnMpCi0gICAg
ICAgICAgICAgICAgcG9pbnRlclJlZ2lvbnMuYXBwZW5kKCh2bV9yYW5nZV90KXtzcGFuU3RhcnRB
ZGRyZXNzLCBzcGFuU2l6ZUluQnl0ZXN9KTsKLQotICAgICAgICAgICAgaWYgKHRoZVNwYW4tPmZy
ZWUgfHwgIXJlY29yZEFsbG9jYXRpb25zKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgICAgICBpZiAoIXRoZVNwYW4tPnNpemVjbGFzcykgewotICAgICAgICAgICAgICAgIC8v
IElmIGl0J3MgYW4gYWxsb2NhdGVkIGxhcmdlIG9iamVjdCBzcGFuLCBtYXJrIGl0IGFzIGluIHVz
ZQotICAgICAgICAgICAgICAgIGlmICghbV9mcmVlT2JqZWN0RmluZGVyLmlzRnJlZU9iamVjdChz
cGFuU3RhcnRBZGRyZXNzKSkKLSAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGVkUG9pbnRlcnMu
YXBwZW5kKCh2bV9yYW5nZV90KXtzcGFuU3RhcnRBZGRyZXNzLCBzcGFuU2l6ZUluQnl0ZXN9KTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG9iamVj
dFNpemUgPSBCeXRlU2l6ZUZvckNsYXNzKHRoZVNwYW4tPnNpemVjbGFzcyk7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBNYXJrIGVhY2ggYWxsb2NhdGVkIHNtYWxsIG9iamVjdCB3aXRoaW4gdGhlIHNw
YW4gYXMgaW4gdXNlCi0gICAgICAgICAgICAgICAgY29uc3Qgdm1fYWRkcmVzc190IGVuZE9mU3Bh
biA9IHNwYW5TdGFydEFkZHJlc3MgKyBzcGFuU2l6ZUluQnl0ZXM7Ci0gICAgICAgICAgICAgICAg
Zm9yICh2bV9hZGRyZXNzX3Qgb2JqZWN0ID0gc3BhblN0YXJ0QWRkcmVzczsgb2JqZWN0ICsgb2Jq
ZWN0U2l6ZSA8PSBlbmRPZlNwYW47IG9iamVjdCArPSBvYmplY3RTaXplKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghbV9mcmVlT2JqZWN0RmluZGVyLmlzRnJlZU9iamVjdChvYmplY3QpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGVkUG9pbnRlcnMuYXBwZW5kKCh2bV9yYW5n
ZV90KXtvYmplY3QsIG9iamVjdFNpemV9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVjb3JkUmVnaW9uc0NvbnRhaW5pbmdQb2lu
dGVycykKLSAgICAgICAgICAgICgqbV9yZWNvcmRlcikobV90YXNrLCBtX2NvbnRleHQsIE1BTExP
Q19QVFJfUkVHSU9OX1JBTkdFX1RZUEUsIHBvaW50ZXJSZWdpb25zLmRhdGEoKSwgcG9pbnRlclJl
Z2lvbnMuc2l6ZSgpKTsKLQotICAgICAgICBpZiAocmVjb3JkQWxsb2NhdGlvbnMpCi0gICAgICAg
ICAgICAoKm1fcmVjb3JkZXIpKG1fdGFzaywgbV9jb250ZXh0LCBNQUxMT0NfUFRSX0lOX1VTRV9S
QU5HRV9UWVBFLCBhbGxvY2F0ZWRQb2ludGVycy5kYXRhKCksIGFsbG9jYXRlZFBvaW50ZXJzLnNp
emUoKSk7Ci0KLSAgICAgICAgbV9jb2FsZXNjZWRTcGFucy5jbGVhcigpOwotICAgIH0KLQotICAg
IGludCB2aXNpdCh2b2lkKiBwdHIpCi0gICAgewotICAgICAgICBBU1NFUlQoa1BhZ2VTaGlmdCAm
JiBrTnVtQ2xhc3NlcyAmJiBrUGFnZVNpemUpOwotICAgICAgICBpZiAoIXB0cikKLSAgICAgICAg
ICAgIHJldHVybiAxOwotCi0gICAgICAgIFNwYW4qIHNwYW4gPSBtX3JlYWRlcihyZWludGVycHJl
dF9jYXN0PFNwYW4qPihwdHIpKTsKLSAgICAgICAgaWYgKCFzcGFuIHx8ICFzcGFuLT5zdGFydCkK
LSAgICAgICAgICAgIHJldHVybiAxOwotCi0gICAgICAgIGlmICghbV9zZWVuUG9pbnRlcnMuYWRk
KHB0cikuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgIHJldHVybiBzcGFuLT5sZW5ndGg7Ci0KLSAg
ICAgICAgaWYgKCFtX2NvYWxlc2NlZFNwYW5zLnNpemUoKSkgewotICAgICAgICAgICAgbV9jb2Fs
ZXNjZWRTcGFucy5hcHBlbmQoc3Bhbik7Ci0gICAgICAgICAgICByZXR1cm4gc3Bhbi0+bGVuZ3Ro
OwotICAgICAgICB9Ci0KLSAgICAgICAgU3BhbiogcHJldmlvdXNTcGFuID0gbV9jb2FsZXNjZWRT
cGFuc1ttX2NvYWxlc2NlZFNwYW5zLnNpemUoKSAtIDFdOwotICAgICAgICB2bV9hZGRyZXNzX3Qg
cHJldmlvdXNTcGFuU3RhcnRBZGRyZXNzID0gcHJldmlvdXNTcGFuLT5zdGFydCA8PCBrUGFnZVNo
aWZ0OwotICAgICAgICB2bV9zaXplX3QgcHJldmlvdXNTcGFuU2l6ZUluQnl0ZXMgPSBwcmV2aW91
c1NwYW4tPmxlbmd0aCAqIGtQYWdlU2l6ZTsKLQotICAgICAgICAvLyBJZiB0aGUgbmV3IHNwYW4g
aXMgYWRqYWNlbnQgdG8gdGhlIHByZXZpb3VzIHNwYW4sIGRvIG5vdGhpbmcgZm9yIG5vdy4KLSAg
ICAgICAgdm1fYWRkcmVzc190IHNwYW5TdGFydEFkZHJlc3MgPSBzcGFuLT5zdGFydCA8PCBrUGFn
ZVNoaWZ0OwotICAgICAgICBpZiAoc3BhblN0YXJ0QWRkcmVzcyA9PSBwcmV2aW91c1NwYW5TdGFy
dEFkZHJlc3MgKyBwcmV2aW91c1NwYW5TaXplSW5CeXRlcykgewotICAgICAgICAgICAgbV9jb2Fs
ZXNjZWRTcGFucy5hcHBlbmQoc3Bhbik7Ci0gICAgICAgICAgICByZXR1cm4gc3Bhbi0+bGVuZ3Ro
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTmV3IHNwYW4gaXMgbm90IGFkamFjZW50IHRvIHBy
ZXZpb3VzIHNwYW4sIHNvIHJlY29yZCB0aGUgc3BhbnMgY29hbGVzY2VkIHNvIGZhci4KLSAgICAg
ICAgcmVjb3JkUGVuZGluZ1JlZ2lvbnMoKTsKLSAgICAgICAgbV9jb2FsZXNjZWRTcGFucy5hcHBl
bmQoc3Bhbik7Ci0KLSAgICAgICAgcmV0dXJuIHNwYW4tPmxlbmd0aDsKLSAgICB9Ci19OwotCi1j
bGFzcyBBZG1pblJlZ2lvblJlY29yZGVyIHsKLSAgICB0YXNrX3QgbV90YXNrOwotICAgIHZvaWQq
IG1fY29udGV4dDsKLSAgICB1bnNpZ25lZCBtX3R5cGVNYXNrOwotICAgIHZtX3JhbmdlX3JlY29y
ZGVyX3QqIG1fcmVjb3JkZXI7Ci0KLSAgICBWZWN0b3I8dm1fcmFuZ2VfdCwgMTAyND4gbV9wZW5k
aW5nUmVnaW9uczsKLQotcHVibGljOgotICAgIEFkbWluUmVnaW9uUmVjb3JkZXIodGFza190IHRh
c2ssIHZvaWQqIGNvbnRleHQsIHVuc2lnbmVkIHR5cGVNYXNrLCB2bV9yYW5nZV9yZWNvcmRlcl90
KiByZWNvcmRlcikKLSAgICAgICAgOiBtX3Rhc2sodGFzaykKLSAgICAgICAgLCBtX2NvbnRleHQo
Y29udGV4dCkKLSAgICAgICAgLCBtX3R5cGVNYXNrKHR5cGVNYXNrKQotICAgICAgICAsIG1fcmVj
b3JkZXIocmVjb3JkZXIpCi0gICAgeyB9Ci0KLSAgICB2b2lkIHJlY29yZFJlZ2lvbih2bV9hZGRy
ZXNzX3QgcHRyLCBzaXplX3Qgc2l6ZSkKLSAgICB7Ci0gICAgICAgIGlmIChtX3R5cGVNYXNrICYg
TUFMTE9DX0FETUlOX1JFR0lPTl9SQU5HRV9UWVBFKQotICAgICAgICAgICAgbV9wZW5kaW5nUmVn
aW9ucy5hcHBlbmQoKHZtX3JhbmdlX3QpeyBwdHIsIHNpemUgfSk7Ci0gICAgfQotCi0gICAgdm9p
ZCB2aXNpdCh2b2lkICpwdHIsIHNpemVfdCBzaXplKQotICAgIHsKLSAgICAgICAgcmVjb3JkUmVn
aW9uKHJlaW50ZXJwcmV0X2Nhc3Q8dm1fYWRkcmVzc190PihwdHIpLCBzaXplKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHJlY29yZFBlbmRpbmdSZWdpb25zKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX3Bl
bmRpbmdSZWdpb25zLnNpemUoKSkgewotICAgICAgICAgICAgKCptX3JlY29yZGVyKShtX3Rhc2ss
IG1fY29udGV4dCwgTUFMTE9DX0FETUlOX1JFR0lPTl9SQU5HRV9UWVBFLCBtX3BlbmRpbmdSZWdp
b25zLmRhdGEoKSwgbV9wZW5kaW5nUmVnaW9ucy5zaXplKCkpOwotICAgICAgICAgICAgbV9wZW5k
aW5nUmVnaW9ucy5jbGVhcigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgfkFkbWluUmVnaW9u
UmVjb3JkZXIoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX3BlbmRpbmdSZWdpb25zLnNpemUo
KSk7Ci0gICAgfQotfTsKLQota2Vybl9yZXR1cm5fdCBGYXN0TWFsbG9jWm9uZTo6ZW51bWVyYXRl
KHRhc2tfdCB0YXNrLCB2b2lkKiBjb250ZXh0LCB1bnNpZ25lZCB0eXBlTWFzaywgdm1fYWRkcmVz
c190IHpvbmVBZGRyZXNzLCBtZW1vcnlfcmVhZGVyX3QgcmVhZGVyLCB2bV9yYW5nZV9yZWNvcmRl
cl90IHJlY29yZGVyKQotewotICAgIFJlbW90ZU1lbW9yeVJlYWRlciBtZW1vcnlSZWFkZXIodGFz
aywgcmVhZGVyKTsKLQotICAgIEluaXRTaXplQ2xhc3NlcygpOwotCi0gICAgRmFzdE1hbGxvY1pv
bmUqIG16b25lID0gbWVtb3J5UmVhZGVyKHJlaW50ZXJwcmV0X2Nhc3Q8RmFzdE1hbGxvY1pvbmUq
Pih6b25lQWRkcmVzcykpOwotICAgIFRDTWFsbG9jX1BhZ2VIZWFwKiBwYWdlSGVhcCA9IG1lbW9y
eVJlYWRlcihtem9uZS0+bV9wYWdlSGVhcCk7Ci0gICAgVENNYWxsb2NfVGhyZWFkQ2FjaGUqKiB0
aHJlYWRIZWFwc1BvaW50ZXIgPSBtZW1vcnlSZWFkZXIobXpvbmUtPm1fdGhyZWFkSGVhcHMpOwot
ICAgIFRDTWFsbG9jX1RocmVhZENhY2hlKiB0aHJlYWRIZWFwcyA9IG1lbW9yeVJlYWRlcigqdGhy
ZWFkSGVhcHNQb2ludGVyKTsKLQotICAgIFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQq
IGNlbnRyYWxDYWNoZXMgPSBtZW1vcnlSZWFkZXIobXpvbmUtPm1fY2VudHJhbENhY2hlcywgc2l6
ZW9mKFRDTWFsbG9jX0NlbnRyYWxfRnJlZUxpc3RQYWRkZWQpICoga051bUNsYXNzZXMpOwotCi0g
ICAgRnJlZU9iamVjdEZpbmRlciBmaW5kZXIobWVtb3J5UmVhZGVyKTsKLSAgICBmaW5kZXIuZmlu
ZEZyZWVPYmplY3RzKHRocmVhZEhlYXBzKTsKLSAgICBmaW5kZXIuZmluZEZyZWVPYmplY3RzKGNl
bnRyYWxDYWNoZXMsIGtOdW1DbGFzc2VzLCBtem9uZS0+bV9jZW50cmFsQ2FjaGVzKTsKLQotICAg
IFRDTWFsbG9jX1BhZ2VIZWFwOjpQYWdlTWFwKiBwYWdlTWFwID0gJnBhZ2VIZWFwLT5wYWdlbWFw
XzsKLSAgICBQYWdlTWFwRnJlZU9iamVjdEZpbmRlciBwYWdlTWFwRmluZGVyKG1lbW9yeVJlYWRl
ciwgZmluZGVyLCBwYWdlSGVhcC0+ZW50cm9weV8pOwotICAgIHBhZ2VNYXAtPnZpc2l0VmFsdWVz
KHBhZ2VNYXBGaW5kZXIsIG1lbW9yeVJlYWRlcik7Ci0KLSAgICBQYWdlTWFwTWVtb3J5VXNhZ2VS
ZWNvcmRlciB1c2FnZVJlY29yZGVyKHRhc2ssIGNvbnRleHQsIHR5cGVNYXNrLCByZWNvcmRlciwg
bWVtb3J5UmVhZGVyLCBmaW5kZXIpOwotICAgIHBhZ2VNYXAtPnZpc2l0VmFsdWVzKHVzYWdlUmVj
b3JkZXIsIG1lbW9yeVJlYWRlcik7Ci0gICAgdXNhZ2VSZWNvcmRlci5yZWNvcmRQZW5kaW5nUmVn
aW9ucygpOwotCi0gICAgQWRtaW5SZWdpb25SZWNvcmRlciBhZG1pblJlZ2lvblJlY29yZGVyKHRh
c2ssIGNvbnRleHQsIHR5cGVNYXNrLCByZWNvcmRlcik7Ci0gICAgcGFnZU1hcC0+dmlzaXRBbGxv
Y2F0aW9ucyhhZG1pblJlZ2lvblJlY29yZGVyLCBtZW1vcnlSZWFkZXIpOwotCi0gICAgUGFnZUhl
YXBBbGxvY2F0b3I8U3Bhbj4qIHNwYW5BbGxvY2F0b3IgPSBtZW1vcnlSZWFkZXIobXpvbmUtPm1f
c3BhbkFsbG9jYXRvcik7Ci0gICAgUGFnZUhlYXBBbGxvY2F0b3I8VENNYWxsb2NfVGhyZWFkQ2Fj
aGU+KiBwYWdlSGVhcEFsbG9jYXRvciA9IG1lbW9yeVJlYWRlcihtem9uZS0+bV9wYWdlSGVhcEFs
bG9jYXRvcik7Ci0KLSAgICBzcGFuQWxsb2NhdG9yLT5yZWNvcmRBZG1pbmlzdHJhdGl2ZVJlZ2lv
bnMoYWRtaW5SZWdpb25SZWNvcmRlciwgbWVtb3J5UmVhZGVyKTsKLSAgICBwYWdlSGVhcEFsbG9j
YXRvci0+cmVjb3JkQWRtaW5pc3RyYXRpdmVSZWdpb25zKGFkbWluUmVnaW9uUmVjb3JkZXIsIG1l
bW9yeVJlYWRlcik7Ci0KLSAgICBhZG1pblJlZ2lvblJlY29yZGVyLnJlY29yZFBlbmRpbmdSZWdp
b25zKCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc2l6ZV90IEZhc3RNYWxsb2Nab25lOjpzaXpl
KG1hbGxvY196b25lX3QqLCBjb25zdCB2b2lkKikKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9p
ZCogRmFzdE1hbGxvY1pvbmU6OnpvbmVNYWxsb2MobWFsbG9jX3pvbmVfdCosIHNpemVfdCkKLXsK
LSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCogRmFzdE1hbGxvY1pvbmU6OnpvbmVDYWxsb2MobWFs
bG9jX3pvbmVfdCosIHNpemVfdCwgc2l6ZV90KQotewotICAgIHJldHVybiAwOwotfQotCi12b2lk
IEZhc3RNYWxsb2Nab25lOjp6b25lRnJlZShtYWxsb2Nfem9uZV90Kiwgdm9pZCogcHRyKQotewot
ICAgIC8vIER1ZSB0byA8cmRhcjovL3Byb2JsZW0vNTY3MTM1Nz4gem9uZUZyZWUgbWF5IGJlIGNh
bGxlZCBieSB0aGUgc3lzdGVtIGZyZWUgZXZlbiBpZiB0aGUgcG9pbnRlcgotICAgIC8vIGlzIG5v
dCBpbiB0aGlzIHpvbmUuICBXaGVuIHRoaXMgaGFwcGVucywgdGhlIHBvaW50ZXIgYmVpbmcgZnJl
ZWQgd2FzIG5vdCBhbGxvY2F0ZWQgYnkgYW55Ci0gICAgLy8gem9uZSBzbyB3ZSBuZWVkIHRvIHBy
aW50IGEgdXNlZnVsIGVycm9yIGZvciB0aGUgYXBwbGljYXRpb24gZGV2ZWxvcGVyLgotICAgIG1h
bGxvY19wcmludGYoIioqKiBlcnJvciBmb3Igb2JqZWN0ICVwOiBwb2ludGVyIGJlaW5nIGZyZWVk
IHdhcyBub3QgYWxsb2NhdGVkXG4iLCBwdHIpOwotfQotCi12b2lkKiBGYXN0TWFsbG9jWm9uZTo6
em9uZVJlYWxsb2MobWFsbG9jX3pvbmVfdCosIHZvaWQqLCBzaXplX3QpCi17Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLQotI3VuZGVmIG1hbGxvYwotI3VuZGVmIGZyZWUKLSN1bmRlZiByZWFsbG9jCi0j
dW5kZWYgY2FsbG9jCi0KLWV4dGVybiAiQyIgewotbWFsbG9jX2ludHJvc3BlY3Rpb25fdCBqc2Nv
cmVfZmFzdG1hbGxvY19pbnRyb3NwZWN0aW9uID0geyAmRmFzdE1hbGxvY1pvbmU6OmVudW1lcmF0
ZSwgJkZhc3RNYWxsb2Nab25lOjpnb29kU2l6ZSwgJkZhc3RNYWxsb2Nab25lOjpjaGVjaywgJkZh
c3RNYWxsb2Nab25lOjpwcmludCwKLSAgICAmRmFzdE1hbGxvY1pvbmU6OmxvZywgJkZhc3RNYWxs
b2Nab25lOjpmb3JjZUxvY2ssICZGYXN0TWFsbG9jWm9uZTo6Zm9yY2VVbmxvY2ssICZGYXN0TWFs
bG9jWm9uZTo6c3RhdGlzdGljcwotICAgICwgMCAvLyB6b25lX2xvY2tlZCB3aWxsIG5vdCBiZSBj
YWxsZWQgb24gdGhlIHpvbmUgdW5sZXNzIGl0IGFkdmVydGlzZXMgaXRzZWxmIGFzIHZlcnNpb24g
Zml2ZSBvciBoaWdoZXIuCi0gICAgLCAwLCAwLCAwLCAwIC8vIFRoZXNlIG1lbWJlcnMgd2lsbCBu
b3QgYmUgdXNlZCB1bmxlc3MgdGhlIHpvbmUgYWR2ZXJ0aXNlcyBpdHNlbGYgYXMgdmVyc2lvbiBz
ZXZlbiBvciBoaWdoZXIuCi0KLSAgICB9OwotfQotCi1GYXN0TWFsbG9jWm9uZTo6RmFzdE1hbGxv
Y1pvbmUoVENNYWxsb2NfUGFnZUhlYXAqIHBhZ2VIZWFwLCBUQ01hbGxvY19UaHJlYWRDYWNoZSoq
IHRocmVhZEhlYXBzLCBUQ01hbGxvY19DZW50cmFsX0ZyZWVMaXN0UGFkZGVkKiBjZW50cmFsQ2Fj
aGVzLCBQYWdlSGVhcEFsbG9jYXRvcjxTcGFuPiogc3BhbkFsbG9jYXRvciwgUGFnZUhlYXBBbGxv
Y2F0b3I8VENNYWxsb2NfVGhyZWFkQ2FjaGU+KiBwYWdlSGVhcEFsbG9jYXRvcikKLSAgICA6IG1f
cGFnZUhlYXAocGFnZUhlYXApCi0gICAgLCBtX3RocmVhZEhlYXBzKHRocmVhZEhlYXBzKQotICAg
ICwgbV9jZW50cmFsQ2FjaGVzKGNlbnRyYWxDYWNoZXMpCi0gICAgLCBtX3NwYW5BbGxvY2F0b3Io
c3BhbkFsbG9jYXRvcikKLSAgICAsIG1fcGFnZUhlYXBBbGxvY2F0b3IocGFnZUhlYXBBbGxvY2F0
b3IpCi17Ci0gICAgbWVtc2V0KCZtX3pvbmUsIDAsIHNpemVvZihtX3pvbmUpKTsKLSAgICBtX3pv
bmUudmVyc2lvbiA9IDQ7Ci0gICAgbV96b25lLnpvbmVfbmFtZSA9ICJKYXZhU2NyaXB0Q29yZSBG
YXN0TWFsbG9jIjsKLSAgICBtX3pvbmUuc2l6ZSA9ICZGYXN0TWFsbG9jWm9uZTo6c2l6ZTsKLSAg
ICBtX3pvbmUubWFsbG9jID0gJkZhc3RNYWxsb2Nab25lOjp6b25lTWFsbG9jOwotICAgIG1fem9u
ZS5jYWxsb2MgPSAmRmFzdE1hbGxvY1pvbmU6OnpvbmVDYWxsb2M7Ci0gICAgbV96b25lLnJlYWxs
b2MgPSAmRmFzdE1hbGxvY1pvbmU6OnpvbmVSZWFsbG9jOwotICAgIG1fem9uZS5mcmVlID0gJkZh
c3RNYWxsb2Nab25lOjp6b25lRnJlZTsKLSAgICBtX3pvbmUudmFsbG9jID0gJkZhc3RNYWxsb2Na
b25lOjp6b25lVmFsbG9jOwotICAgIG1fem9uZS5kZXN0cm95ID0gJkZhc3RNYWxsb2Nab25lOjp6
b25lRGVzdHJveTsKLSAgICBtX3pvbmUuaW50cm9zcGVjdCA9ICZqc2NvcmVfZmFzdG1hbGxvY19p
bnRyb3NwZWN0aW9uOwotICAgIG1hbGxvY196b25lX3JlZ2lzdGVyKCZtX3pvbmUpOwotfQotCi0K
LXZvaWQgRmFzdE1hbGxvY1pvbmU6OmluaXQoKQotewotICAgIHN0YXRpYyBGYXN0TWFsbG9jWm9u
ZSB6b25lKHBhZ2VoZWFwLCAmdGhyZWFkX2hlYXBzLCBzdGF0aWNfY2FzdDxUQ01hbGxvY19DZW50
cmFsX0ZyZWVMaXN0UGFkZGVkKj4oY2VudHJhbF9jYWNoZSksICZzcGFuX2FsbG9jYXRvciwgJnRo
cmVhZGhlYXBfYWxsb2NhdG9yKTsKLX0KLQotI2VuZGlmIC8vIE9TKERBUldJTikKLQotfSAvLyBu
YW1lc3BhY2UgV1RGCi0jZW5kaWYgLy8gV1RGX0NIQU5HRVMKLQotI2VuZGlmIC8vIEZPUkNFX1NZ
U1RFTV9NQUxMT0MKKyNlbmRpZiAvLyBkZWZpbmVkKFVTRV9TWVNURU1fTUFMTE9DKSAmJiBVU0Vf
U1lTVEVNX01BTExPQwpJbmRleDogU291cmNlL1dURi93dGYvVENQYWNrZWRDYWNoZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1RDUGFja2VkQ2FjaGUuaAkocmV2aXNpb24gMTgwNDIz
KQorKysgU291cmNlL1dURi93dGYvVENQYWNrZWRDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDIzNCArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMDcsIEdvb2dsZSBJbmMuCi0vLyBBbGwg
cmlnaHRzIHJlc2VydmVkLgotLy8KLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotLy8g
bWV0OgotLy8KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0vLyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCi0vLyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0vLyBkaXN0cmlidXRpb24uCi0vLyAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0vLyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotLy8g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LS8vCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8v
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotCi0vLyAtLS0KLS8vIEF1dGhvcjogR2VvZmYgUGlrZQotLy8KLS8vIFRoaXMgZmlsZSBw
cm92aWRlcyBhIG1pbmltYWwgY2FjaGUgdGhhdCBjYW4gaG9sZCBhIDxrZXksIHZhbHVlPiBwYWly
Ci0vLyB3aXRoIGxpdHRsZSBpZiBhbnkgd2FzdGVkIHNwYWNlLiAgVGhlIHR5cGVzIG9mIHRoZSBr
ZXkgYW5kIHZhbHVlCi0vLyBtdXN0IGJlIHVuc2lnbmVkIGludGVncmFsIHR5cGVzIG9yIGF0IGxl
YXN0IGhhdmUgdW5zaWduZWQgc2VtYW50aWNzCi0vLyBmb3IgPj4sIGNhc3RpbmcsIGFuZCBzaW1p
bGFyIG9wZXJhdGlvbnMuCi0vLwotLy8gU3luY2hyb25pemF0aW9uIGlzIG5vdCBwcm92aWRlZC4g
IEhvd2V2ZXIsIHRoZSBjYWNoZSBpcyBpbXBsZW1lbnRlZAotLy8gYXMgYW4gYXJyYXkgb2YgY2Fj
aGUgZW50cmllcyB3aG9zZSB0eXBlIGlzIGNob3NlbiBhdCBjb21waWxlIHRpbWUuCi0vLyBJZiBh
W2ldIGlzIGF0b21pYyBvbiB5b3VyIGhhcmR3YXJlIGZvciB0aGUgY2hvc2VuIGFycmF5IHR5cGUg
dGhlbgotLy8gcmFjaW5lc3Mgd2lsbCBub3QgbmVjZXNzYXJpbHkgbGVhZCB0byBidWdnaW5lc3Mu
ICBUaGUgY2FjaGUgZW50cmllcwotLy8gbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhIHBh
cnRpYWwga2V5IGFuZCBhIHZhbHVlIHBhY2tlZAotLy8gdG9nZXRoZXIuICBUaGUgcGFydGlhbCBr
ZXlzIGFyZSBiaXQgc3RyaW5ncyBvZiBsZW5ndGgKLS8vIGtLZXliaXRzIC0ga0hhc2hiaXRzLCBh
bmQgdGhlIHZhbHVlcyBhcmUgYml0IHN0cmluZ3Mgb2YgbGVuZ3RoIGtWYWx1ZWJpdHMuCi0vLwot
Ly8gSW4gYW4gZWZmb3J0IHRvIHVzZSBtaW5pbWFsIHNwYWNlLCBldmVyeSBjYWNoZSBlbnRyeSBy
ZXByZXNlbnRzCi0vLyBzb21lIDxrZXksIHZhbHVlPiBwYWlyOyB0aGUgY2xhc3MgcHJvdmlkZXMg
bm8gd2F5IHRvIG1hcmsgYSBjYWNoZQotLy8gZW50cnkgYXMgZW1wdHkgb3IgdW5pbml0aWFsaXpl
ZC4gIEluIHByYWN0aWNlLCB5b3UgbWF5IHdhbnQgdG8gaGF2ZQotLy8gcmVzZXJ2ZWQga2V5cyBv
ciB2YWx1ZXMgdG8gZ2V0IGFyb3VuZCB0aGlzIGxpbWl0YXRpb24uICBGb3IgZXhhbXBsZSwgaW4K
LS8vIHRjbWFsbG9jJ3MgUGFnZUlELXRvLXNpemVjbGFzcyBjYWNoZSwgYSB2YWx1ZSBvZiAwIGlz
IHVzZWQgYXMKLS8vICJ1bmtub3duIHNpemVjbGFzcy4iCi0vLwotLy8gVXNhZ2UgQ29uc2lkZXJh
dGlvbnMKLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotLy8ga0hhc2hiaXRzIGNvbnRyb2xz
IHRoZSBzaXplIG9mIHRoZSBjYWNoZS4gIFRoZSBiZXN0IHZhbHVlIGZvcgotLy8ga0hhc2hiaXRz
IHdpbGwgb2YgY291cnNlIGRlcGVuZCBvbiB0aGUgYXBwbGljYXRpb24uICBQZXJoYXBzIHRyeQot
Ly8gdHVuaW5nIHRoZSB2YWx1ZSBvZiBrSGFzaGJpdHMgYnkgbWVhc3VyaW5nIGRpZmZlcmVudCB2
YWx1ZXMgb24geW91cgotLy8gZmF2b3JpdGUgYmVuY2htYXJrLiAgQWxzbyByZW1lbWJlciBub3Qg
dG8gYmUgYSBwaWc7IG90aGVyCi0vLyBwcm9ncmFtcyB0aGF0IG5lZWQgcmVzb3VyY2VzIG1heSBz
dWZmZXIgaWYgeW91IGFyZS4KLS8vCi0vLyBUaGUgbWFpbiB1c2VzIGZvciB0aGlzIGNsYXNzIHdp
bGwgYmUgd2hlbiBwZXJmb3JtYW5jZSBpcwotLy8gY3JpdGljYWwgYW5kIHRoZXJlJ3MgYSBjb252
ZW5pZW50IHR5cGUgdG8gaG9sZCB0aGUgY2FjaGUncwotLy8gZW50cmllcy4gIEFzIGRlc2NyaWJl
ZCBhYm92ZSwgdGhlIG51bWJlciBvZiBiaXRzIHJlcXVpcmVkCi0vLyBmb3IgYSBjYWNoZSBlbnRy
eSBpcyAoa0tleWJpdHMgLSBrSGFzaGJpdHMpICsga1ZhbHVlYml0cy4gIFN1cHBvc2UKLS8vIGtL
ZXliaXRzICsga1ZhbHVlYml0cyBpcyA0My4gIFRoZW4gaXQgcHJvYmFibHkgbWFrZXMgc2Vuc2Ug
dG8KLS8vIGNob3NlIGtIYXNoYml0cyA+PSAxMSBzbyB0aGF0IGNhY2hlIGVudHJpZXMgZml0IGlu
IGEgdWludDMyLgotLy8KLS8vIE9uIHRoZSBvdGhlciBoYW5kLCBzdXBwb3NlIGtLZXliaXRzID0g
a1ZhbHVlYml0cyA9IDY0LiAgVGhlbgotLy8gdXNpbmcgdGhpcyBjbGFzcyBtYXkgYmUgbGVzcyB3
b3J0aHdoaWxlLiAgWW91J2xsIHByb2JhYmx5Ci0vLyBiZSB1c2luZyAxMjggYml0cyBmb3IgZWFj
aCBlbnRyeSBhbnl3YXksIHNvIG1heWJlIGp1c3QgcGljawotLy8gYSBoYXNoIGZ1bmN0aW9uLCBI
LCBhbmQgdXNlIGFuIGFycmF5IGluZGV4ZWQgYnkgSChrZXkpOgotLy8gICAgdm9pZCBQdXQoSyBr
ZXksIFYgdmFsdWUpIHsgYV9bSChrZXkpXSA9IHBhaXI8SywgVj4oa2V5LCB2YWx1ZSk7IH0KLS8v
ICAgIFYgR2V0T3JEZWZhdWx0KEsga2V5LCBWIGRlZmF1bHQpIHsgY29uc3QgcGFpcjxLLCBWPiAm
cCA9IGFfW0goa2V5KV07IC4uLiB9Ci0vLyAgICBldGMuCi0vLwotLy8gRnVydGhlciBEZXRhaWxz
Ci0vLyAtLS0tLS0tLS0tLS0tLS0KLS8vCi0vLyBGb3IgY2FjaGVzIHVzZWQgb25seSBieSBvbmUg
dGhyZWFkLCB0aGUgZm9sbG93aW5nIGlzIHRydWU6Ci0vLyAxLiBGb3IgYSBjYWNoZSBjLAotLy8g
ICAgICAoYy5QdXQoa2V5LCB2YWx1ZSksIGMuR2V0T3JEZWZhdWx0KGtleSwgMCkpID09IHZhbHVl
Ci0vLyAgICBhbmQKLS8vICAgICAgKGMuUHV0KGtleSwgdmFsdWUpLCA8Li4uPiwgYy5HZXRPckRl
ZmF1bHQoa2V5LCAwKSkgPT0gdmFsdWUKLS8vICAgIGlmIHRoZSBlbGlkZWQgY29kZSBjb250YWlu
cyBubyBjLlB1dCBjYWxscy4KLS8vCi0vLyAyLiBIYXMoa2V5KSB3aWxsIHJldHVybiBmYWxzZSBp
ZiBubyA8a2V5LCB2YWx1ZT4gcGFpciB3aXRoIHRoYXQga2V5Ci0vLyAgICBoYXMgZXZlciBiZWVu
IFB1dC4gIEhvd2V2ZXIsIGEgbmV3bHkgaW5pdGlhbGl6ZWQgY2FjaGUgd2lsbCBoYXZlCi0vLyAg
ICBzb21lIDxrZXksIHZhbHVlPiBwYWlycyBhbHJlYWR5IHByZXNlbnQuICBXaGVuIHlvdSBjcmVh
dGUgYSBuZXcKLS8vICAgIGNhY2hlLCB5b3UgbXVzdCBzcGVjaWZ5IGFuICJpbml0aWFsIHZhbHVl
LiIgIFRoZSBpbml0aWFsaXphdGlvbgotLy8gICAgcHJvY2VkdXJlIGlzIGVxdWl2YWxlbnQgdG8g
Q2xlYXIoaW5pdGlhbF92YWx1ZSksIHdoaWNoIGlzCi0vLyAgICBlcXVpdmFsZW50IHRvIFB1dChr
LCBpbml0aWFsX3ZhbHVlKSBmb3IgYWxsIGtleXMgayBmcm9tIDAgdG8KLS8vICAgIDJea0hhc2hi
aXRzIC0gMS4KLS8vCi0vLyAzLiBJZiBrZXkgYW5kIGtleScgZGlmZmVyIHRoZW4gdGhlIG9ubHkg
d2F5IFB1dChrZXksIHZhbHVlKSBtYXkKLS8vICAgIGNhdXNlIEhhcyhrZXknKSB0byBjaGFuZ2Ug
aXMgdGhhdCBIYXMoa2V5JykgbWF5IGNoYW5nZSBmcm9tIHRydWUgdG8KLS8vICAgIGZhbHNlLiBG
dXJ0aGVybW9yZSwgYSBQdXQoKSBjYWxsIHRoYXQgZG9lc24ndCBjaGFuZ2UgSGFzKGtleScpCi0v
LyAgICBkb2Vzbid0IGNoYW5nZSBHZXRPckRlZmF1bHQoa2V5JywgLi4uKSBlaXRoZXIuCi0vLwot
Ly8gSW1wbGVtZW50YXRpb24gZGV0YWlsczoKLS8vCi0vLyBUaGlzIGlzIGEgZGlyZWN0LW1hcHBl
ZCBjYWNoZSB3aXRoIDJea0hhc2hiaXRzIGVudHJpZXM7Ci0vLyB0aGUgaGFzaCBmdW5jdGlvbiBz
aW1wbHkgdGFrZXMgdGhlIGxvdyBiaXRzIG9mIHRoZSBrZXkuCi0vLyBTbywgd2UgZG9uJ3QgaGF2
ZSB0byBzdG9yZSB0aGUgbG93IGJpdHMgb2YgdGhlIGtleSBpbiB0aGUgZW50cmllcy4KLS8vIElu
c3RlYWQsIGFuIGVudHJ5IGlzIHRoZSBoaWdoIGJpdHMgb2YgYSBrZXkgYW5kIGEgdmFsdWUsIHBh
Y2tlZAotLy8gdG9nZXRoZXIuICBFLmcuLCBhIDIwIGJpdCBrZXkgYW5kIGEgNyBiaXQgdmFsdWUg
b25seSByZXF1aXJlCi0vLyBhIHVpbnQxNiBmb3IgZWFjaCBlbnRyeSBpZiBrSGFzaGJpdHMgPj0g
MTEuCi0vLwotLy8gQWx0ZXJuYXRpdmVzIHRvIHRoaXMgc2NoZW1lIHdpbGwgYmUgYWRkZWQgYXMg
bmVlZGVkLgotCi0jaWZuZGVmIFRDTUFMTE9DX1BBQ0tFRF9DQUNIRV9JTkxfSF9fCi0jZGVmaW5l
IFRDTUFMTE9DX1BBQ0tFRF9DQUNIRV9JTkxfSF9fCi0KLSNpZm5kZWYgV1RGX0NIQU5HRVMKLSNp
bmNsdWRlICJiYXNlL2Jhc2ljdHlwZXMuaCIgIC8vIGZvciBDT01QSUxFX0FTU0VSVAotI2luY2x1
ZGUgImJhc2UvbG9nZ2luZy5oIiAgICAgLy8gZm9yIERDSEVDSwotI2VuZGlmCi0KLSNpZm5kZWYg
RENIRUNLX0VRCi0jZGVmaW5lIERDSEVDS19FUSh2YWwxLCB2YWwyKSBBU1NFUlQoKHZhbDEpID09
ICh2YWwyKSkKLSNlbmRpZgotCi0vLyBBIHNhZmUgd2F5IG9mIGRvaW5nICIoMSA8PCBuKSAtIDEi
IC0tIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgb3ZlcmZsb3cKLS8vIE5vdGUgdGhpcyB3aWxsIGFs
bCBiZSByZXNvbHZlZCB0byBhIGNvbnN0YW50IGV4cHJlc3Npb24gYXQgY29tcGlsZS10aW1lCi0j
ZGVmaW5lIE5fT05FU18oSW50VHlwZSwgTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAoIChOKSA9PSAwID8gMCA6ICgoc3RhdGljX2Nhc3Q8SW50VHlwZT4oMSkgPDwg
KChOKS0xKSktMSArICAgIFwKLSAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PEludFR5
cGU+KDEpIDw8ICgoTiktMSkpKSApCi0KLS8vIFRoZSB0eXBlcyBLIGFuZCBWIHByb3ZpZGUgdXBw
ZXIgYm91bmRzIG9uIHRoZSBudW1iZXIgb2YgdmFsaWQga2V5cwotLy8gYW5kIHZhbHVlcywgYnV0
IHdlIGV4cGxpY2l0bHkgcmVxdWlyZSB0aGUga2V5cyB0byBiZSBsZXNzIHRoYW4KLS8vIDJea0tl
eWJpdHMgYW5kIHRoZSB2YWx1ZXMgdG8gYmUgbGVzcyB0aGFuIDJea1ZhbHVlYml0cy4gIFRoZSBz
aXplIG9mCi0vLyB0aGUgdGFibGUgaXMgY29udHJvbGxlZCBieSBrSGFzaGJpdHMsIGFuZCB0aGUg
dHlwZSBvZiBlYWNoIGVudHJ5IGluCi0vLyB0aGUgY2FjaGUgaXMgVC4gIFNlZSBhbHNvIHRoZSBi
aWcgY29tbWVudCBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlLgotdGVtcGxhdGUgPGludCBrS2V5Yml0
cywgdHlwZW5hbWUgVD4KLWNsYXNzIFBhY2tlZENhY2hlIHsKLSBwdWJsaWM6Ci0gIHR5cGVkZWYg
dWludHB0cl90IEs7Ci0gIHR5cGVkZWYgc2l6ZV90IFY7Ci0gIHN0YXRpYyBjb25zdCBzaXplX3Qg
a0hhc2hiaXRzID0gMTI7Ci0gIHN0YXRpYyBjb25zdCBzaXplX3Qga1ZhbHVlYml0cyA9IDg7Ci0K
LSAgZXhwbGljaXQgUGFja2VkQ2FjaGUoViBpbml0aWFsX3ZhbHVlKSB7Ci0gICAgQ09NUElMRV9B
U1NFUlQoa0tleWJpdHMgPD0gc2l6ZW9mKEspICogOCwga2V5X3NpemUpOwotICAgIENPTVBJTEVf
QVNTRVJUKGtWYWx1ZWJpdHMgPD0gc2l6ZW9mKFYpICogOCwgdmFsdWVfc2l6ZSk7Ci0gICAgQ09N
UElMRV9BU1NFUlQoa0hhc2hiaXRzIDw9IGtLZXliaXRzLCBoYXNoX2Z1bmN0aW9uKTsKLSAgICBD
T01QSUxFX0FTU0VSVChrS2V5Yml0cyAtIGtIYXNoYml0cyArIGtWYWx1ZWJpdHMgPD0ga1RiaXRz
LAotICAgICAgICAgICAgICAgICAgIGVudHJ5X3NpemVfbXVzdF9iZV9iaWdfZW5vdWdoKTsKLSAg
ICBDbGVhcihpbml0aWFsX3ZhbHVlKTsKLSAgfQotCi0gIHZvaWQgUHV0KEsga2V5LCBWIHZhbHVl
KSB7Ci0gICAgRENIRUNLX0VRKGtleSwga2V5ICYga0tleU1hc2spOwotICAgIERDSEVDS19FUSh2
YWx1ZSwgdmFsdWUgJiBrVmFsdWVNYXNrKTsKLSAgICBhcnJheV9bSGFzaChrZXkpXSA9IHN0YXRp
Y19jYXN0PFQ+KEtleVRvVXBwZXIoa2V5KSB8IHZhbHVlKTsKLSAgfQotCi0gIGJvb2wgSGFzKEsg
a2V5KSBjb25zdCB7Ci0gICAgRENIRUNLX0VRKGtleSwga2V5ICYga0tleU1hc2spOwotICAgIHJl
dHVybiBLZXlNYXRjaChhcnJheV9bSGFzaChrZXkpXSwga2V5KTsKLSAgfQotCi0gIFYgR2V0T3JE
ZWZhdWx0KEsga2V5LCBWIGRlZmF1bHRfdmFsdWUpIGNvbnN0IHsKLSAgICAvLyBBcyB3aXRoIG90
aGVyIGNvZGUgaW4gdGhpcyBjbGFzcywgd2UgdG91Y2ggYXJyYXlfIGFzIGZldyB0aW1lcwotICAg
IC8vIGFzIHdlIGNhbi4gIEFzc3VtaW5nIGVudHJpZXMgYXJlIHJlYWQgYXRvbWljYWxseSAoZS5n
LiwgdGhlaXIKLSAgICAvLyB0eXBlIGlzIHVpbnRwdHJfdCBvbiBtb3N0IGhhcmR3YXJlKSB0aGVu
IGNlcnRhaW4gcmFjZXMgYXJlCi0gICAgLy8gaGFybWxlc3MuCi0gICAgRENIRUNLX0VRKGtleSwg
a2V5ICYga0tleU1hc2spOwotICAgIFQgZW50cnkgPSBhcnJheV9bSGFzaChrZXkpXTsKLSAgICBy
ZXR1cm4gS2V5TWF0Y2goZW50cnksIGtleSkgPyBFbnRyeVRvVmFsdWUoZW50cnkpIDogZGVmYXVs
dF92YWx1ZTsKLSAgfQotCi0gIHZvaWQgQ2xlYXIoViB2YWx1ZSkgewotICAgIERDSEVDS19FUSh2
YWx1ZSwgdmFsdWUgJiBrVmFsdWVNYXNrKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDEgPDwg
a0hhc2hiaXRzOyBpKyspIHsKLSAgICAgIGFycmF5X1tpXSA9IHN0YXRpY19jYXN0PFQ+KHZhbHVl
KTsKLSAgICB9Ci0gIH0KLQotIHByaXZhdGU6Ci0gIC8vIFdlIGFyZSBnb2luZyB0byBwYWNrIGEg
dmFsdWUgYW5kIHRoZSB1cHBlciBwYXJ0IG9mIGEga2V5IGludG8KLSAgLy8gYW4gZW50cnkgb2Yg
dHlwZSBULiAgVGhlIFVQUEVSIHR5cGUgaXMgZm9yIHRoZSB1cHBlciBwYXJ0IG9mIGEga2V5LAot
ICAvLyBhZnRlciB0aGUga2V5IGhhcyBiZWVuIG1hc2tlZCBhbmQgc2hpZnRlZCBmb3IgaW5jbHVz
aW9uIGluIGFuIGVudHJ5LgotICB0eXBlZGVmIFQgVVBQRVI7Ci0KLSAgc3RhdGljIFYgRW50cnlU
b1ZhbHVlKFQgdCkgeyByZXR1cm4gdCAmIGtWYWx1ZU1hc2s7IH0KLQotICBzdGF0aWMgVVBQRVIg
RW50cnlUb1VwcGVyKFQgdCkgeyByZXR1cm4gdCAmIGtVcHBlck1hc2s7IH0KLQotICAvLyBJZiB2
IGlzIGEgViBhbmQgdSBpcyBhbiBVUFBFUiB0aGVuIHlvdSBjYW4gY3JlYXRlIGFuIGVudHJ5IGJ5
Ci0gIC8vIGRvaW5nIHUgfCB2LiAga0hhc2hiaXRzIGRldGVybWluZXMgd2hlcmUgaW4gYSBLIHRv
IGZpbmQgdGhlIHVwcGVyCi0gIC8vIHBhcnQgb2YgdGhlIGtleSwgYW5kIGtWYWx1ZWJpdHMgZGV0
ZXJtaW5lcyB3aGVyZSBpbiB0aGUgZW50cnkgdG8gcHV0Ci0gIC8vIGl0LgotICBzdGF0aWMgVVBQ
RVIgS2V5VG9VcHBlcihLIGspIHsKLSAgICBjb25zdCBpbnQgc2hpZnQgPSBrSGFzaGJpdHMgLSBr
VmFsdWViaXRzOwotICAgIC8vIEFzc3VtZSBrSGFzaGJpdHMgPj0ga1ZhbHVlYml0cy4gSXQgd291
bGQgYmUgZWFzeSB0byBsaWZ0IHRoaXMgYXNzdW1wdGlvbi4KLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8VD4oayA+PiBzaGlmdCkgJiBrVXBwZXJNYXNrOwotICB9Ci0KLSAgLy8gVGhpcyBpcyByb3Vn
aGx5IHRoZSBpbnZlcnNlIG9mIEtleVRvVXBwZXIoKS4gIFNvbWUgb2YgdGhlIGtleSBoYXMgYmVl
bgotICAvLyB0aHJvd24gYXdheSwgc2luY2UgS2V5VG9VcHBlcigpIG1hc2tzIG9mZiB0aGUgbG93
IGJpdHMgb2YgdGhlIGtleS4KLSAgc3RhdGljIEsgVXBwZXJUb1BhcnRpYWxLZXkoVVBQRVIgdSkg
ewotICAgIERDSEVDS19FUSh1LCB1ICYga1VwcGVyTWFzayk7Ci0gICAgY29uc3QgaW50IHNoaWZ0
ID0ga0hhc2hiaXRzIC0ga1ZhbHVlYml0czsKLSAgICAvLyBBc3N1bWUga0hhc2hiaXRzID49IGtW
YWx1ZWJpdHMuIEl0IHdvdWxkIGJlIGVhc3kgdG8gbGlmdCB0aGlzIGFzc3VtcHRpb24uCi0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PEs+KHUpIDw8IHNoaWZ0OwotICB9Ci0KLSAgc3RhdGljIHNpemVf
dCBIYXNoKEsga2V5KSB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHNpemVfdD4oa2V5KSAmIE5f
T05FU18oc2l6ZV90LCBrSGFzaGJpdHMpOwotICB9Ci0KLSAgLy8gRG9lcyB0aGUgZW50cnkncyBw
YXJ0aWFsIGtleSBtYXRjaCB0aGUgcmVsZXZhbnQgcGFydCBvZiB0aGUgZ2l2ZW4ga2V5PwotICBz
dGF0aWMgYm9vbCBLZXlNYXRjaChUIGVudHJ5LCBLIGtleSkgewotICAgIHJldHVybiAoKEtleVRv
VXBwZXIoa2V5KSBeIGVudHJ5KSAmIGtVcHBlck1hc2spID09IDA7Ci0gIH0KLQotICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IGtUYml0cyA9IDggKiBzaXplb2YoVCk7Ci0gIHN0YXRpYyBjb25zdCBpbnQg
a1VwcGVyYml0cyA9IGtLZXliaXRzIC0ga0hhc2hiaXRzOwotCi0gIC8vIEZvciBtYXNraW5nIGEg
Sy4KLSAgc3RhdGljIGNvbnN0IEsga0tleU1hc2sgPSBOX09ORVNfKEssIGtLZXliaXRzKTsKLQot
ICAvLyBGb3IgbWFza2luZyBhIFQuCi0gIHN0YXRpYyBjb25zdCBUIGtVcHBlck1hc2sgPSBOX09O
RVNfKFQsIGtVcHBlcmJpdHMpIDw8IGtWYWx1ZWJpdHM7Ci0KLSAgLy8gRm9yIG1hc2tpbmcgYSBW
IG9yIGEgVC4KLSAgc3RhdGljIGNvbnN0IFYga1ZhbHVlTWFzayA9IE5fT05FU18oViwga1ZhbHVl
Yml0cyk7Ci0KLSAgVCBhcnJheV9bMSA8PCBrSGFzaGJpdHNdOwotfTsKLQotI3VuZGVmIE5fT05F
U18KLQotI2VuZGlmICAvLyBUQ01BTExPQ19QQUNLRURfQ0FDSEVfSU5MX0hfXwpJbmRleDogU291
cmNlL1dURi93dGYvVENQYWdlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvVENQ
YWdlTWFwLmgJKHJldmlzaW9uIDE4MDQyMykKKysrIFNvdXJjZS9XVEYvd3RmL1RDUGFnZU1hcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDM2MSArMCwwIEBACi0vLyBDb3B5cmlnaHQgKGMpIDIwMDUs
IEdvb2dsZSBJbmMuCi0vLyBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gCi0vLyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoKLS8vIAotLy8gICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8v
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8gCi0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
Ly8gTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8g
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0vLyAtLS0KLS8vIEF1dGhvcjogU2FuamF5
IEdoZW1hd2F0IDxvcGVuc291cmNlQGdvb2dsZS5jb20+Ci0vLwotLy8gQSBkYXRhIHN0cnVjdHVy
ZSB1c2VkIGJ5IHRoZSBjYWNoaW5nIG1hbGxvYy4gIEl0IG1hcHMgZnJvbSBwYWdlIyB0bwotLy8g
YSBwb2ludGVyIHRoYXQgY29udGFpbnMgaW5mbyBhYm91dCB0aGF0IHBhZ2UuICBXZSB1c2UgdHdv
Ci0vLyByZXByZXNlbnRhdGlvbnM6IG9uZSBmb3IgMzItYml0IGFkZHJlc3NlcywgYW5kIGFub3Ro
ZXIgZm9yIDY0IGJpdAotLy8gYWRkcmVzc2VzLiAgQm90aCByZXByZXNlbnRhdGlvbnMgcHJvdmlk
ZSB0aGUgc2FtZSBpbnRlcmZhY2UuICBUaGUKLS8vIGZpcnN0IHJlcHJlc2VudGF0aW9uIGlzIGlt
cGxlbWVudGVkIGFzIGEgZmxhdCBhcnJheSwgdGhlIHNlY29uZHMgYXMKLS8vIGEgdGhyZWUtbGV2
ZWwgcmFkaXggdHJlZSB0aGF0IHN0cmlwcyBhd2F5IGFwcHJveGltYXRlbHkgMS8zcmQgb2YKLS8v
IHRoZSBiaXRzIGV2ZXJ5IHRpbWUuCi0vLwotLy8gVGhlIEJJVFMgcGFyYW1ldGVyIHNob3VsZCBi
ZSB0aGUgbnVtYmVyIG9mIGJpdHMgcmVxdWlyZWQgdG8gaG9sZAotLy8gYSBwYWdlIG51bWJlci4g
IEUuZy4sIHdpdGggMzIgYml0IHBvaW50ZXJzIGFuZCA0SyBwYWdlcyAoaS5lLiwKLS8vIHBhZ2Ug
b2Zmc2V0IGZpdHMgaW4gbG93ZXIgMTIgYml0cyksIEJJVFMgPT0gMjAuCi0KLSNpZm5kZWYgVENN
QUxMT0NfUEFHRU1BUF9IX18KLSNkZWZpbmUgVENNQUxMT0NfUEFHRU1BUF9IX18KLQotI2luY2x1
ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+Ci0KLS8vIFNpbmdsZS1sZXZlbCBhcnJheQotdGVtcGxhdGUgPGludCBCSVRTPgotY2xh
c3MgVENNYWxsb2NfUGFnZU1hcDEgewotIHByaXZhdGU6Ci0gIHZvaWQqKiBhcnJheV87Ci0KLSBw
dWJsaWM6Ci0gIHR5cGVkZWYgdWludHB0cl90IE51bWJlcjsKLQotICB2b2lkIGluaXQodm9pZCog
KCphbGxvY2F0b3IpKHNpemVfdCkpIHsKLSAgICBhcnJheV8gPSByZWludGVycHJldF9jYXN0PHZv
aWQqKj4oKCphbGxvY2F0b3IpKHNpemVvZih2b2lkKikgPDwgQklUUykpOwotICAgIG1lbXNldChh
cnJheV8sIDAsIHNpemVvZih2b2lkKikgPDwgQklUUyk7Ci0gIH0KLQotICAvLyBFbnN1cmUgdGhh
dCB0aGUgbWFwIGNvbnRhaW5zIGluaXRpYWxpemVkIGVudHJpZXMgInggLi4geCtuLTEiLgotICAv
LyBSZXR1cm5zIHRydWUgaWYgc3VjY2Vzc2Z1bCwgZmFsc2UgaWYgd2UgY291bGQgbm90IGFsbG9j
YXRlIG1lbW9yeS4KLSAgYm9vbCBFbnN1cmUoTnVtYmVyLCBzaXplX3QpIHsKLSAgICAvLyBOb3Ro
aW5nIHRvIGRvIHNpbmNlIGZsYXQgYXJyYXkgd2FzIGFsbG9jYXRlIGF0IHN0YXJ0Ci0gICAgcmV0
dXJuIHRydWU7Ci0gIH0KLQotICB2b2lkIFByZWFsbG9jYXRlTW9yZU1lbW9yeSgpIHt9Ci0KLSAg
Ly8gUkVRVUlSRVMgImsiIGlzIGluIHJhbmdlICJbMCwyXkJJVFMtMV0iLgotICAvLyBSRVFVSVJF
UyAiayIgaGFzIGJlZW4gZW5zdXJlZCBiZWZvcmUuCi0gIC8vCi0gIC8vIFJldHVybiB0aGUgY3Vy
cmVudCB2YWx1ZSBmb3IgS0VZLiAgUmV0dXJucyAiVmFsdWUoKSIgaWYgbm90Ci0gIC8vIHlldCBz
ZXQuCi0gIHZvaWQqIGdldChOdW1iZXIgaykgY29uc3QgewotICAgIHJldHVybiBhcnJheV9ba107
Ci0gIH0KLQotICAvLyBSRVFVSVJFUyAiayIgaXMgaW4gcmFuZ2UgIlswLDJeQklUUy0xXSIuCi0g
IC8vIFJFUVVJUkVTICJrIiBoYXMgYmVlbiBlbnN1cmVkIGJlZm9yZS4KLSAgLy8KLSAgLy8gU2V0
cyB0aGUgdmFsdWUgZm9yIEtFWS4KLSAgdm9pZCBzZXQoTnVtYmVyIGssIHZvaWQqIHYpIHsKLSAg
ICBhcnJheV9ba10gPSB2OwotICB9Ci19OwotCi0vLyBUd28tbGV2ZWwgcmFkaXggdHJlZQotdGVt
cGxhdGUgPGludCBCSVRTPgotY2xhc3MgVENNYWxsb2NfUGFnZU1hcDIgewotIHByaXZhdGU6Ci0g
IC8vIFB1dCAzMiBlbnRyaWVzIGluIHRoZSByb290IGFuZCAoMl5CSVRTKS8zMiBlbnRyaWVzIGlu
IGVhY2ggbGVhZi4KLSAgc3RhdGljIGNvbnN0IGludCBST09UX0JJVFMgPSA1OwotICBzdGF0aWMg
Y29uc3QgaW50IFJPT1RfTEVOR1RIID0gMSA8PCBST09UX0JJVFM7Ci0KLSAgc3RhdGljIGNvbnN0
IGludCBMRUFGX0JJVFMgPSBCSVRTIC0gUk9PVF9CSVRTOwotICBzdGF0aWMgY29uc3QgaW50IExF
QUZfTEVOR1RIID0gMSA8PCBMRUFGX0JJVFM7Ci0KLSAgLy8gTGVhZiBub2RlCi0gIHN0cnVjdCBM
ZWFmIHsKLSAgICB2b2lkKiB2YWx1ZXNbTEVBRl9MRU5HVEhdOwotICB9OwotCi0gIExlYWYqIHJv
b3RfW1JPT1RfTEVOR1RIXTsgICAgICAgICAgICAgLy8gUG9pbnRlcnMgdG8gMzIgY2hpbGQgbm9k
ZXMKLSAgdm9pZCogKCphbGxvY2F0b3JfKShzaXplX3QpOyAgICAgICAgICAvLyBNZW1vcnkgYWxs
b2NhdG9yCi0KLSBwdWJsaWM6Ci0gIHR5cGVkZWYgdWludHB0cl90IE51bWJlcjsKLQotICB2b2lk
IGluaXQodm9pZCogKCphbGxvY2F0b3IpKHNpemVfdCkpIHsKLSAgICBhbGxvY2F0b3JfID0gYWxs
b2NhdG9yOwotICAgIG1lbXNldChyb290XywgMCwgc2l6ZW9mKHJvb3RfKSk7Ci0gIH0KLQotICB2
b2lkKiBnZXQoTnVtYmVyIGspIGNvbnN0IHsKLSAgICBBU1NFUlQoayA+PiBCSVRTID09IDApOwot
ICAgIGNvbnN0IE51bWJlciBpMSA9IGsgPj4gTEVBRl9CSVRTOwotICAgIGNvbnN0IE51bWJlciBp
MiA9IGsgJiAoTEVBRl9MRU5HVEgtMSk7Ci0gICAgcmV0dXJuIHJvb3RfW2kxXS0+dmFsdWVzW2ky
XTsKLSAgfQotCi0gIHZvaWQgc2V0KE51bWJlciBrLCB2b2lkKiB2KSB7Ci0gICAgQVNTRVJUKGsg
Pj4gQklUUyA9PSAwKTsKLSAgICBjb25zdCBOdW1iZXIgaTEgPSBrID4+IExFQUZfQklUUzsKLSAg
ICBjb25zdCBOdW1iZXIgaTIgPSBrICYgKExFQUZfTEVOR1RILTEpOwotICAgIHJvb3RfW2kxXS0+
dmFsdWVzW2kyXSA9IHY7Ci0gIH0KLQotICBib29sIEVuc3VyZShOdW1iZXIgc3RhcnQsIHNpemVf
dCBuKSB7Ci0gICAgZm9yIChOdW1iZXIga2V5ID0gc3RhcnQ7IGtleSA8PSBzdGFydCArIG4gLSAx
OyApIHsKLSAgICAgIGNvbnN0IE51bWJlciBpMSA9IGtleSA+PiBMRUFGX0JJVFM7Ci0KLSAgICAg
IC8vIE1ha2UgMm5kIGxldmVsIG5vZGUgaWYgbmVjZXNzYXJ5Ci0gICAgICBpZiAocm9vdF9baTFd
ID09IE5VTEwpIHsKLSAgICAgICAgTGVhZiogbGVhZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGVhZio+
KCgqYWxsb2NhdG9yXykoc2l6ZW9mKExlYWYpKSk7Ci0gICAgICAgIGlmIChsZWFmID09IE5VTEwp
IHJldHVybiBmYWxzZTsKLSAgICAgICAgbWVtc2V0KGxlYWYsIDAsIHNpemVvZigqbGVhZikpOwot
ICAgICAgICByb290X1tpMV0gPSBsZWFmOwotICAgICAgfQotCi0gICAgICAvLyBBZHZhbmNlIGtl
eSBwYXN0IHdoYXRldmVyIGlzIGNvdmVyZWQgYnkgdGhpcyBsZWFmIG5vZGUKLSAgICAgIGtleSA9
ICgoa2V5ID4+IExFQUZfQklUUykgKyAxKSA8PCBMRUFGX0JJVFM7Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOwotICB9Ci0KLSAgdm9pZCBQcmVhbGxvY2F0ZU1vcmVNZW1vcnkoKSB7Ci0gICAgLy8g
QWxsb2NhdGUgZW5vdWdoIHRvIGtlZXAgdHJhY2sgb2YgYWxsIHBvc3NpYmxlIHBhZ2VzCi0gICAg
RW5zdXJlKDAsIDEgPDwgQklUUyk7Ci0gIH0KLQotI2lmZGVmIFdURl9DSEFOR0VTCi0gIHRlbXBs
YXRlPGNsYXNzIFZpc2l0b3IsIGNsYXNzIE1lbW9yeVJlYWRlcj4KLSAgdm9pZCB2aXNpdFZhbHVl
cyhWaXNpdG9yJiB2aXNpdG9yLCBjb25zdCBNZW1vcnlSZWFkZXImIHJlYWRlcikKLSAgewotICAg
IGNvbnN0IE51bWJlciBsZWFmSW5kZXhNYXNrID0gTEVBRl9MRU5HVEggLSAxOwotCi0gICAgY29u
c3QgTnVtYmVyIG1heEtleSA9ICgxbCA8PCBCSVRTKSAtIDE7Ci0gICAgY29uc3QgTnVtYmVyIGlu
dmFsaWRJbmRleCA9IG1heEtleTsKLSAgICBOdW1iZXIgcHJldmlvdXNSb290SW5kZXggPSBpbnZh
bGlkSW5kZXg7Ci0KLSAgICBMZWFmKiBsZWFmID0gMDsKLQotICAgIGZvciAoTnVtYmVyIGtleSA9
IDA7IGtleSA8IG1heEtleTsgKSB7Ci0gICAgICBjb25zdCBOdW1iZXIgcm9vdEluZGV4ID0ga2V5
ID4+IExFQUZfQklUUzsKLSAgICAgIGNvbnN0IE51bWJlciBsZWFmSW5kZXggPSBrZXkgJiBsZWFm
SW5kZXhNYXNrOwotCi0gICAgICBpZiAocm9vdEluZGV4ICE9IHByZXZpb3VzUm9vdEluZGV4KSB7
Ci0gICAgICAgIGlmICghcm9vdF9bcm9vdEluZGV4XSkgewotICAgICAgICAgIC8vIFRoZXJlJ3Mg
bm8gbm9kZSBhdCB0aGlzIGluZGV4LiBNb3ZlIG9uIHRvIHRoZSBuZXh0IGluZGV4IGF0IHRoZSBy
b290IGxldmVsLAotICAgICAgICAgIC8vIGNsZWFyaW5nIHRoZSBsZWFmIGluZGV4IHNvIHRoYXQg
d2Ugc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IG5vZGUuCi0gICAgICAgICAg
a2V5ICs9IDEgPDwgTEVBRl9CSVRTOwotICAgICAgICAgIGtleSAmPSB+bGVhZkluZGV4TWFzazsK
LSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGxlYWYgPSByZWFkZXIo
cm9vdF9bcm9vdEluZGV4XSk7Ci0gICAgICAgIHByZXZpb3VzUm9vdEluZGV4ID0gcm9vdEluZGV4
OwotICAgICAgfQotCi0gICAgICBrZXkgKz0gdmlzaXRvci52aXNpdChsZWFmLT52YWx1ZXNbbGVh
ZkluZGV4XSk7Ci0gICAgfQotICB9Ci0KLSAgdGVtcGxhdGU8Y2xhc3MgVmlzaXRvciwgY2xhc3Mg
TWVtb3J5UmVhZGVyPgotICB2b2lkIHZpc2l0QWxsb2NhdGlvbnMoVmlzaXRvciYgdmlzaXRvciwg
Y29uc3QgTWVtb3J5UmVhZGVyJikgewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUk9PVF9MRU5H
VEg7IGkrKykgewotICAgICAgaWYgKHJvb3RfW2ldKQotICAgICAgICB2aXNpdG9yLnZpc2l0KHJv
b3RfW2ldLCBzaXplb2YoTGVhZikpOwotICAgIH0KLSAgfQotI2VuZGlmCi19OwotCi0vLyBUaHJl
ZS1sZXZlbCByYWRpeCB0cmVlCi10ZW1wbGF0ZSA8aW50IEJJVFM+Ci1jbGFzcyBUQ01hbGxvY19Q
YWdlTWFwMyB7Ci0gcHJpdmF0ZToKLSAgLy8gSG93IG1hbnkgYml0cyBzaG91bGQgd2UgY29uc3Vt
ZSBhdCBlYWNoIGludGVyaW9yIGxldmVsCi0gIHN0YXRpYyBjb25zdCBpbnQgSU5URVJJT1JfQklU
UyA9IChCSVRTICsgMikgLyAzOyAvLyBSb3VuZC11cAotICBzdGF0aWMgY29uc3QgaW50IElOVEVS
SU9SX0xFTkdUSCA9IDEgPDwgSU5URVJJT1JfQklUUzsKLQotICAvLyBIb3cgbWFueSBiaXRzIHNo
b3VsZCB3ZSBjb25zdW1lIGF0IGxlYWYgbGV2ZWwKLSAgc3RhdGljIGNvbnN0IGludCBMRUFGX0JJ
VFMgPSBCSVRTIC0gMipJTlRFUklPUl9CSVRTOwotICBzdGF0aWMgY29uc3QgaW50IExFQUZfTEVO
R1RIID0gMSA8PCBMRUFGX0JJVFM7Ci0KLSAgLy8gSW50ZXJpb3Igbm9kZQotICBzdHJ1Y3QgTm9k
ZSB7Ci0gICAgTm9kZSogcHRyc1tJTlRFUklPUl9MRU5HVEhdOwotICB9OwotCi0gIC8vIExlYWYg
bm9kZQotICBzdHJ1Y3QgTGVhZiB7Ci0gICAgdm9pZCogdmFsdWVzW0xFQUZfTEVOR1RIXTsKLSAg
fTsKLQotICBOb2RlKiByb290XzsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJvb3Qgb2Yg
cmFkaXggdHJlZQotICB2b2lkKiAoKmFsbG9jYXRvcl8pKHNpemVfdCk7ICAgICAgICAgIC8vIE1l
bW9yeSBhbGxvY2F0b3IKLQotICBOb2RlKiBOZXdOb2RlKCkgewotICAgIE5vZGUqIHJlc3VsdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Tm9kZSo+KCgqYWxsb2NhdG9yXykoc2l6ZW9mKE5vZGUpKSk7Ci0g
ICAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7Ci0gICAgICBtZW1zZXQocmVzdWx0LCAwLCBzaXplb2Yo
KnJlc3VsdCkpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSBwdWJsaWM6Ci0g
IHR5cGVkZWYgdWludHB0cl90IE51bWJlcjsKLQotICB2b2lkIGluaXQodm9pZCogKCphbGxvY2F0
b3IpKHNpemVfdCkpIHsKLSAgICBhbGxvY2F0b3JfID0gYWxsb2NhdG9yOwotICAgIHJvb3RfID0g
TmV3Tm9kZSgpOwotICB9Ci0KLSAgdm9pZCogZ2V0KE51bWJlciBrKSBjb25zdCB7Ci0gICAgQVNT
RVJUKGsgPj4gQklUUyA9PSAwKTsKLSAgICBjb25zdCBOdW1iZXIgaTEgPSBrID4+IChMRUFGX0JJ
VFMgKyBJTlRFUklPUl9CSVRTKTsKLSAgICBjb25zdCBOdW1iZXIgaTIgPSAoayA+PiBMRUFGX0JJ
VFMpICYgKElOVEVSSU9SX0xFTkdUSC0xKTsKLSAgICBjb25zdCBOdW1iZXIgaTMgPSBrICYgKExF
QUZfTEVOR1RILTEpOwotICAgIHJldHVybiByZWludGVycHJldF9jYXN0PExlYWYqPihyb290Xy0+
cHRyc1tpMV0tPnB0cnNbaTJdKS0+dmFsdWVzW2kzXTsKLSAgfQotCi0gIHZvaWQgc2V0KE51bWJl
ciBrLCB2b2lkKiB2KSB7Ci0gICAgQVNTRVJUKGsgPj4gQklUUyA9PSAwKTsKLSAgICBjb25zdCBO
dW1iZXIgaTEgPSBrID4+IChMRUFGX0JJVFMgKyBJTlRFUklPUl9CSVRTKTsKLSAgICBjb25zdCBO
dW1iZXIgaTIgPSAoayA+PiBMRUFGX0JJVFMpICYgKElOVEVSSU9SX0xFTkdUSC0xKTsKLSAgICBj
b25zdCBOdW1iZXIgaTMgPSBrICYgKExFQUZfTEVOR1RILTEpOwotICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8TGVhZio+KHJvb3RfLT5wdHJzW2kxXS0+cHRyc1tpMl0pLT52YWx1ZXNbaTNdID0gdjsKLSAg
fQotCi0gIGJvb2wgRW5zdXJlKE51bWJlciBzdGFydCwgc2l6ZV90IG4pIHsKLSAgICBmb3IgKE51
bWJlciBrZXkgPSBzdGFydDsga2V5IDw9IHN0YXJ0ICsgbiAtIDE7ICkgewotICAgICAgY29uc3Qg
TnVtYmVyIGkxID0ga2V5ID4+IChMRUFGX0JJVFMgKyBJTlRFUklPUl9CSVRTKTsKLSAgICAgIGNv
bnN0IE51bWJlciBpMiA9IChrZXkgPj4gTEVBRl9CSVRTKSAmIChJTlRFUklPUl9MRU5HVEgtMSk7
Ci0KLSAgICAgIC8vIE1ha2UgMm5kIGxldmVsIG5vZGUgaWYgbmVjZXNzYXJ5Ci0gICAgICBpZiAo
cm9vdF8tPnB0cnNbaTFdID09IE5VTEwpIHsKLSAgICAgICAgTm9kZSogbiA9IE5ld05vZGUoKTsK
LSAgICAgICAgaWYgKG4gPT0gTlVMTCkgcmV0dXJuIGZhbHNlOwotICAgICAgICByb290Xy0+cHRy
c1tpMV0gPSBuOwotICAgICAgfQotCi0gICAgICAvLyBNYWtlIGxlYWYgbm9kZSBpZiBuZWNlc3Nh
cnkKLSAgICAgIGlmIChyb290Xy0+cHRyc1tpMV0tPnB0cnNbaTJdID09IE5VTEwpIHsKLSAgICAg
ICAgTGVhZiogbGVhZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8TGVhZio+KCgqYWxsb2NhdG9yXykoc2l6
ZW9mKExlYWYpKSk7Ci0gICAgICAgIGlmIChsZWFmID09IE5VTEwpIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgbWVtc2V0KGxlYWYsIDAsIHNpemVvZigqbGVhZikpOwotICAgICAgICByb290Xy0+cHRy
c1tpMV0tPnB0cnNbaTJdID0gcmVpbnRlcnByZXRfY2FzdDxOb2RlKj4obGVhZik7Ci0gICAgICB9
Ci0KLSAgICAgIC8vIEFkdmFuY2Uga2V5IHBhc3Qgd2hhdGV2ZXIgaXMgY292ZXJlZCBieSB0aGlz
IGxlYWYgbm9kZQotICAgICAga2V5ID0gKChrZXkgPj4gTEVBRl9CSVRTKSArIDEpIDw8IExFQUZf
QklUUzsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICB2b2lkIFByZWFsbG9jYXRl
TW9yZU1lbW9yeSgpIHsKLSAgfQotCi0jaWZkZWYgV1RGX0NIQU5HRVMKLSAgdGVtcGxhdGU8Y2xh
c3MgVmlzaXRvciwgY2xhc3MgTWVtb3J5UmVhZGVyPgotICB2b2lkIHZpc2l0VmFsdWVzKFZpc2l0
b3ImIHZpc2l0b3IsIGNvbnN0IE1lbW9yeVJlYWRlciYgcmVhZGVyKSB7Ci0gICAgY29uc3QgTnVt
YmVyIGludGVybWVkaWF0ZUluZGV4TWFzayA9IChJTlRFUklPUl9MRU5HVEggLSAxKSA8PCBMRUFG
X0JJVFM7Ci0gICAgY29uc3QgTnVtYmVyIGxlYWZJbmRleE1hc2sgPSBMRUFGX0xFTkdUSCAtIDE7
Ci0KLSAgICBjb25zdCBOdW1iZXIgbWF4S2V5ID0gKDFsIDw8IEJJVFMpIC0gMTsKLSAgICBjb25z
dCBOdW1iZXIgaW52YWxpZEluZGV4ID0gbWF4S2V5OwotICAgIE51bWJlciBwcmV2aW91c1Jvb3RJ
bmRleCA9IGludmFsaWRJbmRleDsKLSAgICBOdW1iZXIgcHJldmlvdXNJbnRlcm1lZGlhdGVJbmRl
eCA9IGludmFsaWRJbmRleDsKLQotICAgIE5vZGUqIGludGVybWVkaWF0ZU5vZGUgPSAwOwotICAg
IExlYWYqIGxlYWYgPSAwOwotCi0gICAgTm9kZSogcm9vdCA9IHJlYWRlcihyb290Xyk7Ci0gICAg
Zm9yIChOdW1iZXIga2V5ID0gMDsga2V5IDwgbWF4S2V5OyApIHsKLSAgICAgIGNvbnN0IE51bWJl
ciByb290SW5kZXggPSBrZXkgPj4gKExFQUZfQklUUyArIElOVEVSSU9SX0JJVFMpOwotICAgICAg
Y29uc3QgTnVtYmVyIGludGVybWVkaWF0ZUluZGV4ID0gKGtleSAmIGludGVybWVkaWF0ZUluZGV4
TWFzaykgPj4gTEVBRl9CSVRTOwotICAgICAgY29uc3QgTnVtYmVyIGxlYWZJbmRleCA9IGtleSAm
IGxlYWZJbmRleE1hc2s7Ci0KLSAgICAgIGlmIChyb290SW5kZXggIT0gcHJldmlvdXNSb290SW5k
ZXgpIHsKLSAgICAgICAgaWYgKCFyb290LT5wdHJzW3Jvb3RJbmRleF0pIHsKLSAgICAgICAgICAv
LyBUaGVyZSdzIG5vIG5vZGUgYXQgdGhpcyBpbmRleC4gTW92ZSBvbiB0byB0aGUgbmV4dCBpbmRl
eCBhdCB0aGUgcm9vdCBsZXZlbCwgY2xlYXJpbmcgdGhlCi0gICAgICAgICAgLy8gaW50ZXJtZWRp
YXRlIGFuZCBsZWFmIGluZGljZXMgc28gdGhhdCB3ZSBzdGFydCBmcm9tIHRoZSBiZWdpbm5pbmcg
b2YgdGhhdCBuZXh0IG5vZGUuCi0gICAgICAgICAga2V5ICs9IDEgPDwgKExFQUZfQklUUyArIElO
VEVSSU9SX0JJVFMpOwotICAgICAgICAgIGtleSAmPSB+KGxlYWZJbmRleE1hc2sgfCBpbnRlcm1l
ZGlhdGVJbmRleE1hc2spOwotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaW50ZXJtZWRpYXRlTm9kZSA9IHJlYWRlcihyb290LT5wdHJzW3Jvb3RJbmRleF0pOwotICAg
ICAgICBwcmV2aW91c1Jvb3RJbmRleCA9IHJvb3RJbmRleDsKLQotICAgICAgICAvLyBJbnZhbGlk
YXRlIHRoZSBwcmV2aW91cyBpbnRlcm1lZGlhdGUgaW5kZXggc2luY2Ugd2UndmUgbW92ZWQgb24g
dG8gYSBkaWZmZXJlbnQgbm9kZS4KLSAgICAgICAgcHJldmlvdXNJbnRlcm1lZGlhdGVJbmRleCA9
IGludmFsaWRJbmRleDsKLSAgICAgIH0KLQotICAgICAgaWYgKGludGVybWVkaWF0ZUluZGV4ICE9
IHByZXZpb3VzSW50ZXJtZWRpYXRlSW5kZXgpIHsKLSAgICAgICAgaWYgKCFpbnRlcm1lZGlhdGVO
b2RlLT5wdHJzW2ludGVybWVkaWF0ZUluZGV4XSkgewotICAgICAgICAgIC8vIFRoZXJlJ3Mgbm8g
bm9kZSBhdCB0aGlzIGluZGV4LiBNb3ZlIG9uIHRvIHRoZSBuZXh0IGluZGV4IGF0IHRoZSBpbnRl
cm1lZGlhdGUgbGV2ZWwsCi0gICAgICAgICAgLy8gY2xlYXJpbmcgdGhlIGxlYWYgaW5kZXggc28g
dGhhdCB3ZSBzdGFydCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgbm9kZS4KLSAgICAg
ICAgICBrZXkgKz0gMSA8PCBMRUFGX0JJVFM7Ci0gICAgICAgICAga2V5ICY9IH5sZWFmSW5kZXhN
YXNrOwotICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgbGVhZiA9IHJl
YWRlcihyZWludGVycHJldF9jYXN0PExlYWYqPihpbnRlcm1lZGlhdGVOb2RlLT5wdHJzW2ludGVy
bWVkaWF0ZUluZGV4XSkpOwotICAgICAgICBwcmV2aW91c0ludGVybWVkaWF0ZUluZGV4ID0gaW50
ZXJtZWRpYXRlSW5kZXg7Ci0gICAgICB9Ci0KLSAgICAgIGtleSArPSB2aXNpdG9yLnZpc2l0KGxl
YWYtPnZhbHVlc1tsZWFmSW5kZXhdKTsKLSAgICB9Ci0gIH0KLQotICB0ZW1wbGF0ZTxjbGFzcyBW
aXNpdG9yLCBjbGFzcyBNZW1vcnlSZWFkZXI+Ci0gIHZvaWQgdmlzaXRBbGxvY2F0aW9ucyhWaXNp
dG9yJiB2aXNpdG9yLCBjb25zdCBNZW1vcnlSZWFkZXImIHJlYWRlcikgewotICAgIHZpc2l0b3Iu
dmlzaXQocm9vdF8sIHNpemVvZihOb2RlKSk7Ci0KLSAgICBOb2RlKiByb290ID0gcmVhZGVyKHJv
b3RfKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IElOVEVSSU9SX0xFTkdUSDsgaSsrKSB7Ci0g
ICAgICBpZiAoIXJvb3QtPnB0cnNbaV0pCi0gICAgICAgIGNvbnRpbnVlOwotCi0gICAgICB2aXNp
dG9yLnZpc2l0KHJvb3QtPnB0cnNbaV0sIHNpemVvZihOb2RlKSk7Ci0gICAgICBOb2RlKiBuID0g
cmVhZGVyKHJvb3QtPnB0cnNbaV0pOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBJTlRFUklP
Ul9MRU5HVEg7IGorKykgewotICAgICAgICBpZiAoIW4tPnB0cnNbal0pCi0gICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgdmlzaXRvci52aXNpdChuLT5wdHJzW2pdLCBzaXplb2YoTGVhZikp
OwotICAgICAgfQotICAgIH0KLSAgfQotI2VuZGlmCi19OwotCi0jZW5kaWYgIC8vIFRDTUFMTE9D
X1BBR0VNQVBfSF9fCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9UQ1N5c3RlbUFsbG9jLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9UQ1N5c3RlbUFsbG9jLmNwcAkocmV2aXNpb24gMTgw
NDIzKQorKysgU291cmNlL1dURi93dGYvVENTeXN0ZW1BbGxvYy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNTEzICswLDAgQEAKLS8vIENvcHlyaWdodCAoYykgMjAwNSwgMjAwNywgR29vZ2xlIElu
Yy4KLS8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyAKLS8vIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLy8gbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotLy8gbWV0OgotLy8gCi0vLyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLy8gbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLy8gICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
Ly8gY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotLy8gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotLy8gZGlzdHJpYnV0aW9uLgotLy8gICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotLy8gY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLS8vIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0vLyAKLS8vIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLS8vICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLS8vIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0vLyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLS8vIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLS8vIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotLy8gREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0vLyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0vLyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLS8vIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0KLS8vIC0tLQotLy8gQXV0aG9yOiBTYW5qYXkgR2hlbWF3YXQK
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lmICEoZGVmaW5lZChVU0VfU1lTVEVNX01BTExPQykg
JiYgVVNFX1NZU1RFTV9NQUxMT0MpCi0jaW5jbHVkZSAiVENTeXN0ZW1BbGxvYy5oIgotCi0jaW5j
bHVkZSAiQXNzZXJ0aW9ucy5oIgotI2luY2x1ZGUgIkNoZWNrZWRBcml0aG1ldGljLmgiCi0jaW5j
bHVkZSAiVENTcGluTG9jay5oIgotI2luY2x1ZGUgIlZNVGFncy5oIgotI2luY2x1ZGUgPGFsZ29y
aXRobT4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLQotI2lmIE9TKFdJTkRPV1MpCi0jaW5jbHVkZSAi
d2luZG93cy5oIgotI2Vsc2UKLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5o
PgotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0jZW5kaWYKLQotI2lmbmRlZiBNQVBfQU5PTllNT1VT
Ci0jZGVmaW5lIE1BUF9BTk9OWU1PVVMgTUFQX0FOT04KLSNlbmRpZgotCi11c2luZyBuYW1lc3Bh
Y2Ugc3RkOwotCi0vLyBTdHJ1Y3R1cmUgZm9yIGRpc2NvdmVyaW5nIGFsaWdubWVudAotdW5pb24g
TWVtb3J5QWxpZ25lciB7Ci0gIHZvaWQqICBwOwotICBkb3VibGUgZDsKLSAgc2l6ZV90IHM7Ci19
OwotCi1zdGF0aWMgU3BpbkxvY2sgc3BpbmxvY2sgPSBTUElOTE9DS19JTklUSUFMSVpFUjsKLQot
Ly8gUGFnZSBzaXplIGlzIGluaXRpYWxpemVkIG9uIGRlbWFuZAotc3RhdGljIHNpemVfdCBwYWdl
c2l6ZSA9IDA7Ci0KLS8vIENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KLS8vCi0vLyBpZiB1c2Vf
ZGV2bWVtIGlzIHRydWUsIGVpdGhlciB1c2Vfc2JyayBvciB1c2VfbW1hcCBtdXN0IGFsc28gYmUg
dHJ1ZS4KLS8vIEZvciAyLjIga2VybmVscywgaXQgbG9va3MgbGlrZSB0aGUgc2JyayBhZGRyZXNz
IHNwYWNlICg1MDBNQmlzaCkgYW5kCi0vLyB0aGUgbW1hcCBhZGRyZXNzIHNwYWNlICgxMzAwTUJp
c2gpIGFyZSBkaXNqb2ludCwgc28gd2UgbmVlZCBib3RoIGFsbG9jYXRvcnMKLS8vIHRvIGdldCBh
cyBtdWNoIHZpcnR1YWwgbWVtb3J5IGFzIHBvc3NpYmxlLgotI2lmbmRlZiBXVEZfQ0hBTkdFUwot
c3RhdGljIGJvb2wgdXNlX2Rldm1lbSA9IGZhbHNlOwotc3RhdGljIGJvb2wgdXNlX3NicmsgPSBm
YWxzZTsKLSNlbmRpZgotCi0jaWYgSEFWRShNTUFQKQotc3RhdGljIGJvb2wgdXNlX21tYXAgPSB0
cnVlOwotI2VuZGlmIAotCi0jaWYgSEFWRShWSVJUVUFMQUxMT0MpCi1zdGF0aWMgYm9vbCB1c2Vf
VmlydHVhbEFsbG9jID0gdHJ1ZTsKLSNlbmRpZgotCi0vLyBGbGFncyB0byBrZWVwIHVzIGZyb20g
cmV0cnlpbmcgYWxsb2NhdG9ycyB0aGF0IGZhaWxlZC4KLXN0YXRpYyBib29sIGRldm1lbV9mYWls
dXJlID0gZmFsc2U7Ci1zdGF0aWMgYm9vbCBzYnJrX2ZhaWx1cmUgPSBmYWxzZTsKLXN0YXRpYyBi
b29sIG1tYXBfZmFpbHVyZSA9IGZhbHNlOwotc3RhdGljIGJvb2wgVmlydHVhbEFsbG9jX2ZhaWx1
cmUgPSBmYWxzZTsKLQotI2lmbmRlZiBXVEZfQ0hBTkdFUwotREVGSU5FX2ludDMyKG1hbGxvY19k
ZXZtZW1fc3RhcnQsIDAsCi0gICAgICAgICAgICAgIlBoeXNpY2FsIG1lbW9yeSBzdGFydGluZyBs
b2NhdGlvbiBpbiBNQiBmb3IgL2Rldi9tZW0gYWxsb2NhdGlvbi4iCi0gICAgICAgICAgICAgIiAg
U2V0dGluZyB0aGlzIHRvIDAgZGlzYWJsZXMgL2Rldi9tZW0gYWxsb2NhdGlvbiIpOwotREVGSU5F
X2ludDMyKG1hbGxvY19kZXZtZW1fbGltaXQsIDAsCi0gICAgICAgICAgICAgIlBoeXNpY2FsIG1l
bW9yeSBsaW1pdCBsb2NhdGlvbiBpbiBNQiBmb3IgL2Rldi9tZW0gYWxsb2NhdGlvbi4iCi0gICAg
ICAgICAgICAgIiAgU2V0dGluZyB0aGlzIHRvIDAgbWVhbnMgbm8gbGltaXQuIik7Ci0jZW5kaWYK
LQotI2lmbmRlZiBXVEZfQ0hBTkdFUwotCi1zdGF0aWMgdm9pZCogVHJ5U2JyayhzaXplX3Qgc2l6
ZSwgc2l6ZV90ICphY3R1YWxfc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkgewotICBzaXplID0gKChz
aXplICsgYWxpZ25tZW50IC0gMSkgLyBhbGlnbm1lbnQpICogYWxpZ25tZW50OwotICAKLSAgLy8g
Y291bGQgdGhlb3JldGljYWxseSByZXR1cm4gdGhlICJleHRyYSIgYnl0ZXMgaGVyZSwgYnV0IHRo
aXMKLSAgLy8gaXMgc2ltcGxlIGFuZCBjb3JyZWN0LgotICBpZiAoYWN0dWFsX3NpemUpIAotICAg
ICphY3R1YWxfc2l6ZSA9IHNpemU7Ci0gICAgCi0gIHZvaWQqIHJlc3VsdCA9IHNicmsoc2l6ZSk7
Ci0gIGlmIChyZXN1bHQgPT0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKSB7Ci0gICAgc2Jy
a19mYWlsdXJlID0gdHJ1ZTsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotCi0gIC8vIElzIGl0IGFs
aWduZWQ/Ci0gIHVpbnRwdHJfdCBwdHIgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmVz
dWx0KTsKLSAgaWYgKChwdHIgJiAoYWxpZ25tZW50LTEpKSA9PSAwKSAgcmV0dXJuIHJlc3VsdDsK
LQotICAvLyBUcnkgdG8gZ2V0IG1vcmUgbWVtb3J5IGZvciBhbGlnbm1lbnQKLSAgc2l6ZV90IGV4
dHJhID0gYWxpZ25tZW50IC0gKHB0ciAmIChhbGlnbm1lbnQtMSkpOwotICB2b2lkKiByMiA9IHNi
cmsoZXh0cmEpOwotICBpZiAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHIyKSA9PSAocHRy
ICsgc2l6ZSkpIHsKLSAgICAvLyBDb250aWd1b3VzIHdpdGggcHJldmlvdXMgcmVzdWx0Ci0gICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHB0ciArIGV4dHJhKTsKLSAgfQotCi0gIC8v
IEdpdmUgdXAgYW5kIGFzayBmb3IgInNpemUgKyBhbGlnbm1lbnQgLSAxIiBieXRlcyBzbwotICAv
LyB0aGF0IHdlIGNhbiBmaW5kIGFuIGFsaWduZWQgcmVnaW9uIHdpdGhpbiBpdC4KLSAgcmVzdWx0
ID0gc2JyayhzaXplICsgYWxpZ25tZW50IC0gMSk7Ci0gIGlmIChyZXN1bHQgPT0gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oLTEpKSB7Ci0gICAgc2Jya19mYWlsdXJlID0gdHJ1ZTsKLSAgICByZXR1
cm4gTlVMTDsKLSAgfQotICBwdHIgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmVzdWx0
KTsKLSAgaWYgKChwdHIgJiAoYWxpZ25tZW50LTEpKSAhPSAwKSB7Ci0gICAgcHRyICs9IGFsaWdu
bWVudCAtIChwdHIgJiAoYWxpZ25tZW50LTEpKTsKLSAgfQotICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ocHRyKTsKLX0KLQotI2VuZGlmIC8qIGlmbmRlZihXVEZfQ0hBTkdFUykgKi8K
LQotI2lmIEhBVkUoTU1BUCkKLQotc3RhdGljIHZvaWQqIFRyeU1tYXAoc2l6ZV90IHNpemUsIHNp
emVfdCAqYWN0dWFsX3NpemUsIHNpemVfdCBhbGlnbm1lbnQpIHsKLSAgLy8gRW5mb3JjZSBwYWdl
IGFsaWdubWVudAotICBpZiAocGFnZXNpemUgPT0gMCkgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgp
OwotICBpZiAoYWxpZ25tZW50IDwgcGFnZXNpemUpIGFsaWdubWVudCA9IHBhZ2VzaXplOwotICBz
aXplID0gKChzaXplICsgYWxpZ25tZW50IC0gMSkgLyBhbGlnbm1lbnQpICogYWxpZ25tZW50Owot
ICAKLSAgLy8gY291bGQgdGhlb3JldGljYWxseSByZXR1cm4gdGhlICJleHRyYSIgYnl0ZXMgaGVy
ZSwgYnV0IHRoaXMKLSAgLy8gaXMgc2ltcGxlIGFuZCBjb3JyZWN0LgotICBpZiAoYWN0dWFsX3Np
emUpIAotICAgICphY3R1YWxfc2l6ZSA9IHNpemU7Ci0gICAgCi0gIC8vIEFzayBmb3IgZXh0cmEg
bWVtb3J5IGlmIGFsaWdubWVudCA+IHBhZ2VzaXplCi0gIHNpemVfdCBleHRyYSA9IDA7Ci0gIGlm
IChhbGlnbm1lbnQgPiBwYWdlc2l6ZSkgewotICAgIGV4dHJhID0gYWxpZ25tZW50IC0gcGFnZXNp
emU7Ci0gIH0KLSAgQ2hlY2tlZDxzaXplX3Q+IG1hcFNpemUgPSBDaGVja2VkPHNpemVfdD4oc2l6
ZSkgKyBleHRyYSArIDIgKiBwYWdlc2l6ZTsKLSAgdm9pZCogcmVzdWx0ID0gbW1hcChOVUxMLCBt
YXBTaXplLnVuc2FmZUdldCgpLAotICAgICAgICAgICAgICAgICAgICAgIFBST1RfUkVBRCB8IFBS
T1RfV1JJVEUsCi0gICAgICAgICAgICAgICAgICAgICAgTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9V
UywKLSAgICAgICAgICAgICAgICAgICAgICBWTV9UQUdfRk9SX1RDTUFMTE9DX01FTU9SWSwgMCk7
Ci0gIGlmIChyZXN1bHQgPT0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oTUFQX0ZBSUxFRCkpIHsK
LSAgICBtbWFwX2ZhaWx1cmUgPSB0cnVlOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIG1tYXAo
cmVzdWx0LCBwYWdlc2l6ZSwgUFJPVF9OT05FLCBNQVBfRklYRUQgfCBNQVBfUFJJVkFURSB8IE1B
UF9BTk9OLCBWTV9UQUdfRk9SX1RDTUFMTE9DX01FTU9SWSwgMCk7Ci0gIG1tYXAoc3RhdGljX2Nh
c3Q8Y2hhcio+KHJlc3VsdCkgKyAobWFwU2l6ZSAtIHBhZ2VzaXplKS51bnNhZmVHZXQoKSwgcGFn
ZXNpemUsIFBST1RfTk9ORSwgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgVk1f
VEFHX0ZPUl9UQ01BTExPQ19NRU1PUlksIDApOwotICByZXN1bHQgPSBzdGF0aWNfY2FzdDxjaGFy
Kj4ocmVzdWx0KSArIHBhZ2VzaXplOwotICAvLyBBZGp1c3QgdGhlIHJldHVybiBtZW1vcnkgc28g
aXQgaXMgYWxpZ25lZAotICB1aW50cHRyX3QgcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KHJlc3VsdCk7Ci0gIHNpemVfdCBhZGp1c3QgPSAwOwotICBpZiAoKHB0ciAmIChhbGlnbm1l
bnQgLSAxKSkgIT0gMCkgewotICAgIGFkanVzdCA9IGFsaWdubWVudCAtIChwdHIgJiAoYWxpZ25t
ZW50IC0gMSkpOwotICB9Ci0KLSAgLy8gUmV0dXJuIHRoZSB1bnVzZWQgbWVtb3J5IHRvIHRoZSBz
eXN0ZW0KLSAgaWYgKGFkanVzdCA+IDApIHsKLSAgICBtdW5tYXAocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4ocHRyKSwgYWRqdXN0KTsKLSAgfQotICBpZiAoYWRqdXN0IDwgZXh0cmEpIHsKLSAgICBt
dW5tYXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocHRyICsgYWRqdXN0ICsgc2l6ZSksIGV4dHJh
IC0gYWRqdXN0KTsKLSAgfQotCi0gIHB0ciArPSBhZGp1c3Q7Ci0gIHJldHVybiByZWludGVycHJl
dF9jYXN0PHZvaWQqPihwdHIpOwotfQotCi0jZW5kaWYgLyogSEFWRShNTUFQKSAqLwotCi0jaWYg
SEFWRShWSVJUVUFMQUxMT0MpCi0KLXN0YXRpYyB2b2lkKiBUcnlWaXJ0dWFsQWxsb2Moc2l6ZV90
IHNpemUsIHNpemVfdCAqYWN0dWFsX3NpemUsIHNpemVfdCBhbGlnbm1lbnQpIHsKLSAgLy8gRW5m
b3JjZSBwYWdlIGFsaWdubWVudAotICBpZiAocGFnZXNpemUgPT0gMCkgewotICAgIFNZU1RFTV9J
TkZPIHN5c3RlbV9pbmZvOwotICAgIEdldFN5c3RlbUluZm8oJnN5c3RlbV9pbmZvKTsKLSAgICBw
YWdlc2l6ZSA9IHN5c3RlbV9pbmZvLmR3UGFnZVNpemU7Ci0gIH0KLQotICBpZiAoYWxpZ25tZW50
IDwgcGFnZXNpemUpIGFsaWdubWVudCA9IHBhZ2VzaXplOwotICBzaXplID0gKChzaXplICsgYWxp
Z25tZW50IC0gMSkgLyBhbGlnbm1lbnQpICogYWxpZ25tZW50OwotCi0gIC8vIGNvdWxkIHRoZW9y
ZXRpY2FsbHkgcmV0dXJuIHRoZSAiZXh0cmEiIGJ5dGVzIGhlcmUsIGJ1dCB0aGlzCi0gIC8vIGlz
IHNpbXBsZSBhbmQgY29ycmVjdC4KLSAgaWYgKGFjdHVhbF9zaXplKSAKLSAgICAqYWN0dWFsX3Np
emUgPSBzaXplOwotICAgIAotICAvLyBBc2sgZm9yIGV4dHJhIG1lbW9yeSBpZiBhbGlnbm1lbnQg
PiBwYWdlc2l6ZQotICBzaXplX3QgZXh0cmEgPSAwOwotICBpZiAoYWxpZ25tZW50ID4gcGFnZXNp
emUpIHsKLSAgICBleHRyYSA9IGFsaWdubWVudCAtIHBhZ2VzaXplOwotICB9Ci0gIHZvaWQqIHJl
c3VsdCA9IFZpcnR1YWxBbGxvYyhOVUxMLCBzaXplICsgZXh0cmEsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBNRU1fUkVTRVJWRSB8IE1FTV9DT01NSVQgfCBNRU1fVE9QX0RPV04sIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFHRV9SRUFEV1JJVEUpOwotCi0gIGlmIChy
ZXN1bHQgPT0gTlVMTCkgewotICAgIFZpcnR1YWxBbGxvY19mYWlsdXJlID0gdHJ1ZTsKLSAgICBy
ZXR1cm4gTlVMTDsKLSAgfQotCi0gIC8vIEFkanVzdCB0aGUgcmV0dXJuIG1lbW9yeSBzbyBpdCBp
cyBhbGlnbmVkCi0gIHVpbnRwdHJfdCBwdHIgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
cmVzdWx0KTsKLSAgc2l6ZV90IGFkanVzdCA9IDA7Ci0gIGlmICgocHRyICYgKGFsaWdubWVudCAt
IDEpKSAhPSAwKSB7Ci0gICAgYWRqdXN0ID0gYWxpZ25tZW50IC0gKHB0ciAmIChhbGlnbm1lbnQg
LSAxKSk7Ci0gIH0KLQotICAvLyBSZXR1cm4gdGhlIHVudXNlZCBtZW1vcnkgdG8gdGhlIHN5c3Rl
bSAtIHdlJ2QgbGlrZSB0byByZWxlYXNlIGJ1dCB0aGUgYmVzdCB3ZSBjYW4gZG8KLSAgLy8gaXMg
ZGVjb21taXQsIHNpbmNlIFdpbmRvd3Mgb25seSBsZXRzIHlvdSBmcmVlIHRoZSB3aG9sZSBhbGxv
Y2F0aW9uLgotICBpZiAoYWRqdXN0ID4gMCkgewotICAgIFZpcnR1YWxGcmVlKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KHB0ciksIGFkanVzdCwgTUVNX0RFQ09NTUlUKTsKLSAgfQotICBpZiAoYWRq
dXN0IDwgZXh0cmEpIHsKLSAgICBWaXJ0dWFsRnJlZShyZWludGVycHJldF9jYXN0PHZvaWQqPihw
dHIgKyBhZGp1c3QgKyBzaXplKSwgZXh0cmEtYWRqdXN0LCBNRU1fREVDT01NSVQpOwotICB9Ci0K
LSAgcHRyICs9IGFkanVzdDsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHB0cik7
Ci19Ci0KLSNlbmRpZiAvKiBIQVZFKE1NQVApICovCi0KLSNpZm5kZWYgV1RGX0NIQU5HRVMKLXN0
YXRpYyB2b2lkKiBUcnlEZXZNZW0oc2l6ZV90IHNpemUsIHNpemVfdCAqYWN0dWFsX3NpemUsIHNp
emVfdCBhbGlnbm1lbnQpIHsKLSAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAg
c3RhdGljIG9mZl90IHBoeXNtZW1fYmFzZTsgIC8vIG5leHQgcGh5c2ljYWwgbWVtb3J5IGFkZHJl
c3MgdG8gYWxsb2NhdGUKLSAgc3RhdGljIG9mZl90IHBoeXNtZW1fbGltaXQ7IC8vIG1heGltdW0g
cGh5c2ljYWwgYWRkcmVzcyBhbGxvd2VkCi0gIHN0YXRpYyBpbnQgcGh5c21lbV9mZDsgICAgICAv
LyBmaWxlIGRlc2NyaXB0b3IgZm9yIC9kZXYvbWVtCi0gIAotICAvLyBDaGVjayBpZiB3ZSBzaG91
bGQgdXNlIC9kZXYvbWVtIGFsbG9jYXRpb24uICBOb3RlIHRoYXQgaXQgbWF5IHRha2UKLSAgLy8g
YSB3aGlsZSB0byBnZXQgdGhpcyBmbGFnIGluaXRpYWxpemVkLCBzbyBtZWFud2hpbGUgd2UgZmFs
bCBiYWNrIHRvCi0gIC8vIHRoZSBuZXh0IGFsbG9jYXRvci4gIChJdCBsb29rcyBsaWtlIDdNQiBn
ZXRzIGFsbG9jYXRlZCBiZWZvcmUKLSAgLy8gdGhpcyBmbGFnIGdldHMgaW5pdGlhbGl6ZWQgLWto
ci4pCi0gIGlmIChGTEFHU19tYWxsb2NfZGV2bWVtX3N0YXJ0ID09IDApIHsKLSAgICAvLyBOT1RF
OiBub3QgYSBkZXZtZW1fZmFpbHVyZSAtIHdlJ2QgbGlrZSBUQ01hbGxvY19TeXN0ZW1BbGxvYyB0
bwotICAgIC8vIHRyeSB1cyBhZ2FpbiBuZXh0IHRpbWUuCi0gICAgcmV0dXJuIE5VTEw7Ci0gIH0K
LSAgCi0gIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICBwaHlzbWVtX2ZkID0gb3BlbigiL2Rldi9t
ZW0iLCBPX1JEV1IpOwotICAgIGlmIChwaHlzbWVtX2ZkIDwgMCkgewotICAgICAgZGV2bWVtX2Zh
aWx1cmUgPSB0cnVlOwotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHBoeXNtZW1fYmFz
ZSA9IEZMQUdTX21hbGxvY19kZXZtZW1fc3RhcnQqMTAyNExMKjEwMjRMTDsKLSAgICBwaHlzbWVt
X2xpbWl0ID0gRkxBR1NfbWFsbG9jX2Rldm1lbV9saW1pdCoxMDI0TEwqMTAyNExMOwotICAgIGlu
aXRpYWxpemVkID0gdHJ1ZTsKLSAgfQotICAKLSAgLy8gRW5mb3JjZSBwYWdlIGFsaWdubWVudAot
ICBpZiAocGFnZXNpemUgPT0gMCkgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOwotICBpZiAoYWxp
Z25tZW50IDwgcGFnZXNpemUpIGFsaWdubWVudCA9IHBhZ2VzaXplOwotICBzaXplID0gKChzaXpl
ICsgYWxpZ25tZW50IC0gMSkgLyBhbGlnbm1lbnQpICogYWxpZ25tZW50OwotICAgIAotICAvLyBj
b3VsZCB0aGVvcmV0aWNhbGx5IHJldHVybiB0aGUgImV4dHJhIiBieXRlcyBoZXJlLCBidXQgdGhp
cwotICAvLyBpcyBzaW1wbGUgYW5kIGNvcnJlY3QuCi0gIGlmIChhY3R1YWxfc2l6ZSkKLSAgICAq
YWN0dWFsX3NpemUgPSBzaXplOwotICAgIAotICAvLyBBc2sgZm9yIGV4dHJhIG1lbW9yeSBpZiBh
bGlnbm1lbnQgPiBwYWdlc2l6ZQotICBzaXplX3QgZXh0cmEgPSAwOwotICBpZiAoYWxpZ25tZW50
ID4gcGFnZXNpemUpIHsKLSAgICBleHRyYSA9IGFsaWdubWVudCAtIHBhZ2VzaXplOwotICB9Ci0g
IAotICAvLyBjaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhbnkgbWVtb3J5IGxlZnQKLSAgaWYgKHBo
eXNtZW1fbGltaXQgIT0gMCAmJiBwaHlzbWVtX2Jhc2UgKyBzaXplICsgZXh0cmEgPiBwaHlzbWVt
X2xpbWl0KSB7Ci0gICAgZGV2bWVtX2ZhaWx1cmUgPSB0cnVlOwotICAgIHJldHVybiBOVUxMOwot
ICB9Ci0gIHZvaWQgKnJlc3VsdCA9IG1tYXAoMCwgc2l6ZSArIGV4dHJhLCBQUk9UX1JFQUQgfCBQ
Uk9UX1dSSVRFLAotICAgICAgICAgICAgICAgICAgICAgIE1BUF9TSEFSRUQsIHBoeXNtZW1fZmQs
IHBoeXNtZW1fYmFzZSk7Ci0gIGlmIChyZXN1bHQgPT0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
TUFQX0ZBSUxFRCkpIHsKLSAgICBkZXZtZW1fZmFpbHVyZSA9IHRydWU7Ci0gICAgcmV0dXJuIE5V
TEw7Ci0gIH0KLSAgdWludHB0cl90IHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihy
ZXN1bHQpOwotICAKLSAgLy8gQWRqdXN0IHRoZSByZXR1cm4gbWVtb3J5IHNvIGl0IGlzIGFsaWdu
ZWQKLSAgc2l6ZV90IGFkanVzdCA9IDA7Ci0gIGlmICgocHRyICYgKGFsaWdubWVudCAtIDEpKSAh
PSAwKSB7Ci0gICAgYWRqdXN0ID0gYWxpZ25tZW50IC0gKHB0ciAmIChhbGlnbm1lbnQgLSAxKSk7
Ci0gIH0KLSAgCi0gIC8vIFJldHVybiB0aGUgdW51c2VkIHZpcnR1YWwgbWVtb3J5IHRvIHRoZSBz
eXN0ZW0KLSAgaWYgKGFkanVzdCA+IDApIHsKLSAgICBtdW5tYXAocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4ocHRyKSwgYWRqdXN0KTsKLSAgfQotICBpZiAoYWRqdXN0IDwgZXh0cmEpIHsKLSAgICBt
dW5tYXAocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocHRyICsgYWRqdXN0ICsgc2l6ZSksIGV4dHJh
IC0gYWRqdXN0KTsKLSAgfQotICAKLSAgcHRyICs9IGFkanVzdDsKLSAgcGh5c21lbV9iYXNlICs9
IGFkanVzdCArIHNpemU7Ci0gIAotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocHRy
KTsKLX0KLSNlbmRpZgotCi12b2lkKiBUQ01hbGxvY19TeXN0ZW1BbGxvYyhzaXplX3Qgc2l6ZSwg
c2l6ZV90ICphY3R1YWxfc2l6ZSwgc2l6ZV90IGFsaWdubWVudCkgewotICAvLyBEaXNjYXJkIHJl
cXVlc3RzIHRoYXQgb3ZlcmZsb3cKLSAgaWYgKHNpemUgKyBhbGlnbm1lbnQgPCBzaXplKSByZXR1
cm4gTlVMTDsKLSAgICAKLSAgU3BpbkxvY2tIb2xkZXIgbG9ja19ob2xkZXIoJnNwaW5sb2NrKTsK
LQotICAvLyBFbmZvcmNlIG1pbmltdW0gYWxpZ25tZW50Ci0gIGlmIChhbGlnbm1lbnQgPCBzaXpl
b2YoTWVtb3J5QWxpZ25lcikpIGFsaWdubWVudCA9IHNpemVvZihNZW1vcnlBbGlnbmVyKTsKLQot
ICAvLyBUcnkgdHdpY2UsIG9uY2UgYXZvaWRpbmcgYWxsb2NhdG9ycyB0aGF0IGZhaWxlZCBiZWZv
cmUsIGFuZCBvbmNlCi0gIC8vIG1vcmUgdHJ5aW5nIGFsbCBhbGxvY2F0b3JzIGV2ZW4gaWYgdGhl
eSBmYWlsZWQgYmVmb3JlLgotICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgewotCi0jaWZu
ZGVmIFdURl9DSEFOR0VTCi0gICAgaWYgKHVzZV9kZXZtZW0gJiYgIWRldm1lbV9mYWlsdXJlKSB7
Ci0gICAgICB2b2lkKiByZXN1bHQgPSBUcnlEZXZNZW0oc2l6ZSwgYWN0dWFsX3NpemUsIGFsaWdu
bWVudCk7Ci0gICAgICBpZiAocmVzdWx0ICE9IE5VTEwpIHJldHVybiByZXN1bHQ7Ci0gICAgfQot
ICAgIAotICAgIGlmICh1c2Vfc2JyayAmJiAhc2Jya19mYWlsdXJlKSB7Ci0gICAgICB2b2lkKiBy
ZXN1bHQgPSBUcnlTYnJrKHNpemUsIGFjdHVhbF9zaXplLCBhbGlnbm1lbnQpOwotICAgICAgaWYg
KHJlc3VsdCAhPSBOVUxMKSByZXR1cm4gcmVzdWx0OwotICAgIH0KLSNlbmRpZgotCi0jaWYgSEFW
RShNTUFQKSAgICAKLSAgICBpZiAodXNlX21tYXAgJiYgIW1tYXBfZmFpbHVyZSkgewotICAgICAg
dm9pZCogcmVzdWx0ID0gVHJ5TW1hcChzaXplLCBhY3R1YWxfc2l6ZSwgYWxpZ25tZW50KTsKLSAg
ICAgIGlmIChyZXN1bHQgIT0gTlVMTCkgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0jZW5kaWYKLQot
I2lmIEhBVkUoVklSVFVBTEFMTE9DKQotICAgIGlmICh1c2VfVmlydHVhbEFsbG9jICYmICFWaXJ0
dWFsQWxsb2NfZmFpbHVyZSkgewotICAgICAgdm9pZCogcmVzdWx0ID0gVHJ5VmlydHVhbEFsbG9j
KHNpemUsIGFjdHVhbF9zaXplLCBhbGlnbm1lbnQpOwotICAgICAgaWYgKHJlc3VsdCAhPSBOVUxM
KSByZXR1cm4gcmVzdWx0OwotICAgIH0KLSNlbmRpZgotCi0gICAgLy8gbm90aGluZyB3b3JrZWQg
LSByZXNldCBmYWlsdXJlIGZsYWdzIGFuZCB0cnkgYWdhaW4KLSAgICBkZXZtZW1fZmFpbHVyZSA9
IGZhbHNlOwotICAgIHNicmtfZmFpbHVyZSA9IGZhbHNlOwotICAgIG1tYXBfZmFpbHVyZSA9IGZh
bHNlOwotICAgIFZpcnR1YWxBbGxvY19mYWlsdXJlID0gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIE5V
TEw7Ci19Ci0KLSNpZiBIQVZFKE1BRFZfRlJFRV9SRVVTRSkKLQotdm9pZCBUQ01hbGxvY19TeXN0
ZW1SZWxlYXNlKHZvaWQqIHN0YXJ0LCBzaXplX3QgbGVuZ3RoKQotewotICAgIGludCBtYWR2aXNl
UmVzdWx0OwotCi0gICAgd2hpbGUgKChtYWR2aXNlUmVzdWx0ID0gbWFkdmlzZShzdGFydCwgbGVu
Z3RoLCBNQURWX0ZSRUVfUkVVU0FCTEUpKSA9PSAtMSAmJiBlcnJubyA9PSBFQUdBSU4pIHsgfQot
Ci0gICAgLy8gQWx0aG91Z2ggcmVhbGx5IGFkdmlzb3J5LCBpZiBtYWR2aXNlIGZhaWwsIHdlIHdh
bnQgdG8ga25vdyBhYm91dCBpdC4KLSAgICBBU1NFUlRfVU5VU0VEKG1hZHZpc2VSZXN1bHQsIG1h
ZHZpc2VSZXN1bHQgIT0gLTEpOwotfQotCi0jZWxpZiBIQVZFKE1BRFZfRlJFRSkgfHwgSEFWRShN
QURWX0RPTlRORUVEKQotCi12b2lkIFRDTWFsbG9jX1N5c3RlbVJlbGVhc2Uodm9pZCogc3RhcnQs
IHNpemVfdCBsZW5ndGgpCi17Ci0gICAgLy8gTUFEVl9GUkVFIGNsZWFycyB0aGUgbW9kaWZpZWQg
Yml0IG9uIHBhZ2VzLCB3aGljaCBhbGxvd3MKLSAgICAvLyB0aGVtIHRvIGJlIGRpc2NhcmRlZCBp
bW1lZGlhdGVseS4KLSNpZiBIQVZFKE1BRFZfRlJFRSkKLSAgICBjb25zdCBpbnQgYWR2aWNlID0g
TUFEVl9GUkVFOwotI2Vsc2UKLSAgICBjb25zdCBpbnQgYWR2aWNlID0gTUFEVl9ET05UTkVFRDsK
LSNlbmRpZgotICBpZiAocGFnZXNpemUgPT0gMCkgcGFnZXNpemUgPSBnZXRwYWdlc2l6ZSgpOwot
ICBjb25zdCBzaXplX3QgcGFnZW1hc2sgPSBwYWdlc2l6ZSAtIDE7Ci0KLSAgc2l6ZV90IG5ld19z
dGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90PihzdGFydCk7Ci0gIHNpemVfdCBlbmQgPSBu
ZXdfc3RhcnQgKyBsZW5ndGg7Ci0gIHNpemVfdCBuZXdfZW5kID0gZW5kOwotCi0gIC8vIFJvdW5k
IHVwIHRoZSBzdGFydGluZyBhZGRyZXNzIGFuZCByb3VuZCBkb3duIHRoZSBlbmRpbmcgYWRkcmVz
cwotICAvLyB0byBiZSBwYWdlIGFsaWduZWQ6Ci0gIG5ld19zdGFydCA9IChuZXdfc3RhcnQgKyBw
YWdlc2l6ZSAtIDEpICYgfnBhZ2VtYXNrOwotICBuZXdfZW5kID0gbmV3X2VuZCAmIH5wYWdlbWFz
azsKLQotICBBU1NFUlQoKG5ld19zdGFydCAmIHBhZ2VtYXNrKSA9PSAwKTsKLSAgQVNTRVJUKChu
ZXdfZW5kICYgcGFnZW1hc2spID09IDApOwotICBBU1NFUlQobmV3X3N0YXJ0ID49IHJlaW50ZXJw
cmV0X2Nhc3Q8c2l6ZV90PihzdGFydCkpOwotICBBU1NFUlQobmV3X2VuZCA8PSBlbmQpOwotCi0g
IGlmIChuZXdfZW5kID4gbmV3X3N0YXJ0KSB7Ci0gICAgLy8gTm90ZSAtLSBpZ25vcmluZyBtb3N0
IHJldHVybiBjb2RlcywgYmVjYXVzZSBpZiB0aGlzIGZhaWxzIGl0Ci0gICAgLy8gZG9lc24ndCBt
YXR0ZXIuLi4KLSAgICB3aGlsZSAobWFkdmlzZShyZWludGVycHJldF9jYXN0PGNoYXIqPihuZXdf
c3RhcnQpLCBuZXdfZW5kIC0gbmV3X3N0YXJ0LAotICAgICAgICAgICAgICAgICAgIGFkdmljZSkg
PT0gLTEgJiYKLSAgICAgICAgICAgZXJybm8gPT0gRUFHQUlOKSB7Ci0gICAgICAvLyBOT1AKLSAg
ICB9Ci0gIH0KLX0KLQotI2VsaWYgSEFWRShNTUFQKQotCi12b2lkIFRDTWFsbG9jX1N5c3RlbVJl
bGVhc2Uodm9pZCogc3RhcnQsIHNpemVfdCBsZW5ndGgpCi17Ci0gIHZvaWQqIG5ld0FkZHJlc3Mg
PSBtbWFwKHN0YXJ0LCBsZW5ndGgsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9QUklWQVRF
IHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9GSVhFRCwgLTEsIDApOwotICAvLyBJZiB0aGUgbW1hcCBm
YWlsZWQgdGhlbiB0aGF0J3Mgb2ssIHdlIGp1c3Qgd29uJ3QgcmV0dXJuIHRoZSBtZW1vcnkgdG8g
dGhlIHN5c3RlbS4KLSAgQVNTRVJUX1VOVVNFRChuZXdBZGRyZXNzLCBuZXdBZGRyZXNzID09IHN0
YXJ0IHx8IG5ld0FkZHJlc3MgPT0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oTUFQX0ZBSUxFRCkp
OwotfQotCi0jZWxpZiBIQVZFKFZJUlRVQUxBTExPQykKLQotdm9pZCBUQ01hbGxvY19TeXN0ZW1S
ZWxlYXNlKHZvaWQqIHN0YXJ0LCBzaXplX3QgbGVuZ3RoKQotewotICAgIGlmIChWaXJ0dWFsRnJl
ZShzdGFydCwgbGVuZ3RoLCBNRU1fREVDT01NSVQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBUaGUgZGVjb21taXQgbWF5IGZhaWwgaWYgdGhlIG1lbW9yeSByZWdpb24gY29uc2lzdHMgb2Yg
YWxsb2NhdGlvbnMKLSAgICAvLyBmcm9tIG1vcmUgdGhhbiBvbmUgY2FsbCB0byBWaXJ0dWFsQWxs
b2MuICBJbiB0aGlzIGNhc2UsIGZhbGwgYmFjayB0bwotICAgIC8vIHVzaW5nIFZpcnR1YWxRdWVy
eSB0byByZXRyaWV2ZSB0aGUgYWxsb2NhdGlvbiBib3VuZGFyaWVzIGFuZCBkZWNvbW1pdAotICAg
IC8vIHRoZW0gZWFjaCBpbmRpdmlkdWFsbHkuCi0KLSAgICBjaGFyKiBwdHIgPSBzdGF0aWNfY2Fz
dDxjaGFyKj4oc3RhcnQpOwotICAgIGNoYXIqIGVuZCA9IHB0ciArIGxlbmd0aDsKLSAgICBNRU1P
UllfQkFTSUNfSU5GT1JNQVRJT04gaW5mbzsKLSAgICB3aGlsZSAocHRyIDwgZW5kKSB7Ci0gICAg
ICAgIHNpemVfdCByZXN1bHRTaXplID0gVmlydHVhbFF1ZXJ5KHB0ciwgJmluZm8sIHNpemVvZihp
bmZvKSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0U2l6ZSwgcmVzdWx0U2l6ZSA9PSBz
aXplb2YoaW5mbykpOwotCi0gICAgICAgIHNpemVfdCBkZWNvbW1pdFNpemUgPSBtaW48c2l6ZV90
PihpbmZvLlJlZ2lvblNpemUsIGVuZCAtIHB0cik7Ci0gICAgICAgIEJPT0wgc3VjY2VzcyA9IFZp
cnR1YWxGcmVlKHB0ciwgZGVjb21taXRTaXplLCBNRU1fREVDT01NSVQpOwotICAgICAgICBBU1NF
UlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwotICAgICAgICBwdHIgKz0gZGVjb21taXRTaXpl
OwotICAgIH0KLX0KLQotI2Vsc2UKLQotLy8gUGxhdGZvcm1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCBy
ZXR1cm5pbmcgbWVtb3J5IHVzZSBhbiBlbXB0eSBpbmxpbmUgdmVyc2lvbiBvZiBUQ01hbGxvY19T
eXN0ZW1SZWxlYXNlCi0vLyBkZWNsYXJlZCBpbiBUQ1N5c3RlbUFsbG9jLmgKLQotI2VuZGlmCi0K
LSNpZiBIQVZFKE1BRFZfRlJFRV9SRVVTRSkKLQotdm9pZCBUQ01hbGxvY19TeXN0ZW1Db21taXQo
dm9pZCogc3RhcnQsIHNpemVfdCBsZW5ndGgpCi17Ci0gICAgd2hpbGUgKG1hZHZpc2Uoc3RhcnQs
IGxlbmd0aCwgTUFEVl9GUkVFX1JFVVNFKSA9PSAtMSAmJiBlcnJubyA9PSBFQUdBSU4pIHsgfQot
fQotCi0jZWxpZiBIQVZFKFZJUlRVQUxBTExPQykKLQotdm9pZCBUQ01hbGxvY19TeXN0ZW1Db21t
aXQodm9pZCogc3RhcnQsIHNpemVfdCBsZW5ndGgpCi17Ci0gICAgaWYgKFZpcnR1YWxBbGxvYyhz
dGFydCwgbGVuZ3RoLCBNRU1fQ09NTUlULCBQQUdFX1JFQURXUklURSkgPT0gc3RhcnQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIFRoZSBjb21taXQgbWF5IGZhaWwgaWYgdGhlIG1lbW9yeSBy
ZWdpb24gY29uc2lzdHMgb2YgYWxsb2NhdGlvbnMKLSAgICAvLyBmcm9tIG1vcmUgdGhhbiBvbmUg
Y2FsbCB0byBWaXJ0dWFsQWxsb2MuICBJbiB0aGlzIGNhc2UsIGZhbGwgYmFjayB0bwotICAgIC8v
IHVzaW5nIFZpcnR1YWxRdWVyeSB0byByZXRyaWV2ZSB0aGUgYWxsb2NhdGlvbiBib3VuZGFyaWVz
IGFuZCBjb21taXQgdGhlbQotICAgIC8vIGVhY2ggaW5kaXZpZHVhbGx5LgotCi0gICAgY2hhciog
cHRyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHN0YXJ0KTsKLSAgICBjaGFyKiBlbmQgPSBwdHIgKyBs
ZW5ndGg7Ci0gICAgTUVNT1JZX0JBU0lDX0lORk9STUFUSU9OIGluZm87Ci0gICAgd2hpbGUgKHB0
ciA8IGVuZCkgewotICAgICAgICBzaXplX3QgcmVzdWx0U2l6ZSA9IFZpcnR1YWxRdWVyeShwdHIs
ICZpbmZvLCBzaXplb2YoaW5mbykpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdFNpemUs
IHJlc3VsdFNpemUgPT0gc2l6ZW9mKGluZm8pKTsKLQotICAgICAgICBzaXplX3QgY29tbWl0U2l6
ZSA9IG1pbjxzaXplX3Q+KGluZm8uUmVnaW9uU2l6ZSwgZW5kIC0gcHRyKTsKLSAgICAgICAgdm9p
ZCogbmV3QWRkcmVzcyA9IFZpcnR1YWxBbGxvYyhwdHIsIGNvbW1pdFNpemUsIE1FTV9DT01NSVQs
IFBBR0VfUkVBRFdSSVRFKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChuZXdBZGRyZXNzLCBuZXdB
ZGRyZXNzID09IHB0cik7Ci0gICAgICAgIHB0ciArPSBjb21taXRTaXplOwotICAgIH0KLX0KLQot
I2Vsc2UKLQotLy8gUGxhdGZvcm1zIHRoYXQgZG9uJ3QgbmVlZCB0byBleHBsaWNpdGx5IGNvbW1p
dCBtZW1vcnkgdXNlIGFuIGVtcHR5IGlubGluZSB2ZXJzaW9uIG9mIFRDTWFsbG9jX1N5c3RlbUNv
bW1pdAotLy8gZGVjbGFyZWQgaW4gVENTeXN0ZW1BbGxvYy5oCi0KLSNlbmRpZgotCi0jZW5kaWYg
Ly8gI2lmICEoZGVmaW5lZChVU0VfU1lTVEVNX01BTExPQykgJiYgVVNFX1NZU1RFTV9NQUxMT0Mp
Ci0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1RDU3lzdGVtQWxsb2MuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9UQ1N5c3RlbUFsbG9jLmgJKHJldmlzaW9uIDE4MDQyMykKKysrIFNvdXJj
ZS9XVEYvd3RmL1RDU3lzdGVtQWxsb2MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NSArMCwwIEBA
Ci0vLyBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcsIEdvb2dsZSBJbmMuCi0vLyBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gCi0vLyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS8vIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLS8vIG1ldDoK
LS8vIAotLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLS8vIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS8vICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLS8vIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LS8vIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLS8vIGRpc3RyaWJ1dGlvbi4KLS8vICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLS8vIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0vLyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLy8g
Ci0vLyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0vLyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotLy8gTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0vLyBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotLy8gT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0vLyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0vLyBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLS8vIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotLy8gVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotLy8gKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0vLyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotCi0vLyAtLS0KLS8vIEF1dGhvcjogU2FuamF5IEdoZW1hd2F0Ci0vLwotLy8gUm91dGluZSB0
aGF0IHVzZXMgc2Jyay9tbWFwIHRvIGFsbG9jYXRlIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0uCi0v
LyBVc2VmdWwgZm9yIGltcGxlbWVudGluZyBtYWxsb2MuCi0KLSNpZm5kZWYgVENNQUxMT0NfU1lT
VEVNX0FMTE9DX0hfXwotI2RlZmluZSBUQ01BTExPQ19TWVNURU1fQUxMT0NfSF9fCi0KLS8vIFJF
UVVJUkVTOiAiYWxpZ25tZW50IiBpcyBhIHBvd2VyIG9mIHR3byBvciAiMCIgdG8gaW5kaWNhdGUg
ZGVmYXVsdCBhbGlnbm1lbnQKLS8vCi0vLyBBbGxvY2F0ZSBhbmQgcmV0dXJuICJOIiBieXRlcyBv
ZiB6ZXJvZWQgbWVtb3J5LgotLy8KLS8vIElmIGFjdHVhbF9ieXRlcyBpcyBOVUxMIHRoZW4gdGhl
IHJldHVybmVkIG1lbW9yeSBpcyBleGFjdGx5IHRoZQotLy8gcmVxdWVzdGVkIHNpemUuICBJZiBh
Y3R1YWwgYnl0ZXMgaXMgbm9uLU5VTEwgdGhlbiB0aGUgYWxsb2NhdG9yCi0vLyBtYXkgb3B0aW9u
YWxseSByZXR1cm4gbW9yZSBieXRlcyB0aGFuIGFza2VkIGZvciAoaS5lLiByZXR1cm4gYW4KLS8v
IGVudGlyZSAiaHVnZSIgcGFnZSBpZiBhIGh1Z2UgcGFnZSBhbGxvY2F0b3IgaXMgaW4gdXNlKS4K
LS8vCi0vLyBUaGUgcmV0dXJuZWQgcG9pbnRlciBpcyBhIG11bHRpcGxlIG9mICJhbGlnbm1lbnQi
IGlmIG5vbi16ZXJvLgotLy8KLS8vIFJldHVybnMgTlVMTCB3aGVuIG91dCBvZiBtZW1vcnkuCi1l
eHRlcm4gdm9pZCogVENNYWxsb2NfU3lzdGVtQWxsb2Moc2l6ZV90IGJ5dGVzLCBzaXplX3QgKmFj
dHVhbF9ieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYWxp
Z25tZW50ID0gMCk7Ci0KLS8vIFRoaXMgY2FsbCBpcyBhIGhpbnQgdG8gdGhlIG9wZXJhdGluZyBz
eXN0ZW0gdGhhdCB0aGUgcGFnZXMKLS8vIGNvbnRhaW5lZCBpbiB0aGUgc3BlY2lmaWVkIHJhbmdl
IG9mIG1lbW9yeSB3aWxsIG5vdCBiZSB1c2VkIGZvciBhCi0vLyB3aGlsZSwgYW5kIGNhbiBiZSBy
ZWxlYXNlZCBmb3IgdXNlIGJ5IG90aGVyIHByb2Nlc3NlcyBvciB0aGUgT1MuCi0vLyBQYWdlcyB3
aGljaCBhcmUgcmVsZWFzZWQgaW4gdGhpcyB3YXkgbWF5IGJlIGRlc3Ryb3llZCAoemVyb2VkKSBi
eQotLy8gdGhlIE9TLiAgVGhlIGJlbmVmaXQgb2YgdGhpcyBmdW5jdGlvbiBpcyB0aGF0IGl0IGZy
ZWVzIG1lbW9yeSBmb3IKLS8vIHVzZSBieSB0aGUgc3lzdGVtLCB0aGUgY29zdCBpcyB0aGF0IHRo
ZSBwYWdlcyBhcmUgZmF1bHRlZCBiYWNrIGludG8KLS8vIHRoZSBhZGRyZXNzIHNwYWNlIG5leHQg
dGltZSB0aGV5IGFyZSB0b3VjaGVkLCB3aGljaCBjYW4gaW1wYWN0Ci0vLyBwZXJmb3JtYW5jZS4g
IChPbmx5IHBhZ2VzIGZ1bGx5IGNvdmVyZWQgYnkgdGhlIG1lbW9yeSByZWdpb24gd2lsbAotLy8g
YmUgcmVsZWFzZWQsIHBhcnRpYWwgcGFnZXMgd2lsbCBub3QuKQotZXh0ZXJuIHZvaWQgVENNYWxs
b2NfU3lzdGVtUmVsZWFzZSh2b2lkKiBzdGFydCwgc2l6ZV90IGxlbmd0aCk7Ci0KLWV4dGVybiB2
b2lkIFRDTWFsbG9jX1N5c3RlbUNvbW1pdCh2b2lkKiBzdGFydCwgc2l6ZV90IGxlbmd0aCk7Ci0K
LSNpZiAhSEFWRShNQURWX0ZSRUVfUkVVU0UpICYmICFIQVZFKE1BRFZfRE9OVE5FRUQpICYmICFI
QVZFKE1NQVApICYmICFIQVZFKFZJUlRVQUxBTExPQykKLWlubGluZSB2b2lkIFRDTWFsbG9jX1N5
c3RlbVJlbGVhc2Uodm9pZCosIHNpemVfdCkgeyB9Ci0jZW5kaWYKLQotI2lmICFIQVZFKFZJUlRV
QUxBTExPQykgJiYgIUhBVkUoTUFEVl9GUkVFX1JFVVNFKQotaW5saW5lIHZvaWQgVENNYWxsb2Nf
U3lzdGVtQ29tbWl0KHZvaWQqLCBzaXplX3QpIHsgfQotI2VuZGlmCi0KLSNlbmRpZiAvKiBUQ01B
TExPQ19TWVNURU1fQUxMT0NfSF9fICovCg==
</data>
<flag name="review"
          id="271931"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>