<?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>160599</bug_id>
          
          <creation_ts>2016-08-05 09:54:55 -0700</creation_ts>
          <short_desc>Create platform/gamepads directory, and make GamepadProvider pure virtual (with a default empty implementation)</short_desc>
          <delta_ts>2016-08-08 03:25:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>134076</blocked>
    
    <blocked>134675</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1217927</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-08-05 09:54:55 -0700</bug_when>
    <thetext>Create platform/gamepads directory, and make GamepadProvider pure virtual (with a default empty implementation)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217937</commentid>
    <comment_count>1</comment_count>
      <attachid>285426</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-08-05 10:04:22 -0700</bug_when>
    <thetext>Created attachment 285426
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217939</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-05 10:06:24 -0700</bug_when>
    <thetext>Attachment 285426 did not pass style-queue:


ERROR: Source/WebCore/platform/gamepads/mac/HIDGamepad.cpp:73:  Use nullptr instead of NULL.  [readability/null] [5]
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217952</commentid>
    <comment_count>3</comment_count>
      <attachid>285428</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-08-05 10:17:35 -0700</bug_when>
    <thetext>Created attachment 285428
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217953</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-05 10:20:31 -0700</bug_when>
    <thetext>Attachment 285428 did not pass style-queue:


ERROR: Source/WebCore/platform/gamepad/mac/HIDGamepad.cpp:73:  Use nullptr instead of NULL.  [readability/null] [5]
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217964</commentid>
    <comment_count>5</comment_count>
      <attachid>285433</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-08-05 10:36:49 -0700</bug_when>
    <thetext>Created attachment 285433
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217965</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-05 10:39:35 -0700</bug_when>
    <thetext>Attachment 285433 did not pass style-queue:


ERROR: Source/WebCore/platform/gamepad/mac/HIDGamepad.cpp:73:  Use nullptr instead of NULL.  [readability/null] [5]
Total errors found: 1 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217986</commentid>
    <comment_count>7</comment_count>
      <attachid>285433</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-05 11:29:12 -0700</bug_when>
    <thetext>Comment on attachment 285433
Patch

Clearing flags on attachment: 285433

Committed r204178: &lt;http://trac.webkit.org/changeset/204178&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217987</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-05 11:29:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1218476</commentid>
    <comment_count>9</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-08-08 03:25:45 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 285433 [details]
&gt; Patch
&gt; 
&gt; Clearing flags on attachment: 285433
&gt; 
&gt; Committed r204178: &lt;http://trac.webkit.org/changeset/204178&gt;

It broke the Apple Mac cmake build.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285426</attachid>
            <date>2016-08-05 10:04:22 -0700</date>
            <delta_ts>2016-08-05 10:17:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160599-20160805100256.patch</filename>
            <type>text/plain</type>
            <size>158286</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjA5ZTAzYTRjMzMzZmNj
ZGIzMjVhY2NlNmU1ZmQ0NjJkZDI0MGVjNi4uYzJkZGE2ZWUzZTE1YWFiNDA2OTFhMWM3ZTJkMDgy
ZmRmNjgwNjYxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNSBAQAorMjAxNi0wOC0wNSAgQnJh
ZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ3JlYXRlIHBsYXRmb3Jt
L2dhbWVwYWRzIGRpcmVjdG9yeSwgYW5kIG1ha2UgR2FtZXBhZFByb3ZpZGVyIHB1cmUgdmlydHVh
bCAod2l0aCBhIGRlZmF1bHQgZW1wdHkgaW1wbGVtZW50YXRpb24pLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNTk5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChObyBiZWhhdmlv
ciBjaGFuZ2UpLgorCisgICAgICAgIEV4Y2VwdCBmb3IgdGhlIEdhbWVwYWRQcm92aWRlci9FbXB0
eUdhbWVwYWRQcm92aWRlciBzcGxpdCwgdGhpcyBpcyBqdXN0IG1vdmluZyBmaWxlcyBhcm91bmQu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFr
ZToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vTGludXguY21ha2U6CisK
KyAgICAgICAgKiBwbGF0Zm9ybS9HYW1lcGFkcy5oOiBSZW1vdmVkLgorICAgICAgICAKKyAgICAg
ICAgKiBwbGF0Zm9ybS9nYW1lcGFkcy9FbXB0eUdhbWVwYWRQcm92aWRlci5jcHA6IAorICAgICAg
ICAoV2ViQ29yZTo6RW1wdHlHYW1lcGFkUHJvdmlkZXI6OnN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5R2FtZXBhZFByb3ZpZGVyOjpzdG9wTW9uaXRvcmlu
Z0dhbWVwYWRzKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5R2FtZXBhZFByb3ZpZGVyOjpwbGF0
Zm9ybUdhbWVwYWRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkcy9FbXB0eUdhbWVwYWRQ
cm92aWRlci5oOgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkcy9HYW1lcGFk
UHJvdmlkZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBh
ZFByb3ZpZGVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRQcm92aWRlcjo6c2luZ2xl
dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRQcm92aWRlcjo6c2V0U2hhcmVkUHJvdmlk
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWRzL0dhbWVwYWRQcm92aWRlci5oOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZFByb3ZpZGVyLmguCisgICAg
ICAgIChXZWJDb3JlOjpHYW1lcGFkUHJvdmlkZXI6On5HYW1lcGFkUHJvdmlkZXIpOgorICAgICAg
ICAKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkcy9HYW1lcGFkUHJvdmlkZXJDbGllbnQuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dhbWVwYWRQcm92aWRlckNsaWVu
dC5oLgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZFByb3ZpZGVyQ2xpZW50Ojp+R2FtZXBhZFBy
b3ZpZGVyQ2xpZW50KToKKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ2FtZXBhZHMvUGxh
dGZvcm1HYW1lcGFkLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0
Zm9ybUdhbWVwYWQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtR2FtZXBhZDo6flBsYXRm
b3JtR2FtZXBhZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdhbWVwYWQ6OmlkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtR2FtZXBhZDo6aW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1HYW1lcGFkOjpsYXN0VXBkYXRlVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUdhbWVwYWQ6OmNvbm5lY3RUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
R2FtZXBhZDo6UGxhdGZvcm1HYW1lcGFkKToKKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0v
Z2FtZXBhZHMvZWZsL0dhbWVwYWRzRWZsLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2VmbC9HYW1lcGFkc0VmbC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFk
RGV2aWNlRWZsOjpyZXNldEZkSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRGV2
aWNlRWZsOjpkZXZpY2VGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWREZXZpY2VFZmw6
OkdhbWVwYWREZXZpY2VFZmwpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZERldmljZUVmbDo6
fkdhbWVwYWREZXZpY2VFZmwpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZERldmljZUVmbDo6
cmVhZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzRWZsOjpvbkdhbWVQYWRD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNFZmw6OkdhbWVwYWRzRWZsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzRWZsOjp+R2FtZXBhZHNFZmwpOgorICAgICAgICAoV2Vi
Q29yZTo6R2FtZXBhZHNFZmw6OnJlZ2lzdGVyRGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6Okdh
bWVwYWRzRWZsOjp1bnJlZ2lzdGVyRGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRz
RWZsOjp1cGRhdGVHYW1lcGFkTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpzYW1wbGVHYW1lcGFk
cyk6CisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWRzL2dsaWIvR2FtZXBhZHNH
bGliLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvR2FtZXBh
ZHNHbGliLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWREZXZpY2VHbGliOjpHYW1lcGFk
RGV2aWNlR2xpYik6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRGV2aWNlR2xpYjo6fkdhbWVw
YWREZXZpY2VHbGliKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWREZXZpY2VHbGliOjpyZWFk
Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNHbGliOjpHYW1lcGFkc0dsaWIp
OgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNHbGliOjp+R2FtZXBhZHNHbGliKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdhbWVwYWRzR2xpYjo6cmVnaXN0ZXJEZXZpY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6R2FtZXBhZHNHbGliOjp1bnJlZ2lzdGVyRGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdhbWVwYWRzR2xpYjo6dXBkYXRlR2FtZXBhZExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6R2Ft
ZXBhZHNHbGliOjpvblVFdmVudENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRz
R2xpYjo6aXNHYW1lcGFkRGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OnNhbXBsZUdhbWVwYWRz
KToKKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ2FtZXBhZHMvbGludXgvR2FtZXBhZERl
dmljZUxpbnV4LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xpbnV4
L0dhbWVwYWREZXZpY2VMaW51eC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRGV2aWNl
TGludXg6OkdhbWVwYWREZXZpY2VMaW51eCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRGV2
aWNlTGludXg6On5HYW1lcGFkRGV2aWNlTGludXgpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBh
ZERldmljZUxpbnV4Ojp1cGRhdGVGb3JFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFk
RGV2aWNlTGludXg6Om5vcm1hbGl6ZUF4aXNWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpHYW1l
cGFkRGV2aWNlTGludXg6Om5vcm1hbGl6ZUJ1dHRvblZhbHVlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9nYW1lcGFkcy9saW51eC9HYW1lcGFkRGV2aWNlTGludXguaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2xpbnV4L0dhbWVwYWREZXZpY2VMaW51eC5oLgorICAgICAgICAo
V2ViQ29yZTo6R2FtZXBhZERldmljZUxpbnV4Ojpjb25uZWN0ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6R2FtZXBhZERldmljZUxpbnV4OjppZCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRGV2
aWNlTGludXg6OnRpbWVzdGFtcCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRGV2aWNlTGlu
dXg6OmF4ZXNDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRGV2aWNlTGludXg6OmF4
ZXNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWREZXZpY2VMaW51eDo6YnV0dG9uc0Nv
dW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWREZXZpY2VMaW51eDo6YnV0dG9uc0RhdGEp
OgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkcy9tYWMvSElER2FtZXBhZC5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZC5j
cHAuCisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkOjpISURHYW1lcGFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkhJREdhbWVwYWQ6OmdldEN1cnJlbnRWYWx1ZUZvckVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SElER2FtZXBhZDo6aW5pdEVsZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkhJREdhbWVwYWQ6OmluaXRFbGVtZW50c0Zyb21BcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpI
SURHYW1lcGFkOjptYXliZUFkZEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFk
OjptYXliZUFkZEF4aXMpOgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBhZDo6dmFsdWVDaGFu
Z2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkcy9tYWMvSElER2FtZXBhZC5oOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJREdhbWVwYWQuaC4KKyAgICAg
ICAgKFdlYkNvcmU6OkhJREdhbWVwYWRFbGVtZW50OjpISURHYW1lcGFkRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpISURHYW1lcGFkRWxlbWVudDo6fkhJREdhbWVwYWRFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRFbGVtZW50Ojppc0J1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpISURHYW1lcGFkRWxlbWVudDo6aXNBeGlzKToKKyAgICAgICAgKFdlYkNvcmU6OkhJ
REdhbWVwYWRCdXR0b246OkhJREdhbWVwYWRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6SElE
R2FtZXBhZEF4aXM6OkhJREdhbWVwYWRBeGlzKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVw
YWQ6OmhpZERldmljZSk6CisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWRzL21h
Yy9ISURHYW1lcGFkUHJvdmlkZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL0hJREdhbWVwYWRQcm92aWRlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpkZXZp
Y2VNYXRjaGluZ0RpY3Rpb25hcnkpOgorICAgICAgICAoV2ViQ29yZTo6ZGV2aWNlQWRkZWRDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VSZW1vdmVkQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6ZGV2aWNlVmFsdWVzQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkhJREdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhJ
REdhbWVwYWRQcm92aWRlcjo6SElER2FtZXBhZFByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkhJREdhbWVwYWRQcm92aWRlcjo6aW5kZXhGb3JOZXdseUNvbm5lY3RlZERldmljZSk6CisgICAg
ICAgIChXZWJDb3JlOjpISURHYW1lcGFkUHJvdmlkZXI6OmNvbm5lY3Rpb25EZWxheVRpbWVyRmly
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBhZFByb3ZpZGVyOjpvcGVuQW5kU2NoZWR1
bGVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRQcm92aWRlcjo6Y2xvc2VB
bmRVbnNjaGVkdWxlTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkUHJvdmlk
ZXI6OnN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVw
YWRQcm92aWRlcjo6c3RvcE1vbml0b3JpbmdHYW1lcGFkcyk6CisgICAgICAgIChXZWJDb3JlOjpI
SURHYW1lcGFkUHJvdmlkZXI6OmRldmljZUFkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdh
bWVwYWRQcm92aWRlcjo6ZGV2aWNlUmVtb3ZlZCk6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1l
cGFkUHJvdmlkZXI6OnZhbHVlc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBh
ZFByb3ZpZGVyOjppbnB1dE5vdGlmaWNhdGlvblRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SElER2FtZXBhZFByb3ZpZGVyOjpyZW1vdmVHYW1lcGFkRm9yRGV2aWNlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9nYW1lcGFkcy9tYWMvSElER2FtZXBhZFByb3ZpZGVyLmg6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZFByb3ZpZGVyLmguCisgICAg
ICAgIChXZWJDb3JlOjpISURHYW1lcGFkUHJvdmlkZXI6OnBsYXRmb3JtR2FtZXBhZHMpOgorCiAy
MDE2LTA4LTAyICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW1vdmluZyBJbmRleGVkREIgV2Vic2l0ZURhdGEgY2FuIGZhaWwgZm9yIHNvbWUgdXNlcnMuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CmluZGV4IDMyYWI1M2MyZGQzOTU0MzY0YjMzN2IxMTg4MTk5MjZiOWJh
MDlhZjAuLmZiNDE5NWJlNzcwMTNjM2NhNDg3MmU1ODhmNWI3OTBlNDIzNDQ5MDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CkBAIC03Miw2ICs3Miw4IEBAIHNldChXZWJDb3JlX0lOQ0xVREVfRElSRUNU
T1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vYW5pbWF0aW9uIgogICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9hdWRpbyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0v
Y3J5cHRvIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9nYW1lcGFkcyIKKyAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vZ2FtZXBhZHMvbGludXgiCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dyYXBoaWNzIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGlj
cy9jcHUvYXJtIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJt
L2ZpbHRlcnMiCkBAIC0yOTAyLDcgKzI5MDQsOCBAQCBpZiAoRU5BQkxFX0dBTUVQQUQpCiAgICAg
ICAgIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAKICAgICAgICAgTW9kdWxlcy9n
YW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwCiAKLSAgICAgICAgcGxhdGZvcm0vR2FtZXBhZFBy
b3ZpZGVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9nYW1lcGFkL0VtcHR5R2FtZXBhZFByb3ZpZGVy
LmNwcAorICAgICAgICBwbGF0Zm9ybS9nYW1lcGFkL0dhbWVwYWRQcm92aWRlci5jcHAKICAgICAp
CiBlbHNlaWYgKEVOQUJMRV9HQU1FUEFEX0RFUFJFQ0FURUQpCiAgICAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDJk
MzY5ODYwZjBhMzU3Mzg1ODI5ZDdhZDRiZmIwNzkyNTY0N2JiMTYuLjM3ZDVlNTdmNDUwYWMyNDk4
NTZlNzg2NTRiZTQwZDA2NTFjMTI1ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0y
OSw2ICsyOSw4IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAg
ICIke1dFQkNPUkVfRElSfS9wYWdlL2VmbCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0v
Y2Fpcm8iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2VmbCIKKyAgICAiJHtXRUJDT1JF
X0RJUn0vcGxhdGZvcm0vZ2FtZXBhZHMiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dh
bWVwYWRzL2VmbCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ2VvY2x1ZSIKICAgICAi
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8iCiAgICAgIiR7V0VCQ09SRV9E
SVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2VmbCIKQEAgLTk4LDcgKzEwMCw2IEBAIGxpc3QoQVBQRU5E
IFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2VmbC9FcnJvcnNFZmwuY3BwCiAgICAgcGxh
dGZvcm0vZWZsL0V2ZW50TG9vcEVmbC5jcHAKICAgICBwbGF0Zm9ybS9lZmwvRmlsZVN5c3RlbUVm
bC5jcHAKLSAgICBwbGF0Zm9ybS9lZmwvR2FtZXBhZHNFZmwuY3BwCiAgICAgcGxhdGZvcm0vZWZs
L0xvY2FsaXplZFN0cmluZ3NFZmwuY3BwCiAgICAgcGxhdGZvcm0vZWZsL01JTUVUeXBlUmVnaXN0
cnlFZmwuY3BwCiAgICAgcGxhdGZvcm0vZWZsL01haW5UaHJlYWRTaGFyZWRUaW1lckVmbC5jcHAK
QEAgLTExMyw2ICsxMTQsOCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9lZmwvVXNlckFnZW50RWZsLmNwcAogICAgIHBsYXRmb3JtL2VmbC9XaWRnZXRFZmwuY3Bw
CiAKKyAgICBwbGF0Zm9ybS9nYW1lcGFkcy9lZmwvR2FtZXBhZHNFZmwuY3BwCisKICAgICBwbGF0
Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlMS5jcHAKICAgICBwbGF0Zm9y
bS9nZW9jbHVlL0dlb2xvY2F0aW9uUHJvdmlkZXJHZW9jbHVlMi5jcHAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUdUSy5jbWFrZQppbmRleCBhYWJkMzA1ZWQxZWJkMmFlMWUxMWYxYzAzYzk0Y2IzMWQ4Y2E4NDYy
Li45MzdiMjdmYmY2YzM3NGNkYWUyNjYxYjAyMzRkYjUwNjA5MTQ5MzI1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUdUSy5jbWFrZQpAQCAtMzQsNiArMzQsOCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xV
REVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vZWRpdGluZy9hdGsiCiAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BhZ2UvZ3RrIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9jYWly
byIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ2FtZXBhZHMiCisgICAgIiR7V0VCQ09S
RV9ESVJ9L3BsYXRmb3JtL2dhbWVwYWRzL2dsaWIiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRm
b3JtL2dlb2NsdWUiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2d0ayIKICAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8iCkBAIC04NSwxMiArODcsMTMgQEAg
bGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBwbGF0Zm9ybS9jcnlwdG8vZ251dGxz
L0NyeXB0b0RpZ2VzdEdudVRMUy5jcHAKIAorICAgIHBsYXRmb3JtL2dhbWVwYWRzL2dsaWIvR2Ft
ZXBhZHNHbGliLmNwcAorCiAgICAgcGxhdGZvcm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVy
R2VvY2x1ZTEuY3BwCiAgICAgcGxhdGZvcm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2Vv
Y2x1ZTIuY3BwCiAKICAgICBwbGF0Zm9ybS9nbGliL0V2ZW50TG9vcEdsaWIuY3BwCiAgICAgcGxh
dGZvcm0vZ2xpYi9GaWxlU3lzdGVtR2xpYi5jcHAKLSAgICBwbGF0Zm9ybS9nbGliL0dhbWVwYWRz
R2xpYi5jcHAKICAgICBwbGF0Zm9ybS9nbGliL0tleWVkRGVjb2RlckdsaWIuY3BwCiAgICAgcGxh
dGZvcm0vZ2xpYi9LZXllZEVuY29kZXJHbGliLmNwcAogICAgIHBsYXRmb3JtL2dsaWIvTWFpblRo
cmVhZFNoYXJlZFRpbWVyR0xpYi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwZWEzZTQ2ZWNkMjRlM2UyZGYwMDJlZmFhNmVk
YmY1YTllNDYwM2Y2Li45MTc2NDVjMTkzMTY1MjMzYmQyM2E0YWZmZjFhNTUzMTQyZWU1MGE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0yMTYzLDYgKzIxNjMsMTYgQEAKIAkJNTE0Qzc2N0QwQ0U5MjNBMTAwN0VGM0NEIC8qIFJl
c291cmNlUmVxdWVzdEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxNEM3NjY4MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlcXVlc3RCYXNl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0
Qzc2N0UwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVzcG9uc2VCYXNlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3NjY5MENFOTIzQTEw
MDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAgKi87IH07CiAJCTUxNEM3NjdGMENF
OTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE0Qzc2NkEwQ0U5MjNBMTAwN0VGM0NEIC8q
IFJlc291cmNlUmVzcG9uc2VCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNTE1QkUxOEYxRDU0RjVGQjAwREQ3QzY4IC8qIEVtcHR5R2FtZXBh
ZFByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxNUJFMTg4MUQ1NEY1RjYwMEREN0M2OCAvKiBFbXB0eUdhbWVwYWRQcm92aWRlci5jcHAg
Ki87IH07CisJCTUxNUJFMTkwMUQ1NEY1RkIwMEREN0M2OCAvKiBFbXB0eUdhbWVwYWRQcm92aWRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1QkUx
ODkxRDU0RjVGNjAwREQ3QzY4IC8qIEVtcHR5R2FtZXBhZFByb3ZpZGVyLmggKi87IH07CisJCTUx
NUJFMTkxMUQ1NEY1RkIwMEREN0M2OCAvKiBHYW1lcGFkUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1QkUxOEExRDU0RjVGNjAwREQ3
QzY4IC8qIEdhbWVwYWRQcm92aWRlci5jcHAgKi87IH07CisJCTUxNUJFMTkyMUQ1NEY1RkIwMERE
N0M2OCAvKiBHYW1lcGFkUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNUJFMThCMUQ1NEY1RjYwMEREN0M2OCAvKiBHYW1lcGFkUHJvdmlk
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1
MTVCRTE5MzFENTRGNUZCMDBERDdDNjggLyogR2FtZXBhZFByb3ZpZGVyQ2xpZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVCRTE4QzFENTRGNUY2
MDBERDdDNjggLyogR2FtZXBhZFByb3ZpZGVyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTE1QkUxOTUxRDU0RjVGQjAwREQ3QzY4IC8q
IFBsYXRmb3JtR2FtZXBhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE1QkUxOEUxRDU0RjVGNjAwREQ3QzY4IC8qIFBsYXRmb3JtR2FtZXBhZC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUxNUJFMTlC
MUQ1NEY2QzEwMEREN0M2OCAvKiBISURHYW1lcGFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUJFMTk3MUQ1NEY2QkQwMEREN0M2OCAvKiBISURH
YW1lcGFkLmNwcCAqLzsgfTsKKwkJNTE1QkUxOUMxRDU0RjZDMTAwREQ3QzY4IC8qIEhJREdhbWVw
YWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUJF
MTk4MUQ1NEY2QkQwMEREN0M2OCAvKiBISURHYW1lcGFkLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTE1QkUxOUQxRDU0RjZDMTAwREQ3QzY4IC8q
IEhJREdhbWVwYWRQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTVCRTE5OTFENTRGNkJEMDBERDdDNjggLyogSElER2FtZXBhZFByb3Zp
ZGVyLmNwcCAqLzsgfTsKKwkJNTE1QkUxOUUxRDU0RjZDMTAwREQ3QzY4IC8qIEhJREdhbWVwYWRQ
cm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTE1QkUxOUExRDU0RjZCRDAwREQ3QzY4IC8qIEhJREdhbWVwYWRQcm92aWRlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNUY3OTUzMUNGQ0Ez
RDAwMENDRUQ5MyAvKiBXZWJDb3JlQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1Rjc5NTExQ0ZDQTNDNzAwQ0NFRDkz
IC8qIFdlYkNvcmVDcm9zc1RocmVhZENvcGllci5jcHAgKi87IH07CiAJCTUxNUY3OTU0MUNGQ0Ez
RDUwMENDRUQ5MyAvKiBXZWJDb3JlQ3Jvc3NUaHJlYWRDb3BpZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUY3OTUyMUNGQ0EzQzcwMENDRUQ5MyAv
KiBXZWJDb3JlQ3Jvc3NUaHJlYWRDb3BpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTYwMzAwQjBDQzQyNTEyMDBDOEFDMjUgLyogRmlsZVN5
c3RlbVBPU0lYLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxNjAzMDBBMENDNDI1MTIwMEM4QUMyNSAvKiBGaWxlU3lzdGVtUE9TSVguY3BwICovOyB9
OwpAQCAtMjIwOCwxMSArMjIxOCw2IEBACiAJCTUxNzRFMjBBMTBBMUY0NEYwMEY5NUU2RiAvKiBQ
b3BTdGF0ZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTc0RTIwODEwQTFGNDRGMDBGOTVFNkYgLyogUG9wU3RhdGVFdmVudC5oICovOyB9Owog
CQk1MTc3MURGRTFCREI0ODUwMDBDQUU4RTQgLyogTWVtb3J5T2JqZWN0U3RvcmUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3NzFERkMxQkRCNDc1
NjAwQ0FFOEU0IC8qIE1lbW9yeU9iamVjdFN0b3JlLmNwcCAqLzsgfTsKIAkJNTE3NzFERkYxQkRC
NDg1MDAwQ0FFOEU0IC8qIE1lbW9yeU9iamVjdFN0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTc3MURGRDFCREI0NzU2MDBDQUU4RTQgLyogTWVt
b3J5T2JqZWN0U3RvcmUuaCAqLzsgfTsKLQkJNTE3OUNFMjQxOTVDODE0MjAwMTlDMTk4IC8qIEdh
bWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE3OUNFMjMxOTVDODE0MjAwMTlDMTk4IC8qIEdhbWVwYWRQcm92aWRlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUxNzlDRTI2MTk1
QzgyMUQwMDE5QzE5OCAvKiBHYW1lcGFkUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3OUNFMjUxOTVDODIxRDAwMTlDMTk4IC8qIEdh
bWVwYWRQcm92aWRlci5jcHAgKi87IH07Ci0JCTUxNzlDRTJBMTk1QzkxODYwMDE5QzE5OCAvKiBH
YW1lcGFkUHJvdmlkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxNzlDRTI5MTk1QzkxODYwMDE5QzE5OCAvKiBHYW1lcGFkUHJvdmlkZXJD
bGllbnQuaCAqLzsgfTsKLQkJNTE3OUNFMzYxOTVDQUM3RTAwMTlDMTk4IC8qIEhJREdhbWVwYWRQ
cm92aWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTc5Q0UzNDE5NUNBQzdFMDAxOUMxOTggLyogSElER2FtZXBhZFByb3ZpZGVyLmNwcCAqLzsg
fTsKLQkJNTE3OUNFMzcxOTVDQUM3RTAwMTlDMTk4IC8qIEhJREdhbWVwYWRQcm92aWRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3OUNFMzUxOTVD
QUM3RTAwMTlDMTk4IC8qIEhJREdhbWVwYWRQcm92aWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxN0E2M0MzMUI3NDMxODcwMEU3RENEQyAv
KiBLZXllZERlY29kZXJDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTdBNjNCRjFCNzQzMTdFMDBFN0RDREMgLyogS2V5ZWREZWNvZGVyQ0YuY3Bw
ICovOyB9OwogCQk1MTdBNjNDNDFCNzQzMThCMDBFN0RDREMgLyogS2V5ZWRFbmNvZGVyQ0YuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3QTYzQzEx
Qjc0MzE3RTAwRTdEQ0RDIC8qIEtleWVkRW5jb2RlckNGLmNwcCAqLzsgfTsKIAkJNTE3QTYzQzUx
Qjc0MzE4RjAwRTdEQ0RDIC8qIEtleWVkRGVjb2RlckNGLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdBNjNDMDFCNzQzMTdFMDBFN0RDREMgLyogS2V5
ZWREZWNvZGVyQ0YuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMjI5Nyw4ICsyMzAyLDYgQEAKIAkJNTFBNEJCMTAxOTU0RDYyNzAwRkE1QzJFIC8q
IE5hdmlnYXRvckdhbWVwYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTFBNEJCMEQxOTU0RDYyNzAwRkE1QzJFIC8qIE5hdmlnYXRvckdhbWVwYWQu
Y3BwICovOyB9OwogCQk1MUE5RDlFOTE5NUI5MzFGMDAxQjJCNUMgLyogR2FtZXBhZE1hbmFnZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBOUQ5
RTcxOTVCOTMxRjAwMUIyQjVDIC8qIEdhbWVwYWRNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJNTFBOUQ5
RUExOTVCOTMxRjAwMUIyQjVDIC8qIEdhbWVwYWRNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUE5RDlFODE5NUI5MzFGMDAxQjJCNUMgLyog
R2FtZXBhZE1hbmFnZXIuaCAqLzsgfTsKLQkJNTFBOUQ5RjMxOTVCOTUwMzAwMUIyQjVDIC8qIEhJ
REdhbWVwYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFBOUQ5RUYxOTVCOTUwMzAwMUIyQjVDIC8qIEhJREdhbWVwYWQuY3BwICovOyB9OwotCQk1
MUE5RDlGNDE5NUI5NTAzMDAxQjJCNUMgLyogSElER2FtZXBhZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBOUQ5RjAxOTVCOTUwMzAwMUIyQjVDIC8q
IEhJREdhbWVwYWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1MUFBM0Y2RjBCRDVBQTlFMDA4OTI5NzEgLyogUmVzb3VyY2VMb2FkZXJNYWMubW0g
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFBM0Y2RTBC
RDVBQTlFMDA4OTI5NzEgLyogUmVzb3VyY2VMb2FkZXJNYWMubW0gKi87IH07CiAJCTUxQUJBRTFC
MTAzQzE4RkYwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1FcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBQkFFMUExMDNDMThGRjAwOEM1MjYwIC8q
IFNvY2tldFN0cmVhbUVycm9yLmggKi87IH07CiAJCTUxQUJBRTFFMTAzQzE5MTMwMDhDNTI2MCAv
KiBTb2NrZXRTdHJlYW1IYW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxQUJBRTFDMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5k
bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MjMwOSw3ICsyMzEyLDYgQEAKIAkJNTFCNDU0RUExQjREQUU3RDAwODVFQUE2IC8qIFBpbmdIYW5k
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQjQ1
NEU5MUI0REFFN0QwMDg1RUFBNiAvKiBQaW5nSGFuZGxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFCNDVEMjAxQUI4RDFFMjAwMTE3Q0QyIC8q
IENvbnRlbnRFeHRlbnNpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTFCNDVEMUUxQUI4RDFFMjAwMTE3Q0QyIC8qIENvbnRlbnRFeHRlbnNpb24u
Y3BwICovOyB9OwogCQk1MUI0NUQyMTFBQjhEMUUyMDAxMTdDRDIgLyogQ29udGVudEV4dGVuc2lv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCNDVE
MUYxQUI4RDFFMjAwMTE3Q0QyIC8qIENvbnRlbnRFeHRlbnNpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MUI1OEZENDE5NUE5NjREMDAyOTkw
QjAgLyogUGxhdGZvcm1HYW1lcGFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTVFNUZFRjE5NTEwMTQ3MDA4NkNBNUUgLyogUGxhdGZvcm1HYW1lcGFk
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFC
QTRBQzMxQkJCNUNEODAwREYzRDZEIC8qIElEQkRhdGFiYXNlSW5mby5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUJBNEFDMTFCQkI1Q0JGMDBERjNE
NkQgLyogSURCRGF0YWJhc2VJbmZvLmNwcCAqLzsgfTsKIAkJNTFCQTRBQzQxQkJCNUNEODAwREYz
RDZEIC8qIElEQkRhdGFiYXNlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFCQTRBQzIxQkJCNUNCRjAwREYzRDZEIC8qIElEQkRhdGFiYXNlSW5m
by5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUx
QkE0QUNBMUJCQzVCRDkwMERGM0Q2RCAvKiBNZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCQTRBQzgxQkJDNUI5
RTAwREYzRDZEIC8qIE1lbW9yeUlEQkJhY2tpbmdTdG9yZS5jcHAgKi87IH07CkBAIC05NTc4LDcg
Kzk1ODAsMTYgQEAKIAkJNTE0Qzc2NjgwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVxdWVz
dEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VSZXF1ZXN0
QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTRDNzY2OTBDRTkyM0ExMDA3
RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MTRDNzY2QTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25z
ZUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VSZXNwb25z
ZUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE1RTVGRUYxOTUxMDE0NzAw
ODZDQTVFIC8qIFBsYXRmb3JtR2FtZXBhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUdhbWVw
YWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE1QkUxODgxRDU0RjVGNjAwREQ3
QzY4IC8qIEVtcHR5R2FtZXBhZFByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEVtcHR5R2FtZXBhZFByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTE1QkUxODkxRDU0RjVGNjAwREQ3QzY4IC8qIEVtcHR5R2FtZXBhZFByb3Zp
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVtcHR5R2FtZXBhZFByb3Zp
ZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNUJFMThBMUQ1NEY1RjYwMERE
N0M2OCAvKiBHYW1lcGFkUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gR2FtZXBhZFByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTE1QkUxOEIxRDU0RjVGNjAwREQ3QzY4IC8qIEdhbWVwYWRQcm92aWRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHYW1lcGFkUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTE1QkUxOEMxRDU0RjVGNjAwREQ3QzY4IC8qIEdhbWVwYWRQcm92
aWRlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHYW1lcGFkUHJv
dmlkZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE1QkUxOEUxRDU0
RjVGNjAwREQ3QzY4IC8qIFBsYXRmb3JtR2FtZXBhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQbGF0Zm9ybUdhbWVwYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTE1QkUxOTcxRDU0RjZCRDAwREQ3QzY4IC8qIEhJREdhbWVwYWQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSElER2FtZXBhZC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUxNUJFMTk4MUQ1NEY2QkQwMEREN0M2OCAvKiBISURHYW1lcGFkLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhJREdhbWVwYWQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE1QkUxOTkxRDU0RjZCRDAwREQ3QzY4IC8qIEhJREdhbWVw
YWRQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBISURH
YW1lcGFkUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTVCRTE5
QTFENTRGNkJEMDBERDdDNjggLyogSElER2FtZXBhZFByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhJREdhbWVwYWRQcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MTVGNzk1MTFDRkNBM0M3MDBDQ0VEOTMgLyogV2ViQ29yZUNyb3NzVGhy
ZWFkQ29waWVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNv
cmVDcm9zc1RocmVhZENvcGllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
NUY3OTUyMUNGQ0EzQzcwMENDRUQ5MyAvKiBXZWJDb3JlQ3Jvc3NUaHJlYWRDb3BpZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29yZUNyb3NzVGhyZWFkQ29waWVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjAzMDBBMENDNDI1MTIwMEM4QUMyNSAv
KiBGaWxlU3lzdGVtUE9TSVguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRmlsZVN5c3RlbVBPU0lYLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2
NDgsMTEgKzk2NTksNiBAQAogCQk1MTc0RTIwQjEwQTFGNDlBMDBGOTVFNkYgLyogUG9wU3RhdGVF
dmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUG9wU3RhdGVFdmVudC5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNzcxREZDMUJEQjQ3NTYwMENBRThFNCAvKiBNZW1v
cnlPYmplY3RTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBN
ZW1vcnlPYmplY3RTdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNzcx
REZEMUJEQjQ3NTYwMENBRThFNCAvKiBNZW1vcnlPYmplY3RTdG9yZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNZW1vcnlPYmplY3RTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1MTc5Q0UyMzE5NUM4MTQyMDAxOUMxOTggLyogR2FtZXBhZFByb3ZpZGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdhbWVwYWRQcm92aWRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTc5Q0UyNTE5NUM4MjFEMDAxOUMxOTggLyog
R2FtZXBhZFByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEdhbWVwYWRQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNzlD
RTI5MTk1QzkxODYwMDE5QzE5OCAvKiBHYW1lcGFkUHJvdmlkZXJDbGllbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2FtZXBhZFByb3ZpZGVyQ2xpZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNzlDRTM0MTk1Q0FDN0UwMDE5QzE5OCAvKiBISURHYW1l
cGFkUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSElE
R2FtZXBhZFByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE3OUNF
MzUxOTVDQUM3RTAwMTlDMTk4IC8qIEhJREdhbWVwYWRQcm92aWRlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBISURHYW1lcGFkUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTE3QTYzQkYxQjc0MzE3RTAwRTdEQ0RDIC8qIEtleWVkRGVjb2RlckNG
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtleWVkRGVjb2RlckNG
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3QTYzQzAxQjc0MzE3RTAwRTdE
Q0RDIC8qIEtleWVkRGVjb2RlckNGLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEtleWVkRGVjb2RlckNGLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxN0E2M0Mx
MUI3NDMxN0UwMEU3RENEQyAvKiBLZXllZEVuY29kZXJDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBLZXllZEVuY29kZXJDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC05Njk5LDggKzk3MDUsNiBAQAogCQk1MUE0QkIwRjE5NTRENjI3MDBGQTVD
MkUgLyogTmF2aWdhdG9yR2FtZXBhZC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdh
dG9yR2FtZXBhZC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQTlEOUU3MTk1
QjkzMUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBHYW1lcGFkTWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxQTlEOUU4MTk1QjkzMUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHYW1lcGFkTWFuYWdlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk1MUE5RDlFRjE5NUI5NTAzMDAxQjJCNUMgLyogSElER2Ft
ZXBhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBISURHYW1lcGFk
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFBOUQ5RjAxOTVCOTUwMzAwMUIy
QjVDIC8qIEhJREdhbWVwYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSElE
R2FtZXBhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUFBM0Y2RTBCRDVBQTlF
MDA4OTI5NzEgLyogUmVzb3VyY2VMb2FkZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBSZXNvdXJjZUxvYWRlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTFBQkFFMUExMDNDMThGRjAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUVycm9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvY2tldFN0cmVhbUVycm9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQUJBRTFDMTAzQzE5MTMwMDhDNTI2MCAv
KiBTb2NrZXRTdHJlYW1IYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U29ja2V0U3RyZWFtSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzY4
OCw2ICsxNzY5MiwzMSBAQAogCQkJcGF0aCA9IGNmOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKIAkJfTsKKwkJNTE1QkUxODcxRDU0RjVEQjAwREQ3QzY4IC8qIGdhbWVwYWRzICovID0gewor
CQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk1MTVCRTE5NjFENTRGNjQ1
MDBERDdDNjggLyogbWFjICovLAorCQkJCTUxNUJFMTg4MUQ1NEY1RjYwMEREN0M2OCAvKiBFbXB0
eUdhbWVwYWRQcm92aWRlci5jcHAgKi8sCisJCQkJNTE1QkUxODkxRDU0RjVGNjAwREQ3QzY4IC8q
IEVtcHR5R2FtZXBhZFByb3ZpZGVyLmggKi8sCisJCQkJNTE1QkUxOEExRDU0RjVGNjAwREQ3QzY4
IC8qIEdhbWVwYWRQcm92aWRlci5jcHAgKi8sCisJCQkJNTE1QkUxOEIxRDU0RjVGNjAwREQ3QzY4
IC8qIEdhbWVwYWRQcm92aWRlci5oICovLAorCQkJCTUxNUJFMThDMUQ1NEY1RjYwMEREN0M2OCAv
KiBHYW1lcGFkUHJvdmlkZXJDbGllbnQuaCAqLywKKwkJCQk1MTVCRTE4RTFENTRGNUY2MDBERDdD
NjggLyogUGxhdGZvcm1HYW1lcGFkLmggKi8sCisJCQkpOworCQkJcGF0aCA9IGdhbWVwYWRzOwor
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNTE1QkUxOTYxRDU0RjY0NTAwREQ3
QzY4IC8qIG1hYyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJNTE1QkUxOTcxRDU0RjZCRDAwREQ3QzY4IC8qIEhJREdhbWVwYWQuY3BwICovLAorCQkJCTUx
NUJFMTk4MUQ1NEY2QkQwMEREN0M2OCAvKiBISURHYW1lcGFkLmggKi8sCisJCQkJNTE1QkUxOTkx
RDU0RjZCRDAwREQ3QzY4IC8qIEhJREdhbWVwYWRQcm92aWRlci5jcHAgKi8sCisJCQkJNTE1QkUx
OUExRDU0RjZCRDAwREQ3QzY4IC8qIEhJREdhbWVwYWRQcm92aWRlci5oICovLAorCQkJKTsKKwkJ
CXBhdGggPSBtYWM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1MTYwMzAw
OTBDQzQyNDU0MDBDOEFDMjUgLyogcG9zaXggKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKApAQCAtMTgxNzEsMTAgKzE4MjAwLDYgQEAKIAkJCQlFMUJBNjZGMDE3NDJC
RDg2MDBDMjAyNTEgLyogRHluYW1pY0xpbmtlckludGVycG9zaW5nLmggKi8sCiAJCQkJMUNBMTlF
MDMwREMyNTU5NTAwNjVBOTk0IC8qIEV2ZW50TG9vcE1hYy5tbSAqLywKIAkJCQk1MTRCM0Y3NTBD
NzIyMDU1MDAwNTMwREYgLyogRmlsZVN5c3RlbU1hYy5tbSAqLywKLQkJCQk1MUE5RDlFRjE5NUI5
NTAzMDAxQjJCNUMgLyogSElER2FtZXBhZC5jcHAgKi8sCi0JCQkJNTFBOUQ5RjAxOTVCOTUwMzAw
MUIyQjVDIC8qIEhJREdhbWVwYWQuaCAqLywKLQkJCQk1MTc5Q0UzNDE5NUNBQzdFMDAxOUMxOTgg
LyogSElER2FtZXBhZFByb3ZpZGVyLmNwcCAqLywKLQkJCQk1MTc5Q0UzNTE5NUNBQzdFMDAxOUMx
OTggLyogSElER2FtZXBhZFByb3ZpZGVyLmggKi8sCiAJCQkJOTM1QzQ3NkUwOUFDNEQ3MzAwQTZB
QUI0IC8qIEtleUV2ZW50TWFjLm1tICovLAogCQkJCTUyMUQ0NkY1MTFBRUM5ODEwMDUxNDYxMyAv
KiBLaWxsUmluZ01hYy5tbSAqLywKIAkJCQkwNkU4MUVENjBBQjVENUU5MDBDODc4MzcgLyogTG9j
YWxDdXJyZW50R3JhcGhpY3NDb250ZXh0LmggKi8sCkBAIC0yMjg3Nyw2ICsyMjkwMiw3IEBACiAJ
CQkJMUFFNDJGNjcwQUE0QjhDQjAwQzg2MTJEIC8qIGNmICovLAogCQkJCUE1Qzk3NENFMTE0ODVG
REEwMDY2RjJBQiAvKiBjb2NvYSAqLywKIAkJCQlDRTUwRDhDRTFDODkzMkVEMDA3MkVBNUEgLyog
Y3J5cHRvICovLAorCQkJCTUxNUJFMTg3MUQ1NEY1REIwMEREN0M2OCAvKiBnYW1lcGFkcyAqLywK
IAkJCQlCMkEwMTU5MTBBRjZDRDUzMDA2QkNFMEUgLyogZ3JhcGhpY3MgKi8sCiAJCQkJQTU5RTND
MUIxMTU4MEYzNDAwNzI5MjhFIC8qIGlvcyAqLywKIAkJCQk2NTgyQTE0ODA5OTk5RDZDMDBCRUVC
NkQgLyogbWFjICovLApAQCAtMjI5MzIsOSArMjI5NTgsNiBAQAogCQkJCUM1N0ZFREUwMTIxMkVF
OUMwMDk3QkU2NSAvKiBGaWxlU3lzdGVtLmNwcCAqLywKIAkJCQk1MTRCM0Y3MjBDNzIyMDQ3MDAw
NTMwREYgLyogRmlsZVN5c3RlbS5oICovLAogCQkJCUJDMDczQkE5MEMzOTlCMUYwMDBGNTk3OSAv
KiBGbG9hdENvbnZlcnNpb24uaCAqLywKLQkJCQk1MTc5Q0UyNTE5NUM4MjFEMDAxOUMxOTggLyog
R2FtZXBhZFByb3ZpZGVyLmNwcCAqLywKLQkJCQk1MTc5Q0UyMzE5NUM4MTQyMDAxOUMxOTggLyog
R2FtZXBhZFByb3ZpZGVyLmggKi8sCi0JCQkJNTE3OUNFMjkxOTVDOTE4NjAwMTlDMTk4IC8qIEdh
bWVwYWRQcm92aWRlckNsaWVudC5oICovLAogCQkJCUNENEJFNTI5MUNFMTM0MjUwMDlEODdEQSAv
KiBHZW5lcmljVGFza1F1ZXVlLmNwcCAqLywKIAkJCQlDRDYyRkI5NDFBRjAxOEU3MDAxMkVEN0Qg
LyogR2VuZXJpY1Rhc2tRdWV1ZS5oICovLAogCQkJCUE4NzQ4QkRGMTJDQkYyREMwMDFGQkE0MSAv
KiBIYXNoVG9vbHMuaCAqLywKQEAgLTIyOTc4LDcgKzIzMDAxLDYgQEAKIAkJCQlBMTQ5Nzg3MDFB
QkFGM0E1MDBDRUY3RTQgLyogUGxhdGZvcm1Db250ZW50RmlsdGVyLmggKi8sCiAJCQkJQkM1Qzc2
MjkxNDk3RkUxNDAwQkM0Nzc1IC8qIFBsYXRmb3JtRXZlbnQuaCAqLywKIAkJCQlBNzIzRjc3QTE0
ODRDQTRDMDA4QzZEQkUgLyogUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCAqLywKLQkJCQk1MTVFNUZF
RjE5NTEwMTQ3MDA4NkNBNUUgLyogUGxhdGZvcm1HYW1lcGFkLmggKi8sCiAJCQkJOTM1QzQ3NjYw
OUFDNEQ0MzAwQTZBQUI0IC8qIFBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oICovLAogCQkJCTkzNUM0
NzY3MDlBQzRENDMwMEE2QUFCNCAvKiBQbGF0Zm9ybU1vdXNlRXZlbnQuaCAqLywKIAkJCQlDNUJB
QzE2RjE0RTMwRTQ3MDAwMDg4MzcgLyogUGxhdGZvcm1QYXN0ZWJvYXJkLmggKi8sCkBAIC0yNTA3
Nyw2ICsyNTA5OSw3IEBACiAJCQkJMjlBODEyMkMwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2li
aWxpdHlMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkyOUE4MTI0MzBGQkI5QzFEMDA1MTAyOTMg
LyogQWNjZXNzaWJpbGl0eUxpc3RCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCTI5QTgxMjQyMEZC
QjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTE1QkUxOUMxRDU0RjZDMTAwREQ3QzY4IC8qIEhJREdhbWVwYWQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTA3QjBBQkNGMTAzMjI0MjIwMEZCREMzMyAvKiBBY2Nlc3NpYmlsaXR5TWF0
aE1MRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDdCMDExM0YxMDMyMjQyMjAwRkJEQzMz
IC8qIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3NkNE
RDJGMzExMDNEQTY2MDA2ODA1MjEgLyogQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTI1MzQ0LDYgKzI1MzY3LDcgQEAKIAkJCQlFNDI1QTQ5QTE4MjkyQjg0MDAyMENG
Q0YgLyogQ29sbGVjdGlvbkluZGV4Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2RUJFQTAy
MUI3RDRENjUwMEJFNDk0MSAvKiBDb2xsZWN0aW9uVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5M0M0NDIwMDBGODEzQUUxMDBDMUE2MzQgLyogQ29sbGVjdGlvblR5cGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTUxNUJFMTkwMUQ1NEY1RkIwMEREN0M2OCAvKiBFbXB0eUdhbWVwYWRQcm92
aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjI3NTM1NjcwQjA1MzgxNDAwMkNFNjRGIC8qIENv
bG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMzMwQTIyMzEzRUMxOTZCMDAwMEI0NUIgLyogQ29s
b3JDaG9vc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMzdDREVCRDE0OUVGMjAzMDA0MjA5MEQg
LyogQ29sb3JDaG9vc2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI2MTA1LDggKzI2MTI5
LDYgQEAKIAkJCQlGRDMxNjAwRDEyQjAyNjc2MDBDMUEzNTkgLyogR2Fpbk5vZGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxNkM2MjIxMTk1MEQ0ODcwMDMzN0U3NSAvKiBHYW1lcGFkRXZlbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTUxQTlEOUVBMTk1QjkzMUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFu
YWdlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE3OUNFMjQxOTVDODE0MjAwMTlDMTk4IC8qIEdh
bWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE3OUNFMkExOTVDOTE4NjAwMTlD
MTk4IC8qIEdhbWVwYWRQcm92aWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1QzQ3
NzUwOUFDNEQ4RTAwQTZBQUI0IC8qIEdhcFJlY3RzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDMy
RTg0NzBDNTE0OTM4MDBCMTUwMEYgLyogR0NDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDMEMwNTRDQzExMThDOEU0MDBDRTI2MzYgLyogZ2VuZXJhdGUtYmluZGluZ3MucGwgaW4gSGVh
ZGVycyAqLywKQEAgLTI2MTUxLDggKzI2MTczLDYgQEAKIAkJCQk4NDgyQjc0NjExOThDMzU0MDBC
RkIwMDUgLyogSGFzaENoYW5nZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODc0OEJFMDEy
Q0JGMkRDMDAxRkJBNDEgLyogSGFzaFRvb2xzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RD
MDEyNTFGMTJEMDAzRUYyNjkgLyogSGlkZGVuSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKLQkJ
CQk1MUE5RDlGNDE5NUI5NTAzMDAxQjJCNUMgLyogSElER2FtZXBhZC5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNTE3OUNFMzcxOTVDQUM3RTAwMTlDMTk4IC8qIEhJREdhbWVwYWRQcm92aWRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkM5NEQxNTQwQzI3NUM4QjAwNkJDNjE3IC8qIEhpc3RvcnkuaCBp
biBIZWFkZXJzICovLAogCQkJCTk3RENFMjAyMTA4MDdDNzUwMDU3RDM5NCAvKiBIaXN0b3J5Q29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3NDFEMTEwQjA3MjU5QTAwRUQ0NDJDIC8q
IEhpc3RvcnlJdGVtLmggaW4gSGVhZGVycyAqLywKQEAgLTI2OTgzLDYgKzI3MDAzLDcgQEAKIAkJ
CQk2NURGMzIwNDA5RDFDQzYwMDAwQkUzMjUgLyogSlNUZXh0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5MzNBMTRCOTBCN0QxRDUyMDBBNTNGRkQgLyogSlNUZXh0RXZlbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDRUY0NUY2MEU2ODdCNUMwMDFDMTI4NyAvKiBKU1RleHRNZXRyaWNzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1MTVCRTE5NTFENTRGNUZCMDBERDdDNjggLyogUGxhdGZvcm1HYW1lcGFk
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzA3NTY5NTE0MjI2NjhEMDA0MTQxNjEgLyogSlNUZXh0
VHJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTA3MDc1NkRFMTQyMzlCNEUwMDQxNDE2MSAvKiBK
U1RleHRUcmFja0N1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDcwNzU2RTAxNDIzOUI0RTAwNDE0
MTYxIC8qIEpTVGV4dFRyYWNrQ3VlTGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzQ5NSw3ICsy
NzUxNiw2IEBACiAJCQkJMjY2MDFFQkYxNEIzQjlBRDAwMTJDMEZFIC8qIFBsYXRmb3JtRXZlbnRG
YWN0b3J5SU9TLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0FBNDg3MDE0QTA1MjUzMDA4OEZBQzQg
LyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjNGNzdC
MTQ4NENBNEMwMDhDNkRCRSAvKiBQbGF0Zm9ybUV4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJNTFCNThGRDQxOTVBOTY0RDAwMjk5MEIwIC8qIFBsYXRmb3JtR2FtZXBhZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTM1QzQ3NjgwOUFDNEQ0MzAwQTZBQUI0IC8qIFBsYXRmb3JtS2V5Ym9h
cmRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDU2MkY5NjExNTczRjg4RjAwMzFDQTE2IC8q
IFBsYXRmb3JtTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NDRGNzg5MTVDRkIyQTgwMEFG
MzNBOCAvKiBQbGF0Zm9ybUxvY2FsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzUyMSw2ICsyNzU0
MSw3IEBACiAJCQkJMDcyQUUxRTUxODNDMDc0MTAwMEE1OTg4IC8qIFBsdWdpblJlcGxhY2VtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MUUyMTgzQTE3MzU5RkI4MDA2RTZFNEQgLyogUGx1Z0lu
c1Jlc291cmNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBODc5OTAxMUNCRTg0NjAwM0M2NjRG
IC8qIFBsdWdpblN0cmF0ZWd5LmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTVCRTE5MzFENTRGNUZC
MDBERDdDNjggLyogR2FtZXBhZFByb3ZpZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
QUZEQUMzRDEwRjU0NDhDMDBFMUYzRDIgLyogUGx1Z2luVmlld0Jhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDQkI4QUI5MTNGMUFGQjAwMDczNERGMCAvKiBQT0RJbnRlcnZhbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNCQjhBQkExM0YxQUZCMDAwNzM0REYwIC8qIFBPREludGVydmFsVHJlZS5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yODI3NSw2ICsyODI5Niw3IEBACiAJCQkJODNDMUQ0MzIxNzhE
NUFCNTAwMTQxRTY4IC8qIFNWR1BhdGhTZWdMaW5ldG9SZWwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUIyMjI3QTdEMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQYXRoU2VnTGluZXRvVmVydGljYWwuaCBp
biBIZWFkZXJzICovLAogCQkJCTgzQzFENDMzMTc4RDVBQjUwMDE0MUU2OCAvKiBTVkdQYXRoU2Vn
TGluZXRvVmVydGljYWxBYnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxNUJFMTlFMUQ1NEY2QzEw
MEREN0M2OCAvKiBISURHYW1lcGFkUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzQzFE
NDM0MTc4RDVBQjUwMDE0MUU2OCAvKiBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxSZWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyMjI3QTgxMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQYXRoU2VnTGlz
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ3NkM5RTYxMURGNkEwQjAwNTU1QjAyIC8qIFNWR1Bh
dGhTZWdMaXN0QnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODMzNiw2ICsyODM1OCw3IEBA
CiAJCQkJMDgwRTQ5MjgxMjU1RjNCRDAwRUZDQTI3IC8qIFNWR1RleHRMYXlvdXRFbmdpbmVTcGFj
aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEYwQkZDNjEyNTVDNTNDMDAwNzUxODUgLyogU1ZH
VGV4dE1ldHJpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNjdCRjczMUQ0RkU0MjMwMDQxMkFD
NyAvKiBET01IVE1MUGFyYWdyYXBoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE1QkUx
OTIxRDU0RjVGQjAwREQ3QzY4IC8qIEdhbWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNzExNzQ0NTkxNEJDMzRFQzAwRUU1RkM4IC8qIFNWR1RleHRNZXRyaWNzQnVpbGRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBQ0UwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1RleHRQYXRo
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBRDEwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjkxMzcsNiAr
MjkxNjAsNyBAQAogCQkJCTUxMkREOEZBMEQ5MUU2QUYwMDBGODlFRSAvKiBBcmNoaXZlRmFjdG9y
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTJERDhGQjBEOTFFNkFGMDAwRjg5RUUgLyogQXJj
aGl2ZVJlc291cmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMkREOEY3MEQ5MUU2QUYwMDBG
ODlFRSAvKiBBcmNoaXZlUmVzb3VyY2VDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTUxNUJFMTkxMUQ1NEY1RkIwMEREN0M2OCAvKiBHYW1lcGFkUHJvdmlkZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDlCMzc2MEMxNUM2QzY4NDAwNTkxMzFEIC8qIEFycmF5VmFsdWUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRkQ1Njg2QzkxM0FDMTgwMjAwQjY5QzY4IC8qIEFzeW5jQXVkaW9E
ZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxQ0RFOTIwMTUwMThFRDAwMDg2MkNDNSAv
KiBBc3luY0ZpbGVTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTUxMyw2ICsyOTUzNyw3
IEBACiAJCQkJOTMzMDlEREUwOTlFNjQ5MjAwNTZFNTgxIC8qIERlbGV0ZUZyb21UZXh0Tm9kZUNv
bW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlERTAwOTlFNjQ5MjAwNTZFNTgxIC8q
IERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDOUFCRjgx
MzU3QTNCRjAwRjU1MDNGIC8qIERldGFpbHNNYXJrZXJDb250cm9sLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTUxNUJFMThGMUQ1NEY1RkIwMEREN0M2OCAvKiBFbXB0eUdhbWVwYWRQcm92aWRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBMUVENzc4QzFCRTMyOTQwMDBEQzE3OTEgLyogRGV2aWNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNDQzJCNTE1MTVGNjEzMDYwMDQ4Q0RENiAvKiBEZXZp
Y2VDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTMxRUFGOTdGMTIxNDM1QTQwMEU3
QzFCRiAvKiBEZXZpY2VNb3Rpb25DbGllbnRJT1MubW0gaW4gU291cmNlcyAqLywKQEAgLTI5OTEy
LDcgKzI5OTM3LDYgQEAKIAkJCQk1MThGNEZGNjE5NENBNEU2MDA4MUJBQUUgLyogR2FtZXBhZEJ1
dHRvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTZDNjIyMDE5NTBENDg3MDAzMzdFNzUgLyog
R2FtZXBhZEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxQTlEOUU5MTk1QjkzMUYwMDFC
MkI1QyAvKiBHYW1lcGFkTWFuYWdlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTc5Q0UyNjE5
NUM4MjFEMDAxOUMxOTggLyogR2FtZXBhZFByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0MzJFODQ5MEM1MTQ5M0YwMEIxNTAwRiAvKiBHQ0NvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNEZCMzkwQUQxNUVGNjFGMzAwN0FENTFGIC8qIEdlbmVyYXRlZEltYWdlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTgzMDAzMEY1MUI3RDMzQjUwMEVEM0FBQyAvKiBHZW5lcmljQ2Fj
aGVkSFRNTENvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTk0MSw4ICsyOTk2NSw2
IEBACiAJCQkJQjJBMDE1QUEwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQ0RGNzQ4M0UxOEZFQkNFQzAwMDZFQ0MwIC8qIEdyaWRQb3NpdGlv
bnNSZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNTVCM0RCRjEyNTFGMTJEMDAzRUYy
NjkgLyogSGlkZGVuSW5wdXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxQTlEOUYzMTk1
Qjk1MDMwMDFCMkI1QyAvKiBISURHYW1lcGFkLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxNzlD
RTM2MTk1Q0FDN0UwMDE5QzE5OCAvKiBISURHYW1lcGFkUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkM5NEQxNTMwQzI3NUM4QjAwNkJDNjE3IC8qIEhpc3RvcnkuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTdEQ0UyMDExMDgwN0M3NTAwNTdEMzk0IC8qIEhpc3RvcnlDb250cm9sbGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNzQxRDEyMEIwNzI1OUEwMEVENDQyQyAvKiBIaXN0
b3J5SXRlbS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5OTcwLDYgKzI5OTkyLDcgQEAKIAkJCQlB
OERGM0ZEMTA5N0ZBMEZDMDA1Mjk4MUIgLyogSFRNTENvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTc3QjM4NjQxMjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxDb25zdHJ1Y3Rpb25TaXRl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDM0U1MTBCMThERjhGMzUwMEMxMTJGNyAvKiBIVE1M
Q29udmVydGVyLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJNTE1QkUxOUQxRDU0RjZDMTAwREQ3QzY4
IC8qIEhJREdhbWVwYWRQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4MzEyMEM3MDFD
NTZGM0Y2MDAxQ0IxMTIgLyogSFRNTERhdGFFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUY1QzA0MURBMEZGQ0E3Q0UwMDgzOUQ0QSAvKiBIVE1MRGF0YUxpc3RFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUQzNTlENzg5MTI5Q0EyNzEwMDA2RTVEMiAvKiBIVE1MRGV0YWlsc0Vs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMDk5Nyw2ICszMTAyMCw3IEBACiAJCQkJMUE0
ODMyQjMxQTk1M0JBNjAwOEI0REZFIC8qIExvY2FsaXplZFN0cmluZ3NDb2NvYS5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUJDRTFDNDFDMEQ5ODI5ODEwMDNCMDJGMiAvKiBMb2NhdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBODIzOUUwMDA5QjNDRjhBMDBCNjA2NDEgLyogTG9nZ2luZy5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk1MTVCRTE5QjFENTRGNkMxMDBERDdDNjggLyogSElER2FtZXBh
ZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDAyNjQ1RTBBRkRDMTlCMDA1OTE5RTIgLyogTG9n
Z2luZ01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBMDQwOUYzMUE0MzY3NUMwMDlFNDdGMyAv
KiBNYWNoU2VuZFJpZ2h0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzMkFENzA1MTdFRkEyQzMw
MDM4RjhGRiAvKiBNYWluRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9HYW1lcGFkUHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vR2FtZXBhZFByb3ZpZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggYjBmNDkyN2YxMjNiMTA5OWY0YzA4YjY1ZTU1ZmMxYTEwZTQzODBiZi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9HYW1lcGFkUHJvdmlkZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2FtZXBhZFByb3ZpZGVyLmgi
Ci0KLSNpZiBFTkFCTEUoR0FNRVBBRCkKLQotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBHYW1lcGFkUHJvdmlkZXIqIHNoYXJl
ZFByb3ZpZGVyID0gbnVsbHB0cjsKLQotR2FtZXBhZFByb3ZpZGVyJiBHYW1lcGFkUHJvdmlkZXI6
OnNpbmdsZXRvbigpCi17Ci0gICAgaWYgKCFzaGFyZWRQcm92aWRlcikgewotICAgICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8R2FtZXBhZFByb3ZpZGVyPiBkZWZhdWx0UHJvdmlkZXI7Ci0gICAg
ICAgIHNoYXJlZFByb3ZpZGVyID0gJmRlZmF1bHRQcm92aWRlci5nZXQoKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gKnNoYXJlZFByb3ZpZGVyOwotfQotCi12b2lkIEdhbWVwYWRQcm92aWRlcjo6c2V0
U2hhcmVkUHJvdmlkZXIoR2FtZXBhZFByb3ZpZGVyJiBuZXdQcm92aWRlcikKLXsKLSAgICBzaGFy
ZWRQcm92aWRlciA9ICZuZXdQcm92aWRlcjsKLX0KLQotdm9pZCBHYW1lcGFkUHJvdmlkZXI6OnN0
YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRlckNsaWVudCopCi17Ci19Ci0KLXZv
aWQgR2FtZXBhZFByb3ZpZGVyOjpzdG9wTW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRl
ckNsaWVudCopCi17Ci19Ci0KLWNvbnN0IFZlY3RvcjxQbGF0Zm9ybUdhbWVwYWQqPiYgR2FtZXBh
ZFByb3ZpZGVyOjpwbGF0Zm9ybUdhbWVwYWRzKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8VmVjdG9yPFBsYXRmb3JtR2FtZXBhZCo+PiBkZWZhdWx0R2FtZXBhZHM7Ci0gICAgcmV0dXJu
IGRlZmF1bHRHYW1lcGFkczsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9H
YW1lcGFkUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dhbWVwYWRQcm92aWRl
ci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDFjNTMxNGFkNGFiNDYwNmU4OWE0
MmUwYmU3ODAyZTVhZDE4ZjVlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dhbWVwYWRQcm92aWRlci5oCisrKyAv
ZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgR2FtZXBhZFBy
b3ZpZGVyX2gKLSNkZWZpbmUgR2FtZXBhZFByb3ZpZGVyX2gKLQotI2lmIEVOQUJMRShHQU1FUEFE
KQotCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIEdhbWVwYWRQcm92aWRlckNsaWVudDsKLWNsYXNzIFBsYXRmb3JtR2FtZXBhZDsKLQotY2xh
c3MgR2FtZXBhZFByb3ZpZGVyIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5HYW1lcGFkUHJvdmlk
ZXIoKSB7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBHYW1lcGFkUHJvdmlkZXImIHNp
bmdsZXRvbigpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFNoYXJlZFByb3Zp
ZGVyKEdhbWVwYWRQcm92aWRlciYpOwotCi0gICAgdmlydHVhbCB2b2lkIHN0YXJ0TW9uaXRvcmlu
Z0dhbWVwYWRzKEdhbWVwYWRQcm92aWRlckNsaWVudCopOwotICAgIHZpcnR1YWwgdm9pZCBzdG9w
TW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRlckNsaWVudCopOwotICAgIHZpcnR1YWwg
Y29uc3QgVmVjdG9yPFBsYXRmb3JtR2FtZXBhZCo+JiBwbGF0Zm9ybUdhbWVwYWRzKCk7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKLSNl
bmRpZiAvLyBHYW1lcGFkUHJvdmlkZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vR2FtZXBhZFByb3ZpZGVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9H
YW1lcGFkUHJvdmlkZXJDbGllbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M5
NjkyODc1ZmRjNTE3ODkxOWIzZjczZDVmNDljYzZiNjNkMGJkZi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HYW1l
cGFkUHJvdmlkZXJDbGllbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIEdhbWVwYWRQcm92aWRlckNsaWVudF9oCi0jZGVmaW5lIEdhbWVwYWRQ
cm92aWRlckNsaWVudF9oCi0KLSNpZiBFTkFCTEUoR0FNRVBBRCkKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBQbGF0Zm9ybUdhbWVwYWQ7Ci0KLWNsYXNzIEdhbWVwYWRQcm92aWRlckNs
aWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+R2FtZXBhZFByb3ZpZGVyQ2xpZW50KCkgeyB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1HYW1lcGFkQ29ubmVjdGVkKFBsYXRmb3JtR2Ft
ZXBhZCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1HYW1lcGFkRGlzY29ubmVjdGVk
KFBsYXRmb3JtR2FtZXBhZCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1HYW1lcGFk
SW5wdXRBY3Rpdml0eSgpID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShHQU1FUEFEKQotI2VuZGlmIC8vIEdhbWVwYWRQcm92aWRlckNsaWVudF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HYW1lcGFkcy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNDUzOGNjZWQ4M2Q3NzE2YTM1MjU2YjgzMDYxYzNiNDUyODBkYmI1Ny4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9HYW1lcGFkcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICog
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICi0gKiBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBHYW1lcGFkc19oCi0jZGVmaW5lIEdhbWVwYWRzX2gKLQotI2lmIEVOQUJMRShH
QU1FUEFEX0RFUFJFQ0FURUQpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR2FtZXBh
ZExpc3Q7Ci0KLXZvaWQgc2FtcGxlR2FtZXBhZHMoR2FtZXBhZExpc3QqIGludG8pOwotCi19Ci0K
LSNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKQotCi0jZW5kaWYgLy8gR2FtZXBh
ZHNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGludXguY21ha2UgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MaW51eC5jbWFrZQppbmRleCA2NTgzZmY4NjVkZGYzNjFk
ZjAxYjIwMWQ1ZTMzMjRiNDJlMGFmNmU5Li4wODRiN2UyZWM5ZDJmYzAzNDE4ODJhZWQ1MjM4ZGQ5
NTFjZWUxNzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MaW51eC5jbWFr
ZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MaW51eC5jbWFrZQpAQCAtMSw4ICsxLDkg
QEAKIGxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9saW51eCIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ2Ft
ZXBhZHMvbGludXgiCiApCiAKIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwotICAgIHBsYXRm
b3JtL2xpbnV4L0dhbWVwYWREZXZpY2VMaW51eC5jcHAKKyAgICBwbGF0Zm9ybS9nYW1lcGFkcy9s
aW51eC9HYW1lcGFkRGV2aWNlTGludXguY3BwCiAgICAgcGxhdGZvcm0vbGludXgvTWVtb3J5UHJl
c3N1cmVIYW5kbGVyTGludXguY3BwCiApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9QbGF0Zm9ybUdhbWVwYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3Jt
R2FtZXBhZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTFjYjA2ZjA0ZjM0NWM3
ODk4OGY5MDJjYmUxZTQ4ZGJkZWRlMzc0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtR2FtZXBhZC5o
CisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgUGxh
dGZvcm1HYW1lcGFkX2gKLSNkZWZpbmUgUGxhdGZvcm1HYW1lcGFkX2gKLQotI2lmIEVOQUJMRShH
QU1FUEFEKQotCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBsYXRmb3JtR2FtZXBh
ZCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+UGxhdGZvcm1HYW1lcGFkKCkgeyB9Ci0KLSAgICBj
b25zdCBTdHJpbmcmIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQotICAgIHVuc2lnbmVkIGlu
ZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQotICAgIGRvdWJsZSBsYXN0VXBkYXRlVGlt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFVwZGF0ZVRpbWU7IH0KLSAgICBkb3VibGUgY29ubmVj
dFRpbWUoKSBjb25zdCB7IHJldHVybiBtX2Nvbm5lY3RUaW1lOyB9Ci0gICAgdmlydHVhbCBjb25z
dCBWZWN0b3I8ZG91YmxlPiYgYXhpc1ZhbHVlcygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGNv
bnN0IFZlY3Rvcjxkb3VibGU+JiBidXR0b25WYWx1ZXMoKSBjb25zdCA9IDA7Ci0KLXByb3RlY3Rl
ZDoKLSAgICBleHBsaWNpdCBQbGF0Zm9ybUdhbWVwYWQodW5zaWduZWQgaW5kZXgpCi0gICAgICAg
IDogbV9pbmRleChpbmRleCkKLSAgICAgICAgLCBtX2xhc3RVcGRhdGVUaW1lKDAuMCkKLSAgICAg
ICAgLCBtX2Nvbm5lY3RUaW1lKDAuMCkKLSAgICB7Ci0gICAgfQotCi0gICAgU3RyaW5nIG1faWQ7
Ci0gICAgdW5zaWduZWQgbV9pbmRleDsKLSAgICBkb3VibGUgbV9sYXN0VXBkYXRlVGltZTsKLSAg
ICBkb3VibGUgbV9jb25uZWN0VGltZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEKQotI2VuZGlmIC8vIFBsYXRmb3JtR2FtZXBhZF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvR2FtZXBhZHNFZmwuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0dhbWVwYWRzRWZsLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYjZmOWVhNTNjZTM2ZjAwMTk1ZDdjNGUyYjExMWNiNTFiMjMzOGU3
NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lZmwvR2FtZXBhZHNFZmwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MjQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJHYW1lcGFkcy5oIgotCi0jaWYgRU5BQkxFKEdBTUVQQURfREVQUkVDQVRFRCkKLQot
I2luY2x1ZGUgIkdhbWVwYWREZXZpY2VMaW51eC5oIgotI2luY2x1ZGUgIkdhbWVwYWRMaXN0Lmgi
Ci0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgPEVjb3JlLmg+Ci0jaW5jbHVkZSA8RWV6
ZS5oPgotI2luY2x1ZGUgPEVpbmEuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IGNoYXIgam95c3RpY2tQcmVmaXhb
XSA9ICIvZGV2L2lucHV0L2pzIjsKLQotY2xhc3MgR2FtZXBhZERldmljZUVmbCA6IHB1YmxpYyBH
YW1lcGFkRGV2aWNlTGludXggewotcHVibGljOgotICAgIGV4cGxpY2l0IEdhbWVwYWREZXZpY2VF
ZmwoY29uc3QgU3RyaW5nJiBkZXZpY2VGaWxlKTsKLSAgICB+R2FtZXBhZERldmljZUVmbCgpOwot
ICAgIHZvaWQgcmVzZXRGZEhhbmRsZXIoKSB7IG1fZmRIYW5kbGVyID0gMDsgfQotICAgIGNvbnN0
IFN0cmluZyYgZGV2aWNlRmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlRmlsZTsgfQotCi1w
cml2YXRlOgotICAgIHN0YXRpYyBFaW5hX0Jvb2wgcmVhZENhbGxiYWNrKHZvaWQqIHVzZXJEYXRh
LCBFY29yZV9GZF9IYW5kbGVyKik7Ci0KLSAgICBFY29yZV9GZF9IYW5kbGVyKiBtX2ZkSGFuZGxl
cjsKLSAgICBTdHJpbmcgbV9kZXZpY2VGaWxlOwotfTsKLQotR2FtZXBhZERldmljZUVmbDo6R2Ft
ZXBhZERldmljZUVmbChjb25zdCBTdHJpbmcmIGRldmljZUZpbGUpCi0gICAgOiBHYW1lcGFkRGV2
aWNlTGludXgoZGV2aWNlRmlsZSkKLSAgICAsIG1fZmRIYW5kbGVyKDApCi0gICAgLCBtX2Rldmlj
ZUZpbGUoZGV2aWNlRmlsZSkKLXsKLSAgICBpZiAobV9maWxlRGVzY3JpcHRvciA8IDApCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fZmRIYW5kbGVyID0gZWNvcmVfbWFpbl9mZF9oYW5kbGVyX2Fk
ZChtX2ZpbGVEZXNjcmlwdG9yLCBFQ09SRV9GRF9SRUFELCByZWFkQ2FsbGJhY2ssIHRoaXMsIDAs
IDApOwotICAgIGlmICghbV9mZEhhbmRsZXIpCi0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IGNyZWF0ZSB0aGUgRWNvcmVfRmRfSGFuZGxlci4iKTsKLX0KLQotR2FtZXBhZERldmljZUVmbDo6
fkdhbWVwYWREZXZpY2VFZmwoKQotewotICAgIGlmIChtX2ZkSGFuZGxlcikKLSAgICAgICAgZWNv
cmVfbWFpbl9mZF9oYW5kbGVyX2RlbChtX2ZkSGFuZGxlcik7Ci19Ci0KLUVpbmFfQm9vbCBHYW1l
cGFkRGV2aWNlRWZsOjpyZWFkQ2FsbGJhY2sodm9pZCogdXNlckRhdGEsIEVjb3JlX0ZkX0hhbmRs
ZXIqIGZkSGFuZGxlcikKLXsKLSAgICBHYW1lcGFkRGV2aWNlRWZsKiBnYW1lcGFkRGV2aWNlID0g
c3RhdGljX2Nhc3Q8R2FtZXBhZERldmljZUVmbCo+KHVzZXJEYXRhKTsKLQotICAgIGlmIChlY29y
ZV9tYWluX2ZkX2hhbmRsZXJfYWN0aXZlX2dldChmZEhhbmRsZXIsIEVDT1JFX0ZEX0VSUk9SKSkg
ewotICAgICAgICBMT0dfRVJST1IoIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHdhdGNoaW5nIHRo
ZSBqb3lzdGljayBmaWxlIGRlc2NyaXB0b3IgYXQgJXMsIGFib3J0aW5nLiIsIGdhbWVwYWREZXZp
Y2UtPmRldmljZUZpbGUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgZ2FtZXBhZERldmljZS0+
cmVzZXRGZEhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNFTDsK
LSAgICB9Ci0KLSAgICBpbnQgZmREZXZpY2UgPSBlY29yZV9tYWluX2ZkX2hhbmRsZXJfZmRfZ2V0
KGZkSGFuZGxlcik7Ci0gICAgc3RydWN0IGpzX2V2ZW50IGV2ZW50OwotICAgIGNvbnN0IHNzaXpl
X3QgbGVuID0gcmVhZChmZERldmljZSwgJmV2ZW50LCBzaXplb2YoZXZlbnQpKTsKLQotICAgIGlm
IChsZW4gPD0gMCkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGpveXN0aWNr
IGZpbGUgZGVzY3JpcHRvciBhdCAlcywgYWJvcnRpbmcuIiwgZ2FtZXBhZERldmljZS0+ZGV2aWNl
RmlsZSgpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBnYW1lcGFkRGV2aWNlLT5yZXNldEZkSGFu
ZGxlcigpOwotICAgICAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOwotICAgIH0KLSAg
ICBpZiAobGVuICE9IHNpemVvZihldmVudCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJXcm9uZyBq
c19ldmVudCBzaXplIHJlYWQgb24gZmlsZSBkZXNjcmlwdG9yIGF0ICVzLCBpZ25vcmluZy4iLCBn
YW1lcGFkRGV2aWNlLT5kZXZpY2VGaWxlKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVy
biBFQ09SRV9DQUxMQkFDS19SRU5FVzsKLSAgICB9Ci0KLSAgICBnYW1lcGFkRGV2aWNlLT51cGRh
dGVGb3JFdmVudChldmVudCk7Ci0gICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX1JFTkVXOwotfQot
Ci1jbGFzcyBHYW1lcGFkc0VmbCB7Ci0gICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPEdh
bWVwYWRzRWZsPjsKLXB1YmxpYzoKLSAgICBHYW1lcGFkc0VmbChzaXplX3QgbGVuZ3RoKTsKLQot
ICAgIHZvaWQgcmVnaXN0ZXJEZXZpY2UoY29uc3QgU3RyaW5nJiBzeXNwYXRoKTsKLSAgICB2b2lk
IHVucmVnaXN0ZXJEZXZpY2UoY29uc3QgU3RyaW5nJiBzeXNwYXRoKTsKLQotICAgIHZvaWQgdXBk
YXRlR2FtZXBhZExpc3QoR2FtZXBhZExpc3QqKTsKLQotcHJpdmF0ZToKLSAgICB+R2FtZXBhZHNF
ZmwoKTsKLSAgICBzdGF0aWMgdm9pZCBvbkdhbWVQYWRDaGFuZ2UoY29uc3QgY2hhciogc3lzcGF0
aCwgRWV6ZV9VZGV2X0V2ZW50LCB2b2lkKiB1c2VyRGF0YSwgRWV6ZV9VZGV2X1dhdGNoKiB3YXRj
aGVyKTsKLQotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8R2FtZXBhZERldmljZUVmbD4+IG1f
c2xvdHM7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIEdhbWVwYWREZXZpY2VFZmwqPiBtX2RldmljZU1h
cDsKLQotICAgIEVlemVfVWRldl9XYXRjaCogbV9nYW1lcGFkc1dhdGNoZXI7Ci19OwotCi12b2lk
IEdhbWVwYWRzRWZsOjpvbkdhbWVQYWRDaGFuZ2UoY29uc3QgY2hhciogc3lzcGF0aCwgRWV6ZV9V
ZGV2X0V2ZW50IGV2ZW50LCB2b2lkKiB1c2VyRGF0YSwgRWV6ZV9VZGV2X1dhdGNoKikKLXsKLSAg
ICBHYW1lcGFkc0VmbCogZ2FtZXBhZHNFZmwgPSBzdGF0aWNfY2FzdDxHYW1lcGFkc0VmbCo+KHVz
ZXJEYXRhKTsKLQotICAgIHN3aXRjaCAoZXZlbnQpIHsKLSAgICBjYXNlIEVFWkVfVURFVl9FVkVO
VF9BREQ6Ci0gICAgICAgIGdhbWVwYWRzRWZsLT5yZWdpc3RlckRldmljZShTdHJpbmc6OmZyb21V
VEY4KHN5c3BhdGgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFRVpFX1VERVZfRVZFTlRf
UkVNT1ZFOgotICAgICAgICBnYW1lcGFkc0VmbC0+dW5yZWdpc3RlckRldmljZShTdHJpbmc6OmZy
b21VVEY4KHN5c3BhdGgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotfQotCi1HYW1lcGFkc0VmbDo6R2FtZXBhZHNFZmwoc2l6ZV90IGxlbmd0
aCkKLSAgICA6IG1fc2xvdHMobGVuZ3RoKQotICAgICwgbV9nYW1lcGFkc1dhdGNoZXIoMCkKLXsK
LSAgICBpZiAoZWV6ZV9pbml0KCkgPCAwKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IGluaXRpYWxpemUgZWV6ZSBsaWJyYXJ5LiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gV2F0Y2ggZm9yIGdhbWVwYWRzIGFkZGl0aW9ucyAvIHJlbW92YWxzLgotICAgIG1fZ2Ft
ZXBhZHNXYXRjaGVyID0gZWV6ZV91ZGV2X3dhdGNoX2FkZChFRVpFX1VERVZfVFlQRV9KT1lTVElD
SywgKEVFWkVfVURFVl9FVkVOVF9BREQgfCBFRVpFX1VERVZfRVZFTlRfUkVNT1ZFKSwgb25HYW1l
UGFkQ2hhbmdlLCB0aGlzKTsKLQotICAgIC8vIExpc3QgYXZhaWxhYmxlIGdhbWVwYWRzLgotICAg
IEVpbmFfTGlzdCogZ2FtZXBhZHMgPSBlZXplX3VkZXZfZmluZF9ieV90eXBlKEVFWkVfVURFVl9U
WVBFX0pPWVNUSUNLLCAwKTsKLSAgICB2b2lkKiBkYXRhOwotICAgIEVJTkFfTElTVF9GUkVFKGdh
bWVwYWRzLCBkYXRhKSB7Ci0gICAgICAgIGNoYXIqIHN5c3BhdGggPSBzdGF0aWNfY2FzdDxjaGFy
Kj4oZGF0YSk7Ci0gICAgICAgIHJlZ2lzdGVyRGV2aWNlKFN0cmluZzo6ZnJvbVVURjgoc3lzcGF0
aCkpOwotICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzeXNwYXRoKTsKLSAgICB9Ci19Ci0K
LUdhbWVwYWRzRWZsOjp+R2FtZXBhZHNFZmwoKQotewotICAgIGlmIChtX2dhbWVwYWRzV2F0Y2hl
cikKLSAgICAgICAgZWV6ZV91ZGV2X3dhdGNoX2RlbChtX2dhbWVwYWRzV2F0Y2hlcik7Ci0gICAg
ZWV6ZV9zaHV0ZG93bigpOwotfQotCi12b2lkIEdhbWVwYWRzRWZsOjpyZWdpc3RlckRldmljZShj
b25zdCBTdHJpbmcmIHN5c3BhdGgpCi17Ci0gICAgaWYgKG1fZGV2aWNlTWFwLmNvbnRhaW5zKHN5
c3BhdGgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBNYWtlIHN1cmUgaXQgaXMgYSB2YWxp
ZCBqb3lzdGljay4KLSAgICBjb25zdCBjaGFyKiBkZXZpY2VGaWxlID0gZWV6ZV91ZGV2X3N5c3Bh
dGhfZ2V0X2RldnBhdGgoc3lzcGF0aC51dGY4KCkuZGF0YSgpKTsKLSAgICBpZiAoIWRldmljZUZp
bGUgfHwgIWVpbmFfc3RyX2hhc19wcmVmaXgoZGV2aWNlRmlsZSwgam95c3RpY2tQcmVmaXgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBMT0coR2FtZXBhZCwgIlJlZ2lzdGVyaW5nIGdhbWVwYWQg
YXQgJXMiLCBkZXZpY2VGaWxlKTsKLQotICAgIGNvbnN0IHNpemVfdCBzbG90Q291bnQgPSBtX3Ns
b3RzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgc2xvdENvdW50
OyArK2luZGV4KSB7Ci0gICAgICAgIGlmICghbV9zbG90c1tpbmRleF0pIHsKLSAgICAgICAgICAg
IG1fc2xvdHNbaW5kZXhdID0gc3RkOjptYWtlX3VuaXF1ZTxHYW1lcGFkRGV2aWNlRWZsPihTdHJp
bmc6OmZyb21VVEY4KGRldmljZUZpbGUpKTsKLSAgICAgICAgICAgIExPRyhHYW1lcGFkLCAiR2Ft
ZXBhZCBkZXZpY2UgbmFtZSBpcyAlcyIsIG1fc2xvdHNbaW5kZXhdLT5pZCgpLnV0ZjgoKS5kYXRh
KCkpOwotICAgICAgICAgICAgbV9kZXZpY2VNYXAuYWRkKHN5c3BhdGgsIG1fc2xvdHNbaW5kZXhd
LmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IEdhbWVwYWRzRWZsOjp1bnJlZ2lzdGVyRGV2aWNlKGNvbnN0IFN0cmluZyYgc3lzcGF0aCkKLXsK
LSAgICBpZiAoIW1fZGV2aWNlTWFwLmNvbnRhaW5zKHN5c3BhdGgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBHYW1lcGFkRGV2aWNlRWZsKiBnYW1lcGFkRGV2aWNlID0gbV9kZXZpY2VNYXAudGFr
ZShzeXNwYXRoKTsKLSAgICBMT0coR2FtZXBhZCwgIlVucmVnaXN0ZXJpbmcgZ2FtZXBhZCBhdCAl
cyIsIGdhbWVwYWREZXZpY2UtPmRldmljZUZpbGUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBjb25z
dCBzaXplX3QgaW5kZXggPSBtX3Nsb3RzLmZpbmQoc3RkOjptYWtlX3VuaXF1ZTxHYW1lcGFkRGV2
aWNlRWZsPihnYW1lcGFkRGV2aWNlLT5kZXZpY2VGaWxlKCkpKTsKLSAgICBBU1NFUlQoaW5kZXgg
IT0gbm90Rm91bmQpOwotCi0gICAgbV9zbG90c1tpbmRleF0gPSBudWxscHRyOwotfQotCi12b2lk
IEdhbWVwYWRzRWZsOjp1cGRhdGVHYW1lcGFkTGlzdChHYW1lcGFkTGlzdCogaW50bykKLXsKLSAg
ICBBU1NFUlQobV9zbG90cy5zaXplKCkgPT0gaW50by0+bGVuZ3RoKCkpOwotCi0gICAgY29uc3Qg
c2l6ZV90IHNsb3RDb3VudCA9IG1fc2xvdHMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2xvdENvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKG1fc2xvdHNbaV0uZ2V0KCkgJiYg
bV9zbG90c1tpXS0+Y29ubmVjdGVkKCkpIHsKLSAgICAgICAgICAgIEdhbWVwYWREZXZpY2VFZmwq
IGdhbWVwYWREZXZpY2UgPSBtX3Nsb3RzW2ldLmdldCgpOwotICAgICAgICAgICAgUmVmUHRyPEdh
bWVwYWQ+IGdhbWVwYWQgPSBpbnRvLT5pdGVtKGkpOwotICAgICAgICAgICAgaWYgKCFnYW1lcGFk
KQotICAgICAgICAgICAgICAgIGdhbWVwYWQgPSBHYW1lcGFkOjpjcmVhdGUoKTsKLQotICAgICAg
ICAgICAgZ2FtZXBhZC0+aW5kZXgoaSk7Ci0gICAgICAgICAgICBnYW1lcGFkLT5pZChnYW1lcGFk
RGV2aWNlLT5pZCgpKTsKLSAgICAgICAgICAgIGdhbWVwYWQtPnRpbWVzdGFtcChnYW1lcGFkRGV2
aWNlLT50aW1lc3RhbXAoKSk7Ci0gICAgICAgICAgICBnYW1lcGFkLT5heGVzKGdhbWVwYWREZXZp
Y2UtPmF4ZXNDb3VudCgpLCBnYW1lcGFkRGV2aWNlLT5heGVzRGF0YSgpKTsKLSAgICAgICAgICAg
IGdhbWVwYWQtPmJ1dHRvbnMoZ2FtZXBhZERldmljZS0+YnV0dG9uc0NvdW50KCksIGdhbWVwYWRE
ZXZpY2UtPmJ1dHRvbnNEYXRhKCkpOwotCi0gICAgICAgICAgICBpbnRvLT5zZXQoaSwgZ2FtZXBh
ZCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaW50by0+c2V0KGksIDApOwotICAgIH0K
LX0KLQotdm9pZCBzYW1wbGVHYW1lcGFkcyhHYW1lcGFkTGlzdCogaW50bykKLXsKLSAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8R2FtZXBhZHNFZmw+IGdhbWVwYWRzRWZsKGludG8tPmxlbmd0aCgp
KTsKLSAgICBnYW1lcGFkc0VmbC5nZXQoKS51cGRhdGVHYW1lcGFkTGlzdChpbnRvKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEdBTUVQQURfREVQUkVD
QVRFRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWRzL0VtcHR5
R2FtZXBhZFByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWRzL0Vt
cHR5R2FtZXBhZFByb3ZpZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMmRkZGRhOTAwYmQyYzEwNzQwOWZl
NWI3ZmVkNDQ2MDQxYThmMjMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ2FtZXBhZHMvRW1wdHlHYW1lcGFkUHJvdmlkZXIuY3BwCkBAIC0wLDAgKzEsNTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRW1wdHlHYW1lcGFk
UHJvdmlkZXIuaCIKKworI2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBFbXB0eUdhbWVwYWRQ
cm92aWRlcjo6c3RhcnRNb25pdG9yaW5nR2FtZXBhZHMoR2FtZXBhZFByb3ZpZGVyQ2xpZW50KikK
K3sKK30KKwordm9pZCBFbXB0eUdhbWVwYWRQcm92aWRlcjo6c3RvcE1vbml0b3JpbmdHYW1lcGFk
cyhHYW1lcGFkUHJvdmlkZXJDbGllbnQqICkKK3sKK30KKworY29uc3QgVmVjdG9yPFBsYXRmb3Jt
R2FtZXBhZCo+JiBFbXB0eUdhbWVwYWRQcm92aWRlcjo6cGxhdGZvcm1HYW1lcGFkcygpCit7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFZlY3RvcjxQbGF0Zm9ybUdhbWVwYWQqPj4gZW1wdHlH
YW1lcGFkczsKKyAgICByZXR1cm4gZW1wdHlHYW1lcGFkczsKK30KKworfQorCisjZW5kaWYgLy8g
RU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1l
cGFkcy9FbXB0eUdhbWVwYWRQcm92aWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2Ft
ZXBhZHMvRW1wdHlHYW1lcGFkUHJvdmlkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZDY0NzVmMGQzZmU0YzVh
Nzg1YmY4YTliMzg2NDY1ODJlMTMxODIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ2FtZXBhZHMvRW1wdHlHYW1lcGFkUHJvdmlkZXIuaApAQCAtMCwwICsxLDQ1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKwor
I2luY2x1ZGUgIkdhbWVwYWRQcm92aWRlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEVtcHR5R2FtZXBhZFByb3ZpZGVyIDogcHVibGljIEdhbWVwYWRQcm92aWRlciB7CitwdWJs
aWM6CisgICAgfkVtcHR5R2FtZXBhZFByb3ZpZGVyKCkgZmluYWwgeyB9CisKKyAgICB2b2lkIHN0
YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRlckNsaWVudCopIGZpbmFsOworICAg
IHZvaWQgc3RvcE1vbml0b3JpbmdHYW1lcGFkcyhHYW1lcGFkUHJvdmlkZXJDbGllbnQqKSBmaW5h
bDsKKyAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4mIHBsYXRmb3JtR2FtZXBhZHMo
KSBmaW5hbDsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZHMvR2FtZXBhZFByb3ZpZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWRzL0dhbWVwYWRQcm92aWRlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODg2MWEwZWFmNWNmZTc2MzQxYjgzNjQ1Y2Q0YjRkNjljODQwNGFmNAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWRzL0dhbWVwYWRQcm92
aWRlci5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiR2FtZXBhZFByb3ZpZGVyLmgiCisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKwor
I2luY2x1ZGUgIkVtcHR5R2FtZXBhZFByb3ZpZGVyLmgiCisjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIEdhbWVwYWRQcm92aWRl
ciogc2hhcmVkUHJvdmlkZXIgPSBudWxscHRyOworCitHYW1lcGFkUHJvdmlkZXImIEdhbWVwYWRQ
cm92aWRlcjo6c2luZ2xldG9uKCkKK3sKKyAgICBpZiAoIXNoYXJlZFByb3ZpZGVyKSB7CisgICAg
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxFbXB0eUdhbWVwYWRQcm92aWRlcj4gZGVmYXVsdFBy
b3ZpZGVyOworICAgICAgICBzaGFyZWRQcm92aWRlciA9ICZkZWZhdWx0UHJvdmlkZXIuZ2V0KCk7
CisgICAgfQorCisgICAgcmV0dXJuICpzaGFyZWRQcm92aWRlcjsKK30KKwordm9pZCBHYW1lcGFk
UHJvdmlkZXI6OnNldFNoYXJlZFByb3ZpZGVyKEdhbWVwYWRQcm92aWRlciYgbmV3UHJvdmlkZXIp
Cit7CisgICAgc2hhcmVkUHJvdmlkZXIgPSAmbmV3UHJvdmlkZXI7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZHMvR2FtZXBhZFByb3ZpZGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkcy9HYW1lcGFkUHJvdmlkZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
M2E4ODM4YzIzNzI0OWRhYWEyM2ZkNjQyZGQ2YzlkZmJlMWZiNDFhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZHMvR2FtZXBhZFByb3ZpZGVyLmgKQEAg
LTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdB
TUVQQUQpCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgR2FtZXBhZFByb3ZpZGVyQ2xpZW50OworY2xhc3MgUGxhdGZvcm1HYW1lcGFkOwor
CitjbGFzcyBHYW1lcGFkUHJvdmlkZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfkdhbWVwYWRQ
cm92aWRlcigpIHsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEdhbWVwYWRQcm92aWRl
ciYgc2luZ2xldG9uKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0U2hhcmVk
UHJvdmlkZXIoR2FtZXBhZFByb3ZpZGVyJik7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRNb25p
dG9yaW5nR2FtZXBhZHMoR2FtZXBhZFByb3ZpZGVyQ2xpZW50KikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzdG9wTW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRlckNsaWVudCopID0gMDsK
KyAgICB2aXJ0dWFsIGNvbnN0IFZlY3RvcjxQbGF0Zm9ybUdhbWVwYWQqPiYgcGxhdGZvcm1HYW1l
cGFkcygpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShHQU1FUEFEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBh
ZHMvR2FtZXBhZFByb3ZpZGVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1l
cGFkcy9HYW1lcGFkUHJvdmlkZXJDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZWExMDJhNWVhZDdjNTQ1
Y2Y4OTEzY2IxODBkODBlYTljZGE3NWI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ2FtZXBhZHMvR2FtZXBhZFByb3ZpZGVyQ2xpZW50LmgKQEAgLTAsMCArMSw0
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdBTUVQQUQpCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGxhdGZvcm1HYW1lcGFkOworCitjbGFzcyBH
YW1lcGFkUHJvdmlkZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkdhbWVwYWRQcm92
aWRlckNsaWVudCgpIHsgfQorCisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtR2FtZXBhZENvbm5l
Y3RlZChQbGF0Zm9ybUdhbWVwYWQmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtR2Ft
ZXBhZERpc2Nvbm5lY3RlZChQbGF0Zm9ybUdhbWVwYWQmKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHBsYXRmb3JtR2FtZXBhZElucHV0QWN0aXZpdHkoKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWRzL1BsYXRmb3JtR2FtZXBhZC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ2FtZXBhZHMvUGxhdGZvcm1HYW1lcGFkLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmI4
ZDdhOTk4ZGE1Yjk2NmVkZTkyNjE4M2Y5MGMxMDNmYWY5NjY0OAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWRzL1BsYXRmb3JtR2FtZXBhZC5oCkBAIC0w
LDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHQU1F
UEFEKQorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsYXRmb3JtR2FtZXBhZCB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+UGxhdGZvcm1HYW1lcGFkKCkgeyB9CisKKyAgICBjb25z
dCBTdHJpbmcmIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIHVuc2lnbmVkIGluZGV4
KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIGRvdWJsZSBsYXN0VXBkYXRlVGltZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbGFzdFVwZGF0ZVRpbWU7IH0KKyAgICBkb3VibGUgY29ubmVjdFRp
bWUoKSBjb25zdCB7IHJldHVybiBtX2Nvbm5lY3RUaW1lOyB9CisgICAgdmlydHVhbCBjb25zdCBW
ZWN0b3I8ZG91YmxlPiYgYXhpc1ZhbHVlcygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGNvbnN0
IFZlY3Rvcjxkb3VibGU+JiBidXR0b25WYWx1ZXMoKSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoK
KyAgICBleHBsaWNpdCBQbGF0Zm9ybUdhbWVwYWQodW5zaWduZWQgaW5kZXgpCisgICAgICAgIDog
bV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX2xhc3RVcGRhdGVUaW1lKDAuMCkKKyAgICAgICAg
LCBtX2Nvbm5lY3RUaW1lKDAuMCkKKyAgICB7CisgICAgfQorCisgICAgU3RyaW5nIG1faWQ7Cisg
ICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBkb3VibGUgbV9sYXN0VXBkYXRlVGltZTsKKyAgICBk
b3VibGUgbV9jb25uZWN0VGltZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShHQU1FUEFEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ2FtZXBhZHMvZWZsL0dhbWVwYWRzRWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dhbWVwYWRzL2VmbC9HYW1lcGFkc0VmbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjZmOWVhNTNjZTM2ZjAw
MTk1ZDdjNGUyYjExMWNiNTFiMjMzOGU3NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dhbWVwYWRzL2VmbC9HYW1lcGFkc0VmbC5jcHAKQEAgLTAsMCArMSwyNDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJH
YW1lcGFkcy5oIgorCisjaWYgRU5BQkxFKEdBTUVQQURfREVQUkVDQVRFRCkKKworI2luY2x1ZGUg
IkdhbWVwYWREZXZpY2VMaW51eC5oIgorI2luY2x1ZGUgIkdhbWVwYWRMaXN0LmgiCisjaW5jbHVk
ZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8RWV6ZS5oPgorI2lu
Y2x1ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGNoYXIgam95c3RpY2tQcmVmaXhbXSA9ICIvZGV2
L2lucHV0L2pzIjsKKworY2xhc3MgR2FtZXBhZERldmljZUVmbCA6IHB1YmxpYyBHYW1lcGFkRGV2
aWNlTGludXggeworcHVibGljOgorICAgIGV4cGxpY2l0IEdhbWVwYWREZXZpY2VFZmwoY29uc3Qg
U3RyaW5nJiBkZXZpY2VGaWxlKTsKKyAgICB+R2FtZXBhZERldmljZUVmbCgpOworICAgIHZvaWQg
cmVzZXRGZEhhbmRsZXIoKSB7IG1fZmRIYW5kbGVyID0gMDsgfQorICAgIGNvbnN0IFN0cmluZyYg
ZGV2aWNlRmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlRmlsZTsgfQorCitwcml2YXRlOgor
ICAgIHN0YXRpYyBFaW5hX0Jvb2wgcmVhZENhbGxiYWNrKHZvaWQqIHVzZXJEYXRhLCBFY29yZV9G
ZF9IYW5kbGVyKik7CisKKyAgICBFY29yZV9GZF9IYW5kbGVyKiBtX2ZkSGFuZGxlcjsKKyAgICBT
dHJpbmcgbV9kZXZpY2VGaWxlOworfTsKKworR2FtZXBhZERldmljZUVmbDo6R2FtZXBhZERldmlj
ZUVmbChjb25zdCBTdHJpbmcmIGRldmljZUZpbGUpCisgICAgOiBHYW1lcGFkRGV2aWNlTGludXgo
ZGV2aWNlRmlsZSkKKyAgICAsIG1fZmRIYW5kbGVyKDApCisgICAgLCBtX2RldmljZUZpbGUoZGV2
aWNlRmlsZSkKK3sKKyAgICBpZiAobV9maWxlRGVzY3JpcHRvciA8IDApCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fZmRIYW5kbGVyID0gZWNvcmVfbWFpbl9mZF9oYW5kbGVyX2FkZChtX2ZpbGVE
ZXNjcmlwdG9yLCBFQ09SRV9GRF9SRUFELCByZWFkQ2FsbGJhY2ssIHRoaXMsIDAsIDApOworICAg
IGlmICghbV9mZEhhbmRsZXIpCisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGNyZWF0ZSB0
aGUgRWNvcmVfRmRfSGFuZGxlci4iKTsKK30KKworR2FtZXBhZERldmljZUVmbDo6fkdhbWVwYWRE
ZXZpY2VFZmwoKQoreworICAgIGlmIChtX2ZkSGFuZGxlcikKKyAgICAgICAgZWNvcmVfbWFpbl9m
ZF9oYW5kbGVyX2RlbChtX2ZkSGFuZGxlcik7Cit9CisKK0VpbmFfQm9vbCBHYW1lcGFkRGV2aWNl
RWZsOjpyZWFkQ2FsbGJhY2sodm9pZCogdXNlckRhdGEsIEVjb3JlX0ZkX0hhbmRsZXIqIGZkSGFu
ZGxlcikKK3sKKyAgICBHYW1lcGFkRGV2aWNlRWZsKiBnYW1lcGFkRGV2aWNlID0gc3RhdGljX2Nh
c3Q8R2FtZXBhZERldmljZUVmbCo+KHVzZXJEYXRhKTsKKworICAgIGlmIChlY29yZV9tYWluX2Zk
X2hhbmRsZXJfYWN0aXZlX2dldChmZEhhbmRsZXIsIEVDT1JFX0ZEX0VSUk9SKSkgeworICAgICAg
ICBMT0dfRVJST1IoIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHdhdGNoaW5nIHRoZSBqb3lzdGlj
ayBmaWxlIGRlc2NyaXB0b3IgYXQgJXMsIGFib3J0aW5nLiIsIGdhbWVwYWREZXZpY2UtPmRldmlj
ZUZpbGUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZ2FtZXBhZERldmljZS0+cmVzZXRGZEhh
bmRsZXIoKTsKKyAgICAgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKKyAgICB9CisK
KyAgICBpbnQgZmREZXZpY2UgPSBlY29yZV9tYWluX2ZkX2hhbmRsZXJfZmRfZ2V0KGZkSGFuZGxl
cik7CisgICAgc3RydWN0IGpzX2V2ZW50IGV2ZW50OworICAgIGNvbnN0IHNzaXplX3QgbGVuID0g
cmVhZChmZERldmljZSwgJmV2ZW50LCBzaXplb2YoZXZlbnQpKTsKKworICAgIGlmIChsZW4gPD0g
MCkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byByZWFkIGpveXN0aWNrIGZpbGUgZGVz
Y3JpcHRvciBhdCAlcywgYWJvcnRpbmcuIiwgZ2FtZXBhZERldmljZS0+ZGV2aWNlRmlsZSgpLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICBnYW1lcGFkRGV2aWNlLT5yZXNldEZkSGFuZGxlcigpOwor
ICAgICAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOworICAgIH0KKyAgICBpZiAobGVu
ICE9IHNpemVvZihldmVudCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJXcm9uZyBqc19ldmVudCBz
aXplIHJlYWQgb24gZmlsZSBkZXNjcmlwdG9yIGF0ICVzLCBpZ25vcmluZy4iLCBnYW1lcGFkRGV2
aWNlLT5kZXZpY2VGaWxlKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBFQ09SRV9D
QUxMQkFDS19SRU5FVzsKKyAgICB9CisKKyAgICBnYW1lcGFkRGV2aWNlLT51cGRhdGVGb3JFdmVu
dChldmVudCk7CisgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX1JFTkVXOworfQorCitjbGFzcyBH
YW1lcGFkc0VmbCB7CisgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPEdhbWVwYWRzRWZs
PjsKK3B1YmxpYzoKKyAgICBHYW1lcGFkc0VmbChzaXplX3QgbGVuZ3RoKTsKKworICAgIHZvaWQg
cmVnaXN0ZXJEZXZpY2UoY29uc3QgU3RyaW5nJiBzeXNwYXRoKTsKKyAgICB2b2lkIHVucmVnaXN0
ZXJEZXZpY2UoY29uc3QgU3RyaW5nJiBzeXNwYXRoKTsKKworICAgIHZvaWQgdXBkYXRlR2FtZXBh
ZExpc3QoR2FtZXBhZExpc3QqKTsKKworcHJpdmF0ZToKKyAgICB+R2FtZXBhZHNFZmwoKTsKKyAg
ICBzdGF0aWMgdm9pZCBvbkdhbWVQYWRDaGFuZ2UoY29uc3QgY2hhciogc3lzcGF0aCwgRWV6ZV9V
ZGV2X0V2ZW50LCB2b2lkKiB1c2VyRGF0YSwgRWV6ZV9VZGV2X1dhdGNoKiB3YXRjaGVyKTsKKwor
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8R2FtZXBhZERldmljZUVmbD4+IG1fc2xvdHM7Cisg
ICAgSGFzaE1hcDxTdHJpbmcsIEdhbWVwYWREZXZpY2VFZmwqPiBtX2RldmljZU1hcDsKKworICAg
IEVlemVfVWRldl9XYXRjaCogbV9nYW1lcGFkc1dhdGNoZXI7Cit9OworCit2b2lkIEdhbWVwYWRz
RWZsOjpvbkdhbWVQYWRDaGFuZ2UoY29uc3QgY2hhciogc3lzcGF0aCwgRWV6ZV9VZGV2X0V2ZW50
IGV2ZW50LCB2b2lkKiB1c2VyRGF0YSwgRWV6ZV9VZGV2X1dhdGNoKikKK3sKKyAgICBHYW1lcGFk
c0VmbCogZ2FtZXBhZHNFZmwgPSBzdGF0aWNfY2FzdDxHYW1lcGFkc0VmbCo+KHVzZXJEYXRhKTsK
KworICAgIHN3aXRjaCAoZXZlbnQpIHsKKyAgICBjYXNlIEVFWkVfVURFVl9FVkVOVF9BREQ6Cisg
ICAgICAgIGdhbWVwYWRzRWZsLT5yZWdpc3RlckRldmljZShTdHJpbmc6OmZyb21VVEY4KHN5c3Bh
dGgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFRVpFX1VERVZfRVZFTlRfUkVNT1ZFOgor
ICAgICAgICBnYW1lcGFkc0VmbC0+dW5yZWdpc3RlckRldmljZShTdHJpbmc6OmZyb21VVEY4KHN5
c3BhdGgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCitHYW1lcGFkc0VmbDo6R2FtZXBhZHNFZmwoc2l6ZV90IGxlbmd0aCkKKyAgICA6
IG1fc2xvdHMobGVuZ3RoKQorICAgICwgbV9nYW1lcGFkc1dhdGNoZXIoMCkKK3sKKyAgICBpZiAo
ZWV6ZV9pbml0KCkgPCAwKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGluaXRpYWxp
emUgZWV6ZSBsaWJyYXJ5LiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2F0
Y2ggZm9yIGdhbWVwYWRzIGFkZGl0aW9ucyAvIHJlbW92YWxzLgorICAgIG1fZ2FtZXBhZHNXYXRj
aGVyID0gZWV6ZV91ZGV2X3dhdGNoX2FkZChFRVpFX1VERVZfVFlQRV9KT1lTVElDSywgKEVFWkVf
VURFVl9FVkVOVF9BREQgfCBFRVpFX1VERVZfRVZFTlRfUkVNT1ZFKSwgb25HYW1lUGFkQ2hhbmdl
LCB0aGlzKTsKKworICAgIC8vIExpc3QgYXZhaWxhYmxlIGdhbWVwYWRzLgorICAgIEVpbmFfTGlz
dCogZ2FtZXBhZHMgPSBlZXplX3VkZXZfZmluZF9ieV90eXBlKEVFWkVfVURFVl9UWVBFX0pPWVNU
SUNLLCAwKTsKKyAgICB2b2lkKiBkYXRhOworICAgIEVJTkFfTElTVF9GUkVFKGdhbWVwYWRzLCBk
YXRhKSB7CisgICAgICAgIGNoYXIqIHN5c3BhdGggPSBzdGF0aWNfY2FzdDxjaGFyKj4oZGF0YSk7
CisgICAgICAgIHJlZ2lzdGVyRGV2aWNlKFN0cmluZzo6ZnJvbVVURjgoc3lzcGF0aCkpOworICAg
ICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzeXNwYXRoKTsKKyAgICB9Cit9CisKK0dhbWVwYWRz
RWZsOjp+R2FtZXBhZHNFZmwoKQoreworICAgIGlmIChtX2dhbWVwYWRzV2F0Y2hlcikKKyAgICAg
ICAgZWV6ZV91ZGV2X3dhdGNoX2RlbChtX2dhbWVwYWRzV2F0Y2hlcik7CisgICAgZWV6ZV9zaHV0
ZG93bigpOworfQorCit2b2lkIEdhbWVwYWRzRWZsOjpyZWdpc3RlckRldmljZShjb25zdCBTdHJp
bmcmIHN5c3BhdGgpCit7CisgICAgaWYgKG1fZGV2aWNlTWFwLmNvbnRhaW5zKHN5c3BhdGgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBNYWtlIHN1cmUgaXQgaXMgYSB2YWxpZCBqb3lzdGlj
ay4KKyAgICBjb25zdCBjaGFyKiBkZXZpY2VGaWxlID0gZWV6ZV91ZGV2X3N5c3BhdGhfZ2V0X2Rl
dnBhdGgoc3lzcGF0aC51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAoIWRldmljZUZpbGUgfHwgIWVp
bmFfc3RyX2hhc19wcmVmaXgoZGV2aWNlRmlsZSwgam95c3RpY2tQcmVmaXgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBMT0coR2FtZXBhZCwgIlJlZ2lzdGVyaW5nIGdhbWVwYWQgYXQgJXMiLCBk
ZXZpY2VGaWxlKTsKKworICAgIGNvbnN0IHNpemVfdCBzbG90Q291bnQgPSBtX3Nsb3RzLnNpemUo
KTsKKyAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgc2xvdENvdW50OyArK2luZGV4
KSB7CisgICAgICAgIGlmICghbV9zbG90c1tpbmRleF0pIHsKKyAgICAgICAgICAgIG1fc2xvdHNb
aW5kZXhdID0gc3RkOjptYWtlX3VuaXF1ZTxHYW1lcGFkRGV2aWNlRWZsPihTdHJpbmc6OmZyb21V
VEY4KGRldmljZUZpbGUpKTsKKyAgICAgICAgICAgIExPRyhHYW1lcGFkLCAiR2FtZXBhZCBkZXZp
Y2UgbmFtZSBpcyAlcyIsIG1fc2xvdHNbaW5kZXhdLT5pZCgpLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICAgICAgbV9kZXZpY2VNYXAuYWRkKHN5c3BhdGgsIG1fc2xvdHNbaW5kZXhdLmdldCgpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEdhbWVwYWRz
RWZsOjp1bnJlZ2lzdGVyRGV2aWNlKGNvbnN0IFN0cmluZyYgc3lzcGF0aCkKK3sKKyAgICBpZiAo
IW1fZGV2aWNlTWFwLmNvbnRhaW5zKHN5c3BhdGgpKQorICAgICAgICByZXR1cm47CisKKyAgICBH
YW1lcGFkRGV2aWNlRWZsKiBnYW1lcGFkRGV2aWNlID0gbV9kZXZpY2VNYXAudGFrZShzeXNwYXRo
KTsKKyAgICBMT0coR2FtZXBhZCwgIlVucmVnaXN0ZXJpbmcgZ2FtZXBhZCBhdCAlcyIsIGdhbWVw
YWREZXZpY2UtPmRldmljZUZpbGUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBjb25zdCBzaXplX3Qg
aW5kZXggPSBtX3Nsb3RzLmZpbmQoc3RkOjptYWtlX3VuaXF1ZTxHYW1lcGFkRGV2aWNlRWZsPihn
YW1lcGFkRGV2aWNlLT5kZXZpY2VGaWxlKCkpKTsKKyAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91
bmQpOworCisgICAgbV9zbG90c1tpbmRleF0gPSBudWxscHRyOworfQorCit2b2lkIEdhbWVwYWRz
RWZsOjp1cGRhdGVHYW1lcGFkTGlzdChHYW1lcGFkTGlzdCogaW50bykKK3sKKyAgICBBU1NFUlQo
bV9zbG90cy5zaXplKCkgPT0gaW50by0+bGVuZ3RoKCkpOworCisgICAgY29uc3Qgc2l6ZV90IHNs
b3RDb3VudCA9IG1fc2xvdHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2xv
dENvdW50OyArK2kpIHsKKyAgICAgICAgaWYgKG1fc2xvdHNbaV0uZ2V0KCkgJiYgbV9zbG90c1tp
XS0+Y29ubmVjdGVkKCkpIHsKKyAgICAgICAgICAgIEdhbWVwYWREZXZpY2VFZmwqIGdhbWVwYWRE
ZXZpY2UgPSBtX3Nsb3RzW2ldLmdldCgpOworICAgICAgICAgICAgUmVmUHRyPEdhbWVwYWQ+IGdh
bWVwYWQgPSBpbnRvLT5pdGVtKGkpOworICAgICAgICAgICAgaWYgKCFnYW1lcGFkKQorICAgICAg
ICAgICAgICAgIGdhbWVwYWQgPSBHYW1lcGFkOjpjcmVhdGUoKTsKKworICAgICAgICAgICAgZ2Ft
ZXBhZC0+aW5kZXgoaSk7CisgICAgICAgICAgICBnYW1lcGFkLT5pZChnYW1lcGFkRGV2aWNlLT5p
ZCgpKTsKKyAgICAgICAgICAgIGdhbWVwYWQtPnRpbWVzdGFtcChnYW1lcGFkRGV2aWNlLT50aW1l
c3RhbXAoKSk7CisgICAgICAgICAgICBnYW1lcGFkLT5heGVzKGdhbWVwYWREZXZpY2UtPmF4ZXND
b3VudCgpLCBnYW1lcGFkRGV2aWNlLT5heGVzRGF0YSgpKTsKKyAgICAgICAgICAgIGdhbWVwYWQt
PmJ1dHRvbnMoZ2FtZXBhZERldmljZS0+YnV0dG9uc0NvdW50KCksIGdhbWVwYWREZXZpY2UtPmJ1
dHRvbnNEYXRhKCkpOworCisgICAgICAgICAgICBpbnRvLT5zZXQoaSwgZ2FtZXBhZCk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgaW50by0+c2V0KGksIDApOworICAgIH0KK30KKwordm9p
ZCBzYW1wbGVHYW1lcGFkcyhHYW1lcGFkTGlzdCogaW50bykKK3sKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8R2FtZXBhZHNFZmw+IGdhbWVwYWRzRWZsKGludG8tPmxlbmd0aCgpKTsKKyAgICBn
YW1lcGFkc0VmbC5nZXQoKS51cGRhdGVHYW1lcGFkTGlzdChpbnRvKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQURfREVQUkVDQVRFRCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWRzL2dsaWIvR2FtZXBhZHNH
bGliLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWRzL2dsaWIvR2FtZXBhZHNH
bGliLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iOGJkMjFhNWU4NjYyMjYyNGQzY2Q3YTlkYzgzNTJjMjRlMjQ1
ODRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZHMv
Z2xpYi9HYW1lcGFkc0dsaWIuY3BwCkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIFphbiBEb2JlcnNlayA8emFuZG9iZXJzZWtAZ21haWwuY29tPgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2FtZXBhZHMuaCIKKworI2lmIEVOQUJM
RShHQU1FUEFEX0RFUFJFQ0FURUQpCisKKyNpbmNsdWRlICJHYW1lcGFkRGV2aWNlTGludXguaCIK
KyNpbmNsdWRlICJHYW1lcGFkTGlzdC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRl
IDxnaW8vZ3VuaXhpbnB1dHN0cmVhbS5oPgorI2luY2x1ZGUgPGd1ZGV2L2d1ZGV2Lmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgR2FtZXBhZERldmljZUdsaWIgOiBwdWJsaWMgR2FtZXBhZERldmljZUxpbnV4
IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHYW1lcGFkRGV2aWNlR2xpYihTdHJpbmcgZGV2aWNl
RmlsZSk7CisgICAgfkdhbWVwYWREZXZpY2VHbGliKCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGlj
IGdib29sZWFuIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBwb2xsYWJsZVN0cmVhbSwgZ3BvaW50ZXIg
ZGF0YSk7CisgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRTdHJlYW07CisgICAgR1Jl
ZlB0cjxHU291cmNlPiBtX3NvdXJjZTsKK307CisKK0dhbWVwYWREZXZpY2VHbGliOjpHYW1lcGFk
RGV2aWNlR2xpYihTdHJpbmcgZGV2aWNlRmlsZSkKKyAgICA6IEdhbWVwYWREZXZpY2VMaW51eChk
ZXZpY2VGaWxlKQoreworICAgIGlmIChtX2ZpbGVEZXNjcmlwdG9yID09IC0xKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2lucHV0U3RyZWFtID0gYWRvcHRHUmVmKGdfdW5peF9pbnB1dF9zdHJl
YW1fbmV3KG1fZmlsZURlc2NyaXB0b3IsIEZBTFNFKSk7CisgICAgbV9zb3VyY2UgPSBhZG9wdEdS
ZWYoZ19wb2xsYWJsZV9pbnB1dF9zdHJlYW1fY3JlYXRlX3NvdXJjZShHX1BPTExBQkxFX0lOUFVU
X1NUUkVBTShtX2lucHV0U3RyZWFtLmdldCgpKSwgMCkpOworICAgIGdfc291cmNlX3NldF9jYWxs
YmFjayhtX3NvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4ocmVhZENh
bGxiYWNrKSwgdGhpcywgMCk7CisgICAgZ19zb3VyY2VfYXR0YWNoKG1fc291cmNlLmdldCgpLCAw
KTsKK30KKworR2FtZXBhZERldmljZUdsaWI6On5HYW1lcGFkRGV2aWNlR2xpYigpCit7CisgICAg
aWYgKG1fc291cmNlKQorICAgICAgICBnX3NvdXJjZV9kZXN0cm95KG1fc291cmNlLmdldCgpKTsK
K30KKworZ2Jvb2xlYW4gR2FtZXBhZERldmljZUdsaWI6OnJlYWRDYWxsYmFjayhHT2JqZWN0KiBw
b2xsYWJsZVN0cmVhbSwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBHYW1lcGFkRGV2aWNlR2xpYiog
Z2FtZXBhZERldmljZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R2FtZXBhZERldmljZUdsaWIqPihkYXRh
KTsKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgc3RydWN0IGpzX2V2ZW50
IGV2ZW50OworCisgICAgZ3NzaXplIGxlbiA9IGdfcG9sbGFibGVfaW5wdXRfc3RyZWFtX3JlYWRf
bm9uYmxvY2tpbmcoR19QT0xMQUJMRV9JTlBVVF9TVFJFQU0ocG9sbGFibGVTdHJlYW0pLAorICAg
ICAgICAmZXZlbnQsIHNpemVvZihldmVudCksIDAsICZlcnJvci5vdXRQdHIoKSk7CisKKyAgICAv
LyBGSVhNRTogUHJvcGVybHkgbG9nIHRoZSBlcnJvci4KKyAgICAvLyBJbiB0aGUgY2FzZSBvZiBH
X0lPX0VSUk9SX1dPVUxEX0JMT0NLIGVycm9yIHJldHVybiBUUlVFIHRvIHdhaXQgdW50aWwKKyAg
ICAvLyB0aGUgc291cmNlIGJlY29tZXMgcmVhZGFibGUgYWdhaW4gYW5kIEZBTFNFIG90aGVyd2lz
ZS4KKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJldHVybiBnX2Vycm9yX21hdGNoZXMoZXJyb3Iu
Z2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfV09VTERfQkxPQ0spOworCisgICAgQVNTRVJU
X1VOVVNFRChsZW4sIGxlbiA9PSBzaXplb2YoZXZlbnQpKTsKKyAgICBnYW1lcGFkRGV2aWNlLT51
cGRhdGVGb3JFdmVudChldmVudCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK2NsYXNzIEdhbWVw
YWRzR2xpYiB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgR2FtZXBhZHNHbGliKHVuc2lnbmVkIGxl
bmd0aCk7CisKKyAgICB2b2lkIHJlZ2lzdGVyRGV2aWNlKFN0cmluZyBkZXZpY2VGaWxlKTsKKyAg
ICB2b2lkIHVucmVnaXN0ZXJEZXZpY2UoU3RyaW5nIGRldmljZUZpbGUpOworCisgICAgdm9pZCB1
cGRhdGVHYW1lcGFkTGlzdChHYW1lcGFkTGlzdCopOworCitwcml2YXRlOgorICAgIH5HYW1lcGFk
c0dsaWIoKTsKKyAgICBzdGF0aWMgdm9pZCBvblVFdmVudENhbGxiYWNrKEdVZGV2Q2xpZW50Kiwg
Z2NoYXIqIGFjdGlvbiwgR1VkZXZEZXZpY2UqLCBncG9pbnRlciBkYXRhKTsKKyAgICBzdGF0aWMg
Z2Jvb2xlYW4gaXNHYW1lcGFkRGV2aWNlKEdVZGV2RGV2aWNlKik7CisKKyAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPEdhbWVwYWREZXZpY2VHbGliPiA+IG1fc2xvdHM7CisgICAgSGFzaE1hcDxT
dHJpbmcsIEdhbWVwYWREZXZpY2VHbGliKj4gbV9kZXZpY2VNYXA7CisKKyAgICBHUmVmUHRyPEdV
ZGV2Q2xpZW50PiBtX2d1ZGV2Q2xpZW50OworfTsKKworR2FtZXBhZHNHbGliOjpHYW1lcGFkc0ds
aWIodW5zaWduZWQgbGVuZ3RoKQorICAgIDogbV9zbG90cyhsZW5ndGgpCit7CisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIHN1YnN5c3RlbXNbXSA9IHsgImlucHV0IiwgMCB9OworICAgIG1fZ3VkZXZD
bGllbnQgPSBhZG9wdEdSZWYoZ191ZGV2X2NsaWVudF9uZXcoc3Vic3lzdGVtcykpOworICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV9ndWRldkNsaWVudC5nZXQoKSwgInVldmVudCIsIEdfQ0FMTEJBQ0so
b25VRXZlbnRDYWxsYmFjayksIHRoaXMpOworCisgICAgR1VuaXF1ZVB0cjxHTGlzdD4gZGV2aWNl
c0xpc3QoZ191ZGV2X2NsaWVudF9xdWVyeV9ieV9zdWJzeXN0ZW0obV9ndWRldkNsaWVudC5nZXQo
KSwgc3Vic3lzdGVtc1swXSkpOworICAgIGZvciAoR0xpc3QqIGxpc3RJdGVtID0gZGV2aWNlc0xp
c3QuZ2V0KCk7IGxpc3RJdGVtOyBsaXN0SXRlbSA9IGdfbGlzdF9uZXh0KGxpc3RJdGVtKSkgewor
ICAgICAgICBHVWRldkRldmljZSogZGV2aWNlID0gR19VREVWX0RFVklDRShsaXN0SXRlbS0+ZGF0
YSk7CisgICAgICAgIFN0cmluZyBkZXZpY2VGaWxlID0gU3RyaW5nOjpmcm9tVVRGOChnX3VkZXZf
ZGV2aWNlX2dldF9kZXZpY2VfZmlsZShkZXZpY2UpKTsKKyAgICAgICAgaWYgKGlzR2FtZXBhZERl
dmljZShkZXZpY2UpKQorICAgICAgICAgICAgcmVnaXN0ZXJEZXZpY2UoZGV2aWNlRmlsZSk7Cisg
ICAgICAgIGdfb2JqZWN0X3VucmVmKGRldmljZSk7CisgICAgfQorfQorCitHYW1lcGFkc0dsaWI6
On5HYW1lcGFkc0dsaWIoKQoreworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0
Y2hlZChtX2d1ZGV2Q2xpZW50LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAw
LCB0aGlzKTsKK30KKwordm9pZCBHYW1lcGFkc0dsaWI6OnJlZ2lzdGVyRGV2aWNlKFN0cmluZyBk
ZXZpY2VGaWxlKQoreworICAgIExPRyhHYW1lcGFkLCAiR2FtZXBhZHNHbGliOjpyZWdpc3RlckRl
dmljZSAlcyIsIGRldmljZUZpbGUuYXNjaWkoKS5kYXRhKCkpOworICAgIEFTU0VSVCghbV9kZXZp
Y2VNYXAuY29udGFpbnMoZGV2aWNlRmlsZSkpOworCisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IDA7IGluZGV4IDwgbV9zbG90cy5zaXplKCk7IGluZGV4KyspIHsKKyAgICAgICAgaWYgKCFtX3Ns
b3RzW2luZGV4XSkgeworICAgICAgICAgICAgbV9zbG90c1tpbmRleF0gPSBzdGQ6Om1ha2VfdW5p
cXVlPEdhbWVwYWREZXZpY2VHbGliPihkZXZpY2VGaWxlKTsKKyAgICAgICAgICAgIG1fZGV2aWNl
TWFwLmFkZChkZXZpY2VGaWxlLCBtX3Nsb3RzW2luZGV4XS5nZXQoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBHYW1lcGFkc0dsaWI6OnVucmVnaXN0
ZXJEZXZpY2UoU3RyaW5nIGRldmljZUZpbGUpCit7CisgICAgTE9HKEdhbWVwYWQsICJHYW1lcGFk
c0dsaWI6OnVucmVnaXN0ZXJEZXZpY2UgJXMiLCBkZXZpY2VGaWxlLmFzY2lpKCkuZGF0YSgpKTsK
KyAgICBBU1NFUlQobV9kZXZpY2VNYXAuY29udGFpbnMoZGV2aWNlRmlsZSkpOworCisgICAgR2Ft
ZXBhZERldmljZUdsaWIqIGdhbWVwYWREZXZpY2UgPSBtX2RldmljZU1hcC50YWtlKGRldmljZUZp
bGUpOworICAgIHNpemVfdCBpbmRleCA9IG1fc2xvdHMuZmluZChnYW1lcGFkRGV2aWNlKTsKKyAg
ICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOworCisgICAgbV9zbG90c1tpbmRleF0gPSBudWxs
cHRyOworfQorCit2b2lkIEdhbWVwYWRzR2xpYjo6dXBkYXRlR2FtZXBhZExpc3QoR2FtZXBhZExp
c3QqIGludG8pCit7CisgICAgQVNTRVJUKG1fc2xvdHMuc2l6ZSgpID09IGludG8tPmxlbmd0aCgp
KTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Nsb3RzLnNpemUoKTsgaSsrKSB7
CisgICAgICAgIGlmIChtX3Nsb3RzW2ldLmdldCgpICYmIG1fc2xvdHNbaV0tPmNvbm5lY3RlZCgp
KSB7CisgICAgICAgICAgICBHYW1lcGFkRGV2aWNlR2xpYiogZ2FtZXBhZERldmljZSA9IG1fc2xv
dHNbaV0uZ2V0KCk7CisgICAgICAgICAgICBSZWZQdHI8R2FtZXBhZD4gZ2FtZXBhZCA9IGludG8t
Pml0ZW0oaSk7CisgICAgICAgICAgICBpZiAoIWdhbWVwYWQpCisgICAgICAgICAgICAgICAgZ2Ft
ZXBhZCA9IEdhbWVwYWQ6OmNyZWF0ZSgpOworCisgICAgICAgICAgICBnYW1lcGFkLT5pbmRleChp
KTsKKyAgICAgICAgICAgIGdhbWVwYWQtPmlkKGdhbWVwYWREZXZpY2UtPmlkKCkpOworICAgICAg
ICAgICAgZ2FtZXBhZC0+dGltZXN0YW1wKGdhbWVwYWREZXZpY2UtPnRpbWVzdGFtcCgpKTsKKyAg
ICAgICAgICAgIGdhbWVwYWQtPmF4ZXMoZ2FtZXBhZERldmljZS0+YXhlc0NvdW50KCksIGdhbWVw
YWREZXZpY2UtPmF4ZXNEYXRhKCkpOworICAgICAgICAgICAgZ2FtZXBhZC0+YnV0dG9ucyhnYW1l
cGFkRGV2aWNlLT5idXR0b25zQ291bnQoKSwgZ2FtZXBhZERldmljZS0+YnV0dG9uc0RhdGEoKSk7
CisKKyAgICAgICAgICAgIGludG8tPnNldChpLCBnYW1lcGFkKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBpbnRvLT5zZXQoaSwgMCk7CisgICAgfQorfQorCit2b2lkIEdhbWVwYWRzR2xp
Yjo6b25VRXZlbnRDYWxsYmFjayhHVWRldkNsaWVudCosIGdjaGFyKiBhY3Rpb24sIEdVZGV2RGV2
aWNlKiBkZXZpY2UsIGdwb2ludGVyIGRhdGEpCit7CisgICAgaWYgKCFpc0dhbWVwYWREZXZpY2Uo
ZGV2aWNlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR2FtZXBhZHNHbGliKiBnYW1lcGFkc0ds
aWIgPSByZWludGVycHJldF9jYXN0PEdhbWVwYWRzR2xpYio+KGRhdGEpOworICAgIFN0cmluZyBk
ZXZpY2VGaWxlID0gU3RyaW5nOjpmcm9tVVRGOChnX3VkZXZfZGV2aWNlX2dldF9kZXZpY2VfZmls
ZShkZXZpY2UpKTsKKworICAgIGlmICghZ19zdHJjbXAwKGFjdGlvbiwgImFkZCIpKQorICAgICAg
ICBnYW1lcGFkc0dsaWItPnJlZ2lzdGVyRGV2aWNlKGRldmljZUZpbGUpOworICAgIGVsc2UgaWYg
KCFnX3N0cmNtcDAoYWN0aW9uLCAicmVtb3ZlIikpCisgICAgICAgIGdhbWVwYWRzR2xpYi0+dW5y
ZWdpc3RlckRldmljZShkZXZpY2VGaWxlKTsKK30KKworZ2Jvb2xlYW4gR2FtZXBhZHNHbGliOjpp
c0dhbWVwYWREZXZpY2UoR1VkZXZEZXZpY2UqIGRldmljZSkKK3sKKyAgICBjb25zdCBnY2hhciog
ZGV2aWNlRmlsZSA9IGdfdWRldl9kZXZpY2VfZ2V0X2RldmljZV9maWxlKGRldmljZSk7CisgICAg
Y29uc3QgZ2NoYXIqIHN5c2ZzUGF0aCA9IGdfdWRldl9kZXZpY2VfZ2V0X3N5c2ZzX3BhdGgoZGV2
aWNlKTsKKyAgICBpZiAoIWRldmljZUZpbGUgfHwgIXN5c2ZzUGF0aCkKKyAgICAgICAgcmV0dXJu
IEZBTFNFOworCisgICAgaWYgKCFnX3VkZXZfZGV2aWNlX2hhc19wcm9wZXJ0eShkZXZpY2UsICJJ
RF9JTlBVVCIpIHx8ICFnX3VkZXZfZGV2aWNlX2hhc19wcm9wZXJ0eShkZXZpY2UsICJJRF9JTlBV
VF9KT1lTVElDSyIpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICByZXR1cm4gZ19zdHJf
aGFzX3ByZWZpeChkZXZpY2VGaWxlLCAiL2Rldi9pbnB1dC9qcyIpOworfQorCit2b2lkIHNhbXBs
ZUdhbWVwYWRzKEdhbWVwYWRMaXN0KiBpbnRvKQoreworICAgIERFUFJFQ0FURURfREVGSU5FX1NU
QVRJQ19MT0NBTChHYW1lcGFkc0dsaWIsIGdhbWVwYWRzR2xpYiwgKGludG8tPmxlbmd0aCgpKSk7
CisgICAgZ2FtZXBhZHNHbGliLnVwZGF0ZUdhbWVwYWRMaXN0KGludG8pOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZHMvbGludXgvR2FtZXBh
ZERldmljZUxpbnV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWRzL2xpbnV4
L0dhbWVwYWREZXZpY2VMaW51eC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzUxNzU0ZDU0ZTFjMWYxZmY0NjRm
NzAxMTVmNjk3NDNjZWFiOTRhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dhbWVwYWRzL2xpbnV4L0dhbWVwYWREZXZpY2VMaW51eC5jcHAKQEAgLTAsMCArMSw5
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBaYW4gRG9iZXJzZWsgPHphbmRvYmVyc2Vr
QGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNICisgKiBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdh
bWVwYWREZXZpY2VMaW51eC5oIgorCisjaWYgRU5BQkxFKEdBTUVQQURfREVQUkVDQVRFRCkKKwor
I2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8dW5p
c3RkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0dhbWVwYWREZXZpY2VMaW51eDo6R2FtZXBhZERldmljZUxpbnV4KFN0cmluZyBkZXZp
Y2VGaWxlKQorICAgIDogbV9maWxlRGVzY3JpcHRvcigtMSkKKyAgICAsIG1fY29ubmVjdGVkKGZh
bHNlKQorICAgICwgbV9sYXN0VGltZXN0YW1wKDApCit7CisgICAgLy8gRklYTUU6IExvZyBlcnJv
cnMgd2hlbiByZXR1cm5pbmcgZWFybHkuCisgICAgbV9maWxlRGVzY3JpcHRvciA9IG9wZW4oZGV2
aWNlRmlsZS51dGY4KCkuZGF0YSgpLCBPX1JET05MWSB8IE9fTk9OQkxPQ0spOworICAgIGlmICht
X2ZpbGVEZXNjcmlwdG9yID09IC0xKQorICAgICAgICByZXR1cm47CisKKyAgICBjaGFyIGRldmlj
ZU5hbWVbMTAyNF07CisgICAgaWYgKGlvY3RsKG1fZmlsZURlc2NyaXB0b3IsIEpTSU9DR05BTUUo
c2l6ZW9mKGRldmljZU5hbWUpKSwgZGV2aWNlTmFtZSkgPCAwKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9kZXZpY2VOYW1lID0gU3RyaW5nKGRldmljZU5hbWUpLnNpbXBsaWZ5V2hpdGVTcGFjZSgp
OworCisgICAgdWludDhfdCBudW1iZXJPZkF4ZXM7CisgICAgdWludDhfdCBudW1iZXJPZkJ1dHRv
bnM7CisgICAgaWYgKGlvY3RsKG1fZmlsZURlc2NyaXB0b3IsIEpTSU9DR0FYRVMsICZudW1iZXJP
ZkF4ZXMpIDwgMCB8fCBpb2N0bChtX2ZpbGVEZXNjcmlwdG9yLCBKU0lPQ0dCVVRUT05TLCAmbnVt
YmVyT2ZCdXR0b25zKSA8IDApCisgICAgICAgIHJldHVybjsKKyAgICBtX2F4ZXMuZmlsbCgwLjAs
IG51bWJlck9mQXhlcyk7CisgICAgbV9idXR0b25zLmZpbGwoMC4wLCBudW1iZXJPZkJ1dHRvbnMp
OworfQorCitHYW1lcGFkRGV2aWNlTGludXg6On5HYW1lcGFkRGV2aWNlTGludXgoKQoreworICAg
IGlmIChtX2ZpbGVEZXNjcmlwdG9yICE9IC0xKQorICAgICAgICBjbG9zZShtX2ZpbGVEZXNjcmlw
dG9yKTsKK30KKwordm9pZCBHYW1lcGFkRGV2aWNlTGludXg6OnVwZGF0ZUZvckV2ZW50KHN0cnVj
dCBqc19ldmVudCBldmVudCkKK3sKKyAgICBpZiAoIShldmVudC50eXBlICYgSlNfRVZFTlRfQVhJ
UyB8fCBldmVudC50eXBlICYgSlNfRVZFTlRfQlVUVE9OKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gTWFyayB0aGUgZGV2aWNlIGFzIGNvbm5lY3RlZCBvbmx5IGlmIGl0IGlzIG5vdCB5ZXQg
Y29ubmVjdGVkLCB0aGUgZXZlbnQgaXMgbm90IGFuIGluaXRpYWxpemF0aW9uCisgICAgLy8gYW5k
IHRoZSB2YWx1ZSBpcyBub3QgMCAoaW5kaWNhdGluZyBhIGdlbnVpbmUgaW50ZXJhY3Rpb24gd2l0
aCB0aGUgZGV2aWNlKS4KKyAgICBpZiAoIW1fY29ubmVjdGVkICYmICEoZXZlbnQudHlwZSAmIEpT
X0VWRU5UX0lOSVQpICYmIGV2ZW50LnZhbHVlKQorICAgICAgICBtX2Nvbm5lY3RlZCA9IHRydWU7
CisKKyAgICBpZiAoZXZlbnQudHlwZSAmIEpTX0VWRU5UX0FYSVMpCisgICAgICAgIG1fYXhlc1tl
dmVudC5udW1iZXJdID0gbm9ybWFsaXplQXhpc1ZhbHVlKGV2ZW50LnZhbHVlKTsKKyAgICBlbHNl
IGlmIChldmVudC50eXBlICYgSlNfRVZFTlRfQlVUVE9OKQorICAgICAgICBtX2J1dHRvbnNbZXZl
bnQubnVtYmVyXSA9IG5vcm1hbGl6ZUJ1dHRvblZhbHVlKGV2ZW50LnZhbHVlKTsKKworICAgIG1f
bGFzdFRpbWVzdGFtcCA9IGV2ZW50LnRpbWU7Cit9CisKK2Zsb2F0IEdhbWVwYWREZXZpY2VMaW51
eDo6bm9ybWFsaXplQXhpc1ZhbHVlKHNob3J0IHZhbHVlKQoreworICAgIC8vIE5vcm1hbGl6ZSBm
cm9tIHJhbmdlIFstMzI3NjcsIDMyNzY3XSBpbnRvIHJhbmdlIFstMS4wLCAxLjBdCisgICAgcmV0
dXJuIHZhbHVlIC8gMzI3NjcuMGY7Cit9CisKK2Zsb2F0IEdhbWVwYWREZXZpY2VMaW51eDo6bm9y
bWFsaXplQnV0dG9uVmFsdWUoc2hvcnQgdmFsdWUpCit7CisgICAgLy8gTm9ybWFsaXplIGZyb20g
cmFuZ2UgWzAsIDFdIGludG8gcmFuZ2UgWzAuMCwgMS4wXQorICAgIHJldHVybiB2YWx1ZSAvIDEu
MGY7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHQU1F
UEFEX0RFUFJFQ0FURUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1l
cGFkcy9saW51eC9HYW1lcGFkRGV2aWNlTGludXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dhbWVwYWRzL2xpbnV4L0dhbWVwYWREZXZpY2VMaW51eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5YzA5YjI3
ZjU0YzlkOWQ5ZmMwYTJiNDgzYTRlMDZhMWIyNmEyNjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkcy9saW51eC9HYW1lcGFkRGV2aWNlTGludXguaApA
QCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFphbiBEb2JlcnNlayA8
emFuZG9iZXJzZWtAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
CisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdhbWVwYWREZXZpY2VM
aW51eF9oCisjZGVmaW5lIEdhbWVwYWREZXZpY2VMaW51eF9oCisKKyNpZiBFTkFCTEUoR0FNRVBB
RF9ERVBSRUNBVEVEKQorCisjaW5jbHVkZSA8bGludXgvam95c3RpY2suaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgR2FtZXBhZERldmljZUxpbnV4IHsKK3B1YmxpYzoKKyAgICBi
b29sIGNvbm5lY3RlZCgpIHsgcmV0dXJuIG1fY29ubmVjdGVkOyB9OworCisgICAgU3RyaW5nIGlk
KCkgeyByZXR1cm4gbV9kZXZpY2VOYW1lOyB9CisgICAgdW5zaWduZWQgbG9uZyBsb25nIHRpbWVz
dGFtcCgpIHsgcmV0dXJuIG1fbGFzdFRpbWVzdGFtcDsgfQorCisgICAgdW5zaWduZWQgYXhlc0Nv
dW50KCkgeyByZXR1cm4gbV9heGVzLnNpemUoKTsgfQorICAgIGZsb2F0KiBheGVzRGF0YSgpIHsg
cmV0dXJuIG1fYXhlcy5kYXRhKCk7IH0KKworICAgIHVuc2lnbmVkIGJ1dHRvbnNDb3VudCgpIHsg
cmV0dXJuIG1fYnV0dG9ucy5zaXplKCk7IH0KKyAgICBmbG9hdCogYnV0dG9uc0RhdGEoKSB7IHJl
dHVybiBtX2J1dHRvbnMuZGF0YSgpOyB9CisKK3Byb3RlY3RlZDoKKyAgICBHYW1lcGFkRGV2aWNl
TGludXgoU3RyaW5nIGRldmljZUZpbGUpOworICAgIH5HYW1lcGFkRGV2aWNlTGludXgoKTsKKwor
ICAgIHZvaWQgdXBkYXRlRm9yRXZlbnQoc3RydWN0IGpzX2V2ZW50KTsKKyAgICBpbnQgbV9maWxl
RGVzY3JpcHRvcjsKKworcHJpdmF0ZToKKyAgICBmbG9hdCBub3JtYWxpemVBeGlzVmFsdWUoc2hv
cnQgdmFsdWUpOworICAgIGZsb2F0IG5vcm1hbGl6ZUJ1dHRvblZhbHVlKHNob3J0IHZhbHVlKTsK
KworICAgIGJvb2wgbV9jb25uZWN0ZWQ7CisgICAgU3RyaW5nIG1fZGV2aWNlTmFtZTsKKyAgICB1
bnNpZ25lZCBsb25nIGxvbmcgbV9sYXN0VGltZXN0YW1wOworCisgICAgVmVjdG9yPGZsb2F0PiBt
X2F4ZXM7CisgICAgVmVjdG9yPGZsb2F0PiBtX2J1dHRvbnM7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKQorCisjZW5k
aWYgLy8gR2FtZXBhZERldmljZUxpbnV4X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dhbWVwYWRzL21hYy9ISURHYW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dhbWVwYWRzL21hYy9ISURHYW1lcGFkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43N2MxOGUzZTYzNGI1
OWViMGJhMDJlMWVlMThhZGZkNWU1ZDdkYmZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ2FtZXBhZHMvbWFjL0hJREdhbWVwYWQuY3BwCkBAIC0wLDAgKzEsMTkw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhJREdhbWVw
YWQuaCIKKworI2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSA8SU9LaXQvaGlkL0lPSElE
RWxlbWVudC5oPgorI2luY2x1ZGUgPElPS2l0L2hpZC9JT0hJRFVzYWdlVGFibGVzLmg+CisjaW5j
bHVkZSA8SU9LaXQvaGlkL0lPSElEVmFsdWUuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSElER2FtZXBhZDo6SElER2FtZXBh
ZChJT0hJRERldmljZVJlZiBoaWREZXZpY2UsIHVuc2lnbmVkIGluZGV4KQorICAgIDogUGxhdGZv
cm1HYW1lcGFkKGluZGV4KQorICAgICwgbV9oaWREZXZpY2UoaGlkRGV2aWNlKQoreworICAgIG1f
Y29ubmVjdFRpbWUgPSBtX2xhc3RVcGRhdGVUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lKCk7CisKKyAgICBDRk51bWJlclJlZiBjZlZlbmRvcklEID0gKENGTnVtYmVyUmVmKUlPSElE
RGV2aWNlR2V0UHJvcGVydHkoaGlkRGV2aWNlLCBDRlNUUihrSU9ISURWZW5kb3JJREtleSkpOwor
ICAgIENGTnVtYmVyUmVmIGNmUHJvZHVjdElEID0gKENGTnVtYmVyUmVmKUlPSElERGV2aWNlR2V0
UHJvcGVydHkoaGlkRGV2aWNlLCBDRlNUUihrSU9ISURQcm9kdWN0SURLZXkpKTsKKworICAgIGlu
dCB2ZW5kb3JJRCwgcHJvZHVjdElEOworICAgIENGTnVtYmVyR2V0VmFsdWUoY2ZWZW5kb3JJRCwg
a0NGTnVtYmVySW50VHlwZSwgJnZlbmRvcklEKTsKKyAgICBDRk51bWJlckdldFZhbHVlKGNmUHJv
ZHVjdElELCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcHJvZHVjdElEKTsKKworICAgIENGU3RyaW5nUmVm
IGNmUHJvZHVjdE5hbWUgPSAoQ0ZTdHJpbmdSZWYpSU9ISUREZXZpY2VHZXRQcm9wZXJ0eShoaWRE
ZXZpY2UsIENGU1RSKGtJT0hJRFByb2R1Y3RLZXkpKTsKKyAgICBTdHJpbmcgcHJvZHVjdE5hbWUo
Y2ZQcm9kdWN0TmFtZSk7CisKKyAgICAvLyBDdXJyZW50bHkgdGhlIHNwZWMgaGFzIG5vIGZvcm1h
dHRpbmcgZm9yIHRoZSBpZCBzdHJpbmcuCisgICAgLy8gVGhpcyBzdHJpbmcgZm9ybWF0dGluZyBt
YXRjaGVzIEZpcmVmb3guCisgICAgbV9pZCA9IFN0cmluZzo6Zm9ybWF0KCIleC0leC0lcyIsIHZl
bmRvcklELCBwcm9kdWN0SUQsIHByb2R1Y3ROYW1lLnV0ZjgoKS5kYXRhKCkpOworCisgICAgaW5p
dEVsZW1lbnRzKCk7Cit9CisKK3ZvaWQgSElER2FtZXBhZDo6Z2V0Q3VycmVudFZhbHVlRm9yRWxl
bWVudChjb25zdCBISURHYW1lcGFkRWxlbWVudCYgZ2FtZXBhZEVsZW1lbnQpCit7CisgICAgSU9I
SURFbGVtZW50UmVmIGVsZW1lbnQgPSBnYW1lcGFkRWxlbWVudC5pb2hpZEVsZW1lbnQuZ2V0KCk7
CisgICAgSU9ISURWYWx1ZVJlZiB2YWx1ZTsKKyAgICBpZiAoSU9ISUREZXZpY2VHZXRWYWx1ZShJ
T0hJREVsZW1lbnRHZXREZXZpY2UoZWxlbWVudCksIGVsZW1lbnQsICZ2YWx1ZSkgPT0ga0lPUmV0
dXJuU3VjY2VzcykKKyAgICAgICAgdmFsdWVDaGFuZ2VkKHZhbHVlKTsKK30KKwordm9pZCBISURH
YW1lcGFkOjppbml0RWxlbWVudHMoKQoreworICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBlbGVt
ZW50cyA9IGFkb3B0Q0YoSU9ISUREZXZpY2VDb3B5TWF0Y2hpbmdFbGVtZW50cyhtX2hpZERldmlj
ZS5nZXQoKSwgTlVMTCwga0lPSElET3B0aW9uc1R5cGVOb25lKSk7CisgICAgaW5pdEVsZW1lbnRz
RnJvbUFycmF5KGVsZW1lbnRzLmdldCgpKTsKKworICAgIC8vIEJ1dHRvbnMgYXJlIHNwZWNpZmll
ZCB0byBhcHBlYXIgaGlnaGVzdCBwcmlvcml0eSBmaXJzdCBpbiB0aGUgYXJyYXkuCisgICAgc3Rk
Ojpzb3J0KG1fYnV0dG9ucy5iZWdpbigpLCBtX2J1dHRvbnMuZW5kKCksIFtdKGF1dG8mIGEsIGF1
dG8mIGIpIHsKKyAgICAgICAgcmV0dXJuIGEtPnByaW9yaXR5IDwgYi0+cHJpb3JpdHk7CisgICAg
fSk7CisKKyAgICBtX2F4aXNWYWx1ZXMucmVzaXplKG1fYXhlcy5zaXplKCkpOworICAgIG1fYnV0
dG9uVmFsdWVzLnJlc2l6ZShtX2J1dHRvbnMuc2l6ZSgpKTsKKworICAgIGZvciAoYXV0byYgYnV0
dG9uIDogbV9idXR0b25zKQorICAgICAgICBnZXRDdXJyZW50VmFsdWVGb3JFbGVtZW50KCpidXR0
b24pOworCisgICAgZm9yIChhdXRvJiBheGlzIDogbV9heGVzKQorICAgICAgICBnZXRDdXJyZW50
VmFsdWVGb3JFbGVtZW50KCpheGlzKTsKK30KKwordm9pZCBISURHYW1lcGFkOjppbml0RWxlbWVu
dHNGcm9tQXJyYXkoQ0ZBcnJheVJlZiBlbGVtZW50cykKK3sKKyAgICBmb3IgKENGSW5kZXggaSA9
IDAsIGNvdW50ID0gQ0ZBcnJheUdldENvdW50KGVsZW1lbnRzKTsgaSA8IGNvdW50OyArK2kpIHsK
KyAgICAgICAgSU9ISURFbGVtZW50UmVmIGVsZW1lbnQgPSAoSU9ISURFbGVtZW50UmVmKUNGQXJy
YXlHZXRWYWx1ZUF0SW5kZXgoZWxlbWVudHMsIGkpOworICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQo
ZWxlbWVudCkgIT0gSU9ISURFbGVtZW50R2V0VHlwZUlEKCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAvLyBBcyBhIHBoeXNpY2FsIGVsZW1lbnQgY2FuIGFwcGVhciBpbiB0aGUg
ZGV2aWNlIHR3aWNlIChpbiBkaWZmZXJlbnQgY29sbGVjdGlvbnMpIGFuZCBjYW4gYmUKKyAgICAg
ICAgLy8gcmVwcmVzZW50ZWQgYnkgZGlmZmVyZW50IElPSElERWxlbWVudFJlZiBvYmplY3RzLCB3
ZSBsb29rIGF0IHRoZSBJT0hJREVsZW1lbnRDb29raWUgd2hpY2gKKyAgICAgICAgLy8gaXMgbWVh
bnQgdG8gYmUgdW5pcXVlIGZvciBlYWNoIHBoeXNpY2FsIGVsZW1lbnQuCisgICAgICAgIElPSElE
RWxlbWVudENvb2tpZSBjb29raWUgPSBJT0hJREVsZW1lbnRHZXRDb29raWUoZWxlbWVudCk7Cisg
ICAgICAgIGlmIChtX2VsZW1lbnRNYXAuY29udGFpbnMoY29va2llKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIElPSElERWxlbWVudFR5cGUgdHlwZSA9IElPSElERWxlbWVudEdl
dFR5cGUoZWxlbWVudCk7CisKKyAgICAgICAgaWYgKCh0eXBlID09IGtJT0hJREVsZW1lbnRUeXBl
SW5wdXRfTWlzYyB8fCB0eXBlID09IGtJT0hJREVsZW1lbnRUeXBlSW5wdXRfQnV0dG9uKSAmJiBt
YXliZUFkZEJ1dHRvbihlbGVtZW50KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGlmICgodHlwZSA9PSBrSU9ISURFbGVtZW50VHlwZUlucHV0X01pc2MgfHwgdHlwZSA9PSBrSU9I
SURFbGVtZW50VHlwZUlucHV0X0F4aXMpICYmIG1heWJlQWRkQXhpcyhlbGVtZW50KSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICh0eXBlID09IGtJT0hJREVsZW1lbnRUeXBl
Q29sbGVjdGlvbikKKyAgICAgICAgICAgIGluaXRFbGVtZW50c0Zyb21BcnJheShJT0hJREVsZW1l
bnRHZXRDaGlsZHJlbihlbGVtZW50KSk7CisgICAgfQorfQorCitib29sIEhJREdhbWVwYWQ6Om1h
eWJlQWRkQnV0dG9uKElPSElERWxlbWVudFJlZiBlbGVtZW50KQoreworICAgIHVpbnQzMl90IHVz
YWdlUGFnZSA9IElPSElERWxlbWVudEdldFVzYWdlUGFnZShlbGVtZW50KTsKKyAgICBpZiAodXNh
Z2VQYWdlICE9IGtISURQYWdlX0J1dHRvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
dWludDMyX3QgdXNhZ2UgPSBJT0hJREVsZW1lbnRHZXRVc2FnZShlbGVtZW50KTsKKyAgICBpZiAo
IXVzYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDRkluZGV4IG1pbiA9IElPSElE
RWxlbWVudEdldExvZ2ljYWxNaW4oZWxlbWVudCk7CisgICAgQ0ZJbmRleCBtYXggPSBJT0hJREVs
ZW1lbnRHZXRMb2dpY2FsTWF4KGVsZW1lbnQpOworCisgICAgbV9idXR0b25zLmFwcGVuZChzdGQ6
Om1ha2VfdW5pcXVlPEhJREdhbWVwYWRCdXR0b24+KHVzYWdlLCBtaW4sIG1heCwgZWxlbWVudCkp
OworCisgICAgSU9ISURFbGVtZW50Q29va2llIGNvb2tpZSA9IElPSElERWxlbWVudEdldENvb2tp
ZShlbGVtZW50KTsKKyAgICBtX2VsZW1lbnRNYXAuc2V0KGNvb2tpZSwgbV9idXR0b25zLmxhc3Qo
KS5nZXQoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBISURHYW1lcGFkOjptYXli
ZUFkZEF4aXMoSU9ISURFbGVtZW50UmVmIGVsZW1lbnQpCit7CisgICAgdWludDMyX3QgdXNhZ2VQ
YWdlID0gSU9ISURFbGVtZW50R2V0VXNhZ2VQYWdlKGVsZW1lbnQpOworICAgIGlmICh1c2FnZVBh
Z2UgIT0ga0hJRFBhZ2VfR2VuZXJpY0Rlc2t0b3ApCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHVpbnQzMl90IHVzYWdlID0gSU9ISURFbGVtZW50R2V0VXNhZ2UoZWxlbWVudCk7CisgICAg
Ly8gVGhpcyByYW5nZSBjb3ZlcnMgdGhlIHN0YW5kYXJkIGF4aXMgdXNhZ2VzLgorICAgIGlmICh1
c2FnZSA8IGtISURVc2FnZV9HRF9YIHx8IHVzYWdlID4ga0hJRFVzYWdlX0dEX1J6KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBDRkluZGV4IG1pbiA9IElPSElERWxlbWVudEdldFBoeXNp
Y2FsTWluKGVsZW1lbnQpOworICAgIENGSW5kZXggbWF4ID0gSU9ISURFbGVtZW50R2V0UGh5c2lj
YWxNYXgoZWxlbWVudCk7CisKKyAgICBtX2F4ZXMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8SElE
R2FtZXBhZEF4aXM+KG1pbiwgbWF4LCBlbGVtZW50KSk7CisKKyAgICBJT0hJREVsZW1lbnRDb29r
aWUgY29va2llID0gSU9ISURFbGVtZW50R2V0Q29va2llKGVsZW1lbnQpOworICAgIG1fZWxlbWVu
dE1hcC5zZXQoY29va2llLCBtX2F4ZXMubGFzdCgpLmdldCgpKTsKKworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIEhJREdhbWVwYWQ6OnZhbHVlQ2hhbmdlZChJT0hJRFZhbHVlUmVmIHZhbHVl
KQoreworICAgIElPSElERWxlbWVudENvb2tpZSBjb29raWUgPSBJT0hJREVsZW1lbnRHZXRDb29r
aWUoSU9ISURWYWx1ZUdldEVsZW1lbnQodmFsdWUpKTsKKyAgICBISURHYW1lcGFkRWxlbWVudCog
ZWxlbWVudCA9IG1fZWxlbWVudE1hcC5nZXQoY29va2llKTsKKworICAgIC8vIFRoaXMgbWlnaHQg
YmUgYW4gZWxlbWVudCB3ZSBkb24ndCBjdXJyZW50bHkgaGFuZGxlIGFzIGlucHV0IHNvIHdlIGNh
biBza2lwIGl0LgorICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZWxl
bWVudC0+cmF3VmFsdWUgPSBJT0hJRFZhbHVlR2V0U2NhbGVkVmFsdWUodmFsdWUsIGtJT0hJRFZh
bHVlU2NhbGVUeXBlUGh5c2ljYWwpOworCisgICAgaWYgKGVsZW1lbnQtPmlzQnV0dG9uKCkpIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYnV0dG9ucy5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgaWYgKG1fYnV0dG9uc1tpXS5nZXQoKSA9PSBlbGVtZW50KQorICAgICAg
ICAgICAgICAgIG1fYnV0dG9uVmFsdWVzW2ldID0gZWxlbWVudC0+bm9ybWFsaXplZFZhbHVlKCk7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmlzQXhpcygpKSB7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2F4ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgIGlmIChtX2F4ZXNbaV0uZ2V0KCkgPT0gZWxlbWVudCkKKyAgICAgICAgICAgICAgICBtX2F4
aXNWYWx1ZXNbaV0gPSBlbGVtZW50LT5ub3JtYWxpemVkVmFsdWUoKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIG1fbGFzdFVwZGF0
ZVRpbWUgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkcy9tYWMvSElER2FtZXBhZC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ2FtZXBhZHMvbWFjL0hJREdhbWVwYWQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zM2Fm
ZWIzMjY3ZDA0Mjg4N2VkNWUwZmRmOTk5MWI5Yzc1MGE0YzhlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZHMvbWFjL0hJREdhbWVwYWQuaApAQCAtMCww
ICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdBTUVQ
QUQpCisKKyNpbmNsdWRlICJQbGF0Zm9ybUdhbWVwYWQuaCIKKyNpbmNsdWRlIDxJT0tpdC9oaWQv
SU9ISUREZXZpY2UuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgSElER2FtZXBhZEVs
ZW1lbnQgeworICAgIEhJREdhbWVwYWRFbGVtZW50KGRvdWJsZSB0aGVNaW4sIGRvdWJsZSB0aGVN
YXgsIElPSElERWxlbWVudFJlZiBlbGVtZW50KQorICAgICAgICA6IG1pbih0aGVNaW4pCisgICAg
ICAgICwgbWF4KHRoZU1heCkKKyAgICAgICAgLCByYXdWYWx1ZSh0aGVNaW4pCisgICAgICAgICwg
aW9oaWRFbGVtZW50KGVsZW1lbnQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIH5I
SURHYW1lcGFkRWxlbWVudCgpCisgICAgeworICAgIH0KKworICAgIGRvdWJsZSBtaW47CisgICAg
ZG91YmxlIG1heDsKKyAgICBkb3VibGUgcmF3VmFsdWU7CisgICAgUmV0YWluUHRyPElPSElERWxl
bWVudFJlZj4gaW9oaWRFbGVtZW50OworCisgICAgdmlydHVhbCBib29sIGlzQnV0dG9uKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNBeGlzKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgZG91YmxlIG5vcm1hbGl6ZWRWYWx1ZSgpID0g
MDsKK307CisKK3N0cnVjdCBISURHYW1lcGFkQnV0dG9uIDogSElER2FtZXBhZEVsZW1lbnQgewor
ICAgIEhJREdhbWVwYWRCdXR0b24odWludDMyX3QgdGhlUHJpb3JpdHksIGRvdWJsZSBtaW4sIGRv
dWJsZSBtYXgsIElPSElERWxlbWVudFJlZiBlbGVtZW50KQorICAgICAgICA6IEhJREdhbWVwYWRF
bGVtZW50KG1pbiwgbWF4LCBlbGVtZW50KQorICAgICAgICAsIHByaW9yaXR5KHRoZVByaW9yaXR5
KQorICAgIHsKKyAgICB9CisKKyAgICB1aW50MzJfdCBwcmlvcml0eTsKKworICAgIGJvb2wgaXNC
dXR0b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBCdXR0b25z
IG5vcm1hbGl6ZSB0byB0aGUgcmFuZ2UgKDAuMCkgLSAoMS4wKQorICAgIGRvdWJsZSBub3JtYWxp
emVkVmFsdWUoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIChyYXdWYWx1ZSAtIG1p
bikgLyAobWF4IC0gbWluKTsKKyAgICB9Cit9OworCitzdHJ1Y3QgSElER2FtZXBhZEF4aXMgOiBI
SURHYW1lcGFkRWxlbWVudCB7CisgICAgSElER2FtZXBhZEF4aXMoZG91YmxlIG1pbiwgZG91Ymxl
IG1heCwgSU9ISURFbGVtZW50UmVmIGVsZW1lbnQpCisgICAgICAgIDogSElER2FtZXBhZEVsZW1l
bnQobWluLCBtYXgsIGVsZW1lbnQpCisgICAgeworICAgIH0KKworICAgIGJvb2wgaXNBeGlzKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gQXhlcyBub3JtYWxpemUg
dG8gdGhlIHJhbmdlICgtMS4wKSAtICgxLjApCisgICAgZG91YmxlIG5vcm1hbGl6ZWRWYWx1ZSgp
IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gKCgocmF3VmFsdWUgLSBtaW4pIC8gKG1h
eCAtIG1pbikpICogMikgLSAxOworICAgIH0KK307CisKK2NsYXNzIEhJREdhbWVwYWQgOiBwdWJs
aWMgUGxhdGZvcm1HYW1lcGFkIHsKK3B1YmxpYzoKKyAgICBISURHYW1lcGFkKElPSElERGV2aWNl
UmVmLCB1bnNpZ25lZCBpbmRleCk7CisKKyAgICBJT0hJRERldmljZVJlZiBoaWREZXZpY2UoKSBj
b25zdCB7IHJldHVybiBtX2hpZERldmljZS5nZXQoKTsgfQorCisgICAgdm9pZCB2YWx1ZUNoYW5n
ZWQoSU9ISURWYWx1ZVJlZik7CisKKyAgICBjb25zdCBWZWN0b3I8ZG91YmxlPiYgYXhpc1ZhbHVl
cygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYXhpc1ZhbHVlczsgfQorICAgIGNvbnN0IFZlY3Rv
cjxkb3VibGU+JiBidXR0b25WYWx1ZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2J1dHRvblZh
bHVlczsgfQorCitwcml2YXRlOgorICAgIHZvaWQgaW5pdEVsZW1lbnRzKCk7CisgICAgdm9pZCBp
bml0RWxlbWVudHNGcm9tQXJyYXkoQ0ZBcnJheVJlZik7CisKKyAgICBib29sIG1heWJlQWRkQnV0
dG9uKElPSElERWxlbWVudFJlZik7CisgICAgYm9vbCBtYXliZUFkZEF4aXMoSU9ISURFbGVtZW50
UmVmKTsKKworICAgIHZvaWQgZ2V0Q3VycmVudFZhbHVlRm9yRWxlbWVudChjb25zdCBISURHYW1l
cGFkRWxlbWVudCYpOworCisgICAgUmV0YWluUHRyPElPSElERGV2aWNlUmVmPiBtX2hpZERldmlj
ZTsKKworICAgIEhhc2hNYXA8SU9ISURFbGVtZW50Q29va2llLCBISURHYW1lcGFkRWxlbWVudCo+
IG1fZWxlbWVudE1hcDsKKworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SElER2FtZXBhZEJ1
dHRvbj4+IG1fYnV0dG9uczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEhJREdhbWVwYWRB
eGlzPj4gbV9heGVzOworICAgIFZlY3Rvcjxkb3VibGU+IG1fYnV0dG9uVmFsdWVzOworICAgIFZl
Y3Rvcjxkb3VibGU+IG1fYXhpc1ZhbHVlczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ2FtZXBhZHMvbWFjL0hJREdhbWVwYWRQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9nYW1lcGFkcy9tYWMvSElER2FtZXBhZFByb3ZpZGVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42ZjQ0MWU2ZmFiZjZiN2IwOWE3NjRiNjYyM2JiMmM0MzQ4NmEwY2Q1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZHMvbWFjL0hJREdhbWVwYWRQ
cm92aWRlci5jcHAKQEAgLTAsMCArMSwyNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSElER2FtZXBhZFByb3ZpZGVyLmgiCisKKyNpZiBFTkFCTEUoR0FN
RVBBRCkKKworI2luY2x1ZGUgIkdhbWVwYWRQcm92aWRlckNsaWVudC5oIgorI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUdhbWVwYWQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgY29uc3QgZG91YmxlIENvbm5lY3Rpb25EZWxheUludGVydmFsID0gMC41
Oworc3RhdGljIGNvbnN0IGRvdWJsZSBJbnB1dE5vdGlmaWNhdGlvbkRlbGF5ID0gMC4wNTsKKwor
c3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGRldmljZU1hdGNoaW5nRGljdGlvbmFy
eSh1aW50MzJfdCB1c2FnZVBhZ2UsIHVpbnQzMl90IHVzYWdlKQoreworICAgIEFTU0VSVCh1c2Fn
ZVBhZ2UpOworICAgIEFTU0VSVCh1c2FnZSk7CisKKyAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+
IHBhZ2VOdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGtDRk51bWJlckludFR5cGUsICZ1c2FnZVBhZ2UpKTsKKyAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJS
ZWY+IHVzYWdlTnVtYmVyID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmdXNhZ2UpKTsKKworICAgIENGU3RyaW5nUmVmIGtleXNb
XSA9IHsgQ0ZTVFIoa0lPSElERGV2aWNlVXNhZ2VQYWdlS2V5KSwgQ0ZTVFIoa0lPSElERGV2aWNl
VXNhZ2VLZXkpIH07CisgICAgQ0ZOdW1iZXJSZWYgdmFsdWVzW10gPSB7IHBhZ2VOdW1iZXIuZ2V0
KCksIHVzYWdlTnVtYmVyLmdldCgpIH07CisKKyAgICByZXR1cm4gYWRvcHRDRihDRkRpY3Rpb25h
cnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKGNvbnN0IHZvaWQqKilrZXlzLCAoY29uc3Qg
dm9pZCoqKXZhbHVlcywgMiwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlw
ZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworfQorCitzdGF0aWMgdm9pZCBkZXZpY2VBZGRl
ZENhbGxiYWNrKHZvaWQqIGNvbnRleHQsIElPUmV0dXJuLCB2b2lkKiwgSU9ISUREZXZpY2VSZWYg
ZGV2aWNlKQoreworICAgIEhJREdhbWVwYWRQcm92aWRlciogbGlzdGVuZXIgPSBzdGF0aWNfY2Fz
dDxISURHYW1lcGFkUHJvdmlkZXIqPihjb250ZXh0KTsKKyAgICBsaXN0ZW5lci0+ZGV2aWNlQWRk
ZWQoZGV2aWNlKTsKK30KKworc3RhdGljIHZvaWQgZGV2aWNlUmVtb3ZlZENhbGxiYWNrKHZvaWQq
IGNvbnRleHQsIElPUmV0dXJuLCB2b2lkKiwgSU9ISUREZXZpY2VSZWYgZGV2aWNlKQoreworICAg
IEhJREdhbWVwYWRQcm92aWRlciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxISURHYW1lcGFkUHJv
dmlkZXIqPihjb250ZXh0KTsKKyAgICBsaXN0ZW5lci0+ZGV2aWNlUmVtb3ZlZChkZXZpY2UpOwor
fQorCitzdGF0aWMgdm9pZCBkZXZpY2VWYWx1ZXNDaGFuZ2VkQ2FsbGJhY2sodm9pZCogY29udGV4
dCwgSU9SZXR1cm4gcmVzdWx0LCB2b2lkKiwgSU9ISURWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICAv
LyBBIG5vbi16ZXJvIHJlc3VsdCB2YWx1ZSBpbmRpY2F0ZXMgYW4gZXJyb3IgdGhhdCB3ZSBjYW4g
ZG8gbm90aGluZyBhYm91dCBmb3IgaW5wdXQgdmFsdWVzLgorICAgIGlmIChyZXN1bHQpCisgICAg
ICAgIHJldHVybjsKKworICAgIEhJREdhbWVwYWRQcm92aWRlciogbGlzdGVuZXIgPSBzdGF0aWNf
Y2FzdDxISURHYW1lcGFkUHJvdmlkZXIqPihjb250ZXh0KTsKKyAgICBsaXN0ZW5lci0+dmFsdWVz
Q2hhbmdlZCh2YWx1ZSk7Cit9CisKK0hJREdhbWVwYWRQcm92aWRlciYgSElER2FtZXBhZFByb3Zp
ZGVyOjpzaW5nbGV0b24oKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxISURHYW1lcGFk
UHJvdmlkZXI+IHNoYXJlZExpc3RlbmVyOworICAgIHJldHVybiBzaGFyZWRMaXN0ZW5lcjsKK30K
KworSElER2FtZXBhZFByb3ZpZGVyOjpISURHYW1lcGFkUHJvdmlkZXIoKQorICAgIDogbV9zaG91
bGREaXNwYXRjaENhbGxiYWNrcyhmYWxzZSkKKyAgICAsIG1fY29ubmVjdGlvbkRlbGF5VGltZXIo
KnRoaXMsICZISURHYW1lcGFkUHJvdmlkZXI6OmNvbm5lY3Rpb25EZWxheVRpbWVyRmlyZWQpCisg
ICAgLCBtX2lucHV0Tm90aWZpY2F0aW9uVGltZXIoKnRoaXMsICZISURHYW1lcGFkUHJvdmlkZXI6
OmlucHV0Tm90aWZpY2F0aW9uVGltZXJGaXJlZCkKK3sKKyAgICBtX21hbmFnZXIgPSBhZG9wdENG
KElPSElETWFuYWdlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrSU9ISURPcHRpb25zVHlw
ZU5vbmUpKTsKKworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGpveXN0aWNrRGljdGlv
bmFyeSA9IGRldmljZU1hdGNoaW5nRGljdGlvbmFyeShrSElEUGFnZV9HZW5lcmljRGVza3RvcCwg
a0hJRFVzYWdlX0dEX0pveXN0aWNrKTsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBn
YW1lcGFkRGljdGlvbmFyeSA9IGRldmljZU1hdGNoaW5nRGljdGlvbmFyeShrSElEUGFnZV9HZW5l
cmljRGVza3RvcCwga0hJRFVzYWdlX0dEX0dhbWVQYWQpOworCisgICAgQ0ZEaWN0aW9uYXJ5UmVm
IGRldmljZXNbXSA9IHsgam95c3RpY2tEaWN0aW9uYXJ5LmdldCgpLCBnYW1lcGFkRGljdGlvbmFy
eS5nZXQoKSB9OworCisgICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IG1hdGNoaW5nQXJyYXkgPSBh
ZG9wdENGKENGQXJyYXlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKGNvbnN0IHZvaWQqKilk
ZXZpY2VzLCAyLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CisKKyAgICBJT0hJRE1hbmFnZXJT
ZXREZXZpY2VNYXRjaGluZ011bHRpcGxlKG1fbWFuYWdlci5nZXQoKSwgbWF0Y2hpbmdBcnJheS5n
ZXQoKSk7CisgICAgSU9ISURNYW5hZ2VyUmVnaXN0ZXJEZXZpY2VNYXRjaGluZ0NhbGxiYWNrKG1f
bWFuYWdlci5nZXQoKSwgZGV2aWNlQWRkZWRDYWxsYmFjaywgdGhpcyk7CisgICAgSU9ISURNYW5h
Z2VyUmVnaXN0ZXJEZXZpY2VSZW1vdmFsQ2FsbGJhY2sobV9tYW5hZ2VyLmdldCgpLCBkZXZpY2VS
ZW1vdmVkQ2FsbGJhY2ssIHRoaXMpOworICAgIElPSElETWFuYWdlclJlZ2lzdGVySW5wdXRWYWx1
ZUNhbGxiYWNrKG1fbWFuYWdlci5nZXQoKSwgZGV2aWNlVmFsdWVzQ2hhbmdlZENhbGxiYWNrLCB0
aGlzKTsKK30KKwordW5zaWduZWQgSElER2FtZXBhZFByb3ZpZGVyOjppbmRleEZvck5ld2x5Q29u
bmVjdGVkRGV2aWNlKCkKK3sKKyAgICB1bnNpZ25lZCBpbmRleCA9IDA7CisgICAgd2hpbGUgKGlu
ZGV4IDwgbV9nYW1lcGFkVmVjdG9yLnNpemUoKSAmJiBtX2dhbWVwYWRWZWN0b3JbaW5kZXhdKQor
ICAgICAgICArK2luZGV4OworCisgICAgcmV0dXJuIGluZGV4OworfQorCit2b2lkIEhJREdhbWVw
YWRQcm92aWRlcjo6Y29ubmVjdGlvbkRlbGF5VGltZXJGaXJlZCgpCit7CisgICAgbV9zaG91bGRE
aXNwYXRjaENhbGxiYWNrcyA9IHRydWU7Cit9CisKK3ZvaWQgSElER2FtZXBhZFByb3ZpZGVyOjpv
cGVuQW5kU2NoZWR1bGVNYW5hZ2VyKCkKK3sKKyAgICBMT0coR2FtZXBhZCwgIkhJREdhbWVwYWRQ
cm92aWRlciBvcGVuaW5nL3NjaGVkdWxpbmcgSElEIG1hbmFnZXIiKTsKKworICAgIEFTU0VSVCht
X2dhbWVwYWRWZWN0b3IuaXNFbXB0eSgpKTsKKyAgICBBU1NFUlQobV9nYW1lcGFkTWFwLmlzRW1w
dHkoKSk7CisKKyAgICBtX3Nob3VsZERpc3BhdGNoQ2FsbGJhY2tzID0gZmFsc2U7CisKKyAgICBJ
T0hJRE1hbmFnZXJTY2hlZHVsZVdpdGhSdW5Mb29wKG1fbWFuYWdlci5nZXQoKSwgQ0ZSdW5Mb29w
R2V0Q3VycmVudCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworICAgIElPSElETWFuYWdlck9w
ZW4obV9tYW5hZ2VyLmdldCgpLCBrSU9ISURPcHRpb25zVHlwZU5vbmUpOworCisgICAgLy8gQW55
IGNvbm5lY3Rpb25zIHdlIGFyZSBub3RpZmllZCBvZiB3aXRoaW4gdGhlIENvbm5lY3Rpb25EZWxh
eUludGVydmFsIG9mIGxpc3RlbmluZyBsaWtlbHkgcmVwcmVzZW50CisgICAgLy8gZGV2aWNlcyB0
aGF0IHdlcmUgYWxyZWFkeSBjb25uZWN0ZWQsIHNvIHdlIHN1cHByZXNzIG5vdGlmeWluZyBjbGll
bnRzIG9mIHRoZXNlLgorICAgIG1fY29ubmVjdGlvbkRlbGF5VGltZXIuc3RhcnRPbmVTaG90KENv
bm5lY3Rpb25EZWxheUludGVydmFsKTsKK30KKwordm9pZCBISURHYW1lcGFkUHJvdmlkZXI6OmNs
b3NlQW5kVW5zY2hlZHVsZU1hbmFnZXIoKQoreworICAgIExPRyhHYW1lcGFkLCAiSElER2FtZXBh
ZFByb3ZpZGVyIGNsb3NpbmcvdW5zY2hlZHVsaW5nIEhJRCBtYW5hZ2VyIik7CisKKyAgICBJT0hJ
RE1hbmFnZXJVbnNjaGVkdWxlRnJvbVJ1bkxvb3AobV9tYW5hZ2VyLmdldCgpLCBDRlJ1bkxvb3BH
ZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CisgICAgSU9ISURNYW5hZ2VyQ2xv
c2UobV9tYW5hZ2VyLmdldCgpLCBrSU9ISURPcHRpb25zVHlwZU5vbmUpOworCisgICAgbV9nYW1l
cGFkVmVjdG9yLmNsZWFyKCk7CisgICAgbV9nYW1lcGFkTWFwLmNsZWFyKCk7CisKKyAgICBtX2Nv
bm5lY3Rpb25EZWxheVRpbWVyLnN0b3AoKTsKK30KKwordm9pZCBISURHYW1lcGFkUHJvdmlkZXI6
OnN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRlckNsaWVudCogY2xpZW50KQor
eworICAgIGJvb2wgc2hvdWxkT3BlbkFuZFNjaGVkdWxlTWFuYWdlciA9IG1fY2xpZW50cy5pc0Vt
cHR5KCk7CisKKyAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlucyhjbGllbnQpKTsKKyAgICBt
X2NsaWVudHMuYWRkKGNsaWVudCk7CisKKyAgICBpZiAoc2hvdWxkT3BlbkFuZFNjaGVkdWxlTWFu
YWdlcikKKyAgICAgICAgb3BlbkFuZFNjaGVkdWxlTWFuYWdlcigpOworfQordm9pZCBISURHYW1l
cGFkUHJvdmlkZXI6OnN0b3BNb25pdG9yaW5nR2FtZXBhZHMoR2FtZXBhZFByb3ZpZGVyQ2xpZW50
KiBjbGllbnQpCit7CisgICAgQVNTRVJUKG1fY2xpZW50cy5jb250YWlucyhjbGllbnQpKTsKKwor
ICAgIGJvb2wgc2hvdWxkQ2xvc2VBbmRVbnNjaGVkdWxlTWFuYWdlciA9IG1fY2xpZW50cy5yZW1v
dmUoY2xpZW50KSAmJiBtX2NsaWVudHMuaXNFbXB0eSgpOworCisgICAgaWYgKHNob3VsZENsb3Nl
QW5kVW5zY2hlZHVsZU1hbmFnZXIpCisgICAgICAgIGNsb3NlQW5kVW5zY2hlZHVsZU1hbmFnZXIo
KTsKK30KKwordm9pZCBISURHYW1lcGFkUHJvdmlkZXI6OmRldmljZUFkZGVkKElPSElERGV2aWNl
UmVmIGRldmljZSkKK3sKKyAgICBBU1NFUlQoIW1fZ2FtZXBhZE1hcC5nZXQoZGV2aWNlKSk7CisK
KyAgICBMT0coR2FtZXBhZCwgIkhJREdhbWVwYWRQcm92aWRlciBkZXZpY2UgJXAgYWRkZWQiLCBk
ZXZpY2UpOworCisgICAgdW5zaWduZWQgaW5kZXggPSBpbmRleEZvck5ld2x5Q29ubmVjdGVkRGV2
aWNlKCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEhJREdhbWVwYWQ+IGdhbWVwYWQgPSBzdGQ6Om1h
a2VfdW5pcXVlPEhJREdhbWVwYWQ+KGRldmljZSwgaW5kZXgpOworCisgICAgaWYgKG1fZ2FtZXBh
ZFZlY3Rvci5zaXplKCkgPD0gaW5kZXgpCisgICAgICAgIG1fZ2FtZXBhZFZlY3Rvci5yZXNpemUo
aW5kZXggKyAxKTsKKworICAgIG1fZ2FtZXBhZFZlY3RvcltpbmRleF0gPSBnYW1lcGFkLmdldCgp
OworICAgIG1fZ2FtZXBhZE1hcC5zZXQoZGV2aWNlLCBXVEZNb3ZlKGdhbWVwYWQpKTsKKworICAg
IGlmICghbV9zaG91bGREaXNwYXRjaENhbGxiYWNrcykgeworICAgICAgICAvLyBUaGlzIGFkZGVk
IGRldmljZSBpcyB0aGUgcmVzdWx0IG9mIHVzIHN0YXJ0aW5nIHRvIG1vbml0b3IgZ2FtZXBhZHMu
CisgICAgICAgIC8vIFdlJ2xsIGdldCBub3RpZmllZCBvZiBhbGwgY29ubmVjdGVkIGRldmljZXMg
ZHVyaW5nIHRoaXMgY3VycmVudCBzcGluIG9mIHRoZSBydW5sb29wCisgICAgICAgIC8vIGFuZCB3
ZSBkb24ndCB3YW50IHRvIHRlbGwgdGhlIGNsaWVudCBhYm91dCBhbnkgb2YgdGhlbS4KKyAgICAg
ICAgLy8gVGhlIG1fY29ubmVjdGlvbkRlbGF5VGltZXIgZmlyZXMgaW4gYSBzdWJzZXF1ZW50IHNw
aW4gb2YgdGhlIHJ1bmxvb3AgYWZ0ZXIgd2hpY2gKKyAgICAgICAgLy8gYW55IGNvbm5lY3Rpb24g
ZXZlbnRzIGFyZSBhY3R1YWwgbmV3IGRldmljZXMuCisgICAgICAgIG1fY29ubmVjdGlvbkRlbGF5
VGltZXIuc3RhcnRPbmVTaG90KDApOworCisgICAgICAgIExPRyhHYW1lcGFkLCAiRGV2aWNlICVw
IHdhcyBhZGRlZCB3aGlsZSBzdXBwcmVzc2luZyBjYWxsYmFja3MsIHNvIHRoaXMgc2hvdWxkIGJl
IGFuICdhbHJlYWR5IGNvbm5lY3RlZCcgZXZlbnQiLCBkZXZpY2UpOworCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAg
Y2xpZW50LT5wbGF0Zm9ybUdhbWVwYWRDb25uZWN0ZWQoKm1fZ2FtZXBhZFZlY3RvcltpbmRleF0p
OworfQorCit2b2lkIEhJREdhbWVwYWRQcm92aWRlcjo6ZGV2aWNlUmVtb3ZlZChJT0hJRERldmlj
ZVJlZiBkZXZpY2UpCit7CisgICAgTE9HKEdhbWVwYWQsICJISURHYW1lcGFkUHJvdmlkZXIgZGV2
aWNlICVwIHJlbW92ZWQiLCBkZXZpY2UpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEhJREdhbWVw
YWQ+IHJlbW92ZWRHYW1lcGFkID0gcmVtb3ZlR2FtZXBhZEZvckRldmljZShkZXZpY2UpOworICAg
IEFTU0VSVChyZW1vdmVkR2FtZXBhZCk7CisKKyAgICAvLyBBbnkgdGltZSB3ZSBnZXQgYSBkZXZp
Y2UgcmVtb3ZlZCBjYWxsYmFjayB3ZSBrbm93IGl0J3MgYSByZWFsIGV2ZW50IGFuZCBub3QgYW4g
J2FscmVhZHkgY29ubmVjdGVkJyBldmVudC4KKyAgICAvLyBXZSBzaG91bGQgYWx3YXlzIHN0b3Ag
c3VwcHJlc3NpbmcgY2FsbGJhY2tzIHdoZW4gd2UgcmVjZWl2ZSBzdWNoIGFuIGV2ZW50LgorICAg
IG1fc2hvdWxkRGlzcGF0Y2hDYWxsYmFja3MgPSB0cnVlOworCisgICAgZm9yIChhdXRvJiBjbGll
bnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+cGxhdGZvcm1HYW1lcGFkRGlzY29ubmVj
dGVkKCpyZW1vdmVkR2FtZXBhZCk7Cit9CisKK3ZvaWQgSElER2FtZXBhZFByb3ZpZGVyOjp2YWx1
ZXNDaGFuZ2VkKElPSElEVmFsdWVSZWYgdmFsdWUpCit7CisgICAgSU9ISUREZXZpY2VSZWYgZGV2
aWNlID0gSU9ISURFbGVtZW50R2V0RGV2aWNlKElPSElEVmFsdWVHZXRFbGVtZW50KHZhbHVlKSk7
CisKKyAgICBISURHYW1lcGFkKiBnYW1lcGFkID0gbV9nYW1lcGFkTWFwLmdldChkZXZpY2UpOwor
CisgICAgLy8gV2hlbiBzdGFydGluZyBtb25pdG9yaW5nIHdlIG1pZ2h0IGdldCBhIHZhbHVlIGNo
YW5nZWQgY2FsbGJhY2sgYmVmb3JlIHdlIGV2ZW4ga25vdyB0aGUgZGV2aWNlIGlzIGNvbm5lY3Rl
ZC4KKyAgICBpZiAoIWdhbWVwYWQpCisgICAgICAgIHJldHVybjsKKworICAgIGdhbWVwYWQtPnZh
bHVlQ2hhbmdlZCh2YWx1ZSk7CisKKyAgICAvLyBUaGlzIGlzQWN0aXZlIGNoZWNrIGlzIG5lY2Vz
c2FyeSBhcyB3ZSB3YW50IHRvIGRlbGF5IGlucHV0IG5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgdGlt
ZSBvZiB0aGUgZmlyc3QgaW5wdXQsCisgICAgLy8gYW5kIG5vdCBwdXNoIHRoZSBub3RpZmljYXRp
b24gb3V0IG9uIGV2ZXJ5IHN1YnNlcXVlbnQgaW5wdXQuCisgICAgaWYgKCFtX2lucHV0Tm90aWZp
Y2F0aW9uVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9pbnB1dE5vdGlmaWNhdGlvblRpbWVy
LnN0YXJ0T25lU2hvdChJbnB1dE5vdGlmaWNhdGlvbkRlbGF5KTsKK30KKwordm9pZCBISURHYW1l
cGFkUHJvdmlkZXI6OmlucHV0Tm90aWZpY2F0aW9uVGltZXJGaXJlZCgpCit7CisgICAgaWYgKCFt
X3Nob3VsZERpc3BhdGNoQ2FsbGJhY2tzKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGF1
dG8mIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5wbGF0Zm9ybUdhbWVwYWRJ
bnB1dEFjdGl2aXR5KCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxISURHYW1lcGFkPiBISURHYW1l
cGFkUHJvdmlkZXI6OnJlbW92ZUdhbWVwYWRGb3JEZXZpY2UoSU9ISUREZXZpY2VSZWYgZGV2aWNl
KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxISURHYW1lcGFkPiByZXN1bHQgPSBtX2dhbWVwYWRN
YXAudGFrZShkZXZpY2UpOworICAgIEFTU0VSVChyZXN1bHQpOworCisgICAgYXV0byBpID0gbV9n
YW1lcGFkVmVjdG9yLmZpbmQocmVzdWx0LmdldCgpKTsKKyAgICBpZiAoaSAhPSBub3RGb3VuZCkK
KyAgICAgICAgbV9nYW1lcGFkVmVjdG9yW2ldID0gbnVsbHB0cjsKKworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHQU1F
UEFEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZHMvbWFjL0hJ
REdhbWVwYWRQcm92aWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZHMvbWFj
L0hJREdhbWVwYWRQcm92aWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc4ZGUwMGM3ZTYxZTU2NDhkZmZmOGNl
NTk1ODY2ODBlZTM4MzhlZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9nYW1lcGFkcy9tYWMvSElER2FtZXBhZFByb3ZpZGVyLmgKQEAgLTAsMCArMSw4NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdBTUVQQUQpCisKKyNpbmNs
dWRlICJHYW1lcGFkUHJvdmlkZXIuaCIKKyNpbmNsdWRlICJISURHYW1lcGFkLmgiCisjaW5jbHVk
ZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxJT0tpdC9oaWQvSU9ISURNYW5hZ2VyLmg+CisjaW5jbHVk
ZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0
Zi9SZXRhaW5QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHYW1lcGFkUHJv
dmlkZXJDbGllbnQ7CisKK2NsYXNzIEhJREdhbWVwYWRQcm92aWRlciA6IHB1YmxpYyBHYW1lcGFk
UHJvdmlkZXIgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhJREdhbWVwYWRQcm92aWRlcik7
CisgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPEhJREdhbWVwYWRQcm92aWRlcj47Citw
dWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEhJREdhbWVwYWRQcm92aWRlciYgc2lu
Z2xldG9uKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnRNb25pdG9yaW5nR2FtZXBhZHMoR2Ft
ZXBhZFByb3ZpZGVyQ2xpZW50Kik7CisgICAgdmlydHVhbCB2b2lkIHN0b3BNb25pdG9yaW5nR2Ft
ZXBhZHMoR2FtZXBhZFByb3ZpZGVyQ2xpZW50Kik7CisgICAgdmlydHVhbCBjb25zdCBWZWN0b3I8
UGxhdGZvcm1HYW1lcGFkKj4mIHBsYXRmb3JtR2FtZXBhZHMoKSB7IHJldHVybiBtX2dhbWVwYWRW
ZWN0b3I7IH0KKworICAgIHZvaWQgZGV2aWNlQWRkZWQoSU9ISUREZXZpY2VSZWYpOworICAgIHZv
aWQgZGV2aWNlUmVtb3ZlZChJT0hJRERldmljZVJlZik7CisgICAgdm9pZCB2YWx1ZXNDaGFuZ2Vk
KElPSElEVmFsdWVSZWYpOworCitwcml2YXRlOgorICAgIEhJREdhbWVwYWRQcm92aWRlcigpOwor
CisgICAgc3RkOjp1bmlxdWVfcHRyPEhJREdhbWVwYWQ+IHJlbW92ZUdhbWVwYWRGb3JEZXZpY2Uo
SU9ISUREZXZpY2VSZWYpOworCisgICAgdm9pZCBvcGVuQW5kU2NoZWR1bGVNYW5hZ2VyKCk7Cisg
ICAgdm9pZCBjbG9zZUFuZFVuc2NoZWR1bGVNYW5hZ2VyKCk7CisKKyAgICB2b2lkIGNvbm5lY3Rp
b25EZWxheVRpbWVyRmlyZWQoKTsKKyAgICB2b2lkIGlucHV0Tm90aWZpY2F0aW9uVGltZXJGaXJl
ZCgpOworCisgICAgdW5zaWduZWQgaW5kZXhGb3JOZXdseUNvbm5lY3RlZERldmljZSgpOworCisg
ICAgVmVjdG9yPFBsYXRmb3JtR2FtZXBhZCo+IG1fZ2FtZXBhZFZlY3RvcjsKKyAgICBIYXNoTWFw
PElPSElERGV2aWNlUmVmLCBzdGQ6OnVuaXF1ZV9wdHI8SElER2FtZXBhZD4+IG1fZ2FtZXBhZE1h
cDsKKworICAgIFJldGFpblB0cjxJT0hJRE1hbmFnZXJSZWY+IG1fbWFuYWdlcjsKKworICAgIEhh
c2hTZXQ8R2FtZXBhZFByb3ZpZGVyQ2xpZW50Kj4gbV9jbGllbnRzOworICAgIGJvb2wgbV9zaG91
bGREaXNwYXRjaENhbGxiYWNrczsKKworICAgIFRpbWVyIG1fY29ubmVjdGlvbkRlbGF5VGltZXI7
CisgICAgVGltZXIgbV9pbnB1dE5vdGlmaWNhdGlvblRpbWVyOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9nbGliL0dhbWVwYWRzR2xpYi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9nbGliL0dhbWVwYWRzR2xpYi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGI4YmQyMWE1ZTg2NjIyNjI0ZDNjZDdhOWRjODM1MmMyNGUyNDU4NGIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ2xpYi9HYW1lcGFkc0dsaWIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjE5ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgWmFuIERvYmVyc2VrIDx6YW5kb2JlcnNla0Bn
bWFpbC5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
Ci0gKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SAotICogREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHYW1l
cGFkcy5oIgotCi0jaWYgRU5BQkxFKEdBTUVQQURfREVQUkVDQVRFRCkKLQotI2luY2x1ZGUgIkdh
bWVwYWREZXZpY2VMaW51eC5oIgotI2luY2x1ZGUgIkdhbWVwYWRMaXN0LmgiCi0jaW5jbHVkZSAi
TG9nZ2luZy5oIgotI2luY2x1ZGUgPGdpby9ndW5peGlucHV0c3RyZWFtLmg+Ci0jaW5jbHVkZSA8
Z3VkZXYvZ3VkZXYuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9n
bGliL0dSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHYW1lcGFkRGV2aWNlR2xpYiA6IHB1Ymxp
YyBHYW1lcGFkRGV2aWNlTGludXggewotcHVibGljOgotICAgIGV4cGxpY2l0IEdhbWVwYWREZXZp
Y2VHbGliKFN0cmluZyBkZXZpY2VGaWxlKTsKLSAgICB+R2FtZXBhZERldmljZUdsaWIoKTsKLQot
cHJpdmF0ZToKLSAgICBzdGF0aWMgZ2Jvb2xlYW4gcmVhZENhbGxiYWNrKEdPYmplY3QqIHBvbGxh
YmxlU3RyZWFtLCBncG9pbnRlciBkYXRhKTsKLSAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gbV9p
bnB1dFN0cmVhbTsKLSAgICBHUmVmUHRyPEdTb3VyY2U+IG1fc291cmNlOwotfTsKLQotR2FtZXBh
ZERldmljZUdsaWI6OkdhbWVwYWREZXZpY2VHbGliKFN0cmluZyBkZXZpY2VGaWxlKQotICAgIDog
R2FtZXBhZERldmljZUxpbnV4KGRldmljZUZpbGUpCi17Ci0gICAgaWYgKG1fZmlsZURlc2NyaXB0
b3IgPT0gLTEpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faW5wdXRTdHJlYW0gPSBhZG9wdEdS
ZWYoZ191bml4X2lucHV0X3N0cmVhbV9uZXcobV9maWxlRGVzY3JpcHRvciwgRkFMU0UpKTsKLSAg
ICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX3BvbGxhYmxlX2lucHV0X3N0cmVhbV9jcmVhdGVfc291
cmNlKEdfUE9MTEFCTEVfSU5QVVRfU1RSRUFNKG1faW5wdXRTdHJlYW0uZ2V0KCkpLCAwKSk7Ci0g
ICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fc291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0
PEdTb3VyY2VGdW5jPihyZWFkQ2FsbGJhY2spLCB0aGlzLCAwKTsKLSAgICBnX3NvdXJjZV9hdHRh
Y2gobV9zb3VyY2UuZ2V0KCksIDApOwotfQotCi1HYW1lcGFkRGV2aWNlR2xpYjo6fkdhbWVwYWRE
ZXZpY2VHbGliKCkKLXsKLSAgICBpZiAobV9zb3VyY2UpCi0gICAgICAgIGdfc291cmNlX2Rlc3Ry
b3kobV9zb3VyY2UuZ2V0KCkpOwotfQotCi1nYm9vbGVhbiBHYW1lcGFkRGV2aWNlR2xpYjo6cmVh
ZENhbGxiYWNrKEdPYmplY3QqIHBvbGxhYmxlU3RyZWFtLCBncG9pbnRlciBkYXRhKQotewotICAg
IEdhbWVwYWREZXZpY2VHbGliKiBnYW1lcGFkRGV2aWNlID0gcmVpbnRlcnByZXRfY2FzdDxHYW1l
cGFkRGV2aWNlR2xpYio+KGRhdGEpOwotICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsK
LSAgICBzdHJ1Y3QganNfZXZlbnQgZXZlbnQ7Ci0KLSAgICBnc3NpemUgbGVuID0gZ19wb2xsYWJs
ZV9pbnB1dF9zdHJlYW1fcmVhZF9ub25ibG9ja2luZyhHX1BPTExBQkxFX0lOUFVUX1NUUkVBTShw
b2xsYWJsZVN0cmVhbSksCi0gICAgICAgICZldmVudCwgc2l6ZW9mKGV2ZW50KSwgMCwgJmVycm9y
Lm91dFB0cigpKTsKLQotICAgIC8vIEZJWE1FOiBQcm9wZXJseSBsb2cgdGhlIGVycm9yLgotICAg
IC8vIEluIHRoZSBjYXNlIG9mIEdfSU9fRVJST1JfV09VTERfQkxPQ0sgZXJyb3IgcmV0dXJuIFRS
VUUgdG8gd2FpdCB1bnRpbAotICAgIC8vIHRoZSBzb3VyY2UgYmVjb21lcyByZWFkYWJsZSBhZ2Fp
biBhbmQgRkFMU0Ugb3RoZXJ3aXNlLgotICAgIGlmIChlcnJvcikKLSAgICAgICAgcmV0dXJuIGdf
ZXJyb3JfbWF0Y2hlcyhlcnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9XT1VMRF9C
TE9DSyk7Ci0KLSAgICBBU1NFUlRfVU5VU0VEKGxlbiwgbGVuID09IHNpemVvZihldmVudCkpOwot
ICAgIGdhbWVwYWREZXZpY2UtPnVwZGF0ZUZvckV2ZW50KGV2ZW50KTsKLSAgICByZXR1cm4gVFJV
RTsKLX0KLQotY2xhc3MgR2FtZXBhZHNHbGliIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBHYW1l
cGFkc0dsaWIodW5zaWduZWQgbGVuZ3RoKTsKLQotICAgIHZvaWQgcmVnaXN0ZXJEZXZpY2UoU3Ry
aW5nIGRldmljZUZpbGUpOwotICAgIHZvaWQgdW5yZWdpc3RlckRldmljZShTdHJpbmcgZGV2aWNl
RmlsZSk7Ci0KLSAgICB2b2lkIHVwZGF0ZUdhbWVwYWRMaXN0KEdhbWVwYWRMaXN0Kik7Ci0KLXBy
aXZhdGU6Ci0gICAgfkdhbWVwYWRzR2xpYigpOwotICAgIHN0YXRpYyB2b2lkIG9uVUV2ZW50Q2Fs
bGJhY2soR1VkZXZDbGllbnQqLCBnY2hhciogYWN0aW9uLCBHVWRldkRldmljZSosIGdwb2ludGVy
IGRhdGEpOwotICAgIHN0YXRpYyBnYm9vbGVhbiBpc0dhbWVwYWREZXZpY2UoR1VkZXZEZXZpY2Uq
KTsKLQotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8R2FtZXBhZERldmljZUdsaWI+ID4gbV9z
bG90czsKLSAgICBIYXNoTWFwPFN0cmluZywgR2FtZXBhZERldmljZUdsaWIqPiBtX2RldmljZU1h
cDsKLQotICAgIEdSZWZQdHI8R1VkZXZDbGllbnQ+IG1fZ3VkZXZDbGllbnQ7Ci19OwotCi1HYW1l
cGFkc0dsaWI6OkdhbWVwYWRzR2xpYih1bnNpZ25lZCBsZW5ndGgpCi0gICAgOiBtX3Nsb3RzKGxl
bmd0aCkKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogc3Vic3lzdGVtc1tdID0geyAiaW5wdXQi
LCAwIH07Ci0gICAgbV9ndWRldkNsaWVudCA9IGFkb3B0R1JlZihnX3VkZXZfY2xpZW50X25ldyhz
dWJzeXN0ZW1zKSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2d1ZGV2Q2xpZW50LmdldCgpLCAi
dWV2ZW50IiwgR19DQUxMQkFDSyhvblVFdmVudENhbGxiYWNrKSwgdGhpcyk7Ci0KLSAgICBHVW5p
cXVlUHRyPEdMaXN0PiBkZXZpY2VzTGlzdChnX3VkZXZfY2xpZW50X3F1ZXJ5X2J5X3N1YnN5c3Rl
bShtX2d1ZGV2Q2xpZW50LmdldCgpLCBzdWJzeXN0ZW1zWzBdKSk7Ci0gICAgZm9yIChHTGlzdCog
bGlzdEl0ZW0gPSBkZXZpY2VzTGlzdC5nZXQoKTsgbGlzdEl0ZW07IGxpc3RJdGVtID0gZ19saXN0
X25leHQobGlzdEl0ZW0pKSB7Ci0gICAgICAgIEdVZGV2RGV2aWNlKiBkZXZpY2UgPSBHX1VERVZf
REVWSUNFKGxpc3RJdGVtLT5kYXRhKTsKLSAgICAgICAgU3RyaW5nIGRldmljZUZpbGUgPSBTdHJp
bmc6OmZyb21VVEY4KGdfdWRldl9kZXZpY2VfZ2V0X2RldmljZV9maWxlKGRldmljZSkpOwotICAg
ICAgICBpZiAoaXNHYW1lcGFkRGV2aWNlKGRldmljZSkpCi0gICAgICAgICAgICByZWdpc3RlckRl
dmljZShkZXZpY2VGaWxlKTsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYoZGV2aWNlKTsKLSAgICB9
Ci19Ci0KLUdhbWVwYWRzR2xpYjo6fkdhbWVwYWRzR2xpYigpCi17Ci0gICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fZ3VkZXZDbGllbnQuZ2V0KCksIEdfU0lHTkFMX01B
VENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOwotfQotCi12b2lkIEdhbWVwYWRzR2xpYjo6cmVn
aXN0ZXJEZXZpY2UoU3RyaW5nIGRldmljZUZpbGUpCi17Ci0gICAgTE9HKEdhbWVwYWQsICJHYW1l
cGFkc0dsaWI6OnJlZ2lzdGVyRGV2aWNlICVzIiwgZGV2aWNlRmlsZS5hc2NpaSgpLmRhdGEoKSk7
Ci0gICAgQVNTRVJUKCFtX2RldmljZU1hcC5jb250YWlucyhkZXZpY2VGaWxlKSk7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtX3Nsb3RzLnNpemUoKTsgaW5kZXgrKykg
ewotICAgICAgICBpZiAoIW1fc2xvdHNbaW5kZXhdKSB7Ci0gICAgICAgICAgICBtX3Nsb3RzW2lu
ZGV4XSA9IHN0ZDo6bWFrZV91bmlxdWU8R2FtZXBhZERldmljZUdsaWI+KGRldmljZUZpbGUpOwot
ICAgICAgICAgICAgbV9kZXZpY2VNYXAuYWRkKGRldmljZUZpbGUsIG1fc2xvdHNbaW5kZXhdLmdl
dCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEdh
bWVwYWRzR2xpYjo6dW5yZWdpc3RlckRldmljZShTdHJpbmcgZGV2aWNlRmlsZSkKLXsKLSAgICBM
T0coR2FtZXBhZCwgIkdhbWVwYWRzR2xpYjo6dW5yZWdpc3RlckRldmljZSAlcyIsIGRldmljZUZp
bGUuYXNjaWkoKS5kYXRhKCkpOwotICAgIEFTU0VSVChtX2RldmljZU1hcC5jb250YWlucyhkZXZp
Y2VGaWxlKSk7Ci0KLSAgICBHYW1lcGFkRGV2aWNlR2xpYiogZ2FtZXBhZERldmljZSA9IG1fZGV2
aWNlTWFwLnRha2UoZGV2aWNlRmlsZSk7Ci0gICAgc2l6ZV90IGluZGV4ID0gbV9zbG90cy5maW5k
KGdhbWVwYWREZXZpY2UpOwotICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7Ci0KLSAgICBt
X3Nsb3RzW2luZGV4XSA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgR2FtZXBhZHNHbGliOjp1cGRhdGVH
YW1lcGFkTGlzdChHYW1lcGFkTGlzdCogaW50bykKLXsKLSAgICBBU1NFUlQobV9zbG90cy5zaXpl
KCkgPT0gaW50by0+bGVuZ3RoKCkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
c2xvdHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgaWYgKG1fc2xvdHNbaV0uZ2V0KCkgJiYgbV9z
bG90c1tpXS0+Y29ubmVjdGVkKCkpIHsKLSAgICAgICAgICAgIEdhbWVwYWREZXZpY2VHbGliKiBn
YW1lcGFkRGV2aWNlID0gbV9zbG90c1tpXS5nZXQoKTsKLSAgICAgICAgICAgIFJlZlB0cjxHYW1l
cGFkPiBnYW1lcGFkID0gaW50by0+aXRlbShpKTsKLSAgICAgICAgICAgIGlmICghZ2FtZXBhZCkK
LSAgICAgICAgICAgICAgICBnYW1lcGFkID0gR2FtZXBhZDo6Y3JlYXRlKCk7Ci0KLSAgICAgICAg
ICAgIGdhbWVwYWQtPmluZGV4KGkpOwotICAgICAgICAgICAgZ2FtZXBhZC0+aWQoZ2FtZXBhZERl
dmljZS0+aWQoKSk7Ci0gICAgICAgICAgICBnYW1lcGFkLT50aW1lc3RhbXAoZ2FtZXBhZERldmlj
ZS0+dGltZXN0YW1wKCkpOwotICAgICAgICAgICAgZ2FtZXBhZC0+YXhlcyhnYW1lcGFkRGV2aWNl
LT5heGVzQ291bnQoKSwgZ2FtZXBhZERldmljZS0+YXhlc0RhdGEoKSk7Ci0gICAgICAgICAgICBn
YW1lcGFkLT5idXR0b25zKGdhbWVwYWREZXZpY2UtPmJ1dHRvbnNDb3VudCgpLCBnYW1lcGFkRGV2
aWNlLT5idXR0b25zRGF0YSgpKTsKLQotICAgICAgICAgICAgaW50by0+c2V0KGksIGdhbWVwYWQp
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGludG8tPnNldChpLCAwKTsKLSAgICB9Ci19
Ci0KLXZvaWQgR2FtZXBhZHNHbGliOjpvblVFdmVudENhbGxiYWNrKEdVZGV2Q2xpZW50KiwgZ2No
YXIqIGFjdGlvbiwgR1VkZXZEZXZpY2UqIGRldmljZSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBp
ZiAoIWlzR2FtZXBhZERldmljZShkZXZpY2UpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHYW1l
cGFkc0dsaWIqIGdhbWVwYWRzR2xpYiA9IHJlaW50ZXJwcmV0X2Nhc3Q8R2FtZXBhZHNHbGliKj4o
ZGF0YSk7Ci0gICAgU3RyaW5nIGRldmljZUZpbGUgPSBTdHJpbmc6OmZyb21VVEY4KGdfdWRldl9k
ZXZpY2VfZ2V0X2RldmljZV9maWxlKGRldmljZSkpOwotCi0gICAgaWYgKCFnX3N0cmNtcDAoYWN0
aW9uLCAiYWRkIikpCi0gICAgICAgIGdhbWVwYWRzR2xpYi0+cmVnaXN0ZXJEZXZpY2UoZGV2aWNl
RmlsZSk7Ci0gICAgZWxzZSBpZiAoIWdfc3RyY21wMChhY3Rpb24sICJyZW1vdmUiKSkKLSAgICAg
ICAgZ2FtZXBhZHNHbGliLT51bnJlZ2lzdGVyRGV2aWNlKGRldmljZUZpbGUpOwotfQotCi1nYm9v
bGVhbiBHYW1lcGFkc0dsaWI6OmlzR2FtZXBhZERldmljZShHVWRldkRldmljZSogZGV2aWNlKQot
ewotICAgIGNvbnN0IGdjaGFyKiBkZXZpY2VGaWxlID0gZ191ZGV2X2RldmljZV9nZXRfZGV2aWNl
X2ZpbGUoZGV2aWNlKTsKLSAgICBjb25zdCBnY2hhciogc3lzZnNQYXRoID0gZ191ZGV2X2Rldmlj
ZV9nZXRfc3lzZnNfcGF0aChkZXZpY2UpOwotICAgIGlmICghZGV2aWNlRmlsZSB8fCAhc3lzZnNQ
YXRoKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBpZiAoIWdfdWRldl9kZXZpY2VfaGFz
X3Byb3BlcnR5KGRldmljZSwgIklEX0lOUFVUIikgfHwgIWdfdWRldl9kZXZpY2VfaGFzX3Byb3Bl
cnR5KGRldmljZSwgIklEX0lOUFVUX0pPWVNUSUNLIikpCi0gICAgICAgIHJldHVybiBGQUxTRTsK
LQotICAgIHJldHVybiBnX3N0cl9oYXNfcHJlZml4KGRldmljZUZpbGUsICIvZGV2L2lucHV0L2pz
Iik7Ci19Ci0KLXZvaWQgc2FtcGxlR2FtZXBhZHMoR2FtZXBhZExpc3QqIGludG8pCi17Ci0gICAg
REVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEdhbWVwYWRzR2xpYiwgZ2FtZXBhZHNHbGli
LCAoaW50by0+bGVuZ3RoKCkpKTsKLSAgICBnYW1lcGFkc0dsaWIudXBkYXRlR2FtZXBhZExpc3Qo
aW50byk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShH
QU1FUEFEX0RFUFJFQ0FURUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9s
aW51eC9HYW1lcGFkRGV2aWNlTGludXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGlu
dXgvR2FtZXBhZERldmljZUxpbnV4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YzUxNzU0ZDU0ZTFjMWYxZmY0NjRmNzAxMTVmNjk3NDNjZWFiOTRhZC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9s
aW51eC9HYW1lcGFkRGV2aWNlTGludXguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBaYW4gRG9iZXJzZWsgPHphbmRvYmVyc2VrQGdt
YWlsLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIK
LSAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
Ci0gKiBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdhbWVw
YWREZXZpY2VMaW51eC5oIgotCi0jaWYgRU5BQkxFKEdBTUVQQURfREVQUkVDQVRFRCkKLQotI2lu
Y2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jaW5jbHVkZSA8dW5pc3Rk
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLUdhbWVwYWREZXZpY2VMaW51eDo6R2FtZXBhZERldmljZUxpbnV4KFN0cmluZyBkZXZpY2VG
aWxlKQotICAgIDogbV9maWxlRGVzY3JpcHRvcigtMSkKLSAgICAsIG1fY29ubmVjdGVkKGZhbHNl
KQotICAgICwgbV9sYXN0VGltZXN0YW1wKDApCi17Ci0gICAgLy8gRklYTUU6IExvZyBlcnJvcnMg
d2hlbiByZXR1cm5pbmcgZWFybHkuCi0gICAgbV9maWxlRGVzY3JpcHRvciA9IG9wZW4oZGV2aWNl
RmlsZS51dGY4KCkuZGF0YSgpLCBPX1JET05MWSB8IE9fTk9OQkxPQ0spOwotICAgIGlmIChtX2Zp
bGVEZXNjcmlwdG9yID09IC0xKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjaGFyIGRldmljZU5h
bWVbMTAyNF07Ci0gICAgaWYgKGlvY3RsKG1fZmlsZURlc2NyaXB0b3IsIEpTSU9DR05BTUUoc2l6
ZW9mKGRldmljZU5hbWUpKSwgZGV2aWNlTmFtZSkgPCAwKQotICAgICAgICByZXR1cm47Ci0gICAg
bV9kZXZpY2VOYW1lID0gU3RyaW5nKGRldmljZU5hbWUpLnNpbXBsaWZ5V2hpdGVTcGFjZSgpOwot
Ci0gICAgdWludDhfdCBudW1iZXJPZkF4ZXM7Ci0gICAgdWludDhfdCBudW1iZXJPZkJ1dHRvbnM7
Ci0gICAgaWYgKGlvY3RsKG1fZmlsZURlc2NyaXB0b3IsIEpTSU9DR0FYRVMsICZudW1iZXJPZkF4
ZXMpIDwgMCB8fCBpb2N0bChtX2ZpbGVEZXNjcmlwdG9yLCBKU0lPQ0dCVVRUT05TLCAmbnVtYmVy
T2ZCdXR0b25zKSA8IDApCi0gICAgICAgIHJldHVybjsKLSAgICBtX2F4ZXMuZmlsbCgwLjAsIG51
bWJlck9mQXhlcyk7Ci0gICAgbV9idXR0b25zLmZpbGwoMC4wLCBudW1iZXJPZkJ1dHRvbnMpOwot
fQotCi1HYW1lcGFkRGV2aWNlTGludXg6On5HYW1lcGFkRGV2aWNlTGludXgoKQotewotICAgIGlm
IChtX2ZpbGVEZXNjcmlwdG9yICE9IC0xKQotICAgICAgICBjbG9zZShtX2ZpbGVEZXNjcmlwdG9y
KTsKLX0KLQotdm9pZCBHYW1lcGFkRGV2aWNlTGludXg6OnVwZGF0ZUZvckV2ZW50KHN0cnVjdCBq
c19ldmVudCBldmVudCkKLXsKLSAgICBpZiAoIShldmVudC50eXBlICYgSlNfRVZFTlRfQVhJUyB8
fCBldmVudC50eXBlICYgSlNfRVZFTlRfQlVUVE9OKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gTWFyayB0aGUgZGV2aWNlIGFzIGNvbm5lY3RlZCBvbmx5IGlmIGl0IGlzIG5vdCB5ZXQgY29u
bmVjdGVkLCB0aGUgZXZlbnQgaXMgbm90IGFuIGluaXRpYWxpemF0aW9uCi0gICAgLy8gYW5kIHRo
ZSB2YWx1ZSBpcyBub3QgMCAoaW5kaWNhdGluZyBhIGdlbnVpbmUgaW50ZXJhY3Rpb24gd2l0aCB0
aGUgZGV2aWNlKS4KLSAgICBpZiAoIW1fY29ubmVjdGVkICYmICEoZXZlbnQudHlwZSAmIEpTX0VW
RU5UX0lOSVQpICYmIGV2ZW50LnZhbHVlKQotICAgICAgICBtX2Nvbm5lY3RlZCA9IHRydWU7Ci0K
LSAgICBpZiAoZXZlbnQudHlwZSAmIEpTX0VWRU5UX0FYSVMpCi0gICAgICAgIG1fYXhlc1tldmVu
dC5udW1iZXJdID0gbm9ybWFsaXplQXhpc1ZhbHVlKGV2ZW50LnZhbHVlKTsKLSAgICBlbHNlIGlm
IChldmVudC50eXBlICYgSlNfRVZFTlRfQlVUVE9OKQotICAgICAgICBtX2J1dHRvbnNbZXZlbnQu
bnVtYmVyXSA9IG5vcm1hbGl6ZUJ1dHRvblZhbHVlKGV2ZW50LnZhbHVlKTsKLQotICAgIG1fbGFz
dFRpbWVzdGFtcCA9IGV2ZW50LnRpbWU7Ci19Ci0KLWZsb2F0IEdhbWVwYWREZXZpY2VMaW51eDo6
bm9ybWFsaXplQXhpc1ZhbHVlKHNob3J0IHZhbHVlKQotewotICAgIC8vIE5vcm1hbGl6ZSBmcm9t
IHJhbmdlIFstMzI3NjcsIDMyNzY3XSBpbnRvIHJhbmdlIFstMS4wLCAxLjBdCi0gICAgcmV0dXJu
IHZhbHVlIC8gMzI3NjcuMGY7Ci19Ci0KLWZsb2F0IEdhbWVwYWREZXZpY2VMaW51eDo6bm9ybWFs
aXplQnV0dG9uVmFsdWUoc2hvcnQgdmFsdWUpCi17Ci0gICAgLy8gTm9ybWFsaXplIGZyb20gcmFu
Z2UgWzAsIDFdIGludG8gcmFuZ2UgWzAuMCwgMS4wXQotICAgIHJldHVybiB2YWx1ZSAvIDEuMGY7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFE
X0RFUFJFQ0FURUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9saW51eC9H
YW1lcGFkRGV2aWNlTGludXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xpbnV4L0dhbWVw
YWREZXZpY2VMaW51eC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWMwOWIyN2Y1
NGM5ZDlkOWZjMGEyYjQ4M2E0ZTA2YTFiMjZhMjY1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xpbnV4L0dhbWVw
YWREZXZpY2VMaW51eC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBaYW4gRG9iZXJzZWsgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
Ci0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICi0gKiBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBHYW1lcGFkRGV2aWNlTGludXhfaAotI2RlZmluZSBHYW1lcGFkRGV2
aWNlTGludXhfaAotCi0jaWYgRU5BQkxFKEdBTUVQQURfREVQUkVDQVRFRCkKLQotI2luY2x1ZGUg
PGxpbnV4L2pveXN0aWNrLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdhbWVw
YWREZXZpY2VMaW51eCB7Ci1wdWJsaWM6Ci0gICAgYm9vbCBjb25uZWN0ZWQoKSB7IHJldHVybiBt
X2Nvbm5lY3RlZDsgfTsKLQotICAgIFN0cmluZyBpZCgpIHsgcmV0dXJuIG1fZGV2aWNlTmFtZTsg
fQotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lc3RhbXAoKSB7IHJldHVybiBtX2xhc3RUaW1l
c3RhbXA7IH0KLQotICAgIHVuc2lnbmVkIGF4ZXNDb3VudCgpIHsgcmV0dXJuIG1fYXhlcy5zaXpl
KCk7IH0KLSAgICBmbG9hdCogYXhlc0RhdGEoKSB7IHJldHVybiBtX2F4ZXMuZGF0YSgpOyB9Ci0K
LSAgICB1bnNpZ25lZCBidXR0b25zQ291bnQoKSB7IHJldHVybiBtX2J1dHRvbnMuc2l6ZSgpOyB9
Ci0gICAgZmxvYXQqIGJ1dHRvbnNEYXRhKCkgeyByZXR1cm4gbV9idXR0b25zLmRhdGEoKTsgfQot
Ci1wcm90ZWN0ZWQ6Ci0gICAgR2FtZXBhZERldmljZUxpbnV4KFN0cmluZyBkZXZpY2VGaWxlKTsK
LSAgICB+R2FtZXBhZERldmljZUxpbnV4KCk7Ci0KLSAgICB2b2lkIHVwZGF0ZUZvckV2ZW50KHN0
cnVjdCBqc19ldmVudCk7Ci0gICAgaW50IG1fZmlsZURlc2NyaXB0b3I7Ci0KLXByaXZhdGU6Ci0g
ICAgZmxvYXQgbm9ybWFsaXplQXhpc1ZhbHVlKHNob3J0IHZhbHVlKTsKLSAgICBmbG9hdCBub3Jt
YWxpemVCdXR0b25WYWx1ZShzaG9ydCB2YWx1ZSk7Ci0KLSAgICBib29sIG1fY29ubmVjdGVkOwot
ICAgIFN0cmluZyBtX2RldmljZU5hbWU7Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIG1fbGFzdFRp
bWVzdGFtcDsKLQotICAgIFZlY3RvcjxmbG9hdD4gbV9heGVzOwotICAgIFZlY3RvcjxmbG9hdD4g
bV9idXR0b25zOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5B
QkxFKEdBTUVQQURfREVQUkVDQVRFRCkKLQotI2VuZGlmIC8vIEdhbWVwYWREZXZpY2VMaW51eF9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZC5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDc3YzE4ZTNlNjM0YjU5ZWIwYmEwMmUxZWUxOGFkZmQ1ZTVkN2Ri
ZmMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJREdhbWVwYWQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
SElER2FtZXBhZC5oIgotCi0jaWYgRU5BQkxFKEdBTUVQQUQpCi0KLSNpbmNsdWRlIDxJT0tpdC9o
aWQvSU9ISURFbGVtZW50Lmg+Ci0jaW5jbHVkZSA8SU9LaXQvaGlkL0lPSElEVXNhZ2VUYWJsZXMu
aD4KLSNpbmNsdWRlIDxJT0tpdC9oaWQvSU9ISURWYWx1ZS5oPgotI2luY2x1ZGUgPHd0Zi9DdXJy
ZW50VGltZS5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ISURHYW1lcGFkOjpI
SURHYW1lcGFkKElPSElERGV2aWNlUmVmIGhpZERldmljZSwgdW5zaWduZWQgaW5kZXgpCi0gICAg
OiBQbGF0Zm9ybUdhbWVwYWQoaW5kZXgpCi0gICAgLCBtX2hpZERldmljZShoaWREZXZpY2UpCi17
Ci0gICAgbV9jb25uZWN0VGltZSA9IG1fbGFzdFVwZGF0ZVRpbWUgPSBtb25vdG9uaWNhbGx5SW5j
cmVhc2luZ1RpbWUoKTsKLQotICAgIENGTnVtYmVyUmVmIGNmVmVuZG9ySUQgPSAoQ0ZOdW1iZXJS
ZWYpSU9ISUREZXZpY2VHZXRQcm9wZXJ0eShoaWREZXZpY2UsIENGU1RSKGtJT0hJRFZlbmRvcklE
S2V5KSk7Ci0gICAgQ0ZOdW1iZXJSZWYgY2ZQcm9kdWN0SUQgPSAoQ0ZOdW1iZXJSZWYpSU9ISURE
ZXZpY2VHZXRQcm9wZXJ0eShoaWREZXZpY2UsIENGU1RSKGtJT0hJRFByb2R1Y3RJREtleSkpOwot
Ci0gICAgaW50IHZlbmRvcklELCBwcm9kdWN0SUQ7Ci0gICAgQ0ZOdW1iZXJHZXRWYWx1ZShjZlZl
bmRvcklELCBrQ0ZOdW1iZXJJbnRUeXBlLCAmdmVuZG9ySUQpOwotICAgIENGTnVtYmVyR2V0VmFs
dWUoY2ZQcm9kdWN0SUQsIGtDRk51bWJlckludFR5cGUsICZwcm9kdWN0SUQpOwotCi0gICAgQ0ZT
dHJpbmdSZWYgY2ZQcm9kdWN0TmFtZSA9IChDRlN0cmluZ1JlZilJT0hJRERldmljZUdldFByb3Bl
cnR5KGhpZERldmljZSwgQ0ZTVFIoa0lPSElEUHJvZHVjdEtleSkpOwotICAgIFN0cmluZyBwcm9k
dWN0TmFtZShjZlByb2R1Y3ROYW1lKTsKLQotICAgIC8vIEN1cnJlbnRseSB0aGUgc3BlYyBoYXMg
bm8gZm9ybWF0dGluZyBmb3IgdGhlIGlkIHN0cmluZy4KLSAgICAvLyBUaGlzIHN0cmluZyBmb3Jt
YXR0aW5nIG1hdGNoZXMgRmlyZWZveC4KLSAgICBtX2lkID0gU3RyaW5nOjpmb3JtYXQoIiV4LSV4
LSVzIiwgdmVuZG9ySUQsIHByb2R1Y3RJRCwgcHJvZHVjdE5hbWUudXRmOCgpLmRhdGEoKSk7Ci0K
LSAgICBpbml0RWxlbWVudHMoKTsKLX0KLQotdm9pZCBISURHYW1lcGFkOjpnZXRDdXJyZW50VmFs
dWVGb3JFbGVtZW50KGNvbnN0IEhJREdhbWVwYWRFbGVtZW50JiBnYW1lcGFkRWxlbWVudCkKLXsK
LSAgICBJT0hJREVsZW1lbnRSZWYgZWxlbWVudCA9IGdhbWVwYWRFbGVtZW50LmlvaGlkRWxlbWVu
dC5nZXQoKTsKLSAgICBJT0hJRFZhbHVlUmVmIHZhbHVlOwotICAgIGlmIChJT0hJRERldmljZUdl
dFZhbHVlKElPSElERWxlbWVudEdldERldmljZShlbGVtZW50KSwgZWxlbWVudCwgJnZhbHVlKSA9
PSBrSU9SZXR1cm5TdWNjZXNzKQotICAgICAgICB2YWx1ZUNoYW5nZWQodmFsdWUpOwotfQotCi12
b2lkIEhJREdhbWVwYWQ6OmluaXRFbGVtZW50cygpCi17Ci0gICAgUmV0YWluUHRyPENGQXJyYXlS
ZWY+IGVsZW1lbnRzID0gYWRvcHRDRihJT0hJRERldmljZUNvcHlNYXRjaGluZ0VsZW1lbnRzKG1f
aGlkRGV2aWNlLmdldCgpLCBOVUxMLCBrSU9ISURPcHRpb25zVHlwZU5vbmUpKTsKLSAgICBpbml0
RWxlbWVudHNGcm9tQXJyYXkoZWxlbWVudHMuZ2V0KCkpOwotCi0gICAgLy8gQnV0dG9ucyBhcmUg
c3BlY2lmaWVkIHRvIGFwcGVhciBoaWdoZXN0IHByaW9yaXR5IGZpcnN0IGluIHRoZSBhcnJheS4K
LSAgICBzdGQ6OnNvcnQobV9idXR0b25zLmJlZ2luKCksIG1fYnV0dG9ucy5lbmQoKSwgW10oYXV0
byYgYSwgYXV0byYgYikgewotICAgICAgICByZXR1cm4gYS0+cHJpb3JpdHkgPCBiLT5wcmlvcml0
eTsKLSAgICB9KTsKLQotICAgIG1fYXhpc1ZhbHVlcy5yZXNpemUobV9heGVzLnNpemUoKSk7Ci0g
ICAgbV9idXR0b25WYWx1ZXMucmVzaXplKG1fYnV0dG9ucy5zaXplKCkpOwotCi0gICAgZm9yIChh
dXRvJiBidXR0b24gOiBtX2J1dHRvbnMpCi0gICAgICAgIGdldEN1cnJlbnRWYWx1ZUZvckVsZW1l
bnQoKmJ1dHRvbik7Ci0KLSAgICBmb3IgKGF1dG8mIGF4aXMgOiBtX2F4ZXMpCi0gICAgICAgIGdl
dEN1cnJlbnRWYWx1ZUZvckVsZW1lbnQoKmF4aXMpOwotfQotCi12b2lkIEhJREdhbWVwYWQ6Omlu
aXRFbGVtZW50c0Zyb21BcnJheShDRkFycmF5UmVmIGVsZW1lbnRzKQotewotICAgIGZvciAoQ0ZJ
bmRleCBpID0gMCwgY291bnQgPSBDRkFycmF5R2V0Q291bnQoZWxlbWVudHMpOyBpIDwgY291bnQ7
ICsraSkgewotICAgICAgICBJT0hJREVsZW1lbnRSZWYgZWxlbWVudCA9IChJT0hJREVsZW1lbnRS
ZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChlbGVtZW50cywgaSk7Ci0gICAgICAgIGlmIChDRkdl
dFR5cGVJRChlbGVtZW50KSAhPSBJT0hJREVsZW1lbnRHZXRUeXBlSUQoKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIC8vIEFzIGEgcGh5c2ljYWwgZWxlbWVudCBjYW4gYXBwZWFy
IGluIHRoZSBkZXZpY2UgdHdpY2UgKGluIGRpZmZlcmVudCBjb2xsZWN0aW9ucykgYW5kIGNhbiBi
ZQotICAgICAgICAvLyByZXByZXNlbnRlZCBieSBkaWZmZXJlbnQgSU9ISURFbGVtZW50UmVmIG9i
amVjdHMsIHdlIGxvb2sgYXQgdGhlIElPSElERWxlbWVudENvb2tpZSB3aGljaAotICAgICAgICAv
LyBpcyBtZWFudCB0byBiZSB1bmlxdWUgZm9yIGVhY2ggcGh5c2ljYWwgZWxlbWVudC4KLSAgICAg
ICAgSU9ISURFbGVtZW50Q29va2llIGNvb2tpZSA9IElPSElERWxlbWVudEdldENvb2tpZShlbGVt
ZW50KTsKLSAgICAgICAgaWYgKG1fZWxlbWVudE1hcC5jb250YWlucyhjb29raWUpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgSU9ISURFbGVtZW50VHlwZSB0eXBlID0gSU9ISURF
bGVtZW50R2V0VHlwZShlbGVtZW50KTsKLQotICAgICAgICBpZiAoKHR5cGUgPT0ga0lPSElERWxl
bWVudFR5cGVJbnB1dF9NaXNjIHx8IHR5cGUgPT0ga0lPSElERWxlbWVudFR5cGVJbnB1dF9CdXR0
b24pICYmIG1heWJlQWRkQnV0dG9uKGVsZW1lbnQpKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgaWYgKCh0eXBlID09IGtJT0hJREVsZW1lbnRUeXBlSW5wdXRfTWlzYyB8fCB0eXBl
ID09IGtJT0hJREVsZW1lbnRUeXBlSW5wdXRfQXhpcykgJiYgbWF5YmVBZGRBeGlzKGVsZW1lbnQp
KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKHR5cGUgPT0ga0lPSElERWxl
bWVudFR5cGVDb2xsZWN0aW9uKQotICAgICAgICAgICAgaW5pdEVsZW1lbnRzRnJvbUFycmF5KElP
SElERWxlbWVudEdldENoaWxkcmVuKGVsZW1lbnQpKTsKLSAgICB9Ci19Ci0KLWJvb2wgSElER2Ft
ZXBhZDo6bWF5YmVBZGRCdXR0b24oSU9ISURFbGVtZW50UmVmIGVsZW1lbnQpCi17Ci0gICAgdWlu
dDMyX3QgdXNhZ2VQYWdlID0gSU9ISURFbGVtZW50R2V0VXNhZ2VQYWdlKGVsZW1lbnQpOwotICAg
IGlmICh1c2FnZVBhZ2UgIT0ga0hJRFBhZ2VfQnV0dG9uKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICB1aW50MzJfdCB1c2FnZSA9IElPSElERWxlbWVudEdldFVzYWdlKGVsZW1lbnQpOwot
ICAgIGlmICghdXNhZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENGSW5kZXggbWlu
ID0gSU9ISURFbGVtZW50R2V0TG9naWNhbE1pbihlbGVtZW50KTsKLSAgICBDRkluZGV4IG1heCA9
IElPSElERWxlbWVudEdldExvZ2ljYWxNYXgoZWxlbWVudCk7Ci0KLSAgICBtX2J1dHRvbnMuYXBw
ZW5kKHN0ZDo6bWFrZV91bmlxdWU8SElER2FtZXBhZEJ1dHRvbj4odXNhZ2UsIG1pbiwgbWF4LCBl
bGVtZW50KSk7Ci0KLSAgICBJT0hJREVsZW1lbnRDb29raWUgY29va2llID0gSU9ISURFbGVtZW50
R2V0Q29va2llKGVsZW1lbnQpOwotICAgIG1fZWxlbWVudE1hcC5zZXQoY29va2llLCBtX2J1dHRv
bnMubGFzdCgpLmdldCgpKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEhJREdhbWVw
YWQ6Om1heWJlQWRkQXhpcyhJT0hJREVsZW1lbnRSZWYgZWxlbWVudCkKLXsKLSAgICB1aW50MzJf
dCB1c2FnZVBhZ2UgPSBJT0hJREVsZW1lbnRHZXRVc2FnZVBhZ2UoZWxlbWVudCk7Ci0gICAgaWYg
KHVzYWdlUGFnZSAhPSBrSElEUGFnZV9HZW5lcmljRGVza3RvcCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgdWludDMyX3QgdXNhZ2UgPSBJT0hJREVsZW1lbnRHZXRVc2FnZShlbGVtZW50
KTsKLSAgICAvLyBUaGlzIHJhbmdlIGNvdmVycyB0aGUgc3RhbmRhcmQgYXhpcyB1c2FnZXMuCi0g
ICAgaWYgKHVzYWdlIDwga0hJRFVzYWdlX0dEX1ggfHwgdXNhZ2UgPiBrSElEVXNhZ2VfR0RfUnop
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIENGSW5kZXggbWluID0gSU9ISURFbGVtZW50
R2V0UGh5c2ljYWxNaW4oZWxlbWVudCk7Ci0gICAgQ0ZJbmRleCBtYXggPSBJT0hJREVsZW1lbnRH
ZXRQaHlzaWNhbE1heChlbGVtZW50KTsKLQotICAgIG1fYXhlcy5hcHBlbmQoc3RkOjptYWtlX3Vu
aXF1ZTxISURHYW1lcGFkQXhpcz4obWluLCBtYXgsIGVsZW1lbnQpKTsKLQotICAgIElPSElERWxl
bWVudENvb2tpZSBjb29raWUgPSBJT0hJREVsZW1lbnRHZXRDb29raWUoZWxlbWVudCk7Ci0gICAg
bV9lbGVtZW50TWFwLnNldChjb29raWUsIG1fYXhlcy5sYXN0KCkuZ2V0KCkpOwotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgSElER2FtZXBhZDo6dmFsdWVDaGFuZ2VkKElPSElEVmFsdWVS
ZWYgdmFsdWUpCi17Ci0gICAgSU9ISURFbGVtZW50Q29va2llIGNvb2tpZSA9IElPSElERWxlbWVu
dEdldENvb2tpZShJT0hJRFZhbHVlR2V0RWxlbWVudCh2YWx1ZSkpOwotICAgIEhJREdhbWVwYWRF
bGVtZW50KiBlbGVtZW50ID0gbV9lbGVtZW50TWFwLmdldChjb29raWUpOwotCi0gICAgLy8gVGhp
cyBtaWdodCBiZSBhbiBlbGVtZW50IHdlIGRvbid0IGN1cnJlbnRseSBoYW5kbGUgYXMgaW5wdXQg
c28gd2UgY2FuIHNraXAgaXQuCi0gICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBlbGVtZW50LT5yYXdWYWx1ZSA9IElPSElEVmFsdWVHZXRTY2FsZWRWYWx1ZSh2YWx1ZSwg
a0lPSElEVmFsdWVTY2FsZVR5cGVQaHlzaWNhbCk7Ci0KLSAgICBpZiAoZWxlbWVudC0+aXNCdXR0
b24oKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9idXR0b25zLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAobV9idXR0b25zW2ldLmdldCgpID09IGVsZW1lbnQp
Ci0gICAgICAgICAgICAgICAgbV9idXR0b25WYWx1ZXNbaV0gPSBlbGVtZW50LT5ub3JtYWxpemVk
VmFsdWUoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aXNBeGlzKCkpIHsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXhlcy5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgaWYgKG1fYXhlc1tpXS5nZXQoKSA9PSBlbGVtZW50KQotICAgICAgICAgICAg
ICAgIG1fYXhpc1ZhbHVlc1tpXSA9IGVsZW1lbnQtPm5vcm1hbGl6ZWRWYWx1ZSgpOwotICAgICAg
ICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgbV9s
YXN0VXBkYXRlVGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9ISURHYW1lcGFkLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxNDM5NDc4ODg4MWE0YjA0NGI2YThmN2U3YzJmMGE4YWE3MTQwZWRhLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9ISURHYW1lcGFkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgSElER2FtZXBhZF9oCi0jZGVmaW5lIEhJREdhbWVwYWRfaAotCi0j
aWYgRU5BQkxFKEdBTUVQQUQpCi0KLSNpbmNsdWRlICJQbGF0Zm9ybUdhbWVwYWQuaCIKLSNpbmNs
dWRlIDxJT0tpdC9oaWQvSU9ISUREZXZpY2UuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgot
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1
Y3QgSElER2FtZXBhZEVsZW1lbnQgewotICAgIEhJREdhbWVwYWRFbGVtZW50KGRvdWJsZSB0aGVN
aW4sIGRvdWJsZSB0aGVNYXgsIElPSElERWxlbWVudFJlZiBlbGVtZW50KQotICAgICAgICA6IG1p
bih0aGVNaW4pCi0gICAgICAgICwgbWF4KHRoZU1heCkKLSAgICAgICAgLCByYXdWYWx1ZSh0aGVN
aW4pCi0gICAgICAgICwgaW9oaWRFbGVtZW50KGVsZW1lbnQpCi0gICAgewotICAgIH0KLSAgICAK
LSAgICB2aXJ0dWFsIH5ISURHYW1lcGFkRWxlbWVudCgpCi0gICAgewotICAgIH0KLQotICAgIGRv
dWJsZSBtaW47Ci0gICAgZG91YmxlIG1heDsKLSAgICBkb3VibGUgcmF3VmFsdWU7Ci0gICAgUmV0
YWluUHRyPElPSElERWxlbWVudFJlZj4gaW9oaWRFbGVtZW50OwotCi0gICAgdmlydHVhbCBib29s
IGlzQnV0dG9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNB
eGlzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZpcnR1YWwgZG91YmxlIG5vcm1h
bGl6ZWRWYWx1ZSgpID0gMDsKLX07Ci0KLXN0cnVjdCBISURHYW1lcGFkQnV0dG9uIDogSElER2Ft
ZXBhZEVsZW1lbnQgewotICAgIEhJREdhbWVwYWRCdXR0b24odWludDMyX3QgdGhlUHJpb3JpdHks
IGRvdWJsZSBtaW4sIGRvdWJsZSBtYXgsIElPSElERWxlbWVudFJlZiBlbGVtZW50KQotICAgICAg
ICA6IEhJREdhbWVwYWRFbGVtZW50KG1pbiwgbWF4LCBlbGVtZW50KQotICAgICAgICAsIHByaW9y
aXR5KHRoZVByaW9yaXR5KQotICAgIHsKLSAgICB9Ci0KLSAgICB1aW50MzJfdCBwcmlvcml0eTsK
LQotICAgIGJvb2wgaXNCdXR0b24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0K
LSAgICAvLyBCdXR0b25zIG5vcm1hbGl6ZSB0byB0aGUgcmFuZ2UgKDAuMCkgLSAoMS4wKQotICAg
IGRvdWJsZSBub3JtYWxpemVkVmFsdWUoKSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJu
IChyYXdWYWx1ZSAtIG1pbikgLyAobWF4IC0gbWluKTsKLSAgICB9Ci19OwotCi1zdHJ1Y3QgSElE
R2FtZXBhZEF4aXMgOiBISURHYW1lcGFkRWxlbWVudCB7Ci0gICAgSElER2FtZXBhZEF4aXMoZG91
YmxlIG1pbiwgZG91YmxlIG1heCwgSU9ISURFbGVtZW50UmVmIGVsZW1lbnQpCi0gICAgICAgIDog
SElER2FtZXBhZEVsZW1lbnQobWluLCBtYXgsIGVsZW1lbnQpCi0gICAgewotICAgIH0KLQotICAg
IGJvb2wgaXNBeGlzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgLy8g
QXhlcyBub3JtYWxpemUgdG8gdGhlIHJhbmdlICgtMS4wKSAtICgxLjApCi0gICAgZG91YmxlIG5v
cm1hbGl6ZWRWYWx1ZSgpIG92ZXJyaWRlCi0gICAgewotICAgICAgICByZXR1cm4gKCgocmF3VmFs
dWUgLSBtaW4pIC8gKG1heCAtIG1pbikpICogMikgLSAxOwotICAgIH0KLX07Ci0KLWNsYXNzIEhJ
REdhbWVwYWQgOiBwdWJsaWMgUGxhdGZvcm1HYW1lcGFkIHsKLXB1YmxpYzoKLSAgICBISURHYW1l
cGFkKElPSElERGV2aWNlUmVmLCB1bnNpZ25lZCBpbmRleCk7Ci0KLSAgICBJT0hJRERldmljZVJl
ZiBoaWREZXZpY2UoKSBjb25zdCB7IHJldHVybiBtX2hpZERldmljZS5nZXQoKTsgfQotCi0gICAg
dm9pZCB2YWx1ZUNoYW5nZWQoSU9ISURWYWx1ZVJlZik7Ci0KLSAgICBjb25zdCBWZWN0b3I8ZG91
YmxlPiYgYXhpc1ZhbHVlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYXhpc1ZhbHVlczsgfQot
ICAgIGNvbnN0IFZlY3Rvcjxkb3VibGU+JiBidXR0b25WYWx1ZXMoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2J1dHRvblZhbHVlczsgfQotCi1wcml2YXRlOgotICAgIHZvaWQgaW5pdEVsZW1lbnRz
KCk7Ci0gICAgdm9pZCBpbml0RWxlbWVudHNGcm9tQXJyYXkoQ0ZBcnJheVJlZik7Ci0KLSAgICBi
b29sIG1heWJlQWRkQnV0dG9uKElPSElERWxlbWVudFJlZik7Ci0gICAgYm9vbCBtYXliZUFkZEF4
aXMoSU9ISURFbGVtZW50UmVmKTsKLQotICAgIHZvaWQgZ2V0Q3VycmVudFZhbHVlRm9yRWxlbWVu
dChjb25zdCBISURHYW1lcGFkRWxlbWVudCYpOwotCi0gICAgUmV0YWluUHRyPElPSElERGV2aWNl
UmVmPiBtX2hpZERldmljZTsKLQotICAgIEhhc2hNYXA8SU9ISURFbGVtZW50Q29va2llLCBISURH
YW1lcGFkRWxlbWVudCo+IG1fZWxlbWVudE1hcDsKLQotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8SElER2FtZXBhZEJ1dHRvbj4+IG1fYnV0dG9uczsKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPEhJREdhbWVwYWRBeGlzPj4gbV9heGVzOwotICAgIFZlY3Rvcjxkb3VibGU+IG1fYnV0dG9u
VmFsdWVzOwotICAgIFZlY3Rvcjxkb3VibGU+IG1fYXhpc1ZhbHVlczsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEKQotI2VuZGlmIC8vIEhJ
REdhbWVwYWRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJREdh
bWVwYWRQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBh
ZFByb3ZpZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY0NDFlNmZhYmY2
YjdiMDlhNzY0YjY2MjNiYjJjNDM0ODZhMGNkNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBh
ZFByb3ZpZGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI1NCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkhJREdhbWVwYWRQcm92aWRlci5oIgot
Ci0jaWYgRU5BQkxFKEdBTUVQQUQpCi0KLSNpbmNsdWRlICJHYW1lcGFkUHJvdmlkZXJDbGllbnQu
aCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1HYW1lcGFkLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGNvbnN0IGRvdWJsZSBDb25uZWN0aW9uRGVs
YXlJbnRlcnZhbCA9IDAuNTsKLXN0YXRpYyBjb25zdCBkb3VibGUgSW5wdXROb3RpZmljYXRpb25E
ZWxheSA9IDAuMDU7Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBkZXZpY2VN
YXRjaGluZ0RpY3Rpb25hcnkodWludDMyX3QgdXNhZ2VQYWdlLCB1aW50MzJfdCB1c2FnZSkKLXsK
LSAgICBBU1NFUlQodXNhZ2VQYWdlKTsKLSAgICBBU1NFUlQodXNhZ2UpOwotCi0gICAgUmV0YWlu
UHRyPENGTnVtYmVyUmVmPiBwYWdlTnVtYmVyID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmdXNhZ2VQYWdlKSk7Ci0gICAgUmV0
YWluUHRyPENGTnVtYmVyUmVmPiB1c2FnZU51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnVzYWdlKSk7Ci0KLSAgICBD
RlN0cmluZ1JlZiBrZXlzW10gPSB7IENGU1RSKGtJT0hJRERldmljZVVzYWdlUGFnZUtleSksIENG
U1RSKGtJT0hJRERldmljZVVzYWdlS2V5KSB9OwotICAgIENGTnVtYmVyUmVmIHZhbHVlc1tdID0g
eyBwYWdlTnVtYmVyLmdldCgpLCB1c2FnZU51bWJlci5nZXQoKSB9OwotCi0gICAgcmV0dXJuIGFk
b3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIChjb25zdCB2b2lk
Kiopa2V5cywgKGNvbnN0IHZvaWQqKil2YWx1ZXMsIDIsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNh
bGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLX0KLQotc3RhdGlj
IHZvaWQgZGV2aWNlQWRkZWRDYWxsYmFjayh2b2lkKiBjb250ZXh0LCBJT1JldHVybiwgdm9pZCos
IElPSElERGV2aWNlUmVmIGRldmljZSkKLXsKLSAgICBISURHYW1lcGFkUHJvdmlkZXIqIGxpc3Rl
bmVyID0gc3RhdGljX2Nhc3Q8SElER2FtZXBhZFByb3ZpZGVyKj4oY29udGV4dCk7Ci0gICAgbGlz
dGVuZXItPmRldmljZUFkZGVkKGRldmljZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRldmljZVJlbW92
ZWRDYWxsYmFjayh2b2lkKiBjb250ZXh0LCBJT1JldHVybiwgdm9pZCosIElPSElERGV2aWNlUmVm
IGRldmljZSkKLXsKLSAgICBISURHYW1lcGFkUHJvdmlkZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nh
c3Q8SElER2FtZXBhZFByb3ZpZGVyKj4oY29udGV4dCk7Ci0gICAgbGlzdGVuZXItPmRldmljZVJl
bW92ZWQoZGV2aWNlKTsKLX0KLQotc3RhdGljIHZvaWQgZGV2aWNlVmFsdWVzQ2hhbmdlZENhbGxi
YWNrKHZvaWQqIGNvbnRleHQsIElPUmV0dXJuIHJlc3VsdCwgdm9pZCosIElPSElEVmFsdWVSZWYg
dmFsdWUpCi17Ci0gICAgLy8gQSBub24temVybyByZXN1bHQgdmFsdWUgaW5kaWNhdGVzIGFuIGVy
cm9yIHRoYXQgd2UgY2FuIGRvIG5vdGhpbmcgYWJvdXQgZm9yIGlucHV0IHZhbHVlcy4KLSAgICBp
ZiAocmVzdWx0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBISURHYW1lcGFkUHJvdmlkZXIqIGxp
c3RlbmVyID0gc3RhdGljX2Nhc3Q8SElER2FtZXBhZFByb3ZpZGVyKj4oY29udGV4dCk7Ci0gICAg
bGlzdGVuZXItPnZhbHVlc0NoYW5nZWQodmFsdWUpOwotfQotCi1ISURHYW1lcGFkUHJvdmlkZXIm
IEhJREdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8SElER2FtZXBhZFByb3ZpZGVyPiBzaGFyZWRMaXN0ZW5lcjsKLSAgICByZXR1cm4gc2hh
cmVkTGlzdGVuZXI7Ci19Ci0KLUhJREdhbWVwYWRQcm92aWRlcjo6SElER2FtZXBhZFByb3ZpZGVy
KCkKLSAgICA6IG1fc2hvdWxkRGlzcGF0Y2hDYWxsYmFja3MoZmFsc2UpCi0gICAgLCBtX2Nvbm5l
Y3Rpb25EZWxheVRpbWVyKCp0aGlzLCAmSElER2FtZXBhZFByb3ZpZGVyOjpjb25uZWN0aW9uRGVs
YXlUaW1lckZpcmVkKQotICAgICwgbV9pbnB1dE5vdGlmaWNhdGlvblRpbWVyKCp0aGlzLCAmSElE
R2FtZXBhZFByb3ZpZGVyOjppbnB1dE5vdGlmaWNhdGlvblRpbWVyRmlyZWQpCi17Ci0gICAgbV9t
YW5hZ2VyID0gYWRvcHRDRihJT0hJRE1hbmFnZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
a0lPSElET3B0aW9uc1R5cGVOb25lKSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiBqb3lzdGlja0RpY3Rpb25hcnkgPSBkZXZpY2VNYXRjaGluZ0RpY3Rpb25hcnkoa0hJRFBhZ2Vf
R2VuZXJpY0Rlc2t0b3AsIGtISURVc2FnZV9HRF9Kb3lzdGljayk7Ci0gICAgUmV0YWluUHRyPENG
RGljdGlvbmFyeVJlZj4gZ2FtZXBhZERpY3Rpb25hcnkgPSBkZXZpY2VNYXRjaGluZ0RpY3Rpb25h
cnkoa0hJRFBhZ2VfR2VuZXJpY0Rlc2t0b3AsIGtISURVc2FnZV9HRF9HYW1lUGFkKTsKLQotICAg
IENGRGljdGlvbmFyeVJlZiBkZXZpY2VzW10gPSB7IGpveXN0aWNrRGljdGlvbmFyeS5nZXQoKSwg
Z2FtZXBhZERpY3Rpb25hcnkuZ2V0KCkgfTsKLQotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBt
YXRjaGluZ0FycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQs
IChjb25zdCB2b2lkKiopZGV2aWNlcywgMiwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwotCi0g
ICAgSU9ISURNYW5hZ2VyU2V0RGV2aWNlTWF0Y2hpbmdNdWx0aXBsZShtX21hbmFnZXIuZ2V0KCks
IG1hdGNoaW5nQXJyYXkuZ2V0KCkpOwotICAgIElPSElETWFuYWdlclJlZ2lzdGVyRGV2aWNlTWF0
Y2hpbmdDYWxsYmFjayhtX21hbmFnZXIuZ2V0KCksIGRldmljZUFkZGVkQ2FsbGJhY2ssIHRoaXMp
OwotICAgIElPSElETWFuYWdlclJlZ2lzdGVyRGV2aWNlUmVtb3ZhbENhbGxiYWNrKG1fbWFuYWdl
ci5nZXQoKSwgZGV2aWNlUmVtb3ZlZENhbGxiYWNrLCB0aGlzKTsKLSAgICBJT0hJRE1hbmFnZXJS
ZWdpc3RlcklucHV0VmFsdWVDYWxsYmFjayhtX21hbmFnZXIuZ2V0KCksIGRldmljZVZhbHVlc0No
YW5nZWRDYWxsYmFjaywgdGhpcyk7Ci19Ci0KLXVuc2lnbmVkIEhJREdhbWVwYWRQcm92aWRlcjo6
aW5kZXhGb3JOZXdseUNvbm5lY3RlZERldmljZSgpCi17Ci0gICAgdW5zaWduZWQgaW5kZXggPSAw
OwotICAgIHdoaWxlIChpbmRleCA8IG1fZ2FtZXBhZFZlY3Rvci5zaXplKCkgJiYgbV9nYW1lcGFk
VmVjdG9yW2luZGV4XSkKLSAgICAgICAgKytpbmRleDsKLQotICAgIHJldHVybiBpbmRleDsKLX0K
LQotdm9pZCBISURHYW1lcGFkUHJvdmlkZXI6OmNvbm5lY3Rpb25EZWxheVRpbWVyRmlyZWQoKQot
ewotICAgIG1fc2hvdWxkRGlzcGF0Y2hDYWxsYmFja3MgPSB0cnVlOwotfQotCi12b2lkIEhJREdh
bWVwYWRQcm92aWRlcjo6b3BlbkFuZFNjaGVkdWxlTWFuYWdlcigpCi17Ci0gICAgTE9HKEdhbWVw
YWQsICJISURHYW1lcGFkUHJvdmlkZXIgb3BlbmluZy9zY2hlZHVsaW5nIEhJRCBtYW5hZ2VyIik7
Ci0KLSAgICBBU1NFUlQobV9nYW1lcGFkVmVjdG9yLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1f
Z2FtZXBhZE1hcC5pc0VtcHR5KCkpOwotCi0gICAgbV9zaG91bGREaXNwYXRjaENhbGxiYWNrcyA9
IGZhbHNlOwotCi0gICAgSU9ISURNYW5hZ2VyU2NoZWR1bGVXaXRoUnVuTG9vcChtX21hbmFnZXIu
Z2V0KCksIENGUnVuTG9vcEdldEN1cnJlbnQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLSAg
ICBJT0hJRE1hbmFnZXJPcGVuKG1fbWFuYWdlci5nZXQoKSwga0lPSElET3B0aW9uc1R5cGVOb25l
KTsKLQotICAgIC8vIEFueSBjb25uZWN0aW9ucyB3ZSBhcmUgbm90aWZpZWQgb2Ygd2l0aGluIHRo
ZSBDb25uZWN0aW9uRGVsYXlJbnRlcnZhbCBvZiBsaXN0ZW5pbmcgbGlrZWx5IHJlcHJlc2VudAot
ICAgIC8vIGRldmljZXMgdGhhdCB3ZXJlIGFscmVhZHkgY29ubmVjdGVkLCBzbyB3ZSBzdXBwcmVz
cyBub3RpZnlpbmcgY2xpZW50cyBvZiB0aGVzZS4KLSAgICBtX2Nvbm5lY3Rpb25EZWxheVRpbWVy
LnN0YXJ0T25lU2hvdChDb25uZWN0aW9uRGVsYXlJbnRlcnZhbCk7Ci19Ci0KLXZvaWQgSElER2Ft
ZXBhZFByb3ZpZGVyOjpjbG9zZUFuZFVuc2NoZWR1bGVNYW5hZ2VyKCkKLXsKLSAgICBMT0coR2Ft
ZXBhZCwgIkhJREdhbWVwYWRQcm92aWRlciBjbG9zaW5nL3Vuc2NoZWR1bGluZyBISUQgbWFuYWdl
ciIpOwotCi0gICAgSU9ISURNYW5hZ2VyVW5zY2hlZHVsZUZyb21SdW5Mb29wKG1fbWFuYWdlci5n
ZXQoKSwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwotICAg
IElPSElETWFuYWdlckNsb3NlKG1fbWFuYWdlci5nZXQoKSwga0lPSElET3B0aW9uc1R5cGVOb25l
KTsKLQotICAgIG1fZ2FtZXBhZFZlY3Rvci5jbGVhcigpOwotICAgIG1fZ2FtZXBhZE1hcC5jbGVh
cigpOwotCi0gICAgbV9jb25uZWN0aW9uRGVsYXlUaW1lci5zdG9wKCk7Ci19Ci0KLXZvaWQgSElE
R2FtZXBhZFByb3ZpZGVyOjpzdGFydE1vbml0b3JpbmdHYW1lcGFkcyhHYW1lcGFkUHJvdmlkZXJD
bGllbnQqIGNsaWVudCkKLXsKLSAgICBib29sIHNob3VsZE9wZW5BbmRTY2hlZHVsZU1hbmFnZXIg
PSBtX2NsaWVudHMuaXNFbXB0eSgpOwotCi0gICAgQVNTRVJUKCFtX2NsaWVudHMuY29udGFpbnMo
Y2xpZW50KSk7Ci0gICAgbV9jbGllbnRzLmFkZChjbGllbnQpOwotCi0gICAgaWYgKHNob3VsZE9w
ZW5BbmRTY2hlZHVsZU1hbmFnZXIpCi0gICAgICAgIG9wZW5BbmRTY2hlZHVsZU1hbmFnZXIoKTsK
LX0KLXZvaWQgSElER2FtZXBhZFByb3ZpZGVyOjpzdG9wTW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVw
YWRQcm92aWRlckNsaWVudCogY2xpZW50KQotewotICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFp
bnMoY2xpZW50KSk7Ci0KLSAgICBib29sIHNob3VsZENsb3NlQW5kVW5zY2hlZHVsZU1hbmFnZXIg
PSBtX2NsaWVudHMucmVtb3ZlKGNsaWVudCkgJiYgbV9jbGllbnRzLmlzRW1wdHkoKTsKLQotICAg
IGlmIChzaG91bGRDbG9zZUFuZFVuc2NoZWR1bGVNYW5hZ2VyKQotICAgICAgICBjbG9zZUFuZFVu
c2NoZWR1bGVNYW5hZ2VyKCk7Ci19Ci0KLXZvaWQgSElER2FtZXBhZFByb3ZpZGVyOjpkZXZpY2VB
ZGRlZChJT0hJRERldmljZVJlZiBkZXZpY2UpCi17Ci0gICAgQVNTRVJUKCFtX2dhbWVwYWRNYXAu
Z2V0KGRldmljZSkpOwotCi0gICAgTE9HKEdhbWVwYWQsICJISURHYW1lcGFkUHJvdmlkZXIgZGV2
aWNlICVwIGFkZGVkIiwgZGV2aWNlKTsKLQotICAgIHVuc2lnbmVkIGluZGV4ID0gaW5kZXhGb3JO
ZXdseUNvbm5lY3RlZERldmljZSgpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxISURHYW1lcGFkPiBn
YW1lcGFkID0gc3RkOjptYWtlX3VuaXF1ZTxISURHYW1lcGFkPihkZXZpY2UsIGluZGV4KTsKLQot
ICAgIGlmIChtX2dhbWVwYWRWZWN0b3Iuc2l6ZSgpIDw9IGluZGV4KQotICAgICAgICBtX2dhbWVw
YWRWZWN0b3IucmVzaXplKGluZGV4ICsgMSk7Ci0KLSAgICBtX2dhbWVwYWRWZWN0b3JbaW5kZXhd
ID0gZ2FtZXBhZC5nZXQoKTsKLSAgICBtX2dhbWVwYWRNYXAuc2V0KGRldmljZSwgV1RGTW92ZShn
YW1lcGFkKSk7Ci0KLSAgICBpZiAoIW1fc2hvdWxkRGlzcGF0Y2hDYWxsYmFja3MpIHsKLSAgICAg
ICAgLy8gVGhpcyBhZGRlZCBkZXZpY2UgaXMgdGhlIHJlc3VsdCBvZiB1cyBzdGFydGluZyB0byBt
b25pdG9yIGdhbWVwYWRzLgotICAgICAgICAvLyBXZSdsbCBnZXQgbm90aWZpZWQgb2YgYWxsIGNv
bm5lY3RlZCBkZXZpY2VzIGR1cmluZyB0aGlzIGN1cnJlbnQgc3BpbiBvZiB0aGUgcnVubG9vcAot
ICAgICAgICAvLyBhbmQgd2UgZG9uJ3Qgd2FudCB0byB0ZWxsIHRoZSBjbGllbnQgYWJvdXQgYW55
IG9mIHRoZW0uCi0gICAgICAgIC8vIFRoZSBtX2Nvbm5lY3Rpb25EZWxheVRpbWVyIGZpcmVzIGlu
IGEgc3Vic2VxdWVudCBzcGluIG9mIHRoZSBydW5sb29wIGFmdGVyIHdoaWNoCi0gICAgICAgIC8v
IGFueSBjb25uZWN0aW9uIGV2ZW50cyBhcmUgYWN0dWFsIG5ldyBkZXZpY2VzLgotICAgICAgICBt
X2Nvbm5lY3Rpb25EZWxheVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLQotICAgICAgICBMT0coR2Ft
ZXBhZCwgIkRldmljZSAlcCB3YXMgYWRkZWQgd2hpbGUgc3VwcHJlc3NpbmcgY2FsbGJhY2tzLCBz
byB0aGlzIHNob3VsZCBiZSBhbiAnYWxyZWFkeSBjb25uZWN0ZWQnIGV2ZW50IiwgZGV2aWNlKTsK
LQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2Ns
aWVudHMpCi0gICAgICAgIGNsaWVudC0+cGxhdGZvcm1HYW1lcGFkQ29ubmVjdGVkKCptX2dhbWVw
YWRWZWN0b3JbaW5kZXhdKTsKLX0KLQotdm9pZCBISURHYW1lcGFkUHJvdmlkZXI6OmRldmljZVJl
bW92ZWQoSU9ISUREZXZpY2VSZWYgZGV2aWNlKQotewotICAgIExPRyhHYW1lcGFkLCAiSElER2Ft
ZXBhZFByb3ZpZGVyIGRldmljZSAlcCByZW1vdmVkIiwgZGV2aWNlKTsKLQotICAgIHN0ZDo6dW5p
cXVlX3B0cjxISURHYW1lcGFkPiByZW1vdmVkR2FtZXBhZCA9IHJlbW92ZUdhbWVwYWRGb3JEZXZp
Y2UoZGV2aWNlKTsKLSAgICBBU1NFUlQocmVtb3ZlZEdhbWVwYWQpOwotCi0gICAgLy8gQW55IHRp
bWUgd2UgZ2V0IGEgZGV2aWNlIHJlbW92ZWQgY2FsbGJhY2sgd2Uga25vdyBpdCdzIGEgcmVhbCBl
dmVudCBhbmQgbm90IGFuICdhbHJlYWR5IGNvbm5lY3RlZCcgZXZlbnQuCi0gICAgLy8gV2Ugc2hv
dWxkIGFsd2F5cyBzdG9wIHN1cHByZXNzaW5nIGNhbGxiYWNrcyB3aGVuIHdlIHJlY2VpdmUgc3Vj
aCBhbiBldmVudC4KLSAgICBtX3Nob3VsZERpc3BhdGNoQ2FsbGJhY2tzID0gdHJ1ZTsKLQotICAg
IGZvciAoYXV0byYgY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPnBsYXRmb3Jt
R2FtZXBhZERpc2Nvbm5lY3RlZCgqcmVtb3ZlZEdhbWVwYWQpOwotfQotCi12b2lkIEhJREdhbWVw
YWRQcm92aWRlcjo6dmFsdWVzQ2hhbmdlZChJT0hJRFZhbHVlUmVmIHZhbHVlKQotewotICAgIElP
SElERGV2aWNlUmVmIGRldmljZSA9IElPSElERWxlbWVudEdldERldmljZShJT0hJRFZhbHVlR2V0
RWxlbWVudCh2YWx1ZSkpOwotCi0gICAgSElER2FtZXBhZCogZ2FtZXBhZCA9IG1fZ2FtZXBhZE1h
cC5nZXQoZGV2aWNlKTsKLQotICAgIC8vIFdoZW4gc3RhcnRpbmcgbW9uaXRvcmluZyB3ZSBtaWdo
dCBnZXQgYSB2YWx1ZSBjaGFuZ2VkIGNhbGxiYWNrIGJlZm9yZSB3ZSBldmVuIGtub3cgdGhlIGRl
dmljZSBpcyBjb25uZWN0ZWQuCi0gICAgaWYgKCFnYW1lcGFkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBnYW1lcGFkLT52YWx1ZUNoYW5nZWQodmFsdWUpOwotCi0gICAgLy8gVGhpcyBpc0FjdGl2
ZSBjaGVjayBpcyBuZWNlc3NhcnkgYXMgd2Ugd2FudCB0byBkZWxheSBpbnB1dCBub3RpZmljYXRp
b25zIGZyb20gdGhlIHRpbWUgb2YgdGhlIGZpcnN0IGlucHV0LAotICAgIC8vIGFuZCBub3QgcHVz
aCB0aGUgbm90aWZpY2F0aW9uIG91dCBvbiBldmVyeSBzdWJzZXF1ZW50IGlucHV0LgotICAgIGlm
ICghbV9pbnB1dE5vdGlmaWNhdGlvblRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1faW5wdXRO
b3RpZmljYXRpb25UaW1lci5zdGFydE9uZVNob3QoSW5wdXROb3RpZmljYXRpb25EZWxheSk7Ci19
Ci0KLXZvaWQgSElER2FtZXBhZFByb3ZpZGVyOjppbnB1dE5vdGlmaWNhdGlvblRpbWVyRmlyZWQo
KQotewotICAgIGlmICghbV9zaG91bGREaXNwYXRjaENhbGxiYWNrcykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+
cGxhdGZvcm1HYW1lcGFkSW5wdXRBY3Rpdml0eSgpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SElE
R2FtZXBhZD4gSElER2FtZXBhZFByb3ZpZGVyOjpyZW1vdmVHYW1lcGFkRm9yRGV2aWNlKElPSElE
RGV2aWNlUmVmIGRldmljZSkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SElER2FtZXBhZD4gcmVz
dWx0ID0gbV9nYW1lcGFkTWFwLnRha2UoZGV2aWNlKTsKLSAgICBBU1NFUlQocmVzdWx0KTsKLQot
ICAgIGF1dG8gaSA9IG1fZ2FtZXBhZFZlY3Rvci5maW5kKHJlc3VsdC5nZXQoKSk7Ci0gICAgaWYg
KGkgIT0gbm90Rm91bmQpCi0gICAgICAgIG1fZ2FtZXBhZFZlY3RvcltpXSA9IG51bGxwdHI7Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9ISURHYW1lcGFkUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9I
SURHYW1lcGFkUHJvdmlkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWEwNjhk
ZjZiYjE5ZDU0NTgwYmQ1NzE3ZWYxYWQ2YzM3ZTg5MDkzZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElE
R2FtZXBhZFByb3ZpZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBISURHYW1lcGFkUHJvdmlkZXJfaAotI2RlZmluZSBISURHYW1lcGFkUHJv
dmlkZXJfaAotCi0jaWYgRU5BQkxFKEdBTUVQQUQpCi0KLSNpbmNsdWRlICJHYW1lcGFkUHJvdmlk
ZXIuaCIKLSNpbmNsdWRlICJISURHYW1lcGFkLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNs
dWRlIDxJT0tpdC9oaWQvSU9ISURNYW5hZ2VyLmg+Ci0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0j
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHYW1lcGFkUHJvdmlkZXJDbGllbnQ7Ci0KLWNs
YXNzIEhJREdhbWVwYWRQcm92aWRlciA6IHB1YmxpYyBHYW1lcGFkUHJvdmlkZXIgewotICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEhJREdhbWVwYWRQcm92aWRlcik7Ci0gICAgZnJpZW5kIGNsYXNz
IE5ldmVyRGVzdHJveWVkPEhJREdhbWVwYWRQcm92aWRlcj47Ci1wdWJsaWM6Ci0gICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIEhJREdhbWVwYWRQcm92aWRlciYgc2luZ2xldG9uKCk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgc3RhcnRNb25pdG9yaW5nR2FtZXBhZHMoR2FtZXBhZFByb3ZpZGVyQ2xpZW50
Kik7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3BNb25pdG9yaW5nR2FtZXBhZHMoR2FtZXBhZFByb3Zp
ZGVyQ2xpZW50Kik7Ci0gICAgdmlydHVhbCBjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4m
IHBsYXRmb3JtR2FtZXBhZHMoKSB7IHJldHVybiBtX2dhbWVwYWRWZWN0b3I7IH0KLQotICAgIHZv
aWQgZGV2aWNlQWRkZWQoSU9ISUREZXZpY2VSZWYpOwotICAgIHZvaWQgZGV2aWNlUmVtb3ZlZChJ
T0hJRERldmljZVJlZik7Ci0gICAgdm9pZCB2YWx1ZXNDaGFuZ2VkKElPSElEVmFsdWVSZWYpOwot
Ci1wcml2YXRlOgotICAgIEhJREdhbWVwYWRQcm92aWRlcigpOwotCi0gICAgc3RkOjp1bmlxdWVf
cHRyPEhJREdhbWVwYWQ+IHJlbW92ZUdhbWVwYWRGb3JEZXZpY2UoSU9ISUREZXZpY2VSZWYpOwot
Ci0gICAgdm9pZCBvcGVuQW5kU2NoZWR1bGVNYW5hZ2VyKCk7Ci0gICAgdm9pZCBjbG9zZUFuZFVu
c2NoZWR1bGVNYW5hZ2VyKCk7Ci0KLSAgICB2b2lkIGNvbm5lY3Rpb25EZWxheVRpbWVyRmlyZWQo
KTsKLSAgICB2b2lkIGlucHV0Tm90aWZpY2F0aW9uVGltZXJGaXJlZCgpOwotCi0gICAgdW5zaWdu
ZWQgaW5kZXhGb3JOZXdseUNvbm5lY3RlZERldmljZSgpOwotCi0gICAgVmVjdG9yPFBsYXRmb3Jt
R2FtZXBhZCo+IG1fZ2FtZXBhZFZlY3RvcjsKLSAgICBIYXNoTWFwPElPSElERGV2aWNlUmVmLCBz
dGQ6OnVuaXF1ZV9wdHI8SElER2FtZXBhZD4+IG1fZ2FtZXBhZE1hcDsKLQotICAgIFJldGFpblB0
cjxJT0hJRE1hbmFnZXJSZWY+IG1fbWFuYWdlcjsKLQotICAgIEhhc2hTZXQ8R2FtZXBhZFByb3Zp
ZGVyQ2xpZW50Kj4gbV9jbGllbnRzOwotICAgIGJvb2wgbV9zaG91bGREaXNwYXRjaENhbGxiYWNr
czsKLQotICAgIFRpbWVyIG1fY29ubmVjdGlvbkRlbGF5VGltZXI7Ci0gICAgVGltZXIgbV9pbnB1
dE5vdGlmaWNhdGlvblRpbWVyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gRU5BQkxFKEdBTUVQQUQpCi0jZW5kaWYgLy8gSElER2FtZXBhZFByb3ZpZGVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285428</attachid>
            <date>2016-08-05 10:17:35 -0700</date>
            <delta_ts>2016-08-05 10:36:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160599-20160805101608.patch</filename>
            <type>text/plain</type>
            <size>158215</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjA5ZTAzYTRjMzMzZmNj
ZGIzMjVhY2NlNmU1ZmQ0NjJkZDI0MGVjNi4uM2ZjZWNiNWM1MmI4ZTg1ODA4Yzc4NTMxYWRjM2M3
ZjYyZjc5ZmJjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNSBAQAorMjAxNi0wOC0wNSAgQnJh
ZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ3JlYXRlIHBsYXRmb3Jt
L2dhbWVwYWQgZGlyZWN0b3J5LCBhbmQgbWFrZSBHYW1lcGFkUHJvdmlkZXIgcHVyZSB2aXJ0dWFs
ICh3aXRoIGEgZGVmYXVsdCBlbXB0eSBpbXBsZW1lbnRhdGlvbikuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA1OTkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE5vIGJlaGF2aW9y
IGNoYW5nZSkuCisKKyAgICAgICAgRXhjZXB0IGZvciB0aGUgR2FtZXBhZFByb3ZpZGVyL0VtcHR5
R2FtZXBhZFByb3ZpZGVyIHNwbGl0LCB0aGlzIGlzIGp1c3QgbW92aW5nIGZpbGVzIGFyb3VuZC4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtl
OgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9MaW51eC5jbWFrZToKKwor
ICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQuaDogUmVtb3ZlZC4KKyAgICAgICAgCisgICAgICAg
ICogcGxhdGZvcm0vZ2FtZXBhZC9FbXB0eUdhbWVwYWRQcm92aWRlci5jcHA6IAorICAgICAgICAo
V2ViQ29yZTo6RW1wdHlHYW1lcGFkUHJvdmlkZXI6OnN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkVtcHR5R2FtZXBhZFByb3ZpZGVyOjpzdG9wTW9uaXRvcmluZ0dh
bWVwYWRzKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5R2FtZXBhZFByb3ZpZGVyOjpwbGF0Zm9y
bUdhbWVwYWRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL0VtcHR5R2FtZXBhZFByb3Zp
ZGVyLmg6CisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQvR2FtZXBhZFByb3Zp
ZGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dhbWVwYWRQcm92
aWRlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbik6
CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkUHJvdmlkZXI6OnNldFNoYXJlZFByb3ZpZGVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL0dhbWVwYWRQcm92aWRlci5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZFByb3ZpZGVyLmguCisgICAgICAgIChX
ZWJDb3JlOjpHYW1lcGFkUHJvdmlkZXI6On5HYW1lcGFkUHJvdmlkZXIpOgorICAgICAgICAKKyAg
ICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL0dhbWVwYWRQcm92aWRlckNsaWVudC5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZFByb3ZpZGVyQ2xpZW50LmguCisg
ICAgICAgIChXZWJDb3JlOjpHYW1lcGFkUHJvdmlkZXJDbGllbnQ6On5HYW1lcGFkUHJvdmlkZXJD
bGllbnQpOgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL1BsYXRmb3JtR2Ft
ZXBhZC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HYW1l
cGFkLmguCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdhbWVwYWQ6On5QbGF0Zm9ybUdhbWVw
YWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1HYW1lcGFkOjppZCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUdhbWVwYWQ6OmluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtR2FtZXBhZDo6bGFzdFVwZGF0ZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1H
YW1lcGFkOjpjb25uZWN0VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdhbWVwYWQ6
OlBsYXRmb3JtR2FtZXBhZCk6CisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQv
ZWZsL0dhbWVwYWRzRWZsLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2VmbC9HYW1lcGFkc0VmbC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRGV2aWNlRWZs
OjpyZXNldEZkSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRGV2aWNlRWZsOjpk
ZXZpY2VGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWREZXZpY2VFZmw6OkdhbWVwYWRE
ZXZpY2VFZmwpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZERldmljZUVmbDo6fkdhbWVwYWRE
ZXZpY2VFZmwpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZERldmljZUVmbDo6cmVhZENhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzRWZsOjpvbkdhbWVQYWRDaGFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNFZmw6OkdhbWVwYWRzRWZsKToKKyAgICAgICAgKFdl
YkNvcmU6OkdhbWVwYWRzRWZsOjp+R2FtZXBhZHNFZmwpOgorICAgICAgICAoV2ViQ29yZTo6R2Ft
ZXBhZHNFZmw6OnJlZ2lzdGVyRGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzRWZs
Ojp1bnJlZ2lzdGVyRGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzRWZsOjp1cGRh
dGVHYW1lcGFkTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpzYW1wbGVHYW1lcGFkcyk6CisgICAg
ICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQvZ2xpYi9HYW1lcGFkc0dsaWIuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xpYi9HYW1lcGFkc0dsaWIuY3Bw
LgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZERldmljZUdsaWI6OkdhbWVwYWREZXZpY2VHbGli
KToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWREZXZpY2VHbGliOjp+R2FtZXBhZERldmljZUds
aWIpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZERldmljZUdsaWI6OnJlYWRDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkc0dsaWI6OkdhbWVwYWRzR2xpYik6CisgICAgICAg
IChXZWJDb3JlOjpHYW1lcGFkc0dsaWI6On5HYW1lcGFkc0dsaWIpOgorICAgICAgICAoV2ViQ29y
ZTo6R2FtZXBhZHNHbGliOjpyZWdpc3RlckRldmljZSk6CisgICAgICAgIChXZWJDb3JlOjpHYW1l
cGFkc0dsaWI6OnVucmVnaXN0ZXJEZXZpY2UpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNH
bGliOjp1cGRhdGVHYW1lcGFkTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkc0dsaWI6
Om9uVUV2ZW50Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNHbGliOjppc0dh
bWVwYWREZXZpY2UpOgorICAgICAgICAoV2ViQ29yZTo6c2FtcGxlR2FtZXBhZHMpOgorICAgICAg
ICAKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL2xpbnV4L0dhbWVwYWREZXZpY2VMaW51eC5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9saW51eC9HYW1lcGFkRGV2
aWNlTGludXguY3BwLgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZERldmljZUxpbnV4OjpHYW1l
cGFkRGV2aWNlTGludXgpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZERldmljZUxpbnV4Ojp+
R2FtZXBhZERldmljZUxpbnV4KToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWREZXZpY2VMaW51
eDo6dXBkYXRlRm9yRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZERldmljZUxpbnV4
Ojpub3JtYWxpemVBeGlzVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZERldmljZUxp
bnV4Ojpub3JtYWxpemVCdXR0b25WYWx1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ2FtZXBhZC9s
aW51eC9HYW1lcGFkRGV2aWNlTGludXguaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2xpbnV4L0dhbWVwYWREZXZpY2VMaW51eC5oLgorICAgICAgICAoV2ViQ29yZTo6R2Ft
ZXBhZERldmljZUxpbnV4Ojpjb25uZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZERl
dmljZUxpbnV4OjppZCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRGV2aWNlTGludXg6OnRp
bWVzdGFtcCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRGV2aWNlTGludXg6OmF4ZXNDb3Vu
dCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRGV2aWNlTGludXg6OmF4ZXNEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdhbWVwYWREZXZpY2VMaW51eDo6YnV0dG9uc0NvdW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdhbWVwYWREZXZpY2VMaW51eDo6YnV0dG9uc0RhdGEpOgorICAgICAgICAK
KyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL21hYy9ISURHYW1lcGFkLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9ISURHYW1lcGFkLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OkhJREdhbWVwYWQ6OkhJREdhbWVwYWQpOgorICAgICAgICAoV2ViQ29yZTo6SElE
R2FtZXBhZDo6Z2V0Q3VycmVudFZhbHVlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpI
SURHYW1lcGFkOjppbml0RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBhZDo6
aW5pdEVsZW1lbnRzRnJvbUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWQ6Om1h
eWJlQWRkQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWQ6Om1heWJlQWRkQXhp
cyk6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkOjp2YWx1ZUNoYW5nZWQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dhbWVwYWQvbWFjL0hJREdhbWVwYWQuaDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9ISURHYW1lcGFkLmguCisgICAgICAgIChXZWJDb3JlOjpI
SURHYW1lcGFkRWxlbWVudDo6SElER2FtZXBhZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SElER2FtZXBhZEVsZW1lbnQ6On5ISURHYW1lcGFkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpISURHYW1lcGFkRWxlbWVudDo6aXNCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6SElER2Ft
ZXBhZEVsZW1lbnQ6OmlzQXhpcyk6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkQnV0dG9u
OjpISURHYW1lcGFkQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRBeGlzOjpI
SURHYW1lcGFkQXhpcyk6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkOjpoaWREZXZpY2Up
OgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL21hYy9ISURHYW1lcGFkUHJv
dmlkZXIuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJREdh
bWVwYWRQcm92aWRlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VNYXRjaGluZ0RpY3Rp
b25hcnkpOgorICAgICAgICAoV2ViQ29yZTo6ZGV2aWNlQWRkZWRDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpkZXZpY2VSZW1vdmVkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6ZGV2
aWNlVmFsdWVzQ2hhbmdlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRQ
cm92aWRlcjo6c2luZ2xldG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRQcm92aWRl
cjo6SElER2FtZXBhZFByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRQcm92
aWRlcjo6aW5kZXhGb3JOZXdseUNvbm5lY3RlZERldmljZSk6CisgICAgICAgIChXZWJDb3JlOjpI
SURHYW1lcGFkUHJvdmlkZXI6OmNvbm5lY3Rpb25EZWxheVRpbWVyRmlyZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SElER2FtZXBhZFByb3ZpZGVyOjpvcGVuQW5kU2NoZWR1bGVNYW5hZ2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRQcm92aWRlcjo6Y2xvc2VBbmRVbnNjaGVkdWxlTWFu
YWdlcik6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkUHJvdmlkZXI6OnN0YXJ0TW9uaXRv
cmluZ0dhbWVwYWRzKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRQcm92aWRlcjo6c3Rv
cE1vbml0b3JpbmdHYW1lcGFkcyk6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkUHJvdmlk
ZXI6OmRldmljZUFkZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRQcm92aWRlcjo6
ZGV2aWNlUmVtb3ZlZCk6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkUHJvdmlkZXI6OnZh
bHVlc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBhZFByb3ZpZGVyOjppbnB1
dE5vdGlmaWNhdGlvblRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBhZFBy
b3ZpZGVyOjpyZW1vdmVHYW1lcGFkRm9yRGV2aWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1l
cGFkL21hYy9ISURHYW1lcGFkUHJvdmlkZXIuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9ISURHYW1lcGFkUHJvdmlkZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6OkhJ
REdhbWVwYWRQcm92aWRlcjo6cGxhdGZvcm1HYW1lcGFkcyk6CisKIDIwMTYtMDgtMDIgIEJyYWR5
IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92aW5nIEluZGV4ZWRE
QiBXZWJzaXRlRGF0YSBjYW4gZmFpbCBmb3Igc29tZSB1c2Vycy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQK
aW5kZXggMzJhYjUzYzJkZDM5NTQzNjRiMzM3YjExODgxOTkyNmI5YmEwOWFmMC4uOGY3NDZmM2U5
MmJlODI4MGNlMTMyNmVmZjY5NjVjNjllYmVhNDE5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAg
LTcyLDYgKzcyLDggQEAgc2V0KFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9hbmltYXRpb24iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRm
b3JtL2F1ZGlvIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9jcnlwdG8iCisgICAgIiR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dhbWVwYWQiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRm
b3JtL2dhbWVwYWQvbGludXgiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNz
IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtIgogICAgICIk
e1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMiCkBAIC0yOTAy
LDcgKzI5MDQsOCBAQCBpZiAoRU5BQkxFX0dBTUVQQUQpCiAgICAgICAgIE1vZHVsZXMvZ2FtZXBh
ZC9HYW1lcGFkTWFuYWdlci5jcHAKICAgICAgICAgTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdh
bWVwYWQuY3BwCiAKLSAgICAgICAgcGxhdGZvcm0vR2FtZXBhZFByb3ZpZGVyLmNwcAorICAgICAg
ICBwbGF0Zm9ybS9nYW1lcGFkL0VtcHR5R2FtZXBhZFByb3ZpZGVyLmNwcAorICAgICAgICBwbGF0
Zm9ybS9nYW1lcGFkL0dhbWVwYWRQcm92aWRlci5jcHAKICAgICApCiBlbHNlaWYgKEVOQUJMRV9H
QU1FUEFEX0RFUFJFQ0FURUQpCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVD
VE9SSUVTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDJkMzY5ODYwZjBhMzU3Mzg1ODI5
ZDdhZDRiZmIwNzkyNTY0N2JiMTYuLjNjYjcyM2M5MTRkNWJlMWY4ZWUyNGYwODllMGZmMjU1Yzhk
MzU3NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0yOSw2ICsyOSw4IEBAIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS9w
YWdlL2VmbCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vY2Fpcm8iCiAgICAgIiR7V0VC
Q09SRV9ESVJ9L3BsYXRmb3JtL2VmbCIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ2Ft
ZXBhZCIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ2FtZXBhZC9lZmwiCiAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dlb2NsdWUiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGlj
cy9lZmwiCkBAIC05OCw3ICsxMDAsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9lZmwvRXJyb3JzRWZsLmNwcAogICAgIHBsYXRmb3JtL2VmbC9FdmVudExvb3BF
ZmwuY3BwCiAgICAgcGxhdGZvcm0vZWZsL0ZpbGVTeXN0ZW1FZmwuY3BwCi0gICAgcGxhdGZvcm0v
ZWZsL0dhbWVwYWRzRWZsLmNwcAogICAgIHBsYXRmb3JtL2VmbC9Mb2NhbGl6ZWRTdHJpbmdzRWZs
LmNwcAogICAgIHBsYXRmb3JtL2VmbC9NSU1FVHlwZVJlZ2lzdHJ5RWZsLmNwcAogICAgIHBsYXRm
b3JtL2VmbC9NYWluVGhyZWFkU2hhcmVkVGltZXJFZmwuY3BwCkBAIC0xMTMsNiArMTE0LDggQEAg
bGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZWZsL1VzZXJBZ2VudEVm
bC5jcHAKICAgICBwbGF0Zm9ybS9lZmwvV2lkZ2V0RWZsLmNwcAogCisgICAgcGxhdGZvcm0vZ2Ft
ZXBhZC9lZmwvR2FtZXBhZHNFZmwuY3BwCisKICAgICBwbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0
aW9uUHJvdmlkZXJHZW9jbHVlMS5jcHAKICAgICBwbGF0Zm9ybS9nZW9jbHVlL0dlb2xvY2F0aW9u
UHJvdmlkZXJHZW9jbHVlMi5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCBhYWJk
MzA1ZWQxZWJkMmFlMWUxMWYxYzAzYzk0Y2IzMWQ4Y2E4NDYyLi4xZmE4NTZkZTA2YzIxNDhkNGEy
OWQ1OTEzZTgxYmI0M2EwMTk2ZGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMzQs
NiArMzQsOCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAi
JHtXRUJDT1JFX0RJUn0vZWRpdGluZy9hdGsiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BhZ2UvZ3Rr
IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9jYWlybyIKKyAgICAiJHtXRUJDT1JFX0RJ
Un0vcGxhdGZvcm0vZ2FtZXBhZCIKKyAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ2FtZXBh
ZC9nbGliIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9nZW9jbHVlIgogICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ndGsiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvIgpAQCAtODUsMTIgKzg3LDEzIEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogCiAgICAgcGxhdGZvcm0vY3J5cHRvL2dudXRscy9DcnlwdG9EaWdlc3RHbnVUTFMuY3Bw
CiAKKyAgICBwbGF0Zm9ybS9nYW1lcGFkL2dsaWIvR2FtZXBhZHNHbGliLmNwcAorCiAgICAgcGxh
dGZvcm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTEuY3BwCiAgICAgcGxhdGZv
cm0vZ2VvY2x1ZS9HZW9sb2NhdGlvblByb3ZpZGVyR2VvY2x1ZTIuY3BwCiAKICAgICBwbGF0Zm9y
bS9nbGliL0V2ZW50TG9vcEdsaWIuY3BwCiAgICAgcGxhdGZvcm0vZ2xpYi9GaWxlU3lzdGVtR2xp
Yi5jcHAKLSAgICBwbGF0Zm9ybS9nbGliL0dhbWVwYWRzR2xpYi5jcHAKICAgICBwbGF0Zm9ybS9n
bGliL0tleWVkRGVjb2RlckdsaWIuY3BwCiAgICAgcGxhdGZvcm0vZ2xpYi9LZXllZEVuY29kZXJH
bGliLmNwcAogICAgIHBsYXRmb3JtL2dsaWIvTWFpblRocmVhZFNoYXJlZFRpbWVyR0xpYi5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCAwZWEzZTQ2ZWNkMjRlM2UyZGYwMDJlZmFhNmVkYmY1YTllNDYwM2Y2Li4yYzZhM2E5ZTBh
NjNlNDUzYjA2MjU4YjNiYjAzODg2NmUyM2RkNzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMTYzLDYgKzIxNjMsMTYgQEAK
IAkJNTE0Qzc2N0QwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVxdWVzdEJhc2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3NjY4MENFOTIz
QTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlcXVlc3RCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE0Qzc2N0UwQ0U5MjNBMTAwN0VGM0NEIC8q
IFJlc291cmNlUmVzcG9uc2VCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNEM3NjY5MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlc3Bv
bnNlQmFzZS5jcHAgKi87IH07CiAJCTUxNEM3NjdGMENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJj
ZVJlc3BvbnNlQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE0Qzc2NkEwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVzcG9uc2VCYXNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTE1QkUx
OEYxRDU0RjVGQjAwREQ3QzY4IC8qIEVtcHR5R2FtZXBhZFByb3ZpZGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUJFMTg4MUQ1NEY1RjYwMERE
N0M2OCAvKiBFbXB0eUdhbWVwYWRQcm92aWRlci5jcHAgKi87IH07CisJCTUxNUJFMTkwMUQ1NEY1
RkIwMEREN0M2OCAvKiBFbXB0eUdhbWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1QkUxODkxRDU0RjVGNjAwREQ3QzY4IC8qIEVt
cHR5R2FtZXBhZFByb3ZpZGVyLmggKi87IH07CisJCTUxNUJFMTkxMUQ1NEY1RkIwMEREN0M2OCAv
KiBHYW1lcGFkUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE1QkUxOEExRDU0RjVGNjAwREQ3QzY4IC8qIEdhbWVwYWRQcm92aWRlci5j
cHAgKi87IH07CisJCTUxNUJFMTkyMUQ1NEY1RkIwMEREN0M2OCAvKiBHYW1lcGFkUHJvdmlkZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUJFMThC
MUQ1NEY1RjYwMEREN0M2OCAvKiBHYW1lcGFkUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MTVCRTE5MzFENTRGNUZCMDBERDdDNjgg
LyogR2FtZXBhZFByb3ZpZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTVCRTE4QzFENTRGNUY2MDBERDdDNjggLyogR2FtZXBhZFByb3Zp
ZGVyQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNTE1QkUxOTUxRDU0RjVGQjAwREQ3QzY4IC8qIFBsYXRmb3JtR2FtZXBhZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1QkUxOEUxRDU0RjVG
NjAwREQ3QzY4IC8qIFBsYXRmb3JtR2FtZXBhZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTUxNUJFMTlCMUQ1NEY2QzEwMEREN0M2OCAvKiBISURH
YW1lcGFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxNUJFMTk3MUQ1NEY2QkQwMEREN0M2OCAvKiBISURHYW1lcGFkLmNwcCAqLzsgfTsKKwkJNTE1
QkUxOUMxRDU0RjZDMTAwREQ3QzY4IC8qIEhJREdhbWVwYWQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUJFMTk4MUQ1NEY2QkQwMEREN0M2OCAvKiBI
SURHYW1lcGFkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNTE1QkUxOUQxRDU0RjZDMTAwREQ3QzY4IC8qIEhJREdhbWVwYWRQcm92aWRlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVCRTE5OTFE
NTRGNkJEMDBERDdDNjggLyogSElER2FtZXBhZFByb3ZpZGVyLmNwcCAqLzsgfTsKKwkJNTE1QkUx
OUUxRDU0RjZDMTAwREQ3QzY4IC8qIEhJREdhbWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1QkUxOUExRDU0RjZCRDAwREQ3QzY4
IC8qIEhJREdhbWVwYWRQcm92aWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUxNUY3OTUzMUNGQ0EzRDAwMENDRUQ5MyAvKiBXZWJDb3JlQ3Jv
c3NUaHJlYWRDb3BpZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE1Rjc5NTExQ0ZDQTNDNzAwQ0NFRDkzIC8qIFdlYkNvcmVDcm9zc1RocmVhZENv
cGllci5jcHAgKi87IH07CiAJCTUxNUY3OTU0MUNGQ0EzRDUwMENDRUQ5MyAvKiBXZWJDb3JlQ3Jv
c3NUaHJlYWRDb3BpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxNUY3OTUyMUNGQ0EzQzcwMENDRUQ5MyAvKiBXZWJDb3JlQ3Jvc3NUaHJlYWRDb3Bp
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1
MTYwMzAwQjBDQzQyNTEyMDBDOEFDMjUgLyogRmlsZVN5c3RlbVBPU0lYLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjAzMDBBMENDNDI1MTIwMEM4
QUMyNSAvKiBGaWxlU3lzdGVtUE9TSVguY3BwICovOyB9OwpAQCAtMjIwOCwxMSArMjIxOCw2IEBA
CiAJCTUxNzRFMjBBMTBBMUY0NEYwMEY5NUU2RiAvKiBQb3BTdGF0ZUV2ZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTc0RTIwODEwQTFGNDRGMDBG
OTVFNkYgLyogUG9wU3RhdGVFdmVudC5oICovOyB9OwogCQk1MTc3MURGRTFCREI0ODUwMDBDQUU4
RTQgLyogTWVtb3J5T2JqZWN0U3RvcmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTE3NzFERkMxQkRCNDc1NjAwQ0FFOEU0IC8qIE1lbW9yeU9iamVj
dFN0b3JlLmNwcCAqLzsgfTsKIAkJNTE3NzFERkYxQkRCNDg1MDAwQ0FFOEU0IC8qIE1lbW9yeU9i
amVjdFN0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTc3MURGRDFCREI0NzU2MDBDQUU4RTQgLyogTWVtb3J5T2JqZWN0U3RvcmUuaCAqLzsgfTsK
LQkJNTE3OUNFMjQxOTVDODE0MjAwMTlDMTk4IC8qIEdhbWVwYWRQcm92aWRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3OUNFMjMxOTVDODE0MjAw
MTlDMTk4IC8qIEdhbWVwYWRQcm92aWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTUxNzlDRTI2MTk1QzgyMUQwMDE5QzE5OCAvKiBHYW1lcGFk
UHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE3OUNFMjUxOTVDODIxRDAwMTlDMTk4IC8qIEdhbWVwYWRQcm92aWRlci5jcHAgKi87IH07
Ci0JCTUxNzlDRTJBMTk1QzkxODYwMDE5QzE5OCAvKiBHYW1lcGFkUHJvdmlkZXJDbGllbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNzlDRTI5MTk1
QzkxODYwMDE5QzE5OCAvKiBHYW1lcGFkUHJvdmlkZXJDbGllbnQuaCAqLzsgfTsKLQkJNTE3OUNF
MzYxOTVDQUM3RTAwMTlDMTk4IC8qIEhJREdhbWVwYWRQcm92aWRlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTc5Q0UzNDE5NUNBQzdFMDAxOUMx
OTggLyogSElER2FtZXBhZFByb3ZpZGVyLmNwcCAqLzsgfTsKLQkJNTE3OUNFMzcxOTVDQUM3RTAw
MTlDMTk4IC8qIEhJREdhbWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3OUNFMzUxOTVDQUM3RTAwMTlDMTk4IC8qIEhJREdhbWVw
YWRQcm92aWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTUxN0E2M0MzMUI3NDMxODcwMEU3RENEQyAvKiBLZXllZERlY29kZXJDRi5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTdBNjNCRjFCNzQz
MTdFMDBFN0RDREMgLyogS2V5ZWREZWNvZGVyQ0YuY3BwICovOyB9OwogCQk1MTdBNjNDNDFCNzQz
MThCMDBFN0RDREMgLyogS2V5ZWRFbmNvZGVyQ0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3QTYzQzExQjc0MzE3RTAwRTdEQ0RDIC8qIEtleWVk
RW5jb2RlckNGLmNwcCAqLzsgfTsKIAkJNTE3QTYzQzUxQjc0MzE4RjAwRTdEQ0RDIC8qIEtleWVk
RGVjb2RlckNGLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTdBNjNDMDFCNzQzMTdFMDBFN0RDREMgLyogS2V5ZWREZWNvZGVyQ0YuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjI5Nyw4ICsyMzAyLDYg
QEAKIAkJNTFBNEJCMTAxOTU0RDYyNzAwRkE1QzJFIC8qIE5hdmlnYXRvckdhbWVwYWQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBNEJCMEQxOTU0
RDYyNzAwRkE1QzJFIC8qIE5hdmlnYXRvckdhbWVwYWQuY3BwICovOyB9OwogCQk1MUE5RDlFOTE5
NUI5MzFGMDAxQjJCNUMgLyogR2FtZXBhZE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBOUQ5RTcxOTVCOTMxRjAwMUIyQjVDIC8qIEdh
bWVwYWRNYW5hZ2VyLmNwcCAqLzsgfTsKIAkJNTFBOUQ5RUExOTVCOTMxRjAwMUIyQjVDIC8qIEdh
bWVwYWRNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MUE5RDlFODE5NUI5MzFGMDAxQjJCNUMgLyogR2FtZXBhZE1hbmFnZXIuaCAqLzsgfTsK
LQkJNTFBOUQ5RjMxOTVCOTUwMzAwMUIyQjVDIC8qIEhJREdhbWVwYWQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBOUQ5RUYxOTVCOTUwMzAwMUIy
QjVDIC8qIEhJREdhbWVwYWQuY3BwICovOyB9OwotCQk1MUE5RDlGNDE5NUI5NTAzMDAxQjJCNUMg
LyogSElER2FtZXBhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFBOUQ5RjAxOTVCOTUwMzAwMUIyQjVDIC8qIEhJREdhbWVwYWQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MUFBM0Y2RjBCRDVBQTlF
MDA4OTI5NzEgLyogUmVzb3VyY2VMb2FkZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFBM0Y2RTBCRDVBQTlFMDA4OTI5NzEgLyogUmVzb3Vy
Y2VMb2FkZXJNYWMubW0gKi87IH07CiAJCTUxQUJBRTFCMTAzQzE4RkYwMDhDNTI2MCAvKiBTb2Nr
ZXRTdHJlYW1FcnJvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFBQkFFMUExMDNDMThGRjAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUVycm9yLmggKi87
IH07CiAJCTUxQUJBRTFFMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUJBRTFDMTAz
QzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjMwOSw3ICsyMzEyLDYgQEAKIAkJNTFC
NDU0RUExQjREQUU3RDAwODVFQUE2IC8qIFBpbmdIYW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQjQ1NEU5MUI0REFFN0QwMDg1RUFBNiAvKiBQ
aW5nSGFuZGxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNTFCNDVEMjAxQUI4RDFFMjAwMTE3Q0QyIC8qIENvbnRlbnRFeHRlbnNpb24uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCNDVEMUUxQUI4
RDFFMjAwMTE3Q0QyIC8qIENvbnRlbnRFeHRlbnNpb24uY3BwICovOyB9OwogCQk1MUI0NUQyMTFB
QjhEMUUyMDAxMTdDRDIgLyogQ29udGVudEV4dGVuc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCNDVEMUYxQUI4RDFFMjAwMTE3Q0QyIC8qIENv
bnRlbnRFeHRlbnNpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQk1MUI1OEZENDE5NUE5NjREMDAyOTkwQjAgLyogUGxhdGZvcm1HYW1lcGFkLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVFNUZFRjE5
NTEwMTQ3MDA4NkNBNUUgLyogUGxhdGZvcm1HYW1lcGFkLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTFCQTRBQzMxQkJCNUNEODAwREYzRDZEIC8q
IElEQkRhdGFiYXNlSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUJBNEFDMTFCQkI1Q0JGMDBERjNENkQgLyogSURCRGF0YWJhc2VJbmZvLmNw
cCAqLzsgfTsKIAkJNTFCQTRBQzQxQkJCNUNEODAwREYzRDZEIC8qIElEQkRhdGFiYXNlSW5mby5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCQTRBQzIx
QkJCNUNCRjAwREYzRDZEIC8qIElEQkRhdGFiYXNlSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxQkE0QUNBMUJCQzVCRDkwMERGM0Q2RCAv
KiBNZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTFCQTRBQzgxQkJDNUI5RTAwREYzRDZEIC8qIE1lbW9yeUlEQkJh
Y2tpbmdTdG9yZS5jcHAgKi87IH07CkBAIC05NTc4LDcgKzk1ODAsMTYgQEAKIAkJNTE0Qzc2Njgw
Q0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVxdWVzdEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VSZXF1ZXN0QmFzZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1MTRDNzY2OTBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25z
ZUJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVzb3VyY2VS
ZXNwb25zZUJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTRDNzY2QTBD
RTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VSZXNwb25zZUJhc2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNTE1RTVGRUYxOTUxMDE0NzAwODZDQTVFIC8qIFBsYXRmb3JtR2FtZXBh
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUdhbWVwYWQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTE1QkUxODgxRDU0RjVGNjAwREQ3QzY4IC8qIEVtcHR5R2FtZXBhZFByb3Zp
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVtcHR5R2FtZXBh
ZFByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE1QkUxODkxRDU0
RjVGNjAwREQ3QzY4IC8qIEVtcHR5R2FtZXBhZFByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEVtcHR5R2FtZXBhZFByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUxNUJFMThBMUQ1NEY1RjYwMEREN0M2OCAvKiBHYW1lcGFkUHJvdmlkZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2FtZXBhZFByb3ZpZGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE1QkUxOEIxRDU0RjVGNjAwREQ3
QzY4IC8qIEdhbWVwYWRQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHYW1lcGFkUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE1QkUx
OEMxRDU0RjVGNjAwREQ3QzY4IC8qIEdhbWVwYWRQcm92aWRlckNsaWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBHYW1lcGFkUHJvdmlkZXJDbGllbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE1QkUxOEUxRDU0RjVGNjAwREQ3QzY4IC8qIFBsYXRmb3Jt
R2FtZXBhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUdhbWVw
YWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE1QkUxOTcxRDU0RjZCRDAwREQ3
QzY4IC8qIEhJREdhbWVwYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSElER2FtZXBhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNUJFMTk4
MUQ1NEY2QkQwMEREN0M2OCAvKiBISURHYW1lcGFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEhJREdhbWVwYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE1
QkUxOTkxRDU0RjZCRDAwREQ3QzY4IC8qIEhJREdhbWVwYWRQcm92aWRlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBISURHYW1lcGFkUHJvdmlkZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTVCRTE5QTFENTRGNkJEMDBERDdDNjggLyogSElE
R2FtZXBhZFByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhJREdh
bWVwYWRQcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTVGNzk1MTFD
RkNBM0M3MDBDQ0VEOTMgLyogV2ViQ29yZUNyb3NzVGhyZWFkQ29waWVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVDcm9zc1RocmVhZENvcGllci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNUY3OTUyMUNGQ0EzQzcwMENDRUQ5MyAv
KiBXZWJDb3JlQ3Jvc3NUaHJlYWRDb3BpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViQ29yZUNyb3NzVGhyZWFkQ29waWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxNjAzMDBBMENDNDI1MTIwMEM4QUMyNSAvKiBGaWxlU3lzdGVtUE9TSVguY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmlsZVN5c3RlbVBPU0lYLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2NDgsMTEgKzk2NTksNiBAQAogCQk1MTc0
RTIwQjEwQTFGNDlBMDBGOTVFNkYgLyogUG9wU3RhdGVFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gUG9wU3RhdGVFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxNzcxREZDMUJEQjQ3NTYwMENBRThFNCAvKiBNZW1vcnlPYmplY3RTdG9yZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZW1vcnlPYmplY3RTdG9yZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNzcxREZEMUJEQjQ3NTYwMENBRThFNCAvKiBN
ZW1vcnlPYmplY3RTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZW1v
cnlPYmplY3RTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTc5Q0UyMzE5
NUM4MTQyMDAxOUMxOTggLyogR2FtZXBhZFByb3ZpZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEdhbWVwYWRQcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk1MTc5Q0UyNTE5NUM4MjFEMDAxOUMxOTggLyogR2FtZXBhZFByb3ZpZGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdhbWVwYWRQcm92aWRlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNzlDRTI5MTk1QzkxODYwMDE5QzE5OCAvKiBH
YW1lcGFkUHJvdmlkZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
R2FtZXBhZFByb3ZpZGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUx
NzlDRTM0MTk1Q0FDN0UwMDE5QzE5OCAvKiBISURHYW1lcGFkUHJvdmlkZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSElER2FtZXBhZFByb3ZpZGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE3OUNFMzUxOTVDQUM3RTAwMTlDMTk4IC8qIEhJ
REdhbWVwYWRQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBISURH
YW1lcGFkUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3QTYzQkYx
Qjc0MzE3RTAwRTdEQ0RDIC8qIEtleWVkRGVjb2RlckNGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEtleWVkRGVjb2RlckNGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTE3QTYzQzAxQjc0MzE3RTAwRTdEQ0RDIC8qIEtleWVkRGVjb2RlckNGLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtleWVkRGVjb2RlckNGLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxN0E2M0MxMUI3NDMxN0UwMEU3RENEQyAvKiBLZXll
ZEVuY29kZXJDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBLZXll
ZEVuY29kZXJDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05Njk5LDggKzk3
MDUsNiBAQAogCQk1MUE0QkIwRjE5NTRENjI3MDBGQTVDMkUgLyogTmF2aWdhdG9yR2FtZXBhZC5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yR2FtZXBhZC5pZGw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQTlEOUU3MTk1QjkzMUYwMDFCMkI1QyAvKiBHYW1lcGFk
TWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHYW1lcGFk
TWFuYWdlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQTlEOUU4MTk1Qjkz
MUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBHYW1lcGFkTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1
MUE5RDlFRjE5NUI5NTAzMDAxQjJCNUMgLyogSElER2FtZXBhZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBISURHYW1lcGFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNTFBOUQ5RjAxOTVCOTUwMzAwMUIyQjVDIC8qIEhJREdhbWVwYWQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSElER2FtZXBhZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MUFBM0Y2RTBCRDVBQTlFMDA4OTI5NzEgLyogUmVzb3VyY2VMb2Fk
ZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSZXNvdXJj
ZUxvYWRlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFBQkFFMUExMDND
MThGRjAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNvY2tldFN0cmVhbUVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxQUJBRTFDMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU29ja2V0U3RyZWFtSGFuZGxlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzY4OCw2ICsxNzY5MiwzMSBAQAogCQkJcGF0
aCA9IGNmOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNTE1QkUxODcxRDU0
RjVEQjAwREQ3QzY4IC8qIGdhbWVwYWQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCTUxNUJFMTk2MUQ1NEY2NDUwMEREN0M2OCAvKiBtYWMgKi8sCisJCQkJ
NTE1QkUxODgxRDU0RjVGNjAwREQ3QzY4IC8qIEVtcHR5R2FtZXBhZFByb3ZpZGVyLmNwcCAqLywK
KwkJCQk1MTVCRTE4OTFENTRGNUY2MDBERDdDNjggLyogRW1wdHlHYW1lcGFkUHJvdmlkZXIuaCAq
LywKKwkJCQk1MTVCRTE4QTFENTRGNUY2MDBERDdDNjggLyogR2FtZXBhZFByb3ZpZGVyLmNwcCAq
LywKKwkJCQk1MTVCRTE4QjFENTRGNUY2MDBERDdDNjggLyogR2FtZXBhZFByb3ZpZGVyLmggKi8s
CisJCQkJNTE1QkUxOEMxRDU0RjVGNjAwREQ3QzY4IC8qIEdhbWVwYWRQcm92aWRlckNsaWVudC5o
ICovLAorCQkJCTUxNUJFMThFMUQ1NEY1RjYwMEREN0M2OCAvKiBQbGF0Zm9ybUdhbWVwYWQuaCAq
LywKKwkJCSk7CisJCQlwYXRoID0gZ2FtZXBhZDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CisJCX07CisJCTUxNUJFMTk2MUQ1NEY2NDUwMEREN0M2OCAvKiBtYWMgKi8gPSB7CisJCQlpc2Eg
PSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTUxNUJFMTk3MUQ1NEY2QkQwMEREN0M2
OCAvKiBISURHYW1lcGFkLmNwcCAqLywKKwkJCQk1MTVCRTE5ODFENTRGNkJEMDBERDdDNjggLyog
SElER2FtZXBhZC5oICovLAorCQkJCTUxNUJFMTk5MUQ1NEY2QkQwMEREN0M2OCAvKiBISURHYW1l
cGFkUHJvdmlkZXIuY3BwICovLAorCQkJCTUxNUJFMTlBMUQ1NEY2QkQwMEREN0M2OCAvKiBISURH
YW1lcGFkUHJvdmlkZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gbWFjOworCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJNTE2MDMwMDkwQ0M0MjQ1NDAwQzhBQzI1IC8qIHBvc2l4
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTE4MTcxLDEw
ICsxODIwMCw2IEBACiAJCQkJRTFCQTY2RjAxNzQyQkQ4NjAwQzIwMjUxIC8qIER5bmFtaWNMaW5r
ZXJJbnRlcnBvc2luZy5oICovLAogCQkJCTFDQTE5RTAzMERDMjU1OTUwMDY1QTk5NCAvKiBFdmVu
dExvb3BNYWMubW0gKi8sCiAJCQkJNTE0QjNGNzUwQzcyMjA1NTAwMDUzMERGIC8qIEZpbGVTeXN0
ZW1NYWMubW0gKi8sCi0JCQkJNTFBOUQ5RUYxOTVCOTUwMzAwMUIyQjVDIC8qIEhJREdhbWVwYWQu
Y3BwICovLAotCQkJCTUxQTlEOUYwMTk1Qjk1MDMwMDFCMkI1QyAvKiBISURHYW1lcGFkLmggKi8s
Ci0JCQkJNTE3OUNFMzQxOTVDQUM3RTAwMTlDMTk4IC8qIEhJREdhbWVwYWRQcm92aWRlci5jcHAg
Ki8sCi0JCQkJNTE3OUNFMzUxOTVDQUM3RTAwMTlDMTk4IC8qIEhJREdhbWVwYWRQcm92aWRlci5o
ICovLAogCQkJCTkzNUM0NzZFMDlBQzRENzMwMEE2QUFCNCAvKiBLZXlFdmVudE1hYy5tbSAqLywK
IAkJCQk1MjFENDZGNTExQUVDOTgxMDA1MTQ2MTMgLyogS2lsbFJpbmdNYWMubW0gKi8sCiAJCQkJ
MDZFODFFRDYwQUI1RDVFOTAwQzg3ODM3IC8qIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5o
ICovLApAQCAtMjI4NzcsNiArMjI5MDIsNyBAQAogCQkJCTFBRTQyRjY3MEFBNEI4Q0IwMEM4NjEy
RCAvKiBjZiAqLywKIAkJCQlBNUM5NzRDRTExNDg1RkRBMDA2NkYyQUIgLyogY29jb2EgKi8sCiAJ
CQkJQ0U1MEQ4Q0UxQzg5MzJFRDAwNzJFQTVBIC8qIGNyeXB0byAqLywKKwkJCQk1MTVCRTE4NzFE
NTRGNURCMDBERDdDNjggLyogZ2FtZXBhZCAqLywKIAkJCQlCMkEwMTU5MTBBRjZDRDUzMDA2QkNF
MEUgLyogZ3JhcGhpY3MgKi8sCiAJCQkJQTU5RTNDMUIxMTU4MEYzNDAwNzI5MjhFIC8qIGlvcyAq
LywKIAkJCQk2NTgyQTE0ODA5OTk5RDZDMDBCRUVCNkQgLyogbWFjICovLApAQCAtMjI5MzIsOSAr
MjI5NTgsNiBAQAogCQkJCUM1N0ZFREUwMTIxMkVFOUMwMDk3QkU2NSAvKiBGaWxlU3lzdGVtLmNw
cCAqLywKIAkJCQk1MTRCM0Y3MjBDNzIyMDQ3MDAwNTMwREYgLyogRmlsZVN5c3RlbS5oICovLAog
CQkJCUJDMDczQkE5MEMzOTlCMUYwMDBGNTk3OSAvKiBGbG9hdENvbnZlcnNpb24uaCAqLywKLQkJ
CQk1MTc5Q0UyNTE5NUM4MjFEMDAxOUMxOTggLyogR2FtZXBhZFByb3ZpZGVyLmNwcCAqLywKLQkJ
CQk1MTc5Q0UyMzE5NUM4MTQyMDAxOUMxOTggLyogR2FtZXBhZFByb3ZpZGVyLmggKi8sCi0JCQkJ
NTE3OUNFMjkxOTVDOTE4NjAwMTlDMTk4IC8qIEdhbWVwYWRQcm92aWRlckNsaWVudC5oICovLAog
CQkJCUNENEJFNTI5MUNFMTM0MjUwMDlEODdEQSAvKiBHZW5lcmljVGFza1F1ZXVlLmNwcCAqLywK
IAkJCQlDRDYyRkI5NDFBRjAxOEU3MDAxMkVEN0QgLyogR2VuZXJpY1Rhc2tRdWV1ZS5oICovLAog
CQkJCUE4NzQ4QkRGMTJDQkYyREMwMDFGQkE0MSAvKiBIYXNoVG9vbHMuaCAqLywKQEAgLTIyOTc4
LDcgKzIzMDAxLDYgQEAKIAkJCQlBMTQ5Nzg3MDFBQkFGM0E1MDBDRUY3RTQgLyogUGxhdGZvcm1D
b250ZW50RmlsdGVyLmggKi8sCiAJCQkJQkM1Qzc2MjkxNDk3RkUxNDAwQkM0Nzc1IC8qIFBsYXRm
b3JtRXZlbnQuaCAqLywKIAkJCQlBNzIzRjc3QTE0ODRDQTRDMDA4QzZEQkUgLyogUGxhdGZvcm1F
eHBvcnRNYWNyb3MuaCAqLywKLQkJCQk1MTVFNUZFRjE5NTEwMTQ3MDA4NkNBNUUgLyogUGxhdGZv
cm1HYW1lcGFkLmggKi8sCiAJCQkJOTM1QzQ3NjYwOUFDNEQ0MzAwQTZBQUI0IC8qIFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudC5oICovLAogCQkJCTkzNUM0NzY3MDlBQzRENDMwMEE2QUFCNCAvKiBQbGF0
Zm9ybU1vdXNlRXZlbnQuaCAqLywKIAkJCQlDNUJBQzE2RjE0RTMwRTQ3MDAwMDg4MzcgLyogUGxh
dGZvcm1QYXN0ZWJvYXJkLmggKi8sCkBAIC0yNTA3Nyw2ICsyNTA5OSw3IEBACiAJCQkJMjlBODEy
MkMwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2liaWxpdHlMaXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkyOUE4MTI0MzBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eUxpc3RCb3guaCBp
biBIZWFkZXJzICovLAogCQkJCTI5QTgxMjQyMEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmls
aXR5TGlzdEJveE9wdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE1QkUxOUMxRDU0RjZDMTAw
REQ3QzY4IC8qIEhJREdhbWVwYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3QjBBQkNGMTAzMjI0
MjIwMEZCREMzMyAvKiBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDdCMDExM0YxMDMyMjQyMjAwRkJEQzMzIC8qIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRy
b2xzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3NkNERDJGMzExMDNEQTY2MDA2ODA1MjEgLyogQWNj
ZXNzaWJpbGl0eU1lbnVMaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTI1MzQ0LDYgKzI1MzY3LDcg
QEAKIAkJCQlFNDI1QTQ5QTE4MjkyQjg0MDAyMENGQ0YgLyogQ29sbGVjdGlvbkluZGV4Q2FjaGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQ2RUJFQTAyMUI3RDRENjUwMEJFNDk0MSAvKiBDb2xsZWN0
aW9uVHJhdmVyc2FsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0M0NDIwMDBGODEzQUUxMDBDMUE2
MzQgLyogQ29sbGVjdGlvblR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxNUJFMTkwMUQ1NEY1
RkIwMEREN0M2OCAvKiBFbXB0eUdhbWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjI3NTM1NjcwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
MzMwQTIyMzEzRUMxOTZCMDAwMEI0NUIgLyogQ29sb3JDaG9vc2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlDMzdDREVCRDE0OUVGMjAzMDA0MjA5MEQgLyogQ29sb3JDaG9vc2VyQ2xpZW50LmggaW4g
SGVhZGVycyAqLywKQEAgLTI2MTA1LDggKzI2MTI5LDYgQEAKIAkJCQlGRDMxNjAwRDEyQjAyNjc2
MDBDMUEzNTkgLyogR2Fpbk5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNkM2MjIxMTk1MEQ0
ODcwMDMzN0U3NSAvKiBHYW1lcGFkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQTlEOUVB
MTk1QjkzMUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NTE3OUNFMjQxOTVDODE0MjAwMTlDMTk4IC8qIEdhbWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNTE3OUNFMkExOTVDOTE4NjAwMTlDMTk4IC8qIEdhbWVwYWRQcm92aWRlckNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1QzQ3NzUwOUFDNEQ4RTAwQTZBQUI0IC8qIEdhcFJl
Y3RzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDMyRTg0NzBDNTE0OTM4MDBCMTUwMEYgLyogR0ND
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMEMwNTRDQzExMThDOEU0MDBDRTI2MzYg
LyogZ2VuZXJhdGUtYmluZGluZ3MucGwgaW4gSGVhZGVycyAqLywKQEAgLTI2MTUxLDggKzI2MTcz
LDYgQEAKIAkJCQk4NDgyQjc0NjExOThDMzU0MDBCRkIwMDUgLyogSGFzaENoYW5nZUV2ZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBODc0OEJFMDEyQ0JGMkRDMDAxRkJBNDEgLyogSGFzaFRvb2xz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0RDMDEyNTFGMTJEMDAzRUYyNjkgLyogSGlkZGVu
SW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MUE5RDlGNDE5NUI5NTAzMDAxQjJCNUMg
LyogSElER2FtZXBhZC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE3OUNFMzcxOTVDQUM3RTAwMTlD
MTk4IC8qIEhJREdhbWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5NEQxNTQw
QzI3NUM4QjAwNkJDNjE3IC8qIEhpc3RvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3RENFMjAy
MTA4MDdDNzUwMDU3RDM5NCAvKiBIaXN0b3J5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTE3NDFEMTEwQjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmggaW4gSGVhZGVycyAq
LywKQEAgLTI2OTgzLDYgKzI3MDAzLDcgQEAKIAkJCQk2NURGMzIwNDA5RDFDQzYwMDAwQkUzMjUg
LyogSlNUZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzNBMTRCOTBCN0QxRDUyMDBBNTNGRkQg
LyogSlNUZXh0RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUY0NUY2MEU2ODdCNUMwMDFD
MTI4NyAvKiBKU1RleHRNZXRyaWNzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTVCRTE5NTFENTRG
NUZCMDBERDdDNjggLyogUGxhdGZvcm1HYW1lcGFkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzA3
NTY5NTE0MjI2NjhEMDA0MTQxNjEgLyogSlNUZXh0VHJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CTA3MDc1NkRFMTQyMzlCNEUwMDQxNDE2MSAvKiBKU1RleHRUcmFja0N1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDcwNzU2RTAxNDIzOUI0RTAwNDE0MTYxIC8qIEpTVGV4dFRyYWNrQ3VlTGlzdC5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yNzQ5NSw3ICsyNzUxNiw2IEBACiAJCQkJMjY2MDFFQkYxNEIz
QjlBRDAwMTJDMEZFIC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5SU9TLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0FBNDg3MDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjNGNzdCMTQ4NENBNEMwMDhDNkRCRSAvKiBQbGF0Zm9y
bUV4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFCNThGRDQxOTVBOTY0RDAwMjk5
MEIwIC8qIFBsYXRmb3JtR2FtZXBhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1QzQ3NjgwOUFD
NEQ0MzAwQTZBQUI0IC8qIFBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDU2MkY5NjExNTczRjg4RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUY1NDRGNzg5MTVDRkIyQTgwMEFGMzNBOCAvKiBQbGF0Zm9ybUxvY2FsZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yNzUyMSw2ICsyNzU0MSw3IEBACiAJCQkJMDcyQUUxRTUxODNDMDc0
MTAwMEE1OTg4IC8qIFBsdWdpblJlcGxhY2VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MUUy
MTgzQTE3MzU5RkI4MDA2RTZFNEQgLyogUGx1Z0luc1Jlc291cmNlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMUFBODc5OTAxMUNCRTg0NjAwM0M2NjRGIC8qIFBsdWdpblN0cmF0ZWd5LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1MTVCRTE5MzFENTRGNUZCMDBERDdDNjggLyogR2FtZXBhZFByb3ZpZGVy
Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwQUZEQUMzRDEwRjU0NDhDMDBFMUYzRDIgLyog
UGx1Z2luVmlld0Jhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQkI4QUI5MTNGMUFGQjAwMDcz
NERGMCAvKiBQT0RJbnRlcnZhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCQjhBQkExM0YxQUZC
MDAwNzM0REYwIC8qIFBPREludGVydmFsVHJlZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODI3NSw2
ICsyODI5Niw3IEBACiAJCQkJODNDMUQ0MzIxNzhENUFCNTAwMTQxRTY4IC8qIFNWR1BhdGhTZWdM
aW5ldG9SZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTdEMEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdQYXRoU2VnTGluZXRvVmVydGljYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzQzFENDMz
MTc4RDVBQjUwMDE0MUU2OCAvKiBTVkdQYXRoU2VnTGluZXRvVmVydGljYWxBYnMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTUxNUJFMTlFMUQ1NEY2QzEwMEREN0M2OCAvKiBISURHYW1lcGFkUHJvdmlk
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzQzFENDM0MTc4RDVBQjUwMDE0MUU2OCAvKiBTVkdQ
YXRoU2VnTGluZXRvVmVydGljYWxSZWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3QTgxMEQw
MEJGMjIwMDcxQjc4MiAvKiBTVkdQYXRoU2VnTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ3
NkM5RTYxMURGNkEwQjAwNTU1QjAyIC8qIFNWR1BhdGhTZWdMaXN0QnVpbGRlci5oIGluIEhlYWRl
cnMgKi8sCkBAIC0yODMzNiw2ICsyODM1OCw3IEBACiAJCQkJMDgwRTQ5MjgxMjU1RjNCRDAwRUZD
QTI3IC8qIFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
OEYwQkZDNjEyNTVDNTNDMDAwNzUxODUgLyogU1ZHVGV4dE1ldHJpY3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBNjdCRjczMUQ0RkU0MjMwMDQxMkFDNyAvKiBET01IVE1MUGFyYWdyYXBoRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE1QkUxOTIxRDU0RjVGQjAwREQ3QzY4IC8qIEdhbWVw
YWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzExNzQ0NTkxNEJDMzRFQzAwRUU1RkM4
IC8qIFNWR1RleHRNZXRyaWNzQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBQ0Uw
RDAwQkYyMjAwNzFCNzgyIC8qIFNWR1RleHRQYXRoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjIyMjdBRDEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQu
aCBpbiBIZWFkZXJzICovLApAQCAtMjkxMzcsNiArMjkxNjAsNyBAQAogCQkJCTUxMkREOEZBMEQ5
MUU2QUYwMDBGODlFRSAvKiBBcmNoaXZlRmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1
MTJERDhGQjBEOTFFNkFGMDAwRjg5RUUgLyogQXJjaGl2ZVJlc291cmNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxMkREOEY3MEQ5MUU2QUYwMDBGODlFRSAvKiBBcmNoaXZlUmVzb3VyY2VDb2xs
ZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxNUJFMTkxMUQ1NEY1RkIwMEREN0M2OCAv
KiBHYW1lcGFkUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlCMzc2MEMxNUM2QzY4
NDAwNTkxMzFEIC8qIEFycmF5VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ1Njg2Qzkx
M0FDMTgwMjAwQjY5QzY4IC8qIEFzeW5jQXVkaW9EZWNvZGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUUxQ0RFOTIwMTUwMThFRDAwMDg2MkNDNSAvKiBBc3luY0ZpbGVTdHJlYW0uY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0yOTUxMyw2ICsyOTUzNyw3IEBACiAJCQkJOTMzMDlEREUwOTlFNjQ5MjAw
NTZFNTgxIC8qIERlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTMzMDlERTAwOTlFNjQ5MjAwNTZFNTgxIC8qIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDOUFCRjgxMzU3QTNCRjAwRjU1MDNGIC8qIERldGFpbHNN
YXJrZXJDb250cm9sLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxNUJFMThGMUQ1NEY1RkIwMERE
N0M2OCAvKiBFbXB0eUdhbWVwYWRQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMUVE
Nzc4QzFCRTMyOTQwMDBEQzE3OTEgLyogRGV2aWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUND
QzJCNTE1MTVGNjEzMDYwMDQ4Q0RENiAvKiBEZXZpY2VDb250cm9sbGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTMxRUFGOTdGMTIxNDM1QTQwMEU3QzFCRiAvKiBEZXZpY2VNb3Rpb25DbGllbnRJ
T1MubW0gaW4gU291cmNlcyAqLywKQEAgLTI5OTEyLDcgKzI5OTM3LDYgQEAKIAkJCQk1MThGNEZG
NjE5NENBNEU2MDA4MUJBQUUgLyogR2FtZXBhZEJ1dHRvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk1MTZDNjIyMDE5NTBENDg3MDAzMzdFNzUgLyogR2FtZXBhZEV2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUxQTlEOUU5MTk1QjkzMUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk1MTc5Q0UyNjE5NUM4MjFEMDAxOUMxOTggLyogR2FtZXBhZFBy
b3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MzJFODQ5MEM1MTQ5M0YwMEIxNTAwRiAv
KiBHQ0NvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEZCMzkwQUQxNUVGNjFGMzAw
N0FENTFGIC8qIEdlbmVyYXRlZEltYWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgzMDAzMEY1
MUI3RDMzQjUwMEVEM0FBQyAvKiBHZW5lcmljQ2FjaGVkSFRNTENvbGxlY3Rpb24uY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0yOTk0MSw4ICsyOTk2NSw2IEBACiAJCQkJQjJBMDE1QUEwQUY2Q0Q1MzAw
NkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0RGNzQ4M0Ux
OEZFQkNFQzAwMDZFQ0MwIC8qIEdyaWRQb3NpdGlvbnNSZXNvbHZlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlGNTVCM0RCRjEyNTFGMTJEMDAzRUYyNjkgLyogSGlkZGVuSW5wdXRUeXBlLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTUxQTlEOUYzMTk1Qjk1MDMwMDFCMkI1QyAvKiBISURHYW1lcGFk
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxNzlDRTM2MTk1Q0FDN0UwMDE5QzE5OCAvKiBISURH
YW1lcGFkUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5NEQxNTMwQzI3NUM4QjAw
NkJDNjE3IC8qIEhpc3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdEQ0UyMDExMDgwN0M3
NTAwNTdEMzk0IC8qIEhpc3RvcnlDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUx
NzQxRDEyMEIwNzI1OUEwMEVENDQyQyAvKiBIaXN0b3J5SXRlbS5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTI5OTcwLDYgKzI5OTkyLDcgQEAKIAkJCQlBOERGM0ZEMTA5N0ZBMEZDMDA1Mjk4MUIgLyog
SFRNTENvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc3QjM4NjQxMjI4ODNFOTAw
QjgxRkY4IC8qIEhUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdD
M0U1MTBCMThERjhGMzUwMEMxMTJGNyAvKiBIVE1MQ29udmVydGVyLm1tIGluIFNvdXJjZXMgKi8s
CisJCQkJNTE1QkUxOUQxRDU0RjZDMTAwREQ3QzY4IC8qIEhJREdhbWVwYWRQcm92aWRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4MzEyMEM3MDFDNTZGM0Y2MDAxQ0IxMTIgLyogSFRNTERhdGFF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUY1QzA0MURBMEZGQ0E3Q0UwMDgzOUQ0QSAv
KiBIVE1MRGF0YUxpc3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUQzNTlENzg5MTI5
Q0EyNzEwMDA2RTVEMiAvKiBIVE1MRGV0YWlsc0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0zMDk5Nyw2ICszMTAyMCw3IEBACiAJCQkJMUE0ODMyQjMxQTk1M0JBNjAwOEI0REZFIC8qIExv
Y2FsaXplZFN0cmluZ3NDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDRTFDNDFDMEQ5ODI5
ODEwMDNCMDJGMiAvKiBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODIzOUUwMDA5
QjNDRjhBMDBCNjA2NDEgLyogTG9nZ2luZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTVCRTE5
QjFENTRGNkMxMDBERDdDNjggLyogSElER2FtZXBhZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDAyNjQ1RTBBRkRDMTlCMDA1OTE5RTIgLyogTG9nZ2luZ01hYy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTFBMDQwOUYzMUE0MzY3NUMwMDlFNDdGMyAvKiBNYWNoU2VuZFJpZ2h0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTkzMkFENzA1MTdFRkEyQzMwMDM4RjhGRiAvKiBNYWluRnJhbWUuY3BwIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HYW1lcGFk
UHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZFByb3ZpZGVyLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjBmNDkyN2YxMjNiMTA5OWY0YzA4YjY1
ZTU1ZmMxYTEwZTQzODBiZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HYW1lcGFkUHJvdmlkZXIuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiR2FtZXBhZFByb3ZpZGVyLmgiCi0KLSNpZiBFTkFCTEUoR0FNRVBBRCkKLQot
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LXN0YXRpYyBHYW1lcGFkUHJvdmlkZXIqIHNoYXJlZFByb3ZpZGVyID0gbnVsbHB0cjsKLQotR2Ft
ZXBhZFByb3ZpZGVyJiBHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpCi17Ci0gICAgaWYgKCFz
aGFyZWRQcm92aWRlcikgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8R2FtZXBhZFBy
b3ZpZGVyPiBkZWZhdWx0UHJvdmlkZXI7Ci0gICAgICAgIHNoYXJlZFByb3ZpZGVyID0gJmRlZmF1
bHRQcm92aWRlci5nZXQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gKnNoYXJlZFByb3ZpZGVyOwot
fQotCi12b2lkIEdhbWVwYWRQcm92aWRlcjo6c2V0U2hhcmVkUHJvdmlkZXIoR2FtZXBhZFByb3Zp
ZGVyJiBuZXdQcm92aWRlcikKLXsKLSAgICBzaGFyZWRQcm92aWRlciA9ICZuZXdQcm92aWRlcjsK
LX0KLQotdm9pZCBHYW1lcGFkUHJvdmlkZXI6OnN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVw
YWRQcm92aWRlckNsaWVudCopCi17Ci19Ci0KLXZvaWQgR2FtZXBhZFByb3ZpZGVyOjpzdG9wTW9u
aXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRlckNsaWVudCopCi17Ci19Ci0KLWNvbnN0IFZl
Y3RvcjxQbGF0Zm9ybUdhbWVwYWQqPiYgR2FtZXBhZFByb3ZpZGVyOjpwbGF0Zm9ybUdhbWVwYWRz
KCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VmVjdG9yPFBsYXRmb3JtR2FtZXBhZCo+
PiBkZWZhdWx0R2FtZXBhZHM7Ci0gICAgcmV0dXJuIGRlZmF1bHRHYW1lcGFkczsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HYW1lcGFkUHJvdmlkZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0dhbWVwYWRQcm92aWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA4ZDFjNTMxNGFkNGFiNDYwNmU4OWE0MmUwYmU3ODAyZTVhZDE4ZjVlLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0dhbWVwYWRQcm92aWRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgR2FtZXBhZFByb3ZpZGVyX2gKLSNkZWZpbmUgR2FtZXBhZFBy
b3ZpZGVyX2gKLQotI2lmIEVOQUJMRShHQU1FUEFEKQotCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdhbWVwYWRQcm92aWRlckNsaWVudDsK
LWNsYXNzIFBsYXRmb3JtR2FtZXBhZDsKLQotY2xhc3MgR2FtZXBhZFByb3ZpZGVyIHsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIH5HYW1lcGFkUHJvdmlkZXIoKSB7IH0KLQotICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBHYW1lcGFkUHJvdmlkZXImIHNpbmdsZXRvbigpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyB2b2lkIHNldFNoYXJlZFByb3ZpZGVyKEdhbWVwYWRQcm92aWRlciYpOwotCi0g
ICAgdmlydHVhbCB2b2lkIHN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRlckNs
aWVudCopOwotICAgIHZpcnR1YWwgdm9pZCBzdG9wTW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQ
cm92aWRlckNsaWVudCopOwotICAgIHZpcnR1YWwgY29uc3QgVmVjdG9yPFBsYXRmb3JtR2FtZXBh
ZCo+JiBwbGF0Zm9ybUdhbWVwYWRzKCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKLSNlbmRpZiAvLyBHYW1lcGFkUHJvdmlkZXJfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZFByb3ZpZGVyQ2xpZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HYW1lcGFkUHJvdmlkZXJDbGllbnQuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M5NjkyODc1ZmRjNTE3ODkxOWIzZjczZDVmNDlj
YzZiNjNkMGJkZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HYW1lcGFkUHJvdmlkZXJDbGllbnQuaAorKysgL2Rl
di9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
LSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0g
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEdhbWVwYWRQcm92
aWRlckNsaWVudF9oCi0jZGVmaW5lIEdhbWVwYWRQcm92aWRlckNsaWVudF9oCi0KLSNpZiBFTkFC
TEUoR0FNRVBBRCkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBQbGF0Zm9ybUdhbWVw
YWQ7Ci0KLWNsYXNzIEdhbWVwYWRQcm92aWRlckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB+R2FtZXBhZFByb3ZpZGVyQ2xpZW50KCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZv
cm1HYW1lcGFkQ29ubmVjdGVkKFBsYXRmb3JtR2FtZXBhZCYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgcGxhdGZvcm1HYW1lcGFkRGlzY29ubmVjdGVkKFBsYXRmb3JtR2FtZXBhZCYpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1HYW1lcGFkSW5wdXRBY3Rpdml0eSgpID0gMDsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEKQotI2Vu
ZGlmIC8vIEdhbWVwYWRQcm92aWRlckNsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9HYW1lcGFkcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZHMu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUzOGNjZWQ4M2Q3NzE2YTM1MjU2Yjgz
MDYxYzNiNDUyODBkYmI1Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HYW1lcGFkcy5oCisrKyAvZGV2L251bGwK
QEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUg
bWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAot
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNICi0gKiBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBHYW1lcGFkc19oCi0jZGVm
aW5lIEdhbWVwYWRzX2gKLQotI2lmIEVOQUJMRShHQU1FUEFEX0RFUFJFQ0FURUQpCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR2FtZXBhZExpc3Q7Ci0KLXZvaWQgc2FtcGxlR2FtZXBh
ZHMoR2FtZXBhZExpc3QqIGludG8pOwotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRF9E
RVBSRUNBVEVEKQotCi0jZW5kaWYgLy8gR2FtZXBhZHNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vTGludXguY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MaW51
eC5jbWFrZQppbmRleCA2NTgzZmY4NjVkZGYzNjFkZjAxYjIwMWQ1ZTMzMjRiNDJlMGFmNmU5Li5m
NTFiMjA4ZTc5ODAyNDU3ODk1OWE5NmQ3ZmNhYmZmNGQ3MmFmZDVlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9MaW51eC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9MaW51eC5jbWFrZQpAQCAtMSw4ICsxLDkgQEAKIGxpc3QoQVBQRU5EIFdlYkNvcmVfSU5D
TFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9saW51eCIKKyAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ2FtZXBhZC9saW51eCIKICkKIAogbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCi0gICAgcGxhdGZvcm0vbGludXgvR2FtZXBhZERldmljZUxpbnV4
LmNwcAorICAgIHBsYXRmb3JtL2dhbWVwYWQvbGludXgvR2FtZXBhZERldmljZUxpbnV4LmNwcAog
ICAgIHBsYXRmb3JtL2xpbnV4L01lbW9yeVByZXNzdXJlSGFuZGxlckxpbnV4LmNwcAogKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HYW1lcGFkLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUdhbWVwYWQuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNjExY2IwNmYwNGYzNDVjNzg5ODhmOTAyY2JlMWU0OGRiZGVkZTM3NC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QbGF0Zm9ybUdhbWVwYWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFBsYXRmb3JtR2FtZXBhZF9oCi0jZGVmaW5lIFBsYXRm
b3JtR2FtZXBhZF9oCi0KLSNpZiBFTkFCTEUoR0FNRVBBRCkKLQotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBQbGF0Zm9ybUdhbWVwYWQgewotcHVibGljOgotICAgIHZpcnR1YWwgflBs
YXRmb3JtR2FtZXBhZCgpIHsgfQotCi0gICAgY29uc3QgU3RyaW5nJiBpZCgpIGNvbnN0IHsgcmV0
dXJuIG1faWQ7IH0KLSAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7
IH0KLSAgICBkb3VibGUgbGFzdFVwZGF0ZVRpbWUoKSBjb25zdCB7IHJldHVybiBtX2xhc3RVcGRh
dGVUaW1lOyB9Ci0gICAgZG91YmxlIGNvbm5lY3RUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9jb25u
ZWN0VGltZTsgfQotICAgIHZpcnR1YWwgY29uc3QgVmVjdG9yPGRvdWJsZT4mIGF4aXNWYWx1ZXMo
KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBjb25zdCBWZWN0b3I8ZG91YmxlPiYgYnV0dG9uVmFs
dWVzKCkgY29uc3QgPSAwOwotCi1wcm90ZWN0ZWQ6Ci0gICAgZXhwbGljaXQgUGxhdGZvcm1HYW1l
cGFkKHVuc2lnbmVkIGluZGV4KQotICAgICAgICA6IG1faW5kZXgoaW5kZXgpCi0gICAgICAgICwg
bV9sYXN0VXBkYXRlVGltZSgwLjApCi0gICAgICAgICwgbV9jb25uZWN0VGltZSgwLjApCi0gICAg
ewotICAgIH0KLQotICAgIFN0cmluZyBtX2lkOwotICAgIHVuc2lnbmVkIG1faW5kZXg7Ci0gICAg
ZG91YmxlIG1fbGFzdFVwZGF0ZVRpbWU7Ci0gICAgZG91YmxlIG1fY29ubmVjdFRpbWU7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKLSNl
bmRpZiAvLyBQbGF0Zm9ybUdhbWVwYWRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZWZsL0dhbWVwYWRzRWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9H
YW1lcGFkc0VmbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2ZjllYTUzY2Uz
NmYwMDE5NWQ3YzRlMmIxMTFjYjUxYjIzMzhlNzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL0dhbWVwYWRz
RWZsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2FtZXBhZHMuaCIKLQotI2lmIEVO
QUJMRShHQU1FUEFEX0RFUFJFQ0FURUQpCi0KLSNpbmNsdWRlICJHYW1lcGFkRGV2aWNlTGludXgu
aCIKLSNpbmNsdWRlICJHYW1lcGFkTGlzdC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNs
dWRlIDxFY29yZS5oPgotI2luY2x1ZGUgPEVlemUuaD4KLSNpbmNsdWRlIDxFaW5hLmg+Ci0jaW5j
bHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRp
YyBjb25zdCBjaGFyIGpveXN0aWNrUHJlZml4W10gPSAiL2Rldi9pbnB1dC9qcyI7Ci0KLWNsYXNz
IEdhbWVwYWREZXZpY2VFZmwgOiBwdWJsaWMgR2FtZXBhZERldmljZUxpbnV4IHsKLXB1YmxpYzoK
LSAgICBleHBsaWNpdCBHYW1lcGFkRGV2aWNlRWZsKGNvbnN0IFN0cmluZyYgZGV2aWNlRmlsZSk7
Ci0gICAgfkdhbWVwYWREZXZpY2VFZmwoKTsKLSAgICB2b2lkIHJlc2V0RmRIYW5kbGVyKCkgeyBt
X2ZkSGFuZGxlciA9IDA7IH0KLSAgICBjb25zdCBTdHJpbmcmIGRldmljZUZpbGUoKSBjb25zdCB7
IHJldHVybiBtX2RldmljZUZpbGU7IH0KLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgRWluYV9Cb29s
IHJlYWRDYWxsYmFjayh2b2lkKiB1c2VyRGF0YSwgRWNvcmVfRmRfSGFuZGxlciopOwotCi0gICAg
RWNvcmVfRmRfSGFuZGxlciogbV9mZEhhbmRsZXI7Ci0gICAgU3RyaW5nIG1fZGV2aWNlRmlsZTsK
LX07Ci0KLUdhbWVwYWREZXZpY2VFZmw6OkdhbWVwYWREZXZpY2VFZmwoY29uc3QgU3RyaW5nJiBk
ZXZpY2VGaWxlKQotICAgIDogR2FtZXBhZERldmljZUxpbnV4KGRldmljZUZpbGUpCi0gICAgLCBt
X2ZkSGFuZGxlcigwKQotICAgICwgbV9kZXZpY2VGaWxlKGRldmljZUZpbGUpCi17Ci0gICAgaWYg
KG1fZmlsZURlc2NyaXB0b3IgPCAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2ZkSGFuZGxl
ciA9IGVjb3JlX21haW5fZmRfaGFuZGxlcl9hZGQobV9maWxlRGVzY3JpcHRvciwgRUNPUkVfRkRf
UkVBRCwgcmVhZENhbGxiYWNrLCB0aGlzLCAwLCAwKTsKLSAgICBpZiAoIW1fZmRIYW5kbGVyKQot
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgdGhlIEVjb3JlX0ZkX0hhbmRsZXIu
Iik7Ci19Ci0KLUdhbWVwYWREZXZpY2VFZmw6On5HYW1lcGFkRGV2aWNlRWZsKCkKLXsKLSAgICBp
ZiAobV9mZEhhbmRsZXIpCi0gICAgICAgIGVjb3JlX21haW5fZmRfaGFuZGxlcl9kZWwobV9mZEhh
bmRsZXIpOwotfQotCi1FaW5hX0Jvb2wgR2FtZXBhZERldmljZUVmbDo6cmVhZENhbGxiYWNrKHZv
aWQqIHVzZXJEYXRhLCBFY29yZV9GZF9IYW5kbGVyKiBmZEhhbmRsZXIpCi17Ci0gICAgR2FtZXBh
ZERldmljZUVmbCogZ2FtZXBhZERldmljZSA9IHN0YXRpY19jYXN0PEdhbWVwYWREZXZpY2VFZmwq
Pih1c2VyRGF0YSk7Ci0KLSAgICBpZiAoZWNvcmVfbWFpbl9mZF9oYW5kbGVyX2FjdGl2ZV9nZXQo
ZmRIYW5kbGVyLCBFQ09SRV9GRF9FUlJPUikpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJBbiBlcnJv
ciBvY2N1cnJlZCB3aGlsZSB3YXRjaGluZyB0aGUgam95c3RpY2sgZmlsZSBkZXNjcmlwdG9yIGF0
ICVzLCBhYm9ydGluZy4iLCBnYW1lcGFkRGV2aWNlLT5kZXZpY2VGaWxlKCkudXRmOCgpLmRhdGEo
KSk7Ci0gICAgICAgIGdhbWVwYWREZXZpY2UtPnJlc2V0RmRIYW5kbGVyKCk7Ci0gICAgICAgIHJl
dHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7Ci0gICAgfQotCi0gICAgaW50IGZkRGV2aWNlID0g
ZWNvcmVfbWFpbl9mZF9oYW5kbGVyX2ZkX2dldChmZEhhbmRsZXIpOwotICAgIHN0cnVjdCBqc19l
dmVudCBldmVudDsKLSAgICBjb25zdCBzc2l6ZV90IGxlbiA9IHJlYWQoZmREZXZpY2UsICZldmVu
dCwgc2l6ZW9mKGV2ZW50KSk7Ci0KLSAgICBpZiAobGVuIDw9IDApIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gcmVhZCBqb3lzdGljayBmaWxlIGRlc2NyaXB0b3IgYXQgJXMsIGFib3J0
aW5nLiIsIGdhbWVwYWREZXZpY2UtPmRldmljZUZpbGUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAg
ICAgZ2FtZXBhZERldmljZS0+cmVzZXRGZEhhbmRsZXIoKTsKLSAgICAgICAgcmV0dXJuIEVDT1JF
X0NBTExCQUNLX0NBTkNFTDsKLSAgICB9Ci0gICAgaWYgKGxlbiAhPSBzaXplb2YoZXZlbnQpKSB7
Ci0gICAgICAgIExPR19FUlJPUigiV3JvbmcganNfZXZlbnQgc2l6ZSByZWFkIG9uIGZpbGUgZGVz
Y3JpcHRvciBhdCAlcywgaWdub3JpbmcuIiwgZ2FtZXBhZERldmljZS0+ZGV2aWNlRmlsZSgpLnV0
ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfUkVORVc7Ci0gICAg
fQotCi0gICAgZ2FtZXBhZERldmljZS0+dXBkYXRlRm9yRXZlbnQoZXZlbnQpOwotICAgIHJldHVy
biBFQ09SRV9DQUxMQkFDS19SRU5FVzsKLX0KLQotY2xhc3MgR2FtZXBhZHNFZmwgewotICAgIGZy
aWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxHYW1lcGFkc0VmbD47Ci1wdWJsaWM6Ci0gICAgR2Ft
ZXBhZHNFZmwoc2l6ZV90IGxlbmd0aCk7Ci0KLSAgICB2b2lkIHJlZ2lzdGVyRGV2aWNlKGNvbnN0
IFN0cmluZyYgc3lzcGF0aCk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRGV2aWNlKGNvbnN0IFN0cmlu
ZyYgc3lzcGF0aCk7Ci0KLSAgICB2b2lkIHVwZGF0ZUdhbWVwYWRMaXN0KEdhbWVwYWRMaXN0Kik7
Ci0KLXByaXZhdGU6Ci0gICAgfkdhbWVwYWRzRWZsKCk7Ci0gICAgc3RhdGljIHZvaWQgb25HYW1l
UGFkQ2hhbmdlKGNvbnN0IGNoYXIqIHN5c3BhdGgsIEVlemVfVWRldl9FdmVudCwgdm9pZCogdXNl
ckRhdGEsIEVlemVfVWRldl9XYXRjaCogd2F0Y2hlcik7Ci0KLSAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEdhbWVwYWREZXZpY2VFZmw+PiBtX3Nsb3RzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBH
YW1lcGFkRGV2aWNlRWZsKj4gbV9kZXZpY2VNYXA7Ci0KLSAgICBFZXplX1VkZXZfV2F0Y2gqIG1f
Z2FtZXBhZHNXYXRjaGVyOwotfTsKLQotdm9pZCBHYW1lcGFkc0VmbDo6b25HYW1lUGFkQ2hhbmdl
KGNvbnN0IGNoYXIqIHN5c3BhdGgsIEVlemVfVWRldl9FdmVudCBldmVudCwgdm9pZCogdXNlckRh
dGEsIEVlemVfVWRldl9XYXRjaCopCi17Ci0gICAgR2FtZXBhZHNFZmwqIGdhbWVwYWRzRWZsID0g
c3RhdGljX2Nhc3Q8R2FtZXBhZHNFZmwqPih1c2VyRGF0YSk7Ci0KLSAgICBzd2l0Y2ggKGV2ZW50
KSB7Ci0gICAgY2FzZSBFRVpFX1VERVZfRVZFTlRfQUREOgotICAgICAgICBnYW1lcGFkc0VmbC0+
cmVnaXN0ZXJEZXZpY2UoU3RyaW5nOjpmcm9tVVRGOChzeXNwYXRoKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgRUVaRV9VREVWX0VWRU5UX1JFTU9WRToKLSAgICAgICAgZ2FtZXBhZHNFZmwt
PnVucmVnaXN0ZXJEZXZpY2UoU3RyaW5nOjpmcm9tVVRGOChzeXNwYXRoKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotR2FtZXBhZHNF
Zmw6OkdhbWVwYWRzRWZsKHNpemVfdCBsZW5ndGgpCi0gICAgOiBtX3Nsb3RzKGxlbmd0aCkKLSAg
ICAsIG1fZ2FtZXBhZHNXYXRjaGVyKDApCi17Ci0gICAgaWYgKGVlemVfaW5pdCgpIDwgMCkgewot
ICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXplIGVlemUgbGlicmFyeS4iKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFdhdGNoIGZvciBnYW1lcGFkcyBhZGRp
dGlvbnMgLyByZW1vdmFscy4KLSAgICBtX2dhbWVwYWRzV2F0Y2hlciA9IGVlemVfdWRldl93YXRj
aF9hZGQoRUVaRV9VREVWX1RZUEVfSk9ZU1RJQ0ssIChFRVpFX1VERVZfRVZFTlRfQUREIHwgRUVa
RV9VREVWX0VWRU5UX1JFTU9WRSksIG9uR2FtZVBhZENoYW5nZSwgdGhpcyk7Ci0KLSAgICAvLyBM
aXN0IGF2YWlsYWJsZSBnYW1lcGFkcy4KLSAgICBFaW5hX0xpc3QqIGdhbWVwYWRzID0gZWV6ZV91
ZGV2X2ZpbmRfYnlfdHlwZShFRVpFX1VERVZfVFlQRV9KT1lTVElDSywgMCk7Ci0gICAgdm9pZCog
ZGF0YTsKLSAgICBFSU5BX0xJU1RfRlJFRShnYW1lcGFkcywgZGF0YSkgewotICAgICAgICBjaGFy
KiBzeXNwYXRoID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGRhdGEpOwotICAgICAgICByZWdpc3RlckRl
dmljZShTdHJpbmc6OmZyb21VVEY4KHN5c3BhdGgpKTsKLSAgICAgICAgZWluYV9zdHJpbmdzaGFy
ZV9kZWwoc3lzcGF0aCk7Ci0gICAgfQotfQotCi1HYW1lcGFkc0VmbDo6fkdhbWVwYWRzRWZsKCkK
LXsKLSAgICBpZiAobV9nYW1lcGFkc1dhdGNoZXIpCi0gICAgICAgIGVlemVfdWRldl93YXRjaF9k
ZWwobV9nYW1lcGFkc1dhdGNoZXIpOwotICAgIGVlemVfc2h1dGRvd24oKTsKLX0KLQotdm9pZCBH
YW1lcGFkc0VmbDo6cmVnaXN0ZXJEZXZpY2UoY29uc3QgU3RyaW5nJiBzeXNwYXRoKQotewotICAg
IGlmIChtX2RldmljZU1hcC5jb250YWlucyhzeXNwYXRoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gTWFrZSBzdXJlIGl0IGlzIGEgdmFsaWQgam95c3RpY2suCi0gICAgY29uc3QgY2hhciog
ZGV2aWNlRmlsZSA9IGVlemVfdWRldl9zeXNwYXRoX2dldF9kZXZwYXRoKHN5c3BhdGgudXRmOCgp
LmRhdGEoKSk7Ci0gICAgaWYgKCFkZXZpY2VGaWxlIHx8ICFlaW5hX3N0cl9oYXNfcHJlZml4KGRl
dmljZUZpbGUsIGpveXN0aWNrUHJlZml4KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTE9HKEdh
bWVwYWQsICJSZWdpc3RlcmluZyBnYW1lcGFkIGF0ICVzIiwgZGV2aWNlRmlsZSk7Ci0KLSAgICBj
b25zdCBzaXplX3Qgc2xvdENvdW50ID0gbV9zbG90cy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3Qg
aW5kZXggPSAwOyBpbmRleCA8IHNsb3RDb3VudDsgKytpbmRleCkgewotICAgICAgICBpZiAoIW1f
c2xvdHNbaW5kZXhdKSB7Ci0gICAgICAgICAgICBtX3Nsb3RzW2luZGV4XSA9IHN0ZDo6bWFrZV91
bmlxdWU8R2FtZXBhZERldmljZUVmbD4oU3RyaW5nOjpmcm9tVVRGOChkZXZpY2VGaWxlKSk7Ci0g
ICAgICAgICAgICBMT0coR2FtZXBhZCwgIkdhbWVwYWQgZGV2aWNlIG5hbWUgaXMgJXMiLCBtX3Ns
b3RzW2luZGV4XS0+aWQoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIG1fZGV2aWNlTWFw
LmFkZChzeXNwYXRoLCBtX3Nsb3RzW2luZGV4XS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBHYW1lcGFkc0VmbDo6dW5yZWdpc3RlckRldmlj
ZShjb25zdCBTdHJpbmcmIHN5c3BhdGgpCi17Ci0gICAgaWYgKCFtX2RldmljZU1hcC5jb250YWlu
cyhzeXNwYXRoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR2FtZXBhZERldmljZUVmbCogZ2Ft
ZXBhZERldmljZSA9IG1fZGV2aWNlTWFwLnRha2Uoc3lzcGF0aCk7Ci0gICAgTE9HKEdhbWVwYWQs
ICJVbnJlZ2lzdGVyaW5nIGdhbWVwYWQgYXQgJXMiLCBnYW1lcGFkRGV2aWNlLT5kZXZpY2VGaWxl
KCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgY29uc3Qgc2l6ZV90IGluZGV4ID0gbV9zbG90cy5maW5k
KHN0ZDo6bWFrZV91bmlxdWU8R2FtZXBhZERldmljZUVmbD4oZ2FtZXBhZERldmljZS0+ZGV2aWNl
RmlsZSgpKSk7Ci0gICAgQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKLQotICAgIG1fc2xvdHNb
aW5kZXhdID0gbnVsbHB0cjsKLX0KLQotdm9pZCBHYW1lcGFkc0VmbDo6dXBkYXRlR2FtZXBhZExp
c3QoR2FtZXBhZExpc3QqIGludG8pCi17Ci0gICAgQVNTRVJUKG1fc2xvdHMuc2l6ZSgpID09IGlu
dG8tPmxlbmd0aCgpKTsKLQotICAgIGNvbnN0IHNpemVfdCBzbG90Q291bnQgPSBtX3Nsb3RzLnNp
emUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNsb3RDb3VudDsgKytpKSB7Ci0gICAg
ICAgIGlmIChtX3Nsb3RzW2ldLmdldCgpICYmIG1fc2xvdHNbaV0tPmNvbm5lY3RlZCgpKSB7Ci0g
ICAgICAgICAgICBHYW1lcGFkRGV2aWNlRWZsKiBnYW1lcGFkRGV2aWNlID0gbV9zbG90c1tpXS5n
ZXQoKTsKLSAgICAgICAgICAgIFJlZlB0cjxHYW1lcGFkPiBnYW1lcGFkID0gaW50by0+aXRlbShp
KTsKLSAgICAgICAgICAgIGlmICghZ2FtZXBhZCkKLSAgICAgICAgICAgICAgICBnYW1lcGFkID0g
R2FtZXBhZDo6Y3JlYXRlKCk7Ci0KLSAgICAgICAgICAgIGdhbWVwYWQtPmluZGV4KGkpOwotICAg
ICAgICAgICAgZ2FtZXBhZC0+aWQoZ2FtZXBhZERldmljZS0+aWQoKSk7Ci0gICAgICAgICAgICBn
YW1lcGFkLT50aW1lc3RhbXAoZ2FtZXBhZERldmljZS0+dGltZXN0YW1wKCkpOwotICAgICAgICAg
ICAgZ2FtZXBhZC0+YXhlcyhnYW1lcGFkRGV2aWNlLT5heGVzQ291bnQoKSwgZ2FtZXBhZERldmlj
ZS0+YXhlc0RhdGEoKSk7Ci0gICAgICAgICAgICBnYW1lcGFkLT5idXR0b25zKGdhbWVwYWREZXZp
Y2UtPmJ1dHRvbnNDb3VudCgpLCBnYW1lcGFkRGV2aWNlLT5idXR0b25zRGF0YSgpKTsKLQotICAg
ICAgICAgICAgaW50by0+c2V0KGksIGdhbWVwYWQpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIGludG8tPnNldChpLCAwKTsKLSAgICB9Ci19Ci0KLXZvaWQgc2FtcGxlR2FtZXBhZHMoR2Ft
ZXBhZExpc3QqIGludG8pCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEdhbWVwYWRzRWZs
PiBnYW1lcGFkc0VmbChpbnRvLT5sZW5ndGgoKSk7Ci0gICAgZ2FtZXBhZHNFZmwuZ2V0KCkudXBk
YXRlR2FtZXBhZExpc3QoaW50byk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShHQU1FUEFEX0RFUFJFQ0FURUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9nYW1lcGFkL0VtcHR5R2FtZXBhZFByb3ZpZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvRW1wdHlHYW1lcGFkUHJvdmlkZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmEyZGRkZGE5MDBiZDJjMTA3NDA5ZmU1YjdmZWQ0NDYwNDFhOGYyMzEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL0VtcHR5R2FtZXBhZFByb3Zp
ZGVyLmNwcApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkVtcHR5R2FtZXBhZFByb3ZpZGVyLmgiCisKKyNpZiBFTkFCTEUoR0FNRVBB
RCkKKworI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3ZvaWQgRW1wdHlHYW1lcGFkUHJvdmlkZXI6OnN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRz
KEdhbWVwYWRQcm92aWRlckNsaWVudCopCit7Cit9CisKK3ZvaWQgRW1wdHlHYW1lcGFkUHJvdmlk
ZXI6OnN0b3BNb25pdG9yaW5nR2FtZXBhZHMoR2FtZXBhZFByb3ZpZGVyQ2xpZW50KiApCit7Cit9
CisKK2NvbnN0IFZlY3RvcjxQbGF0Zm9ybUdhbWVwYWQqPiYgRW1wdHlHYW1lcGFkUHJvdmlkZXI6
OnBsYXRmb3JtR2FtZXBhZHMoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxWZWN0b3I8
UGxhdGZvcm1HYW1lcGFkKj4+IGVtcHR5R2FtZXBhZHM7CisgICAgcmV0dXJuIGVtcHR5R2FtZXBh
ZHM7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9FbXB0eUdhbWVwYWRQcm92aWRlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9FbXB0eUdhbWVwYWRQcm92aWRlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmJkNjQ3NWYwZDNmZTRjNWE3ODViZjhhOWIzODY0NjU4MmUxMzE4MjAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL0VtcHR5R2FtZXBhZFBy
b3ZpZGVyLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKEdBTUVQQUQpCisKKyNpbmNsdWRlICJHYW1lcGFkUHJvdmlkZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFbXB0eUdhbWVwYWRQcm92aWRlciA6IHB1YmxpYyBH
YW1lcGFkUHJvdmlkZXIgeworcHVibGljOgorICAgIH5FbXB0eUdhbWVwYWRQcm92aWRlcigpIGZp
bmFsIHsgfQorCisgICAgdm9pZCBzdGFydE1vbml0b3JpbmdHYW1lcGFkcyhHYW1lcGFkUHJvdmlk
ZXJDbGllbnQqKSBmaW5hbDsKKyAgICB2b2lkIHN0b3BNb25pdG9yaW5nR2FtZXBhZHMoR2FtZXBh
ZFByb3ZpZGVyQ2xpZW50KikgZmluYWw7CisgICAgY29uc3QgVmVjdG9yPFBsYXRmb3JtR2FtZXBh
ZCo+JiBwbGF0Zm9ybUdhbWVwYWRzKCkgZmluYWw7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFC
TEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQv
R2FtZXBhZFByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvR2Ft
ZXBhZFByb3ZpZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ODYxYTBlYWY1Y2ZlNzYzNDFiODM2NDVjZDRi
NGQ2OWM4NDA0YWY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z2FtZXBhZC9HYW1lcGFkUHJvdmlkZXIuY3BwCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdhbWVwYWRQcm92aWRlci5oIgorCisjaWYg
RU5BQkxFKEdBTUVQQUQpCisKKyNpbmNsdWRlICJFbXB0eUdhbWVwYWRQcm92aWRlci5oIgorI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBHYW1lcGFkUHJvdmlkZXIqIHNoYXJlZFByb3ZpZGVyID0gbnVsbHB0cjsKKworR2FtZXBh
ZFByb3ZpZGVyJiBHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpCit7CisgICAgaWYgKCFzaGFy
ZWRQcm92aWRlcikgeworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RW1wdHlHYW1lcGFk
UHJvdmlkZXI+IGRlZmF1bHRQcm92aWRlcjsKKyAgICAgICAgc2hhcmVkUHJvdmlkZXIgPSAmZGVm
YXVsdFByb3ZpZGVyLmdldCgpOworICAgIH0KKworICAgIHJldHVybiAqc2hhcmVkUHJvdmlkZXI7
Cit9CisKK3ZvaWQgR2FtZXBhZFByb3ZpZGVyOjpzZXRTaGFyZWRQcm92aWRlcihHYW1lcGFkUHJv
dmlkZXImIG5ld1Byb3ZpZGVyKQoreworICAgIHNoYXJlZFByb3ZpZGVyID0gJm5ld1Byb3ZpZGVy
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBB
RCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvR2FtZXBhZFBy
b3ZpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL0dhbWVwYWRQcm92aWRl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjMzYTg4MzhjMjM3MjQ5ZGFhYTIzZmQ2NDJkZDZjOWRmYmUxZmI0MWEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL0dhbWVw
YWRQcm92aWRlci5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdhbWVwYWRQcm92aWRlckNsaWVudDsKK2NsYXNzIFBs
YXRmb3JtR2FtZXBhZDsKKworY2xhc3MgR2FtZXBhZFByb3ZpZGVyIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIH5HYW1lcGFkUHJvdmlkZXIoKSB7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBHYW1lcGFkUHJvdmlkZXImIHNpbmdsZXRvbigpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyB2b2lkIHNldFNoYXJlZFByb3ZpZGVyKEdhbWVwYWRQcm92aWRlciYpOworCisgICAgdmlydHVh
bCB2b2lkIHN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRlckNsaWVudCopID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcE1vbml0b3JpbmdHYW1lcGFkcyhHYW1lcGFkUHJvdmlk
ZXJDbGllbnQqKSA9IDA7CisgICAgdmlydHVhbCBjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFk
Kj4mIHBsYXRmb3JtR2FtZXBhZHMoKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dhbWVwYWQvR2FtZXBhZFByb3ZpZGVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9nYW1lcGFkL0dhbWVwYWRQcm92aWRlckNsaWVudC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFl
YTEwMmE1ZWFkN2M1NDVjZjg5MTNjYjE4MGQ4MGVhOWNkYTc1YjUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL0dhbWVwYWRQcm92aWRlckNsaWVudC5o
CkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShHQU1FUEFEKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsYXRmb3JtR2FtZXBh
ZDsKKworY2xhc3MgR2FtZXBhZFByb3ZpZGVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5HYW1lcGFkUHJvdmlkZXJDbGllbnQoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9y
bUdhbWVwYWRDb25uZWN0ZWQoUGxhdGZvcm1HYW1lcGFkJikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBwbGF0Zm9ybUdhbWVwYWREaXNjb25uZWN0ZWQoUGxhdGZvcm1HYW1lcGFkJikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUdhbWVwYWRJbnB1dEFjdGl2aXR5KCkgPSAwOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL1BsYXRmb3JtR2FtZXBhZC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9QbGF0Zm9ybUdhbWVwYWQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yYjhkN2E5OThkYTViOTY2ZWRlOTI2MTgzZjkwYzEwM2ZhZjk2NjQ4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9QbGF0Zm9ybUdhbWVw
YWQuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoR0FNRVBBRCkKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQbGF0Zm9y
bUdhbWVwYWQgeworcHVibGljOgorICAgIHZpcnR1YWwgflBsYXRmb3JtR2FtZXBhZCgpIHsgfQor
CisgICAgY29uc3QgU3RyaW5nJiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKyAgICB1bnNp
Z25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICBkb3VibGUgbGFzdFVw
ZGF0ZVRpbWUoKSBjb25zdCB7IHJldHVybiBtX2xhc3RVcGRhdGVUaW1lOyB9CisgICAgZG91Ymxl
IGNvbm5lY3RUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9jb25uZWN0VGltZTsgfQorICAgIHZpcnR1
YWwgY29uc3QgVmVjdG9yPGRvdWJsZT4mIGF4aXNWYWx1ZXMoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBjb25zdCBWZWN0b3I8ZG91YmxlPiYgYnV0dG9uVmFsdWVzKCkgY29uc3QgPSAwOworCitw
cm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgUGxhdGZvcm1HYW1lcGFkKHVuc2lnbmVkIGluZGV4KQor
ICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9sYXN0VXBkYXRlVGltZSgwLjAp
CisgICAgICAgICwgbV9jb25uZWN0VGltZSgwLjApCisgICAgeworICAgIH0KKworICAgIFN0cmlu
ZyBtX2lkOworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgZG91YmxlIG1fbGFzdFVwZGF0ZVRp
bWU7CisgICAgZG91YmxlIG1fY29ubmVjdFRpbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dhbWVwYWQvZWZsL0dhbWVwYWRzRWZsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dhbWVwYWQvZWZsL0dhbWVwYWRzRWZsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNmY5ZWE1
M2NlMzZmMDAxOTVkN2M0ZTJiMTExY2I1MWIyMzM4ZTc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9lZmwvR2FtZXBhZHNFZmwuY3BwCkBAIC0wLDAg
KzEsMjQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiR2FtZXBhZHMuaCIKKworI2lmIEVOQUJMRShHQU1FUEFEX0RFUFJFQ0FURUQpCisKKyNp
bmNsdWRlICJHYW1lcGFkRGV2aWNlTGludXguaCIKKyNpbmNsdWRlICJHYW1lcGFkTGlzdC5oIgor
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPEVlemUu
aD4KKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBjaGFyIGpveXN0aWNrUHJlZml4W10g
PSAiL2Rldi9pbnB1dC9qcyI7CisKK2NsYXNzIEdhbWVwYWREZXZpY2VFZmwgOiBwdWJsaWMgR2Ft
ZXBhZERldmljZUxpbnV4IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHYW1lcGFkRGV2aWNlRWZs
KGNvbnN0IFN0cmluZyYgZGV2aWNlRmlsZSk7CisgICAgfkdhbWVwYWREZXZpY2VFZmwoKTsKKyAg
ICB2b2lkIHJlc2V0RmRIYW5kbGVyKCkgeyBtX2ZkSGFuZGxlciA9IDA7IH0KKyAgICBjb25zdCBT
dHJpbmcmIGRldmljZUZpbGUoKSBjb25zdCB7IHJldHVybiBtX2RldmljZUZpbGU7IH0KKworcHJp
dmF0ZToKKyAgICBzdGF0aWMgRWluYV9Cb29sIHJlYWRDYWxsYmFjayh2b2lkKiB1c2VyRGF0YSwg
RWNvcmVfRmRfSGFuZGxlciopOworCisgICAgRWNvcmVfRmRfSGFuZGxlciogbV9mZEhhbmRsZXI7
CisgICAgU3RyaW5nIG1fZGV2aWNlRmlsZTsKK307CisKK0dhbWVwYWREZXZpY2VFZmw6OkdhbWVw
YWREZXZpY2VFZmwoY29uc3QgU3RyaW5nJiBkZXZpY2VGaWxlKQorICAgIDogR2FtZXBhZERldmlj
ZUxpbnV4KGRldmljZUZpbGUpCisgICAgLCBtX2ZkSGFuZGxlcigwKQorICAgICwgbV9kZXZpY2VG
aWxlKGRldmljZUZpbGUpCit7CisgICAgaWYgKG1fZmlsZURlc2NyaXB0b3IgPCAwKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2ZkSGFuZGxlciA9IGVjb3JlX21haW5fZmRfaGFuZGxlcl9hZGQo
bV9maWxlRGVzY3JpcHRvciwgRUNPUkVfRkRfUkVBRCwgcmVhZENhbGxiYWNrLCB0aGlzLCAwLCAw
KTsKKyAgICBpZiAoIW1fZmRIYW5kbGVyKQorICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBj
cmVhdGUgdGhlIEVjb3JlX0ZkX0hhbmRsZXIuIik7Cit9CisKK0dhbWVwYWREZXZpY2VFZmw6On5H
YW1lcGFkRGV2aWNlRWZsKCkKK3sKKyAgICBpZiAobV9mZEhhbmRsZXIpCisgICAgICAgIGVjb3Jl
X21haW5fZmRfaGFuZGxlcl9kZWwobV9mZEhhbmRsZXIpOworfQorCitFaW5hX0Jvb2wgR2FtZXBh
ZERldmljZUVmbDo6cmVhZENhbGxiYWNrKHZvaWQqIHVzZXJEYXRhLCBFY29yZV9GZF9IYW5kbGVy
KiBmZEhhbmRsZXIpCit7CisgICAgR2FtZXBhZERldmljZUVmbCogZ2FtZXBhZERldmljZSA9IHN0
YXRpY19jYXN0PEdhbWVwYWREZXZpY2VFZmwqPih1c2VyRGF0YSk7CisKKyAgICBpZiAoZWNvcmVf
bWFpbl9mZF9oYW5kbGVyX2FjdGl2ZV9nZXQoZmRIYW5kbGVyLCBFQ09SRV9GRF9FUlJPUikpIHsK
KyAgICAgICAgTE9HX0VSUk9SKCJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB3YXRjaGluZyB0aGUg
am95c3RpY2sgZmlsZSBkZXNjcmlwdG9yIGF0ICVzLCBhYm9ydGluZy4iLCBnYW1lcGFkRGV2aWNl
LT5kZXZpY2VGaWxlKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGdhbWVwYWREZXZpY2UtPnJl
c2V0RmRIYW5kbGVyKCk7CisgICAgICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7Cisg
ICAgfQorCisgICAgaW50IGZkRGV2aWNlID0gZWNvcmVfbWFpbl9mZF9oYW5kbGVyX2ZkX2dldChm
ZEhhbmRsZXIpOworICAgIHN0cnVjdCBqc19ldmVudCBldmVudDsKKyAgICBjb25zdCBzc2l6ZV90
IGxlbiA9IHJlYWQoZmREZXZpY2UsICZldmVudCwgc2l6ZW9mKGV2ZW50KSk7CisKKyAgICBpZiAo
bGVuIDw9IDApIHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gcmVhZCBqb3lzdGljayBm
aWxlIGRlc2NyaXB0b3IgYXQgJXMsIGFib3J0aW5nLiIsIGdhbWVwYWREZXZpY2UtPmRldmljZUZp
bGUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZ2FtZXBhZERldmljZS0+cmVzZXRGZEhhbmRs
ZXIoKTsKKyAgICAgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNFTDsKKyAgICB9CisgICAg
aWYgKGxlbiAhPSBzaXplb2YoZXZlbnQpKSB7CisgICAgICAgIExPR19FUlJPUigiV3JvbmcganNf
ZXZlbnQgc2l6ZSByZWFkIG9uIGZpbGUgZGVzY3JpcHRvciBhdCAlcywgaWdub3JpbmcuIiwgZ2Ft
ZXBhZERldmljZS0+ZGV2aWNlRmlsZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4g
RUNPUkVfQ0FMTEJBQ0tfUkVORVc7CisgICAgfQorCisgICAgZ2FtZXBhZERldmljZS0+dXBkYXRl
Rm9yRXZlbnQoZXZlbnQpOworICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19SRU5FVzsKK30KKwor
Y2xhc3MgR2FtZXBhZHNFZmwgeworICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxHYW1l
cGFkc0VmbD47CitwdWJsaWM6CisgICAgR2FtZXBhZHNFZmwoc2l6ZV90IGxlbmd0aCk7CisKKyAg
ICB2b2lkIHJlZ2lzdGVyRGV2aWNlKGNvbnN0IFN0cmluZyYgc3lzcGF0aCk7CisgICAgdm9pZCB1
bnJlZ2lzdGVyRGV2aWNlKGNvbnN0IFN0cmluZyYgc3lzcGF0aCk7CisKKyAgICB2b2lkIHVwZGF0
ZUdhbWVwYWRMaXN0KEdhbWVwYWRMaXN0Kik7CisKK3ByaXZhdGU6CisgICAgfkdhbWVwYWRzRWZs
KCk7CisgICAgc3RhdGljIHZvaWQgb25HYW1lUGFkQ2hhbmdlKGNvbnN0IGNoYXIqIHN5c3BhdGgs
IEVlemVfVWRldl9FdmVudCwgdm9pZCogdXNlckRhdGEsIEVlemVfVWRldl9XYXRjaCogd2F0Y2hl
cik7CisKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEdhbWVwYWREZXZpY2VFZmw+PiBtX3Ns
b3RzOworICAgIEhhc2hNYXA8U3RyaW5nLCBHYW1lcGFkRGV2aWNlRWZsKj4gbV9kZXZpY2VNYXA7
CisKKyAgICBFZXplX1VkZXZfV2F0Y2gqIG1fZ2FtZXBhZHNXYXRjaGVyOworfTsKKwordm9pZCBH
YW1lcGFkc0VmbDo6b25HYW1lUGFkQ2hhbmdlKGNvbnN0IGNoYXIqIHN5c3BhdGgsIEVlemVfVWRl
dl9FdmVudCBldmVudCwgdm9pZCogdXNlckRhdGEsIEVlemVfVWRldl9XYXRjaCopCit7CisgICAg
R2FtZXBhZHNFZmwqIGdhbWVwYWRzRWZsID0gc3RhdGljX2Nhc3Q8R2FtZXBhZHNFZmwqPih1c2Vy
RGF0YSk7CisKKyAgICBzd2l0Y2ggKGV2ZW50KSB7CisgICAgY2FzZSBFRVpFX1VERVZfRVZFTlRf
QUREOgorICAgICAgICBnYW1lcGFkc0VmbC0+cmVnaXN0ZXJEZXZpY2UoU3RyaW5nOjpmcm9tVVRG
OChzeXNwYXRoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRUVaRV9VREVWX0VWRU5UX1JF
TU9WRToKKyAgICAgICAgZ2FtZXBhZHNFZmwtPnVucmVnaXN0ZXJEZXZpY2UoU3RyaW5nOjpmcm9t
VVRGOChzeXNwYXRoKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworR2FtZXBhZHNFZmw6OkdhbWVwYWRzRWZsKHNpemVfdCBsZW5ndGgp
CisgICAgOiBtX3Nsb3RzKGxlbmd0aCkKKyAgICAsIG1fZ2FtZXBhZHNXYXRjaGVyKDApCit7Cisg
ICAgaWYgKGVlemVfaW5pdCgpIDwgMCkgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBp
bml0aWFsaXplIGVlemUgbGlicmFyeS4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIFdhdGNoIGZvciBnYW1lcGFkcyBhZGRpdGlvbnMgLyByZW1vdmFscy4KKyAgICBtX2dhbWVw
YWRzV2F0Y2hlciA9IGVlemVfdWRldl93YXRjaF9hZGQoRUVaRV9VREVWX1RZUEVfSk9ZU1RJQ0ss
IChFRVpFX1VERVZfRVZFTlRfQUREIHwgRUVaRV9VREVWX0VWRU5UX1JFTU9WRSksIG9uR2FtZVBh
ZENoYW5nZSwgdGhpcyk7CisKKyAgICAvLyBMaXN0IGF2YWlsYWJsZSBnYW1lcGFkcy4KKyAgICBF
aW5hX0xpc3QqIGdhbWVwYWRzID0gZWV6ZV91ZGV2X2ZpbmRfYnlfdHlwZShFRVpFX1VERVZfVFlQ
RV9KT1lTVElDSywgMCk7CisgICAgdm9pZCogZGF0YTsKKyAgICBFSU5BX0xJU1RfRlJFRShnYW1l
cGFkcywgZGF0YSkgeworICAgICAgICBjaGFyKiBzeXNwYXRoID0gc3RhdGljX2Nhc3Q8Y2hhcio+
KGRhdGEpOworICAgICAgICByZWdpc3RlckRldmljZShTdHJpbmc6OmZyb21VVEY4KHN5c3BhdGgp
KTsKKyAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc3lzcGF0aCk7CisgICAgfQorfQorCitH
YW1lcGFkc0VmbDo6fkdhbWVwYWRzRWZsKCkKK3sKKyAgICBpZiAobV9nYW1lcGFkc1dhdGNoZXIp
CisgICAgICAgIGVlemVfdWRldl93YXRjaF9kZWwobV9nYW1lcGFkc1dhdGNoZXIpOworICAgIGVl
emVfc2h1dGRvd24oKTsKK30KKwordm9pZCBHYW1lcGFkc0VmbDo6cmVnaXN0ZXJEZXZpY2UoY29u
c3QgU3RyaW5nJiBzeXNwYXRoKQoreworICAgIGlmIChtX2RldmljZU1hcC5jb250YWlucyhzeXNw
YXRoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTWFrZSBzdXJlIGl0IGlzIGEgdmFsaWQg
am95c3RpY2suCisgICAgY29uc3QgY2hhciogZGV2aWNlRmlsZSA9IGVlemVfdWRldl9zeXNwYXRo
X2dldF9kZXZwYXRoKHN5c3BhdGgudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKCFkZXZpY2VGaWxl
IHx8ICFlaW5hX3N0cl9oYXNfcHJlZml4KGRldmljZUZpbGUsIGpveXN0aWNrUHJlZml4KSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgTE9HKEdhbWVwYWQsICJSZWdpc3RlcmluZyBnYW1lcGFkIGF0
ICVzIiwgZGV2aWNlRmlsZSk7CisKKyAgICBjb25zdCBzaXplX3Qgc2xvdENvdW50ID0gbV9zbG90
cy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IHNsb3RDb3VudDsg
KytpbmRleCkgeworICAgICAgICBpZiAoIW1fc2xvdHNbaW5kZXhdKSB7CisgICAgICAgICAgICBt
X3Nsb3RzW2luZGV4XSA9IHN0ZDo6bWFrZV91bmlxdWU8R2FtZXBhZERldmljZUVmbD4oU3RyaW5n
Ojpmcm9tVVRGOChkZXZpY2VGaWxlKSk7CisgICAgICAgICAgICBMT0coR2FtZXBhZCwgIkdhbWVw
YWQgZGV2aWNlIG5hbWUgaXMgJXMiLCBtX3Nsb3RzW2luZGV4XS0+aWQoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgICAgIG1fZGV2aWNlTWFwLmFkZChzeXNwYXRoLCBtX3Nsb3RzW2luZGV4XS5n
ZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBH
YW1lcGFkc0VmbDo6dW5yZWdpc3RlckRldmljZShjb25zdCBTdHJpbmcmIHN5c3BhdGgpCit7Cisg
ICAgaWYgKCFtX2RldmljZU1hcC5jb250YWlucyhzeXNwYXRoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR2FtZXBhZERldmljZUVmbCogZ2FtZXBhZERldmljZSA9IG1fZGV2aWNlTWFwLnRha2Uo
c3lzcGF0aCk7CisgICAgTE9HKEdhbWVwYWQsICJVbnJlZ2lzdGVyaW5nIGdhbWVwYWQgYXQgJXMi
LCBnYW1lcGFkRGV2aWNlLT5kZXZpY2VGaWxlKCkudXRmOCgpLmRhdGEoKSk7CisgICAgY29uc3Qg
c2l6ZV90IGluZGV4ID0gbV9zbG90cy5maW5kKHN0ZDo6bWFrZV91bmlxdWU8R2FtZXBhZERldmlj
ZUVmbD4oZ2FtZXBhZERldmljZS0+ZGV2aWNlRmlsZSgpKSk7CisgICAgQVNTRVJUKGluZGV4ICE9
IG5vdEZvdW5kKTsKKworICAgIG1fc2xvdHNbaW5kZXhdID0gbnVsbHB0cjsKK30KKwordm9pZCBH
YW1lcGFkc0VmbDo6dXBkYXRlR2FtZXBhZExpc3QoR2FtZXBhZExpc3QqIGludG8pCit7CisgICAg
QVNTRVJUKG1fc2xvdHMuc2l6ZSgpID09IGludG8tPmxlbmd0aCgpKTsKKworICAgIGNvbnN0IHNp
emVfdCBzbG90Q291bnQgPSBtX3Nsb3RzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNsb3RDb3VudDsgKytpKSB7CisgICAgICAgIGlmIChtX3Nsb3RzW2ldLmdldCgpICYmIG1f
c2xvdHNbaV0tPmNvbm5lY3RlZCgpKSB7CisgICAgICAgICAgICBHYW1lcGFkRGV2aWNlRWZsKiBn
YW1lcGFkRGV2aWNlID0gbV9zbG90c1tpXS5nZXQoKTsKKyAgICAgICAgICAgIFJlZlB0cjxHYW1l
cGFkPiBnYW1lcGFkID0gaW50by0+aXRlbShpKTsKKyAgICAgICAgICAgIGlmICghZ2FtZXBhZCkK
KyAgICAgICAgICAgICAgICBnYW1lcGFkID0gR2FtZXBhZDo6Y3JlYXRlKCk7CisKKyAgICAgICAg
ICAgIGdhbWVwYWQtPmluZGV4KGkpOworICAgICAgICAgICAgZ2FtZXBhZC0+aWQoZ2FtZXBhZERl
dmljZS0+aWQoKSk7CisgICAgICAgICAgICBnYW1lcGFkLT50aW1lc3RhbXAoZ2FtZXBhZERldmlj
ZS0+dGltZXN0YW1wKCkpOworICAgICAgICAgICAgZ2FtZXBhZC0+YXhlcyhnYW1lcGFkRGV2aWNl
LT5heGVzQ291bnQoKSwgZ2FtZXBhZERldmljZS0+YXhlc0RhdGEoKSk7CisgICAgICAgICAgICBn
YW1lcGFkLT5idXR0b25zKGdhbWVwYWREZXZpY2UtPmJ1dHRvbnNDb3VudCgpLCBnYW1lcGFkRGV2
aWNlLT5idXR0b25zRGF0YSgpKTsKKworICAgICAgICAgICAgaW50by0+c2V0KGksIGdhbWVwYWQp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGludG8tPnNldChpLCAwKTsKKyAgICB9Cit9
CisKK3ZvaWQgc2FtcGxlR2FtZXBhZHMoR2FtZXBhZExpc3QqIGludG8pCit7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEdhbWVwYWRzRWZsPiBnYW1lcGFkc0VmbChpbnRvLT5sZW5ndGgoKSk7
CisgICAgZ2FtZXBhZHNFZmwuZ2V0KCkudXBkYXRlR2FtZXBhZExpc3QoaW50byk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEX0RFUFJFQ0FU
RUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL2dsaWIvR2Ft
ZXBhZHNHbGliLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvZ2xpYi9HYW1l
cGFkc0dsaWIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI4YmQyMWE1ZTg2NjIyNjI0ZDNjZDdhOWRjODM1MmMy
NGUyNDU4NGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1l
cGFkL2dsaWIvR2FtZXBhZHNHbGliLmNwcApAQCAtMCwwICsxLDIxOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBaYW4gRG9iZXJzZWsgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisg
KiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAor
ICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdhbWVwYWRzLmgiCisKKyNpZiBF
TkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKQorCisjaW5jbHVkZSAiR2FtZXBhZERldmljZUxpbnV4
LmgiCisjaW5jbHVkZSAiR2FtZXBhZExpc3QuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5j
bHVkZSA8Z2lvL2d1bml4aW5wdXRzdHJlYW0uaD4KKyNpbmNsdWRlIDxndWRldi9ndWRldi5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEdhbWVwYWREZXZpY2VHbGliIDogcHVibGljIEdhbWVwYWREZXZpY2VM
aW51eCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgR2FtZXBhZERldmljZUdsaWIoU3RyaW5nIGRl
dmljZUZpbGUpOworICAgIH5HYW1lcGFkRGV2aWNlR2xpYigpOworCitwcml2YXRlOgorICAgIHN0
YXRpYyBnYm9vbGVhbiByZWFkQ2FsbGJhY2soR09iamVjdCogcG9sbGFibGVTdHJlYW0sIGdwb2lu
dGVyIGRhdGEpOworICAgIEdSZWZQdHI8R0lucHV0U3RyZWFtPiBtX2lucHV0U3RyZWFtOworICAg
IEdSZWZQdHI8R1NvdXJjZT4gbV9zb3VyY2U7Cit9OworCitHYW1lcGFkRGV2aWNlR2xpYjo6R2Ft
ZXBhZERldmljZUdsaWIoU3RyaW5nIGRldmljZUZpbGUpCisgICAgOiBHYW1lcGFkRGV2aWNlTGlu
dXgoZGV2aWNlRmlsZSkKK3sKKyAgICBpZiAobV9maWxlRGVzY3JpcHRvciA9PSAtMSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9pbnB1dFN0cmVhbSA9IGFkb3B0R1JlZihnX3VuaXhfaW5wdXRf
c3RyZWFtX25ldyhtX2ZpbGVEZXNjcmlwdG9yLCBGQUxTRSkpOworICAgIG1fc291cmNlID0gYWRv
cHRHUmVmKGdfcG9sbGFibGVfaW5wdXRfc3RyZWFtX2NyZWF0ZV9zb3VyY2UoR19QT0xMQUJMRV9J
TlBVVF9TVFJFQU0obV9pbnB1dFN0cmVhbS5nZXQoKSksIDApKTsKKyAgICBnX3NvdXJjZV9zZXRf
Y2FsbGJhY2sobV9zb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KHJl
YWRDYWxsYmFjayksIHRoaXMsIDApOworICAgIGdfc291cmNlX2F0dGFjaChtX3NvdXJjZS5nZXQo
KSwgMCk7Cit9CisKK0dhbWVwYWREZXZpY2VHbGliOjp+R2FtZXBhZERldmljZUdsaWIoKQorewor
ICAgIGlmIChtX3NvdXJjZSkKKyAgICAgICAgZ19zb3VyY2VfZGVzdHJveShtX3NvdXJjZS5nZXQo
KSk7Cit9CisKK2dib29sZWFuIEdhbWVwYWREZXZpY2VHbGliOjpyZWFkQ2FsbGJhY2soR09iamVj
dCogcG9sbGFibGVTdHJlYW0sIGdwb2ludGVyIGRhdGEpCit7CisgICAgR2FtZXBhZERldmljZUds
aWIqIGdhbWVwYWREZXZpY2UgPSByZWludGVycHJldF9jYXN0PEdhbWVwYWREZXZpY2VHbGliKj4o
ZGF0YSk7CisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgIHN0cnVjdCBqc19l
dmVudCBldmVudDsKKworICAgIGdzc2l6ZSBsZW4gPSBnX3BvbGxhYmxlX2lucHV0X3N0cmVhbV9y
ZWFkX25vbmJsb2NraW5nKEdfUE9MTEFCTEVfSU5QVVRfU1RSRUFNKHBvbGxhYmxlU3RyZWFtKSwK
KyAgICAgICAgJmV2ZW50LCBzaXplb2YoZXZlbnQpLCAwLCAmZXJyb3Iub3V0UHRyKCkpOworCisg
ICAgLy8gRklYTUU6IFByb3Blcmx5IGxvZyB0aGUgZXJyb3IuCisgICAgLy8gSW4gdGhlIGNhc2Ug
b2YgR19JT19FUlJPUl9XT1VMRF9CTE9DSyBlcnJvciByZXR1cm4gVFJVRSB0byB3YWl0IHVudGls
CisgICAgLy8gdGhlIHNvdXJjZSBiZWNvbWVzIHJlYWRhYmxlIGFnYWluIGFuZCBGQUxTRSBvdGhl
cndpc2UuCisgICAgaWYgKGVycm9yKQorICAgICAgICByZXR1cm4gZ19lcnJvcl9tYXRjaGVzKGVy
cm9yLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX1dPVUxEX0JMT0NLKTsKKworICAgIEFT
U0VSVF9VTlVTRUQobGVuLCBsZW4gPT0gc2l6ZW9mKGV2ZW50KSk7CisgICAgZ2FtZXBhZERldmlj
ZS0+dXBkYXRlRm9yRXZlbnQoZXZlbnQpOworICAgIHJldHVybiBUUlVFOworfQorCitjbGFzcyBH
YW1lcGFkc0dsaWIgeworcHVibGljOgorICAgIGV4cGxpY2l0IEdhbWVwYWRzR2xpYih1bnNpZ25l
ZCBsZW5ndGgpOworCisgICAgdm9pZCByZWdpc3RlckRldmljZShTdHJpbmcgZGV2aWNlRmlsZSk7
CisgICAgdm9pZCB1bnJlZ2lzdGVyRGV2aWNlKFN0cmluZyBkZXZpY2VGaWxlKTsKKworICAgIHZv
aWQgdXBkYXRlR2FtZXBhZExpc3QoR2FtZXBhZExpc3QqKTsKKworcHJpdmF0ZToKKyAgICB+R2Ft
ZXBhZHNHbGliKCk7CisgICAgc3RhdGljIHZvaWQgb25VRXZlbnRDYWxsYmFjayhHVWRldkNsaWVu
dCosIGdjaGFyKiBhY3Rpb24sIEdVZGV2RGV2aWNlKiwgZ3BvaW50ZXIgZGF0YSk7CisgICAgc3Rh
dGljIGdib29sZWFuIGlzR2FtZXBhZERldmljZShHVWRldkRldmljZSopOworCisgICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxHYW1lcGFkRGV2aWNlR2xpYj4gPiBtX3Nsb3RzOworICAgIEhhc2hN
YXA8U3RyaW5nLCBHYW1lcGFkRGV2aWNlR2xpYio+IG1fZGV2aWNlTWFwOworCisgICAgR1JlZlB0
cjxHVWRldkNsaWVudD4gbV9ndWRldkNsaWVudDsKK307CisKK0dhbWVwYWRzR2xpYjo6R2FtZXBh
ZHNHbGliKHVuc2lnbmVkIGxlbmd0aCkKKyAgICA6IG1fc2xvdHMobGVuZ3RoKQoreworICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBzdWJzeXN0ZW1zW10gPSB7ICJpbnB1dCIsIDAgfTsKKyAgICBtX2d1
ZGV2Q2xpZW50ID0gYWRvcHRHUmVmKGdfdWRldl9jbGllbnRfbmV3KHN1YnN5c3RlbXMpKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fZ3VkZXZDbGllbnQuZ2V0KCksICJ1ZXZlbnQiLCBHX0NBTExC
QUNLKG9uVUV2ZW50Q2FsbGJhY2spLCB0aGlzKTsKKworICAgIEdVbmlxdWVQdHI8R0xpc3Q+IGRl
dmljZXNMaXN0KGdfdWRldl9jbGllbnRfcXVlcnlfYnlfc3Vic3lzdGVtKG1fZ3VkZXZDbGllbnQu
Z2V0KCksIHN1YnN5c3RlbXNbMF0pKTsKKyAgICBmb3IgKEdMaXN0KiBsaXN0SXRlbSA9IGRldmlj
ZXNMaXN0LmdldCgpOyBsaXN0SXRlbTsgbGlzdEl0ZW0gPSBnX2xpc3RfbmV4dChsaXN0SXRlbSkp
IHsKKyAgICAgICAgR1VkZXZEZXZpY2UqIGRldmljZSA9IEdfVURFVl9ERVZJQ0UobGlzdEl0ZW0t
PmRhdGEpOworICAgICAgICBTdHJpbmcgZGV2aWNlRmlsZSA9IFN0cmluZzo6ZnJvbVVURjgoZ191
ZGV2X2RldmljZV9nZXRfZGV2aWNlX2ZpbGUoZGV2aWNlKSk7CisgICAgICAgIGlmIChpc0dhbWVw
YWREZXZpY2UoZGV2aWNlKSkKKyAgICAgICAgICAgIHJlZ2lzdGVyRGV2aWNlKGRldmljZUZpbGUp
OworICAgICAgICBnX29iamVjdF91bnJlZihkZXZpY2UpOworICAgIH0KK30KKworR2FtZXBhZHNH
bGliOjp+R2FtZXBhZHNHbGliKCkKK3sKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0
X21hdGNoZWQobV9ndWRldkNsaWVudC5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwg
MCwgMCwgdGhpcyk7Cit9CisKK3ZvaWQgR2FtZXBhZHNHbGliOjpyZWdpc3RlckRldmljZShTdHJp
bmcgZGV2aWNlRmlsZSkKK3sKKyAgICBMT0coR2FtZXBhZCwgIkdhbWVwYWRzR2xpYjo6cmVnaXN0
ZXJEZXZpY2UgJXMiLCBkZXZpY2VGaWxlLmFzY2lpKCkuZGF0YSgpKTsKKyAgICBBU1NFUlQoIW1f
ZGV2aWNlTWFwLmNvbnRhaW5zKGRldmljZUZpbGUpKTsKKworICAgIGZvciAodW5zaWduZWQgaW5k
ZXggPSAwOyBpbmRleCA8IG1fc2xvdHMuc2l6ZSgpOyBpbmRleCsrKSB7CisgICAgICAgIGlmICgh
bV9zbG90c1tpbmRleF0pIHsKKyAgICAgICAgICAgIG1fc2xvdHNbaW5kZXhdID0gc3RkOjptYWtl
X3VuaXF1ZTxHYW1lcGFkRGV2aWNlR2xpYj4oZGV2aWNlRmlsZSk7CisgICAgICAgICAgICBtX2Rl
dmljZU1hcC5hZGQoZGV2aWNlRmlsZSwgbV9zbG90c1tpbmRleF0uZ2V0KCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgR2FtZXBhZHNHbGliOjp1bnJl
Z2lzdGVyRGV2aWNlKFN0cmluZyBkZXZpY2VGaWxlKQoreworICAgIExPRyhHYW1lcGFkLCAiR2Ft
ZXBhZHNHbGliOjp1bnJlZ2lzdGVyRGV2aWNlICVzIiwgZGV2aWNlRmlsZS5hc2NpaSgpLmRhdGEo
KSk7CisgICAgQVNTRVJUKG1fZGV2aWNlTWFwLmNvbnRhaW5zKGRldmljZUZpbGUpKTsKKworICAg
IEdhbWVwYWREZXZpY2VHbGliKiBnYW1lcGFkRGV2aWNlID0gbV9kZXZpY2VNYXAudGFrZShkZXZp
Y2VGaWxlKTsKKyAgICBzaXplX3QgaW5kZXggPSBtX3Nsb3RzLmZpbmQoZ2FtZXBhZERldmljZSk7
CisgICAgQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKKworICAgIG1fc2xvdHNbaW5kZXhdID0g
bnVsbHB0cjsKK30KKwordm9pZCBHYW1lcGFkc0dsaWI6OnVwZGF0ZUdhbWVwYWRMaXN0KEdhbWVw
YWRMaXN0KiBpbnRvKQoreworICAgIEFTU0VSVChtX3Nsb3RzLnNpemUoKSA9PSBpbnRvLT5sZW5n
dGgoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zbG90cy5zaXplKCk7IGkr
KykgeworICAgICAgICBpZiAobV9zbG90c1tpXS5nZXQoKSAmJiBtX3Nsb3RzW2ldLT5jb25uZWN0
ZWQoKSkgeworICAgICAgICAgICAgR2FtZXBhZERldmljZUdsaWIqIGdhbWVwYWREZXZpY2UgPSBt
X3Nsb3RzW2ldLmdldCgpOworICAgICAgICAgICAgUmVmUHRyPEdhbWVwYWQ+IGdhbWVwYWQgPSBp
bnRvLT5pdGVtKGkpOworICAgICAgICAgICAgaWYgKCFnYW1lcGFkKQorICAgICAgICAgICAgICAg
IGdhbWVwYWQgPSBHYW1lcGFkOjpjcmVhdGUoKTsKKworICAgICAgICAgICAgZ2FtZXBhZC0+aW5k
ZXgoaSk7CisgICAgICAgICAgICBnYW1lcGFkLT5pZChnYW1lcGFkRGV2aWNlLT5pZCgpKTsKKyAg
ICAgICAgICAgIGdhbWVwYWQtPnRpbWVzdGFtcChnYW1lcGFkRGV2aWNlLT50aW1lc3RhbXAoKSk7
CisgICAgICAgICAgICBnYW1lcGFkLT5heGVzKGdhbWVwYWREZXZpY2UtPmF4ZXNDb3VudCgpLCBn
YW1lcGFkRGV2aWNlLT5heGVzRGF0YSgpKTsKKyAgICAgICAgICAgIGdhbWVwYWQtPmJ1dHRvbnMo
Z2FtZXBhZERldmljZS0+YnV0dG9uc0NvdW50KCksIGdhbWVwYWREZXZpY2UtPmJ1dHRvbnNEYXRh
KCkpOworCisgICAgICAgICAgICBpbnRvLT5zZXQoaSwgZ2FtZXBhZCk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgaW50by0+c2V0KGksIDApOworICAgIH0KK30KKwordm9pZCBHYW1lcGFk
c0dsaWI6Om9uVUV2ZW50Q2FsbGJhY2soR1VkZXZDbGllbnQqLCBnY2hhciogYWN0aW9uLCBHVWRl
dkRldmljZSogZGV2aWNlLCBncG9pbnRlciBkYXRhKQoreworICAgIGlmICghaXNHYW1lcGFkRGV2
aWNlKGRldmljZSkpCisgICAgICAgIHJldHVybjsKKworICAgIEdhbWVwYWRzR2xpYiogZ2FtZXBh
ZHNHbGliID0gcmVpbnRlcnByZXRfY2FzdDxHYW1lcGFkc0dsaWIqPihkYXRhKTsKKyAgICBTdHJp
bmcgZGV2aWNlRmlsZSA9IFN0cmluZzo6ZnJvbVVURjgoZ191ZGV2X2RldmljZV9nZXRfZGV2aWNl
X2ZpbGUoZGV2aWNlKSk7CisKKyAgICBpZiAoIWdfc3RyY21wMChhY3Rpb24sICJhZGQiKSkKKyAg
ICAgICAgZ2FtZXBhZHNHbGliLT5yZWdpc3RlckRldmljZShkZXZpY2VGaWxlKTsKKyAgICBlbHNl
IGlmICghZ19zdHJjbXAwKGFjdGlvbiwgInJlbW92ZSIpKQorICAgICAgICBnYW1lcGFkc0dsaWIt
PnVucmVnaXN0ZXJEZXZpY2UoZGV2aWNlRmlsZSk7Cit9CisKK2dib29sZWFuIEdhbWVwYWRzR2xp
Yjo6aXNHYW1lcGFkRGV2aWNlKEdVZGV2RGV2aWNlKiBkZXZpY2UpCit7CisgICAgY29uc3QgZ2No
YXIqIGRldmljZUZpbGUgPSBnX3VkZXZfZGV2aWNlX2dldF9kZXZpY2VfZmlsZShkZXZpY2UpOwor
ICAgIGNvbnN0IGdjaGFyKiBzeXNmc1BhdGggPSBnX3VkZXZfZGV2aWNlX2dldF9zeXNmc19wYXRo
KGRldmljZSk7CisgICAgaWYgKCFkZXZpY2VGaWxlIHx8ICFzeXNmc1BhdGgpCisgICAgICAgIHJl
dHVybiBGQUxTRTsKKworICAgIGlmICghZ191ZGV2X2RldmljZV9oYXNfcHJvcGVydHkoZGV2aWNl
LCAiSURfSU5QVVQiKSB8fCAhZ191ZGV2X2RldmljZV9oYXNfcHJvcGVydHkoZGV2aWNlLCAiSURf
SU5QVVRfSk9ZU1RJQ0siKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgcmV0dXJuIGdf
c3RyX2hhc19wcmVmaXgoZGV2aWNlRmlsZSwgIi9kZXYvaW5wdXQvanMiKTsKK30KKwordm9pZCBz
YW1wbGVHYW1lcGFkcyhHYW1lcGFkTGlzdCogaW50bykKK3sKKyAgICBERVBSRUNBVEVEX0RFRklO
RV9TVEFUSUNfTE9DQUwoR2FtZXBhZHNHbGliLCBnYW1lcGFkc0dsaWIsIChpbnRvLT5sZW5ndGgo
KSkpOworICAgIGdhbWVwYWRzR2xpYi51cGRhdGVHYW1lcGFkTGlzdChpbnRvKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQURfREVQUkVDQVRF
RCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbGludXgvR2Ft
ZXBhZERldmljZUxpbnV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbGlu
dXgvR2FtZXBhZERldmljZUxpbnV4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNTE3NTRkNTRlMWMxZjFmZjQ2
NGY3MDExNWY2OTc0M2NlYWI5NGFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ2FtZXBhZC9saW51eC9HYW1lcGFkRGV2aWNlTGludXguY3BwCkBAIC0wLDAgKzEs
OTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgWmFuIERvYmVyc2VrIDx6YW5kb2JlcnNl
a0BnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAq
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSAorICogREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJH
YW1lcGFkRGV2aWNlTGludXguaCIKKworI2lmIEVOQUJMRShHQU1FUEFEX0RFUFJFQ0FURUQpCisK
KyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHVu
aXN0ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitHYW1lcGFkRGV2aWNlTGludXg6OkdhbWVwYWREZXZpY2VMaW51eChTdHJpbmcgZGV2
aWNlRmlsZSkKKyAgICA6IG1fZmlsZURlc2NyaXB0b3IoLTEpCisgICAgLCBtX2Nvbm5lY3RlZChm
YWxzZSkKKyAgICAsIG1fbGFzdFRpbWVzdGFtcCgwKQoreworICAgIC8vIEZJWE1FOiBMb2cgZXJy
b3JzIHdoZW4gcmV0dXJuaW5nIGVhcmx5LgorICAgIG1fZmlsZURlc2NyaXB0b3IgPSBvcGVuKGRl
dmljZUZpbGUudXRmOCgpLmRhdGEoKSwgT19SRE9OTFkgfCBPX05PTkJMT0NLKTsKKyAgICBpZiAo
bV9maWxlRGVzY3JpcHRvciA9PSAtMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2hhciBkZXZp
Y2VOYW1lWzEwMjRdOworICAgIGlmIChpb2N0bChtX2ZpbGVEZXNjcmlwdG9yLCBKU0lPQ0dOQU1F
KHNpemVvZihkZXZpY2VOYW1lKSksIGRldmljZU5hbWUpIDwgMCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fZGV2aWNlTmFtZSA9IFN0cmluZyhkZXZpY2VOYW1lKS5zaW1wbGlmeVdoaXRlU3BhY2Uo
KTsKKworICAgIHVpbnQ4X3QgbnVtYmVyT2ZBeGVzOworICAgIHVpbnQ4X3QgbnVtYmVyT2ZCdXR0
b25zOworICAgIGlmIChpb2N0bChtX2ZpbGVEZXNjcmlwdG9yLCBKU0lPQ0dBWEVTLCAmbnVtYmVy
T2ZBeGVzKSA8IDAgfHwgaW9jdGwobV9maWxlRGVzY3JpcHRvciwgSlNJT0NHQlVUVE9OUywgJm51
bWJlck9mQnV0dG9ucykgPCAwKQorICAgICAgICByZXR1cm47CisgICAgbV9heGVzLmZpbGwoMC4w
LCBudW1iZXJPZkF4ZXMpOworICAgIG1fYnV0dG9ucy5maWxsKDAuMCwgbnVtYmVyT2ZCdXR0b25z
KTsKK30KKworR2FtZXBhZERldmljZUxpbnV4Ojp+R2FtZXBhZERldmljZUxpbnV4KCkKK3sKKyAg
ICBpZiAobV9maWxlRGVzY3JpcHRvciAhPSAtMSkKKyAgICAgICAgY2xvc2UobV9maWxlRGVzY3Jp
cHRvcik7Cit9CisKK3ZvaWQgR2FtZXBhZERldmljZUxpbnV4Ojp1cGRhdGVGb3JFdmVudChzdHJ1
Y3QganNfZXZlbnQgZXZlbnQpCit7CisgICAgaWYgKCEoZXZlbnQudHlwZSAmIEpTX0VWRU5UX0FY
SVMgfHwgZXZlbnQudHlwZSAmIEpTX0VWRU5UX0JVVFRPTikpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIE1hcmsgdGhlIGRldmljZSBhcyBjb25uZWN0ZWQgb25seSBpZiBpdCBpcyBub3QgeWV0
IGNvbm5lY3RlZCwgdGhlIGV2ZW50IGlzIG5vdCBhbiBpbml0aWFsaXphdGlvbgorICAgIC8vIGFu
ZCB0aGUgdmFsdWUgaXMgbm90IDAgKGluZGljYXRpbmcgYSBnZW51aW5lIGludGVyYWN0aW9uIHdp
dGggdGhlIGRldmljZSkuCisgICAgaWYgKCFtX2Nvbm5lY3RlZCAmJiAhKGV2ZW50LnR5cGUgJiBK
U19FVkVOVF9JTklUKSAmJiBldmVudC52YWx1ZSkKKyAgICAgICAgbV9jb25uZWN0ZWQgPSB0cnVl
OworCisgICAgaWYgKGV2ZW50LnR5cGUgJiBKU19FVkVOVF9BWElTKQorICAgICAgICBtX2F4ZXNb
ZXZlbnQubnVtYmVyXSA9IG5vcm1hbGl6ZUF4aXNWYWx1ZShldmVudC52YWx1ZSk7CisgICAgZWxz
ZSBpZiAoZXZlbnQudHlwZSAmIEpTX0VWRU5UX0JVVFRPTikKKyAgICAgICAgbV9idXR0b25zW2V2
ZW50Lm51bWJlcl0gPSBub3JtYWxpemVCdXR0b25WYWx1ZShldmVudC52YWx1ZSk7CisKKyAgICBt
X2xhc3RUaW1lc3RhbXAgPSBldmVudC50aW1lOworfQorCitmbG9hdCBHYW1lcGFkRGV2aWNlTGlu
dXg6Om5vcm1hbGl6ZUF4aXNWYWx1ZShzaG9ydCB2YWx1ZSkKK3sKKyAgICAvLyBOb3JtYWxpemUg
ZnJvbSByYW5nZSBbLTMyNzY3LCAzMjc2N10gaW50byByYW5nZSBbLTEuMCwgMS4wXQorICAgIHJl
dHVybiB2YWx1ZSAvIDMyNzY3LjBmOworfQorCitmbG9hdCBHYW1lcGFkRGV2aWNlTGludXg6Om5v
cm1hbGl6ZUJ1dHRvblZhbHVlKHNob3J0IHZhbHVlKQoreworICAgIC8vIE5vcm1hbGl6ZSBmcm9t
IHJhbmdlIFswLCAxXSBpbnRvIHJhbmdlIFswLjAsIDEuMF0KKyAgICByZXR1cm4gdmFsdWUgLyAx
LjBmOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FN
RVBBRF9ERVBSRUNBVEVEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2Ft
ZXBhZC9saW51eC9HYW1lcGFkRGV2aWNlTGludXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dhbWVwYWQvbGludXgvR2FtZXBhZERldmljZUxpbnV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTljMDliMjdm
NTRjOWQ5ZDlmYzBhMmI0ODNhNGUwNmExYjI2YTI2NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbGludXgvR2FtZXBhZERldmljZUxpbnV4LmgKQEAg
LTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBaYW4gRG9iZXJzZWsgPHph
bmRvYmVyc2VrQGdtYWlsLmNvbT4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUg
bWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAor
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBHYW1lcGFkRGV2aWNlTGlu
dXhfaAorI2RlZmluZSBHYW1lcGFkRGV2aWNlTGludXhfaAorCisjaWYgRU5BQkxFKEdBTUVQQURf
REVQUkVDQVRFRCkKKworI2luY2x1ZGUgPGxpbnV4L2pveXN0aWNrLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEdhbWVwYWREZXZpY2VMaW51eCB7CitwdWJsaWM6CisgICAgYm9v
bCBjb25uZWN0ZWQoKSB7IHJldHVybiBtX2Nvbm5lY3RlZDsgfTsKKworICAgIFN0cmluZyBpZCgp
IHsgcmV0dXJuIG1fZGV2aWNlTmFtZTsgfQorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lc3Rh
bXAoKSB7IHJldHVybiBtX2xhc3RUaW1lc3RhbXA7IH0KKworICAgIHVuc2lnbmVkIGF4ZXNDb3Vu
dCgpIHsgcmV0dXJuIG1fYXhlcy5zaXplKCk7IH0KKyAgICBmbG9hdCogYXhlc0RhdGEoKSB7IHJl
dHVybiBtX2F4ZXMuZGF0YSgpOyB9CisKKyAgICB1bnNpZ25lZCBidXR0b25zQ291bnQoKSB7IHJl
dHVybiBtX2J1dHRvbnMuc2l6ZSgpOyB9CisgICAgZmxvYXQqIGJ1dHRvbnNEYXRhKCkgeyByZXR1
cm4gbV9idXR0b25zLmRhdGEoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgR2FtZXBhZERldmljZUxp
bnV4KFN0cmluZyBkZXZpY2VGaWxlKTsKKyAgICB+R2FtZXBhZERldmljZUxpbnV4KCk7CisKKyAg
ICB2b2lkIHVwZGF0ZUZvckV2ZW50KHN0cnVjdCBqc19ldmVudCk7CisgICAgaW50IG1fZmlsZURl
c2NyaXB0b3I7CisKK3ByaXZhdGU6CisgICAgZmxvYXQgbm9ybWFsaXplQXhpc1ZhbHVlKHNob3J0
IHZhbHVlKTsKKyAgICBmbG9hdCBub3JtYWxpemVCdXR0b25WYWx1ZShzaG9ydCB2YWx1ZSk7CisK
KyAgICBib29sIG1fY29ubmVjdGVkOworICAgIFN0cmluZyBtX2RldmljZU5hbWU7CisgICAgdW5z
aWduZWQgbG9uZyBsb25nIG1fbGFzdFRpbWVzdGFtcDsKKworICAgIFZlY3RvcjxmbG9hdD4gbV9h
eGVzOworICAgIFZlY3RvcjxmbG9hdD4gbV9idXR0b25zOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQURfREVQUkVDQVRFRCkKKworI2VuZGlm
IC8vIEdhbWVwYWREZXZpY2VMaW51eF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9nYW1lcGFkL21hYy9ISURHYW1lcGFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dhbWVwYWQvbWFjL0hJREdhbWVwYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3YzE4ZTNlNjM0YjU5ZWIw
YmEwMmUxZWUxOGFkZmQ1ZTVkN2RiZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9ISURHYW1lcGFkLmNwcApAQCAtMCwwICsxLDE5MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJISURHYW1lcGFkLmgi
CisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKworI2luY2x1ZGUgPElPS2l0L2hpZC9JT0hJREVsZW1l
bnQuaD4KKyNpbmNsdWRlIDxJT0tpdC9oaWQvSU9ISURVc2FnZVRhYmxlcy5oPgorI2luY2x1ZGUg
PElPS2l0L2hpZC9JT0hJRFZhbHVlLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0hJREdhbWVwYWQ6OkhJREdhbWVwYWQoSU9I
SUREZXZpY2VSZWYgaGlkRGV2aWNlLCB1bnNpZ25lZCBpbmRleCkKKyAgICA6IFBsYXRmb3JtR2Ft
ZXBhZChpbmRleCkKKyAgICAsIG1faGlkRGV2aWNlKGhpZERldmljZSkKK3sKKyAgICBtX2Nvbm5l
Y3RUaW1lID0gbV9sYXN0VXBkYXRlVGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgp
OworCisgICAgQ0ZOdW1iZXJSZWYgY2ZWZW5kb3JJRCA9IChDRk51bWJlclJlZilJT0hJRERldmlj
ZUdldFByb3BlcnR5KGhpZERldmljZSwgQ0ZTVFIoa0lPSElEVmVuZG9ySURLZXkpKTsKKyAgICBD
Rk51bWJlclJlZiBjZlByb2R1Y3RJRCA9IChDRk51bWJlclJlZilJT0hJRERldmljZUdldFByb3Bl
cnR5KGhpZERldmljZSwgQ0ZTVFIoa0lPSElEUHJvZHVjdElES2V5KSk7CisKKyAgICBpbnQgdmVu
ZG9ySUQsIHByb2R1Y3RJRDsKKyAgICBDRk51bWJlckdldFZhbHVlKGNmVmVuZG9ySUQsIGtDRk51
bWJlckludFR5cGUsICZ2ZW5kb3JJRCk7CisgICAgQ0ZOdW1iZXJHZXRWYWx1ZShjZlByb2R1Y3RJ
RCwga0NGTnVtYmVySW50VHlwZSwgJnByb2R1Y3RJRCk7CisKKyAgICBDRlN0cmluZ1JlZiBjZlBy
b2R1Y3ROYW1lID0gKENGU3RyaW5nUmVmKUlPSElERGV2aWNlR2V0UHJvcGVydHkoaGlkRGV2aWNl
LCBDRlNUUihrSU9ISURQcm9kdWN0S2V5KSk7CisgICAgU3RyaW5nIHByb2R1Y3ROYW1lKGNmUHJv
ZHVjdE5hbWUpOworCisgICAgLy8gQ3VycmVudGx5IHRoZSBzcGVjIGhhcyBubyBmb3JtYXR0aW5n
IGZvciB0aGUgaWQgc3RyaW5nLgorICAgIC8vIFRoaXMgc3RyaW5nIGZvcm1hdHRpbmcgbWF0Y2hl
cyBGaXJlZm94LgorICAgIG1faWQgPSBTdHJpbmc6OmZvcm1hdCgiJXgtJXgtJXMiLCB2ZW5kb3JJ
RCwgcHJvZHVjdElELCBwcm9kdWN0TmFtZS51dGY4KCkuZGF0YSgpKTsKKworICAgIGluaXRFbGVt
ZW50cygpOworfQorCit2b2lkIEhJREdhbWVwYWQ6OmdldEN1cnJlbnRWYWx1ZUZvckVsZW1lbnQo
Y29uc3QgSElER2FtZXBhZEVsZW1lbnQmIGdhbWVwYWRFbGVtZW50KQoreworICAgIElPSElERWxl
bWVudFJlZiBlbGVtZW50ID0gZ2FtZXBhZEVsZW1lbnQuaW9oaWRFbGVtZW50LmdldCgpOworICAg
IElPSElEVmFsdWVSZWYgdmFsdWU7CisgICAgaWYgKElPSElERGV2aWNlR2V0VmFsdWUoSU9ISURF
bGVtZW50R2V0RGV2aWNlKGVsZW1lbnQpLCBlbGVtZW50LCAmdmFsdWUpID09IGtJT1JldHVyblN1
Y2Nlc3MpCisgICAgICAgIHZhbHVlQ2hhbmdlZCh2YWx1ZSk7Cit9CisKK3ZvaWQgSElER2FtZXBh
ZDo6aW5pdEVsZW1lbnRzKCkKK3sKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZWxlbWVudHMg
PSBhZG9wdENGKElPSElERGV2aWNlQ29weU1hdGNoaW5nRWxlbWVudHMobV9oaWREZXZpY2UuZ2V0
KCksIE5VTEwsIGtJT0hJRE9wdGlvbnNUeXBlTm9uZSkpOworICAgIGluaXRFbGVtZW50c0Zyb21B
cnJheShlbGVtZW50cy5nZXQoKSk7CisKKyAgICAvLyBCdXR0b25zIGFyZSBzcGVjaWZpZWQgdG8g
YXBwZWFyIGhpZ2hlc3QgcHJpb3JpdHkgZmlyc3QgaW4gdGhlIGFycmF5LgorICAgIHN0ZDo6c29y
dChtX2J1dHRvbnMuYmVnaW4oKSwgbV9idXR0b25zLmVuZCgpLCBbXShhdXRvJiBhLCBhdXRvJiBi
KSB7CisgICAgICAgIHJldHVybiBhLT5wcmlvcml0eSA8IGItPnByaW9yaXR5OworICAgIH0pOwor
CisgICAgbV9heGlzVmFsdWVzLnJlc2l6ZShtX2F4ZXMuc2l6ZSgpKTsKKyAgICBtX2J1dHRvblZh
bHVlcy5yZXNpemUobV9idXR0b25zLnNpemUoKSk7CisKKyAgICBmb3IgKGF1dG8mIGJ1dHRvbiA6
IG1fYnV0dG9ucykKKyAgICAgICAgZ2V0Q3VycmVudFZhbHVlRm9yRWxlbWVudCgqYnV0dG9uKTsK
KworICAgIGZvciAoYXV0byYgYXhpcyA6IG1fYXhlcykKKyAgICAgICAgZ2V0Q3VycmVudFZhbHVl
Rm9yRWxlbWVudCgqYXhpcyk7Cit9CisKK3ZvaWQgSElER2FtZXBhZDo6aW5pdEVsZW1lbnRzRnJv
bUFycmF5KENGQXJyYXlSZWYgZWxlbWVudHMpCit7CisgICAgZm9yIChDRkluZGV4IGkgPSAwLCBj
b3VudCA9IENGQXJyYXlHZXRDb3VudChlbGVtZW50cyk7IGkgPCBjb3VudDsgKytpKSB7CisgICAg
ICAgIElPSElERWxlbWVudFJlZiBlbGVtZW50ID0gKElPSElERWxlbWVudFJlZilDRkFycmF5R2V0
VmFsdWVBdEluZGV4KGVsZW1lbnRzLCBpKTsKKyAgICAgICAgaWYgKENGR2V0VHlwZUlEKGVsZW1l
bnQpICE9IElPSElERWxlbWVudEdldFR5cGVJRCgpKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgLy8gQXMgYSBwaHlzaWNhbCBlbGVtZW50IGNhbiBhcHBlYXIgaW4gdGhlIGRldmlj
ZSB0d2ljZSAoaW4gZGlmZmVyZW50IGNvbGxlY3Rpb25zKSBhbmQgY2FuIGJlCisgICAgICAgIC8v
IHJlcHJlc2VudGVkIGJ5IGRpZmZlcmVudCBJT0hJREVsZW1lbnRSZWYgb2JqZWN0cywgd2UgbG9v
ayBhdCB0aGUgSU9ISURFbGVtZW50Q29va2llIHdoaWNoCisgICAgICAgIC8vIGlzIG1lYW50IHRv
IGJlIHVuaXF1ZSBmb3IgZWFjaCBwaHlzaWNhbCBlbGVtZW50LgorICAgICAgICBJT0hJREVsZW1l
bnRDb29raWUgY29va2llID0gSU9ISURFbGVtZW50R2V0Q29va2llKGVsZW1lbnQpOworICAgICAg
ICBpZiAobV9lbGVtZW50TWFwLmNvbnRhaW5zKGNvb2tpZSkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBJT0hJREVsZW1lbnRUeXBlIHR5cGUgPSBJT0hJREVsZW1lbnRHZXRUeXBl
KGVsZW1lbnQpOworCisgICAgICAgIGlmICgodHlwZSA9PSBrSU9ISURFbGVtZW50VHlwZUlucHV0
X01pc2MgfHwgdHlwZSA9PSBrSU9ISURFbGVtZW50VHlwZUlucHV0X0J1dHRvbikgJiYgbWF5YmVB
ZGRCdXR0b24oZWxlbWVudCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAo
KHR5cGUgPT0ga0lPSElERWxlbWVudFR5cGVJbnB1dF9NaXNjIHx8IHR5cGUgPT0ga0lPSElERWxl
bWVudFR5cGVJbnB1dF9BeGlzKSAmJiBtYXliZUFkZEF4aXMoZWxlbWVudCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBpZiAodHlwZSA9PSBrSU9ISURFbGVtZW50VHlwZUNvbGxl
Y3Rpb24pCisgICAgICAgICAgICBpbml0RWxlbWVudHNGcm9tQXJyYXkoSU9ISURFbGVtZW50R2V0
Q2hpbGRyZW4oZWxlbWVudCkpOworICAgIH0KK30KKworYm9vbCBISURHYW1lcGFkOjptYXliZUFk
ZEJ1dHRvbihJT0hJREVsZW1lbnRSZWYgZWxlbWVudCkKK3sKKyAgICB1aW50MzJfdCB1c2FnZVBh
Z2UgPSBJT0hJREVsZW1lbnRHZXRVc2FnZVBhZ2UoZWxlbWVudCk7CisgICAgaWYgKHVzYWdlUGFn
ZSAhPSBrSElEUGFnZV9CdXR0b24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVpbnQz
Ml90IHVzYWdlID0gSU9ISURFbGVtZW50R2V0VXNhZ2UoZWxlbWVudCk7CisgICAgaWYgKCF1c2Fn
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ0ZJbmRleCBtaW4gPSBJT0hJREVsZW1l
bnRHZXRMb2dpY2FsTWluKGVsZW1lbnQpOworICAgIENGSW5kZXggbWF4ID0gSU9ISURFbGVtZW50
R2V0TG9naWNhbE1heChlbGVtZW50KTsKKworICAgIG1fYnV0dG9ucy5hcHBlbmQoc3RkOjptYWtl
X3VuaXF1ZTxISURHYW1lcGFkQnV0dG9uPih1c2FnZSwgbWluLCBtYXgsIGVsZW1lbnQpKTsKKwor
ICAgIElPSElERWxlbWVudENvb2tpZSBjb29raWUgPSBJT0hJREVsZW1lbnRHZXRDb29raWUoZWxl
bWVudCk7CisgICAgbV9lbGVtZW50TWFwLnNldChjb29raWUsIG1fYnV0dG9ucy5sYXN0KCkuZ2V0
KCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSElER2FtZXBhZDo6bWF5YmVBZGRB
eGlzKElPSElERWxlbWVudFJlZiBlbGVtZW50KQoreworICAgIHVpbnQzMl90IHVzYWdlUGFnZSA9
IElPSElERWxlbWVudEdldFVzYWdlUGFnZShlbGVtZW50KTsKKyAgICBpZiAodXNhZ2VQYWdlICE9
IGtISURQYWdlX0dlbmVyaWNEZXNrdG9wKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1
aW50MzJfdCB1c2FnZSA9IElPSElERWxlbWVudEdldFVzYWdlKGVsZW1lbnQpOworICAgIC8vIFRo
aXMgcmFuZ2UgY292ZXJzIHRoZSBzdGFuZGFyZCBheGlzIHVzYWdlcy4KKyAgICBpZiAodXNhZ2Ug
PCBrSElEVXNhZ2VfR0RfWCB8fCB1c2FnZSA+IGtISURVc2FnZV9HRF9SeikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgQ0ZJbmRleCBtaW4gPSBJT0hJREVsZW1lbnRHZXRQaHlzaWNhbE1p
bihlbGVtZW50KTsKKyAgICBDRkluZGV4IG1heCA9IElPSElERWxlbWVudEdldFBoeXNpY2FsTWF4
KGVsZW1lbnQpOworCisgICAgbV9heGVzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEhJREdhbWVw
YWRBeGlzPihtaW4sIG1heCwgZWxlbWVudCkpOworCisgICAgSU9ISURFbGVtZW50Q29va2llIGNv
b2tpZSA9IElPSElERWxlbWVudEdldENvb2tpZShlbGVtZW50KTsKKyAgICBtX2VsZW1lbnRNYXAu
c2V0KGNvb2tpZSwgbV9heGVzLmxhc3QoKS5nZXQoKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBISURHYW1lcGFkOjp2YWx1ZUNoYW5nZWQoSU9ISURWYWx1ZVJlZiB2YWx1ZSkKK3sK
KyAgICBJT0hJREVsZW1lbnRDb29raWUgY29va2llID0gSU9ISURFbGVtZW50R2V0Q29va2llKElP
SElEVmFsdWVHZXRFbGVtZW50KHZhbHVlKSk7CisgICAgSElER2FtZXBhZEVsZW1lbnQqIGVsZW1l
bnQgPSBtX2VsZW1lbnRNYXAuZ2V0KGNvb2tpZSk7CisKKyAgICAvLyBUaGlzIG1pZ2h0IGJlIGFu
IGVsZW1lbnQgd2UgZG9uJ3QgY3VycmVudGx5IGhhbmRsZSBhcyBpbnB1dCBzbyB3ZSBjYW4gc2tp
cCBpdC4KKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGVsZW1lbnQt
PnJhd1ZhbHVlID0gSU9ISURWYWx1ZUdldFNjYWxlZFZhbHVlKHZhbHVlLCBrSU9ISURWYWx1ZVNj
YWxlVHlwZVBoeXNpY2FsKTsKKworICAgIGlmIChlbGVtZW50LT5pc0J1dHRvbigpKSB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J1dHRvbnMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIGlmIChtX2J1dHRvbnNbaV0uZ2V0KCkgPT0gZWxlbWVudCkKKyAgICAgICAgICAg
ICAgICBtX2J1dHRvblZhbHVlc1tpXSA9IGVsZW1lbnQtPm5vcm1hbGl6ZWRWYWx1ZSgpOworICAg
ICAgICB9CisgICAgfSBlbHNlIGlmIChlbGVtZW50LT5pc0F4aXMoKSkgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9heGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBp
ZiAobV9heGVzW2ldLmdldCgpID09IGVsZW1lbnQpCisgICAgICAgICAgICAgICAgbV9heGlzVmFs
dWVzW2ldID0gZWxlbWVudC0+bm9ybWFsaXplZFZhbHVlKCk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBtX2xhc3RVcGRhdGVUaW1l
ID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvSElER2FtZXBhZC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ2FtZXBhZC9tYWMvSElER2FtZXBhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzYWZlYjMyNjdk
MDQyODg3ZWQ1ZTBmZGY5OTkxYjljNzUwYTRjOGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9ISURHYW1lcGFkLmgKQEAgLTAsMCArMSwxMjYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHQU1FUEFEKQorCisj
aW5jbHVkZSAiUGxhdGZvcm1HYW1lcGFkLmgiCisjaW5jbHVkZSA8SU9LaXQvaGlkL0lPSElERGV2
aWNlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEhJREdhbWVwYWRFbGVtZW50IHsK
KyAgICBISURHYW1lcGFkRWxlbWVudChkb3VibGUgdGhlTWluLCBkb3VibGUgdGhlTWF4LCBJT0hJ
REVsZW1lbnRSZWYgZWxlbWVudCkKKyAgICAgICAgOiBtaW4odGhlTWluKQorICAgICAgICAsIG1h
eCh0aGVNYXgpCisgICAgICAgICwgcmF3VmFsdWUodGhlTWluKQorICAgICAgICAsIGlvaGlkRWxl
bWVudChlbGVtZW50KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+SElER2FtZXBh
ZEVsZW1lbnQoKQorICAgIHsKKyAgICB9CisKKyAgICBkb3VibGUgbWluOworICAgIGRvdWJsZSBt
YXg7CisgICAgZG91YmxlIHJhd1ZhbHVlOworICAgIFJldGFpblB0cjxJT0hJREVsZW1lbnRSZWY+
IGlvaGlkRWxlbWVudDsKKworICAgIHZpcnR1YWwgYm9vbCBpc0J1dHRvbigpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQXhpcygpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisKKyAgICB2aXJ0dWFsIGRvdWJsZSBub3JtYWxpemVkVmFsdWUoKSA9IDA7Cit9Owor
CitzdHJ1Y3QgSElER2FtZXBhZEJ1dHRvbiA6IEhJREdhbWVwYWRFbGVtZW50IHsKKyAgICBISURH
YW1lcGFkQnV0dG9uKHVpbnQzMl90IHRoZVByaW9yaXR5LCBkb3VibGUgbWluLCBkb3VibGUgbWF4
LCBJT0hJREVsZW1lbnRSZWYgZWxlbWVudCkKKyAgICAgICAgOiBISURHYW1lcGFkRWxlbWVudCht
aW4sIG1heCwgZWxlbWVudCkKKyAgICAgICAgLCBwcmlvcml0eSh0aGVQcmlvcml0eSkKKyAgICB7
CisgICAgfQorCisgICAgdWludDMyX3QgcHJpb3JpdHk7CisKKyAgICBib29sIGlzQnV0dG9uKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gQnV0dG9ucyBub3JtYWxp
emUgdG8gdGhlIHJhbmdlICgwLjApIC0gKDEuMCkKKyAgICBkb3VibGUgbm9ybWFsaXplZFZhbHVl
KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiAocmF3VmFsdWUgLSBtaW4pIC8gKG1h
eCAtIG1pbik7CisgICAgfQorfTsKKworc3RydWN0IEhJREdhbWVwYWRBeGlzIDogSElER2FtZXBh
ZEVsZW1lbnQgeworICAgIEhJREdhbWVwYWRBeGlzKGRvdWJsZSBtaW4sIGRvdWJsZSBtYXgsIElP
SElERWxlbWVudFJlZiBlbGVtZW50KQorICAgICAgICA6IEhJREdhbWVwYWRFbGVtZW50KG1pbiwg
bWF4LCBlbGVtZW50KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlzQXhpcygpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIC8vIEF4ZXMgbm9ybWFsaXplIHRvIHRoZSBy
YW5nZSAoLTEuMCkgLSAoMS4wKQorICAgIGRvdWJsZSBub3JtYWxpemVkVmFsdWUoKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgcmV0dXJuICgoKHJhd1ZhbHVlIC0gbWluKSAvIChtYXggLSBtaW4p
KSAqIDIpIC0gMTsKKyAgICB9Cit9OworCitjbGFzcyBISURHYW1lcGFkIDogcHVibGljIFBsYXRm
b3JtR2FtZXBhZCB7CitwdWJsaWM6CisgICAgSElER2FtZXBhZChJT0hJRERldmljZVJlZiwgdW5z
aWduZWQgaW5kZXgpOworCisgICAgSU9ISUREZXZpY2VSZWYgaGlkRGV2aWNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9oaWREZXZpY2UuZ2V0KCk7IH0KKworICAgIHZvaWQgdmFsdWVDaGFuZ2VkKElPSElE
VmFsdWVSZWYpOworCisgICAgY29uc3QgVmVjdG9yPGRvdWJsZT4mIGF4aXNWYWx1ZXMoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBtX2F4aXNWYWx1ZXM7IH0KKyAgICBjb25zdCBWZWN0b3I8ZG91Ymxl
PiYgYnV0dG9uVmFsdWVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9idXR0b25WYWx1ZXM7IH0K
KworcHJpdmF0ZToKKyAgICB2b2lkIGluaXRFbGVtZW50cygpOworICAgIHZvaWQgaW5pdEVsZW1l
bnRzRnJvbUFycmF5KENGQXJyYXlSZWYpOworCisgICAgYm9vbCBtYXliZUFkZEJ1dHRvbihJT0hJ
REVsZW1lbnRSZWYpOworICAgIGJvb2wgbWF5YmVBZGRBeGlzKElPSElERWxlbWVudFJlZik7CisK
KyAgICB2b2lkIGdldEN1cnJlbnRWYWx1ZUZvckVsZW1lbnQoY29uc3QgSElER2FtZXBhZEVsZW1l
bnQmKTsKKworICAgIFJldGFpblB0cjxJT0hJRERldmljZVJlZj4gbV9oaWREZXZpY2U7CisKKyAg
ICBIYXNoTWFwPElPSElERWxlbWVudENvb2tpZSwgSElER2FtZXBhZEVsZW1lbnQqPiBtX2VsZW1l
bnRNYXA7CisKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEhJREdhbWVwYWRCdXR0b24+PiBt
X2J1dHRvbnM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxISURHYW1lcGFkQXhpcz4+IG1f
YXhlczsKKyAgICBWZWN0b3I8ZG91YmxlPiBtX2J1dHRvblZhbHVlczsKKyAgICBWZWN0b3I8ZG91
YmxlPiBtX2F4aXNWYWx1ZXM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dhbWVwYWQvbWFjL0hJREdhbWVwYWRQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9nYW1lcGFkL21hYy9ISURHYW1lcGFkUHJvdmlkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZmNDQx
ZTZmYWJmNmI3YjA5YTc2NGI2NjIzYmIyYzQzNDg2YTBjZDUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9ISURHYW1lcGFkUHJvdmlkZXIuY3Bw
CkBAIC0wLDAgKzEsMjU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkhJREdhbWVwYWRQcm92aWRlci5oIgorCisjaWYgRU5BQkxFKEdBTUVQQUQpCisKKyNp
bmNsdWRlICJHYW1lcGFkUHJvdmlkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1HYW1lcGFkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3Rh
dGljIGNvbnN0IGRvdWJsZSBDb25uZWN0aW9uRGVsYXlJbnRlcnZhbCA9IDAuNTsKK3N0YXRpYyBj
b25zdCBkb3VibGUgSW5wdXROb3RpZmljYXRpb25EZWxheSA9IDAuMDU7CisKK3N0YXRpYyBSZXRh
aW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBkZXZpY2VNYXRjaGluZ0RpY3Rpb25hcnkodWludDMyX3Qg
dXNhZ2VQYWdlLCB1aW50MzJfdCB1c2FnZSkKK3sKKyAgICBBU1NFUlQodXNhZ2VQYWdlKTsKKyAg
ICBBU1NFUlQodXNhZ2UpOworCisgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBwYWdlTnVtYmVy
ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJ
bnRUeXBlLCAmdXNhZ2VQYWdlKSk7CisgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiB1c2FnZU51
bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVt
YmVySW50VHlwZSwgJnVzYWdlKSk7CisKKyAgICBDRlN0cmluZ1JlZiBrZXlzW10gPSB7IENGU1RS
KGtJT0hJRERldmljZVVzYWdlUGFnZUtleSksIENGU1RSKGtJT0hJRERldmljZVVzYWdlS2V5KSB9
OworICAgIENGTnVtYmVyUmVmIHZhbHVlc1tdID0geyBwYWdlTnVtYmVyLmdldCgpLCB1c2FnZU51
bWJlci5nZXQoKSB9OworCisgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIChjb25zdCB2b2lkKiopa2V5cywgKGNvbnN0IHZvaWQqKil2YWx1
ZXMsIDIsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5
VmFsdWVDYWxsQmFja3MpKTsKK30KKworc3RhdGljIHZvaWQgZGV2aWNlQWRkZWRDYWxsYmFjayh2
b2lkKiBjb250ZXh0LCBJT1JldHVybiwgdm9pZCosIElPSElERGV2aWNlUmVmIGRldmljZSkKK3sK
KyAgICBISURHYW1lcGFkUHJvdmlkZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8SElER2FtZXBh
ZFByb3ZpZGVyKj4oY29udGV4dCk7CisgICAgbGlzdGVuZXItPmRldmljZUFkZGVkKGRldmljZSk7
Cit9CisKK3N0YXRpYyB2b2lkIGRldmljZVJlbW92ZWRDYWxsYmFjayh2b2lkKiBjb250ZXh0LCBJ
T1JldHVybiwgdm9pZCosIElPSElERGV2aWNlUmVmIGRldmljZSkKK3sKKyAgICBISURHYW1lcGFk
UHJvdmlkZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8SElER2FtZXBhZFByb3ZpZGVyKj4oY29u
dGV4dCk7CisgICAgbGlzdGVuZXItPmRldmljZVJlbW92ZWQoZGV2aWNlKTsKK30KKworc3RhdGlj
IHZvaWQgZGV2aWNlVmFsdWVzQ2hhbmdlZENhbGxiYWNrKHZvaWQqIGNvbnRleHQsIElPUmV0dXJu
IHJlc3VsdCwgdm9pZCosIElPSElEVmFsdWVSZWYgdmFsdWUpCit7CisgICAgLy8gQSBub24temVy
byByZXN1bHQgdmFsdWUgaW5kaWNhdGVzIGFuIGVycm9yIHRoYXQgd2UgY2FuIGRvIG5vdGhpbmcg
YWJvdXQgZm9yIGlucHV0IHZhbHVlcy4KKyAgICBpZiAocmVzdWx0KQorICAgICAgICByZXR1cm47
CisKKyAgICBISURHYW1lcGFkUHJvdmlkZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8SElER2Ft
ZXBhZFByb3ZpZGVyKj4oY29udGV4dCk7CisgICAgbGlzdGVuZXItPnZhbHVlc0NoYW5nZWQodmFs
dWUpOworfQorCitISURHYW1lcGFkUHJvdmlkZXImIEhJREdhbWVwYWRQcm92aWRlcjo6c2luZ2xl
dG9uKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SElER2FtZXBhZFByb3ZpZGVyPiBz
aGFyZWRMaXN0ZW5lcjsKKyAgICByZXR1cm4gc2hhcmVkTGlzdGVuZXI7Cit9CisKK0hJREdhbWVw
YWRQcm92aWRlcjo6SElER2FtZXBhZFByb3ZpZGVyKCkKKyAgICA6IG1fc2hvdWxkRGlzcGF0Y2hD
YWxsYmFja3MoZmFsc2UpCisgICAgLCBtX2Nvbm5lY3Rpb25EZWxheVRpbWVyKCp0aGlzLCAmSElE
R2FtZXBhZFByb3ZpZGVyOjpjb25uZWN0aW9uRGVsYXlUaW1lckZpcmVkKQorICAgICwgbV9pbnB1
dE5vdGlmaWNhdGlvblRpbWVyKCp0aGlzLCAmSElER2FtZXBhZFByb3ZpZGVyOjppbnB1dE5vdGlm
aWNhdGlvblRpbWVyRmlyZWQpCit7CisgICAgbV9tYW5hZ2VyID0gYWRvcHRDRihJT0hJRE1hbmFn
ZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0lPSElET3B0aW9uc1R5cGVOb25lKSk7CisK
KyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBqb3lzdGlja0RpY3Rpb25hcnkgPSBkZXZp
Y2VNYXRjaGluZ0RpY3Rpb25hcnkoa0hJRFBhZ2VfR2VuZXJpY0Rlc2t0b3AsIGtISURVc2FnZV9H
RF9Kb3lzdGljayk7CisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gZ2FtZXBhZERpY3Rp
b25hcnkgPSBkZXZpY2VNYXRjaGluZ0RpY3Rpb25hcnkoa0hJRFBhZ2VfR2VuZXJpY0Rlc2t0b3As
IGtISURVc2FnZV9HRF9HYW1lUGFkKTsKKworICAgIENGRGljdGlvbmFyeVJlZiBkZXZpY2VzW10g
PSB7IGpveXN0aWNrRGljdGlvbmFyeS5nZXQoKSwgZ2FtZXBhZERpY3Rpb25hcnkuZ2V0KCkgfTsK
KworICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBtYXRjaGluZ0FycmF5ID0gYWRvcHRDRihDRkFy
cmF5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIChjb25zdCB2b2lkKiopZGV2aWNlcywgMiwg
JmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOworCisgICAgSU9ISURNYW5hZ2VyU2V0RGV2aWNlTWF0
Y2hpbmdNdWx0aXBsZShtX21hbmFnZXIuZ2V0KCksIG1hdGNoaW5nQXJyYXkuZ2V0KCkpOworICAg
IElPSElETWFuYWdlclJlZ2lzdGVyRGV2aWNlTWF0Y2hpbmdDYWxsYmFjayhtX21hbmFnZXIuZ2V0
KCksIGRldmljZUFkZGVkQ2FsbGJhY2ssIHRoaXMpOworICAgIElPSElETWFuYWdlclJlZ2lzdGVy
RGV2aWNlUmVtb3ZhbENhbGxiYWNrKG1fbWFuYWdlci5nZXQoKSwgZGV2aWNlUmVtb3ZlZENhbGxi
YWNrLCB0aGlzKTsKKyAgICBJT0hJRE1hbmFnZXJSZWdpc3RlcklucHV0VmFsdWVDYWxsYmFjayht
X21hbmFnZXIuZ2V0KCksIGRldmljZVZhbHVlc0NoYW5nZWRDYWxsYmFjaywgdGhpcyk7Cit9CisK
K3Vuc2lnbmVkIEhJREdhbWVwYWRQcm92aWRlcjo6aW5kZXhGb3JOZXdseUNvbm5lY3RlZERldmlj
ZSgpCit7CisgICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgIHdoaWxlIChpbmRleCA8IG1fZ2Ft
ZXBhZFZlY3Rvci5zaXplKCkgJiYgbV9nYW1lcGFkVmVjdG9yW2luZGV4XSkKKyAgICAgICAgKytp
bmRleDsKKworICAgIHJldHVybiBpbmRleDsKK30KKwordm9pZCBISURHYW1lcGFkUHJvdmlkZXI6
OmNvbm5lY3Rpb25EZWxheVRpbWVyRmlyZWQoKQoreworICAgIG1fc2hvdWxkRGlzcGF0Y2hDYWxs
YmFja3MgPSB0cnVlOworfQorCit2b2lkIEhJREdhbWVwYWRQcm92aWRlcjo6b3BlbkFuZFNjaGVk
dWxlTWFuYWdlcigpCit7CisgICAgTE9HKEdhbWVwYWQsICJISURHYW1lcGFkUHJvdmlkZXIgb3Bl
bmluZy9zY2hlZHVsaW5nIEhJRCBtYW5hZ2VyIik7CisKKyAgICBBU1NFUlQobV9nYW1lcGFkVmVj
dG9yLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKG1fZ2FtZXBhZE1hcC5pc0VtcHR5KCkpOworCisg
ICAgbV9zaG91bGREaXNwYXRjaENhbGxiYWNrcyA9IGZhbHNlOworCisgICAgSU9ISURNYW5hZ2Vy
U2NoZWR1bGVXaXRoUnVuTG9vcChtX21hbmFnZXIuZ2V0KCksIENGUnVuTG9vcEdldEN1cnJlbnQo
KSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKKyAgICBJT0hJRE1hbmFnZXJPcGVuKG1fbWFuYWdl
ci5nZXQoKSwga0lPSElET3B0aW9uc1R5cGVOb25lKTsKKworICAgIC8vIEFueSBjb25uZWN0aW9u
cyB3ZSBhcmUgbm90aWZpZWQgb2Ygd2l0aGluIHRoZSBDb25uZWN0aW9uRGVsYXlJbnRlcnZhbCBv
ZiBsaXN0ZW5pbmcgbGlrZWx5IHJlcHJlc2VudAorICAgIC8vIGRldmljZXMgdGhhdCB3ZXJlIGFs
cmVhZHkgY29ubmVjdGVkLCBzbyB3ZSBzdXBwcmVzcyBub3RpZnlpbmcgY2xpZW50cyBvZiB0aGVz
ZS4KKyAgICBtX2Nvbm5lY3Rpb25EZWxheVRpbWVyLnN0YXJ0T25lU2hvdChDb25uZWN0aW9uRGVs
YXlJbnRlcnZhbCk7Cit9CisKK3ZvaWQgSElER2FtZXBhZFByb3ZpZGVyOjpjbG9zZUFuZFVuc2No
ZWR1bGVNYW5hZ2VyKCkKK3sKKyAgICBMT0coR2FtZXBhZCwgIkhJREdhbWVwYWRQcm92aWRlciBj
bG9zaW5nL3Vuc2NoZWR1bGluZyBISUQgbWFuYWdlciIpOworCisgICAgSU9ISURNYW5hZ2VyVW5z
Y2hlZHVsZUZyb21SdW5Mb29wKG1fbWFuYWdlci5nZXQoKSwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgp
LCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOworICAgIElPSElETWFuYWdlckNsb3NlKG1fbWFuYWdl
ci5nZXQoKSwga0lPSElET3B0aW9uc1R5cGVOb25lKTsKKworICAgIG1fZ2FtZXBhZFZlY3Rvci5j
bGVhcigpOworICAgIG1fZ2FtZXBhZE1hcC5jbGVhcigpOworCisgICAgbV9jb25uZWN0aW9uRGVs
YXlUaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgSElER2FtZXBhZFByb3ZpZGVyOjpzdGFydE1vbml0
b3JpbmdHYW1lcGFkcyhHYW1lcGFkUHJvdmlkZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICBib29s
IHNob3VsZE9wZW5BbmRTY2hlZHVsZU1hbmFnZXIgPSBtX2NsaWVudHMuaXNFbXB0eSgpOworCisg
ICAgQVNTRVJUKCFtX2NsaWVudHMuY29udGFpbnMoY2xpZW50KSk7CisgICAgbV9jbGllbnRzLmFk
ZChjbGllbnQpOworCisgICAgaWYgKHNob3VsZE9wZW5BbmRTY2hlZHVsZU1hbmFnZXIpCisgICAg
ICAgIG9wZW5BbmRTY2hlZHVsZU1hbmFnZXIoKTsKK30KK3ZvaWQgSElER2FtZXBhZFByb3ZpZGVy
OjpzdG9wTW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRlckNsaWVudCogY2xpZW50KQor
eworICAgIEFTU0VSVChtX2NsaWVudHMuY29udGFpbnMoY2xpZW50KSk7CisKKyAgICBib29sIHNo
b3VsZENsb3NlQW5kVW5zY2hlZHVsZU1hbmFnZXIgPSBtX2NsaWVudHMucmVtb3ZlKGNsaWVudCkg
JiYgbV9jbGllbnRzLmlzRW1wdHkoKTsKKworICAgIGlmIChzaG91bGRDbG9zZUFuZFVuc2NoZWR1
bGVNYW5hZ2VyKQorICAgICAgICBjbG9zZUFuZFVuc2NoZWR1bGVNYW5hZ2VyKCk7Cit9CisKK3Zv
aWQgSElER2FtZXBhZFByb3ZpZGVyOjpkZXZpY2VBZGRlZChJT0hJRERldmljZVJlZiBkZXZpY2Up
Cit7CisgICAgQVNTRVJUKCFtX2dhbWVwYWRNYXAuZ2V0KGRldmljZSkpOworCisgICAgTE9HKEdh
bWVwYWQsICJISURHYW1lcGFkUHJvdmlkZXIgZGV2aWNlICVwIGFkZGVkIiwgZGV2aWNlKTsKKwor
ICAgIHVuc2lnbmVkIGluZGV4ID0gaW5kZXhGb3JOZXdseUNvbm5lY3RlZERldmljZSgpOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxISURHYW1lcGFkPiBnYW1lcGFkID0gc3RkOjptYWtlX3VuaXF1ZTxI
SURHYW1lcGFkPihkZXZpY2UsIGluZGV4KTsKKworICAgIGlmIChtX2dhbWVwYWRWZWN0b3Iuc2l6
ZSgpIDw9IGluZGV4KQorICAgICAgICBtX2dhbWVwYWRWZWN0b3IucmVzaXplKGluZGV4ICsgMSk7
CisKKyAgICBtX2dhbWVwYWRWZWN0b3JbaW5kZXhdID0gZ2FtZXBhZC5nZXQoKTsKKyAgICBtX2dh
bWVwYWRNYXAuc2V0KGRldmljZSwgV1RGTW92ZShnYW1lcGFkKSk7CisKKyAgICBpZiAoIW1fc2hv
dWxkRGlzcGF0Y2hDYWxsYmFja3MpIHsKKyAgICAgICAgLy8gVGhpcyBhZGRlZCBkZXZpY2UgaXMg
dGhlIHJlc3VsdCBvZiB1cyBzdGFydGluZyB0byBtb25pdG9yIGdhbWVwYWRzLgorICAgICAgICAv
LyBXZSdsbCBnZXQgbm90aWZpZWQgb2YgYWxsIGNvbm5lY3RlZCBkZXZpY2VzIGR1cmluZyB0aGlz
IGN1cnJlbnQgc3BpbiBvZiB0aGUgcnVubG9vcAorICAgICAgICAvLyBhbmQgd2UgZG9uJ3Qgd2Fu
dCB0byB0ZWxsIHRoZSBjbGllbnQgYWJvdXQgYW55IG9mIHRoZW0uCisgICAgICAgIC8vIFRoZSBt
X2Nvbm5lY3Rpb25EZWxheVRpbWVyIGZpcmVzIGluIGEgc3Vic2VxdWVudCBzcGluIG9mIHRoZSBy
dW5sb29wIGFmdGVyIHdoaWNoCisgICAgICAgIC8vIGFueSBjb25uZWN0aW9uIGV2ZW50cyBhcmUg
YWN0dWFsIG5ldyBkZXZpY2VzLgorICAgICAgICBtX2Nvbm5lY3Rpb25EZWxheVRpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKKworICAgICAgICBMT0coR2FtZXBhZCwgIkRldmljZSAlcCB3YXMgYWRkZWQg
d2hpbGUgc3VwcHJlc3NpbmcgY2FsbGJhY2tzLCBzbyB0aGlzIHNob3VsZCBiZSBhbiAnYWxyZWFk
eSBjb25uZWN0ZWQnIGV2ZW50IiwgZGV2aWNlKTsKKworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+cGxh
dGZvcm1HYW1lcGFkQ29ubmVjdGVkKCptX2dhbWVwYWRWZWN0b3JbaW5kZXhdKTsKK30KKwordm9p
ZCBISURHYW1lcGFkUHJvdmlkZXI6OmRldmljZVJlbW92ZWQoSU9ISUREZXZpY2VSZWYgZGV2aWNl
KQoreworICAgIExPRyhHYW1lcGFkLCAiSElER2FtZXBhZFByb3ZpZGVyIGRldmljZSAlcCByZW1v
dmVkIiwgZGV2aWNlKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxISURHYW1lcGFkPiByZW1vdmVk
R2FtZXBhZCA9IHJlbW92ZUdhbWVwYWRGb3JEZXZpY2UoZGV2aWNlKTsKKyAgICBBU1NFUlQocmVt
b3ZlZEdhbWVwYWQpOworCisgICAgLy8gQW55IHRpbWUgd2UgZ2V0IGEgZGV2aWNlIHJlbW92ZWQg
Y2FsbGJhY2sgd2Uga25vdyBpdCdzIGEgcmVhbCBldmVudCBhbmQgbm90IGFuICdhbHJlYWR5IGNv
bm5lY3RlZCcgZXZlbnQuCisgICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBzdG9wIHN1cHByZXNzaW5n
IGNhbGxiYWNrcyB3aGVuIHdlIHJlY2VpdmUgc3VjaCBhbiBldmVudC4KKyAgICBtX3Nob3VsZERp
c3BhdGNoQ2FsbGJhY2tzID0gdHJ1ZTsKKworICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9jbGll
bnRzKQorICAgICAgICBjbGllbnQtPnBsYXRmb3JtR2FtZXBhZERpc2Nvbm5lY3RlZCgqcmVtb3Zl
ZEdhbWVwYWQpOworfQorCit2b2lkIEhJREdhbWVwYWRQcm92aWRlcjo6dmFsdWVzQ2hhbmdlZChJ
T0hJRFZhbHVlUmVmIHZhbHVlKQoreworICAgIElPSElERGV2aWNlUmVmIGRldmljZSA9IElPSElE
RWxlbWVudEdldERldmljZShJT0hJRFZhbHVlR2V0RWxlbWVudCh2YWx1ZSkpOworCisgICAgSElE
R2FtZXBhZCogZ2FtZXBhZCA9IG1fZ2FtZXBhZE1hcC5nZXQoZGV2aWNlKTsKKworICAgIC8vIFdo
ZW4gc3RhcnRpbmcgbW9uaXRvcmluZyB3ZSBtaWdodCBnZXQgYSB2YWx1ZSBjaGFuZ2VkIGNhbGxi
YWNrIGJlZm9yZSB3ZSBldmVuIGtub3cgdGhlIGRldmljZSBpcyBjb25uZWN0ZWQuCisgICAgaWYg
KCFnYW1lcGFkKQorICAgICAgICByZXR1cm47CisKKyAgICBnYW1lcGFkLT52YWx1ZUNoYW5nZWQo
dmFsdWUpOworCisgICAgLy8gVGhpcyBpc0FjdGl2ZSBjaGVjayBpcyBuZWNlc3NhcnkgYXMgd2Ug
d2FudCB0byBkZWxheSBpbnB1dCBub3RpZmljYXRpb25zIGZyb20gdGhlIHRpbWUgb2YgdGhlIGZp
cnN0IGlucHV0LAorICAgIC8vIGFuZCBub3QgcHVzaCB0aGUgbm90aWZpY2F0aW9uIG91dCBvbiBl
dmVyeSBzdWJzZXF1ZW50IGlucHV0LgorICAgIGlmICghbV9pbnB1dE5vdGlmaWNhdGlvblRpbWVy
LmlzQWN0aXZlKCkpCisgICAgICAgIG1faW5wdXROb3RpZmljYXRpb25UaW1lci5zdGFydE9uZVNo
b3QoSW5wdXROb3RpZmljYXRpb25EZWxheSk7Cit9CisKK3ZvaWQgSElER2FtZXBhZFByb3ZpZGVy
OjppbnB1dE5vdGlmaWNhdGlvblRpbWVyRmlyZWQoKQoreworICAgIGlmICghbV9zaG91bGREaXNw
YXRjaENhbGxiYWNrcykKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChhdXRvJiBjbGllbnQg
OiBtX2NsaWVudHMpCisgICAgICAgIGNsaWVudC0+cGxhdGZvcm1HYW1lcGFkSW5wdXRBY3Rpdml0
eSgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SElER2FtZXBhZD4gSElER2FtZXBhZFByb3ZpZGVy
OjpyZW1vdmVHYW1lcGFkRm9yRGV2aWNlKElPSElERGV2aWNlUmVmIGRldmljZSkKK3sKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8SElER2FtZXBhZD4gcmVzdWx0ID0gbV9nYW1lcGFkTWFwLnRha2UoZGV2
aWNlKTsKKyAgICBBU1NFUlQocmVzdWx0KTsKKworICAgIGF1dG8gaSA9IG1fZ2FtZXBhZFZlY3Rv
ci5maW5kKHJlc3VsdC5nZXQoKSk7CisgICAgaWYgKGkgIT0gbm90Rm91bmQpCisgICAgICAgIG1f
Z2FtZXBhZFZlY3RvcltpXSA9IG51bGxwdHI7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL0hJREdhbWVwYWRQcm92
aWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvSElER2FtZXBhZFBy
b3ZpZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNzhkZTAwYzdlNjFlNTY0OGRmZmY4Y2U1OTU4NjY4MGVlMzgz
OGVkOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQv
bWFjL0hJREdhbWVwYWRQcm92aWRlci5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSAiR2FtZXBhZFBy
b3ZpZGVyLmgiCisjaW5jbHVkZSAiSElER2FtZXBhZC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisj
aW5jbHVkZSA8SU9LaXQvaGlkL0lPSElETWFuYWdlci5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR2FtZXBhZFByb3ZpZGVyQ2xpZW50Owor
CitjbGFzcyBISURHYW1lcGFkUHJvdmlkZXIgOiBwdWJsaWMgR2FtZXBhZFByb3ZpZGVyIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShISURHYW1lcGFkUHJvdmlkZXIpOworICAgIGZyaWVuZCBj
bGFzcyBOZXZlckRlc3Ryb3llZDxISURHYW1lcGFkUHJvdmlkZXI+OworcHVibGljOgorICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBISURHYW1lcGFkUHJvdmlkZXImIHNpbmdsZXRvbigpOworCisg
ICAgdmlydHVhbCB2b2lkIHN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRlckNs
aWVudCopOworICAgIHZpcnR1YWwgdm9pZCBzdG9wTW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQ
cm92aWRlckNsaWVudCopOworICAgIHZpcnR1YWwgY29uc3QgVmVjdG9yPFBsYXRmb3JtR2FtZXBh
ZCo+JiBwbGF0Zm9ybUdhbWVwYWRzKCkgeyByZXR1cm4gbV9nYW1lcGFkVmVjdG9yOyB9CisKKyAg
ICB2b2lkIGRldmljZUFkZGVkKElPSElERGV2aWNlUmVmKTsKKyAgICB2b2lkIGRldmljZVJlbW92
ZWQoSU9ISUREZXZpY2VSZWYpOworICAgIHZvaWQgdmFsdWVzQ2hhbmdlZChJT0hJRFZhbHVlUmVm
KTsKKworcHJpdmF0ZToKKyAgICBISURHYW1lcGFkUHJvdmlkZXIoKTsKKworICAgIHN0ZDo6dW5p
cXVlX3B0cjxISURHYW1lcGFkPiByZW1vdmVHYW1lcGFkRm9yRGV2aWNlKElPSElERGV2aWNlUmVm
KTsKKworICAgIHZvaWQgb3BlbkFuZFNjaGVkdWxlTWFuYWdlcigpOworICAgIHZvaWQgY2xvc2VB
bmRVbnNjaGVkdWxlTWFuYWdlcigpOworCisgICAgdm9pZCBjb25uZWN0aW9uRGVsYXlUaW1lckZp
cmVkKCk7CisgICAgdm9pZCBpbnB1dE5vdGlmaWNhdGlvblRpbWVyRmlyZWQoKTsKKworICAgIHVu
c2lnbmVkIGluZGV4Rm9yTmV3bHlDb25uZWN0ZWREZXZpY2UoKTsKKworICAgIFZlY3RvcjxQbGF0
Zm9ybUdhbWVwYWQqPiBtX2dhbWVwYWRWZWN0b3I7CisgICAgSGFzaE1hcDxJT0hJRERldmljZVJl
Ziwgc3RkOjp1bmlxdWVfcHRyPEhJREdhbWVwYWQ+PiBtX2dhbWVwYWRNYXA7CisKKyAgICBSZXRh
aW5QdHI8SU9ISURNYW5hZ2VyUmVmPiBtX21hbmFnZXI7CisKKyAgICBIYXNoU2V0PEdhbWVwYWRQ
cm92aWRlckNsaWVudCo+IG1fY2xpZW50czsKKyAgICBib29sIG1fc2hvdWxkRGlzcGF0Y2hDYWxs
YmFja3M7CisKKyAgICBUaW1lciBtX2Nvbm5lY3Rpb25EZWxheVRpbWVyOworICAgIFRpbWVyIG1f
aW5wdXROb3RpZmljYXRpb25UaW1lcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ2xpYi9HYW1lcGFkc0dsaWIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2xp
Yi9HYW1lcGFkc0dsaWIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOGJkMjFh
NWU4NjYyMjYyNGQzY2Q3YTlkYzgzNTJjMjRlMjQ1ODRiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvR2Ft
ZXBhZHNHbGliLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIxOSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIFphbiBEb2JlcnNlayA8emFuZG9iZXJzZWtAZ21haWwuY29tPgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
LSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICogQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
Ci0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLSAqIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2FtZXBhZHMuaCIKLQotI2lm
IEVOQUJMRShHQU1FUEFEX0RFUFJFQ0FURUQpCi0KLSNpbmNsdWRlICJHYW1lcGFkRGV2aWNlTGlu
dXguaCIKLSNpbmNsdWRlICJHYW1lcGFkTGlzdC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNp
bmNsdWRlIDxnaW8vZ3VuaXhpbnB1dHN0cmVhbS5oPgotI2luY2x1ZGUgPGd1ZGV2L2d1ZGV2Lmg+
Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgR2FtZXBhZERldmljZUdsaWIgOiBwdWJsaWMgR2FtZXBhZERldmlj
ZUxpbnV4IHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBHYW1lcGFkRGV2aWNlR2xpYihTdHJpbmcg
ZGV2aWNlRmlsZSk7Ci0gICAgfkdhbWVwYWREZXZpY2VHbGliKCk7Ci0KLXByaXZhdGU6Ci0gICAg
c3RhdGljIGdib29sZWFuIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBwb2xsYWJsZVN0cmVhbSwgZ3Bv
aW50ZXIgZGF0YSk7Ci0gICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRTdHJlYW07Ci0g
ICAgR1JlZlB0cjxHU291cmNlPiBtX3NvdXJjZTsKLX07Ci0KLUdhbWVwYWREZXZpY2VHbGliOjpH
YW1lcGFkRGV2aWNlR2xpYihTdHJpbmcgZGV2aWNlRmlsZSkKLSAgICA6IEdhbWVwYWREZXZpY2VM
aW51eChkZXZpY2VGaWxlKQotewotICAgIGlmIChtX2ZpbGVEZXNjcmlwdG9yID09IC0xKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2lucHV0U3RyZWFtID0gYWRvcHRHUmVmKGdfdW5peF9pbnB1
dF9zdHJlYW1fbmV3KG1fZmlsZURlc2NyaXB0b3IsIEZBTFNFKSk7Ci0gICAgbV9zb3VyY2UgPSBh
ZG9wdEdSZWYoZ19wb2xsYWJsZV9pbnB1dF9zdHJlYW1fY3JlYXRlX3NvdXJjZShHX1BPTExBQkxF
X0lOUFVUX1NUUkVBTShtX2lucHV0U3RyZWFtLmdldCgpKSwgMCkpOwotICAgIGdfc291cmNlX3Nl
dF9jYWxsYmFjayhtX3NvdXJjZS5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4o
cmVhZENhbGxiYWNrKSwgdGhpcywgMCk7Ci0gICAgZ19zb3VyY2VfYXR0YWNoKG1fc291cmNlLmdl
dCgpLCAwKTsKLX0KLQotR2FtZXBhZERldmljZUdsaWI6On5HYW1lcGFkRGV2aWNlR2xpYigpCi17
Ci0gICAgaWYgKG1fc291cmNlKQotICAgICAgICBnX3NvdXJjZV9kZXN0cm95KG1fc291cmNlLmdl
dCgpKTsKLX0KLQotZ2Jvb2xlYW4gR2FtZXBhZERldmljZUdsaWI6OnJlYWRDYWxsYmFjayhHT2Jq
ZWN0KiBwb2xsYWJsZVN0cmVhbSwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBHYW1lcGFkRGV2aWNl
R2xpYiogZ2FtZXBhZERldmljZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8R2FtZXBhZERldmljZUdsaWIq
PihkYXRhKTsKLSAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgc3RydWN0IGpz
X2V2ZW50IGV2ZW50OwotCi0gICAgZ3NzaXplIGxlbiA9IGdfcG9sbGFibGVfaW5wdXRfc3RyZWFt
X3JlYWRfbm9uYmxvY2tpbmcoR19QT0xMQUJMRV9JTlBVVF9TVFJFQU0ocG9sbGFibGVTdHJlYW0p
LAotICAgICAgICAmZXZlbnQsIHNpemVvZihldmVudCksIDAsICZlcnJvci5vdXRQdHIoKSk7Ci0K
LSAgICAvLyBGSVhNRTogUHJvcGVybHkgbG9nIHRoZSBlcnJvci4KLSAgICAvLyBJbiB0aGUgY2Fz
ZSBvZiBHX0lPX0VSUk9SX1dPVUxEX0JMT0NLIGVycm9yIHJldHVybiBUUlVFIHRvIHdhaXQgdW50
aWwKLSAgICAvLyB0aGUgc291cmNlIGJlY29tZXMgcmVhZGFibGUgYWdhaW4gYW5kIEZBTFNFIG90
aGVyd2lzZS4KLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIHJldHVybiBnX2Vycm9yX21hdGNoZXMo
ZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfV09VTERfQkxPQ0spOwotCi0gICAg
QVNTRVJUX1VOVVNFRChsZW4sIGxlbiA9PSBzaXplb2YoZXZlbnQpKTsKLSAgICBnYW1lcGFkRGV2
aWNlLT51cGRhdGVGb3JFdmVudChldmVudCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLWNsYXNz
IEdhbWVwYWRzR2xpYiB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgR2FtZXBhZHNHbGliKHVuc2ln
bmVkIGxlbmd0aCk7Ci0KLSAgICB2b2lkIHJlZ2lzdGVyRGV2aWNlKFN0cmluZyBkZXZpY2VGaWxl
KTsKLSAgICB2b2lkIHVucmVnaXN0ZXJEZXZpY2UoU3RyaW5nIGRldmljZUZpbGUpOwotCi0gICAg
dm9pZCB1cGRhdGVHYW1lcGFkTGlzdChHYW1lcGFkTGlzdCopOwotCi1wcml2YXRlOgotICAgIH5H
YW1lcGFkc0dsaWIoKTsKLSAgICBzdGF0aWMgdm9pZCBvblVFdmVudENhbGxiYWNrKEdVZGV2Q2xp
ZW50KiwgZ2NoYXIqIGFjdGlvbiwgR1VkZXZEZXZpY2UqLCBncG9pbnRlciBkYXRhKTsKLSAgICBz
dGF0aWMgZ2Jvb2xlYW4gaXNHYW1lcGFkRGV2aWNlKEdVZGV2RGV2aWNlKik7Ci0KLSAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPEdhbWVwYWREZXZpY2VHbGliPiA+IG1fc2xvdHM7Ci0gICAgSGFz
aE1hcDxTdHJpbmcsIEdhbWVwYWREZXZpY2VHbGliKj4gbV9kZXZpY2VNYXA7Ci0KLSAgICBHUmVm
UHRyPEdVZGV2Q2xpZW50PiBtX2d1ZGV2Q2xpZW50OwotfTsKLQotR2FtZXBhZHNHbGliOjpHYW1l
cGFkc0dsaWIodW5zaWduZWQgbGVuZ3RoKQotICAgIDogbV9zbG90cyhsZW5ndGgpCi17Ci0gICAg
c3RhdGljIGNvbnN0IGNoYXIqIHN1YnN5c3RlbXNbXSA9IHsgImlucHV0IiwgMCB9OwotICAgIG1f
Z3VkZXZDbGllbnQgPSBhZG9wdEdSZWYoZ191ZGV2X2NsaWVudF9uZXcoc3Vic3lzdGVtcykpOwot
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9ndWRldkNsaWVudC5nZXQoKSwgInVldmVudCIsIEdfQ0FM
TEJBQ0sob25VRXZlbnRDYWxsYmFjayksIHRoaXMpOwotCi0gICAgR1VuaXF1ZVB0cjxHTGlzdD4g
ZGV2aWNlc0xpc3QoZ191ZGV2X2NsaWVudF9xdWVyeV9ieV9zdWJzeXN0ZW0obV9ndWRldkNsaWVu
dC5nZXQoKSwgc3Vic3lzdGVtc1swXSkpOwotICAgIGZvciAoR0xpc3QqIGxpc3RJdGVtID0gZGV2
aWNlc0xpc3QuZ2V0KCk7IGxpc3RJdGVtOyBsaXN0SXRlbSA9IGdfbGlzdF9uZXh0KGxpc3RJdGVt
KSkgewotICAgICAgICBHVWRldkRldmljZSogZGV2aWNlID0gR19VREVWX0RFVklDRShsaXN0SXRl
bS0+ZGF0YSk7Ci0gICAgICAgIFN0cmluZyBkZXZpY2VGaWxlID0gU3RyaW5nOjpmcm9tVVRGOChn
X3VkZXZfZGV2aWNlX2dldF9kZXZpY2VfZmlsZShkZXZpY2UpKTsKLSAgICAgICAgaWYgKGlzR2Ft
ZXBhZERldmljZShkZXZpY2UpKQotICAgICAgICAgICAgcmVnaXN0ZXJEZXZpY2UoZGV2aWNlRmls
ZSk7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKGRldmljZSk7Ci0gICAgfQotfQotCi1HYW1lcGFk
c0dsaWI6On5HYW1lcGFkc0dsaWIoKQotewotICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5l
Y3RfbWF0Y2hlZChtX2d1ZGV2Q2xpZW50LmdldCgpLCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAw
LCAwLCAwLCB0aGlzKTsKLX0KLQotdm9pZCBHYW1lcGFkc0dsaWI6OnJlZ2lzdGVyRGV2aWNlKFN0
cmluZyBkZXZpY2VGaWxlKQotewotICAgIExPRyhHYW1lcGFkLCAiR2FtZXBhZHNHbGliOjpyZWdp
c3RlckRldmljZSAlcyIsIGRldmljZUZpbGUuYXNjaWkoKS5kYXRhKCkpOwotICAgIEFTU0VSVCgh
bV9kZXZpY2VNYXAuY29udGFpbnMoZGV2aWNlRmlsZSkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBp
bmRleCA9IDA7IGluZGV4IDwgbV9zbG90cy5zaXplKCk7IGluZGV4KyspIHsKLSAgICAgICAgaWYg
KCFtX3Nsb3RzW2luZGV4XSkgewotICAgICAgICAgICAgbV9zbG90c1tpbmRleF0gPSBzdGQ6Om1h
a2VfdW5pcXVlPEdhbWVwYWREZXZpY2VHbGliPihkZXZpY2VGaWxlKTsKLSAgICAgICAgICAgIG1f
ZGV2aWNlTWFwLmFkZChkZXZpY2VGaWxlLCBtX3Nsb3RzW2luZGV4XS5nZXQoKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBHYW1lcGFkc0dsaWI6OnVu
cmVnaXN0ZXJEZXZpY2UoU3RyaW5nIGRldmljZUZpbGUpCi17Ci0gICAgTE9HKEdhbWVwYWQsICJH
YW1lcGFkc0dsaWI6OnVucmVnaXN0ZXJEZXZpY2UgJXMiLCBkZXZpY2VGaWxlLmFzY2lpKCkuZGF0
YSgpKTsKLSAgICBBU1NFUlQobV9kZXZpY2VNYXAuY29udGFpbnMoZGV2aWNlRmlsZSkpOwotCi0g
ICAgR2FtZXBhZERldmljZUdsaWIqIGdhbWVwYWREZXZpY2UgPSBtX2RldmljZU1hcC50YWtlKGRl
dmljZUZpbGUpOwotICAgIHNpemVfdCBpbmRleCA9IG1fc2xvdHMuZmluZChnYW1lcGFkRGV2aWNl
KTsKLSAgICBBU1NFUlQoaW5kZXggIT0gbm90Rm91bmQpOwotCi0gICAgbV9zbG90c1tpbmRleF0g
PSBudWxscHRyOwotfQotCi12b2lkIEdhbWVwYWRzR2xpYjo6dXBkYXRlR2FtZXBhZExpc3QoR2Ft
ZXBhZExpc3QqIGludG8pCi17Ci0gICAgQVNTRVJUKG1fc2xvdHMuc2l6ZSgpID09IGludG8tPmxl
bmd0aCgpKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Nsb3RzLnNpemUoKTsg
aSsrKSB7Ci0gICAgICAgIGlmIChtX3Nsb3RzW2ldLmdldCgpICYmIG1fc2xvdHNbaV0tPmNvbm5l
Y3RlZCgpKSB7Ci0gICAgICAgICAgICBHYW1lcGFkRGV2aWNlR2xpYiogZ2FtZXBhZERldmljZSA9
IG1fc2xvdHNbaV0uZ2V0KCk7Ci0gICAgICAgICAgICBSZWZQdHI8R2FtZXBhZD4gZ2FtZXBhZCA9
IGludG8tPml0ZW0oaSk7Ci0gICAgICAgICAgICBpZiAoIWdhbWVwYWQpCi0gICAgICAgICAgICAg
ICAgZ2FtZXBhZCA9IEdhbWVwYWQ6OmNyZWF0ZSgpOwotCi0gICAgICAgICAgICBnYW1lcGFkLT5p
bmRleChpKTsKLSAgICAgICAgICAgIGdhbWVwYWQtPmlkKGdhbWVwYWREZXZpY2UtPmlkKCkpOwot
ICAgICAgICAgICAgZ2FtZXBhZC0+dGltZXN0YW1wKGdhbWVwYWREZXZpY2UtPnRpbWVzdGFtcCgp
KTsKLSAgICAgICAgICAgIGdhbWVwYWQtPmF4ZXMoZ2FtZXBhZERldmljZS0+YXhlc0NvdW50KCks
IGdhbWVwYWREZXZpY2UtPmF4ZXNEYXRhKCkpOwotICAgICAgICAgICAgZ2FtZXBhZC0+YnV0dG9u
cyhnYW1lcGFkRGV2aWNlLT5idXR0b25zQ291bnQoKSwgZ2FtZXBhZERldmljZS0+YnV0dG9uc0Rh
dGEoKSk7Ci0KLSAgICAgICAgICAgIGludG8tPnNldChpLCBnYW1lcGFkKTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBpbnRvLT5zZXQoaSwgMCk7Ci0gICAgfQotfQotCi12b2lkIEdhbWVw
YWRzR2xpYjo6b25VRXZlbnRDYWxsYmFjayhHVWRldkNsaWVudCosIGdjaGFyKiBhY3Rpb24sIEdV
ZGV2RGV2aWNlKiBkZXZpY2UsIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgaWYgKCFpc0dhbWVwYWRE
ZXZpY2UoZGV2aWNlKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR2FtZXBhZHNHbGliKiBnYW1l
cGFkc0dsaWIgPSByZWludGVycHJldF9jYXN0PEdhbWVwYWRzR2xpYio+KGRhdGEpOwotICAgIFN0
cmluZyBkZXZpY2VGaWxlID0gU3RyaW5nOjpmcm9tVVRGOChnX3VkZXZfZGV2aWNlX2dldF9kZXZp
Y2VfZmlsZShkZXZpY2UpKTsKLQotICAgIGlmICghZ19zdHJjbXAwKGFjdGlvbiwgImFkZCIpKQot
ICAgICAgICBnYW1lcGFkc0dsaWItPnJlZ2lzdGVyRGV2aWNlKGRldmljZUZpbGUpOwotICAgIGVs
c2UgaWYgKCFnX3N0cmNtcDAoYWN0aW9uLCAicmVtb3ZlIikpCi0gICAgICAgIGdhbWVwYWRzR2xp
Yi0+dW5yZWdpc3RlckRldmljZShkZXZpY2VGaWxlKTsKLX0KLQotZ2Jvb2xlYW4gR2FtZXBhZHNH
bGliOjppc0dhbWVwYWREZXZpY2UoR1VkZXZEZXZpY2UqIGRldmljZSkKLXsKLSAgICBjb25zdCBn
Y2hhciogZGV2aWNlRmlsZSA9IGdfdWRldl9kZXZpY2VfZ2V0X2RldmljZV9maWxlKGRldmljZSk7
Ci0gICAgY29uc3QgZ2NoYXIqIHN5c2ZzUGF0aCA9IGdfdWRldl9kZXZpY2VfZ2V0X3N5c2ZzX3Bh
dGgoZGV2aWNlKTsKLSAgICBpZiAoIWRldmljZUZpbGUgfHwgIXN5c2ZzUGF0aCkKLSAgICAgICAg
cmV0dXJuIEZBTFNFOwotCi0gICAgaWYgKCFnX3VkZXZfZGV2aWNlX2hhc19wcm9wZXJ0eShkZXZp
Y2UsICJJRF9JTlBVVCIpIHx8ICFnX3VkZXZfZGV2aWNlX2hhc19wcm9wZXJ0eShkZXZpY2UsICJJ
RF9JTlBVVF9KT1lTVElDSyIpKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICByZXR1cm4g
Z19zdHJfaGFzX3ByZWZpeChkZXZpY2VGaWxlLCAiL2Rldi9pbnB1dC9qcyIpOwotfQotCi12b2lk
IHNhbXBsZUdhbWVwYWRzKEdhbWVwYWRMaXN0KiBpbnRvKQotewotICAgIERFUFJFQ0FURURfREVG
SU5FX1NUQVRJQ19MT0NBTChHYW1lcGFkc0dsaWIsIGdhbWVwYWRzR2xpYiwgKGludG8tPmxlbmd0
aCgpKSk7Ci0gICAgZ2FtZXBhZHNHbGliLnVwZGF0ZUdhbWVwYWRMaXN0KGludG8pOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRF9ERVBSRUNB
VEVEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGludXgvR2FtZXBhZERl
dmljZUxpbnV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xpbnV4L0dhbWVwYWREZXZp
Y2VMaW51eC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MTc1NGQ1NGUxYzFm
MWZmNDY0ZjcwMTE1ZjY5NzQzY2VhYjk0YWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGludXgvR2FtZXBhZERl
dmljZUxpbnV4LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgWmFuIERvYmVyc2VrIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+Ci0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAot
ICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0gKiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QK
LSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAotICogREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHYW1lcGFkRGV2aWNlTGludXgu
aCIKLQotI2lmIEVOQUJMRShHQU1FUEFEX0RFUFJFQ0FURUQpCi0KLSNpbmNsdWRlIDxmY250bC5o
PgotI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1HYW1lcGFkRGV2
aWNlTGludXg6OkdhbWVwYWREZXZpY2VMaW51eChTdHJpbmcgZGV2aWNlRmlsZSkKLSAgICA6IG1f
ZmlsZURlc2NyaXB0b3IoLTEpCi0gICAgLCBtX2Nvbm5lY3RlZChmYWxzZSkKLSAgICAsIG1fbGFz
dFRpbWVzdGFtcCgwKQotewotICAgIC8vIEZJWE1FOiBMb2cgZXJyb3JzIHdoZW4gcmV0dXJuaW5n
IGVhcmx5LgotICAgIG1fZmlsZURlc2NyaXB0b3IgPSBvcGVuKGRldmljZUZpbGUudXRmOCgpLmRh
dGEoKSwgT19SRE9OTFkgfCBPX05PTkJMT0NLKTsKLSAgICBpZiAobV9maWxlRGVzY3JpcHRvciA9
PSAtMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2hhciBkZXZpY2VOYW1lWzEwMjRdOwotICAg
IGlmIChpb2N0bChtX2ZpbGVEZXNjcmlwdG9yLCBKU0lPQ0dOQU1FKHNpemVvZihkZXZpY2VOYW1l
KSksIGRldmljZU5hbWUpIDwgMCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fZGV2aWNlTmFtZSA9
IFN0cmluZyhkZXZpY2VOYW1lKS5zaW1wbGlmeVdoaXRlU3BhY2UoKTsKLQotICAgIHVpbnQ4X3Qg
bnVtYmVyT2ZBeGVzOwotICAgIHVpbnQ4X3QgbnVtYmVyT2ZCdXR0b25zOwotICAgIGlmIChpb2N0
bChtX2ZpbGVEZXNjcmlwdG9yLCBKU0lPQ0dBWEVTLCAmbnVtYmVyT2ZBeGVzKSA8IDAgfHwgaW9j
dGwobV9maWxlRGVzY3JpcHRvciwgSlNJT0NHQlVUVE9OUywgJm51bWJlck9mQnV0dG9ucykgPCAw
KQotICAgICAgICByZXR1cm47Ci0gICAgbV9heGVzLmZpbGwoMC4wLCBudW1iZXJPZkF4ZXMpOwot
ICAgIG1fYnV0dG9ucy5maWxsKDAuMCwgbnVtYmVyT2ZCdXR0b25zKTsKLX0KLQotR2FtZXBhZERl
dmljZUxpbnV4Ojp+R2FtZXBhZERldmljZUxpbnV4KCkKLXsKLSAgICBpZiAobV9maWxlRGVzY3Jp
cHRvciAhPSAtMSkKLSAgICAgICAgY2xvc2UobV9maWxlRGVzY3JpcHRvcik7Ci19Ci0KLXZvaWQg
R2FtZXBhZERldmljZUxpbnV4Ojp1cGRhdGVGb3JFdmVudChzdHJ1Y3QganNfZXZlbnQgZXZlbnQp
Ci17Ci0gICAgaWYgKCEoZXZlbnQudHlwZSAmIEpTX0VWRU5UX0FYSVMgfHwgZXZlbnQudHlwZSAm
IEpTX0VWRU5UX0JVVFRPTikpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE1hcmsgdGhlIGRl
dmljZSBhcyBjb25uZWN0ZWQgb25seSBpZiBpdCBpcyBub3QgeWV0IGNvbm5lY3RlZCwgdGhlIGV2
ZW50IGlzIG5vdCBhbiBpbml0aWFsaXphdGlvbgotICAgIC8vIGFuZCB0aGUgdmFsdWUgaXMgbm90
IDAgKGluZGljYXRpbmcgYSBnZW51aW5lIGludGVyYWN0aW9uIHdpdGggdGhlIGRldmljZSkuCi0g
ICAgaWYgKCFtX2Nvbm5lY3RlZCAmJiAhKGV2ZW50LnR5cGUgJiBKU19FVkVOVF9JTklUKSAmJiBl
dmVudC52YWx1ZSkKLSAgICAgICAgbV9jb25uZWN0ZWQgPSB0cnVlOwotCi0gICAgaWYgKGV2ZW50
LnR5cGUgJiBKU19FVkVOVF9BWElTKQotICAgICAgICBtX2F4ZXNbZXZlbnQubnVtYmVyXSA9IG5v
cm1hbGl6ZUF4aXNWYWx1ZShldmVudC52YWx1ZSk7Ci0gICAgZWxzZSBpZiAoZXZlbnQudHlwZSAm
IEpTX0VWRU5UX0JVVFRPTikKLSAgICAgICAgbV9idXR0b25zW2V2ZW50Lm51bWJlcl0gPSBub3Jt
YWxpemVCdXR0b25WYWx1ZShldmVudC52YWx1ZSk7Ci0KLSAgICBtX2xhc3RUaW1lc3RhbXAgPSBl
dmVudC50aW1lOwotfQotCi1mbG9hdCBHYW1lcGFkRGV2aWNlTGludXg6Om5vcm1hbGl6ZUF4aXNW
YWx1ZShzaG9ydCB2YWx1ZSkKLXsKLSAgICAvLyBOb3JtYWxpemUgZnJvbSByYW5nZSBbLTMyNzY3
LCAzMjc2N10gaW50byByYW5nZSBbLTEuMCwgMS4wXQotICAgIHJldHVybiB2YWx1ZSAvIDMyNzY3
LjBmOwotfQotCi1mbG9hdCBHYW1lcGFkRGV2aWNlTGludXg6Om5vcm1hbGl6ZUJ1dHRvblZhbHVl
KHNob3J0IHZhbHVlKQotewotICAgIC8vIE5vcm1hbGl6ZSBmcm9tIHJhbmdlIFswLCAxXSBpbnRv
IHJhbmdlIFswLjAsIDEuMF0KLSAgICByZXR1cm4gdmFsdWUgLyAxLjBmOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGludXgvR2FtZXBhZERldmljZUxp
bnV4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9saW51eC9HYW1lcGFkRGV2aWNlTGludXgu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTljMDliMjdmNTRjOWQ5ZDlmYzBhMmI0
ODNhNGUwNmExYjI2YTI2NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9saW51eC9HYW1lcGFkRGV2aWNlTGludXgu
aAorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgWmFuIERvYmVyc2VrIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+Ci0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
LSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0gKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAotICogREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgR2FtZXBhZERldmljZUxpbnV4X2gKLSNkZWZpbmUgR2FtZXBhZERldmljZUxpbnV4X2gKLQot
I2lmIEVOQUJMRShHQU1FUEFEX0RFUFJFQ0FURUQpCi0KLSNpbmNsdWRlIDxsaW51eC9qb3lzdGlj
ay5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHYW1lcGFkRGV2aWNlTGludXgg
ewotcHVibGljOgotICAgIGJvb2wgY29ubmVjdGVkKCkgeyByZXR1cm4gbV9jb25uZWN0ZWQ7IH07
Ci0KLSAgICBTdHJpbmcgaWQoKSB7IHJldHVybiBtX2RldmljZU5hbWU7IH0KLSAgICB1bnNpZ25l
ZCBsb25nIGxvbmcgdGltZXN0YW1wKCkgeyByZXR1cm4gbV9sYXN0VGltZXN0YW1wOyB9Ci0KLSAg
ICB1bnNpZ25lZCBheGVzQ291bnQoKSB7IHJldHVybiBtX2F4ZXMuc2l6ZSgpOyB9Ci0gICAgZmxv
YXQqIGF4ZXNEYXRhKCkgeyByZXR1cm4gbV9heGVzLmRhdGEoKTsgfQotCi0gICAgdW5zaWduZWQg
YnV0dG9uc0NvdW50KCkgeyByZXR1cm4gbV9idXR0b25zLnNpemUoKTsgfQotICAgIGZsb2F0KiBi
dXR0b25zRGF0YSgpIHsgcmV0dXJuIG1fYnV0dG9ucy5kYXRhKCk7IH0KLQotcHJvdGVjdGVkOgot
ICAgIEdhbWVwYWREZXZpY2VMaW51eChTdHJpbmcgZGV2aWNlRmlsZSk7Ci0gICAgfkdhbWVwYWRE
ZXZpY2VMaW51eCgpOwotCi0gICAgdm9pZCB1cGRhdGVGb3JFdmVudChzdHJ1Y3QganNfZXZlbnQp
OwotICAgIGludCBtX2ZpbGVEZXNjcmlwdG9yOwotCi1wcml2YXRlOgotICAgIGZsb2F0IG5vcm1h
bGl6ZUF4aXNWYWx1ZShzaG9ydCB2YWx1ZSk7Ci0gICAgZmxvYXQgbm9ybWFsaXplQnV0dG9uVmFs
dWUoc2hvcnQgdmFsdWUpOwotCi0gICAgYm9vbCBtX2Nvbm5lY3RlZDsKLSAgICBTdHJpbmcgbV9k
ZXZpY2VOYW1lOwotICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtX2xhc3RUaW1lc3RhbXA7Ci0KLSAg
ICBWZWN0b3I8ZmxvYXQ+IG1fYXhlczsKLSAgICBWZWN0b3I8ZmxvYXQ+IG1fYnV0dG9uczsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEX0RF
UFJFQ0FURUQpCi0KLSNlbmRpZiAvLyBHYW1lcGFkRGV2aWNlTGludXhfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJREdhbWVwYWQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL0hJREdhbWVwYWQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3N2MxOGUzZTYzNGI1OWViMGJhMDJlMWVlMThhZGZkNWU1ZDdkYmZjLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9ISURHYW1lcGFkLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5MCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkhJREdhbWVwYWQuaCIK
LQotI2lmIEVOQUJMRShHQU1FUEFEKQotCi0jaW5jbHVkZSA8SU9LaXQvaGlkL0lPSElERWxlbWVu
dC5oPgotI2luY2x1ZGUgPElPS2l0L2hpZC9JT0hJRFVzYWdlVGFibGVzLmg+Ci0jaW5jbHVkZSA8
SU9LaXQvaGlkL0lPSElEVmFsdWUuaD4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSElER2FtZXBhZDo6SElER2FtZXBhZChJT0hJ
RERldmljZVJlZiBoaWREZXZpY2UsIHVuc2lnbmVkIGluZGV4KQotICAgIDogUGxhdGZvcm1HYW1l
cGFkKGluZGV4KQotICAgICwgbV9oaWREZXZpY2UoaGlkRGV2aWNlKQotewotICAgIG1fY29ubmVj
dFRpbWUgPSBtX2xhc3RVcGRhdGVUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7
Ci0KLSAgICBDRk51bWJlclJlZiBjZlZlbmRvcklEID0gKENGTnVtYmVyUmVmKUlPSElERGV2aWNl
R2V0UHJvcGVydHkoaGlkRGV2aWNlLCBDRlNUUihrSU9ISURWZW5kb3JJREtleSkpOwotICAgIENG
TnVtYmVyUmVmIGNmUHJvZHVjdElEID0gKENGTnVtYmVyUmVmKUlPSElERGV2aWNlR2V0UHJvcGVy
dHkoaGlkRGV2aWNlLCBDRlNUUihrSU9ISURQcm9kdWN0SURLZXkpKTsKLQotICAgIGludCB2ZW5k
b3JJRCwgcHJvZHVjdElEOwotICAgIENGTnVtYmVyR2V0VmFsdWUoY2ZWZW5kb3JJRCwga0NGTnVt
YmVySW50VHlwZSwgJnZlbmRvcklEKTsKLSAgICBDRk51bWJlckdldFZhbHVlKGNmUHJvZHVjdElE
LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmcHJvZHVjdElEKTsKLQotICAgIENGU3RyaW5nUmVmIGNmUHJv
ZHVjdE5hbWUgPSAoQ0ZTdHJpbmdSZWYpSU9ISUREZXZpY2VHZXRQcm9wZXJ0eShoaWREZXZpY2Us
IENGU1RSKGtJT0hJRFByb2R1Y3RLZXkpKTsKLSAgICBTdHJpbmcgcHJvZHVjdE5hbWUoY2ZQcm9k
dWN0TmFtZSk7Ci0KLSAgICAvLyBDdXJyZW50bHkgdGhlIHNwZWMgaGFzIG5vIGZvcm1hdHRpbmcg
Zm9yIHRoZSBpZCBzdHJpbmcuCi0gICAgLy8gVGhpcyBzdHJpbmcgZm9ybWF0dGluZyBtYXRjaGVz
IEZpcmVmb3guCi0gICAgbV9pZCA9IFN0cmluZzo6Zm9ybWF0KCIleC0leC0lcyIsIHZlbmRvcklE
LCBwcm9kdWN0SUQsIHByb2R1Y3ROYW1lLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgaW5pdEVsZW1l
bnRzKCk7Ci19Ci0KLXZvaWQgSElER2FtZXBhZDo6Z2V0Q3VycmVudFZhbHVlRm9yRWxlbWVudChj
b25zdCBISURHYW1lcGFkRWxlbWVudCYgZ2FtZXBhZEVsZW1lbnQpCi17Ci0gICAgSU9ISURFbGVt
ZW50UmVmIGVsZW1lbnQgPSBnYW1lcGFkRWxlbWVudC5pb2hpZEVsZW1lbnQuZ2V0KCk7Ci0gICAg
SU9ISURWYWx1ZVJlZiB2YWx1ZTsKLSAgICBpZiAoSU9ISUREZXZpY2VHZXRWYWx1ZShJT0hJREVs
ZW1lbnRHZXREZXZpY2UoZWxlbWVudCksIGVsZW1lbnQsICZ2YWx1ZSkgPT0ga0lPUmV0dXJuU3Vj
Y2VzcykKLSAgICAgICAgdmFsdWVDaGFuZ2VkKHZhbHVlKTsKLX0KLQotdm9pZCBISURHYW1lcGFk
Ojppbml0RWxlbWVudHMoKQotewotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBlbGVtZW50cyA9
IGFkb3B0Q0YoSU9ISUREZXZpY2VDb3B5TWF0Y2hpbmdFbGVtZW50cyhtX2hpZERldmljZS5nZXQo
KSwgTlVMTCwga0lPSElET3B0aW9uc1R5cGVOb25lKSk7Ci0gICAgaW5pdEVsZW1lbnRzRnJvbUFy
cmF5KGVsZW1lbnRzLmdldCgpKTsKLQotICAgIC8vIEJ1dHRvbnMgYXJlIHNwZWNpZmllZCB0byBh
cHBlYXIgaGlnaGVzdCBwcmlvcml0eSBmaXJzdCBpbiB0aGUgYXJyYXkuCi0gICAgc3RkOjpzb3J0
KG1fYnV0dG9ucy5iZWdpbigpLCBtX2J1dHRvbnMuZW5kKCksIFtdKGF1dG8mIGEsIGF1dG8mIGIp
IHsKLSAgICAgICAgcmV0dXJuIGEtPnByaW9yaXR5IDwgYi0+cHJpb3JpdHk7Ci0gICAgfSk7Ci0K
LSAgICBtX2F4aXNWYWx1ZXMucmVzaXplKG1fYXhlcy5zaXplKCkpOwotICAgIG1fYnV0dG9uVmFs
dWVzLnJlc2l6ZShtX2J1dHRvbnMuc2l6ZSgpKTsKLQotICAgIGZvciAoYXV0byYgYnV0dG9uIDog
bV9idXR0b25zKQotICAgICAgICBnZXRDdXJyZW50VmFsdWVGb3JFbGVtZW50KCpidXR0b24pOwot
Ci0gICAgZm9yIChhdXRvJiBheGlzIDogbV9heGVzKQotICAgICAgICBnZXRDdXJyZW50VmFsdWVG
b3JFbGVtZW50KCpheGlzKTsKLX0KLQotdm9pZCBISURHYW1lcGFkOjppbml0RWxlbWVudHNGcm9t
QXJyYXkoQ0ZBcnJheVJlZiBlbGVtZW50cykKLXsKLSAgICBmb3IgKENGSW5kZXggaSA9IDAsIGNv
dW50ID0gQ0ZBcnJheUdldENvdW50KGVsZW1lbnRzKTsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAg
ICAgSU9ISURFbGVtZW50UmVmIGVsZW1lbnQgPSAoSU9ISURFbGVtZW50UmVmKUNGQXJyYXlHZXRW
YWx1ZUF0SW5kZXgoZWxlbWVudHMsIGkpOwotICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQoZWxlbWVu
dCkgIT0gSU9ISURFbGVtZW50R2V0VHlwZUlEKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICAvLyBBcyBhIHBoeXNpY2FsIGVsZW1lbnQgY2FuIGFwcGVhciBpbiB0aGUgZGV2aWNl
IHR3aWNlIChpbiBkaWZmZXJlbnQgY29sbGVjdGlvbnMpIGFuZCBjYW4gYmUKLSAgICAgICAgLy8g
cmVwcmVzZW50ZWQgYnkgZGlmZmVyZW50IElPSElERWxlbWVudFJlZiBvYmplY3RzLCB3ZSBsb29r
IGF0IHRoZSBJT0hJREVsZW1lbnRDb29raWUgd2hpY2gKLSAgICAgICAgLy8gaXMgbWVhbnQgdG8g
YmUgdW5pcXVlIGZvciBlYWNoIHBoeXNpY2FsIGVsZW1lbnQuCi0gICAgICAgIElPSElERWxlbWVu
dENvb2tpZSBjb29raWUgPSBJT0hJREVsZW1lbnRHZXRDb29raWUoZWxlbWVudCk7Ci0gICAgICAg
IGlmIChtX2VsZW1lbnRNYXAuY29udGFpbnMoY29va2llKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIElPSElERWxlbWVudFR5cGUgdHlwZSA9IElPSElERWxlbWVudEdldFR5cGUo
ZWxlbWVudCk7Ci0KLSAgICAgICAgaWYgKCh0eXBlID09IGtJT0hJREVsZW1lbnRUeXBlSW5wdXRf
TWlzYyB8fCB0eXBlID09IGtJT0hJREVsZW1lbnRUeXBlSW5wdXRfQnV0dG9uKSAmJiBtYXliZUFk
ZEJ1dHRvbihlbGVtZW50KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICgo
dHlwZSA9PSBrSU9ISURFbGVtZW50VHlwZUlucHV0X01pc2MgfHwgdHlwZSA9PSBrSU9ISURFbGVt
ZW50VHlwZUlucHV0X0F4aXMpICYmIG1heWJlQWRkQXhpcyhlbGVtZW50KSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIGlmICh0eXBlID09IGtJT0hJREVsZW1lbnRUeXBlQ29sbGVj
dGlvbikKLSAgICAgICAgICAgIGluaXRFbGVtZW50c0Zyb21BcnJheShJT0hJREVsZW1lbnRHZXRD
aGlsZHJlbihlbGVtZW50KSk7Ci0gICAgfQotfQotCi1ib29sIEhJREdhbWVwYWQ6Om1heWJlQWRk
QnV0dG9uKElPSElERWxlbWVudFJlZiBlbGVtZW50KQotewotICAgIHVpbnQzMl90IHVzYWdlUGFn
ZSA9IElPSElERWxlbWVudEdldFVzYWdlUGFnZShlbGVtZW50KTsKLSAgICBpZiAodXNhZ2VQYWdl
ICE9IGtISURQYWdlX0J1dHRvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdWludDMy
X3QgdXNhZ2UgPSBJT0hJREVsZW1lbnRHZXRVc2FnZShlbGVtZW50KTsKLSAgICBpZiAoIXVzYWdl
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBDRkluZGV4IG1pbiA9IElPSElERWxlbWVu
dEdldExvZ2ljYWxNaW4oZWxlbWVudCk7Ci0gICAgQ0ZJbmRleCBtYXggPSBJT0hJREVsZW1lbnRH
ZXRMb2dpY2FsTWF4KGVsZW1lbnQpOwotCi0gICAgbV9idXR0b25zLmFwcGVuZChzdGQ6Om1ha2Vf
dW5pcXVlPEhJREdhbWVwYWRCdXR0b24+KHVzYWdlLCBtaW4sIG1heCwgZWxlbWVudCkpOwotCi0g
ICAgSU9ISURFbGVtZW50Q29va2llIGNvb2tpZSA9IElPSElERWxlbWVudEdldENvb2tpZShlbGVt
ZW50KTsKLSAgICBtX2VsZW1lbnRNYXAuc2V0KGNvb2tpZSwgbV9idXR0b25zLmxhc3QoKS5nZXQo
KSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBISURHYW1lcGFkOjptYXliZUFkZEF4
aXMoSU9ISURFbGVtZW50UmVmIGVsZW1lbnQpCi17Ci0gICAgdWludDMyX3QgdXNhZ2VQYWdlID0g
SU9ISURFbGVtZW50R2V0VXNhZ2VQYWdlKGVsZW1lbnQpOwotICAgIGlmICh1c2FnZVBhZ2UgIT0g
a0hJRFBhZ2VfR2VuZXJpY0Rlc2t0b3ApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVp
bnQzMl90IHVzYWdlID0gSU9ISURFbGVtZW50R2V0VXNhZ2UoZWxlbWVudCk7Ci0gICAgLy8gVGhp
cyByYW5nZSBjb3ZlcnMgdGhlIHN0YW5kYXJkIGF4aXMgdXNhZ2VzLgotICAgIGlmICh1c2FnZSA8
IGtISURVc2FnZV9HRF9YIHx8IHVzYWdlID4ga0hJRFVzYWdlX0dEX1J6KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBDRkluZGV4IG1pbiA9IElPSElERWxlbWVudEdldFBoeXNpY2FsTWlu
KGVsZW1lbnQpOwotICAgIENGSW5kZXggbWF4ID0gSU9ISURFbGVtZW50R2V0UGh5c2ljYWxNYXgo
ZWxlbWVudCk7Ci0KLSAgICBtX2F4ZXMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8SElER2FtZXBh
ZEF4aXM+KG1pbiwgbWF4LCBlbGVtZW50KSk7Ci0KLSAgICBJT0hJREVsZW1lbnRDb29raWUgY29v
a2llID0gSU9ISURFbGVtZW50R2V0Q29va2llKGVsZW1lbnQpOwotICAgIG1fZWxlbWVudE1hcC5z
ZXQoY29va2llLCBtX2F4ZXMubGFzdCgpLmdldCgpKTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIEhJREdhbWVwYWQ6OnZhbHVlQ2hhbmdlZChJT0hJRFZhbHVlUmVmIHZhbHVlKQotewot
ICAgIElPSElERWxlbWVudENvb2tpZSBjb29raWUgPSBJT0hJREVsZW1lbnRHZXRDb29raWUoSU9I
SURWYWx1ZUdldEVsZW1lbnQodmFsdWUpKTsKLSAgICBISURHYW1lcGFkRWxlbWVudCogZWxlbWVu
dCA9IG1fZWxlbWVudE1hcC5nZXQoY29va2llKTsKLQotICAgIC8vIFRoaXMgbWlnaHQgYmUgYW4g
ZWxlbWVudCB3ZSBkb24ndCBjdXJyZW50bHkgaGFuZGxlIGFzIGlucHV0IHNvIHdlIGNhbiBza2lw
IGl0LgotICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZWxlbWVudC0+
cmF3VmFsdWUgPSBJT0hJRFZhbHVlR2V0U2NhbGVkVmFsdWUodmFsdWUsIGtJT0hJRFZhbHVlU2Nh
bGVUeXBlUGh5c2ljYWwpOwotCi0gICAgaWYgKGVsZW1lbnQtPmlzQnV0dG9uKCkpIHsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYnV0dG9ucy5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgaWYgKG1fYnV0dG9uc1tpXS5nZXQoKSA9PSBlbGVtZW50KQotICAgICAgICAgICAg
ICAgIG1fYnV0dG9uVmFsdWVzW2ldID0gZWxlbWVudC0+bm9ybWFsaXplZFZhbHVlKCk7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmlzQXhpcygpKSB7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX2F4ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlm
IChtX2F4ZXNbaV0uZ2V0KCkgPT0gZWxlbWVudCkKLSAgICAgICAgICAgICAgICBtX2F4aXNWYWx1
ZXNbaV0gPSBlbGVtZW50LT5ub3JtYWxpemVkVmFsdWUoKTsKLSAgICAgICAgfQotICAgIH0gZWxz
ZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIG1fbGFzdFVwZGF0ZVRpbWUg
PSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL0hJREdhbWVwYWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQzOTQ3ODg4
ODFhNGIwNDRiNmE4ZjdlN2MyZjBhOGFhNzE0MGVkYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2Ft
ZXBhZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIEhJREdhbWVwYWRfaAotI2RlZmluZSBISURHYW1lcGFkX2gKLQotI2lmIEVOQUJMRShHQU1F
UEFEKQotCi0jaW5jbHVkZSAiUGxhdGZvcm1HYW1lcGFkLmgiCi0jaW5jbHVkZSA8SU9LaXQvaGlk
L0lPSElERGV2aWNlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IEhJREdhbWVwYWRF
bGVtZW50IHsKLSAgICBISURHYW1lcGFkRWxlbWVudChkb3VibGUgdGhlTWluLCBkb3VibGUgdGhl
TWF4LCBJT0hJREVsZW1lbnRSZWYgZWxlbWVudCkKLSAgICAgICAgOiBtaW4odGhlTWluKQotICAg
ICAgICAsIG1heCh0aGVNYXgpCi0gICAgICAgICwgcmF3VmFsdWUodGhlTWluKQotICAgICAgICAs
IGlvaGlkRWxlbWVudChlbGVtZW50KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdmlydHVhbCB+
SElER2FtZXBhZEVsZW1lbnQoKQotICAgIHsKLSAgICB9Ci0KLSAgICBkb3VibGUgbWluOwotICAg
IGRvdWJsZSBtYXg7Ci0gICAgZG91YmxlIHJhd1ZhbHVlOwotICAgIFJldGFpblB0cjxJT0hJREVs
ZW1lbnRSZWY+IGlvaGlkRWxlbWVudDsKLQotICAgIHZpcnR1YWwgYm9vbCBpc0J1dHRvbigpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzQXhpcygpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9Ci0KLSAgICB2aXJ0dWFsIGRvdWJsZSBub3JtYWxpemVkVmFsdWUoKSA9
IDA7Ci19OwotCi1zdHJ1Y3QgSElER2FtZXBhZEJ1dHRvbiA6IEhJREdhbWVwYWRFbGVtZW50IHsK
LSAgICBISURHYW1lcGFkQnV0dG9uKHVpbnQzMl90IHRoZVByaW9yaXR5LCBkb3VibGUgbWluLCBk
b3VibGUgbWF4LCBJT0hJREVsZW1lbnRSZWYgZWxlbWVudCkKLSAgICAgICAgOiBISURHYW1lcGFk
RWxlbWVudChtaW4sIG1heCwgZWxlbWVudCkKLSAgICAgICAgLCBwcmlvcml0eSh0aGVQcmlvcml0
eSkKLSAgICB7Ci0gICAgfQotCi0gICAgdWludDMyX3QgcHJpb3JpdHk7Ci0KLSAgICBib29sIGlz
QnV0dG9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgLy8gQnV0dG9u
cyBub3JtYWxpemUgdG8gdGhlIHJhbmdlICgwLjApIC0gKDEuMCkKLSAgICBkb3VibGUgbm9ybWFs
aXplZFZhbHVlKCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIHJldHVybiAocmF3VmFsdWUgLSBt
aW4pIC8gKG1heCAtIG1pbik7Ci0gICAgfQotfTsKLQotc3RydWN0IEhJREdhbWVwYWRBeGlzIDog
SElER2FtZXBhZEVsZW1lbnQgewotICAgIEhJREdhbWVwYWRBeGlzKGRvdWJsZSBtaW4sIGRvdWJs
ZSBtYXgsIElPSElERWxlbWVudFJlZiBlbGVtZW50KQotICAgICAgICA6IEhJREdhbWVwYWRFbGVt
ZW50KG1pbiwgbWF4LCBlbGVtZW50KQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGlzQXhpcygp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIC8vIEF4ZXMgbm9ybWFsaXpl
IHRvIHRoZSByYW5nZSAoLTEuMCkgLSAoMS4wKQotICAgIGRvdWJsZSBub3JtYWxpemVkVmFsdWUo
KSBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuICgoKHJhd1ZhbHVlIC0gbWluKSAvICht
YXggLSBtaW4pKSAqIDIpIC0gMTsKLSAgICB9Ci19OwotCi1jbGFzcyBISURHYW1lcGFkIDogcHVi
bGljIFBsYXRmb3JtR2FtZXBhZCB7Ci1wdWJsaWM6Ci0gICAgSElER2FtZXBhZChJT0hJRERldmlj
ZVJlZiwgdW5zaWduZWQgaW5kZXgpOwotCi0gICAgSU9ISUREZXZpY2VSZWYgaGlkRGV2aWNlKCkg
Y29uc3QgeyByZXR1cm4gbV9oaWREZXZpY2UuZ2V0KCk7IH0KLQotICAgIHZvaWQgdmFsdWVDaGFu
Z2VkKElPSElEVmFsdWVSZWYpOwotCi0gICAgY29uc3QgVmVjdG9yPGRvdWJsZT4mIGF4aXNWYWx1
ZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2F4aXNWYWx1ZXM7IH0KLSAgICBjb25zdCBWZWN0
b3I8ZG91YmxlPiYgYnV0dG9uVmFsdWVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9idXR0b25W
YWx1ZXM7IH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIGluaXRFbGVtZW50cygpOwotICAgIHZvaWQg
aW5pdEVsZW1lbnRzRnJvbUFycmF5KENGQXJyYXlSZWYpOwotCi0gICAgYm9vbCBtYXliZUFkZEJ1
dHRvbihJT0hJREVsZW1lbnRSZWYpOwotICAgIGJvb2wgbWF5YmVBZGRBeGlzKElPSElERWxlbWVu
dFJlZik7Ci0KLSAgICB2b2lkIGdldEN1cnJlbnRWYWx1ZUZvckVsZW1lbnQoY29uc3QgSElER2Ft
ZXBhZEVsZW1lbnQmKTsKLQotICAgIFJldGFpblB0cjxJT0hJRERldmljZVJlZj4gbV9oaWREZXZp
Y2U7Ci0KLSAgICBIYXNoTWFwPElPSElERWxlbWVudENvb2tpZSwgSElER2FtZXBhZEVsZW1lbnQq
PiBtX2VsZW1lbnRNYXA7Ci0KLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEhJREdhbWVwYWRC
dXR0b24+PiBtX2J1dHRvbnM7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxISURHYW1lcGFk
QXhpcz4+IG1fYXhlczsKLSAgICBWZWN0b3I8ZG91YmxlPiBtX2J1dHRvblZhbHVlczsKLSAgICBW
ZWN0b3I8ZG91YmxlPiBtX2F4aXNWYWx1ZXM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKLSNlbmRpZiAvLyBISURHYW1lcGFkX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9ISURHYW1lcGFkUHJvdmlkZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJREdhbWVwYWRQcm92aWRlci5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmNDQxZTZmYWJmNmI3YjA5YTc2NGI2NjIz
YmIyYzQzNDg2YTBjZDUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJREdhbWVwYWRQcm92aWRlci5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwyNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJISURHYW1lcGFkUHJvdmlkZXIuaCIKLQotI2lmIEVOQUJMRShH
QU1FUEFEKQotCi0jaW5jbHVkZSAiR2FtZXBhZFByb3ZpZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAi
TG9nZ2luZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtR2FtZXBhZC5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLXN0YXRpYyBjb25zdCBkb3VibGUgQ29ubmVjdGlvbkRlbGF5SW50ZXJ2YWwgPSAw
LjU7Ci1zdGF0aWMgY29uc3QgZG91YmxlIElucHV0Tm90aWZpY2F0aW9uRGVsYXkgPSAwLjA1Owot
Ci1zdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gZGV2aWNlTWF0Y2hpbmdEaWN0aW9u
YXJ5KHVpbnQzMl90IHVzYWdlUGFnZSwgdWludDMyX3QgdXNhZ2UpCi17Ci0gICAgQVNTRVJUKHVz
YWdlUGFnZSk7Ci0gICAgQVNTRVJUKHVzYWdlKTsKLQotICAgIFJldGFpblB0cjxDRk51bWJlclJl
Zj4gcGFnZU51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwga0NGTnVtYmVySW50VHlwZSwgJnVzYWdlUGFnZSkpOwotICAgIFJldGFpblB0cjxDRk51bWJl
clJlZj4gdXNhZ2VOdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZ1c2FnZSkpOwotCi0gICAgQ0ZTdHJpbmdSZWYga2V5
c1tdID0geyBDRlNUUihrSU9ISUREZXZpY2VVc2FnZVBhZ2VLZXkpLCBDRlNUUihrSU9ISUREZXZp
Y2VVc2FnZUtleSkgfTsKLSAgICBDRk51bWJlclJlZiB2YWx1ZXNbXSA9IHsgcGFnZU51bWJlci5n
ZXQoKSwgdXNhZ2VOdW1iZXIuZ2V0KCkgfTsKLQotICAgIHJldHVybiBhZG9wdENGKENGRGljdGlv
bmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoY29uc3Qgdm9pZCoqKWtleXMsIChjb25z
dCB2b2lkKiopdmFsdWVzLCAyLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZU
eXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRldmljZUFk
ZGVkQ2FsbGJhY2sodm9pZCogY29udGV4dCwgSU9SZXR1cm4sIHZvaWQqLCBJT0hJRERldmljZVJl
ZiBkZXZpY2UpCi17Ci0gICAgSElER2FtZXBhZFByb3ZpZGVyKiBsaXN0ZW5lciA9IHN0YXRpY19j
YXN0PEhJREdhbWVwYWRQcm92aWRlcio+KGNvbnRleHQpOwotICAgIGxpc3RlbmVyLT5kZXZpY2VB
ZGRlZChkZXZpY2UpOwotfQotCi1zdGF0aWMgdm9pZCBkZXZpY2VSZW1vdmVkQ2FsbGJhY2sodm9p
ZCogY29udGV4dCwgSU9SZXR1cm4sIHZvaWQqLCBJT0hJRERldmljZVJlZiBkZXZpY2UpCi17Ci0g
ICAgSElER2FtZXBhZFByb3ZpZGVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PEhJREdhbWVwYWRQ
cm92aWRlcio+KGNvbnRleHQpOwotICAgIGxpc3RlbmVyLT5kZXZpY2VSZW1vdmVkKGRldmljZSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIGRldmljZVZhbHVlc0NoYW5nZWRDYWxsYmFjayh2b2lkKiBjb250
ZXh0LCBJT1JldHVybiByZXN1bHQsIHZvaWQqLCBJT0hJRFZhbHVlUmVmIHZhbHVlKQotewotICAg
IC8vIEEgbm9uLXplcm8gcmVzdWx0IHZhbHVlIGluZGljYXRlcyBhbiBlcnJvciB0aGF0IHdlIGNh
biBkbyBub3RoaW5nIGFib3V0IGZvciBpbnB1dCB2YWx1ZXMuCi0gICAgaWYgKHJlc3VsdCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgSElER2FtZXBhZFByb3ZpZGVyKiBsaXN0ZW5lciA9IHN0YXRp
Y19jYXN0PEhJREdhbWVwYWRQcm92aWRlcio+KGNvbnRleHQpOwotICAgIGxpc3RlbmVyLT52YWx1
ZXNDaGFuZ2VkKHZhbHVlKTsKLX0KLQotSElER2FtZXBhZFByb3ZpZGVyJiBISURHYW1lcGFkUHJv
dmlkZXI6OnNpbmdsZXRvbigpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhJREdhbWVw
YWRQcm92aWRlcj4gc2hhcmVkTGlzdGVuZXI7Ci0gICAgcmV0dXJuIHNoYXJlZExpc3RlbmVyOwot
fQotCi1ISURHYW1lcGFkUHJvdmlkZXI6OkhJREdhbWVwYWRQcm92aWRlcigpCi0gICAgOiBtX3No
b3VsZERpc3BhdGNoQ2FsbGJhY2tzKGZhbHNlKQotICAgICwgbV9jb25uZWN0aW9uRGVsYXlUaW1l
cigqdGhpcywgJkhJREdhbWVwYWRQcm92aWRlcjo6Y29ubmVjdGlvbkRlbGF5VGltZXJGaXJlZCkK
LSAgICAsIG1faW5wdXROb3RpZmljYXRpb25UaW1lcigqdGhpcywgJkhJREdhbWVwYWRQcm92aWRl
cjo6aW5wdXROb3RpZmljYXRpb25UaW1lckZpcmVkKQotewotICAgIG1fbWFuYWdlciA9IGFkb3B0
Q0YoSU9ISURNYW5hZ2VyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtJT0hJRE9wdGlvbnNU
eXBlTm9uZSkpOwotCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gam95c3RpY2tEaWN0
aW9uYXJ5ID0gZGV2aWNlTWF0Y2hpbmdEaWN0aW9uYXJ5KGtISURQYWdlX0dlbmVyaWNEZXNrdG9w
LCBrSElEVXNhZ2VfR0RfSm95c3RpY2spOwotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
IGdhbWVwYWREaWN0aW9uYXJ5ID0gZGV2aWNlTWF0Y2hpbmdEaWN0aW9uYXJ5KGtISURQYWdlX0dl
bmVyaWNEZXNrdG9wLCBrSElEVXNhZ2VfR0RfR2FtZVBhZCk7Ci0KLSAgICBDRkRpY3Rpb25hcnlS
ZWYgZGV2aWNlc1tdID0geyBqb3lzdGlja0RpY3Rpb25hcnkuZ2V0KCksIGdhbWVwYWREaWN0aW9u
YXJ5LmdldCgpIH07Ci0KLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gbWF0Y2hpbmdBcnJheSA9
IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoY29uc3Qgdm9pZCoq
KWRldmljZXMsIDIsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKLQotICAgIElPSElETWFuYWdl
clNldERldmljZU1hdGNoaW5nTXVsdGlwbGUobV9tYW5hZ2VyLmdldCgpLCBtYXRjaGluZ0FycmF5
LmdldCgpKTsKLSAgICBJT0hJRE1hbmFnZXJSZWdpc3RlckRldmljZU1hdGNoaW5nQ2FsbGJhY2so
bV9tYW5hZ2VyLmdldCgpLCBkZXZpY2VBZGRlZENhbGxiYWNrLCB0aGlzKTsKLSAgICBJT0hJRE1h
bmFnZXJSZWdpc3RlckRldmljZVJlbW92YWxDYWxsYmFjayhtX21hbmFnZXIuZ2V0KCksIGRldmlj
ZVJlbW92ZWRDYWxsYmFjaywgdGhpcyk7Ci0gICAgSU9ISURNYW5hZ2VyUmVnaXN0ZXJJbnB1dFZh
bHVlQ2FsbGJhY2sobV9tYW5hZ2VyLmdldCgpLCBkZXZpY2VWYWx1ZXNDaGFuZ2VkQ2FsbGJhY2ss
IHRoaXMpOwotfQotCi11bnNpZ25lZCBISURHYW1lcGFkUHJvdmlkZXI6OmluZGV4Rm9yTmV3bHlD
b25uZWN0ZWREZXZpY2UoKQotewotICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICB3aGlsZSAo
aW5kZXggPCBtX2dhbWVwYWRWZWN0b3Iuc2l6ZSgpICYmIG1fZ2FtZXBhZFZlY3RvcltpbmRleF0p
Ci0gICAgICAgICsraW5kZXg7Ci0KLSAgICByZXR1cm4gaW5kZXg7Ci19Ci0KLXZvaWQgSElER2Ft
ZXBhZFByb3ZpZGVyOjpjb25uZWN0aW9uRGVsYXlUaW1lckZpcmVkKCkKLXsKLSAgICBtX3Nob3Vs
ZERpc3BhdGNoQ2FsbGJhY2tzID0gdHJ1ZTsKLX0KLQotdm9pZCBISURHYW1lcGFkUHJvdmlkZXI6
Om9wZW5BbmRTY2hlZHVsZU1hbmFnZXIoKQotewotICAgIExPRyhHYW1lcGFkLCAiSElER2FtZXBh
ZFByb3ZpZGVyIG9wZW5pbmcvc2NoZWR1bGluZyBISUQgbWFuYWdlciIpOwotCi0gICAgQVNTRVJU
KG1fZ2FtZXBhZFZlY3Rvci5pc0VtcHR5KCkpOwotICAgIEFTU0VSVChtX2dhbWVwYWRNYXAuaXNF
bXB0eSgpKTsKLQotICAgIG1fc2hvdWxkRGlzcGF0Y2hDYWxsYmFja3MgPSBmYWxzZTsKLQotICAg
IElPSElETWFuYWdlclNjaGVkdWxlV2l0aFJ1bkxvb3AobV9tYW5hZ2VyLmdldCgpLCBDRlJ1bkxv
b3BHZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7Ci0gICAgSU9ISURNYW5hZ2Vy
T3BlbihtX21hbmFnZXIuZ2V0KCksIGtJT0hJRE9wdGlvbnNUeXBlTm9uZSk7Ci0KLSAgICAvLyBB
bnkgY29ubmVjdGlvbnMgd2UgYXJlIG5vdGlmaWVkIG9mIHdpdGhpbiB0aGUgQ29ubmVjdGlvbkRl
bGF5SW50ZXJ2YWwgb2YgbGlzdGVuaW5nIGxpa2VseSByZXByZXNlbnQKLSAgICAvLyBkZXZpY2Vz
IHRoYXQgd2VyZSBhbHJlYWR5IGNvbm5lY3RlZCwgc28gd2Ugc3VwcHJlc3Mgbm90aWZ5aW5nIGNs
aWVudHMgb2YgdGhlc2UuCi0gICAgbV9jb25uZWN0aW9uRGVsYXlUaW1lci5zdGFydE9uZVNob3Qo
Q29ubmVjdGlvbkRlbGF5SW50ZXJ2YWwpOwotfQotCi12b2lkIEhJREdhbWVwYWRQcm92aWRlcjo6
Y2xvc2VBbmRVbnNjaGVkdWxlTWFuYWdlcigpCi17Ci0gICAgTE9HKEdhbWVwYWQsICJISURHYW1l
cGFkUHJvdmlkZXIgY2xvc2luZy91bnNjaGVkdWxpbmcgSElEIG1hbmFnZXIiKTsKLQotICAgIElP
SElETWFuYWdlclVuc2NoZWR1bGVGcm9tUnVuTG9vcChtX21hbmFnZXIuZ2V0KCksIENGUnVuTG9v
cEdldEN1cnJlbnQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLSAgICBJT0hJRE1hbmFnZXJD
bG9zZShtX21hbmFnZXIuZ2V0KCksIGtJT0hJRE9wdGlvbnNUeXBlTm9uZSk7Ci0KLSAgICBtX2dh
bWVwYWRWZWN0b3IuY2xlYXIoKTsKLSAgICBtX2dhbWVwYWRNYXAuY2xlYXIoKTsKLQotICAgIG1f
Y29ubmVjdGlvbkRlbGF5VGltZXIuc3RvcCgpOwotfQotCi12b2lkIEhJREdhbWVwYWRQcm92aWRl
cjo6c3RhcnRNb25pdG9yaW5nR2FtZXBhZHMoR2FtZXBhZFByb3ZpZGVyQ2xpZW50KiBjbGllbnQp
Ci17Ci0gICAgYm9vbCBzaG91bGRPcGVuQW5kU2NoZWR1bGVNYW5hZ2VyID0gbV9jbGllbnRzLmlz
RW1wdHkoKTsKLQotICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKGNsaWVudCkpOwotICAg
IG1fY2xpZW50cy5hZGQoY2xpZW50KTsKLQotICAgIGlmIChzaG91bGRPcGVuQW5kU2NoZWR1bGVN
YW5hZ2VyKQotICAgICAgICBvcGVuQW5kU2NoZWR1bGVNYW5hZ2VyKCk7Ci19Ci12b2lkIEhJREdh
bWVwYWRQcm92aWRlcjo6c3RvcE1vbml0b3JpbmdHYW1lcGFkcyhHYW1lcGFkUHJvdmlkZXJDbGll
bnQqIGNsaWVudCkKLXsKLSAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKGNsaWVudCkpOwot
Ci0gICAgYm9vbCBzaG91bGRDbG9zZUFuZFVuc2NoZWR1bGVNYW5hZ2VyID0gbV9jbGllbnRzLnJl
bW92ZShjbGllbnQpICYmIG1fY2xpZW50cy5pc0VtcHR5KCk7Ci0KLSAgICBpZiAoc2hvdWxkQ2xv
c2VBbmRVbnNjaGVkdWxlTWFuYWdlcikKLSAgICAgICAgY2xvc2VBbmRVbnNjaGVkdWxlTWFuYWdl
cigpOwotfQotCi12b2lkIEhJREdhbWVwYWRQcm92aWRlcjo6ZGV2aWNlQWRkZWQoSU9ISUREZXZp
Y2VSZWYgZGV2aWNlKQotewotICAgIEFTU0VSVCghbV9nYW1lcGFkTWFwLmdldChkZXZpY2UpKTsK
LQotICAgIExPRyhHYW1lcGFkLCAiSElER2FtZXBhZFByb3ZpZGVyIGRldmljZSAlcCBhZGRlZCIs
IGRldmljZSk7Ci0KLSAgICB1bnNpZ25lZCBpbmRleCA9IGluZGV4Rm9yTmV3bHlDb25uZWN0ZWRE
ZXZpY2UoKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SElER2FtZXBhZD4gZ2FtZXBhZCA9IHN0ZDo6
bWFrZV91bmlxdWU8SElER2FtZXBhZD4oZGV2aWNlLCBpbmRleCk7Ci0KLSAgICBpZiAobV9nYW1l
cGFkVmVjdG9yLnNpemUoKSA8PSBpbmRleCkKLSAgICAgICAgbV9nYW1lcGFkVmVjdG9yLnJlc2l6
ZShpbmRleCArIDEpOwotCi0gICAgbV9nYW1lcGFkVmVjdG9yW2luZGV4XSA9IGdhbWVwYWQuZ2V0
KCk7Ci0gICAgbV9nYW1lcGFkTWFwLnNldChkZXZpY2UsIFdURk1vdmUoZ2FtZXBhZCkpOwotCi0g
ICAgaWYgKCFtX3Nob3VsZERpc3BhdGNoQ2FsbGJhY2tzKSB7Ci0gICAgICAgIC8vIFRoaXMgYWRk
ZWQgZGV2aWNlIGlzIHRoZSByZXN1bHQgb2YgdXMgc3RhcnRpbmcgdG8gbW9uaXRvciBnYW1lcGFk
cy4KLSAgICAgICAgLy8gV2UnbGwgZ2V0IG5vdGlmaWVkIG9mIGFsbCBjb25uZWN0ZWQgZGV2aWNl
cyBkdXJpbmcgdGhpcyBjdXJyZW50IHNwaW4gb2YgdGhlIHJ1bmxvb3AKLSAgICAgICAgLy8gYW5k
IHdlIGRvbid0IHdhbnQgdG8gdGVsbCB0aGUgY2xpZW50IGFib3V0IGFueSBvZiB0aGVtLgotICAg
ICAgICAvLyBUaGUgbV9jb25uZWN0aW9uRGVsYXlUaW1lciBmaXJlcyBpbiBhIHN1YnNlcXVlbnQg
c3BpbiBvZiB0aGUgcnVubG9vcCBhZnRlciB3aGljaAotICAgICAgICAvLyBhbnkgY29ubmVjdGlv
biBldmVudHMgYXJlIGFjdHVhbCBuZXcgZGV2aWNlcy4KLSAgICAgICAgbV9jb25uZWN0aW9uRGVs
YXlUaW1lci5zdGFydE9uZVNob3QoMCk7Ci0KLSAgICAgICAgTE9HKEdhbWVwYWQsICJEZXZpY2Ug
JXAgd2FzIGFkZGVkIHdoaWxlIHN1cHByZXNzaW5nIGNhbGxiYWNrcywgc28gdGhpcyBzaG91bGQg
YmUgYW4gJ2FscmVhZHkgY29ubmVjdGVkJyBldmVudCIsIGRldmljZSk7Ci0KLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9jbGllbnRzKQotICAgICAg
ICBjbGllbnQtPnBsYXRmb3JtR2FtZXBhZENvbm5lY3RlZCgqbV9nYW1lcGFkVmVjdG9yW2luZGV4
XSk7Ci19Ci0KLXZvaWQgSElER2FtZXBhZFByb3ZpZGVyOjpkZXZpY2VSZW1vdmVkKElPSElERGV2
aWNlUmVmIGRldmljZSkKLXsKLSAgICBMT0coR2FtZXBhZCwgIkhJREdhbWVwYWRQcm92aWRlciBk
ZXZpY2UgJXAgcmVtb3ZlZCIsIGRldmljZSk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SElER2Ft
ZXBhZD4gcmVtb3ZlZEdhbWVwYWQgPSByZW1vdmVHYW1lcGFkRm9yRGV2aWNlKGRldmljZSk7Ci0g
ICAgQVNTRVJUKHJlbW92ZWRHYW1lcGFkKTsKLQotICAgIC8vIEFueSB0aW1lIHdlIGdldCBhIGRl
dmljZSByZW1vdmVkIGNhbGxiYWNrIHdlIGtub3cgaXQncyBhIHJlYWwgZXZlbnQgYW5kIG5vdCBh
biAnYWxyZWFkeSBjb25uZWN0ZWQnIGV2ZW50LgotICAgIC8vIFdlIHNob3VsZCBhbHdheXMgc3Rv
cCBzdXBwcmVzc2luZyBjYWxsYmFja3Mgd2hlbiB3ZSByZWNlaXZlIHN1Y2ggYW4gZXZlbnQuCi0g
ICAgbV9zaG91bGREaXNwYXRjaENhbGxiYWNrcyA9IHRydWU7Ci0KLSAgICBmb3IgKGF1dG8mIGNs
aWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50LT5wbGF0Zm9ybUdhbWVwYWREaXNjb25u
ZWN0ZWQoKnJlbW92ZWRHYW1lcGFkKTsKLX0KLQotdm9pZCBISURHYW1lcGFkUHJvdmlkZXI6OnZh
bHVlc0NoYW5nZWQoSU9ISURWYWx1ZVJlZiB2YWx1ZSkKLXsKLSAgICBJT0hJRERldmljZVJlZiBk
ZXZpY2UgPSBJT0hJREVsZW1lbnRHZXREZXZpY2UoSU9ISURWYWx1ZUdldEVsZW1lbnQodmFsdWUp
KTsKLQotICAgIEhJREdhbWVwYWQqIGdhbWVwYWQgPSBtX2dhbWVwYWRNYXAuZ2V0KGRldmljZSk7
Ci0KLSAgICAvLyBXaGVuIHN0YXJ0aW5nIG1vbml0b3Jpbmcgd2UgbWlnaHQgZ2V0IGEgdmFsdWUg
Y2hhbmdlZCBjYWxsYmFjayBiZWZvcmUgd2UgZXZlbiBrbm93IHRoZSBkZXZpY2UgaXMgY29ubmVj
dGVkLgotICAgIGlmICghZ2FtZXBhZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ2FtZXBhZC0+
dmFsdWVDaGFuZ2VkKHZhbHVlKTsKLQotICAgIC8vIFRoaXMgaXNBY3RpdmUgY2hlY2sgaXMgbmVj
ZXNzYXJ5IGFzIHdlIHdhbnQgdG8gZGVsYXkgaW5wdXQgbm90aWZpY2F0aW9ucyBmcm9tIHRoZSB0
aW1lIG9mIHRoZSBmaXJzdCBpbnB1dCwKLSAgICAvLyBhbmQgbm90IHB1c2ggdGhlIG5vdGlmaWNh
dGlvbiBvdXQgb24gZXZlcnkgc3Vic2VxdWVudCBpbnB1dC4KLSAgICBpZiAoIW1faW5wdXROb3Rp
ZmljYXRpb25UaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX2lucHV0Tm90aWZpY2F0aW9uVGlt
ZXIuc3RhcnRPbmVTaG90KElucHV0Tm90aWZpY2F0aW9uRGVsYXkpOwotfQotCi12b2lkIEhJREdh
bWVwYWRQcm92aWRlcjo6aW5wdXROb3RpZmljYXRpb25UaW1lckZpcmVkKCkKLXsKLSAgICBpZiAo
IW1fc2hvdWxkRGlzcGF0Y2hDYWxsYmFja3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAo
YXV0byYgY2xpZW50IDogbV9jbGllbnRzKQotICAgICAgICBjbGllbnQtPnBsYXRmb3JtR2FtZXBh
ZElucHV0QWN0aXZpdHkoKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEhJREdhbWVwYWQ+IEhJREdh
bWVwYWRQcm92aWRlcjo6cmVtb3ZlR2FtZXBhZEZvckRldmljZShJT0hJRERldmljZVJlZiBkZXZp
Y2UpCi17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEhJREdhbWVwYWQ+IHJlc3VsdCA9IG1fZ2FtZXBh
ZE1hcC50YWtlKGRldmljZSk7Ci0gICAgQVNTRVJUKHJlc3VsdCk7Ci0KLSAgICBhdXRvIGkgPSBt
X2dhbWVwYWRWZWN0b3IuZmluZChyZXN1bHQuZ2V0KCkpOwotICAgIGlmIChpICE9IG5vdEZvdW5k
KQotICAgICAgICBtX2dhbWVwYWRWZWN0b3JbaV0gPSBudWxscHRyOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEdB
TUVQQUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBh
ZFByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZFByb3Zp
ZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMDY4ZGY2YmIxOWQ1NDU4MGJk
NTcxN2VmMWFkNmMzN2U4OTA5M2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJREdhbWVwYWRQcm92aWRl
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
SElER2FtZXBhZFByb3ZpZGVyX2gKLSNkZWZpbmUgSElER2FtZXBhZFByb3ZpZGVyX2gKLQotI2lm
IEVOQUJMRShHQU1FUEFEKQotCi0jaW5jbHVkZSAiR2FtZXBhZFByb3ZpZGVyLmgiCi0jaW5jbHVk
ZSAiSElER2FtZXBhZC5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8SU9LaXQvaGlk
L0lPSElETWFuYWdlci5oPgotI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgotI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgR2FtZXBhZFByb3ZpZGVyQ2xpZW50OwotCi1jbGFzcyBISURHYW1lcGFk
UHJvdmlkZXIgOiBwdWJsaWMgR2FtZXBhZFByb3ZpZGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShISURHYW1lcGFkUHJvdmlkZXIpOwotICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3ll
ZDxISURHYW1lcGFkUHJvdmlkZXI+OwotcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBISURHYW1lcGFkUHJvdmlkZXImIHNpbmdsZXRvbigpOwotCi0gICAgdmlydHVhbCB2b2lkIHN0
YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRlckNsaWVudCopOwotICAgIHZpcnR1
YWwgdm9pZCBzdG9wTW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRlckNsaWVudCopOwot
ICAgIHZpcnR1YWwgY29uc3QgVmVjdG9yPFBsYXRmb3JtR2FtZXBhZCo+JiBwbGF0Zm9ybUdhbWVw
YWRzKCkgeyByZXR1cm4gbV9nYW1lcGFkVmVjdG9yOyB9Ci0KLSAgICB2b2lkIGRldmljZUFkZGVk
KElPSElERGV2aWNlUmVmKTsKLSAgICB2b2lkIGRldmljZVJlbW92ZWQoSU9ISUREZXZpY2VSZWYp
OwotICAgIHZvaWQgdmFsdWVzQ2hhbmdlZChJT0hJRFZhbHVlUmVmKTsKLQotcHJpdmF0ZToKLSAg
ICBISURHYW1lcGFkUHJvdmlkZXIoKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxISURHYW1lcGFk
PiByZW1vdmVHYW1lcGFkRm9yRGV2aWNlKElPSElERGV2aWNlUmVmKTsKLQotICAgIHZvaWQgb3Bl
bkFuZFNjaGVkdWxlTWFuYWdlcigpOwotICAgIHZvaWQgY2xvc2VBbmRVbnNjaGVkdWxlTWFuYWdl
cigpOwotCi0gICAgdm9pZCBjb25uZWN0aW9uRGVsYXlUaW1lckZpcmVkKCk7Ci0gICAgdm9pZCBp
bnB1dE5vdGlmaWNhdGlvblRpbWVyRmlyZWQoKTsKLQotICAgIHVuc2lnbmVkIGluZGV4Rm9yTmV3
bHlDb25uZWN0ZWREZXZpY2UoKTsKLQotICAgIFZlY3RvcjxQbGF0Zm9ybUdhbWVwYWQqPiBtX2dh
bWVwYWRWZWN0b3I7Ci0gICAgSGFzaE1hcDxJT0hJRERldmljZVJlZiwgc3RkOjp1bmlxdWVfcHRy
PEhJREdhbWVwYWQ+PiBtX2dhbWVwYWRNYXA7Ci0KLSAgICBSZXRhaW5QdHI8SU9ISURNYW5hZ2Vy
UmVmPiBtX21hbmFnZXI7Ci0KLSAgICBIYXNoU2V0PEdhbWVwYWRQcm92aWRlckNsaWVudCo+IG1f
Y2xpZW50czsKLSAgICBib29sIG1fc2hvdWxkRGlzcGF0Y2hDYWxsYmFja3M7Ci0KLSAgICBUaW1l
ciBtX2Nvbm5lY3Rpb25EZWxheVRpbWVyOwotICAgIFRpbWVyIG1faW5wdXROb3RpZmljYXRpb25U
aW1lcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShH
QU1FUEFEKQotI2VuZGlmIC8vIEhJREdhbWVwYWRQcm92aWRlcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285433</attachid>
            <date>2016-08-05 10:36:49 -0700</date>
            <delta_ts>2016-08-05 11:29:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160599-20160805103522.patch</filename>
            <type>text/plain</type>
            <size>160397</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA0MDQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjA5ZTAzYTRjMzMzZmNj
ZGIzMjVhY2NlNmU1ZmQ0NjJkZDI0MGVjNi4uNTE4NGI2MzIwOTYxZGNiMTQzOGU1OTY4NThmMmM4
NTE1MDM2YmY4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNyBAQAorMjAxNi0wOC0wNSAgQnJh
ZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgQ3JlYXRlIHBsYXRmb3Jt
L2dhbWVwYWQgZGlyZWN0b3J5LCBhbmQgbWFrZSBHYW1lcGFkUHJvdmlkZXIgcHVyZSB2aXJ0dWFs
ICh3aXRoIGEgZGVmYXVsdCBlbXB0eSBpbXBsZW1lbnRhdGlvbikuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA1OTkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE5vIGJlaGF2aW9y
IGNoYW5nZSkuCisKKyAgICAgICAgRXhjZXB0IGZvciB0aGUgR2FtZXBhZFByb3ZpZGVyL0VtcHR5
R2FtZXBhZFByb3ZpZGVyIHNwbGl0LCB0aGlzIGlzIGp1c3QgbW92aW5nIGZpbGVzIGFyb3VuZC4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtl
OgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9MaW51eC5jbWFrZToKKwor
ICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQuaDogUmVtb3ZlZC4KKyAgICAgICAgCisgICAgICAg
ICogcGxhdGZvcm0vZ2FtZXBhZC9FbXB0eUdhbWVwYWRQcm92aWRlci5jcHA6IAorICAgICAgICAo
V2ViQ29yZTo6RW1wdHlHYW1lcGFkUHJvdmlkZXI6OnN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkVtcHR5R2FtZXBhZFByb3ZpZGVyOjpzdG9wTW9uaXRvcmluZ0dh
bWVwYWRzKToKKyAgICAgICAgKFdlYkNvcmU6OkVtcHR5R2FtZXBhZFByb3ZpZGVyOjpwbGF0Zm9y
bUdhbWVwYWRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL0VtcHR5R2FtZXBhZFByb3Zp
ZGVyLmg6CisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQvR2FtZXBhZFByb3Zp
ZGVyLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dhbWVwYWRQcm92
aWRlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbik6
CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkUHJvdmlkZXI6OnNldFNoYXJlZFByb3ZpZGVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL0dhbWVwYWRQcm92aWRlci5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZFByb3ZpZGVyLmguCisgICAgICAgIChX
ZWJDb3JlOjpHYW1lcGFkUHJvdmlkZXI6On5HYW1lcGFkUHJvdmlkZXIpOgorICAgICAgICAKKyAg
ICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL0dhbWVwYWRQcm92aWRlckNsaWVudC5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZFByb3ZpZGVyQ2xpZW50LmguCisg
ICAgICAgIChXZWJDb3JlOjpHYW1lcGFkUHJvdmlkZXJDbGllbnQ6On5HYW1lcGFkUHJvdmlkZXJD
bGllbnQpOgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL1BsYXRmb3JtR2Ft
ZXBhZC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HYW1l
cGFkLmguCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdhbWVwYWQ6On5QbGF0Zm9ybUdhbWVw
YWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1HYW1lcGFkOjppZCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUdhbWVwYWQ6OmluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtR2FtZXBhZDo6bGFzdFVwZGF0ZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1H
YW1lcGFkOjpjb25uZWN0VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUdhbWVwYWQ6
OlBsYXRmb3JtR2FtZXBhZCk6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL2RlcHJlY2F0
ZWQvR2FtZXBhZHMuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dhbWVw
YWRzLmguCisKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFkL2VmbC9HYW1lcGFkc0VmbC5jcHA6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvR2FtZXBhZHNFZmwuY3Bw
LgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZERldmljZUVmbDo6cmVzZXRGZEhhbmRsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZERldmljZUVmbDo6ZGV2aWNlRmlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpHYW1lcGFkRGV2aWNlRWZsOjpHYW1lcGFkRGV2aWNlRWZsKToKKyAgICAgICAg
KFdlYkNvcmU6OkdhbWVwYWREZXZpY2VFZmw6On5HYW1lcGFkRGV2aWNlRWZsKToKKyAgICAgICAg
KFdlYkNvcmU6OkdhbWVwYWREZXZpY2VFZmw6OnJlYWRDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpHYW1lcGFkc0VmbDo6b25HYW1lUGFkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6Okdh
bWVwYWRzRWZsOjpHYW1lcGFkc0VmbCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkc0VmbDo6
fkdhbWVwYWRzRWZsKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzRWZsOjpyZWdpc3RlckRl
dmljZSk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkc0VmbDo6dW5yZWdpc3RlckRldmljZSk6
CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkc0VmbDo6dXBkYXRlR2FtZXBhZExpc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6c2FtcGxlR2FtZXBhZHMpOgorICAgICAgICAKKyAgICAgICAgKiBwbGF0
Zm9ybS9nYW1lcGFkL2dsaWIvR2FtZXBhZHNHbGliLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dsaWIvR2FtZXBhZHNHbGliLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6
OkdhbWVwYWREZXZpY2VHbGliOjpHYW1lcGFkRGV2aWNlR2xpYik6CisgICAgICAgIChXZWJDb3Jl
OjpHYW1lcGFkRGV2aWNlR2xpYjo6fkdhbWVwYWREZXZpY2VHbGliKToKKyAgICAgICAgKFdlYkNv
cmU6OkdhbWVwYWREZXZpY2VHbGliOjpyZWFkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
R2FtZXBhZHNHbGliOjpHYW1lcGFkc0dsaWIpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNH
bGliOjp+R2FtZXBhZHNHbGliKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzR2xpYjo6cmVn
aXN0ZXJEZXZpY2UpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNHbGliOjp1bnJlZ2lzdGVy
RGV2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzR2xpYjo6dXBkYXRlR2FtZXBhZExp
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R2FtZXBhZHNHbGliOjpvblVFdmVudENhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWRzR2xpYjo6aXNHYW1lcGFkRGV2aWNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNhbXBsZUdhbWVwYWRzKToKKyAgICAgICAgCisgICAgICAgICogcGxhdGZv
cm0vZ2FtZXBhZC9saW51eC9HYW1lcGFkRGV2aWNlTGludXguY3BwOiBSZW5hbWVkIGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGludXgvR2FtZXBhZERldmljZUxpbnV4LmNwcC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdhbWVwYWREZXZpY2VMaW51eDo6R2FtZXBhZERldmljZUxpbnV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdhbWVwYWREZXZpY2VMaW51eDo6fkdhbWVwYWREZXZpY2VMaW51eCk6
CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFkRGV2aWNlTGludXg6OnVwZGF0ZUZvckV2ZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWREZXZpY2VMaW51eDo6bm9ybWFsaXplQXhpc1ZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWREZXZpY2VMaW51eDo6bm9ybWFsaXplQnV0dG9u
VmFsdWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dhbWVwYWQvbGludXgvR2FtZXBhZERldmljZUxp
bnV4Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9saW51eC9HYW1lcGFk
RGV2aWNlTGludXguaC4KKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWREZXZpY2VMaW51eDo6Y29u
bmVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdhbWVwYWREZXZpY2VMaW51eDo6aWQpOgorICAg
ICAgICAoV2ViQ29yZTo6R2FtZXBhZERldmljZUxpbnV4Ojp0aW1lc3RhbXApOgorICAgICAgICAo
V2ViQ29yZTo6R2FtZXBhZERldmljZUxpbnV4OjpheGVzQ291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6R2FtZXBhZERldmljZUxpbnV4OjpheGVzRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHYW1l
cGFkRGV2aWNlTGludXg6OmJ1dHRvbnNDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpHYW1lcGFk
RGV2aWNlTGludXg6OmJ1dHRvbnNEYXRhKToKKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0v
Z2FtZXBhZC9tYWMvSElER2FtZXBhZC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvSElER2FtZXBhZC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFk
OjpISURHYW1lcGFkKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWQ6OmdldEN1cnJlbnRW
YWx1ZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBhZDo6aW5pdEVsZW1l
bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWQ6OmluaXRFbGVtZW50c0Zyb21BcnJh
eSk6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkOjptYXliZUFkZEJ1dHRvbik6CisgICAg
ICAgIChXZWJDb3JlOjpISURHYW1lcGFkOjptYXliZUFkZEF4aXMpOgorICAgICAgICAoV2ViQ29y
ZTo6SElER2FtZXBhZDo6dmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9nYW1lcGFk
L21hYy9ISURHYW1lcGFkLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvSElER2FtZXBhZC5oLgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBhZEVsZW1lbnQ6OkhJ
REdhbWVwYWRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRFbGVtZW50Ojp+
SElER2FtZXBhZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBhZEVsZW1lbnQ6
OmlzQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRFbGVtZW50Ojppc0F4aXMp
OgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBhZEJ1dHRvbjo6SElER2FtZXBhZEJ1dHRvbik6
CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkQXhpczo6SElER2FtZXBhZEF4aXMpOgorICAg
ICAgICAoV2ViQ29yZTo6SElER2FtZXBhZDo6aGlkRGV2aWNlKToKKyAgICAgICAgCisgICAgICAg
ICogcGxhdGZvcm0vZ2FtZXBhZC9tYWMvSElER2FtZXBhZFByb3ZpZGVyLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9ISURHYW1lcGFkUHJvdmlkZXIuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6ZGV2aWNlTWF0Y2hpbmdEaWN0aW9uYXJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OmRldmljZUFkZGVkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6ZGV2aWNlUmVt
b3ZlZENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmRldmljZVZhbHVlc0NoYW5nZWRDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbik6
CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkUHJvdmlkZXI6OkhJREdhbWVwYWRQcm92aWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkUHJvdmlkZXI6OmluZGV4Rm9yTmV3bHlD
b25uZWN0ZWREZXZpY2UpOgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBhZFByb3ZpZGVyOjpj
b25uZWN0aW9uRGVsYXlUaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRQ
cm92aWRlcjo6b3BlbkFuZFNjaGVkdWxlTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpISURH
YW1lcGFkUHJvdmlkZXI6OmNsb3NlQW5kVW5zY2hlZHVsZU1hbmFnZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SElER2FtZXBhZFByb3ZpZGVyOjpzdGFydE1vbml0b3JpbmdHYW1lcGFkcyk6CisgICAg
ICAgIChXZWJDb3JlOjpISURHYW1lcGFkUHJvdmlkZXI6OnN0b3BNb25pdG9yaW5nR2FtZXBhZHMp
OgorICAgICAgICAoV2ViQ29yZTo6SElER2FtZXBhZFByb3ZpZGVyOjpkZXZpY2VBZGRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkUHJvdmlkZXI6OmRldmljZVJlbW92ZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SElER2FtZXBhZFByb3ZpZGVyOjp2YWx1ZXNDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhJREdhbWVwYWRQcm92aWRlcjo6aW5wdXROb3RpZmljYXRpb25UaW1lckZp
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkhJREdhbWVwYWRQcm92aWRlcjo6cmVtb3ZlR2FtZXBh
ZEZvckRldmljZSk6CisgICAgICAgICogcGxhdGZvcm0vZ2FtZXBhZC9tYWMvSElER2FtZXBhZFBy
b3ZpZGVyLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2Ft
ZXBhZFByb3ZpZGVyLmguCisgICAgICAgIChXZWJDb3JlOjpISURHYW1lcGFkUHJvdmlkZXI6OnBs
YXRmb3JtR2FtZXBhZHMpOgorCiAyMDE2LTA4LTAyICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZW1vdmluZyBJbmRleGVkREIgV2Vic2l0ZURhdGEgY2FuIGZh
aWwgZm9yIHNvbWUgdXNlcnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDMyYWI1M2MyZGQzOTU0
MzY0YjMzN2IxMTg4MTk5MjZiOWJhMDlhZjAuLmM3OWQ0MjY1ZDEwZmE4NTdiZTA1YWZlNmJkOTMw
Y2UyNjQwNTg1MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC03Miw2ICs3Miw5IEBAIHNldChX
ZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0v
YW5pbWF0aW9uIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9hdWRpbyIKICAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vY3J5cHRvIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9y
bS9nYW1lcGFkIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9nYW1lcGFkL2RlcHJlY2F0
ZWQiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dhbWVwYWQvbGludXgiCiAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0
Zm9ybS9ncmFwaGljcy9jcHUvYXJtIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFw
aGljcy9jcHUvYXJtL2ZpbHRlcnMiCkBAIC0yOTAyLDcgKzI5MDUsOCBAQCBpZiAoRU5BQkxFX0dB
TUVQQUQpCiAgICAgICAgIE1vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAKICAgICAg
ICAgTW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwCiAKLSAgICAgICAgcGxhdGZv
cm0vR2FtZXBhZFByb3ZpZGVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9nYW1lcGFkL0VtcHR5R2Ft
ZXBhZFByb3ZpZGVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9nYW1lcGFkL0dhbWVwYWRQcm92aWRl
ci5jcHAKICAgICApCiBlbHNlaWYgKEVOQUJMRV9HQU1FUEFEX0RFUFJFQ0FURUQpCiAgICAgbGlz
dChBUFBFTkQgV2ViQ29yZV9JTkNMVURFX0RJUkVDVE9SSUVTCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNt
YWtlCmluZGV4IDJkMzY5ODYwZjBhMzU3Mzg1ODI5ZDdhZDRiZmIwNzkyNTY0N2JiMTYuLmU3YjA4
Nzc0OGM1ZjFlZGQ2Mjk3MDhjNGVkODI3ODhjNDgzOTBlY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZs
LmNtYWtlCkBAIC0yOSw2ICsyOSw5IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfSU5DTFVERV9ESVJF
Q1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS9wYWdlL2VmbCIKICAgICAiJHtXRUJDT1JFX0RJ
Un0vcGxhdGZvcm0vY2Fpcm8iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2VmbCIKKyAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ2FtZXBhZCIKKyAgICAiJHtXRUJDT1JFX0RJUn0v
cGxhdGZvcm0vZ2FtZXBhZC9kZXByZWNhdGVkIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9y
bS9nYW1lcGFkL2VmbCIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ2VvY2x1ZSIKICAg
ICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8iCiAgICAgIiR7V0VCQ09S
RV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2VmbCIKQEAgLTk4LDcgKzEwMSw2IEBAIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2VmbC9FcnJvcnNFZmwuY3BwCiAgICAg
cGxhdGZvcm0vZWZsL0V2ZW50TG9vcEVmbC5jcHAKICAgICBwbGF0Zm9ybS9lZmwvRmlsZVN5c3Rl
bUVmbC5jcHAKLSAgICBwbGF0Zm9ybS9lZmwvR2FtZXBhZHNFZmwuY3BwCiAgICAgcGxhdGZvcm0v
ZWZsL0xvY2FsaXplZFN0cmluZ3NFZmwuY3BwCiAgICAgcGxhdGZvcm0vZWZsL01JTUVUeXBlUmVn
aXN0cnlFZmwuY3BwCiAgICAgcGxhdGZvcm0vZWZsL01haW5UaHJlYWRTaGFyZWRUaW1lckVmbC5j
cHAKQEAgLTExMyw2ICsxMTUsOCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9lZmwvVXNlckFnZW50RWZsLmNwcAogICAgIHBsYXRmb3JtL2VmbC9XaWRnZXRFZmwu
Y3BwCiAKKyAgICBwbGF0Zm9ybS9nYW1lcGFkL2VmbC9HYW1lcGFkc0VmbC5jcHAKKwogICAgIHBs
YXRmb3JtL2dlb2NsdWUvR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUxLmNwcAogICAgIHBsYXRm
b3JtL2dlb2NsdWUvR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUyLmNwcAogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtR1RLLmNtYWtlCmluZGV4IGFhYmQzMDVlZDFlYmQyYWUxZTExZjFjMDNjOTRjYjMxZDhjYTg0
NjIuLmE2OWQwMjYwN2ZjMzk3NmEzZDgxNGIzZjA2OWRkYTIyZGQzMDBlYzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtR1RLLmNtYWtlCkBAIC0zNCw2ICszNCw5IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfSU5D
TFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS9lZGl0aW5nL2F0ayIKICAgICAi
JHtXRUJDT1JFX0RJUn0vcGFnZS9ndGsiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2Nh
aXJvIgorICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9nYW1lcGFkIgorICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9nYW1lcGFkL2RlcHJlY2F0ZWQiCisgICAgIiR7V0VCQ09SRV9ESVJ9
L3BsYXRmb3JtL2dhbWVwYWQvZ2xpYiIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ2Vv
Y2x1ZSIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3RrIgogICAgICIke1dFQkNPUkVf
RElSfS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlybyIKQEAgLTg1LDEyICs4OCwxMyBAQCBsaXN0KEFQ
UEVORCBXZWJDb3JlX1NPVVJDRVMKIAogICAgIHBsYXRmb3JtL2NyeXB0by9nbnV0bHMvQ3J5cHRv
RGlnZXN0R251VExTLmNwcAogCisgICAgcGxhdGZvcm0vZ2FtZXBhZC9nbGliL0dhbWVwYWRzR2xp
Yi5jcHAKKwogICAgIHBsYXRmb3JtL2dlb2NsdWUvR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUx
LmNwcAogICAgIHBsYXRmb3JtL2dlb2NsdWUvR2VvbG9jYXRpb25Qcm92aWRlckdlb2NsdWUyLmNw
cAogCiAgICAgcGxhdGZvcm0vZ2xpYi9FdmVudExvb3BHbGliLmNwcAogICAgIHBsYXRmb3JtL2ds
aWIvRmlsZVN5c3RlbUdsaWIuY3BwCi0gICAgcGxhdGZvcm0vZ2xpYi9HYW1lcGFkc0dsaWIuY3Bw
CiAgICAgcGxhdGZvcm0vZ2xpYi9LZXllZERlY29kZXJHbGliLmNwcAogICAgIHBsYXRmb3JtL2ds
aWIvS2V5ZWRFbmNvZGVyR2xpYi5jcHAKICAgICBwbGF0Zm9ybS9nbGliL01haW5UaHJlYWRTaGFy
ZWRUaW1lckdMaWIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggMGVhM2U0NmVjZDI0ZTNlMmRmMDAyZWZhYTZlZGJmNWE5ZTQ2
MDNmNi4uMmM2YTNhOWUwYTYzZTQ1M2IwNjI1OGIzYmIwMzg4NjZlMjNkZDcxMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjE2
Myw2ICsyMTYzLDE2IEBACiAJCTUxNEM3NjdEMENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJl
cXVlc3RCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTRDNzY2ODBDRTkyM0ExMDA3RUYzQ0QgLyogUmVzb3VyY2VSZXF1ZXN0QmFzZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxNEM3NjdFMENF
OTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTRDNzY2OTBDRTkyM0ExMDA3RUYzQ0Qg
LyogUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwICovOyB9OwogCQk1MTRDNzY3RjBDRTkyM0ExMDA3
RUYzQ0QgLyogUmVzb3VyY2VSZXNwb25zZUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNEM3NjZBMENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJj
ZVJlc3BvbnNlQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTUxNUJFMThGMUQ1NEY1RkIwMEREN0M2OCAvKiBFbXB0eUdhbWVwYWRQcm92aWRl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVC
RTE4ODFENTRGNUY2MDBERDdDNjggLyogRW1wdHlHYW1lcGFkUHJvdmlkZXIuY3BwICovOyB9Owor
CQk1MTVCRTE5MDFENTRGNUZCMDBERDdDNjggLyogRW1wdHlHYW1lcGFkUHJvdmlkZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUJFMTg5MUQ1NEY1
RjYwMEREN0M2OCAvKiBFbXB0eUdhbWVwYWRQcm92aWRlci5oICovOyB9OworCQk1MTVCRTE5MTFE
NTRGNUZCMDBERDdDNjggLyogR2FtZXBhZFByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUJFMThBMUQ1NEY1RjYwMEREN0M2OCAvKiBH
YW1lcGFkUHJvdmlkZXIuY3BwICovOyB9OworCQk1MTVCRTE5MjFENTRGNUZCMDBERDdDNjggLyog
R2FtZXBhZFByb3ZpZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTVCRTE4QjFENTRGNUY2MDBERDdDNjggLyogR2FtZXBhZFByb3ZpZGVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTE1QkUxOTMx
RDU0RjVGQjAwREQ3QzY4IC8qIEdhbWVwYWRQcm92aWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE1QkUxOEMxRDU0RjVGNjAwREQ3QzY4
IC8qIEdhbWVwYWRQcm92aWRlckNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTUxNUJFMTk1MUQ1NEY1RkIwMEREN0M2OCAvKiBQbGF0Zm9y
bUdhbWVwYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxNUJFMThFMUQ1NEY1RjYwMEREN0M2OCAvKiBQbGF0Zm9ybUdhbWVwYWQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MTVCRTE5QjFENTRGNkMx
MDBERDdDNjggLyogSElER2FtZXBhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTVCRTE5NzFENTRGNkJEMDBERDdDNjggLyogSElER2FtZXBhZC5j
cHAgKi87IH07CisJCTUxNUJFMTlDMUQ1NEY2QzEwMEREN0M2OCAvKiBISURHYW1lcGFkLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVCRTE5ODFENTRG
NkJEMDBERDdDNjggLyogSElER2FtZXBhZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTUxNUJFMTlEMUQ1NEY2QzEwMEREN0M2OCAvKiBISURHYW1l
cGFkUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE1QkUxOTkxRDU0RjZCRDAwREQ3QzY4IC8qIEhJREdhbWVwYWRQcm92aWRlci5jcHAg
Ki87IH07CisJCTUxNUJFMTlFMUQ1NEY2QzEwMEREN0M2OCAvKiBISURHYW1lcGFkUHJvdmlkZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUJFMTlB
MUQ1NEY2QkQwMEREN0M2OCAvKiBISURHYW1lcGFkUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTVGNzk1MzFDRkNBM0QwMDBDQ0VE
OTMgLyogV2ViQ29yZUNyb3NzVGhyZWFkQ29waWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNUY3OTUxMUNGQ0EzQzcwMENDRUQ5MyAvKiBXZWJD
b3JlQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwICovOyB9OwogCQk1MTVGNzk1NDFDRkNBM0Q1MDBDQ0VE
OTMgLyogV2ViQ29yZUNyb3NzVGhyZWFkQ29waWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTVGNzk1MjFDRkNBM0M3MDBDQ0VEOTMgLyogV2ViQ29y
ZUNyb3NzVGhyZWFkQ29waWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNTE2MDMwMEIwQ0M0MjUxMjAwQzhBQzI1IC8qIEZpbGVTeXN0ZW1QT1NJ
WC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYw
MzAwQTBDQzQyNTEyMDBDOEFDMjUgLyogRmlsZVN5c3RlbVBPU0lYLmNwcCAqLzsgfTsKQEAgLTIy
MDgsMTEgKzIyMTgsNiBAQAogCQk1MTc0RTIwQTEwQTFGNDRGMDBGOTVFNkYgLyogUG9wU3RhdGVF
dmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3
NEUyMDgxMEExRjQ0RjAwRjk1RTZGIC8qIFBvcFN0YXRlRXZlbnQuaCAqLzsgfTsKIAkJNTE3NzFE
RkUxQkRCNDg1MDAwQ0FFOEU0IC8qIE1lbW9yeU9iamVjdFN0b3JlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNzcxREZDMUJEQjQ3NTYwMENBRThF
NCAvKiBNZW1vcnlPYmplY3RTdG9yZS5jcHAgKi87IH07CiAJCTUxNzcxREZGMUJEQjQ4NTAwMENB
RThFNCAvKiBNZW1vcnlPYmplY3RTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTE3NzFERkQxQkRCNDc1NjAwQ0FFOEU0IC8qIE1lbW9yeU9iamVj
dFN0b3JlLmggKi87IH07Ci0JCTUxNzlDRTI0MTk1QzgxNDIwMDE5QzE5OCAvKiBHYW1lcGFkUHJv
dmlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
NzlDRTIzMTk1QzgxNDIwMDE5QzE5OCAvKiBHYW1lcGFkUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MTc5Q0UyNjE5NUM4MjFEMDAx
OUMxOTggLyogR2FtZXBhZFByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxNzlDRTI1MTk1QzgyMUQwMDE5QzE5OCAvKiBHYW1lcGFkUHJv
dmlkZXIuY3BwICovOyB9OwotCQk1MTc5Q0UyQTE5NUM5MTg2MDAxOUMxOTggLyogR2FtZXBhZFBy
b3ZpZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTc5Q0UyOTE5NUM5MTg2MDAxOUMxOTggLyogR2FtZXBhZFByb3ZpZGVyQ2xpZW50Lmgg
Ki87IH07Ci0JCTUxNzlDRTM2MTk1Q0FDN0UwMDE5QzE5OCAvKiBISURHYW1lcGFkUHJvdmlkZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3OUNF
MzQxOTVDQUM3RTAwMTlDMTk4IC8qIEhJREdhbWVwYWRQcm92aWRlci5jcHAgKi87IH07Ci0JCTUx
NzlDRTM3MTk1Q0FDN0UwMDE5QzE5OCAvKiBISURHYW1lcGFkUHJvdmlkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNzlDRTM1MTk1Q0FDN0UwMDE5
QzE5OCAvKiBISURHYW1lcGFkUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTdBNjNDMzFCNzQzMTg3MDBFN0RDREMgLyogS2V5ZWRE
ZWNvZGVyQ0YuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE3QTYzQkYxQjc0MzE3RTAwRTdEQ0RDIC8qIEtleWVkRGVjb2RlckNGLmNwcCAqLzsgfTsK
IAkJNTE3QTYzQzQxQjc0MzE4QjAwRTdEQ0RDIC8qIEtleWVkRW5jb2RlckNGLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0E2M0MxMUI3NDMxN0Uw
MEU3RENEQyAvKiBLZXllZEVuY29kZXJDRi5jcHAgKi87IH07CiAJCTUxN0E2M0M1MUI3NDMxOEYw
MEU3RENEQyAvKiBLZXllZERlY29kZXJDRi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTE3QTYzQzAxQjc0MzE3RTAwRTdEQ0RDIC8qIEtleWVkRGVjb2Rl
ckNGLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAg
LTIyOTcsOCArMjMwMiw2IEBACiAJCTUxQTRCQjEwMTk1NEQ2MjcwMEZBNUMyRSAvKiBOYXZpZ2F0
b3JHYW1lcGFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxQTRCQjBEMTk1NEQ2MjcwMEZBNUMyRSAvKiBOYXZpZ2F0b3JHYW1lcGFkLmNwcCAqLzsg
fTsKIAkJNTFBOUQ5RTkxOTVCOTMxRjAwMUIyQjVDIC8qIEdhbWVwYWRNYW5hZ2VyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTlEOUU3MTk1Qjkz
MUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5jcHAgKi87IH07CiAJCTUxQTlEOUVBMTk1Qjkz
MUYwMDFCMkI1QyAvKiBHYW1lcGFkTWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBOUQ5RTgxOTVCOTMxRjAwMUIyQjVDIC8qIEdhbWVwYWRN
YW5hZ2VyLmggKi87IH07Ci0JCTUxQTlEOUYzMTk1Qjk1MDMwMDFCMkI1QyAvKiBISURHYW1lcGFk
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTlE
OUVGMTk1Qjk1MDMwMDFCMkI1QyAvKiBISURHYW1lcGFkLmNwcCAqLzsgfTsKLQkJNTFBOUQ5RjQx
OTVCOTUwMzAwMUIyQjVDIC8qIEhJREdhbWVwYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQTlEOUYwMTk1Qjk1MDMwMDFCMkI1QyAvKiBISURHYW1l
cGFkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTFBQTNGNkYwQkQ1QUE5RTAwODkyOTcxIC8qIFJlc291cmNlTG9hZGVyTWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBQTNGNkUwQkQ1QUE5RTAw
ODkyOTcxIC8qIFJlc291cmNlTG9hZGVyTWFjLm1tICovOyB9OwogCQk1MUFCQUUxQjEwM0MxOEZG
MDA4QzUyNjAgLyogU29ja2V0U3RyZWFtRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQUJBRTFBMTAzQzE4RkYwMDhDNTI2MCAvKiBTb2NrZXRT
dHJlYW1FcnJvci5oICovOyB9OwogCQk1MUFCQUUxRTEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0
U3RyZWFtSGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MUFCQUUxQzEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIzMDksNyAr
MjMxMiw2IEBACiAJCTUxQjQ1NEVBMUI0REFFN0QwMDg1RUFBNiAvKiBQaW5nSGFuZGxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUI0NTRFOTFCNERB
RTdEMDA4NUVBQTYgLyogUGluZ0hhbmRsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTUxQjQ1RDIwMUFCOEQxRTIwMDExN0NEMiAvKiBDb250ZW50
RXh0ZW5zaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxQjQ1RDFFMUFCOEQxRTIwMDExN0NEMiAvKiBDb250ZW50RXh0ZW5zaW9uLmNwcCAqLzsg
fTsKIAkJNTFCNDVEMjExQUI4RDFFMjAwMTE3Q0QyIC8qIENvbnRlbnRFeHRlbnNpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQjQ1RDFGMUFCOEQx
RTIwMDExN0NEMiAvKiBDb250ZW50RXh0ZW5zaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTFCNThGRDQxOTVBOTY0RDAwMjk5MEIwIC8qIFBs
YXRmb3JtR2FtZXBhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE1RTVGRUYxOTUxMDE0NzAwODZDQTVFIC8qIFBsYXRmb3JtR2FtZXBhZC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxQkE0QUMzMUJC
QjVDRDgwMERGM0Q2RCAvKiBJREJEYXRhYmFzZUluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFCQTRBQzExQkJCNUNCRjAwREYzRDZEIC8qIElE
QkRhdGFiYXNlSW5mby5jcHAgKi87IH07CiAJCTUxQkE0QUM0MUJCQjVDRDgwMERGM0Q2RCAvKiBJ
REJEYXRhYmFzZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxQkE0QUMyMUJCQjVDQkYwMERGM0Q2RCAvKiBJREJEYXRhYmFzZUluZm8uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MUJBNEFDQTFC
QkM1QkQ5MDBERjNENkQgLyogTWVtb3J5SURCQmFja2luZ1N0b3JlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQkE0QUM4MUJCQzVCOUUwMERGM0Q2
RCAvKiBNZW1vcnlJREJCYWNraW5nU3RvcmUuY3BwICovOyB9OwpAQCAtOTU3OCw3ICs5NTgwLDE2
IEBACiAJCTUxNEM3NjY4MENFOTIzQTEwMDdFRjNDRCAvKiBSZXNvdXJjZVJlcXVlc3RCYXNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlUmVxdWVzdEJhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE0Qzc2NjkwQ0U5MjNBMTAwN0VGM0NEIC8q
IFJlc291cmNlUmVzcG9uc2VCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlc291cmNlUmVzcG9uc2VCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTE0Qzc2NkEwQ0U5MjNBMTAwN0VGM0NEIC8qIFJlc291cmNlUmVzcG9uc2VCYXNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlc291cmNlUmVzcG9uc2VCYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNUU1RkVGMTk1MTAxNDcwMDg2Q0E1RSAv
KiBQbGF0Zm9ybUdhbWVwYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1HYW1lcGFkLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNUJFMTg4MUQ1NEY1RjYwMEREN0M2OCAvKiBF
bXB0eUdhbWVwYWRQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBFbXB0eUdhbWVwYWRQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTUxNUJFMTg5MUQ1NEY1RjYwMEREN0M2OCAvKiBFbXB0eUdhbWVwYWRQcm92aWRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbXB0eUdhbWVwYWRQcm92aWRlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTVCRTE4QTFENTRGNUY2MDBERDdDNjggLyog
R2FtZXBhZFByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEdhbWVwYWRQcm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNUJF
MThCMUQ1NEY1RjYwMEREN0M2OCAvKiBHYW1lcGFkUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gR2FtZXBhZFByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTUxNUJFMThDMUQ1NEY1RjYwMEREN0M2OCAvKiBHYW1lcGFkUHJvdmlkZXJDbGll
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2FtZXBhZFByb3ZpZGVyQ2xp
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNUJFMThFMUQ1NEY1RjYwMERE
N0M2OCAvKiBQbGF0Zm9ybUdhbWVwYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGxhdGZvcm1HYW1lcGFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNUJF
MTk3MUQ1NEY2QkQwMEREN0M2OCAvKiBISURHYW1lcGFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEhJREdhbWVwYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MTVCRTE5ODFENTRGNkJEMDBERDdDNjggLyogSElER2FtZXBhZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBISURHYW1lcGFkLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUxNUJFMTk5MUQ1NEY2QkQwMEREN0M2OCAvKiBISURHYW1lcGFkUHJvdmlk
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSElER2FtZXBhZFBy
b3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTE1QkUxOUExRDU0RjZC
RDAwREQ3QzY4IC8qIEhJREdhbWVwYWRQcm92aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBISURHYW1lcGFkUHJvdmlkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTE1Rjc5NTExQ0ZDQTNDNzAwQ0NFRDkzIC8qIFdlYkNvcmVDcm9zc1RocmVhZENvcGll
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJDb3JlQ3Jvc3NU
aHJlYWRDb3BpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTVGNzk1MjFD
RkNBM0M3MDBDQ0VEOTMgLyogV2ViQ29yZUNyb3NzVGhyZWFkQ29waWVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVDcm9zc1RocmVhZENvcGllci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MTYwMzAwQTBDQzQyNTEyMDBDOEFDMjUgLyogRmlsZVN5
c3RlbVBPU0lYLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbGVT
eXN0ZW1QT1NJWC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NjQ4LDExICs5
NjU5LDYgQEAKIAkJNTE3NEUyMEIxMEExRjQ5QTAwRjk1RTZGIC8qIFBvcFN0YXRlRXZlbnQuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFBvcFN0YXRlRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MTc3MURGQzFCREI0NzU2MDBDQUU4RTQgLyogTWVtb3J5T2JqZWN0
U3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVtb3J5T2Jq
ZWN0U3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTc3MURGRDFCREI0
NzU2MDBDQUU4RTQgLyogTWVtb3J5T2JqZWN0U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWVtb3J5T2JqZWN0U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNTE3OUNFMjMxOTVDODE0MjAwMTlDMTk4IC8qIEdhbWVwYWRQcm92aWRlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHYW1lcGFkUHJvdmlkZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE3OUNFMjUxOTVDODIxRDAwMTlDMTk4IC8qIEdhbWVwYWRQ
cm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHYW1lcGFk
UHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTc5Q0UyOTE5NUM5
MTg2MDAxOUMxOTggLyogR2FtZXBhZFByb3ZpZGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEdhbWVwYWRQcm92aWRlckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1MTc5Q0UzNDE5NUNBQzdFMDAxOUMxOTggLyogSElER2FtZXBhZFByb3Zp
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhJREdhbWVwYWRQ
cm92aWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNzlDRTM1MTk1Q0FD
N0UwMDE5QzE5OCAvKiBISURHYW1lcGFkUHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSElER2FtZXBhZFByb3ZpZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxN0E2M0JGMUI3NDMxN0UwMEU3RENEQyAvKiBLZXllZERlY29kZXJDRi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBLZXllZERlY29kZXJDRi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxN0E2M0MwMUI3NDMxN0UwMEU3RENEQyAvKiBL
ZXllZERlY29kZXJDRi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLZXllZERl
Y29kZXJDRi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTdBNjNDMTFCNzQzMTdF
MDBFN0RDREMgLyogS2V5ZWRFbmNvZGVyQ0YuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gS2V5ZWRFbmNvZGVyQ0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtOTY5OSw4ICs5NzA1LDYgQEAKIAkJNTFBNEJCMEYxOTU0RDYyNzAwRkE1QzJFIC8qIE5h
dmlnYXRvckdhbWVwYWQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5hdmlnYXRvckdhbWVw
YWQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUE5RDlFNzE5NUI5MzFGMDAx
QjJCNUMgLyogR2FtZXBhZE1hbmFnZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gR2FtZXBhZE1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MUE5RDlFODE5NUI5MzFGMDAxQjJCNUMgLyogR2FtZXBhZE1hbmFnZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2FtZXBhZE1hbmFnZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNTFBOUQ5RUYxOTVCOTUwMzAwMUIyQjVDIC8qIEhJREdhbWVwYWQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSElER2FtZXBhZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxQTlEOUYwMTk1Qjk1MDMwMDFCMkI1QyAvKiBI
SURHYW1lcGFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhJREdhbWVwYWQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFBQTNGNkUwQkQ1QUE5RTAwODkyOTcx
IC8qIFJlc291cmNlTG9hZGVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gUmVzb3VyY2VMb2FkZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUxQUJBRTFBMTAzQzE4RkYwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1FcnJvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb2NrZXRTdHJlYW1FcnJvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MUFCQUUxQzEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0
U3RyZWFtSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvY2tldFN0
cmVhbUhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc2ODgsNiArMTc2
OTIsMzEgQEAKIAkJCXBhdGggPSBjZjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07
CisJCTUxNUJFMTg3MUQ1NEY1REIwMEREN0M2OCAvKiBnYW1lcGFkICovID0geworCQkJaXNhID0g
UEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk1MTVCRTE5NjFENTRGNjQ1MDBERDdDNjgg
LyogbWFjICovLAorCQkJCTUxNUJFMTg4MUQ1NEY1RjYwMEREN0M2OCAvKiBFbXB0eUdhbWVwYWRQ
cm92aWRlci5jcHAgKi8sCisJCQkJNTE1QkUxODkxRDU0RjVGNjAwREQ3QzY4IC8qIEVtcHR5R2Ft
ZXBhZFByb3ZpZGVyLmggKi8sCisJCQkJNTE1QkUxOEExRDU0RjVGNjAwREQ3QzY4IC8qIEdhbWVw
YWRQcm92aWRlci5jcHAgKi8sCisJCQkJNTE1QkUxOEIxRDU0RjVGNjAwREQ3QzY4IC8qIEdhbWVw
YWRQcm92aWRlci5oICovLAorCQkJCTUxNUJFMThDMUQ1NEY1RjYwMEREN0M2OCAvKiBHYW1lcGFk
UHJvdmlkZXJDbGllbnQuaCAqLywKKwkJCQk1MTVCRTE4RTFENTRGNUY2MDBERDdDNjggLyogUGxh
dGZvcm1HYW1lcGFkLmggKi8sCisJCQkpOworCQkJcGF0aCA9IGdhbWVwYWQ7CisJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOworCQl9OworCQk1MTVCRTE5NjFENTRGNjQ1MDBERDdDNjggLyogbWFj
ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk1MTVCRTE5
NzFENTRGNkJEMDBERDdDNjggLyogSElER2FtZXBhZC5jcHAgKi8sCisJCQkJNTE1QkUxOTgxRDU0
RjZCRDAwREQ3QzY4IC8qIEhJREdhbWVwYWQuaCAqLywKKwkJCQk1MTVCRTE5OTFENTRGNkJEMDBE
RDdDNjggLyogSElER2FtZXBhZFByb3ZpZGVyLmNwcCAqLywKKwkJCQk1MTVCRTE5QTFENTRGNkJE
MDBERDdDNjggLyogSElER2FtZXBhZFByb3ZpZGVyLmggKi8sCisJCQkpOworCQkJcGF0aCA9IG1h
YzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTUxNjAzMDA5MENDNDI0NTQw
MEM4QUMyNSAvKiBwb3NpeCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCkBAIC0xODE3MSwxMCArMTgyMDAsNiBAQAogCQkJCUUxQkE2NkYwMTc0MkJEODYwMEMyMDI1
MSAvKiBEeW5hbWljTGlua2VySW50ZXJwb3NpbmcuaCAqLywKIAkJCQkxQ0ExOUUwMzBEQzI1NTk1
MDA2NUE5OTQgLyogRXZlbnRMb29wTWFjLm1tICovLAogCQkJCTUxNEIzRjc1MEM3MjIwNTUwMDA1
MzBERiAvKiBGaWxlU3lzdGVtTWFjLm1tICovLAotCQkJCTUxQTlEOUVGMTk1Qjk1MDMwMDFCMkI1
QyAvKiBISURHYW1lcGFkLmNwcCAqLywKLQkJCQk1MUE5RDlGMDE5NUI5NTAzMDAxQjJCNUMgLyog
SElER2FtZXBhZC5oICovLAotCQkJCTUxNzlDRTM0MTk1Q0FDN0UwMDE5QzE5OCAvKiBISURHYW1l
cGFkUHJvdmlkZXIuY3BwICovLAotCQkJCTUxNzlDRTM1MTk1Q0FDN0UwMDE5QzE5OCAvKiBISURH
YW1lcGFkUHJvdmlkZXIuaCAqLywKIAkJCQk5MzVDNDc2RTA5QUM0RDczMDBBNkFBQjQgLyogS2V5
RXZlbnRNYWMubW0gKi8sCiAJCQkJNTIxRDQ2RjUxMUFFQzk4MTAwNTE0NjEzIC8qIEtpbGxSaW5n
TWFjLm1tICovLAogCQkJCTA2RTgxRUQ2MEFCNUQ1RTkwMEM4NzgzNyAvKiBMb2NhbEN1cnJlbnRH
cmFwaGljc0NvbnRleHQuaCAqLywKQEAgLTIyODc3LDYgKzIyOTAyLDcgQEAKIAkJCQkxQUU0MkY2
NzBBQTRCOENCMDBDODYxMkQgLyogY2YgKi8sCiAJCQkJQTVDOTc0Q0UxMTQ4NUZEQTAwNjZGMkFC
IC8qIGNvY29hICovLAogCQkJCUNFNTBEOENFMUM4OTMyRUQwMDcyRUE1QSAvKiBjcnlwdG8gKi8s
CisJCQkJNTE1QkUxODcxRDU0RjVEQjAwREQ3QzY4IC8qIGdhbWVwYWQgKi8sCiAJCQkJQjJBMDE1
OTEwQUY2Q0Q1MzAwNkJDRTBFIC8qIGdyYXBoaWNzICovLAogCQkJCUE1OUUzQzFCMTE1ODBGMzQw
MDcyOTI4RSAvKiBpb3MgKi8sCiAJCQkJNjU4MkExNDgwOTk5OUQ2QzAwQkVFQjZEIC8qIG1hYyAq
LywKQEAgLTIyOTMyLDkgKzIyOTU4LDYgQEAKIAkJCQlDNTdGRURFMDEyMTJFRTlDMDA5N0JFNjUg
LyogRmlsZVN5c3RlbS5jcHAgKi8sCiAJCQkJNTE0QjNGNzIwQzcyMjA0NzAwMDUzMERGIC8qIEZp
bGVTeXN0ZW0uaCAqLywKIAkJCQlCQzA3M0JBOTBDMzk5QjFGMDAwRjU5NzkgLyogRmxvYXRDb252
ZXJzaW9uLmggKi8sCi0JCQkJNTE3OUNFMjUxOTVDODIxRDAwMTlDMTk4IC8qIEdhbWVwYWRQcm92
aWRlci5jcHAgKi8sCi0JCQkJNTE3OUNFMjMxOTVDODE0MjAwMTlDMTk4IC8qIEdhbWVwYWRQcm92
aWRlci5oICovLAotCQkJCTUxNzlDRTI5MTk1QzkxODYwMDE5QzE5OCAvKiBHYW1lcGFkUHJvdmlk
ZXJDbGllbnQuaCAqLywKIAkJCQlDRDRCRTUyOTFDRTEzNDI1MDA5RDg3REEgLyogR2VuZXJpY1Rh
c2tRdWV1ZS5jcHAgKi8sCiAJCQkJQ0Q2MkZCOTQxQUYwMThFNzAwMTJFRDdEIC8qIEdlbmVyaWNU
YXNrUXVldWUuaCAqLywKIAkJCQlBODc0OEJERjEyQ0JGMkRDMDAxRkJBNDEgLyogSGFzaFRvb2xz
LmggKi8sCkBAIC0yMjk3OCw3ICsyMzAwMSw2IEBACiAJCQkJQTE0OTc4NzAxQUJBRjNBNTAwQ0VG
N0U0IC8qIFBsYXRmb3JtQ29udGVudEZpbHRlci5oICovLAogCQkJCUJDNUM3NjI5MTQ5N0ZFMTQw
MEJDNDc3NSAvKiBQbGF0Zm9ybUV2ZW50LmggKi8sCiAJCQkJQTcyM0Y3N0ExNDg0Q0E0QzAwOEM2
REJFIC8qIFBsYXRmb3JtRXhwb3J0TWFjcm9zLmggKi8sCi0JCQkJNTE1RTVGRUYxOTUxMDE0NzAw
ODZDQTVFIC8qIFBsYXRmb3JtR2FtZXBhZC5oICovLAogCQkJCTkzNUM0NzY2MDlBQzRENDMwMEE2
QUFCNCAvKiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCAqLywKIAkJCQk5MzVDNDc2NzA5QUM0RDQz
MDBBNkFBQjQgLyogUGxhdGZvcm1Nb3VzZUV2ZW50LmggKi8sCiAJCQkJQzVCQUMxNkYxNEUzMEU0
NzAwMDA4ODM3IC8qIFBsYXRmb3JtUGFzdGVib2FyZC5oICovLApAQCAtMjUwNzcsNiArMjUwOTks
NyBAQAogCQkJCTI5QTgxMjJDMEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmlsaXR5TGlzdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMjlBODEyNDMwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vzc2li
aWxpdHlMaXN0Qm94LmggaW4gSGVhZGVycyAqLywKIAkJCQkyOUE4MTI0MjBGQkI5QzFEMDA1MTAy
OTMgLyogQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTUx
NUJFMTlDMUQ1NEY2QzEwMEREN0M2OCAvKiBISURHYW1lcGFkLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwN0IwQUJDRjEwMzIyNDIyMDBGQkRDMzMgLyogQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTA3QjAxMTNGMTAzMjI0MjIwMEZCREMzMyAvKiBBY2Nlc3Np
YmlsaXR5TWVkaWFDb250cm9scy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzZDREQyRjMxMTAzREE2
NjAwNjgwNTIxIC8qIEFjY2Vzc2liaWxpdHlNZW51TGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
NTM0NCw2ICsyNTM2Nyw3IEBACiAJCQkJRTQyNUE0OUExODI5MkI4NDAwMjBDRkNGIC8qIENvbGxl
Y3Rpb25JbmRleENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0NkVCRUEwMjFCN0Q0RDY1MDBC
RTQ5NDEgLyogQ29sbGVjdGlvblRyYXZlcnNhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNDNDQy
MDAwRjgxM0FFMTAwQzFBNjM0IC8qIENvbGxlY3Rpb25UeXBlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1MTVCRTE5MDFENTRGNUZCMDBERDdDNjggLyogRW1wdHlHYW1lcGFkUHJvdmlkZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyNzUzNTY3MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzMzMEEyMjMxM0VDMTk2QjAwMDBCNDVCIC8qIENvbG9yQ2hvb3Nlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzM3Q0RFQkQxNDlFRjIwMzAwNDIwOTBEIC8qIENvbG9yQ2hv
b3NlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjEwNSw4ICsyNjEyOSw2IEBACiAJCQkJ
RkQzMTYwMEQxMkIwMjY3NjAwQzFBMzU5IC8qIEdhaW5Ob2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MTZDNjIyMTE5NTBENDg3MDAzMzdFNzUgLyogR2FtZXBhZEV2ZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MUE5RDlFQTE5NUI5MzFGMDAxQjJCNUMgLyogR2FtZXBhZE1hbmFnZXIuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTUxNzlDRTI0MTk1QzgxNDIwMDE5QzE5OCAvKiBHYW1lcGFkUHJvdmlk
ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxNzlDRTJBMTk1QzkxODYwMDE5QzE5OCAvKiBHYW1l
cGFkUHJvdmlkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUM0Nzc1MDlBQzREOEUw
MEE2QUFCNCAvKiBHYXBSZWN0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQzMkU4NDcwQzUxNDkz
ODAwQjE1MDBGIC8qIEdDQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzBDMDU0Q0Mx
MTE4QzhFNDAwQ0UyNjM2IC8qIGdlbmVyYXRlLWJpbmRpbmdzLnBsIGluIEhlYWRlcnMgKi8sCkBA
IC0yNjE1MSw4ICsyNjE3Myw2IEBACiAJCQkJODQ4MkI3NDYxMTk4QzM1NDAwQkZCMDA1IC8qIEhh
c2hDaGFuZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg3NDhCRTAxMkNCRjJEQzAwMUZC
QTQxIC8qIEhhc2hUb29scy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNEQzAxMjUxRjEyRDAw
M0VGMjY5IC8qIEhpZGRlbklucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFBOUQ5RjQx
OTVCOTUwMzAwMUIyQjVDIC8qIEhJREdhbWVwYWQuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxNzlD
RTM3MTk1Q0FDN0UwMDE5QzE5OCAvKiBISURHYW1lcGFkUHJvdmlkZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDOTREMTU0MEMyNzVDOEIwMDZCQzYxNyAvKiBIaXN0b3J5LmggaW4gSGVhZGVycyAq
LywKIAkJCQk5N0RDRTIwMjEwODA3Qzc1MDA1N0QzOTQgLyogSGlzdG9yeUNvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTUxNzQxRDExMEIwNzI1OUEwMEVENDQyQyAvKiBIaXN0b3J5SXRl
bS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjk4Myw2ICsyNzAwMyw3IEBACiAJCQkJNjVERjMyMDQw
OUQxQ0M2MDAwMEJFMzI1IC8qIEpTVGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzQTE0Qjkw
QjdEMUQ1MjAwQTUzRkZEIC8qIEpTVGV4dEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VG
NDVGNjBFNjg3QjVDMDAxQzEyODcgLyogSlNUZXh0TWV0cmljcy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNTE1QkUxOTUxRDU0RjVGQjAwREQ3QzY4IC8qIFBsYXRmb3JtR2FtZXBhZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMDcwNzU2OTUxNDIyNjY4RDAwNDE0MTYxIC8qIEpTVGV4dFRyYWNrLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwNzA3NTZERTE0MjM5QjRFMDA0MTQxNjEgLyogSlNUZXh0VHJhY2tD
dWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3MDc1NkUwMTQyMzlCNEUwMDQxNDE2MSAvKiBKU1Rl
eHRUcmFja0N1ZUxpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMjc0OTUsNyArMjc1MTYsNiBAQAog
CQkJCTI2NjAxRUJGMTRCM0I5QUQwMDEyQzBGRSAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeUlPUy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBQTQ4NzAxNEEwNTI1MzAwODhGQUM0IC8qIFBsYXRmb3Jt
RXZlbnRGYWN0b3J5TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIzRjc3QjE0ODRDQTRDMDA4
QzZEQkUgLyogUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxQjU4
RkQ0MTk1QTk2NEQwMDI5OTBCMCAvKiBQbGF0Zm9ybUdhbWVwYWQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTkzNUM0NzY4MDlBQzRENDMwMEE2QUFCNCAvKiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTA1NjJGOTYxMTU3M0Y4OEYwMDMxQ0ExNiAvKiBQbGF0Zm9ybUxh
eWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTQ0Rjc4OTE1Q0ZCMkE4MDBBRjMzQTggLyogUGxh
dGZvcm1Mb2NhbGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjc1MjEsNiArMjc1NDEsNyBAQAogCQkJ
CTA3MkFFMUU1MTgzQzA3NDEwMDBBNTk4OCAvKiBQbHVnaW5SZXBsYWNlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNzFFMjE4M0ExNzM1OUZCODAwNkU2RTREIC8qIFBsdWdJbnNSZXNvdXJjZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFBQTg3OTkwMTFDQkU4NDYwMDNDNjY0RiAvKiBQbHVnaW5T
dHJhdGVneS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTE1QkUxOTMxRDU0RjVGQjAwREQ3QzY4IC8q
IEdhbWVwYWRQcm92aWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEFGREFDM0QxMEY1
NDQ4QzAwRTFGM0QyIC8qIFBsdWdpblZpZXdCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0JC
OEFCOTEzRjFBRkIwMDA3MzRERjAgLyogUE9ESW50ZXJ2YWwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDQkI4QUJBMTNGMUFGQjAwMDczNERGMCAvKiBQT0RJbnRlcnZhbFRyZWUuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjgyNzUsNiArMjgyOTYsNyBAQAogCQkJCTgzQzFENDMyMTc4RDVBQjUwMDE0MUU2
OCAvKiBTVkdQYXRoU2VnTGluZXRvUmVsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0E3RDBE
MDBCRjIyMDA3MUI3ODIgLyogU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4M0MxRDQzMzE3OEQ1QUI1MDAxNDFFNjggLyogU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRp
Y2FsQWJzLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTVCRTE5RTFENTRGNkMxMDBERDdDNjggLyog
SElER2FtZXBhZFByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0MxRDQzNDE3OEQ1QUI1
MDAxNDFFNjggLyogU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCMjIyN0E4MTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUGF0aFNlZ0xpc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg0NzZDOUU2MTFERjZBMEIwMDU1NUIwMiAvKiBTVkdQYXRoU2VnTGlzdEJ1
aWxkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjgzMzYsNiArMjgzNTgsNyBAQAogCQkJCTA4MEU0
OTI4MTI1NUYzQkQwMEVGQ0EyNyAvKiBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDhGMEJGQzYxMjU1QzUzQzAwMDc1MTg1IC8qIFNWR1RleHRNZXRyaWNz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTY3QkY3MzFENEZFNDIzMDA0MTJBQzcgLyogRE9NSFRN
TFBhcmFncmFwaEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxNUJFMTkyMUQ1NEY1RkIw
MEREN0M2OCAvKiBHYW1lcGFkUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMTc0NDU5
MTRCQzM0RUMwMEVFNUZDOCAvKiBTVkdUZXh0TWV0cmljc0J1aWxkZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUIyMjI3QUNFMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdUZXh0UGF0aEVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyMjI3QUQxMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdUZXh0UG9z
aXRpb25pbmdFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI5MTM3LDYgKzI5MTYwLDcgQEAK
IAkJCQk1MTJERDhGQTBEOTFFNkFGMDAwRjg5RUUgLyogQXJjaGl2ZUZhY3RvcnkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTEyREQ4RkIwRDkxRTZBRjAwMEY4OUVFIC8qIEFyY2hpdmVSZXNvdXJj
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTJERDhGNzBEOTFFNkFGMDAwRjg5RUUgLyogQXJj
aGl2ZVJlc291cmNlQ29sbGVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTVCRTE5MTFE
NTRGNUZCMDBERDdDNjggLyogR2FtZXBhZFByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTQ5QjM3NjBDMTVDNkM2ODQwMDU5MTMxRCAvKiBBcnJheVZhbHVlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUZENTY4NkM5MTNBQzE4MDIwMEI2OUM2OCAvKiBBc3luY0F1ZGlvRGVjb2Rlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFMUNERTkyMDE1MDE4RUQwMDA4NjJDQzUgLyogQXN5bmNGaWxl
U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk1MTMsNiArMjk1MzcsNyBAQAogCQkJCTkz
MzA5RERFMDk5RTY0OTIwMDU2RTU4MSAvKiBEZWxldGVGcm9tVGV4dE5vZGVDb21tYW5kLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTkzMzA5REUwMDk5RTY0OTIwMDU2RTU4MSAvKiBEZWxldGVTZWxl
Y3Rpb25Db21tYW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QzlBQkY4MTM1N0EzQkYwMEY1
NTAzRiAvKiBEZXRhaWxzTWFya2VyQ29udHJvbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTVC
RTE4RjFENTRGNUZCMDBERDdDNjggLyogRW1wdHlHYW1lcGFkUHJvdmlkZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTFFRDc3OEMxQkUzMjk0MDAwREMxNzkxIC8qIERldmljZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlDQ0MyQjUxNTE1RjYxMzA2MDA0OENERDYgLyogRGV2aWNlQ29udHJvbGxl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMUVBRjk3RjEyMTQzNUE0MDBFN0MxQkYgLyogRGV2
aWNlTW90aW9uQ2xpZW50SU9TLm1tIGluIFNvdXJjZXMgKi8sCkBAIC0yOTkxMiw3ICsyOTkzNyw2
IEBACiAJCQkJNTE4RjRGRjYxOTRDQTRFNjAwODFCQUFFIC8qIEdhbWVwYWRCdXR0b24uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTE2QzYyMjAxOTUwRDQ4NzAwMzM3RTc1IC8qIEdhbWVwYWRFdmVu
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUE5RDlFOTE5NUI5MzFGMDAxQjJCNUMgLyogR2Ft
ZXBhZE1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE3OUNFMjYxOTVDODIxRDAwMTlD
MTk4IC8qIEdhbWVwYWRQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDMyRTg0OTBD
NTE0OTNGMDBCMTUwMEYgLyogR0NDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRG
QjM5MEFEMTVFRjYxRjMwMDdBRDUxRiAvKiBHZW5lcmF0ZWRJbWFnZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4MzAwMzBGNTFCN0QzM0I1MDBFRDNBQUMgLyogR2VuZXJpY0NhY2hlZEhUTUxDb2xs
ZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk5NDEsOCArMjk5NjUsNiBAQAogCQkJCUIy
QTAxNUFBMEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5cGVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUNERjc0ODNFMThGRUJDRUMwMDA2RUNDMCAvKiBHcmlkUG9zaXRpb25zUmVzb2x2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNEQkYxMjUxRjEyRDAwM0VGMjY5IC8qIEhpZGRl
bklucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MUE5RDlGMzE5NUI5NTAzMDAxQjJC
NUMgLyogSElER2FtZXBhZC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTc5Q0UzNjE5NUNBQzdF
MDAxOUMxOTggLyogSElER2FtZXBhZFByb3ZpZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJD
OTREMTUzMEMyNzVDOEIwMDZCQzYxNyAvKiBIaXN0b3J5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTk3RENFMjAxMTA4MDdDNzUwMDU3RDM5NCAvKiBIaXN0b3J5Q29udHJvbGxlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MTc0MUQxMjBCMDcyNTlBMDBFRDQ0MkMgLyogSGlzdG9yeUl0ZW0uY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0yOTk3MCw2ICsyOTk5Miw3IEBACiAJCQkJQThERjNGRDEwOTdG
QTBGQzAwNTI5ODFCIC8qIEhUTUxDb2xsZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3
N0IzODY0MTIyODgzRTkwMEI4MUZGOCAvKiBIVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3QzNFNTEwQjE4REY4RjM1MDBDMTEyRjcgLyogSFRNTENvbnZlcnRlci5t
bSBpbiBTb3VyY2VzICovLAorCQkJCTUxNUJFMTlEMUQ1NEY2QzEwMEREN0M2OCAvKiBISURHYW1l
cGFkUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODMxMjBDNzAxQzU2RjNGNjAwMUNC
MTEyIC8qIEhUTUxEYXRhRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGNUMwNDFEQTBG
RkNBN0NFMDA4MzlENEEgLyogSFRNTERhdGFMaXN0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlEMzU5RDc4OTEyOUNBMjcxMDAwNkU1RDIgLyogSFRNTERldGFpbHNFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLApAQCAtMzA5OTcsNiArMzEwMjAsNyBAQAogCQkJCTFBNDgzMkIzMUE5NTNC
QTYwMDhCNERGRSAvKiBMb2NhbGl6ZWRTdHJpbmdzQ29jb2EubW0gaW4gU291cmNlcyAqLywKIAkJ
CQlCQ0UxQzQxQzBEOTgyOTgxMDAzQjAyRjIgLyogTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTgyMzlFMDAwOUIzQ0Y4QTAwQjYwNjQxIC8qIExvZ2dpbmcuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJNTE1QkUxOUIxRDU0RjZDMTAwREQ3QzY4IC8qIEhJREdhbWVwYWQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQwMjY0NUUwQUZEQzE5QjAwNTkxOUUyIC8qIExvZ2dpbmdNYWMubW0g
aW4gU291cmNlcyAqLywKIAkJCQkxQTA0MDlGMzFBNDM2NzVDMDA5RTQ3RjMgLyogTWFjaFNlbmRS
aWdodC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzJBRDcwNTE3RUZBMkMzMDAzOEY4RkYgLyog
TWFpbkZyYW1lLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vR2FtZXBhZFByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dh
bWVwYWRQcm92aWRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwZjQ5Mjdm
MTIzYjEwOTlmNGMwOGI2NWU1NWZjMWExMGU0MzgwYmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZFBy
b3ZpZGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdhbWVwYWRQcm92aWRlci5oIgotCi0jaWYgRU5B
QkxFKEdBTUVQQUQpCi0KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1zdGF0aWMgR2FtZXBhZFByb3ZpZGVyKiBzaGFyZWRQcm92aWRlciA9
IG51bGxwdHI7Ci0KLUdhbWVwYWRQcm92aWRlciYgR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24o
KQotewotICAgIGlmICghc2hhcmVkUHJvdmlkZXIpIHsKLSAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEdhbWVwYWRQcm92aWRlcj4gZGVmYXVsdFByb3ZpZGVyOwotICAgICAgICBzaGFyZWRQ
cm92aWRlciA9ICZkZWZhdWx0UHJvdmlkZXIuZ2V0KCk7Ci0gICAgfQotCi0gICAgcmV0dXJuICpz
aGFyZWRQcm92aWRlcjsKLX0KLQotdm9pZCBHYW1lcGFkUHJvdmlkZXI6OnNldFNoYXJlZFByb3Zp
ZGVyKEdhbWVwYWRQcm92aWRlciYgbmV3UHJvdmlkZXIpCi17Ci0gICAgc2hhcmVkUHJvdmlkZXIg
PSAmbmV3UHJvdmlkZXI7Ci19Ci0KLXZvaWQgR2FtZXBhZFByb3ZpZGVyOjpzdGFydE1vbml0b3Jp
bmdHYW1lcGFkcyhHYW1lcGFkUHJvdmlkZXJDbGllbnQqKQotewotfQotCi12b2lkIEdhbWVwYWRQ
cm92aWRlcjo6c3RvcE1vbml0b3JpbmdHYW1lcGFkcyhHYW1lcGFkUHJvdmlkZXJDbGllbnQqKQot
ewotfQotCi1jb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4mIEdhbWVwYWRQcm92aWRlcjo6
cGxhdGZvcm1HYW1lcGFkcygpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFZlY3RvcjxQ
bGF0Zm9ybUdhbWVwYWQqPj4gZGVmYXVsdEdhbWVwYWRzOwotICAgIHJldHVybiBkZWZhdWx0R2Ft
ZXBhZHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShH
QU1FUEFEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZFByb3Zp
ZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HYW1lcGFkUHJvdmlkZXIuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQxYzUzMTRhZDRhYjQ2MDZlODlhNDJlMGJlNzgwMmU1
YWQxOGY1ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HYW1lcGFkUHJvdmlkZXIuaAorKysgL2Rldi9udWxsCkBA
IC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEdhbWVwYWRQcm92aWRlcl9oCi0j
ZGVmaW5lIEdhbWVwYWRQcm92aWRlcl9oCi0KLSNpZiBFTkFCTEUoR0FNRVBBRCkKLQotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHYW1lcGFk
UHJvdmlkZXJDbGllbnQ7Ci1jbGFzcyBQbGF0Zm9ybUdhbWVwYWQ7Ci0KLWNsYXNzIEdhbWVwYWRQ
cm92aWRlciB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+R2FtZXBhZFByb3ZpZGVyKCkgeyB9Ci0K
LSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgR2FtZXBhZFByb3ZpZGVyJiBzaW5nbGV0b24oKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRTaGFyZWRQcm92aWRlcihHYW1lcGFk
UHJvdmlkZXImKTsKLQotICAgIHZpcnR1YWwgdm9pZCBzdGFydE1vbml0b3JpbmdHYW1lcGFkcyhH
YW1lcGFkUHJvdmlkZXJDbGllbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcE1vbml0b3JpbmdH
YW1lcGFkcyhHYW1lcGFkUHJvdmlkZXJDbGllbnQqKTsKLSAgICB2aXJ0dWFsIGNvbnN0IFZlY3Rv
cjxQbGF0Zm9ybUdhbWVwYWQqPiYgcGxhdGZvcm1HYW1lcGFkcygpOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCi0jZW5kaWYgLy8gR2Ft
ZXBhZFByb3ZpZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dhbWVw
YWRQcm92aWRlckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZFByb3Zp
ZGVyQ2xpZW50LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjOTY5Mjg3NWZkYzUx
Nzg5MTliM2Y3M2Q1ZjQ5Y2M2YjYzZDBiZGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZFByb3ZpZGVy
Q2xpZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
bmRlZiBHYW1lcGFkUHJvdmlkZXJDbGllbnRfaAotI2RlZmluZSBHYW1lcGFkUHJvdmlkZXJDbGll
bnRfaAotCi0jaWYgRU5BQkxFKEdBTUVQQUQpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgUGxhdGZvcm1HYW1lcGFkOwotCi1jbGFzcyBHYW1lcGFkUHJvdmlkZXJDbGllbnQgewotcHVi
bGljOgotICAgIHZpcnR1YWwgfkdhbWVwYWRQcm92aWRlckNsaWVudCgpIHsgfQotCi0gICAgdmly
dHVhbCB2b2lkIHBsYXRmb3JtR2FtZXBhZENvbm5lY3RlZChQbGF0Zm9ybUdhbWVwYWQmKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtR2FtZXBhZERpc2Nvbm5lY3RlZChQbGF0Zm9ybUdh
bWVwYWQmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtR2FtZXBhZElucHV0QWN0aXZp
dHkoKSA9IDA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoR0FNRVBBRCkKLSNlbmRpZiAvLyBHYW1lcGFkUHJvdmlkZXJDbGllbnRfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZHMuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0dhbWVwYWRzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1MzhjY2Vk
ODNkNzcxNmEzNTI1NmI4MzA2MWMzYjQ1MjgwZGJiNTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZHMu
aAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAq
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0gKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAotICogREFNQUdFLgotICovCi0KLSNpZm5kZWYg
R2FtZXBhZHNfaAotI2RlZmluZSBHYW1lcGFkc19oCi0KLSNpZiBFTkFCTEUoR0FNRVBBRF9ERVBS
RUNBVEVEKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdhbWVwYWRMaXN0OwotCi12
b2lkIHNhbXBsZUdhbWVwYWRzKEdhbWVwYWRMaXN0KiBpbnRvKTsKLQotfQotCi0jZW5kaWYgLy8g
RU5BQkxFKEdBTUVQQURfREVQUkVDQVRFRCkKLQotI2VuZGlmIC8vIEdhbWVwYWRzX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xpbnV4LmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTGludXguY21ha2UKaW5kZXggNjU4M2ZmODY1ZGRmMzYxZGYwMWIyMDFkNWUz
MzI0YjQyZTBhZjZlOS4uZjUxYjIwOGU3OTgwMjQ1Nzg5NTlhOTZkN2ZjYWJmZjRkNzJhZmQ1ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGludXguY21ha2UKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGludXguY21ha2UKQEAgLTEsOCArMSw5IEBACiBsaXN0KEFQ
UEVORCBXZWJDb3JlX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vbGludXgiCisgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dhbWVwYWQvbGludXgi
CiApCiAKIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwotICAgIHBsYXRmb3JtL2xpbnV4L0dh
bWVwYWREZXZpY2VMaW51eC5jcHAKKyAgICBwbGF0Zm9ybS9nYW1lcGFkL2xpbnV4L0dhbWVwYWRE
ZXZpY2VMaW51eC5jcHAKICAgICBwbGF0Zm9ybS9saW51eC9NZW1vcnlQcmVzc3VyZUhhbmRsZXJM
aW51eC5jcHAKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3Jt
R2FtZXBhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HYW1lcGFkLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxMWNiMDZmMDRmMzQ1Yzc4OTg4ZjkwMmNiZTFl
NDhkYmRlZGUzNzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1HYW1lcGFkLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQbGF0Zm9ybUdhbWVwYWRf
aAotI2RlZmluZSBQbGF0Zm9ybUdhbWVwYWRfaAotCi0jaWYgRU5BQkxFKEdBTUVQQUQpCi0KLSNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUGxhdGZvcm1HYW1lcGFkIHsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIH5QbGF0Zm9ybUdhbWVwYWQoKSB7IH0KLQotICAgIGNvbnN0IFN0cmluZyYg
aWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0gICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX2luZGV4OyB9Ci0gICAgZG91YmxlIGxhc3RVcGRhdGVUaW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXN0VXBkYXRlVGltZTsgfQotICAgIGRvdWJsZSBjb25uZWN0VGltZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29ubmVjdFRpbWU7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IFZlY3Rvcjxkb3Vi
bGU+JiBheGlzVmFsdWVzKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgY29uc3QgVmVjdG9yPGRv
dWJsZT4mIGJ1dHRvblZhbHVlcygpIGNvbnN0ID0gMDsKLQotcHJvdGVjdGVkOgotICAgIGV4cGxp
Y2l0IFBsYXRmb3JtR2FtZXBhZCh1bnNpZ25lZCBpbmRleCkKLSAgICAgICAgOiBtX2luZGV4KGlu
ZGV4KQotICAgICAgICAsIG1fbGFzdFVwZGF0ZVRpbWUoMC4wKQotICAgICAgICAsIG1fY29ubmVj
dFRpbWUoMC4wKQotICAgIHsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbV9pZDsKLSAgICB1bnNpZ25l
ZCBtX2luZGV4OwotICAgIGRvdWJsZSBtX2xhc3RVcGRhdGVUaW1lOwotICAgIGRvdWJsZSBtX2Nv
bm5lY3RUaW1lOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5B
QkxFKEdBTUVQQUQpCi0jZW5kaWYgLy8gUGxhdGZvcm1HYW1lcGFkX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9HYW1lcGFkc0VmbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9lZmwvR2FtZXBhZHNFZmwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBiNmY5ZWE1M2NlMzZmMDAxOTVkN2M0ZTJiMTExY2I1MWIyMzM4ZTc0Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VmbC9HYW1lcGFkc0VmbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNDEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdhbWVw
YWRzLmgiCi0KLSNpZiBFTkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKQotCi0jaW5jbHVkZSAiR2Ft
ZXBhZERldmljZUxpbnV4LmgiCi0jaW5jbHVkZSAiR2FtZXBhZExpc3QuaCIKLSNpbmNsdWRlICJM
b2dnaW5nLmgiCi0jaW5jbHVkZSA8RWNvcmUuaD4KLSNpbmNsdWRlIDxFZXplLmg+Ci0jaW5jbHVk
ZSA8RWluYS5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1zdGF0aWMgY29uc3QgY2hhciBqb3lzdGlja1ByZWZpeFtdID0gIi9kZXYvaW5w
dXQvanMiOwotCi1jbGFzcyBHYW1lcGFkRGV2aWNlRWZsIDogcHVibGljIEdhbWVwYWREZXZpY2VM
aW51eCB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgR2FtZXBhZERldmljZUVmbChjb25zdCBTdHJp
bmcmIGRldmljZUZpbGUpOwotICAgIH5HYW1lcGFkRGV2aWNlRWZsKCk7Ci0gICAgdm9pZCByZXNl
dEZkSGFuZGxlcigpIHsgbV9mZEhhbmRsZXIgPSAwOyB9Ci0gICAgY29uc3QgU3RyaW5nJiBkZXZp
Y2VGaWxlKCkgY29uc3QgeyByZXR1cm4gbV9kZXZpY2VGaWxlOyB9Ci0KLXByaXZhdGU6Ci0gICAg
c3RhdGljIEVpbmFfQm9vbCByZWFkQ2FsbGJhY2sodm9pZCogdXNlckRhdGEsIEVjb3JlX0ZkX0hh
bmRsZXIqKTsKLQotICAgIEVjb3JlX0ZkX0hhbmRsZXIqIG1fZmRIYW5kbGVyOwotICAgIFN0cmlu
ZyBtX2RldmljZUZpbGU7Ci19OwotCi1HYW1lcGFkRGV2aWNlRWZsOjpHYW1lcGFkRGV2aWNlRWZs
KGNvbnN0IFN0cmluZyYgZGV2aWNlRmlsZSkKLSAgICA6IEdhbWVwYWREZXZpY2VMaW51eChkZXZp
Y2VGaWxlKQotICAgICwgbV9mZEhhbmRsZXIoMCkKLSAgICAsIG1fZGV2aWNlRmlsZShkZXZpY2VG
aWxlKQotewotICAgIGlmIChtX2ZpbGVEZXNjcmlwdG9yIDwgMCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9mZEhhbmRsZXIgPSBlY29yZV9tYWluX2ZkX2hhbmRsZXJfYWRkKG1fZmlsZURlc2Ny
aXB0b3IsIEVDT1JFX0ZEX1JFQUQsIHJlYWRDYWxsYmFjaywgdGhpcywgMCwgMCk7Ci0gICAgaWYg
KCFtX2ZkSGFuZGxlcikKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIHRoZSBF
Y29yZV9GZF9IYW5kbGVyLiIpOwotfQotCi1HYW1lcGFkRGV2aWNlRWZsOjp+R2FtZXBhZERldmlj
ZUVmbCgpCi17Ci0gICAgaWYgKG1fZmRIYW5kbGVyKQotICAgICAgICBlY29yZV9tYWluX2ZkX2hh
bmRsZXJfZGVsKG1fZmRIYW5kbGVyKTsKLX0KLQotRWluYV9Cb29sIEdhbWVwYWREZXZpY2VFZmw6
OnJlYWRDYWxsYmFjayh2b2lkKiB1c2VyRGF0YSwgRWNvcmVfRmRfSGFuZGxlciogZmRIYW5kbGVy
KQotewotICAgIEdhbWVwYWREZXZpY2VFZmwqIGdhbWVwYWREZXZpY2UgPSBzdGF0aWNfY2FzdDxH
YW1lcGFkRGV2aWNlRWZsKj4odXNlckRhdGEpOwotCi0gICAgaWYgKGVjb3JlX21haW5fZmRfaGFu
ZGxlcl9hY3RpdmVfZ2V0KGZkSGFuZGxlciwgRUNPUkVfRkRfRVJST1IpKSB7Ci0gICAgICAgIExP
R19FUlJPUigiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgd2F0Y2hpbmcgdGhlIGpveXN0aWNrIGZp
bGUgZGVzY3JpcHRvciBhdCAlcywgYWJvcnRpbmcuIiwgZ2FtZXBhZERldmljZS0+ZGV2aWNlRmls
ZSgpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBnYW1lcGFkRGV2aWNlLT5yZXNldEZkSGFuZGxl
cigpOwotICAgICAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOwotICAgIH0KLQotICAg
IGludCBmZERldmljZSA9IGVjb3JlX21haW5fZmRfaGFuZGxlcl9mZF9nZXQoZmRIYW5kbGVyKTsK
LSAgICBzdHJ1Y3QganNfZXZlbnQgZXZlbnQ7Ci0gICAgY29uc3Qgc3NpemVfdCBsZW4gPSByZWFk
KGZkRGV2aWNlLCAmZXZlbnQsIHNpemVvZihldmVudCkpOwotCi0gICAgaWYgKGxlbiA8PSAwKSB7
Ci0gICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIHJlYWQgam95c3RpY2sgZmlsZSBkZXNjcmlw
dG9yIGF0ICVzLCBhYm9ydGluZy4iLCBnYW1lcGFkRGV2aWNlLT5kZXZpY2VGaWxlKCkudXRmOCgp
LmRhdGEoKSk7Ci0gICAgICAgIGdhbWVwYWREZXZpY2UtPnJlc2V0RmRIYW5kbGVyKCk7Ci0gICAg
ICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5DRUw7Ci0gICAgfQotICAgIGlmIChsZW4gIT0g
c2l6ZW9mKGV2ZW50KSkgewotICAgICAgICBMT0dfRVJST1IoIldyb25nIGpzX2V2ZW50IHNpemUg
cmVhZCBvbiBmaWxlIGRlc2NyaXB0b3IgYXQgJXMsIGlnbm9yaW5nLiIsIGdhbWVwYWREZXZpY2Ut
PmRldmljZUZpbGUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIEVDT1JFX0NBTExC
QUNLX1JFTkVXOwotICAgIH0KLQotICAgIGdhbWVwYWREZXZpY2UtPnVwZGF0ZUZvckV2ZW50KGV2
ZW50KTsKLSAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfUkVORVc7Ci19Ci0KLWNsYXNzIEdhbWVw
YWRzRWZsIHsKLSAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8R2FtZXBhZHNFZmw+Owot
cHVibGljOgotICAgIEdhbWVwYWRzRWZsKHNpemVfdCBsZW5ndGgpOwotCi0gICAgdm9pZCByZWdp
c3RlckRldmljZShjb25zdCBTdHJpbmcmIHN5c3BhdGgpOwotICAgIHZvaWQgdW5yZWdpc3RlckRl
dmljZShjb25zdCBTdHJpbmcmIHN5c3BhdGgpOwotCi0gICAgdm9pZCB1cGRhdGVHYW1lcGFkTGlz
dChHYW1lcGFkTGlzdCopOwotCi1wcml2YXRlOgotICAgIH5HYW1lcGFkc0VmbCgpOwotICAgIHN0
YXRpYyB2b2lkIG9uR2FtZVBhZENoYW5nZShjb25zdCBjaGFyKiBzeXNwYXRoLCBFZXplX1VkZXZf
RXZlbnQsIHZvaWQqIHVzZXJEYXRhLCBFZXplX1VkZXZfV2F0Y2gqIHdhdGNoZXIpOwotCi0gICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxHYW1lcGFkRGV2aWNlRWZsPj4gbV9zbG90czsKLSAgICBI
YXNoTWFwPFN0cmluZywgR2FtZXBhZERldmljZUVmbCo+IG1fZGV2aWNlTWFwOwotCi0gICAgRWV6
ZV9VZGV2X1dhdGNoKiBtX2dhbWVwYWRzV2F0Y2hlcjsKLX07Ci0KLXZvaWQgR2FtZXBhZHNFZmw6
Om9uR2FtZVBhZENoYW5nZShjb25zdCBjaGFyKiBzeXNwYXRoLCBFZXplX1VkZXZfRXZlbnQgZXZl
bnQsIHZvaWQqIHVzZXJEYXRhLCBFZXplX1VkZXZfV2F0Y2gqKQotewotICAgIEdhbWVwYWRzRWZs
KiBnYW1lcGFkc0VmbCA9IHN0YXRpY19jYXN0PEdhbWVwYWRzRWZsKj4odXNlckRhdGEpOwotCi0g
ICAgc3dpdGNoIChldmVudCkgewotICAgIGNhc2UgRUVaRV9VREVWX0VWRU5UX0FERDoKLSAgICAg
ICAgZ2FtZXBhZHNFZmwtPnJlZ2lzdGVyRGV2aWNlKFN0cmluZzo6ZnJvbVVURjgoc3lzcGF0aCkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEVFWkVfVURFVl9FVkVOVF9SRU1PVkU6Ci0gICAg
ICAgIGdhbWVwYWRzRWZsLT51bnJlZ2lzdGVyRGV2aWNlKFN0cmluZzo6ZnJvbVVURjgoc3lzcGF0
aCkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9
Ci19Ci0KLUdhbWVwYWRzRWZsOjpHYW1lcGFkc0VmbChzaXplX3QgbGVuZ3RoKQotICAgIDogbV9z
bG90cyhsZW5ndGgpCi0gICAgLCBtX2dhbWVwYWRzV2F0Y2hlcigwKQotewotICAgIGlmIChlZXpl
X2luaXQoKSA8IDApIHsKLSAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBl
ZXplIGxpYnJhcnkuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBXYXRjaCBm
b3IgZ2FtZXBhZHMgYWRkaXRpb25zIC8gcmVtb3ZhbHMuCi0gICAgbV9nYW1lcGFkc1dhdGNoZXIg
PSBlZXplX3VkZXZfd2F0Y2hfYWRkKEVFWkVfVURFVl9UWVBFX0pPWVNUSUNLLCAoRUVaRV9VREVW
X0VWRU5UX0FERCB8IEVFWkVfVURFVl9FVkVOVF9SRU1PVkUpLCBvbkdhbWVQYWRDaGFuZ2UsIHRo
aXMpOwotCi0gICAgLy8gTGlzdCBhdmFpbGFibGUgZ2FtZXBhZHMuCi0gICAgRWluYV9MaXN0KiBn
YW1lcGFkcyA9IGVlemVfdWRldl9maW5kX2J5X3R5cGUoRUVaRV9VREVWX1RZUEVfSk9ZU1RJQ0ss
IDApOwotICAgIHZvaWQqIGRhdGE7Ci0gICAgRUlOQV9MSVNUX0ZSRUUoZ2FtZXBhZHMsIGRhdGEp
IHsKLSAgICAgICAgY2hhciogc3lzcGF0aCA9IHN0YXRpY19jYXN0PGNoYXIqPihkYXRhKTsKLSAg
ICAgICAgcmVnaXN0ZXJEZXZpY2UoU3RyaW5nOjpmcm9tVVRGOChzeXNwYXRoKSk7Ci0gICAgICAg
IGVpbmFfc3RyaW5nc2hhcmVfZGVsKHN5c3BhdGgpOwotICAgIH0KLX0KLQotR2FtZXBhZHNFZmw6
On5HYW1lcGFkc0VmbCgpCi17Ci0gICAgaWYgKG1fZ2FtZXBhZHNXYXRjaGVyKQotICAgICAgICBl
ZXplX3VkZXZfd2F0Y2hfZGVsKG1fZ2FtZXBhZHNXYXRjaGVyKTsKLSAgICBlZXplX3NodXRkb3du
KCk7Ci19Ci0KLXZvaWQgR2FtZXBhZHNFZmw6OnJlZ2lzdGVyRGV2aWNlKGNvbnN0IFN0cmluZyYg
c3lzcGF0aCkKLXsKLSAgICBpZiAobV9kZXZpY2VNYXAuY29udGFpbnMoc3lzcGF0aCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIE1ha2Ugc3VyZSBpdCBpcyBhIHZhbGlkIGpveXN0aWNrLgot
ICAgIGNvbnN0IGNoYXIqIGRldmljZUZpbGUgPSBlZXplX3VkZXZfc3lzcGF0aF9nZXRfZGV2cGF0
aChzeXNwYXRoLnV0ZjgoKS5kYXRhKCkpOwotICAgIGlmICghZGV2aWNlRmlsZSB8fCAhZWluYV9z
dHJfaGFzX3ByZWZpeChkZXZpY2VGaWxlLCBqb3lzdGlja1ByZWZpeCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIExPRyhHYW1lcGFkLCAiUmVnaXN0ZXJpbmcgZ2FtZXBhZCBhdCAlcyIsIGRldmlj
ZUZpbGUpOwotCi0gICAgY29uc3Qgc2l6ZV90IHNsb3RDb3VudCA9IG1fc2xvdHMuc2l6ZSgpOwot
ICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBzbG90Q291bnQ7ICsraW5kZXgpIHsK
LSAgICAgICAgaWYgKCFtX3Nsb3RzW2luZGV4XSkgewotICAgICAgICAgICAgbV9zbG90c1tpbmRl
eF0gPSBzdGQ6Om1ha2VfdW5pcXVlPEdhbWVwYWREZXZpY2VFZmw+KFN0cmluZzo6ZnJvbVVURjgo
ZGV2aWNlRmlsZSkpOwotICAgICAgICAgICAgTE9HKEdhbWVwYWQsICJHYW1lcGFkIGRldmljZSBu
YW1lIGlzICVzIiwgbV9zbG90c1tpbmRleF0tPmlkKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
ICAgICBtX2RldmljZU1hcC5hZGQoc3lzcGF0aCwgbV9zbG90c1tpbmRleF0uZ2V0KCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgR2FtZXBhZHNFZmw6
OnVucmVnaXN0ZXJEZXZpY2UoY29uc3QgU3RyaW5nJiBzeXNwYXRoKQotewotICAgIGlmICghbV9k
ZXZpY2VNYXAuY29udGFpbnMoc3lzcGF0aCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdhbWVw
YWREZXZpY2VFZmwqIGdhbWVwYWREZXZpY2UgPSBtX2RldmljZU1hcC50YWtlKHN5c3BhdGgpOwot
ICAgIExPRyhHYW1lcGFkLCAiVW5yZWdpc3RlcmluZyBnYW1lcGFkIGF0ICVzIiwgZ2FtZXBhZERl
dmljZS0+ZGV2aWNlRmlsZSgpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGNvbnN0IHNpemVfdCBpbmRl
eCA9IG1fc2xvdHMuZmluZChzdGQ6Om1ha2VfdW5pcXVlPEdhbWVwYWREZXZpY2VFZmw+KGdhbWVw
YWREZXZpY2UtPmRldmljZUZpbGUoKSkpOwotICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7
Ci0KLSAgICBtX3Nsb3RzW2luZGV4XSA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgR2FtZXBhZHNFZmw6
OnVwZGF0ZUdhbWVwYWRMaXN0KEdhbWVwYWRMaXN0KiBpbnRvKQotewotICAgIEFTU0VSVChtX3Ns
b3RzLnNpemUoKSA9PSBpbnRvLT5sZW5ndGgoKSk7Ci0KLSAgICBjb25zdCBzaXplX3Qgc2xvdENv
dW50ID0gbV9zbG90cy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzbG90Q291
bnQ7ICsraSkgewotICAgICAgICBpZiAobV9zbG90c1tpXS5nZXQoKSAmJiBtX3Nsb3RzW2ldLT5j
b25uZWN0ZWQoKSkgewotICAgICAgICAgICAgR2FtZXBhZERldmljZUVmbCogZ2FtZXBhZERldmlj
ZSA9IG1fc2xvdHNbaV0uZ2V0KCk7Ci0gICAgICAgICAgICBSZWZQdHI8R2FtZXBhZD4gZ2FtZXBh
ZCA9IGludG8tPml0ZW0oaSk7Ci0gICAgICAgICAgICBpZiAoIWdhbWVwYWQpCi0gICAgICAgICAg
ICAgICAgZ2FtZXBhZCA9IEdhbWVwYWQ6OmNyZWF0ZSgpOwotCi0gICAgICAgICAgICBnYW1lcGFk
LT5pbmRleChpKTsKLSAgICAgICAgICAgIGdhbWVwYWQtPmlkKGdhbWVwYWREZXZpY2UtPmlkKCkp
OwotICAgICAgICAgICAgZ2FtZXBhZC0+dGltZXN0YW1wKGdhbWVwYWREZXZpY2UtPnRpbWVzdGFt
cCgpKTsKLSAgICAgICAgICAgIGdhbWVwYWQtPmF4ZXMoZ2FtZXBhZERldmljZS0+YXhlc0NvdW50
KCksIGdhbWVwYWREZXZpY2UtPmF4ZXNEYXRhKCkpOwotICAgICAgICAgICAgZ2FtZXBhZC0+YnV0
dG9ucyhnYW1lcGFkRGV2aWNlLT5idXR0b25zQ291bnQoKSwgZ2FtZXBhZERldmljZS0+YnV0dG9u
c0RhdGEoKSk7Ci0KLSAgICAgICAgICAgIGludG8tPnNldChpLCBnYW1lcGFkKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBpbnRvLT5zZXQoaSwgMCk7Ci0gICAgfQotfQotCi12b2lkIHNh
bXBsZUdhbWVwYWRzKEdhbWVwYWRMaXN0KiBpbnRvKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxHYW1lcGFkc0VmbD4gZ2FtZXBhZHNFZmwoaW50by0+bGVuZ3RoKCkpOwotICAgIGdhbWVw
YWRzRWZsLmdldCgpLnVwZGF0ZUdhbWVwYWRMaXN0KGludG8pOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9FbXB0eUdhbWVwYWRQcm92aWRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL0VtcHR5R2FtZXBhZFByb3Zp
ZGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hMmRkZGRhOTAwYmQyYzEwNzQwOWZlNWI3ZmVkNDQ2MDQxYThm
MjMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9F
bXB0eUdhbWVwYWRQcm92aWRlci5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFbXB0eUdhbWVwYWRQcm92aWRlci5oIgorCisj
aWYgRU5BQkxFKEdBTUVQQUQpCisKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEVtcHR5R2FtZXBhZFByb3ZpZGVyOjpzdGFydE1v
bml0b3JpbmdHYW1lcGFkcyhHYW1lcGFkUHJvdmlkZXJDbGllbnQqKQoreworfQorCit2b2lkIEVt
cHR5R2FtZXBhZFByb3ZpZGVyOjpzdG9wTW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRl
ckNsaWVudCogKQoreworfQorCitjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4mIEVtcHR5
R2FtZXBhZFByb3ZpZGVyOjpwbGF0Zm9ybUdhbWVwYWRzKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8VmVjdG9yPFBsYXRmb3JtR2FtZXBhZCo+PiBlbXB0eUdhbWVwYWRzOworICAgIHJl
dHVybiBlbXB0eUdhbWVwYWRzOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvRW1wdHlHYW1lcGFk
UHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvRW1wdHlHYW1lcGFk
UHJvdmlkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZDY0NzVmMGQzZmU0YzVhNzg1YmY4YTliMzg2NDY1ODJl
MTMxODIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBh
ZC9FbXB0eUdhbWVwYWRQcm92aWRlci5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSAiR2FtZXBhZFBy
b3ZpZGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRW1wdHlHYW1lcGFkUHJv
dmlkZXIgOiBwdWJsaWMgR2FtZXBhZFByb3ZpZGVyIHsKK3B1YmxpYzoKKyAgICB+RW1wdHlHYW1l
cGFkUHJvdmlkZXIoKSBmaW5hbCB7IH0KKworICAgIHZvaWQgc3RhcnRNb25pdG9yaW5nR2FtZXBh
ZHMoR2FtZXBhZFByb3ZpZGVyQ2xpZW50KikgZmluYWw7CisgICAgdm9pZCBzdG9wTW9uaXRvcmlu
Z0dhbWVwYWRzKEdhbWVwYWRQcm92aWRlckNsaWVudCopIGZpbmFsOworICAgIGNvbnN0IFZlY3Rv
cjxQbGF0Zm9ybUdhbWVwYWQqPiYgcGxhdGZvcm1HYW1lcGFkcygpIGZpbmFsOworfTsKKworfQor
CisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9nYW1lcGFkL0dhbWVwYWRQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9nYW1lcGFkL0dhbWVwYWRQcm92aWRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODg2MWEwZWFmNWNm
ZTc2MzQxYjgzNjQ1Y2Q0YjRkNjljODQwNGFmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvR2FtZXBhZFByb3ZpZGVyLmNwcApAQCAtMCwwICsxLDU0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHYW1lcGFkUHJv
dmlkZXIuaCIKKworI2lmIEVOQUJMRShHQU1FUEFEKQorCisjaW5jbHVkZSAiRW1wdHlHYW1lcGFk
UHJvdmlkZXIuaCIKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgR2FtZXBhZFByb3ZpZGVyKiBzaGFyZWRQcm92aWRlciA9IG51
bGxwdHI7CisKK0dhbWVwYWRQcm92aWRlciYgR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKQor
eworICAgIGlmICghc2hhcmVkUHJvdmlkZXIpIHsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEVtcHR5R2FtZXBhZFByb3ZpZGVyPiBkZWZhdWx0UHJvdmlkZXI7CisgICAgICAgIHNoYXJl
ZFByb3ZpZGVyID0gJmRlZmF1bHRQcm92aWRlci5nZXQoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
KnNoYXJlZFByb3ZpZGVyOworfQorCit2b2lkIEdhbWVwYWRQcm92aWRlcjo6c2V0U2hhcmVkUHJv
dmlkZXIoR2FtZXBhZFByb3ZpZGVyJiBuZXdQcm92aWRlcikKK3sKKyAgICBzaGFyZWRQcm92aWRl
ciA9ICZuZXdQcm92aWRlcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
YW1lcGFkL0dhbWVwYWRQcm92aWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBh
ZC9HYW1lcGFkUHJvdmlkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zM2E4ODM4YzIzNzI0OWRhYWEyM2ZkNjQy
ZGQ2YzlkZmJlMWZiNDFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ2FtZXBhZC9HYW1lcGFkUHJvdmlkZXIuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKworI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHYW1lcGFkUHJvdmlkZXJD
bGllbnQ7CitjbGFzcyBQbGF0Zm9ybUdhbWVwYWQ7CisKK2NsYXNzIEdhbWVwYWRQcm92aWRlciB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+R2FtZXBhZFByb3ZpZGVyKCkgeyB9CisKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgR2FtZXBhZFByb3ZpZGVyJiBzaW5nbGV0b24oKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRTaGFyZWRQcm92aWRlcihHYW1lcGFkUHJvdmlkZXIm
KTsKKworICAgIHZpcnR1YWwgdm9pZCBzdGFydE1vbml0b3JpbmdHYW1lcGFkcyhHYW1lcGFkUHJv
dmlkZXJDbGllbnQqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHN0b3BNb25pdG9yaW5nR2FtZXBh
ZHMoR2FtZXBhZFByb3ZpZGVyQ2xpZW50KikgPSAwOworICAgIHZpcnR1YWwgY29uc3QgVmVjdG9y
PFBsYXRmb3JtR2FtZXBhZCo+JiBwbGF0Zm9ybUdhbWVwYWRzKCkgPSAwOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL0dhbWVwYWRQcm92aWRlckNsaWVudC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9HYW1lcGFkUHJvdmlkZXJDbGllbnQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xZWExMDJhNWVhZDdjNTQ1Y2Y4OTEzY2IxODBkODBlYTljZGE3NWI1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9HYW1lcGFk
UHJvdmlkZXJDbGllbnQuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBQbGF0Zm9ybUdhbWVwYWQ7CisKK2NsYXNzIEdhbWVwYWRQcm92aWRlckNsaWVudCB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB+R2FtZXBhZFByb3ZpZGVyQ2xpZW50KCkgeyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgcGxhdGZvcm1HYW1lcGFkQ29ubmVjdGVkKFBsYXRmb3JtR2FtZXBhZCYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1HYW1lcGFkRGlzY29ubmVjdGVkKFBsYXRmb3JtR2Ft
ZXBhZCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1HYW1lcGFkSW5wdXRBY3Rpdml0
eSgpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShHQU1FUEFEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9Q
bGF0Zm9ybUdhbWVwYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvUGxhdGZv
cm1HYW1lcGFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmI4ZDdhOTk4ZGE1Yjk2NmVkZTkyNjE4M2Y5MGMxMDNm
YWY5NjY0OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVw
YWQvUGxhdGZvcm1HYW1lcGFkLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKEdBTUVQQUQpCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgUGxhdGZvcm1HYW1lcGFkIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5QbGF0Zm9y
bUdhbWVwYWQoKSB7IH0KKworICAgIGNvbnN0IFN0cmluZyYgaWQoKSBjb25zdCB7IHJldHVybiBt
X2lkOyB9CisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9Cisg
ICAgZG91YmxlIGxhc3RVcGRhdGVUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0VXBkYXRlVGlt
ZTsgfQorICAgIGRvdWJsZSBjb25uZWN0VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29ubmVjdFRp
bWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IFZlY3Rvcjxkb3VibGU+JiBheGlzVmFsdWVzKCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgY29uc3QgVmVjdG9yPGRvdWJsZT4mIGJ1dHRvblZhbHVlcygp
IGNvbnN0ID0gMDsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IFBsYXRmb3JtR2FtZXBhZCh1
bnNpZ25lZCBpbmRleCkKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fbGFz
dFVwZGF0ZVRpbWUoMC4wKQorICAgICAgICAsIG1fY29ubmVjdFRpbWUoMC4wKQorICAgIHsKKyAg
ICB9CisKKyAgICBTdHJpbmcgbV9pZDsKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIGRvdWJs
ZSBtX2xhc3RVcGRhdGVUaW1lOworICAgIGRvdWJsZSBtX2Nvbm5lY3RUaW1lOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL2RlcHJlY2F0ZWQvR2FtZXBhZHMu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvZGVwcmVjYXRlZC9HYW1lcGFkcy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQ1MzhjY2VkODNkNzcxNmEzNTI1NmI4MzA2MWMzYjQ1MjgwZGJiNTcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL2RlcHJlY2F0
ZWQvR2FtZXBhZHMuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEdh
bWVwYWRzX2gKKyNkZWZpbmUgR2FtZXBhZHNfaAorCisjaWYgRU5BQkxFKEdBTUVQQURfREVQUkVD
QVRFRCkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHYW1lcGFkTGlzdDsKKwordm9p
ZCBzYW1wbGVHYW1lcGFkcyhHYW1lcGFkTGlzdCogaW50byk7CisKK30KKworI2VuZGlmIC8vIEVO
QUJMRShHQU1FUEFEX0RFUFJFQ0FURUQpCisKKyNlbmRpZiAvLyBHYW1lcGFkc19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL2VmbC9HYW1lcGFkc0VmbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL2VmbC9HYW1lcGFkc0VmbC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYjZmOWVhNTNjZTM2ZjAwMTk1ZDdjNGUyYjExMWNiNTFiMjMzOGU3NAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvZWZsL0dhbWVwYWRz
RWZsLmNwcApAQCAtMCwwICsxLDI0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRl
bCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkdhbWVwYWRzLmgiCisKKyNpZiBFTkFCTEUoR0FNRVBBRF9E
RVBSRUNBVEVEKQorCisjaW5jbHVkZSAiR2FtZXBhZERldmljZUxpbnV4LmgiCisjaW5jbHVkZSAi
R2FtZXBhZExpc3QuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSA8RWNvcmUuaD4K
KyNpbmNsdWRlIDxFZXplLmg+CisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgY2hhciBq
b3lzdGlja1ByZWZpeFtdID0gIi9kZXYvaW5wdXQvanMiOworCitjbGFzcyBHYW1lcGFkRGV2aWNl
RWZsIDogcHVibGljIEdhbWVwYWREZXZpY2VMaW51eCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
R2FtZXBhZERldmljZUVmbChjb25zdCBTdHJpbmcmIGRldmljZUZpbGUpOworICAgIH5HYW1lcGFk
RGV2aWNlRWZsKCk7CisgICAgdm9pZCByZXNldEZkSGFuZGxlcigpIHsgbV9mZEhhbmRsZXIgPSAw
OyB9CisgICAgY29uc3QgU3RyaW5nJiBkZXZpY2VGaWxlKCkgY29uc3QgeyByZXR1cm4gbV9kZXZp
Y2VGaWxlOyB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIEVpbmFfQm9vbCByZWFkQ2FsbGJhY2so
dm9pZCogdXNlckRhdGEsIEVjb3JlX0ZkX0hhbmRsZXIqKTsKKworICAgIEVjb3JlX0ZkX0hhbmRs
ZXIqIG1fZmRIYW5kbGVyOworICAgIFN0cmluZyBtX2RldmljZUZpbGU7Cit9OworCitHYW1lcGFk
RGV2aWNlRWZsOjpHYW1lcGFkRGV2aWNlRWZsKGNvbnN0IFN0cmluZyYgZGV2aWNlRmlsZSkKKyAg
ICA6IEdhbWVwYWREZXZpY2VMaW51eChkZXZpY2VGaWxlKQorICAgICwgbV9mZEhhbmRsZXIoMCkK
KyAgICAsIG1fZGV2aWNlRmlsZShkZXZpY2VGaWxlKQoreworICAgIGlmIChtX2ZpbGVEZXNjcmlw
dG9yIDwgMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9mZEhhbmRsZXIgPSBlY29yZV9tYWlu
X2ZkX2hhbmRsZXJfYWRkKG1fZmlsZURlc2NyaXB0b3IsIEVDT1JFX0ZEX1JFQUQsIHJlYWRDYWxs
YmFjaywgdGhpcywgMCwgMCk7CisgICAgaWYgKCFtX2ZkSGFuZGxlcikKKyAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gY3JlYXRlIHRoZSBFY29yZV9GZF9IYW5kbGVyLiIpOworfQorCitHYW1l
cGFkRGV2aWNlRWZsOjp+R2FtZXBhZERldmljZUVmbCgpCit7CisgICAgaWYgKG1fZmRIYW5kbGVy
KQorICAgICAgICBlY29yZV9tYWluX2ZkX2hhbmRsZXJfZGVsKG1fZmRIYW5kbGVyKTsKK30KKwor
RWluYV9Cb29sIEdhbWVwYWREZXZpY2VFZmw6OnJlYWRDYWxsYmFjayh2b2lkKiB1c2VyRGF0YSwg
RWNvcmVfRmRfSGFuZGxlciogZmRIYW5kbGVyKQoreworICAgIEdhbWVwYWREZXZpY2VFZmwqIGdh
bWVwYWREZXZpY2UgPSBzdGF0aWNfY2FzdDxHYW1lcGFkRGV2aWNlRWZsKj4odXNlckRhdGEpOwor
CisgICAgaWYgKGVjb3JlX21haW5fZmRfaGFuZGxlcl9hY3RpdmVfZ2V0KGZkSGFuZGxlciwgRUNP
UkVfRkRfRVJST1IpKSB7CisgICAgICAgIExPR19FUlJPUigiQW4gZXJyb3Igb2NjdXJyZWQgd2hp
bGUgd2F0Y2hpbmcgdGhlIGpveXN0aWNrIGZpbGUgZGVzY3JpcHRvciBhdCAlcywgYWJvcnRpbmcu
IiwgZ2FtZXBhZERldmljZS0+ZGV2aWNlRmlsZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBn
YW1lcGFkRGV2aWNlLT5yZXNldEZkSGFuZGxlcigpOworICAgICAgICByZXR1cm4gRUNPUkVfQ0FM
TEJBQ0tfQ0FOQ0VMOworICAgIH0KKworICAgIGludCBmZERldmljZSA9IGVjb3JlX21haW5fZmRf
aGFuZGxlcl9mZF9nZXQoZmRIYW5kbGVyKTsKKyAgICBzdHJ1Y3QganNfZXZlbnQgZXZlbnQ7Cisg
ICAgY29uc3Qgc3NpemVfdCBsZW4gPSByZWFkKGZkRGV2aWNlLCAmZXZlbnQsIHNpemVvZihldmVu
dCkpOworCisgICAgaWYgKGxlbiA8PSAwKSB7CisgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRv
IHJlYWQgam95c3RpY2sgZmlsZSBkZXNjcmlwdG9yIGF0ICVzLCBhYm9ydGluZy4iLCBnYW1lcGFk
RGV2aWNlLT5kZXZpY2VGaWxlKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGdhbWVwYWREZXZp
Y2UtPnJlc2V0RmRIYW5kbGVyKCk7CisgICAgICAgIHJldHVybiBFQ09SRV9DQUxMQkFDS19DQU5D
RUw7CisgICAgfQorICAgIGlmIChsZW4gIT0gc2l6ZW9mKGV2ZW50KSkgeworICAgICAgICBMT0df
RVJST1IoIldyb25nIGpzX2V2ZW50IHNpemUgcmVhZCBvbiBmaWxlIGRlc2NyaXB0b3IgYXQgJXMs
IGlnbm9yaW5nLiIsIGdhbWVwYWREZXZpY2UtPmRldmljZUZpbGUoKS51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX1JFTkVXOworICAgIH0KKworICAgIGdhbWVw
YWREZXZpY2UtPnVwZGF0ZUZvckV2ZW50KGV2ZW50KTsKKyAgICByZXR1cm4gRUNPUkVfQ0FMTEJB
Q0tfUkVORVc7Cit9CisKK2NsYXNzIEdhbWVwYWRzRWZsIHsKKyAgICBmcmllbmQgY2xhc3MgTmV2
ZXJEZXN0cm95ZWQ8R2FtZXBhZHNFZmw+OworcHVibGljOgorICAgIEdhbWVwYWRzRWZsKHNpemVf
dCBsZW5ndGgpOworCisgICAgdm9pZCByZWdpc3RlckRldmljZShjb25zdCBTdHJpbmcmIHN5c3Bh
dGgpOworICAgIHZvaWQgdW5yZWdpc3RlckRldmljZShjb25zdCBTdHJpbmcmIHN5c3BhdGgpOwor
CisgICAgdm9pZCB1cGRhdGVHYW1lcGFkTGlzdChHYW1lcGFkTGlzdCopOworCitwcml2YXRlOgor
ICAgIH5HYW1lcGFkc0VmbCgpOworICAgIHN0YXRpYyB2b2lkIG9uR2FtZVBhZENoYW5nZShjb25z
dCBjaGFyKiBzeXNwYXRoLCBFZXplX1VkZXZfRXZlbnQsIHZvaWQqIHVzZXJEYXRhLCBFZXplX1Vk
ZXZfV2F0Y2gqIHdhdGNoZXIpOworCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxHYW1lcGFk
RGV2aWNlRWZsPj4gbV9zbG90czsKKyAgICBIYXNoTWFwPFN0cmluZywgR2FtZXBhZERldmljZUVm
bCo+IG1fZGV2aWNlTWFwOworCisgICAgRWV6ZV9VZGV2X1dhdGNoKiBtX2dhbWVwYWRzV2F0Y2hl
cjsKK307CisKK3ZvaWQgR2FtZXBhZHNFZmw6Om9uR2FtZVBhZENoYW5nZShjb25zdCBjaGFyKiBz
eXNwYXRoLCBFZXplX1VkZXZfRXZlbnQgZXZlbnQsIHZvaWQqIHVzZXJEYXRhLCBFZXplX1VkZXZf
V2F0Y2gqKQoreworICAgIEdhbWVwYWRzRWZsKiBnYW1lcGFkc0VmbCA9IHN0YXRpY19jYXN0PEdh
bWVwYWRzRWZsKj4odXNlckRhdGEpOworCisgICAgc3dpdGNoIChldmVudCkgeworICAgIGNhc2Ug
RUVaRV9VREVWX0VWRU5UX0FERDoKKyAgICAgICAgZ2FtZXBhZHNFZmwtPnJlZ2lzdGVyRGV2aWNl
KFN0cmluZzo6ZnJvbVVURjgoc3lzcGF0aCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEVF
WkVfVURFVl9FVkVOVF9SRU1PVkU6CisgICAgICAgIGdhbWVwYWRzRWZsLT51bnJlZ2lzdGVyRGV2
aWNlKFN0cmluZzo6ZnJvbVVURjgoc3lzcGF0aCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK0dhbWVwYWRzRWZsOjpHYW1lcGFkc0Vm
bChzaXplX3QgbGVuZ3RoKQorICAgIDogbV9zbG90cyhsZW5ndGgpCisgICAgLCBtX2dhbWVwYWRz
V2F0Y2hlcigwKQoreworICAgIGlmIChlZXplX2luaXQoKSA8IDApIHsKKyAgICAgICAgTE9HX0VS
Uk9SKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBlZXplIGxpYnJhcnkuIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBXYXRjaCBmb3IgZ2FtZXBhZHMgYWRkaXRpb25zIC8gcmVtb3Zh
bHMuCisgICAgbV9nYW1lcGFkc1dhdGNoZXIgPSBlZXplX3VkZXZfd2F0Y2hfYWRkKEVFWkVfVURF
Vl9UWVBFX0pPWVNUSUNLLCAoRUVaRV9VREVWX0VWRU5UX0FERCB8IEVFWkVfVURFVl9FVkVOVF9S
RU1PVkUpLCBvbkdhbWVQYWRDaGFuZ2UsIHRoaXMpOworCisgICAgLy8gTGlzdCBhdmFpbGFibGUg
Z2FtZXBhZHMuCisgICAgRWluYV9MaXN0KiBnYW1lcGFkcyA9IGVlemVfdWRldl9maW5kX2J5X3R5
cGUoRUVaRV9VREVWX1RZUEVfSk9ZU1RJQ0ssIDApOworICAgIHZvaWQqIGRhdGE7CisgICAgRUlO
QV9MSVNUX0ZSRUUoZ2FtZXBhZHMsIGRhdGEpIHsKKyAgICAgICAgY2hhciogc3lzcGF0aCA9IHN0
YXRpY19jYXN0PGNoYXIqPihkYXRhKTsKKyAgICAgICAgcmVnaXN0ZXJEZXZpY2UoU3RyaW5nOjpm
cm9tVVRGOChzeXNwYXRoKSk7CisgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHN5c3BhdGgp
OworICAgIH0KK30KKworR2FtZXBhZHNFZmw6On5HYW1lcGFkc0VmbCgpCit7CisgICAgaWYgKG1f
Z2FtZXBhZHNXYXRjaGVyKQorICAgICAgICBlZXplX3VkZXZfd2F0Y2hfZGVsKG1fZ2FtZXBhZHNX
YXRjaGVyKTsKKyAgICBlZXplX3NodXRkb3duKCk7Cit9CisKK3ZvaWQgR2FtZXBhZHNFZmw6OnJl
Z2lzdGVyRGV2aWNlKGNvbnN0IFN0cmluZyYgc3lzcGF0aCkKK3sKKyAgICBpZiAobV9kZXZpY2VN
YXAuY29udGFpbnMoc3lzcGF0aCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIE1ha2Ugc3Vy
ZSBpdCBpcyBhIHZhbGlkIGpveXN0aWNrLgorICAgIGNvbnN0IGNoYXIqIGRldmljZUZpbGUgPSBl
ZXplX3VkZXZfc3lzcGF0aF9nZXRfZGV2cGF0aChzeXNwYXRoLnV0ZjgoKS5kYXRhKCkpOworICAg
IGlmICghZGV2aWNlRmlsZSB8fCAhZWluYV9zdHJfaGFzX3ByZWZpeChkZXZpY2VGaWxlLCBqb3lz
dGlja1ByZWZpeCkpCisgICAgICAgIHJldHVybjsKKworICAgIExPRyhHYW1lcGFkLCAiUmVnaXN0
ZXJpbmcgZ2FtZXBhZCBhdCAlcyIsIGRldmljZUZpbGUpOworCisgICAgY29uc3Qgc2l6ZV90IHNs
b3RDb3VudCA9IG1fc2xvdHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5k
ZXggPCBzbG90Q291bnQ7ICsraW5kZXgpIHsKKyAgICAgICAgaWYgKCFtX3Nsb3RzW2luZGV4XSkg
eworICAgICAgICAgICAgbV9zbG90c1tpbmRleF0gPSBzdGQ6Om1ha2VfdW5pcXVlPEdhbWVwYWRE
ZXZpY2VFZmw+KFN0cmluZzo6ZnJvbVVURjgoZGV2aWNlRmlsZSkpOworICAgICAgICAgICAgTE9H
KEdhbWVwYWQsICJHYW1lcGFkIGRldmljZSBuYW1lIGlzICVzIiwgbV9zbG90c1tpbmRleF0tPmlk
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBtX2RldmljZU1hcC5hZGQoc3lzcGF0aCwg
bV9zbG90c1tpbmRleF0uZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgR2FtZXBhZHNFZmw6OnVucmVnaXN0ZXJEZXZpY2UoY29uc3QgU3RyaW5n
JiBzeXNwYXRoKQoreworICAgIGlmICghbV9kZXZpY2VNYXAuY29udGFpbnMoc3lzcGF0aCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEdhbWVwYWREZXZpY2VFZmwqIGdhbWVwYWREZXZpY2UgPSBt
X2RldmljZU1hcC50YWtlKHN5c3BhdGgpOworICAgIExPRyhHYW1lcGFkLCAiVW5yZWdpc3Rlcmlu
ZyBnYW1lcGFkIGF0ICVzIiwgZ2FtZXBhZERldmljZS0+ZGV2aWNlRmlsZSgpLnV0ZjgoKS5kYXRh
KCkpOworICAgIGNvbnN0IHNpemVfdCBpbmRleCA9IG1fc2xvdHMuZmluZChzdGQ6Om1ha2VfdW5p
cXVlPEdhbWVwYWREZXZpY2VFZmw+KGdhbWVwYWREZXZpY2UtPmRldmljZUZpbGUoKSkpOworICAg
IEFTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7CisKKyAgICBtX3Nsb3RzW2luZGV4XSA9IG51bGxw
dHI7Cit9CisKK3ZvaWQgR2FtZXBhZHNFZmw6OnVwZGF0ZUdhbWVwYWRMaXN0KEdhbWVwYWRMaXN0
KiBpbnRvKQoreworICAgIEFTU0VSVChtX3Nsb3RzLnNpemUoKSA9PSBpbnRvLT5sZW5ndGgoKSk7
CisKKyAgICBjb25zdCBzaXplX3Qgc2xvdENvdW50ID0gbV9zbG90cy5zaXplKCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzbG90Q291bnQ7ICsraSkgeworICAgICAgICBpZiAobV9zbG90
c1tpXS5nZXQoKSAmJiBtX3Nsb3RzW2ldLT5jb25uZWN0ZWQoKSkgeworICAgICAgICAgICAgR2Ft
ZXBhZERldmljZUVmbCogZ2FtZXBhZERldmljZSA9IG1fc2xvdHNbaV0uZ2V0KCk7CisgICAgICAg
ICAgICBSZWZQdHI8R2FtZXBhZD4gZ2FtZXBhZCA9IGludG8tPml0ZW0oaSk7CisgICAgICAgICAg
ICBpZiAoIWdhbWVwYWQpCisgICAgICAgICAgICAgICAgZ2FtZXBhZCA9IEdhbWVwYWQ6OmNyZWF0
ZSgpOworCisgICAgICAgICAgICBnYW1lcGFkLT5pbmRleChpKTsKKyAgICAgICAgICAgIGdhbWVw
YWQtPmlkKGdhbWVwYWREZXZpY2UtPmlkKCkpOworICAgICAgICAgICAgZ2FtZXBhZC0+dGltZXN0
YW1wKGdhbWVwYWREZXZpY2UtPnRpbWVzdGFtcCgpKTsKKyAgICAgICAgICAgIGdhbWVwYWQtPmF4
ZXMoZ2FtZXBhZERldmljZS0+YXhlc0NvdW50KCksIGdhbWVwYWREZXZpY2UtPmF4ZXNEYXRhKCkp
OworICAgICAgICAgICAgZ2FtZXBhZC0+YnV0dG9ucyhnYW1lcGFkRGV2aWNlLT5idXR0b25zQ291
bnQoKSwgZ2FtZXBhZERldmljZS0+YnV0dG9uc0RhdGEoKSk7CisKKyAgICAgICAgICAgIGludG8t
PnNldChpLCBnYW1lcGFkKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBpbnRvLT5zZXQo
aSwgMCk7CisgICAgfQorfQorCit2b2lkIHNhbXBsZUdhbWVwYWRzKEdhbWVwYWRMaXN0KiBpbnRv
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxHYW1lcGFkc0VmbD4gZ2FtZXBhZHNFZmwo
aW50by0+bGVuZ3RoKCkpOworICAgIGdhbWVwYWRzRWZsLmdldCgpLnVwZGF0ZUdhbWVwYWRMaXN0
KGludG8pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
R0FNRVBBRF9ERVBSRUNBVEVEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z2FtZXBhZC9nbGliL0dhbWVwYWRzR2xpYi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
YW1lcGFkL2dsaWIvR2FtZXBhZHNHbGliLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iOGJkMjFhNWU4NjYyMjYy
NGQzY2Q3YTlkYzgzNTJjMjRlMjQ1ODRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ2FtZXBhZC9nbGliL0dhbWVwYWRzR2xpYi5jcHAKQEAgLTAsMCArMSwyMTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgWmFuIERvYmVyc2VrIDx6YW5kb2JlcnNla0Bn
bWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
CisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SAorICogREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHYW1l
cGFkcy5oIgorCisjaWYgRU5BQkxFKEdBTUVQQURfREVQUkVDQVRFRCkKKworI2luY2x1ZGUgIkdh
bWVwYWREZXZpY2VMaW51eC5oIgorI2luY2x1ZGUgIkdhbWVwYWRMaXN0LmgiCisjaW5jbHVkZSAi
TG9nZ2luZy5oIgorI2luY2x1ZGUgPGdpby9ndW5peGlucHV0c3RyZWFtLmg+CisjaW5jbHVkZSA8
Z3VkZXYvZ3VkZXYuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9n
bGliL0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHYW1lcGFkRGV2aWNlR2xpYiA6IHB1Ymxp
YyBHYW1lcGFkRGV2aWNlTGludXggeworcHVibGljOgorICAgIGV4cGxpY2l0IEdhbWVwYWREZXZp
Y2VHbGliKFN0cmluZyBkZXZpY2VGaWxlKTsKKyAgICB+R2FtZXBhZERldmljZUdsaWIoKTsKKwor
cHJpdmF0ZToKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcmVhZENhbGxiYWNrKEdPYmplY3QqIHBvbGxh
YmxlU3RyZWFtLCBncG9pbnRlciBkYXRhKTsKKyAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gbV9p
bnB1dFN0cmVhbTsKKyAgICBHUmVmUHRyPEdTb3VyY2U+IG1fc291cmNlOworfTsKKworR2FtZXBh
ZERldmljZUdsaWI6OkdhbWVwYWREZXZpY2VHbGliKFN0cmluZyBkZXZpY2VGaWxlKQorICAgIDog
R2FtZXBhZERldmljZUxpbnV4KGRldmljZUZpbGUpCit7CisgICAgaWYgKG1fZmlsZURlc2NyaXB0
b3IgPT0gLTEpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5wdXRTdHJlYW0gPSBhZG9wdEdS
ZWYoZ191bml4X2lucHV0X3N0cmVhbV9uZXcobV9maWxlRGVzY3JpcHRvciwgRkFMU0UpKTsKKyAg
ICBtX3NvdXJjZSA9IGFkb3B0R1JlZihnX3BvbGxhYmxlX2lucHV0X3N0cmVhbV9jcmVhdGVfc291
cmNlKEdfUE9MTEFCTEVfSU5QVVRfU1RSRUFNKG1faW5wdXRTdHJlYW0uZ2V0KCkpLCAwKSk7Cisg
ICAgZ19zb3VyY2Vfc2V0X2NhbGxiYWNrKG1fc291cmNlLmdldCgpLCByZWludGVycHJldF9jYXN0
PEdTb3VyY2VGdW5jPihyZWFkQ2FsbGJhY2spLCB0aGlzLCAwKTsKKyAgICBnX3NvdXJjZV9hdHRh
Y2gobV9zb3VyY2UuZ2V0KCksIDApOworfQorCitHYW1lcGFkRGV2aWNlR2xpYjo6fkdhbWVwYWRE
ZXZpY2VHbGliKCkKK3sKKyAgICBpZiAobV9zb3VyY2UpCisgICAgICAgIGdfc291cmNlX2Rlc3Ry
b3kobV9zb3VyY2UuZ2V0KCkpOworfQorCitnYm9vbGVhbiBHYW1lcGFkRGV2aWNlR2xpYjo6cmVh
ZENhbGxiYWNrKEdPYmplY3QqIHBvbGxhYmxlU3RyZWFtLCBncG9pbnRlciBkYXRhKQoreworICAg
IEdhbWVwYWREZXZpY2VHbGliKiBnYW1lcGFkRGV2aWNlID0gcmVpbnRlcnByZXRfY2FzdDxHYW1l
cGFkRGV2aWNlR2xpYio+KGRhdGEpOworICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsK
KyAgICBzdHJ1Y3QganNfZXZlbnQgZXZlbnQ7CisKKyAgICBnc3NpemUgbGVuID0gZ19wb2xsYWJs
ZV9pbnB1dF9zdHJlYW1fcmVhZF9ub25ibG9ja2luZyhHX1BPTExBQkxFX0lOUFVUX1NUUkVBTShw
b2xsYWJsZVN0cmVhbSksCisgICAgICAgICZldmVudCwgc2l6ZW9mKGV2ZW50KSwgMCwgJmVycm9y
Lm91dFB0cigpKTsKKworICAgIC8vIEZJWE1FOiBQcm9wZXJseSBsb2cgdGhlIGVycm9yLgorICAg
IC8vIEluIHRoZSBjYXNlIG9mIEdfSU9fRVJST1JfV09VTERfQkxPQ0sgZXJyb3IgcmV0dXJuIFRS
VUUgdG8gd2FpdCB1bnRpbAorICAgIC8vIHRoZSBzb3VyY2UgYmVjb21lcyByZWFkYWJsZSBhZ2Fp
biBhbmQgRkFMU0Ugb3RoZXJ3aXNlLgorICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIGdf
ZXJyb3JfbWF0Y2hlcyhlcnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9XT1VMRF9C
TE9DSyk7CisKKyAgICBBU1NFUlRfVU5VU0VEKGxlbiwgbGVuID09IHNpemVvZihldmVudCkpOwor
ICAgIGdhbWVwYWREZXZpY2UtPnVwZGF0ZUZvckV2ZW50KGV2ZW50KTsKKyAgICByZXR1cm4gVFJV
RTsKK30KKworY2xhc3MgR2FtZXBhZHNHbGliIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHYW1l
cGFkc0dsaWIodW5zaWduZWQgbGVuZ3RoKTsKKworICAgIHZvaWQgcmVnaXN0ZXJEZXZpY2UoU3Ry
aW5nIGRldmljZUZpbGUpOworICAgIHZvaWQgdW5yZWdpc3RlckRldmljZShTdHJpbmcgZGV2aWNl
RmlsZSk7CisKKyAgICB2b2lkIHVwZGF0ZUdhbWVwYWRMaXN0KEdhbWVwYWRMaXN0Kik7CisKK3By
aXZhdGU6CisgICAgfkdhbWVwYWRzR2xpYigpOworICAgIHN0YXRpYyB2b2lkIG9uVUV2ZW50Q2Fs
bGJhY2soR1VkZXZDbGllbnQqLCBnY2hhciogYWN0aW9uLCBHVWRldkRldmljZSosIGdwb2ludGVy
IGRhdGEpOworICAgIHN0YXRpYyBnYm9vbGVhbiBpc0dhbWVwYWREZXZpY2UoR1VkZXZEZXZpY2Uq
KTsKKworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8R2FtZXBhZERldmljZUdsaWI+ID4gbV9z
bG90czsKKyAgICBIYXNoTWFwPFN0cmluZywgR2FtZXBhZERldmljZUdsaWIqPiBtX2RldmljZU1h
cDsKKworICAgIEdSZWZQdHI8R1VkZXZDbGllbnQ+IG1fZ3VkZXZDbGllbnQ7Cit9OworCitHYW1l
cGFkc0dsaWI6OkdhbWVwYWRzR2xpYih1bnNpZ25lZCBsZW5ndGgpCisgICAgOiBtX3Nsb3RzKGxl
bmd0aCkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogc3Vic3lzdGVtc1tdID0geyAiaW5wdXQi
LCAwIH07CisgICAgbV9ndWRldkNsaWVudCA9IGFkb3B0R1JlZihnX3VkZXZfY2xpZW50X25ldyhz
dWJzeXN0ZW1zKSk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2d1ZGV2Q2xpZW50LmdldCgpLCAi
dWV2ZW50IiwgR19DQUxMQkFDSyhvblVFdmVudENhbGxiYWNrKSwgdGhpcyk7CisKKyAgICBHVW5p
cXVlUHRyPEdMaXN0PiBkZXZpY2VzTGlzdChnX3VkZXZfY2xpZW50X3F1ZXJ5X2J5X3N1YnN5c3Rl
bShtX2d1ZGV2Q2xpZW50LmdldCgpLCBzdWJzeXN0ZW1zWzBdKSk7CisgICAgZm9yIChHTGlzdCog
bGlzdEl0ZW0gPSBkZXZpY2VzTGlzdC5nZXQoKTsgbGlzdEl0ZW07IGxpc3RJdGVtID0gZ19saXN0
X25leHQobGlzdEl0ZW0pKSB7CisgICAgICAgIEdVZGV2RGV2aWNlKiBkZXZpY2UgPSBHX1VERVZf
REVWSUNFKGxpc3RJdGVtLT5kYXRhKTsKKyAgICAgICAgU3RyaW5nIGRldmljZUZpbGUgPSBTdHJp
bmc6OmZyb21VVEY4KGdfdWRldl9kZXZpY2VfZ2V0X2RldmljZV9maWxlKGRldmljZSkpOworICAg
ICAgICBpZiAoaXNHYW1lcGFkRGV2aWNlKGRldmljZSkpCisgICAgICAgICAgICByZWdpc3RlckRl
dmljZShkZXZpY2VGaWxlKTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoZGV2aWNlKTsKKyAgICB9
Cit9CisKK0dhbWVwYWRzR2xpYjo6fkdhbWVwYWRzR2xpYigpCit7CisgICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fZ3VkZXZDbGllbnQuZ2V0KCksIEdfU0lHTkFMX01B
VENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworfQorCit2b2lkIEdhbWVwYWRzR2xpYjo6cmVn
aXN0ZXJEZXZpY2UoU3RyaW5nIGRldmljZUZpbGUpCit7CisgICAgTE9HKEdhbWVwYWQsICJHYW1l
cGFkc0dsaWI6OnJlZ2lzdGVyRGV2aWNlICVzIiwgZGV2aWNlRmlsZS5hc2NpaSgpLmRhdGEoKSk7
CisgICAgQVNTRVJUKCFtX2RldmljZU1hcC5jb250YWlucyhkZXZpY2VGaWxlKSk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtX3Nsb3RzLnNpemUoKTsgaW5kZXgrKykg
eworICAgICAgICBpZiAoIW1fc2xvdHNbaW5kZXhdKSB7CisgICAgICAgICAgICBtX3Nsb3RzW2lu
ZGV4XSA9IHN0ZDo6bWFrZV91bmlxdWU8R2FtZXBhZERldmljZUdsaWI+KGRldmljZUZpbGUpOwor
ICAgICAgICAgICAgbV9kZXZpY2VNYXAuYWRkKGRldmljZUZpbGUsIG1fc2xvdHNbaW5kZXhdLmdl
dCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEdh
bWVwYWRzR2xpYjo6dW5yZWdpc3RlckRldmljZShTdHJpbmcgZGV2aWNlRmlsZSkKK3sKKyAgICBM
T0coR2FtZXBhZCwgIkdhbWVwYWRzR2xpYjo6dW5yZWdpc3RlckRldmljZSAlcyIsIGRldmljZUZp
bGUuYXNjaWkoKS5kYXRhKCkpOworICAgIEFTU0VSVChtX2RldmljZU1hcC5jb250YWlucyhkZXZp
Y2VGaWxlKSk7CisKKyAgICBHYW1lcGFkRGV2aWNlR2xpYiogZ2FtZXBhZERldmljZSA9IG1fZGV2
aWNlTWFwLnRha2UoZGV2aWNlRmlsZSk7CisgICAgc2l6ZV90IGluZGV4ID0gbV9zbG90cy5maW5k
KGdhbWVwYWREZXZpY2UpOworICAgIEFTU0VSVChpbmRleCAhPSBub3RGb3VuZCk7CisKKyAgICBt
X3Nsb3RzW2luZGV4XSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgR2FtZXBhZHNHbGliOjp1cGRhdGVH
YW1lcGFkTGlzdChHYW1lcGFkTGlzdCogaW50bykKK3sKKyAgICBBU1NFUlQobV9zbG90cy5zaXpl
KCkgPT0gaW50by0+bGVuZ3RoKCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
c2xvdHMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKG1fc2xvdHNbaV0uZ2V0KCkgJiYgbV9z
bG90c1tpXS0+Y29ubmVjdGVkKCkpIHsKKyAgICAgICAgICAgIEdhbWVwYWREZXZpY2VHbGliKiBn
YW1lcGFkRGV2aWNlID0gbV9zbG90c1tpXS5nZXQoKTsKKyAgICAgICAgICAgIFJlZlB0cjxHYW1l
cGFkPiBnYW1lcGFkID0gaW50by0+aXRlbShpKTsKKyAgICAgICAgICAgIGlmICghZ2FtZXBhZCkK
KyAgICAgICAgICAgICAgICBnYW1lcGFkID0gR2FtZXBhZDo6Y3JlYXRlKCk7CisKKyAgICAgICAg
ICAgIGdhbWVwYWQtPmluZGV4KGkpOworICAgICAgICAgICAgZ2FtZXBhZC0+aWQoZ2FtZXBhZERl
dmljZS0+aWQoKSk7CisgICAgICAgICAgICBnYW1lcGFkLT50aW1lc3RhbXAoZ2FtZXBhZERldmlj
ZS0+dGltZXN0YW1wKCkpOworICAgICAgICAgICAgZ2FtZXBhZC0+YXhlcyhnYW1lcGFkRGV2aWNl
LT5heGVzQ291bnQoKSwgZ2FtZXBhZERldmljZS0+YXhlc0RhdGEoKSk7CisgICAgICAgICAgICBn
YW1lcGFkLT5idXR0b25zKGdhbWVwYWREZXZpY2UtPmJ1dHRvbnNDb3VudCgpLCBnYW1lcGFkRGV2
aWNlLT5idXR0b25zRGF0YSgpKTsKKworICAgICAgICAgICAgaW50by0+c2V0KGksIGdhbWVwYWQp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGludG8tPnNldChpLCAwKTsKKyAgICB9Cit9
CisKK3ZvaWQgR2FtZXBhZHNHbGliOjpvblVFdmVudENhbGxiYWNrKEdVZGV2Q2xpZW50KiwgZ2No
YXIqIGFjdGlvbiwgR1VkZXZEZXZpY2UqIGRldmljZSwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBp
ZiAoIWlzR2FtZXBhZERldmljZShkZXZpY2UpKQorICAgICAgICByZXR1cm47CisKKyAgICBHYW1l
cGFkc0dsaWIqIGdhbWVwYWRzR2xpYiA9IHJlaW50ZXJwcmV0X2Nhc3Q8R2FtZXBhZHNHbGliKj4o
ZGF0YSk7CisgICAgU3RyaW5nIGRldmljZUZpbGUgPSBTdHJpbmc6OmZyb21VVEY4KGdfdWRldl9k
ZXZpY2VfZ2V0X2RldmljZV9maWxlKGRldmljZSkpOworCisgICAgaWYgKCFnX3N0cmNtcDAoYWN0
aW9uLCAiYWRkIikpCisgICAgICAgIGdhbWVwYWRzR2xpYi0+cmVnaXN0ZXJEZXZpY2UoZGV2aWNl
RmlsZSk7CisgICAgZWxzZSBpZiAoIWdfc3RyY21wMChhY3Rpb24sICJyZW1vdmUiKSkKKyAgICAg
ICAgZ2FtZXBhZHNHbGliLT51bnJlZ2lzdGVyRGV2aWNlKGRldmljZUZpbGUpOworfQorCitnYm9v
bGVhbiBHYW1lcGFkc0dsaWI6OmlzR2FtZXBhZERldmljZShHVWRldkRldmljZSogZGV2aWNlKQor
eworICAgIGNvbnN0IGdjaGFyKiBkZXZpY2VGaWxlID0gZ191ZGV2X2RldmljZV9nZXRfZGV2aWNl
X2ZpbGUoZGV2aWNlKTsKKyAgICBjb25zdCBnY2hhciogc3lzZnNQYXRoID0gZ191ZGV2X2Rldmlj
ZV9nZXRfc3lzZnNfcGF0aChkZXZpY2UpOworICAgIGlmICghZGV2aWNlRmlsZSB8fCAhc3lzZnNQ
YXRoKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBpZiAoIWdfdWRldl9kZXZpY2VfaGFz
X3Byb3BlcnR5KGRldmljZSwgIklEX0lOUFVUIikgfHwgIWdfdWRldl9kZXZpY2VfaGFzX3Byb3Bl
cnR5KGRldmljZSwgIklEX0lOUFVUX0pPWVNUSUNLIikpCisgICAgICAgIHJldHVybiBGQUxTRTsK
KworICAgIHJldHVybiBnX3N0cl9oYXNfcHJlZml4KGRldmljZUZpbGUsICIvZGV2L2lucHV0L2pz
Iik7Cit9CisKK3ZvaWQgc2FtcGxlR2FtZXBhZHMoR2FtZXBhZExpc3QqIGludG8pCit7CisgICAg
REVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEdhbWVwYWRzR2xpYiwgZ2FtZXBhZHNHbGli
LCAoaW50by0+bGVuZ3RoKCkpKTsKKyAgICBnYW1lcGFkc0dsaWIudXBkYXRlR2FtZXBhZExpc3Qo
aW50byk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShH
QU1FUEFEX0RFUFJFQ0FURUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
YW1lcGFkL2xpbnV4L0dhbWVwYWREZXZpY2VMaW51eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9nYW1lcGFkL2xpbnV4L0dhbWVwYWREZXZpY2VMaW51eC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzUx
NzU0ZDU0ZTFjMWYxZmY0NjRmNzAxMTVmNjk3NDNjZWFiOTRhZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbGludXgvR2FtZXBhZERldmljZUxpbnV4
LmNwcApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFphbiBEb2Jl
cnNlayA8emFuZG9iZXJzZWtAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisg
KiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisg
KiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiR2FtZXBhZERldmljZUxpbnV4LmgiCisKKyNpZiBFTkFCTEUoR0FNRVBB
RF9ERVBSRUNBVEVEKQorCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwu
aD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworR2FtZXBhZERldmljZUxpbnV4OjpHYW1lcGFkRGV2aWNl
TGludXgoU3RyaW5nIGRldmljZUZpbGUpCisgICAgOiBtX2ZpbGVEZXNjcmlwdG9yKC0xKQorICAg
ICwgbV9jb25uZWN0ZWQoZmFsc2UpCisgICAgLCBtX2xhc3RUaW1lc3RhbXAoMCkKK3sKKyAgICAv
LyBGSVhNRTogTG9nIGVycm9ycyB3aGVuIHJldHVybmluZyBlYXJseS4KKyAgICBtX2ZpbGVEZXNj
cmlwdG9yID0gb3BlbihkZXZpY2VGaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZIHwgT19OT05C
TE9DSyk7CisgICAgaWYgKG1fZmlsZURlc2NyaXB0b3IgPT0gLTEpCisgICAgICAgIHJldHVybjsK
KworICAgIGNoYXIgZGV2aWNlTmFtZVsxMDI0XTsKKyAgICBpZiAoaW9jdGwobV9maWxlRGVzY3Jp
cHRvciwgSlNJT0NHTkFNRShzaXplb2YoZGV2aWNlTmFtZSkpLCBkZXZpY2VOYW1lKSA8IDApCisg
ICAgICAgIHJldHVybjsKKyAgICBtX2RldmljZU5hbWUgPSBTdHJpbmcoZGV2aWNlTmFtZSkuc2lt
cGxpZnlXaGl0ZVNwYWNlKCk7CisKKyAgICB1aW50OF90IG51bWJlck9mQXhlczsKKyAgICB1aW50
OF90IG51bWJlck9mQnV0dG9uczsKKyAgICBpZiAoaW9jdGwobV9maWxlRGVzY3JpcHRvciwgSlNJ
T0NHQVhFUywgJm51bWJlck9mQXhlcykgPCAwIHx8IGlvY3RsKG1fZmlsZURlc2NyaXB0b3IsIEpT
SU9DR0JVVFRPTlMsICZudW1iZXJPZkJ1dHRvbnMpIDwgMCkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fYXhlcy5maWxsKDAuMCwgbnVtYmVyT2ZBeGVzKTsKKyAgICBtX2J1dHRvbnMuZmlsbCgwLjAs
IG51bWJlck9mQnV0dG9ucyk7Cit9CisKK0dhbWVwYWREZXZpY2VMaW51eDo6fkdhbWVwYWREZXZp
Y2VMaW51eCgpCit7CisgICAgaWYgKG1fZmlsZURlc2NyaXB0b3IgIT0gLTEpCisgICAgICAgIGNs
b3NlKG1fZmlsZURlc2NyaXB0b3IpOworfQorCit2b2lkIEdhbWVwYWREZXZpY2VMaW51eDo6dXBk
YXRlRm9yRXZlbnQoc3RydWN0IGpzX2V2ZW50IGV2ZW50KQoreworICAgIGlmICghKGV2ZW50LnR5
cGUgJiBKU19FVkVOVF9BWElTIHx8IGV2ZW50LnR5cGUgJiBKU19FVkVOVF9CVVRUT04pKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBNYXJrIHRoZSBkZXZpY2UgYXMgY29ubmVjdGVkIG9ubHkg
aWYgaXQgaXMgbm90IHlldCBjb25uZWN0ZWQsIHRoZSBldmVudCBpcyBub3QgYW4gaW5pdGlhbGl6
YXRpb24KKyAgICAvLyBhbmQgdGhlIHZhbHVlIGlzIG5vdCAwIChpbmRpY2F0aW5nIGEgZ2VudWlu
ZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBkZXZpY2UpLgorICAgIGlmICghbV9jb25uZWN0ZWQgJiYg
IShldmVudC50eXBlICYgSlNfRVZFTlRfSU5JVCkgJiYgZXZlbnQudmFsdWUpCisgICAgICAgIG1f
Y29ubmVjdGVkID0gdHJ1ZTsKKworICAgIGlmIChldmVudC50eXBlICYgSlNfRVZFTlRfQVhJUykK
KyAgICAgICAgbV9heGVzW2V2ZW50Lm51bWJlcl0gPSBub3JtYWxpemVBeGlzVmFsdWUoZXZlbnQu
dmFsdWUpOworICAgIGVsc2UgaWYgKGV2ZW50LnR5cGUgJiBKU19FVkVOVF9CVVRUT04pCisgICAg
ICAgIG1fYnV0dG9uc1tldmVudC5udW1iZXJdID0gbm9ybWFsaXplQnV0dG9uVmFsdWUoZXZlbnQu
dmFsdWUpOworCisgICAgbV9sYXN0VGltZXN0YW1wID0gZXZlbnQudGltZTsKK30KKworZmxvYXQg
R2FtZXBhZERldmljZUxpbnV4Ojpub3JtYWxpemVBeGlzVmFsdWUoc2hvcnQgdmFsdWUpCit7Cisg
ICAgLy8gTm9ybWFsaXplIGZyb20gcmFuZ2UgWy0zMjc2NywgMzI3NjddIGludG8gcmFuZ2UgWy0x
LjAsIDEuMF0KKyAgICByZXR1cm4gdmFsdWUgLyAzMjc2Ny4wZjsKK30KKworZmxvYXQgR2FtZXBh
ZERldmljZUxpbnV4Ojpub3JtYWxpemVCdXR0b25WYWx1ZShzaG9ydCB2YWx1ZSkKK3sKKyAgICAv
LyBOb3JtYWxpemUgZnJvbSByYW5nZSBbMCwgMV0gaW50byByYW5nZSBbMC4wLCAxLjBdCisgICAg
cmV0dXJuIHZhbHVlIC8gMS4wZjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKEdBTUVQQURfREVQUkVDQVRFRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dhbWVwYWQvbGludXgvR2FtZXBhZERldmljZUxpbnV4LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL2xpbnV4L0dhbWVwYWREZXZpY2VMaW51eC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjk5YzA5YjI3ZjU0YzlkOWQ5ZmMwYTJiNDgzYTRlMDZhMWIyNmEyNjUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL2xpbnV4L0dhbWVwYWRE
ZXZpY2VMaW51eC5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
WmFuIERvYmVyc2VrIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAq
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKKyAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICovCisKKyNpZm5kZWYg
R2FtZXBhZERldmljZUxpbnV4X2gKKyNkZWZpbmUgR2FtZXBhZERldmljZUxpbnV4X2gKKworI2lm
IEVOQUJMRShHQU1FUEFEX0RFUFJFQ0FURUQpCisKKyNpbmNsdWRlIDxsaW51eC9qb3lzdGljay5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHYW1lcGFkRGV2aWNlTGludXggewor
cHVibGljOgorICAgIGJvb2wgY29ubmVjdGVkKCkgeyByZXR1cm4gbV9jb25uZWN0ZWQ7IH07CisK
KyAgICBTdHJpbmcgaWQoKSB7IHJldHVybiBtX2RldmljZU5hbWU7IH0KKyAgICB1bnNpZ25lZCBs
b25nIGxvbmcgdGltZXN0YW1wKCkgeyByZXR1cm4gbV9sYXN0VGltZXN0YW1wOyB9CisKKyAgICB1
bnNpZ25lZCBheGVzQ291bnQoKSB7IHJldHVybiBtX2F4ZXMuc2l6ZSgpOyB9CisgICAgZmxvYXQq
IGF4ZXNEYXRhKCkgeyByZXR1cm4gbV9heGVzLmRhdGEoKTsgfQorCisgICAgdW5zaWduZWQgYnV0
dG9uc0NvdW50KCkgeyByZXR1cm4gbV9idXR0b25zLnNpemUoKTsgfQorICAgIGZsb2F0KiBidXR0
b25zRGF0YSgpIHsgcmV0dXJuIG1fYnV0dG9ucy5kYXRhKCk7IH0KKworcHJvdGVjdGVkOgorICAg
IEdhbWVwYWREZXZpY2VMaW51eChTdHJpbmcgZGV2aWNlRmlsZSk7CisgICAgfkdhbWVwYWREZXZp
Y2VMaW51eCgpOworCisgICAgdm9pZCB1cGRhdGVGb3JFdmVudChzdHJ1Y3QganNfZXZlbnQpOwor
ICAgIGludCBtX2ZpbGVEZXNjcmlwdG9yOworCitwcml2YXRlOgorICAgIGZsb2F0IG5vcm1hbGl6
ZUF4aXNWYWx1ZShzaG9ydCB2YWx1ZSk7CisgICAgZmxvYXQgbm9ybWFsaXplQnV0dG9uVmFsdWUo
c2hvcnQgdmFsdWUpOworCisgICAgYm9vbCBtX2Nvbm5lY3RlZDsKKyAgICBTdHJpbmcgbV9kZXZp
Y2VOYW1lOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtX2xhc3RUaW1lc3RhbXA7CisKKyAgICBW
ZWN0b3I8ZmxvYXQ+IG1fYXhlczsKKyAgICBWZWN0b3I8ZmxvYXQ+IG1fYnV0dG9uczsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEX0RFUFJF
Q0FURUQpCisKKyNlbmRpZiAvLyBHYW1lcGFkRGV2aWNlTGludXhfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvSElER2FtZXBhZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9ISURHYW1lcGFkLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
N2MxOGUzZTYzNGI1OWViMGJhMDJlMWVlMThhZGZkNWU1ZDdkYmZjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvSElER2FtZXBhZC5jcHAKQEAg
LTAsMCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSElER2FtZXBhZC5oIgorCisjaWYgRU5BQkxFKEdBTUVQQUQpCisKKyNpbmNsdWRlIDxJT0tp
dC9oaWQvSU9ISURFbGVtZW50Lmg+CisjaW5jbHVkZSA8SU9LaXQvaGlkL0lPSElEVXNhZ2VUYWJs
ZXMuaD4KKyNpbmNsdWRlIDxJT0tpdC9oaWQvSU9ISURWYWx1ZS5oPgorI2luY2x1ZGUgPHd0Zi9D
dXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitISURHYW1lcGFk
OjpISURHYW1lcGFkKElPSElERGV2aWNlUmVmIGhpZERldmljZSwgdW5zaWduZWQgaW5kZXgpCisg
ICAgOiBQbGF0Zm9ybUdhbWVwYWQoaW5kZXgpCisgICAgLCBtX2hpZERldmljZShoaWREZXZpY2Up
Cit7CisgICAgbV9jb25uZWN0VGltZSA9IG1fbGFzdFVwZGF0ZVRpbWUgPSBtb25vdG9uaWNhbGx5
SW5jcmVhc2luZ1RpbWUoKTsKKworICAgIENGTnVtYmVyUmVmIGNmVmVuZG9ySUQgPSAoQ0ZOdW1i
ZXJSZWYpSU9ISUREZXZpY2VHZXRQcm9wZXJ0eShoaWREZXZpY2UsIENGU1RSKGtJT0hJRFZlbmRv
cklES2V5KSk7CisgICAgQ0ZOdW1iZXJSZWYgY2ZQcm9kdWN0SUQgPSAoQ0ZOdW1iZXJSZWYpSU9I
SUREZXZpY2VHZXRQcm9wZXJ0eShoaWREZXZpY2UsIENGU1RSKGtJT0hJRFByb2R1Y3RJREtleSkp
OworCisgICAgaW50IHZlbmRvcklELCBwcm9kdWN0SUQ7CisgICAgQ0ZOdW1iZXJHZXRWYWx1ZShj
ZlZlbmRvcklELCBrQ0ZOdW1iZXJJbnRUeXBlLCAmdmVuZG9ySUQpOworICAgIENGTnVtYmVyR2V0
VmFsdWUoY2ZQcm9kdWN0SUQsIGtDRk51bWJlckludFR5cGUsICZwcm9kdWN0SUQpOworCisgICAg
Q0ZTdHJpbmdSZWYgY2ZQcm9kdWN0TmFtZSA9IChDRlN0cmluZ1JlZilJT0hJRERldmljZUdldFBy
b3BlcnR5KGhpZERldmljZSwgQ0ZTVFIoa0lPSElEUHJvZHVjdEtleSkpOworICAgIFN0cmluZyBw
cm9kdWN0TmFtZShjZlByb2R1Y3ROYW1lKTsKKworICAgIC8vIEN1cnJlbnRseSB0aGUgc3BlYyBo
YXMgbm8gZm9ybWF0dGluZyBmb3IgdGhlIGlkIHN0cmluZy4KKyAgICAvLyBUaGlzIHN0cmluZyBm
b3JtYXR0aW5nIG1hdGNoZXMgRmlyZWZveC4KKyAgICBtX2lkID0gU3RyaW5nOjpmb3JtYXQoIiV4
LSV4LSVzIiwgdmVuZG9ySUQsIHByb2R1Y3RJRCwgcHJvZHVjdE5hbWUudXRmOCgpLmRhdGEoKSk7
CisKKyAgICBpbml0RWxlbWVudHMoKTsKK30KKwordm9pZCBISURHYW1lcGFkOjpnZXRDdXJyZW50
VmFsdWVGb3JFbGVtZW50KGNvbnN0IEhJREdhbWVwYWRFbGVtZW50JiBnYW1lcGFkRWxlbWVudCkK
K3sKKyAgICBJT0hJREVsZW1lbnRSZWYgZWxlbWVudCA9IGdhbWVwYWRFbGVtZW50LmlvaGlkRWxl
bWVudC5nZXQoKTsKKyAgICBJT0hJRFZhbHVlUmVmIHZhbHVlOworICAgIGlmIChJT0hJRERldmlj
ZUdldFZhbHVlKElPSElERWxlbWVudEdldERldmljZShlbGVtZW50KSwgZWxlbWVudCwgJnZhbHVl
KSA9PSBrSU9SZXR1cm5TdWNjZXNzKQorICAgICAgICB2YWx1ZUNoYW5nZWQodmFsdWUpOworfQor
Cit2b2lkIEhJREdhbWVwYWQ6OmluaXRFbGVtZW50cygpCit7CisgICAgUmV0YWluUHRyPENGQXJy
YXlSZWY+IGVsZW1lbnRzID0gYWRvcHRDRihJT0hJRERldmljZUNvcHlNYXRjaGluZ0VsZW1lbnRz
KG1faGlkRGV2aWNlLmdldCgpLCBOVUxMLCBrSU9ISURPcHRpb25zVHlwZU5vbmUpKTsKKyAgICBp
bml0RWxlbWVudHNGcm9tQXJyYXkoZWxlbWVudHMuZ2V0KCkpOworCisgICAgLy8gQnV0dG9ucyBh
cmUgc3BlY2lmaWVkIHRvIGFwcGVhciBoaWdoZXN0IHByaW9yaXR5IGZpcnN0IGluIHRoZSBhcnJh
eS4KKyAgICBzdGQ6OnNvcnQobV9idXR0b25zLmJlZ2luKCksIG1fYnV0dG9ucy5lbmQoKSwgW10o
YXV0byYgYSwgYXV0byYgYikgeworICAgICAgICByZXR1cm4gYS0+cHJpb3JpdHkgPCBiLT5wcmlv
cml0eTsKKyAgICB9KTsKKworICAgIG1fYXhpc1ZhbHVlcy5yZXNpemUobV9heGVzLnNpemUoKSk7
CisgICAgbV9idXR0b25WYWx1ZXMucmVzaXplKG1fYnV0dG9ucy5zaXplKCkpOworCisgICAgZm9y
IChhdXRvJiBidXR0b24gOiBtX2J1dHRvbnMpCisgICAgICAgIGdldEN1cnJlbnRWYWx1ZUZvckVs
ZW1lbnQoKmJ1dHRvbik7CisKKyAgICBmb3IgKGF1dG8mIGF4aXMgOiBtX2F4ZXMpCisgICAgICAg
IGdldEN1cnJlbnRWYWx1ZUZvckVsZW1lbnQoKmF4aXMpOworfQorCit2b2lkIEhJREdhbWVwYWQ6
OmluaXRFbGVtZW50c0Zyb21BcnJheShDRkFycmF5UmVmIGVsZW1lbnRzKQoreworICAgIGZvciAo
Q0ZJbmRleCBpID0gMCwgY291bnQgPSBDRkFycmF5R2V0Q291bnQoZWxlbWVudHMpOyBpIDwgY291
bnQ7ICsraSkgeworICAgICAgICBJT0hJREVsZW1lbnRSZWYgZWxlbWVudCA9IChJT0hJREVsZW1l
bnRSZWYpQ0ZBcnJheUdldFZhbHVlQXRJbmRleChlbGVtZW50cywgaSk7CisgICAgICAgIGlmIChD
RkdldFR5cGVJRChlbGVtZW50KSAhPSBJT0hJREVsZW1lbnRHZXRUeXBlSUQoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIEFzIGEgcGh5c2ljYWwgZWxlbWVudCBjYW4gYXBw
ZWFyIGluIHRoZSBkZXZpY2UgdHdpY2UgKGluIGRpZmZlcmVudCBjb2xsZWN0aW9ucykgYW5kIGNh
biBiZQorICAgICAgICAvLyByZXByZXNlbnRlZCBieSBkaWZmZXJlbnQgSU9ISURFbGVtZW50UmVm
IG9iamVjdHMsIHdlIGxvb2sgYXQgdGhlIElPSElERWxlbWVudENvb2tpZSB3aGljaAorICAgICAg
ICAvLyBpcyBtZWFudCB0byBiZSB1bmlxdWUgZm9yIGVhY2ggcGh5c2ljYWwgZWxlbWVudC4KKyAg
ICAgICAgSU9ISURFbGVtZW50Q29va2llIGNvb2tpZSA9IElPSElERWxlbWVudEdldENvb2tpZShl
bGVtZW50KTsKKyAgICAgICAgaWYgKG1fZWxlbWVudE1hcC5jb250YWlucyhjb29raWUpKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgSU9ISURFbGVtZW50VHlwZSB0eXBlID0gSU9I
SURFbGVtZW50R2V0VHlwZShlbGVtZW50KTsKKworICAgICAgICBpZiAoKHR5cGUgPT0ga0lPSElE
RWxlbWVudFR5cGVJbnB1dF9NaXNjIHx8IHR5cGUgPT0ga0lPSElERWxlbWVudFR5cGVJbnB1dF9C
dXR0b24pICYmIG1heWJlQWRkQnV0dG9uKGVsZW1lbnQpKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgaWYgKCh0eXBlID09IGtJT0hJREVsZW1lbnRUeXBlSW5wdXRfTWlzYyB8fCB0
eXBlID09IGtJT0hJREVsZW1lbnRUeXBlSW5wdXRfQXhpcykgJiYgbWF5YmVBZGRBeGlzKGVsZW1l
bnQpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHR5cGUgPT0ga0lPSElE
RWxlbWVudFR5cGVDb2xsZWN0aW9uKQorICAgICAgICAgICAgaW5pdEVsZW1lbnRzRnJvbUFycmF5
KElPSElERWxlbWVudEdldENoaWxkcmVuKGVsZW1lbnQpKTsKKyAgICB9Cit9CisKK2Jvb2wgSElE
R2FtZXBhZDo6bWF5YmVBZGRCdXR0b24oSU9ISURFbGVtZW50UmVmIGVsZW1lbnQpCit7CisgICAg
dWludDMyX3QgdXNhZ2VQYWdlID0gSU9ISURFbGVtZW50R2V0VXNhZ2VQYWdlKGVsZW1lbnQpOwor
ICAgIGlmICh1c2FnZVBhZ2UgIT0ga0hJRFBhZ2VfQnV0dG9uKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICB1aW50MzJfdCB1c2FnZSA9IElPSElERWxlbWVudEdldFVzYWdlKGVsZW1lbnQp
OworICAgIGlmICghdXNhZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENGSW5kZXgg
bWluID0gSU9ISURFbGVtZW50R2V0TG9naWNhbE1pbihlbGVtZW50KTsKKyAgICBDRkluZGV4IG1h
eCA9IElPSElERWxlbWVudEdldExvZ2ljYWxNYXgoZWxlbWVudCk7CisKKyAgICBtX2J1dHRvbnMu
YXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8SElER2FtZXBhZEJ1dHRvbj4odXNhZ2UsIG1pbiwgbWF4
LCBlbGVtZW50KSk7CisKKyAgICBJT0hJREVsZW1lbnRDb29raWUgY29va2llID0gSU9ISURFbGVt
ZW50R2V0Q29va2llKGVsZW1lbnQpOworICAgIG1fZWxlbWVudE1hcC5zZXQoY29va2llLCBtX2J1
dHRvbnMubGFzdCgpLmdldCgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEhJREdh
bWVwYWQ6Om1heWJlQWRkQXhpcyhJT0hJREVsZW1lbnRSZWYgZWxlbWVudCkKK3sKKyAgICB1aW50
MzJfdCB1c2FnZVBhZ2UgPSBJT0hJREVsZW1lbnRHZXRVc2FnZVBhZ2UoZWxlbWVudCk7CisgICAg
aWYgKHVzYWdlUGFnZSAhPSBrSElEUGFnZV9HZW5lcmljRGVza3RvcCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgdWludDMyX3QgdXNhZ2UgPSBJT0hJREVsZW1lbnRHZXRVc2FnZShlbGVt
ZW50KTsKKyAgICAvLyBUaGlzIHJhbmdlIGNvdmVycyB0aGUgc3RhbmRhcmQgYXhpcyB1c2FnZXMu
CisgICAgaWYgKHVzYWdlIDwga0hJRFVzYWdlX0dEX1ggfHwgdXNhZ2UgPiBrSElEVXNhZ2VfR0Rf
UnopCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENGSW5kZXggbWluID0gSU9ISURFbGVt
ZW50R2V0UGh5c2ljYWxNaW4oZWxlbWVudCk7CisgICAgQ0ZJbmRleCBtYXggPSBJT0hJREVsZW1l
bnRHZXRQaHlzaWNhbE1heChlbGVtZW50KTsKKworICAgIG1fYXhlcy5hcHBlbmQoc3RkOjptYWtl
X3VuaXF1ZTxISURHYW1lcGFkQXhpcz4obWluLCBtYXgsIGVsZW1lbnQpKTsKKworICAgIElPSElE
RWxlbWVudENvb2tpZSBjb29raWUgPSBJT0hJREVsZW1lbnRHZXRDb29raWUoZWxlbWVudCk7Cisg
ICAgbV9lbGVtZW50TWFwLnNldChjb29raWUsIG1fYXhlcy5sYXN0KCkuZ2V0KCkpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSElER2FtZXBhZDo6dmFsdWVDaGFuZ2VkKElPSElEVmFs
dWVSZWYgdmFsdWUpCit7CisgICAgSU9ISURFbGVtZW50Q29va2llIGNvb2tpZSA9IElPSElERWxl
bWVudEdldENvb2tpZShJT0hJRFZhbHVlR2V0RWxlbWVudCh2YWx1ZSkpOworICAgIEhJREdhbWVw
YWRFbGVtZW50KiBlbGVtZW50ID0gbV9lbGVtZW50TWFwLmdldChjb29raWUpOworCisgICAgLy8g
VGhpcyBtaWdodCBiZSBhbiBlbGVtZW50IHdlIGRvbid0IGN1cnJlbnRseSBoYW5kbGUgYXMgaW5w
dXQgc28gd2UgY2FuIHNraXAgaXQuCisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBlbGVtZW50LT5yYXdWYWx1ZSA9IElPSElEVmFsdWVHZXRTY2FsZWRWYWx1ZSh2YWx1
ZSwga0lPSElEVmFsdWVTY2FsZVR5cGVQaHlzaWNhbCk7CisKKyAgICBpZiAoZWxlbWVudC0+aXNC
dXR0b24oKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9idXR0b25zLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAobV9idXR0b25zW2ldLmdldCgpID09IGVsZW1l
bnQpCisgICAgICAgICAgICAgICAgbV9idXR0b25WYWx1ZXNbaV0gPSBlbGVtZW50LT5ub3JtYWxp
emVkVmFsdWUoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aXNBeGlzKCkp
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXhlcy5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgaWYgKG1fYXhlc1tpXS5nZXQoKSA9PSBlbGVtZW50KQorICAgICAgICAg
ICAgICAgIG1fYXhpc1ZhbHVlc1tpXSA9IGVsZW1lbnQtPm5vcm1hbGl6ZWRWYWx1ZSgpOworICAg
ICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAg
bV9sYXN0VXBkYXRlVGltZSA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL0hJREdhbWVwYWQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQvbWFjL0hJREdhbWVwYWQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zM2FmZWIzMjY3ZDA0Mjg4N2VkNWUwZmRmOTk5MWI5Yzc1MGE0YzhlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvSElER2FtZXBhZC5o
CkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoR0FNRVBBRCkKKworI2luY2x1ZGUgIlBsYXRmb3JtR2FtZXBhZC5oIgorI2luY2x1ZGUgPElP
S2l0L2hpZC9JT0hJRERldmljZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBISURH
YW1lcGFkRWxlbWVudCB7CisgICAgSElER2FtZXBhZEVsZW1lbnQoZG91YmxlIHRoZU1pbiwgZG91
YmxlIHRoZU1heCwgSU9ISURFbGVtZW50UmVmIGVsZW1lbnQpCisgICAgICAgIDogbWluKHRoZU1p
bikKKyAgICAgICAgLCBtYXgodGhlTWF4KQorICAgICAgICAsIHJhd1ZhbHVlKHRoZU1pbikKKyAg
ICAgICAgLCBpb2hpZEVsZW1lbnQoZWxlbWVudCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZp
cnR1YWwgfkhJREdhbWVwYWRFbGVtZW50KCkKKyAgICB7CisgICAgfQorCisgICAgZG91YmxlIG1p
bjsKKyAgICBkb3VibGUgbWF4OworICAgIGRvdWJsZSByYXdWYWx1ZTsKKyAgICBSZXRhaW5QdHI8
SU9ISURFbGVtZW50UmVmPiBpb2hpZEVsZW1lbnQ7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNCdXR0
b24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0F4aXMoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCBkb3VibGUgbm9ybWFsaXplZFZh
bHVlKCkgPSAwOworfTsKKworc3RydWN0IEhJREdhbWVwYWRCdXR0b24gOiBISURHYW1lcGFkRWxl
bWVudCB7CisgICAgSElER2FtZXBhZEJ1dHRvbih1aW50MzJfdCB0aGVQcmlvcml0eSwgZG91Ymxl
IG1pbiwgZG91YmxlIG1heCwgSU9ISURFbGVtZW50UmVmIGVsZW1lbnQpCisgICAgICAgIDogSElE
R2FtZXBhZEVsZW1lbnQobWluLCBtYXgsIGVsZW1lbnQpCisgICAgICAgICwgcHJpb3JpdHkodGhl
UHJpb3JpdHkpCisgICAgeworICAgIH0KKworICAgIHVpbnQzMl90IHByaW9yaXR5OworCisgICAg
Ym9vbCBpc0J1dHRvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIC8v
IEJ1dHRvbnMgbm9ybWFsaXplIHRvIHRoZSByYW5nZSAoMC4wKSAtICgxLjApCisgICAgZG91Ymxl
IG5vcm1hbGl6ZWRWYWx1ZSgpIG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gKHJhd1Zh
bHVlIC0gbWluKSAvIChtYXggLSBtaW4pOworICAgIH0KK307CisKK3N0cnVjdCBISURHYW1lcGFk
QXhpcyA6IEhJREdhbWVwYWRFbGVtZW50IHsKKyAgICBISURHYW1lcGFkQXhpcyhkb3VibGUgbWlu
LCBkb3VibGUgbWF4LCBJT0hJREVsZW1lbnRSZWYgZWxlbWVudCkKKyAgICAgICAgOiBISURHYW1l
cGFkRWxlbWVudChtaW4sIG1heCwgZWxlbWVudCkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBp
c0F4aXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBBeGVzIG5v
cm1hbGl6ZSB0byB0aGUgcmFuZ2UgKC0xLjApIC0gKDEuMCkKKyAgICBkb3VibGUgbm9ybWFsaXpl
ZFZhbHVlKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiAoKChyYXdWYWx1ZSAtIG1p
bikgLyAobWF4IC0gbWluKSkgKiAyKSAtIDE7CisgICAgfQorfTsKKworY2xhc3MgSElER2FtZXBh
ZCA6IHB1YmxpYyBQbGF0Zm9ybUdhbWVwYWQgeworcHVibGljOgorICAgIEhJREdhbWVwYWQoSU9I
SUREZXZpY2VSZWYsIHVuc2lnbmVkIGluZGV4KTsKKworICAgIElPSElERGV2aWNlUmVmIGhpZERl
dmljZSgpIGNvbnN0IHsgcmV0dXJuIG1faGlkRGV2aWNlLmdldCgpOyB9CisKKyAgICB2b2lkIHZh
bHVlQ2hhbmdlZChJT0hJRFZhbHVlUmVmKTsKKworICAgIGNvbnN0IFZlY3Rvcjxkb3VibGU+JiBh
eGlzVmFsdWVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9heGlzVmFsdWVzOyB9CisgICAgY29u
c3QgVmVjdG9yPGRvdWJsZT4mIGJ1dHRvblZhbHVlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
YnV0dG9uVmFsdWVzOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0RWxlbWVudHMoKTsKKyAg
ICB2b2lkIGluaXRFbGVtZW50c0Zyb21BcnJheShDRkFycmF5UmVmKTsKKworICAgIGJvb2wgbWF5
YmVBZGRCdXR0b24oSU9ISURFbGVtZW50UmVmKTsKKyAgICBib29sIG1heWJlQWRkQXhpcyhJT0hJ
REVsZW1lbnRSZWYpOworCisgICAgdm9pZCBnZXRDdXJyZW50VmFsdWVGb3JFbGVtZW50KGNvbnN0
IEhJREdhbWVwYWRFbGVtZW50Jik7CisKKyAgICBSZXRhaW5QdHI8SU9ISUREZXZpY2VSZWY+IG1f
aGlkRGV2aWNlOworCisgICAgSGFzaE1hcDxJT0hJREVsZW1lbnRDb29raWUsIEhJREdhbWVwYWRF
bGVtZW50Kj4gbV9lbGVtZW50TWFwOworCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxISURH
YW1lcGFkQnV0dG9uPj4gbV9idXR0b25zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8SElE
R2FtZXBhZEF4aXM+PiBtX2F4ZXM7CisgICAgVmVjdG9yPGRvdWJsZT4gbV9idXR0b25WYWx1ZXM7
CisgICAgVmVjdG9yPGRvdWJsZT4gbV9heGlzVmFsdWVzOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21hYy9ISURHYW1lcGFkUHJvdmlkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvSElER2FtZXBhZFByb3ZpZGVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42ZjQ0MWU2ZmFiZjZiN2IwOWE3NjRiNjYyM2JiMmM0MzQ4NmEwY2Q1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ2FtZXBhZC9tYWMvSElER2Ft
ZXBhZFByb3ZpZGVyLmNwcApAQCAtMCwwICsxLDI1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJISURHYW1lcGFkUHJvdmlkZXIuaCIKKworI2lmIEVOQUJM
RShHQU1FUEFEKQorCisjaW5jbHVkZSAiR2FtZXBhZFByb3ZpZGVyQ2xpZW50LmgiCisjaW5jbHVk
ZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtR2FtZXBhZC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBkb3VibGUgQ29ubmVjdGlvbkRlbGF5SW50ZXJ2YWwg
PSAwLjU7CitzdGF0aWMgY29uc3QgZG91YmxlIElucHV0Tm90aWZpY2F0aW9uRGVsYXkgPSAwLjA1
OworCitzdGF0aWMgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gZGV2aWNlTWF0Y2hpbmdEaWN0
aW9uYXJ5KHVpbnQzMl90IHVzYWdlUGFnZSwgdWludDMyX3QgdXNhZ2UpCit7CisgICAgQVNTRVJU
KHVzYWdlUGFnZSk7CisgICAgQVNTRVJUKHVzYWdlKTsKKworICAgIFJldGFpblB0cjxDRk51bWJl
clJlZj4gcGFnZU51bWJlciA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVm
YXVsdCwga0NGTnVtYmVySW50VHlwZSwgJnVzYWdlUGFnZSkpOworICAgIFJldGFpblB0cjxDRk51
bWJlclJlZj4gdXNhZ2VOdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZ1c2FnZSkpOworCisgICAgQ0ZTdHJpbmdSZWYg
a2V5c1tdID0geyBDRlNUUihrSU9ISUREZXZpY2VVc2FnZVBhZ2VLZXkpLCBDRlNUUihrSU9ISURE
ZXZpY2VVc2FnZUtleSkgfTsKKyAgICBDRk51bWJlclJlZiB2YWx1ZXNbXSA9IHsgcGFnZU51bWJl
ci5nZXQoKSwgdXNhZ2VOdW1iZXIuZ2V0KCkgfTsKKworICAgIHJldHVybiBhZG9wdENGKENGRGlj
dGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoY29uc3Qgdm9pZCoqKWtleXMsIChj
b25zdCB2b2lkKiopdmFsdWVzLCAyLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZr
Q0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRldmlj
ZUFkZGVkQ2FsbGJhY2sodm9pZCogY29udGV4dCwgSU9SZXR1cm4sIHZvaWQqLCBJT0hJRERldmlj
ZVJlZiBkZXZpY2UpCit7CisgICAgSElER2FtZXBhZFByb3ZpZGVyKiBsaXN0ZW5lciA9IHN0YXRp
Y19jYXN0PEhJREdhbWVwYWRQcm92aWRlcio+KGNvbnRleHQpOworICAgIGxpc3RlbmVyLT5kZXZp
Y2VBZGRlZChkZXZpY2UpOworfQorCitzdGF0aWMgdm9pZCBkZXZpY2VSZW1vdmVkQ2FsbGJhY2so
dm9pZCogY29udGV4dCwgSU9SZXR1cm4sIHZvaWQqLCBJT0hJRERldmljZVJlZiBkZXZpY2UpCit7
CisgICAgSElER2FtZXBhZFByb3ZpZGVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PEhJREdhbWVw
YWRQcm92aWRlcio+KGNvbnRleHQpOworICAgIGxpc3RlbmVyLT5kZXZpY2VSZW1vdmVkKGRldmlj
ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRldmljZVZhbHVlc0NoYW5nZWRDYWxsYmFjayh2b2lkKiBj
b250ZXh0LCBJT1JldHVybiByZXN1bHQsIHZvaWQqLCBJT0hJRFZhbHVlUmVmIHZhbHVlKQorewor
ICAgIC8vIEEgbm9uLXplcm8gcmVzdWx0IHZhbHVlIGluZGljYXRlcyBhbiBlcnJvciB0aGF0IHdl
IGNhbiBkbyBub3RoaW5nIGFib3V0IGZvciBpbnB1dCB2YWx1ZXMuCisgICAgaWYgKHJlc3VsdCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgSElER2FtZXBhZFByb3ZpZGVyKiBsaXN0ZW5lciA9IHN0
YXRpY19jYXN0PEhJREdhbWVwYWRQcm92aWRlcio+KGNvbnRleHQpOworICAgIGxpc3RlbmVyLT52
YWx1ZXNDaGFuZ2VkKHZhbHVlKTsKK30KKworSElER2FtZXBhZFByb3ZpZGVyJiBISURHYW1lcGFk
UHJvdmlkZXI6OnNpbmdsZXRvbigpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhJREdh
bWVwYWRQcm92aWRlcj4gc2hhcmVkTGlzdGVuZXI7CisgICAgcmV0dXJuIHNoYXJlZExpc3RlbmVy
OworfQorCitISURHYW1lcGFkUHJvdmlkZXI6OkhJREdhbWVwYWRQcm92aWRlcigpCisgICAgOiBt
X3Nob3VsZERpc3BhdGNoQ2FsbGJhY2tzKGZhbHNlKQorICAgICwgbV9jb25uZWN0aW9uRGVsYXlU
aW1lcigqdGhpcywgJkhJREdhbWVwYWRQcm92aWRlcjo6Y29ubmVjdGlvbkRlbGF5VGltZXJGaXJl
ZCkKKyAgICAsIG1faW5wdXROb3RpZmljYXRpb25UaW1lcigqdGhpcywgJkhJREdhbWVwYWRQcm92
aWRlcjo6aW5wdXROb3RpZmljYXRpb25UaW1lckZpcmVkKQoreworICAgIG1fbWFuYWdlciA9IGFk
b3B0Q0YoSU9ISURNYW5hZ2VyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtJT0hJRE9wdGlv
bnNUeXBlTm9uZSkpOworCisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gam95c3RpY2tE
aWN0aW9uYXJ5ID0gZGV2aWNlTWF0Y2hpbmdEaWN0aW9uYXJ5KGtISURQYWdlX0dlbmVyaWNEZXNr
dG9wLCBrSElEVXNhZ2VfR0RfSm95c3RpY2spOworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlS
ZWY+IGdhbWVwYWREaWN0aW9uYXJ5ID0gZGV2aWNlTWF0Y2hpbmdEaWN0aW9uYXJ5KGtISURQYWdl
X0dlbmVyaWNEZXNrdG9wLCBrSElEVXNhZ2VfR0RfR2FtZVBhZCk7CisKKyAgICBDRkRpY3Rpb25h
cnlSZWYgZGV2aWNlc1tdID0geyBqb3lzdGlja0RpY3Rpb25hcnkuZ2V0KCksIGdhbWVwYWREaWN0
aW9uYXJ5LmdldCgpIH07CisKKyAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gbWF0Y2hpbmdBcnJh
eSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoY29uc3Qgdm9p
ZCoqKWRldmljZXMsIDIsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKKworICAgIElPSElETWFu
YWdlclNldERldmljZU1hdGNoaW5nTXVsdGlwbGUobV9tYW5hZ2VyLmdldCgpLCBtYXRjaGluZ0Fy
cmF5LmdldCgpKTsKKyAgICBJT0hJRE1hbmFnZXJSZWdpc3RlckRldmljZU1hdGNoaW5nQ2FsbGJh
Y2sobV9tYW5hZ2VyLmdldCgpLCBkZXZpY2VBZGRlZENhbGxiYWNrLCB0aGlzKTsKKyAgICBJT0hJ
RE1hbmFnZXJSZWdpc3RlckRldmljZVJlbW92YWxDYWxsYmFjayhtX21hbmFnZXIuZ2V0KCksIGRl
dmljZVJlbW92ZWRDYWxsYmFjaywgdGhpcyk7CisgICAgSU9ISURNYW5hZ2VyUmVnaXN0ZXJJbnB1
dFZhbHVlQ2FsbGJhY2sobV9tYW5hZ2VyLmdldCgpLCBkZXZpY2VWYWx1ZXNDaGFuZ2VkQ2FsbGJh
Y2ssIHRoaXMpOworfQorCit1bnNpZ25lZCBISURHYW1lcGFkUHJvdmlkZXI6OmluZGV4Rm9yTmV3
bHlDb25uZWN0ZWREZXZpY2UoKQoreworICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICB3aGls
ZSAoaW5kZXggPCBtX2dhbWVwYWRWZWN0b3Iuc2l6ZSgpICYmIG1fZ2FtZXBhZFZlY3RvcltpbmRl
eF0pCisgICAgICAgICsraW5kZXg7CisKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK3ZvaWQgSElE
R2FtZXBhZFByb3ZpZGVyOjpjb25uZWN0aW9uRGVsYXlUaW1lckZpcmVkKCkKK3sKKyAgICBtX3No
b3VsZERpc3BhdGNoQ2FsbGJhY2tzID0gdHJ1ZTsKK30KKwordm9pZCBISURHYW1lcGFkUHJvdmlk
ZXI6Om9wZW5BbmRTY2hlZHVsZU1hbmFnZXIoKQoreworICAgIExPRyhHYW1lcGFkLCAiSElER2Ft
ZXBhZFByb3ZpZGVyIG9wZW5pbmcvc2NoZWR1bGluZyBISUQgbWFuYWdlciIpOworCisgICAgQVNT
RVJUKG1fZ2FtZXBhZFZlY3Rvci5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX2dhbWVwYWRNYXAu
aXNFbXB0eSgpKTsKKworICAgIG1fc2hvdWxkRGlzcGF0Y2hDYWxsYmFja3MgPSBmYWxzZTsKKwor
ICAgIElPSElETWFuYWdlclNjaGVkdWxlV2l0aFJ1bkxvb3AobV9tYW5hZ2VyLmdldCgpLCBDRlJ1
bkxvb3BHZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CisgICAgSU9ISURNYW5h
Z2VyT3BlbihtX21hbmFnZXIuZ2V0KCksIGtJT0hJRE9wdGlvbnNUeXBlTm9uZSk7CisKKyAgICAv
LyBBbnkgY29ubmVjdGlvbnMgd2UgYXJlIG5vdGlmaWVkIG9mIHdpdGhpbiB0aGUgQ29ubmVjdGlv
bkRlbGF5SW50ZXJ2YWwgb2YgbGlzdGVuaW5nIGxpa2VseSByZXByZXNlbnQKKyAgICAvLyBkZXZp
Y2VzIHRoYXQgd2VyZSBhbHJlYWR5IGNvbm5lY3RlZCwgc28gd2Ugc3VwcHJlc3Mgbm90aWZ5aW5n
IGNsaWVudHMgb2YgdGhlc2UuCisgICAgbV9jb25uZWN0aW9uRGVsYXlUaW1lci5zdGFydE9uZVNo
b3QoQ29ubmVjdGlvbkRlbGF5SW50ZXJ2YWwpOworfQorCit2b2lkIEhJREdhbWVwYWRQcm92aWRl
cjo6Y2xvc2VBbmRVbnNjaGVkdWxlTWFuYWdlcigpCit7CisgICAgTE9HKEdhbWVwYWQsICJISURH
YW1lcGFkUHJvdmlkZXIgY2xvc2luZy91bnNjaGVkdWxpbmcgSElEIG1hbmFnZXIiKTsKKworICAg
IElPSElETWFuYWdlclVuc2NoZWR1bGVGcm9tUnVuTG9vcChtX21hbmFnZXIuZ2V0KCksIENGUnVu
TG9vcEdldEN1cnJlbnQoKSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKKyAgICBJT0hJRE1hbmFn
ZXJDbG9zZShtX21hbmFnZXIuZ2V0KCksIGtJT0hJRE9wdGlvbnNUeXBlTm9uZSk7CisKKyAgICBt
X2dhbWVwYWRWZWN0b3IuY2xlYXIoKTsKKyAgICBtX2dhbWVwYWRNYXAuY2xlYXIoKTsKKworICAg
IG1fY29ubmVjdGlvbkRlbGF5VGltZXIuc3RvcCgpOworfQorCit2b2lkIEhJREdhbWVwYWRQcm92
aWRlcjo6c3RhcnRNb25pdG9yaW5nR2FtZXBhZHMoR2FtZXBhZFByb3ZpZGVyQ2xpZW50KiBjbGll
bnQpCit7CisgICAgYm9vbCBzaG91bGRPcGVuQW5kU2NoZWR1bGVNYW5hZ2VyID0gbV9jbGllbnRz
LmlzRW1wdHkoKTsKKworICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKGNsaWVudCkpOwor
ICAgIG1fY2xpZW50cy5hZGQoY2xpZW50KTsKKworICAgIGlmIChzaG91bGRPcGVuQW5kU2NoZWR1
bGVNYW5hZ2VyKQorICAgICAgICBvcGVuQW5kU2NoZWR1bGVNYW5hZ2VyKCk7Cit9Cit2b2lkIEhJ
REdhbWVwYWRQcm92aWRlcjo6c3RvcE1vbml0b3JpbmdHYW1lcGFkcyhHYW1lcGFkUHJvdmlkZXJD
bGllbnQqIGNsaWVudCkKK3sKKyAgICBBU1NFUlQobV9jbGllbnRzLmNvbnRhaW5zKGNsaWVudCkp
OworCisgICAgYm9vbCBzaG91bGRDbG9zZUFuZFVuc2NoZWR1bGVNYW5hZ2VyID0gbV9jbGllbnRz
LnJlbW92ZShjbGllbnQpICYmIG1fY2xpZW50cy5pc0VtcHR5KCk7CisKKyAgICBpZiAoc2hvdWxk
Q2xvc2VBbmRVbnNjaGVkdWxlTWFuYWdlcikKKyAgICAgICAgY2xvc2VBbmRVbnNjaGVkdWxlTWFu
YWdlcigpOworfQorCit2b2lkIEhJREdhbWVwYWRQcm92aWRlcjo6ZGV2aWNlQWRkZWQoSU9ISURE
ZXZpY2VSZWYgZGV2aWNlKQoreworICAgIEFTU0VSVCghbV9nYW1lcGFkTWFwLmdldChkZXZpY2Up
KTsKKworICAgIExPRyhHYW1lcGFkLCAiSElER2FtZXBhZFByb3ZpZGVyIGRldmljZSAlcCBhZGRl
ZCIsIGRldmljZSk7CisKKyAgICB1bnNpZ25lZCBpbmRleCA9IGluZGV4Rm9yTmV3bHlDb25uZWN0
ZWREZXZpY2UoKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SElER2FtZXBhZD4gZ2FtZXBhZCA9IHN0
ZDo6bWFrZV91bmlxdWU8SElER2FtZXBhZD4oZGV2aWNlLCBpbmRleCk7CisKKyAgICBpZiAobV9n
YW1lcGFkVmVjdG9yLnNpemUoKSA8PSBpbmRleCkKKyAgICAgICAgbV9nYW1lcGFkVmVjdG9yLnJl
c2l6ZShpbmRleCArIDEpOworCisgICAgbV9nYW1lcGFkVmVjdG9yW2luZGV4XSA9IGdhbWVwYWQu
Z2V0KCk7CisgICAgbV9nYW1lcGFkTWFwLnNldChkZXZpY2UsIFdURk1vdmUoZ2FtZXBhZCkpOwor
CisgICAgaWYgKCFtX3Nob3VsZERpc3BhdGNoQ2FsbGJhY2tzKSB7CisgICAgICAgIC8vIFRoaXMg
YWRkZWQgZGV2aWNlIGlzIHRoZSByZXN1bHQgb2YgdXMgc3RhcnRpbmcgdG8gbW9uaXRvciBnYW1l
cGFkcy4KKyAgICAgICAgLy8gV2UnbGwgZ2V0IG5vdGlmaWVkIG9mIGFsbCBjb25uZWN0ZWQgZGV2
aWNlcyBkdXJpbmcgdGhpcyBjdXJyZW50IHNwaW4gb2YgdGhlIHJ1bmxvb3AKKyAgICAgICAgLy8g
YW5kIHdlIGRvbid0IHdhbnQgdG8gdGVsbCB0aGUgY2xpZW50IGFib3V0IGFueSBvZiB0aGVtLgor
ICAgICAgICAvLyBUaGUgbV9jb25uZWN0aW9uRGVsYXlUaW1lciBmaXJlcyBpbiBhIHN1YnNlcXVl
bnQgc3BpbiBvZiB0aGUgcnVubG9vcCBhZnRlciB3aGljaAorICAgICAgICAvLyBhbnkgY29ubmVj
dGlvbiBldmVudHMgYXJlIGFjdHVhbCBuZXcgZGV2aWNlcy4KKyAgICAgICAgbV9jb25uZWN0aW9u
RGVsYXlUaW1lci5zdGFydE9uZVNob3QoMCk7CisKKyAgICAgICAgTE9HKEdhbWVwYWQsICJEZXZp
Y2UgJXAgd2FzIGFkZGVkIHdoaWxlIHN1cHByZXNzaW5nIGNhbGxiYWNrcywgc28gdGhpcyBzaG91
bGQgYmUgYW4gJ2FscmVhZHkgY29ubmVjdGVkJyBldmVudCIsIGRldmljZSk7CisKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGZvciAoYXV0byYgY2xpZW50IDogbV9jbGllbnRzKQorICAg
ICAgICBjbGllbnQtPnBsYXRmb3JtR2FtZXBhZENvbm5lY3RlZCgqbV9nYW1lcGFkVmVjdG9yW2lu
ZGV4XSk7Cit9CisKK3ZvaWQgSElER2FtZXBhZFByb3ZpZGVyOjpkZXZpY2VSZW1vdmVkKElPSElE
RGV2aWNlUmVmIGRldmljZSkKK3sKKyAgICBMT0coR2FtZXBhZCwgIkhJREdhbWVwYWRQcm92aWRl
ciBkZXZpY2UgJXAgcmVtb3ZlZCIsIGRldmljZSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SElE
R2FtZXBhZD4gcmVtb3ZlZEdhbWVwYWQgPSByZW1vdmVHYW1lcGFkRm9yRGV2aWNlKGRldmljZSk7
CisgICAgQVNTRVJUKHJlbW92ZWRHYW1lcGFkKTsKKworICAgIC8vIEFueSB0aW1lIHdlIGdldCBh
IGRldmljZSByZW1vdmVkIGNhbGxiYWNrIHdlIGtub3cgaXQncyBhIHJlYWwgZXZlbnQgYW5kIG5v
dCBhbiAnYWxyZWFkeSBjb25uZWN0ZWQnIGV2ZW50LgorICAgIC8vIFdlIHNob3VsZCBhbHdheXMg
c3RvcCBzdXBwcmVzc2luZyBjYWxsYmFja3Mgd2hlbiB3ZSByZWNlaXZlIHN1Y2ggYW4gZXZlbnQu
CisgICAgbV9zaG91bGREaXNwYXRjaENhbGxiYWNrcyA9IHRydWU7CisKKyAgICBmb3IgKGF1dG8m
IGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5wbGF0Zm9ybUdhbWVwYWREaXNj
b25uZWN0ZWQoKnJlbW92ZWRHYW1lcGFkKTsKK30KKwordm9pZCBISURHYW1lcGFkUHJvdmlkZXI6
OnZhbHVlc0NoYW5nZWQoSU9ISURWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBJT0hJRERldmljZVJl
ZiBkZXZpY2UgPSBJT0hJREVsZW1lbnRHZXREZXZpY2UoSU9ISURWYWx1ZUdldEVsZW1lbnQodmFs
dWUpKTsKKworICAgIEhJREdhbWVwYWQqIGdhbWVwYWQgPSBtX2dhbWVwYWRNYXAuZ2V0KGRldmlj
ZSk7CisKKyAgICAvLyBXaGVuIHN0YXJ0aW5nIG1vbml0b3Jpbmcgd2UgbWlnaHQgZ2V0IGEgdmFs
dWUgY2hhbmdlZCBjYWxsYmFjayBiZWZvcmUgd2UgZXZlbiBrbm93IHRoZSBkZXZpY2UgaXMgY29u
bmVjdGVkLgorICAgIGlmICghZ2FtZXBhZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2FtZXBh
ZC0+dmFsdWVDaGFuZ2VkKHZhbHVlKTsKKworICAgIC8vIFRoaXMgaXNBY3RpdmUgY2hlY2sgaXMg
bmVjZXNzYXJ5IGFzIHdlIHdhbnQgdG8gZGVsYXkgaW5wdXQgbm90aWZpY2F0aW9ucyBmcm9tIHRo
ZSB0aW1lIG9mIHRoZSBmaXJzdCBpbnB1dCwKKyAgICAvLyBhbmQgbm90IHB1c2ggdGhlIG5vdGlm
aWNhdGlvbiBvdXQgb24gZXZlcnkgc3Vic2VxdWVudCBpbnB1dC4KKyAgICBpZiAoIW1faW5wdXRO
b3RpZmljYXRpb25UaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2lucHV0Tm90aWZpY2F0aW9u
VGltZXIuc3RhcnRPbmVTaG90KElucHV0Tm90aWZpY2F0aW9uRGVsYXkpOworfQorCit2b2lkIEhJ
REdhbWVwYWRQcm92aWRlcjo6aW5wdXROb3RpZmljYXRpb25UaW1lckZpcmVkKCkKK3sKKyAgICBp
ZiAoIW1fc2hvdWxkRGlzcGF0Y2hDYWxsYmFja3MpCisgICAgICAgIHJldHVybjsKKworICAgIGZv
ciAoYXV0byYgY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPnBsYXRmb3JtR2Ft
ZXBhZElucHV0QWN0aXZpdHkoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEhJREdhbWVwYWQ+IEhJ
REdhbWVwYWRQcm92aWRlcjo6cmVtb3ZlR2FtZXBhZEZvckRldmljZShJT0hJRERldmljZVJlZiBk
ZXZpY2UpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEhJREdhbWVwYWQ+IHJlc3VsdCA9IG1fZ2Ft
ZXBhZE1hcC50YWtlKGRldmljZSk7CisgICAgQVNTRVJUKHJlc3VsdCk7CisKKyAgICBhdXRvIGkg
PSBtX2dhbWVwYWRWZWN0b3IuZmluZChyZXN1bHQuZ2V0KCkpOworICAgIGlmIChpICE9IG5vdEZv
dW5kKQorICAgICAgICBtX2dhbWVwYWRWZWN0b3JbaV0gPSBudWxscHRyOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KEdBTUVQQUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9nYW1lcGFkL21h
Yy9ISURHYW1lcGFkUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dhbWVwYWQv
bWFjL0hJREdhbWVwYWRQcm92aWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc4ZGUwMGM3ZTYxZTU2NDhkZmZm
OGNlNTk1ODY2ODBlZTM4MzhlZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9nYW1lcGFkL21hYy9ISURHYW1lcGFkUHJvdmlkZXIuaApAQCAtMCwwICsxLDg1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR0FNRVBBRCkKKworI2lu
Y2x1ZGUgIkdhbWVwYWRQcm92aWRlci5oIgorI2luY2x1ZGUgIkhJREdhbWVwYWQuaCIKKyNpbmNs
dWRlICJUaW1lci5oIgorI2luY2x1ZGUgPElPS2l0L2hpZC9JT0hJRE1hbmFnZXIuaD4KKyNpbmNs
dWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdhbWVwYWRQ
cm92aWRlckNsaWVudDsKKworY2xhc3MgSElER2FtZXBhZFByb3ZpZGVyIDogcHVibGljIEdhbWVw
YWRQcm92aWRlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSElER2FtZXBhZFByb3ZpZGVy
KTsKKyAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8SElER2FtZXBhZFByb3ZpZGVyPjsK
K3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSElER2FtZXBhZFByb3ZpZGVyJiBz
aW5nbGV0b24oKTsKKworICAgIHZpcnR1YWwgdm9pZCBzdGFydE1vbml0b3JpbmdHYW1lcGFkcyhH
YW1lcGFkUHJvdmlkZXJDbGllbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcE1vbml0b3JpbmdH
YW1lcGFkcyhHYW1lcGFkUHJvdmlkZXJDbGllbnQqKTsKKyAgICB2aXJ0dWFsIGNvbnN0IFZlY3Rv
cjxQbGF0Zm9ybUdhbWVwYWQqPiYgcGxhdGZvcm1HYW1lcGFkcygpIHsgcmV0dXJuIG1fZ2FtZXBh
ZFZlY3RvcjsgfQorCisgICAgdm9pZCBkZXZpY2VBZGRlZChJT0hJRERldmljZVJlZik7CisgICAg
dm9pZCBkZXZpY2VSZW1vdmVkKElPSElERGV2aWNlUmVmKTsKKyAgICB2b2lkIHZhbHVlc0NoYW5n
ZWQoSU9ISURWYWx1ZVJlZik7CisKK3ByaXZhdGU6CisgICAgSElER2FtZXBhZFByb3ZpZGVyKCk7
CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SElER2FtZXBhZD4gcmVtb3ZlR2FtZXBhZEZvckRldmlj
ZShJT0hJRERldmljZVJlZik7CisKKyAgICB2b2lkIG9wZW5BbmRTY2hlZHVsZU1hbmFnZXIoKTsK
KyAgICB2b2lkIGNsb3NlQW5kVW5zY2hlZHVsZU1hbmFnZXIoKTsKKworICAgIHZvaWQgY29ubmVj
dGlvbkRlbGF5VGltZXJGaXJlZCgpOworICAgIHZvaWQgaW5wdXROb3RpZmljYXRpb25UaW1lckZp
cmVkKCk7CisKKyAgICB1bnNpZ25lZCBpbmRleEZvck5ld2x5Q29ubmVjdGVkRGV2aWNlKCk7CisK
KyAgICBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4gbV9nYW1lcGFkVmVjdG9yOworICAgIEhhc2hN
YXA8SU9ISUREZXZpY2VSZWYsIHN0ZDo6dW5pcXVlX3B0cjxISURHYW1lcGFkPj4gbV9nYW1lcGFk
TWFwOworCisgICAgUmV0YWluUHRyPElPSElETWFuYWdlclJlZj4gbV9tYW5hZ2VyOworCisgICAg
SGFzaFNldDxHYW1lcGFkUHJvdmlkZXJDbGllbnQqPiBtX2NsaWVudHM7CisgICAgYm9vbCBtX3No
b3VsZERpc3BhdGNoQ2FsbGJhY2tzOworCisgICAgVGltZXIgbV9jb25uZWN0aW9uRGVsYXlUaW1l
cjsKKyAgICBUaW1lciBtX2lucHV0Tm90aWZpY2F0aW9uVGltZXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dsaWIvR2FtZXBhZHNHbGliLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dsaWIvR2FtZXBhZHNHbGliLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYjhiZDIxYTVlODY2MjI2MjRkM2NkN2E5ZGM4MzUyYzI0ZTI0NTg0Yi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9nbGliL0dhbWVwYWRzR2xpYi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMTkgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBaYW4gRG9iZXJzZWsgPHphbmRvYmVyc2Vr
QGdtYWlsLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgotICogU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIKLSAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNICi0gKiBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdh
bWVwYWRzLmgiCi0KLSNpZiBFTkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKQotCi0jaW5jbHVkZSAi
R2FtZXBhZERldmljZUxpbnV4LmgiCi0jaW5jbHVkZSAiR2FtZXBhZExpc3QuaCIKLSNpbmNsdWRl
ICJMb2dnaW5nLmgiCi0jaW5jbHVkZSA8Z2lvL2d1bml4aW5wdXRzdHJlYW0uaD4KLSNpbmNsdWRl
IDxndWRldi9ndWRldi5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3Rm
L2dsaWIvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5o
PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdhbWVwYWREZXZpY2VHbGliIDogcHVi
bGljIEdhbWVwYWREZXZpY2VMaW51eCB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgR2FtZXBhZERl
dmljZUdsaWIoU3RyaW5nIGRldmljZUZpbGUpOwotICAgIH5HYW1lcGFkRGV2aWNlR2xpYigpOwot
Ci1wcml2YXRlOgotICAgIHN0YXRpYyBnYm9vbGVhbiByZWFkQ2FsbGJhY2soR09iamVjdCogcG9s
bGFibGVTdHJlYW0sIGdwb2ludGVyIGRhdGEpOwotICAgIEdSZWZQdHI8R0lucHV0U3RyZWFtPiBt
X2lucHV0U3RyZWFtOwotICAgIEdSZWZQdHI8R1NvdXJjZT4gbV9zb3VyY2U7Ci19OwotCi1HYW1l
cGFkRGV2aWNlR2xpYjo6R2FtZXBhZERldmljZUdsaWIoU3RyaW5nIGRldmljZUZpbGUpCi0gICAg
OiBHYW1lcGFkRGV2aWNlTGludXgoZGV2aWNlRmlsZSkKLXsKLSAgICBpZiAobV9maWxlRGVzY3Jp
cHRvciA9PSAtMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbnB1dFN0cmVhbSA9IGFkb3B0
R1JlZihnX3VuaXhfaW5wdXRfc3RyZWFtX25ldyhtX2ZpbGVEZXNjcmlwdG9yLCBGQUxTRSkpOwot
ICAgIG1fc291cmNlID0gYWRvcHRHUmVmKGdfcG9sbGFibGVfaW5wdXRfc3RyZWFtX2NyZWF0ZV9z
b3VyY2UoR19QT0xMQUJMRV9JTlBVVF9TVFJFQU0obV9pbnB1dFN0cmVhbS5nZXQoKSksIDApKTsK
LSAgICBnX3NvdXJjZV9zZXRfY2FsbGJhY2sobV9zb3VyY2UuZ2V0KCksIHJlaW50ZXJwcmV0X2Nh
c3Q8R1NvdXJjZUZ1bmM+KHJlYWRDYWxsYmFjayksIHRoaXMsIDApOwotICAgIGdfc291cmNlX2F0
dGFjaChtX3NvdXJjZS5nZXQoKSwgMCk7Ci19Ci0KLUdhbWVwYWREZXZpY2VHbGliOjp+R2FtZXBh
ZERldmljZUdsaWIoKQotewotICAgIGlmIChtX3NvdXJjZSkKLSAgICAgICAgZ19zb3VyY2VfZGVz
dHJveShtX3NvdXJjZS5nZXQoKSk7Ci19Ci0KLWdib29sZWFuIEdhbWVwYWREZXZpY2VHbGliOjpy
ZWFkQ2FsbGJhY2soR09iamVjdCogcG9sbGFibGVTdHJlYW0sIGdwb2ludGVyIGRhdGEpCi17Ci0g
ICAgR2FtZXBhZERldmljZUdsaWIqIGdhbWVwYWREZXZpY2UgPSByZWludGVycHJldF9jYXN0PEdh
bWVwYWREZXZpY2VHbGliKj4oZGF0YSk7Ci0gICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9y
OwotICAgIHN0cnVjdCBqc19ldmVudCBldmVudDsKLQotICAgIGdzc2l6ZSBsZW4gPSBnX3BvbGxh
YmxlX2lucHV0X3N0cmVhbV9yZWFkX25vbmJsb2NraW5nKEdfUE9MTEFCTEVfSU5QVVRfU1RSRUFN
KHBvbGxhYmxlU3RyZWFtKSwKLSAgICAgICAgJmV2ZW50LCBzaXplb2YoZXZlbnQpLCAwLCAmZXJy
b3Iub3V0UHRyKCkpOwotCi0gICAgLy8gRklYTUU6IFByb3Blcmx5IGxvZyB0aGUgZXJyb3IuCi0g
ICAgLy8gSW4gdGhlIGNhc2Ugb2YgR19JT19FUlJPUl9XT1VMRF9CTE9DSyBlcnJvciByZXR1cm4g
VFJVRSB0byB3YWl0IHVudGlsCi0gICAgLy8gdGhlIHNvdXJjZSBiZWNvbWVzIHJlYWRhYmxlIGFn
YWluIGFuZCBGQUxTRSBvdGhlcndpc2UuCi0gICAgaWYgKGVycm9yKQotICAgICAgICByZXR1cm4g
Z19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX1dPVUxE
X0JMT0NLKTsKLQotICAgIEFTU0VSVF9VTlVTRUQobGVuLCBsZW4gPT0gc2l6ZW9mKGV2ZW50KSk7
Ci0gICAgZ2FtZXBhZERldmljZS0+dXBkYXRlRm9yRXZlbnQoZXZlbnQpOwotICAgIHJldHVybiBU
UlVFOwotfQotCi1jbGFzcyBHYW1lcGFkc0dsaWIgewotcHVibGljOgotICAgIGV4cGxpY2l0IEdh
bWVwYWRzR2xpYih1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgdm9pZCByZWdpc3RlckRldmljZShT
dHJpbmcgZGV2aWNlRmlsZSk7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyRGV2aWNlKFN0cmluZyBkZXZp
Y2VGaWxlKTsKLQotICAgIHZvaWQgdXBkYXRlR2FtZXBhZExpc3QoR2FtZXBhZExpc3QqKTsKLQot
cHJpdmF0ZToKLSAgICB+R2FtZXBhZHNHbGliKCk7Ci0gICAgc3RhdGljIHZvaWQgb25VRXZlbnRD
YWxsYmFjayhHVWRldkNsaWVudCosIGdjaGFyKiBhY3Rpb24sIEdVZGV2RGV2aWNlKiwgZ3BvaW50
ZXIgZGF0YSk7Ci0gICAgc3RhdGljIGdib29sZWFuIGlzR2FtZXBhZERldmljZShHVWRldkRldmlj
ZSopOwotCi0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxHYW1lcGFkRGV2aWNlR2xpYj4gPiBt
X3Nsb3RzOwotICAgIEhhc2hNYXA8U3RyaW5nLCBHYW1lcGFkRGV2aWNlR2xpYio+IG1fZGV2aWNl
TWFwOwotCi0gICAgR1JlZlB0cjxHVWRldkNsaWVudD4gbV9ndWRldkNsaWVudDsKLX07Ci0KLUdh
bWVwYWRzR2xpYjo6R2FtZXBhZHNHbGliKHVuc2lnbmVkIGxlbmd0aCkKLSAgICA6IG1fc2xvdHMo
bGVuZ3RoKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdWJzeXN0ZW1zW10gPSB7ICJpbnB1
dCIsIDAgfTsKLSAgICBtX2d1ZGV2Q2xpZW50ID0gYWRvcHRHUmVmKGdfdWRldl9jbGllbnRfbmV3
KHN1YnN5c3RlbXMpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1fZ3VkZXZDbGllbnQuZ2V0KCks
ICJ1ZXZlbnQiLCBHX0NBTExCQUNLKG9uVUV2ZW50Q2FsbGJhY2spLCB0aGlzKTsKLQotICAgIEdV
bmlxdWVQdHI8R0xpc3Q+IGRldmljZXNMaXN0KGdfdWRldl9jbGllbnRfcXVlcnlfYnlfc3Vic3lz
dGVtKG1fZ3VkZXZDbGllbnQuZ2V0KCksIHN1YnN5c3RlbXNbMF0pKTsKLSAgICBmb3IgKEdMaXN0
KiBsaXN0SXRlbSA9IGRldmljZXNMaXN0LmdldCgpOyBsaXN0SXRlbTsgbGlzdEl0ZW0gPSBnX2xp
c3RfbmV4dChsaXN0SXRlbSkpIHsKLSAgICAgICAgR1VkZXZEZXZpY2UqIGRldmljZSA9IEdfVURF
Vl9ERVZJQ0UobGlzdEl0ZW0tPmRhdGEpOwotICAgICAgICBTdHJpbmcgZGV2aWNlRmlsZSA9IFN0
cmluZzo6ZnJvbVVURjgoZ191ZGV2X2RldmljZV9nZXRfZGV2aWNlX2ZpbGUoZGV2aWNlKSk7Ci0g
ICAgICAgIGlmIChpc0dhbWVwYWREZXZpY2UoZGV2aWNlKSkKLSAgICAgICAgICAgIHJlZ2lzdGVy
RGV2aWNlKGRldmljZUZpbGUpOwotICAgICAgICBnX29iamVjdF91bnJlZihkZXZpY2UpOwotICAg
IH0KLX0KLQotR2FtZXBhZHNHbGliOjp+R2FtZXBhZHNHbGliKCkKLXsKLSAgICBnX3NpZ25hbF9o
YW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9ndWRldkNsaWVudC5nZXQoKSwgR19TSUdOQUxf
TUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7Ci19Ci0KLXZvaWQgR2FtZXBhZHNHbGliOjpy
ZWdpc3RlckRldmljZShTdHJpbmcgZGV2aWNlRmlsZSkKLXsKLSAgICBMT0coR2FtZXBhZCwgIkdh
bWVwYWRzR2xpYjo6cmVnaXN0ZXJEZXZpY2UgJXMiLCBkZXZpY2VGaWxlLmFzY2lpKCkuZGF0YSgp
KTsKLSAgICBBU1NFUlQoIW1fZGV2aWNlTWFwLmNvbnRhaW5zKGRldmljZUZpbGUpKTsKLQotICAg
IGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1fc2xvdHMuc2l6ZSgpOyBpbmRleCsr
KSB7Ci0gICAgICAgIGlmICghbV9zbG90c1tpbmRleF0pIHsKLSAgICAgICAgICAgIG1fc2xvdHNb
aW5kZXhdID0gc3RkOjptYWtlX3VuaXF1ZTxHYW1lcGFkRGV2aWNlR2xpYj4oZGV2aWNlRmlsZSk7
Ci0gICAgICAgICAgICBtX2RldmljZU1hcC5hZGQoZGV2aWNlRmlsZSwgbV9zbG90c1tpbmRleF0u
Z2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
R2FtZXBhZHNHbGliOjp1bnJlZ2lzdGVyRGV2aWNlKFN0cmluZyBkZXZpY2VGaWxlKQotewotICAg
IExPRyhHYW1lcGFkLCAiR2FtZXBhZHNHbGliOjp1bnJlZ2lzdGVyRGV2aWNlICVzIiwgZGV2aWNl
RmlsZS5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgQVNTRVJUKG1fZGV2aWNlTWFwLmNvbnRhaW5zKGRl
dmljZUZpbGUpKTsKLQotICAgIEdhbWVwYWREZXZpY2VHbGliKiBnYW1lcGFkRGV2aWNlID0gbV9k
ZXZpY2VNYXAudGFrZShkZXZpY2VGaWxlKTsKLSAgICBzaXplX3QgaW5kZXggPSBtX3Nsb3RzLmZp
bmQoZ2FtZXBhZERldmljZSk7Ci0gICAgQVNTRVJUKGluZGV4ICE9IG5vdEZvdW5kKTsKLQotICAg
IG1fc2xvdHNbaW5kZXhdID0gbnVsbHB0cjsKLX0KLQotdm9pZCBHYW1lcGFkc0dsaWI6OnVwZGF0
ZUdhbWVwYWRMaXN0KEdhbWVwYWRMaXN0KiBpbnRvKQotewotICAgIEFTU0VSVChtX3Nsb3RzLnNp
emUoKSA9PSBpbnRvLT5sZW5ndGgoKSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9zbG90cy5zaXplKCk7IGkrKykgewotICAgICAgICBpZiAobV9zbG90c1tpXS5nZXQoKSAmJiBt
X3Nsb3RzW2ldLT5jb25uZWN0ZWQoKSkgewotICAgICAgICAgICAgR2FtZXBhZERldmljZUdsaWIq
IGdhbWVwYWREZXZpY2UgPSBtX3Nsb3RzW2ldLmdldCgpOwotICAgICAgICAgICAgUmVmUHRyPEdh
bWVwYWQ+IGdhbWVwYWQgPSBpbnRvLT5pdGVtKGkpOwotICAgICAgICAgICAgaWYgKCFnYW1lcGFk
KQotICAgICAgICAgICAgICAgIGdhbWVwYWQgPSBHYW1lcGFkOjpjcmVhdGUoKTsKLQotICAgICAg
ICAgICAgZ2FtZXBhZC0+aW5kZXgoaSk7Ci0gICAgICAgICAgICBnYW1lcGFkLT5pZChnYW1lcGFk
RGV2aWNlLT5pZCgpKTsKLSAgICAgICAgICAgIGdhbWVwYWQtPnRpbWVzdGFtcChnYW1lcGFkRGV2
aWNlLT50aW1lc3RhbXAoKSk7Ci0gICAgICAgICAgICBnYW1lcGFkLT5heGVzKGdhbWVwYWREZXZp
Y2UtPmF4ZXNDb3VudCgpLCBnYW1lcGFkRGV2aWNlLT5heGVzRGF0YSgpKTsKLSAgICAgICAgICAg
IGdhbWVwYWQtPmJ1dHRvbnMoZ2FtZXBhZERldmljZS0+YnV0dG9uc0NvdW50KCksIGdhbWVwYWRE
ZXZpY2UtPmJ1dHRvbnNEYXRhKCkpOwotCi0gICAgICAgICAgICBpbnRvLT5zZXQoaSwgZ2FtZXBh
ZCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaW50by0+c2V0KGksIDApOwotICAgIH0K
LX0KLQotdm9pZCBHYW1lcGFkc0dsaWI6Om9uVUV2ZW50Q2FsbGJhY2soR1VkZXZDbGllbnQqLCBn
Y2hhciogYWN0aW9uLCBHVWRldkRldmljZSogZGV2aWNlLCBncG9pbnRlciBkYXRhKQotewotICAg
IGlmICghaXNHYW1lcGFkRGV2aWNlKGRldmljZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEdh
bWVwYWRzR2xpYiogZ2FtZXBhZHNHbGliID0gcmVpbnRlcnByZXRfY2FzdDxHYW1lcGFkc0dsaWIq
PihkYXRhKTsKLSAgICBTdHJpbmcgZGV2aWNlRmlsZSA9IFN0cmluZzo6ZnJvbVVURjgoZ191ZGV2
X2RldmljZV9nZXRfZGV2aWNlX2ZpbGUoZGV2aWNlKSk7Ci0KLSAgICBpZiAoIWdfc3RyY21wMChh
Y3Rpb24sICJhZGQiKSkKLSAgICAgICAgZ2FtZXBhZHNHbGliLT5yZWdpc3RlckRldmljZShkZXZp
Y2VGaWxlKTsKLSAgICBlbHNlIGlmICghZ19zdHJjbXAwKGFjdGlvbiwgInJlbW92ZSIpKQotICAg
ICAgICBnYW1lcGFkc0dsaWItPnVucmVnaXN0ZXJEZXZpY2UoZGV2aWNlRmlsZSk7Ci19Ci0KLWdi
b29sZWFuIEdhbWVwYWRzR2xpYjo6aXNHYW1lcGFkRGV2aWNlKEdVZGV2RGV2aWNlKiBkZXZpY2Up
Ci17Ci0gICAgY29uc3QgZ2NoYXIqIGRldmljZUZpbGUgPSBnX3VkZXZfZGV2aWNlX2dldF9kZXZp
Y2VfZmlsZShkZXZpY2UpOwotICAgIGNvbnN0IGdjaGFyKiBzeXNmc1BhdGggPSBnX3VkZXZfZGV2
aWNlX2dldF9zeXNmc19wYXRoKGRldmljZSk7Ci0gICAgaWYgKCFkZXZpY2VGaWxlIHx8ICFzeXNm
c1BhdGgpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLQotICAgIGlmICghZ191ZGV2X2RldmljZV9o
YXNfcHJvcGVydHkoZGV2aWNlLCAiSURfSU5QVVQiKSB8fCAhZ191ZGV2X2RldmljZV9oYXNfcHJv
cGVydHkoZGV2aWNlLCAiSURfSU5QVVRfSk9ZU1RJQ0siKSkKLSAgICAgICAgcmV0dXJuIEZBTFNF
OwotCi0gICAgcmV0dXJuIGdfc3RyX2hhc19wcmVmaXgoZGV2aWNlRmlsZSwgIi9kZXYvaW5wdXQv
anMiKTsKLX0KLQotdm9pZCBzYW1wbGVHYW1lcGFkcyhHYW1lcGFkTGlzdCogaW50bykKLXsKLSAg
ICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoR2FtZXBhZHNHbGliLCBnYW1lcGFkc0ds
aWIsIChpbnRvLT5sZW5ndGgoKSkpOwotICAgIGdhbWVwYWRzR2xpYi51cGRhdGVHYW1lcGFkTGlz
dChpbnRvKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KEdBTUVQQURfREVQUkVDQVRFRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2xpbnV4L0dhbWVwYWREZXZpY2VMaW51eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9s
aW51eC9HYW1lcGFkRGV2aWNlTGludXguY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjNTE3NTRkNTRlMWMxZjFmZjQ2NGY3MDExNWY2OTc0M2NlYWI5NGFkLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2xpbnV4L0dhbWVwYWREZXZpY2VMaW51eC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFphbiBEb2JlcnNlayA8emFuZG9iZXJzZWtA
Z21haWwuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UgotICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0gKLSAqIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR2Ft
ZXBhZERldmljZUxpbnV4LmgiCi0KLSNpZiBFTkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKQotCi0j
aW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KLSNpbmNsdWRlIDx1bmlz
dGQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotR2FtZXBhZERldmljZUxpbnV4OjpHYW1lcGFkRGV2aWNlTGludXgoU3RyaW5nIGRldmlj
ZUZpbGUpCi0gICAgOiBtX2ZpbGVEZXNjcmlwdG9yKC0xKQotICAgICwgbV9jb25uZWN0ZWQoZmFs
c2UpCi0gICAgLCBtX2xhc3RUaW1lc3RhbXAoMCkKLXsKLSAgICAvLyBGSVhNRTogTG9nIGVycm9y
cyB3aGVuIHJldHVybmluZyBlYXJseS4KLSAgICBtX2ZpbGVEZXNjcmlwdG9yID0gb3BlbihkZXZp
Y2VGaWxlLnV0ZjgoKS5kYXRhKCksIE9fUkRPTkxZIHwgT19OT05CTE9DSyk7Ci0gICAgaWYgKG1f
ZmlsZURlc2NyaXB0b3IgPT0gLTEpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNoYXIgZGV2aWNl
TmFtZVsxMDI0XTsKLSAgICBpZiAoaW9jdGwobV9maWxlRGVzY3JpcHRvciwgSlNJT0NHTkFNRShz
aXplb2YoZGV2aWNlTmFtZSkpLCBkZXZpY2VOYW1lKSA8IDApCi0gICAgICAgIHJldHVybjsKLSAg
ICBtX2RldmljZU5hbWUgPSBTdHJpbmcoZGV2aWNlTmFtZSkuc2ltcGxpZnlXaGl0ZVNwYWNlKCk7
Ci0KLSAgICB1aW50OF90IG51bWJlck9mQXhlczsKLSAgICB1aW50OF90IG51bWJlck9mQnV0dG9u
czsKLSAgICBpZiAoaW9jdGwobV9maWxlRGVzY3JpcHRvciwgSlNJT0NHQVhFUywgJm51bWJlck9m
QXhlcykgPCAwIHx8IGlvY3RsKG1fZmlsZURlc2NyaXB0b3IsIEpTSU9DR0JVVFRPTlMsICZudW1i
ZXJPZkJ1dHRvbnMpIDwgMCkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fYXhlcy5maWxsKDAuMCwg
bnVtYmVyT2ZBeGVzKTsKLSAgICBtX2J1dHRvbnMuZmlsbCgwLjAsIG51bWJlck9mQnV0dG9ucyk7
Ci19Ci0KLUdhbWVwYWREZXZpY2VMaW51eDo6fkdhbWVwYWREZXZpY2VMaW51eCgpCi17Ci0gICAg
aWYgKG1fZmlsZURlc2NyaXB0b3IgIT0gLTEpCi0gICAgICAgIGNsb3NlKG1fZmlsZURlc2NyaXB0
b3IpOwotfQotCi12b2lkIEdhbWVwYWREZXZpY2VMaW51eDo6dXBkYXRlRm9yRXZlbnQoc3RydWN0
IGpzX2V2ZW50IGV2ZW50KQotewotICAgIGlmICghKGV2ZW50LnR5cGUgJiBKU19FVkVOVF9BWElT
IHx8IGV2ZW50LnR5cGUgJiBKU19FVkVOVF9CVVRUT04pKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBNYXJrIHRoZSBkZXZpY2UgYXMgY29ubmVjdGVkIG9ubHkgaWYgaXQgaXMgbm90IHlldCBj
b25uZWN0ZWQsIHRoZSBldmVudCBpcyBub3QgYW4gaW5pdGlhbGl6YXRpb24KLSAgICAvLyBhbmQg
dGhlIHZhbHVlIGlzIG5vdCAwIChpbmRpY2F0aW5nIGEgZ2VudWluZSBpbnRlcmFjdGlvbiB3aXRo
IHRoZSBkZXZpY2UpLgotICAgIGlmICghbV9jb25uZWN0ZWQgJiYgIShldmVudC50eXBlICYgSlNf
RVZFTlRfSU5JVCkgJiYgZXZlbnQudmFsdWUpCi0gICAgICAgIG1fY29ubmVjdGVkID0gdHJ1ZTsK
LQotICAgIGlmIChldmVudC50eXBlICYgSlNfRVZFTlRfQVhJUykKLSAgICAgICAgbV9heGVzW2V2
ZW50Lm51bWJlcl0gPSBub3JtYWxpemVBeGlzVmFsdWUoZXZlbnQudmFsdWUpOwotICAgIGVsc2Ug
aWYgKGV2ZW50LnR5cGUgJiBKU19FVkVOVF9CVVRUT04pCi0gICAgICAgIG1fYnV0dG9uc1tldmVu
dC5udW1iZXJdID0gbm9ybWFsaXplQnV0dG9uVmFsdWUoZXZlbnQudmFsdWUpOwotCi0gICAgbV9s
YXN0VGltZXN0YW1wID0gZXZlbnQudGltZTsKLX0KLQotZmxvYXQgR2FtZXBhZERldmljZUxpbnV4
Ojpub3JtYWxpemVBeGlzVmFsdWUoc2hvcnQgdmFsdWUpCi17Ci0gICAgLy8gTm9ybWFsaXplIGZy
b20gcmFuZ2UgWy0zMjc2NywgMzI3NjddIGludG8gcmFuZ2UgWy0xLjAsIDEuMF0KLSAgICByZXR1
cm4gdmFsdWUgLyAzMjc2Ny4wZjsKLX0KLQotZmxvYXQgR2FtZXBhZERldmljZUxpbnV4Ojpub3Jt
YWxpemVCdXR0b25WYWx1ZShzaG9ydCB2YWx1ZSkKLXsKLSAgICAvLyBOb3JtYWxpemUgZnJvbSBy
YW5nZSBbMCwgMV0gaW50byByYW5nZSBbMC4wLCAxLjBdCi0gICAgcmV0dXJuIHZhbHVlIC8gMS4w
ZjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEdBTUVQ
QURfREVQUkVDQVRFRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xpbnV4
L0dhbWVwYWREZXZpY2VMaW51eC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGludXgvR2Ft
ZXBhZERldmljZUxpbnV4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5YzA5YjI3
ZjU0YzlkOWQ5ZmMwYTJiNDgzYTRlMDZhMWIyNmEyNjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGludXgvR2Ft
ZXBhZERldmljZUxpbnV4LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIFphbiBEb2JlcnNlayA8emFuZG9iZXJzZWtAZ21haWwuY29tPgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0gKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgotICogQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLSAqIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIEdhbWVwYWREZXZpY2VMaW51eF9oCi0jZGVmaW5lIEdhbWVwYWRE
ZXZpY2VMaW51eF9oCi0KLSNpZiBFTkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKQotCi0jaW5jbHVk
ZSA8bGludXgvam95c3RpY2suaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgR2Ft
ZXBhZERldmljZUxpbnV4IHsKLXB1YmxpYzoKLSAgICBib29sIGNvbm5lY3RlZCgpIHsgcmV0dXJu
IG1fY29ubmVjdGVkOyB9OwotCi0gICAgU3RyaW5nIGlkKCkgeyByZXR1cm4gbV9kZXZpY2VOYW1l
OyB9Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIHRpbWVzdGFtcCgpIHsgcmV0dXJuIG1fbGFzdFRp
bWVzdGFtcDsgfQotCi0gICAgdW5zaWduZWQgYXhlc0NvdW50KCkgeyByZXR1cm4gbV9heGVzLnNp
emUoKTsgfQotICAgIGZsb2F0KiBheGVzRGF0YSgpIHsgcmV0dXJuIG1fYXhlcy5kYXRhKCk7IH0K
LQotICAgIHVuc2lnbmVkIGJ1dHRvbnNDb3VudCgpIHsgcmV0dXJuIG1fYnV0dG9ucy5zaXplKCk7
IH0KLSAgICBmbG9hdCogYnV0dG9uc0RhdGEoKSB7IHJldHVybiBtX2J1dHRvbnMuZGF0YSgpOyB9
Ci0KLXByb3RlY3RlZDoKLSAgICBHYW1lcGFkRGV2aWNlTGludXgoU3RyaW5nIGRldmljZUZpbGUp
OwotICAgIH5HYW1lcGFkRGV2aWNlTGludXgoKTsKLQotICAgIHZvaWQgdXBkYXRlRm9yRXZlbnQo
c3RydWN0IGpzX2V2ZW50KTsKLSAgICBpbnQgbV9maWxlRGVzY3JpcHRvcjsKLQotcHJpdmF0ZToK
LSAgICBmbG9hdCBub3JtYWxpemVBeGlzVmFsdWUoc2hvcnQgdmFsdWUpOwotICAgIGZsb2F0IG5v
cm1hbGl6ZUJ1dHRvblZhbHVlKHNob3J0IHZhbHVlKTsKLQotICAgIGJvb2wgbV9jb25uZWN0ZWQ7
Ci0gICAgU3RyaW5nIG1fZGV2aWNlTmFtZTsKLSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbV9sYXN0
VGltZXN0YW1wOwotCi0gICAgVmVjdG9yPGZsb2F0PiBtX2F4ZXM7Ci0gICAgVmVjdG9yPGZsb2F0
PiBtX2J1dHRvbnM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoR0FNRVBBRF9ERVBSRUNBVEVEKQotCi0jZW5kaWYgLy8gR2FtZXBhZERldmljZUxpbnV4
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9ISURHYW1lcGFkLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9ISURHYW1lcGFkLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNzdjMThlM2U2MzRiNTllYjBiYTAyZTFlZTE4YWRmZDVlNWQ3
ZGJmYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxOTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJISURHYW1lcGFkLmgiCi0KLSNpZiBFTkFCTEUoR0FNRVBBRCkKLQotI2luY2x1ZGUgPElPS2l0
L2hpZC9JT0hJREVsZW1lbnQuaD4KLSNpbmNsdWRlIDxJT0tpdC9oaWQvSU9ISURVc2FnZVRhYmxl
cy5oPgotI2luY2x1ZGUgPElPS2l0L2hpZC9JT0hJRFZhbHVlLmg+Ci0jaW5jbHVkZSA8d3RmL0N1
cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUhJREdhbWVwYWQ6
OkhJREdhbWVwYWQoSU9ISUREZXZpY2VSZWYgaGlkRGV2aWNlLCB1bnNpZ25lZCBpbmRleCkKLSAg
ICA6IFBsYXRmb3JtR2FtZXBhZChpbmRleCkKLSAgICAsIG1faGlkRGV2aWNlKGhpZERldmljZSkK
LXsKLSAgICBtX2Nvbm5lY3RUaW1lID0gbV9sYXN0VXBkYXRlVGltZSA9IG1vbm90b25pY2FsbHlJ
bmNyZWFzaW5nVGltZSgpOwotCi0gICAgQ0ZOdW1iZXJSZWYgY2ZWZW5kb3JJRCA9IChDRk51bWJl
clJlZilJT0hJRERldmljZUdldFByb3BlcnR5KGhpZERldmljZSwgQ0ZTVFIoa0lPSElEVmVuZG9y
SURLZXkpKTsKLSAgICBDRk51bWJlclJlZiBjZlByb2R1Y3RJRCA9IChDRk51bWJlclJlZilJT0hJ
RERldmljZUdldFByb3BlcnR5KGhpZERldmljZSwgQ0ZTVFIoa0lPSElEUHJvZHVjdElES2V5KSk7
Ci0KLSAgICBpbnQgdmVuZG9ySUQsIHByb2R1Y3RJRDsKLSAgICBDRk51bWJlckdldFZhbHVlKGNm
VmVuZG9ySUQsIGtDRk51bWJlckludFR5cGUsICZ2ZW5kb3JJRCk7Ci0gICAgQ0ZOdW1iZXJHZXRW
YWx1ZShjZlByb2R1Y3RJRCwga0NGTnVtYmVySW50VHlwZSwgJnByb2R1Y3RJRCk7Ci0KLSAgICBD
RlN0cmluZ1JlZiBjZlByb2R1Y3ROYW1lID0gKENGU3RyaW5nUmVmKUlPSElERGV2aWNlR2V0UHJv
cGVydHkoaGlkRGV2aWNlLCBDRlNUUihrSU9ISURQcm9kdWN0S2V5KSk7Ci0gICAgU3RyaW5nIHBy
b2R1Y3ROYW1lKGNmUHJvZHVjdE5hbWUpOwotCi0gICAgLy8gQ3VycmVudGx5IHRoZSBzcGVjIGhh
cyBubyBmb3JtYXR0aW5nIGZvciB0aGUgaWQgc3RyaW5nLgotICAgIC8vIFRoaXMgc3RyaW5nIGZv
cm1hdHRpbmcgbWF0Y2hlcyBGaXJlZm94LgotICAgIG1faWQgPSBTdHJpbmc6OmZvcm1hdCgiJXgt
JXgtJXMiLCB2ZW5kb3JJRCwgcHJvZHVjdElELCBwcm9kdWN0TmFtZS51dGY4KCkuZGF0YSgpKTsK
LQotICAgIGluaXRFbGVtZW50cygpOwotfQotCi12b2lkIEhJREdhbWVwYWQ6OmdldEN1cnJlbnRW
YWx1ZUZvckVsZW1lbnQoY29uc3QgSElER2FtZXBhZEVsZW1lbnQmIGdhbWVwYWRFbGVtZW50KQot
ewotICAgIElPSElERWxlbWVudFJlZiBlbGVtZW50ID0gZ2FtZXBhZEVsZW1lbnQuaW9oaWRFbGVt
ZW50LmdldCgpOwotICAgIElPSElEVmFsdWVSZWYgdmFsdWU7Ci0gICAgaWYgKElPSElERGV2aWNl
R2V0VmFsdWUoSU9ISURFbGVtZW50R2V0RGV2aWNlKGVsZW1lbnQpLCBlbGVtZW50LCAmdmFsdWUp
ID09IGtJT1JldHVyblN1Y2Nlc3MpCi0gICAgICAgIHZhbHVlQ2hhbmdlZCh2YWx1ZSk7Ci19Ci0K
LXZvaWQgSElER2FtZXBhZDo6aW5pdEVsZW1lbnRzKCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZBcnJh
eVJlZj4gZWxlbWVudHMgPSBhZG9wdENGKElPSElERGV2aWNlQ29weU1hdGNoaW5nRWxlbWVudHMo
bV9oaWREZXZpY2UuZ2V0KCksIE5VTEwsIGtJT0hJRE9wdGlvbnNUeXBlTm9uZSkpOwotICAgIGlu
aXRFbGVtZW50c0Zyb21BcnJheShlbGVtZW50cy5nZXQoKSk7Ci0KLSAgICAvLyBCdXR0b25zIGFy
ZSBzcGVjaWZpZWQgdG8gYXBwZWFyIGhpZ2hlc3QgcHJpb3JpdHkgZmlyc3QgaW4gdGhlIGFycmF5
LgotICAgIHN0ZDo6c29ydChtX2J1dHRvbnMuYmVnaW4oKSwgbV9idXR0b25zLmVuZCgpLCBbXShh
dXRvJiBhLCBhdXRvJiBiKSB7Ci0gICAgICAgIHJldHVybiBhLT5wcmlvcml0eSA8IGItPnByaW9y
aXR5OwotICAgIH0pOwotCi0gICAgbV9heGlzVmFsdWVzLnJlc2l6ZShtX2F4ZXMuc2l6ZSgpKTsK
LSAgICBtX2J1dHRvblZhbHVlcy5yZXNpemUobV9idXR0b25zLnNpemUoKSk7Ci0KLSAgICBmb3Ig
KGF1dG8mIGJ1dHRvbiA6IG1fYnV0dG9ucykKLSAgICAgICAgZ2V0Q3VycmVudFZhbHVlRm9yRWxl
bWVudCgqYnV0dG9uKTsKLQotICAgIGZvciAoYXV0byYgYXhpcyA6IG1fYXhlcykKLSAgICAgICAg
Z2V0Q3VycmVudFZhbHVlRm9yRWxlbWVudCgqYXhpcyk7Ci19Ci0KLXZvaWQgSElER2FtZXBhZDo6
aW5pdEVsZW1lbnRzRnJvbUFycmF5KENGQXJyYXlSZWYgZWxlbWVudHMpCi17Ci0gICAgZm9yIChD
RkluZGV4IGkgPSAwLCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChlbGVtZW50cyk7IGkgPCBjb3Vu
dDsgKytpKSB7Ci0gICAgICAgIElPSElERWxlbWVudFJlZiBlbGVtZW50ID0gKElPSElERWxlbWVu
dFJlZilDRkFycmF5R2V0VmFsdWVBdEluZGV4KGVsZW1lbnRzLCBpKTsKLSAgICAgICAgaWYgKENG
R2V0VHlwZUlEKGVsZW1lbnQpICE9IElPSElERWxlbWVudEdldFR5cGVJRCgpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gQXMgYSBwaHlzaWNhbCBlbGVtZW50IGNhbiBhcHBl
YXIgaW4gdGhlIGRldmljZSB0d2ljZSAoaW4gZGlmZmVyZW50IGNvbGxlY3Rpb25zKSBhbmQgY2Fu
IGJlCi0gICAgICAgIC8vIHJlcHJlc2VudGVkIGJ5IGRpZmZlcmVudCBJT0hJREVsZW1lbnRSZWYg
b2JqZWN0cywgd2UgbG9vayBhdCB0aGUgSU9ISURFbGVtZW50Q29va2llIHdoaWNoCi0gICAgICAg
IC8vIGlzIG1lYW50IHRvIGJlIHVuaXF1ZSBmb3IgZWFjaCBwaHlzaWNhbCBlbGVtZW50LgotICAg
ICAgICBJT0hJREVsZW1lbnRDb29raWUgY29va2llID0gSU9ISURFbGVtZW50R2V0Q29va2llKGVs
ZW1lbnQpOwotICAgICAgICBpZiAobV9lbGVtZW50TWFwLmNvbnRhaW5zKGNvb2tpZSkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBJT0hJREVsZW1lbnRUeXBlIHR5cGUgPSBJT0hJ
REVsZW1lbnRHZXRUeXBlKGVsZW1lbnQpOwotCi0gICAgICAgIGlmICgodHlwZSA9PSBrSU9ISURF
bGVtZW50VHlwZUlucHV0X01pc2MgfHwgdHlwZSA9PSBrSU9ISURFbGVtZW50VHlwZUlucHV0X0J1
dHRvbikgJiYgbWF5YmVBZGRCdXR0b24oZWxlbWVudCkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBpZiAoKHR5cGUgPT0ga0lPSElERWxlbWVudFR5cGVJbnB1dF9NaXNjIHx8IHR5
cGUgPT0ga0lPSElERWxlbWVudFR5cGVJbnB1dF9BeGlzKSAmJiBtYXliZUFkZEF4aXMoZWxlbWVu
dCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAodHlwZSA9PSBrSU9ISURF
bGVtZW50VHlwZUNvbGxlY3Rpb24pCi0gICAgICAgICAgICBpbml0RWxlbWVudHNGcm9tQXJyYXko
SU9ISURFbGVtZW50R2V0Q2hpbGRyZW4oZWxlbWVudCkpOwotICAgIH0KLX0KLQotYm9vbCBISURH
YW1lcGFkOjptYXliZUFkZEJ1dHRvbihJT0hJREVsZW1lbnRSZWYgZWxlbWVudCkKLXsKLSAgICB1
aW50MzJfdCB1c2FnZVBhZ2UgPSBJT0hJREVsZW1lbnRHZXRVc2FnZVBhZ2UoZWxlbWVudCk7Ci0g
ICAgaWYgKHVzYWdlUGFnZSAhPSBrSElEUGFnZV9CdXR0b24pCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHVpbnQzMl90IHVzYWdlID0gSU9ISURFbGVtZW50R2V0VXNhZ2UoZWxlbWVudCk7
Ci0gICAgaWYgKCF1c2FnZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ0ZJbmRleCBt
aW4gPSBJT0hJREVsZW1lbnRHZXRMb2dpY2FsTWluKGVsZW1lbnQpOwotICAgIENGSW5kZXggbWF4
ID0gSU9ISURFbGVtZW50R2V0TG9naWNhbE1heChlbGVtZW50KTsKLQotICAgIG1fYnV0dG9ucy5h
cHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxISURHYW1lcGFkQnV0dG9uPih1c2FnZSwgbWluLCBtYXgs
IGVsZW1lbnQpKTsKLQotICAgIElPSElERWxlbWVudENvb2tpZSBjb29raWUgPSBJT0hJREVsZW1l
bnRHZXRDb29raWUoZWxlbWVudCk7Ci0gICAgbV9lbGVtZW50TWFwLnNldChjb29raWUsIG1fYnV0
dG9ucy5sYXN0KCkuZ2V0KCkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSElER2Ft
ZXBhZDo6bWF5YmVBZGRBeGlzKElPSElERWxlbWVudFJlZiBlbGVtZW50KQotewotICAgIHVpbnQz
Ml90IHVzYWdlUGFnZSA9IElPSElERWxlbWVudEdldFVzYWdlUGFnZShlbGVtZW50KTsKLSAgICBp
ZiAodXNhZ2VQYWdlICE9IGtISURQYWdlX0dlbmVyaWNEZXNrdG9wKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICB1aW50MzJfdCB1c2FnZSA9IElPSElERWxlbWVudEdldFVzYWdlKGVsZW1l
bnQpOwotICAgIC8vIFRoaXMgcmFuZ2UgY292ZXJzIHRoZSBzdGFuZGFyZCBheGlzIHVzYWdlcy4K
LSAgICBpZiAodXNhZ2UgPCBrSElEVXNhZ2VfR0RfWCB8fCB1c2FnZSA+IGtISURVc2FnZV9HRF9S
eikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQ0ZJbmRleCBtaW4gPSBJT0hJREVsZW1l
bnRHZXRQaHlzaWNhbE1pbihlbGVtZW50KTsKLSAgICBDRkluZGV4IG1heCA9IElPSElERWxlbWVu
dEdldFBoeXNpY2FsTWF4KGVsZW1lbnQpOwotCi0gICAgbV9heGVzLmFwcGVuZChzdGQ6Om1ha2Vf
dW5pcXVlPEhJREdhbWVwYWRBeGlzPihtaW4sIG1heCwgZWxlbWVudCkpOwotCi0gICAgSU9ISURF
bGVtZW50Q29va2llIGNvb2tpZSA9IElPSElERWxlbWVudEdldENvb2tpZShlbGVtZW50KTsKLSAg
ICBtX2VsZW1lbnRNYXAuc2V0KGNvb2tpZSwgbV9heGVzLmxhc3QoKS5nZXQoKSk7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBISURHYW1lcGFkOjp2YWx1ZUNoYW5nZWQoSU9ISURWYWx1
ZVJlZiB2YWx1ZSkKLXsKLSAgICBJT0hJREVsZW1lbnRDb29raWUgY29va2llID0gSU9ISURFbGVt
ZW50R2V0Q29va2llKElPSElEVmFsdWVHZXRFbGVtZW50KHZhbHVlKSk7Ci0gICAgSElER2FtZXBh
ZEVsZW1lbnQqIGVsZW1lbnQgPSBtX2VsZW1lbnRNYXAuZ2V0KGNvb2tpZSk7Ci0KLSAgICAvLyBU
aGlzIG1pZ2h0IGJlIGFuIGVsZW1lbnQgd2UgZG9uJ3QgY3VycmVudGx5IGhhbmRsZSBhcyBpbnB1
dCBzbyB3ZSBjYW4gc2tpcCBpdC4KLSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGVsZW1lbnQtPnJhd1ZhbHVlID0gSU9ISURWYWx1ZUdldFNjYWxlZFZhbHVlKHZhbHVl
LCBrSU9ISURWYWx1ZVNjYWxlVHlwZVBoeXNpY2FsKTsKLQotICAgIGlmIChlbGVtZW50LT5pc0J1
dHRvbigpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2J1dHRvbnMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChtX2J1dHRvbnNbaV0uZ2V0KCkgPT0gZWxlbWVu
dCkKLSAgICAgICAgICAgICAgICBtX2J1dHRvblZhbHVlc1tpXSA9IGVsZW1lbnQtPm5vcm1hbGl6
ZWRWYWx1ZSgpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChlbGVtZW50LT5pc0F4aXMoKSkg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9heGVzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBpZiAobV9heGVzW2ldLmdldCgpID09IGVsZW1lbnQpCi0gICAgICAgICAg
ICAgICAgbV9heGlzVmFsdWVzW2ldID0gZWxlbWVudC0+bm9ybWFsaXplZFZhbHVlKCk7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICBt
X2xhc3RVcGRhdGVUaW1lID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShHQU1FUEFEKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJREdhbWVwYWQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9ISURHYW1lcGFkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDE0Mzk0Nzg4ODgxYTRiMDQ0YjZhOGY3ZTdjMmYwYThhYTcxNDBlZGEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL0hJREdhbWVwYWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyOCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBISURHYW1lcGFkX2gKLSNkZWZpbmUgSElER2FtZXBhZF9oCi0K
LSNpZiBFTkFCTEUoR0FNRVBBRCkKLQotI2luY2x1ZGUgIlBsYXRmb3JtR2FtZXBhZC5oIgotI2lu
Y2x1ZGUgPElPS2l0L2hpZC9JT0hJRERldmljZS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
cnVjdCBISURHYW1lcGFkRWxlbWVudCB7Ci0gICAgSElER2FtZXBhZEVsZW1lbnQoZG91YmxlIHRo
ZU1pbiwgZG91YmxlIHRoZU1heCwgSU9ISURFbGVtZW50UmVmIGVsZW1lbnQpCi0gICAgICAgIDog
bWluKHRoZU1pbikKLSAgICAgICAgLCBtYXgodGhlTWF4KQotICAgICAgICAsIHJhd1ZhbHVlKHRo
ZU1pbikKLSAgICAgICAgLCBpb2hpZEVsZW1lbnQoZWxlbWVudCkKLSAgICB7Ci0gICAgfQotICAg
IAotICAgIHZpcnR1YWwgfkhJREdhbWVwYWRFbGVtZW50KCkKLSAgICB7Ci0gICAgfQotCi0gICAg
ZG91YmxlIG1pbjsKLSAgICBkb3VibGUgbWF4OwotICAgIGRvdWJsZSByYXdWYWx1ZTsKLSAgICBS
ZXRhaW5QdHI8SU9ISURFbGVtZW50UmVmPiBpb2hpZEVsZW1lbnQ7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgaXNCdXR0b24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBp
c0F4aXMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgdmlydHVhbCBkb3VibGUgbm9y
bWFsaXplZFZhbHVlKCkgPSAwOwotfTsKLQotc3RydWN0IEhJREdhbWVwYWRCdXR0b24gOiBISURH
YW1lcGFkRWxlbWVudCB7Ci0gICAgSElER2FtZXBhZEJ1dHRvbih1aW50MzJfdCB0aGVQcmlvcml0
eSwgZG91YmxlIG1pbiwgZG91YmxlIG1heCwgSU9ISURFbGVtZW50UmVmIGVsZW1lbnQpCi0gICAg
ICAgIDogSElER2FtZXBhZEVsZW1lbnQobWluLCBtYXgsIGVsZW1lbnQpCi0gICAgICAgICwgcHJp
b3JpdHkodGhlUHJpb3JpdHkpCi0gICAgewotICAgIH0KLQotICAgIHVpbnQzMl90IHByaW9yaXR5
OwotCi0gICAgYm9vbCBpc0J1dHRvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0K
LQotICAgIC8vIEJ1dHRvbnMgbm9ybWFsaXplIHRvIHRoZSByYW5nZSAoMC4wKSAtICgxLjApCi0g
ICAgZG91YmxlIG5vcm1hbGl6ZWRWYWx1ZSgpIG92ZXJyaWRlCi0gICAgewotICAgICAgICByZXR1
cm4gKHJhd1ZhbHVlIC0gbWluKSAvIChtYXggLSBtaW4pOwotICAgIH0KLX07Ci0KLXN0cnVjdCBI
SURHYW1lcGFkQXhpcyA6IEhJREdhbWVwYWRFbGVtZW50IHsKLSAgICBISURHYW1lcGFkQXhpcyhk
b3VibGUgbWluLCBkb3VibGUgbWF4LCBJT0hJREVsZW1lbnRSZWYgZWxlbWVudCkKLSAgICAgICAg
OiBISURHYW1lcGFkRWxlbWVudChtaW4sIG1heCwgZWxlbWVudCkKLSAgICB7Ci0gICAgfQotCi0g
ICAgYm9vbCBpc0F4aXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAv
LyBBeGVzIG5vcm1hbGl6ZSB0byB0aGUgcmFuZ2UgKC0xLjApIC0gKDEuMCkKLSAgICBkb3VibGUg
bm9ybWFsaXplZFZhbHVlKCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIHJldHVybiAoKChyYXdW
YWx1ZSAtIG1pbikgLyAobWF4IC0gbWluKSkgKiAyKSAtIDE7Ci0gICAgfQotfTsKLQotY2xhc3Mg
SElER2FtZXBhZCA6IHB1YmxpYyBQbGF0Zm9ybUdhbWVwYWQgewotcHVibGljOgotICAgIEhJREdh
bWVwYWQoSU9ISUREZXZpY2VSZWYsIHVuc2lnbmVkIGluZGV4KTsKLQotICAgIElPSElERGV2aWNl
UmVmIGhpZERldmljZSgpIGNvbnN0IHsgcmV0dXJuIG1faGlkRGV2aWNlLmdldCgpOyB9Ci0KLSAg
ICB2b2lkIHZhbHVlQ2hhbmdlZChJT0hJRFZhbHVlUmVmKTsKLQotICAgIGNvbnN0IFZlY3Rvcjxk
b3VibGU+JiBheGlzVmFsdWVzKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9heGlzVmFsdWVzOyB9
Ci0gICAgY29uc3QgVmVjdG9yPGRvdWJsZT4mIGJ1dHRvblZhbHVlcygpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fYnV0dG9uVmFsdWVzOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBpbml0RWxlbWVu
dHMoKTsKLSAgICB2b2lkIGluaXRFbGVtZW50c0Zyb21BcnJheShDRkFycmF5UmVmKTsKLQotICAg
IGJvb2wgbWF5YmVBZGRCdXR0b24oSU9ISURFbGVtZW50UmVmKTsKLSAgICBib29sIG1heWJlQWRk
QXhpcyhJT0hJREVsZW1lbnRSZWYpOwotCi0gICAgdm9pZCBnZXRDdXJyZW50VmFsdWVGb3JFbGVt
ZW50KGNvbnN0IEhJREdhbWVwYWRFbGVtZW50Jik7Ci0KLSAgICBSZXRhaW5QdHI8SU9ISUREZXZp
Y2VSZWY+IG1faGlkRGV2aWNlOwotCi0gICAgSGFzaE1hcDxJT0hJREVsZW1lbnRDb29raWUsIEhJ
REdhbWVwYWRFbGVtZW50Kj4gbV9lbGVtZW50TWFwOwotCi0gICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxISURHYW1lcGFkQnV0dG9uPj4gbV9idXR0b25zOwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8SElER2FtZXBhZEF4aXM+PiBtX2F4ZXM7Ci0gICAgVmVjdG9yPGRvdWJsZT4gbV9idXR0
b25WYWx1ZXM7Ci0gICAgVmVjdG9yPGRvdWJsZT4gbV9heGlzVmFsdWVzOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCi0jZW5kaWYgLy8g
SElER2FtZXBhZF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElE
R2FtZXBhZFByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9ISURHYW1l
cGFkUHJvdmlkZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjQ0MWU2ZmFi
ZjZiN2IwOWE3NjRiNjYyM2JiMmM0MzQ4NmEwY2Q1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9ISURHYW1l
cGFkUHJvdmlkZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjU0ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSElER2FtZXBhZFByb3ZpZGVyLmgi
Ci0KLSNpZiBFTkFCTEUoR0FNRVBBRCkKLQotI2luY2x1ZGUgIkdhbWVwYWRQcm92aWRlckNsaWVu
dC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUdhbWVwYWQuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgZG91YmxlIENvbm5lY3Rpb25E
ZWxheUludGVydmFsID0gMC41Owotc3RhdGljIGNvbnN0IGRvdWJsZSBJbnB1dE5vdGlmaWNhdGlv
bkRlbGF5ID0gMC4wNTsKLQotc3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGRldmlj
ZU1hdGNoaW5nRGljdGlvbmFyeSh1aW50MzJfdCB1c2FnZVBhZ2UsIHVpbnQzMl90IHVzYWdlKQot
ewotICAgIEFTU0VSVCh1c2FnZVBhZ2UpOwotICAgIEFTU0VSVCh1c2FnZSk7Ci0KLSAgICBSZXRh
aW5QdHI8Q0ZOdW1iZXJSZWY+IHBhZ2VOdW1iZXIgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZ1c2FnZVBhZ2UpKTsKLSAgICBS
ZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHVzYWdlTnVtYmVyID0gYWRvcHRDRihDRk51bWJlckNyZWF0
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmdXNhZ2UpKTsKLQotICAg
IENGU3RyaW5nUmVmIGtleXNbXSA9IHsgQ0ZTVFIoa0lPSElERGV2aWNlVXNhZ2VQYWdlS2V5KSwg
Q0ZTVFIoa0lPSElERGV2aWNlVXNhZ2VLZXkpIH07Ci0gICAgQ0ZOdW1iZXJSZWYgdmFsdWVzW10g
PSB7IHBhZ2VOdW1iZXIuZ2V0KCksIHVzYWdlTnVtYmVyLmdldCgpIH07Ci0KLSAgICByZXR1cm4g
YWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKGNvbnN0IHZv
aWQqKilrZXlzLCAoY29uc3Qgdm9pZCoqKXZhbHVlcywgMiwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5
Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotfQotCi1zdGF0
aWMgdm9pZCBkZXZpY2VBZGRlZENhbGxiYWNrKHZvaWQqIGNvbnRleHQsIElPUmV0dXJuLCB2b2lk
KiwgSU9ISUREZXZpY2VSZWYgZGV2aWNlKQotewotICAgIEhJREdhbWVwYWRQcm92aWRlciogbGlz
dGVuZXIgPSBzdGF0aWNfY2FzdDxISURHYW1lcGFkUHJvdmlkZXIqPihjb250ZXh0KTsKLSAgICBs
aXN0ZW5lci0+ZGV2aWNlQWRkZWQoZGV2aWNlKTsKLX0KLQotc3RhdGljIHZvaWQgZGV2aWNlUmVt
b3ZlZENhbGxiYWNrKHZvaWQqIGNvbnRleHQsIElPUmV0dXJuLCB2b2lkKiwgSU9ISUREZXZpY2VS
ZWYgZGV2aWNlKQotewotICAgIEhJREdhbWVwYWRQcm92aWRlciogbGlzdGVuZXIgPSBzdGF0aWNf
Y2FzdDxISURHYW1lcGFkUHJvdmlkZXIqPihjb250ZXh0KTsKLSAgICBsaXN0ZW5lci0+ZGV2aWNl
UmVtb3ZlZChkZXZpY2UpOwotfQotCi1zdGF0aWMgdm9pZCBkZXZpY2VWYWx1ZXNDaGFuZ2VkQ2Fs
bGJhY2sodm9pZCogY29udGV4dCwgSU9SZXR1cm4gcmVzdWx0LCB2b2lkKiwgSU9ISURWYWx1ZVJl
ZiB2YWx1ZSkKLXsKLSAgICAvLyBBIG5vbi16ZXJvIHJlc3VsdCB2YWx1ZSBpbmRpY2F0ZXMgYW4g
ZXJyb3IgdGhhdCB3ZSBjYW4gZG8gbm90aGluZyBhYm91dCBmb3IgaW5wdXQgdmFsdWVzLgotICAg
IGlmIChyZXN1bHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhJREdhbWVwYWRQcm92aWRlciog
bGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxISURHYW1lcGFkUHJvdmlkZXIqPihjb250ZXh0KTsKLSAg
ICBsaXN0ZW5lci0+dmFsdWVzQ2hhbmdlZCh2YWx1ZSk7Ci19Ci0KLUhJREdhbWVwYWRQcm92aWRl
ciYgSElER2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKQotewotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxISURHYW1lcGFkUHJvdmlkZXI+IHNoYXJlZExpc3RlbmVyOwotICAgIHJldHVybiBz
aGFyZWRMaXN0ZW5lcjsKLX0KLQotSElER2FtZXBhZFByb3ZpZGVyOjpISURHYW1lcGFkUHJvdmlk
ZXIoKQotICAgIDogbV9zaG91bGREaXNwYXRjaENhbGxiYWNrcyhmYWxzZSkKLSAgICAsIG1fY29u
bmVjdGlvbkRlbGF5VGltZXIoKnRoaXMsICZISURHYW1lcGFkUHJvdmlkZXI6OmNvbm5lY3Rpb25E
ZWxheVRpbWVyRmlyZWQpCi0gICAgLCBtX2lucHV0Tm90aWZpY2F0aW9uVGltZXIoKnRoaXMsICZI
SURHYW1lcGFkUHJvdmlkZXI6OmlucHV0Tm90aWZpY2F0aW9uVGltZXJGaXJlZCkKLXsKLSAgICBt
X21hbmFnZXIgPSBhZG9wdENGKElPSElETWFuYWdlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBrSU9ISURPcHRpb25zVHlwZU5vbmUpKTsKLQotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlS
ZWY+IGpveXN0aWNrRGljdGlvbmFyeSA9IGRldmljZU1hdGNoaW5nRGljdGlvbmFyeShrSElEUGFn
ZV9HZW5lcmljRGVza3RvcCwga0hJRFVzYWdlX0dEX0pveXN0aWNrKTsKLSAgICBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiBnYW1lcGFkRGljdGlvbmFyeSA9IGRldmljZU1hdGNoaW5nRGljdGlv
bmFyeShrSElEUGFnZV9HZW5lcmljRGVza3RvcCwga0hJRFVzYWdlX0dEX0dhbWVQYWQpOwotCi0g
ICAgQ0ZEaWN0aW9uYXJ5UmVmIGRldmljZXNbXSA9IHsgam95c3RpY2tEaWN0aW9uYXJ5LmdldCgp
LCBnYW1lcGFkRGljdGlvbmFyeS5nZXQoKSB9OwotCi0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+
IG1hdGNoaW5nQXJyYXkgPSBhZG9wdENGKENGQXJyYXlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgKGNvbnN0IHZvaWQqKilkZXZpY2VzLCAyLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7Ci0K
LSAgICBJT0hJRE1hbmFnZXJTZXREZXZpY2VNYXRjaGluZ011bHRpcGxlKG1fbWFuYWdlci5nZXQo
KSwgbWF0Y2hpbmdBcnJheS5nZXQoKSk7Ci0gICAgSU9ISURNYW5hZ2VyUmVnaXN0ZXJEZXZpY2VN
YXRjaGluZ0NhbGxiYWNrKG1fbWFuYWdlci5nZXQoKSwgZGV2aWNlQWRkZWRDYWxsYmFjaywgdGhp
cyk7Ci0gICAgSU9ISURNYW5hZ2VyUmVnaXN0ZXJEZXZpY2VSZW1vdmFsQ2FsbGJhY2sobV9tYW5h
Z2VyLmdldCgpLCBkZXZpY2VSZW1vdmVkQ2FsbGJhY2ssIHRoaXMpOwotICAgIElPSElETWFuYWdl
clJlZ2lzdGVySW5wdXRWYWx1ZUNhbGxiYWNrKG1fbWFuYWdlci5nZXQoKSwgZGV2aWNlVmFsdWVz
Q2hhbmdlZENhbGxiYWNrLCB0aGlzKTsKLX0KLQotdW5zaWduZWQgSElER2FtZXBhZFByb3ZpZGVy
OjppbmRleEZvck5ld2x5Q29ubmVjdGVkRGV2aWNlKCkKLXsKLSAgICB1bnNpZ25lZCBpbmRleCA9
IDA7Ci0gICAgd2hpbGUgKGluZGV4IDwgbV9nYW1lcGFkVmVjdG9yLnNpemUoKSAmJiBtX2dhbWVw
YWRWZWN0b3JbaW5kZXhdKQotICAgICAgICArK2luZGV4OwotCi0gICAgcmV0dXJuIGluZGV4Owot
fQotCi12b2lkIEhJREdhbWVwYWRQcm92aWRlcjo6Y29ubmVjdGlvbkRlbGF5VGltZXJGaXJlZCgp
Ci17Ci0gICAgbV9zaG91bGREaXNwYXRjaENhbGxiYWNrcyA9IHRydWU7Ci19Ci0KLXZvaWQgSElE
R2FtZXBhZFByb3ZpZGVyOjpvcGVuQW5kU2NoZWR1bGVNYW5hZ2VyKCkKLXsKLSAgICBMT0coR2Ft
ZXBhZCwgIkhJREdhbWVwYWRQcm92aWRlciBvcGVuaW5nL3NjaGVkdWxpbmcgSElEIG1hbmFnZXIi
KTsKLQotICAgIEFTU0VSVChtX2dhbWVwYWRWZWN0b3IuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQo
bV9nYW1lcGFkTWFwLmlzRW1wdHkoKSk7Ci0KLSAgICBtX3Nob3VsZERpc3BhdGNoQ2FsbGJhY2tz
ID0gZmFsc2U7Ci0KLSAgICBJT0hJRE1hbmFnZXJTY2hlZHVsZVdpdGhSdW5Mb29wKG1fbWFuYWdl
ci5nZXQoKSwgQ0ZSdW5Mb29wR2V0Q3VycmVudCgpLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwot
ICAgIElPSElETWFuYWdlck9wZW4obV9tYW5hZ2VyLmdldCgpLCBrSU9ISURPcHRpb25zVHlwZU5v
bmUpOwotCi0gICAgLy8gQW55IGNvbm5lY3Rpb25zIHdlIGFyZSBub3RpZmllZCBvZiB3aXRoaW4g
dGhlIENvbm5lY3Rpb25EZWxheUludGVydmFsIG9mIGxpc3RlbmluZyBsaWtlbHkgcmVwcmVzZW50
Ci0gICAgLy8gZGV2aWNlcyB0aGF0IHdlcmUgYWxyZWFkeSBjb25uZWN0ZWQsIHNvIHdlIHN1cHBy
ZXNzIG5vdGlmeWluZyBjbGllbnRzIG9mIHRoZXNlLgotICAgIG1fY29ubmVjdGlvbkRlbGF5VGlt
ZXIuc3RhcnRPbmVTaG90KENvbm5lY3Rpb25EZWxheUludGVydmFsKTsKLX0KLQotdm9pZCBISURH
YW1lcGFkUHJvdmlkZXI6OmNsb3NlQW5kVW5zY2hlZHVsZU1hbmFnZXIoKQotewotICAgIExPRyhH
YW1lcGFkLCAiSElER2FtZXBhZFByb3ZpZGVyIGNsb3NpbmcvdW5zY2hlZHVsaW5nIEhJRCBtYW5h
Z2VyIik7Ci0KLSAgICBJT0hJRE1hbmFnZXJVbnNjaGVkdWxlRnJvbVJ1bkxvb3AobV9tYW5hZ2Vy
LmdldCgpLCBDRlJ1bkxvb3BHZXRDdXJyZW50KCksIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7Ci0g
ICAgSU9ISURNYW5hZ2VyQ2xvc2UobV9tYW5hZ2VyLmdldCgpLCBrSU9ISURPcHRpb25zVHlwZU5v
bmUpOwotCi0gICAgbV9nYW1lcGFkVmVjdG9yLmNsZWFyKCk7Ci0gICAgbV9nYW1lcGFkTWFwLmNs
ZWFyKCk7Ci0KLSAgICBtX2Nvbm5lY3Rpb25EZWxheVRpbWVyLnN0b3AoKTsKLX0KLQotdm9pZCBI
SURHYW1lcGFkUHJvdmlkZXI6OnN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRl
ckNsaWVudCogY2xpZW50KQotewotICAgIGJvb2wgc2hvdWxkT3BlbkFuZFNjaGVkdWxlTWFuYWdl
ciA9IG1fY2xpZW50cy5pc0VtcHR5KCk7Ci0KLSAgICBBU1NFUlQoIW1fY2xpZW50cy5jb250YWlu
cyhjbGllbnQpKTsKLSAgICBtX2NsaWVudHMuYWRkKGNsaWVudCk7Ci0KLSAgICBpZiAoc2hvdWxk
T3BlbkFuZFNjaGVkdWxlTWFuYWdlcikKLSAgICAgICAgb3BlbkFuZFNjaGVkdWxlTWFuYWdlcigp
OwotfQotdm9pZCBISURHYW1lcGFkUHJvdmlkZXI6OnN0b3BNb25pdG9yaW5nR2FtZXBhZHMoR2Ft
ZXBhZFByb3ZpZGVyQ2xpZW50KiBjbGllbnQpCi17Ci0gICAgQVNTRVJUKG1fY2xpZW50cy5jb250
YWlucyhjbGllbnQpKTsKLQotICAgIGJvb2wgc2hvdWxkQ2xvc2VBbmRVbnNjaGVkdWxlTWFuYWdl
ciA9IG1fY2xpZW50cy5yZW1vdmUoY2xpZW50KSAmJiBtX2NsaWVudHMuaXNFbXB0eSgpOwotCi0g
ICAgaWYgKHNob3VsZENsb3NlQW5kVW5zY2hlZHVsZU1hbmFnZXIpCi0gICAgICAgIGNsb3NlQW5k
VW5zY2hlZHVsZU1hbmFnZXIoKTsKLX0KLQotdm9pZCBISURHYW1lcGFkUHJvdmlkZXI6OmRldmlj
ZUFkZGVkKElPSElERGV2aWNlUmVmIGRldmljZSkKLXsKLSAgICBBU1NFUlQoIW1fZ2FtZXBhZE1h
cC5nZXQoZGV2aWNlKSk7Ci0KLSAgICBMT0coR2FtZXBhZCwgIkhJREdhbWVwYWRQcm92aWRlciBk
ZXZpY2UgJXAgYWRkZWQiLCBkZXZpY2UpOwotCi0gICAgdW5zaWduZWQgaW5kZXggPSBpbmRleEZv
ck5ld2x5Q29ubmVjdGVkRGV2aWNlKCk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEhJREdhbWVwYWQ+
IGdhbWVwYWQgPSBzdGQ6Om1ha2VfdW5pcXVlPEhJREdhbWVwYWQ+KGRldmljZSwgaW5kZXgpOwot
Ci0gICAgaWYgKG1fZ2FtZXBhZFZlY3Rvci5zaXplKCkgPD0gaW5kZXgpCi0gICAgICAgIG1fZ2Ft
ZXBhZFZlY3Rvci5yZXNpemUoaW5kZXggKyAxKTsKLQotICAgIG1fZ2FtZXBhZFZlY3RvcltpbmRl
eF0gPSBnYW1lcGFkLmdldCgpOwotICAgIG1fZ2FtZXBhZE1hcC5zZXQoZGV2aWNlLCBXVEZNb3Zl
KGdhbWVwYWQpKTsKLQotICAgIGlmICghbV9zaG91bGREaXNwYXRjaENhbGxiYWNrcykgewotICAg
ICAgICAvLyBUaGlzIGFkZGVkIGRldmljZSBpcyB0aGUgcmVzdWx0IG9mIHVzIHN0YXJ0aW5nIHRv
IG1vbml0b3IgZ2FtZXBhZHMuCi0gICAgICAgIC8vIFdlJ2xsIGdldCBub3RpZmllZCBvZiBhbGwg
Y29ubmVjdGVkIGRldmljZXMgZHVyaW5nIHRoaXMgY3VycmVudCBzcGluIG9mIHRoZSBydW5sb29w
Ci0gICAgICAgIC8vIGFuZCB3ZSBkb24ndCB3YW50IHRvIHRlbGwgdGhlIGNsaWVudCBhYm91dCBh
bnkgb2YgdGhlbS4KLSAgICAgICAgLy8gVGhlIG1fY29ubmVjdGlvbkRlbGF5VGltZXIgZmlyZXMg
aW4gYSBzdWJzZXF1ZW50IHNwaW4gb2YgdGhlIHJ1bmxvb3AgYWZ0ZXIgd2hpY2gKLSAgICAgICAg
Ly8gYW55IGNvbm5lY3Rpb24gZXZlbnRzIGFyZSBhY3R1YWwgbmV3IGRldmljZXMuCi0gICAgICAg
IG1fY29ubmVjdGlvbkRlbGF5VGltZXIuc3RhcnRPbmVTaG90KDApOwotCi0gICAgICAgIExPRyhH
YW1lcGFkLCAiRGV2aWNlICVwIHdhcyBhZGRlZCB3aGlsZSBzdXBwcmVzc2luZyBjYWxsYmFja3Ms
IHNvIHRoaXMgc2hvdWxkIGJlIGFuICdhbHJlYWR5IGNvbm5lY3RlZCcgZXZlbnQiLCBkZXZpY2Up
OwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IG1f
Y2xpZW50cykKLSAgICAgICAgY2xpZW50LT5wbGF0Zm9ybUdhbWVwYWRDb25uZWN0ZWQoKm1fZ2Ft
ZXBhZFZlY3RvcltpbmRleF0pOwotfQotCi12b2lkIEhJREdhbWVwYWRQcm92aWRlcjo6ZGV2aWNl
UmVtb3ZlZChJT0hJRERldmljZVJlZiBkZXZpY2UpCi17Ci0gICAgTE9HKEdhbWVwYWQsICJISURH
YW1lcGFkUHJvdmlkZXIgZGV2aWNlICVwIHJlbW92ZWQiLCBkZXZpY2UpOwotCi0gICAgc3RkOjp1
bmlxdWVfcHRyPEhJREdhbWVwYWQ+IHJlbW92ZWRHYW1lcGFkID0gcmVtb3ZlR2FtZXBhZEZvckRl
dmljZShkZXZpY2UpOwotICAgIEFTU0VSVChyZW1vdmVkR2FtZXBhZCk7Ci0KLSAgICAvLyBBbnkg
dGltZSB3ZSBnZXQgYSBkZXZpY2UgcmVtb3ZlZCBjYWxsYmFjayB3ZSBrbm93IGl0J3MgYSByZWFs
IGV2ZW50IGFuZCBub3QgYW4gJ2FscmVhZHkgY29ubmVjdGVkJyBldmVudC4KLSAgICAvLyBXZSBz
aG91bGQgYWx3YXlzIHN0b3Agc3VwcHJlc3NpbmcgY2FsbGJhY2tzIHdoZW4gd2UgcmVjZWl2ZSBz
dWNoIGFuIGV2ZW50LgotICAgIG1fc2hvdWxkRGlzcGF0Y2hDYWxsYmFja3MgPSB0cnVlOwotCi0g
ICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2NsaWVudHMpCi0gICAgICAgIGNsaWVudC0+cGxhdGZv
cm1HYW1lcGFkRGlzY29ubmVjdGVkKCpyZW1vdmVkR2FtZXBhZCk7Ci19Ci0KLXZvaWQgSElER2Ft
ZXBhZFByb3ZpZGVyOjp2YWx1ZXNDaGFuZ2VkKElPSElEVmFsdWVSZWYgdmFsdWUpCi17Ci0gICAg
SU9ISUREZXZpY2VSZWYgZGV2aWNlID0gSU9ISURFbGVtZW50R2V0RGV2aWNlKElPSElEVmFsdWVH
ZXRFbGVtZW50KHZhbHVlKSk7Ci0KLSAgICBISURHYW1lcGFkKiBnYW1lcGFkID0gbV9nYW1lcGFk
TWFwLmdldChkZXZpY2UpOwotCi0gICAgLy8gV2hlbiBzdGFydGluZyBtb25pdG9yaW5nIHdlIG1p
Z2h0IGdldCBhIHZhbHVlIGNoYW5nZWQgY2FsbGJhY2sgYmVmb3JlIHdlIGV2ZW4ga25vdyB0aGUg
ZGV2aWNlIGlzIGNvbm5lY3RlZC4KLSAgICBpZiAoIWdhbWVwYWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGdhbWVwYWQtPnZhbHVlQ2hhbmdlZCh2YWx1ZSk7Ci0KLSAgICAvLyBUaGlzIGlzQWN0
aXZlIGNoZWNrIGlzIG5lY2Vzc2FyeSBhcyB3ZSB3YW50IHRvIGRlbGF5IGlucHV0IG5vdGlmaWNh
dGlvbnMgZnJvbSB0aGUgdGltZSBvZiB0aGUgZmlyc3QgaW5wdXQsCi0gICAgLy8gYW5kIG5vdCBw
dXNoIHRoZSBub3RpZmljYXRpb24gb3V0IG9uIGV2ZXJ5IHN1YnNlcXVlbnQgaW5wdXQuCi0gICAg
aWYgKCFtX2lucHV0Tm90aWZpY2F0aW9uVGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV9pbnB1
dE5vdGlmaWNhdGlvblRpbWVyLnN0YXJ0T25lU2hvdChJbnB1dE5vdGlmaWNhdGlvbkRlbGF5KTsK
LX0KLQotdm9pZCBISURHYW1lcGFkUHJvdmlkZXI6OmlucHV0Tm90aWZpY2F0aW9uVGltZXJGaXJl
ZCgpCi17Ci0gICAgaWYgKCFtX3Nob3VsZERpc3BhdGNoQ2FsbGJhY2tzKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBmb3IgKGF1dG8mIGNsaWVudCA6IG1fY2xpZW50cykKLSAgICAgICAgY2xpZW50
LT5wbGF0Zm9ybUdhbWVwYWRJbnB1dEFjdGl2aXR5KCk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxI
SURHYW1lcGFkPiBISURHYW1lcGFkUHJvdmlkZXI6OnJlbW92ZUdhbWVwYWRGb3JEZXZpY2UoSU9I
SUREZXZpY2VSZWYgZGV2aWNlKQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxISURHYW1lcGFkPiBy
ZXN1bHQgPSBtX2dhbWVwYWRNYXAudGFrZShkZXZpY2UpOwotICAgIEFTU0VSVChyZXN1bHQpOwot
Ci0gICAgYXV0byBpID0gbV9nYW1lcGFkVmVjdG9yLmZpbmQocmVzdWx0LmdldCgpKTsKLSAgICBp
ZiAoaSAhPSBub3RGb3VuZCkKLSAgICAgICAgbV9nYW1lcGFkVmVjdG9yW2ldID0gbnVsbHB0cjsK
LQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShHQU1FUEFEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL0hJREdhbWVwYWRQcm92aWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L0hJREdhbWVwYWRQcm92aWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTA2
OGRmNmJiMTlkNTQ1ODBiZDU3MTdlZjFhZDZjMzdlODkwOTNkLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9I
SURHYW1lcGFkUHJvdmlkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIEhJREdhbWVwYWRQcm92aWRlcl9oCi0jZGVmaW5lIEhJREdhbWVwYWRQ
cm92aWRlcl9oCi0KLSNpZiBFTkFCTEUoR0FNRVBBRCkKLQotI2luY2x1ZGUgIkdhbWVwYWRQcm92
aWRlci5oIgotI2luY2x1ZGUgIkhJREdhbWVwYWQuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2lu
Y2x1ZGUgPElPS2l0L2hpZC9JT0hJRE1hbmFnZXIuaD4KLSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4K
LSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEdhbWVwYWRQcm92aWRlckNsaWVudDsKLQot
Y2xhc3MgSElER2FtZXBhZFByb3ZpZGVyIDogcHVibGljIEdhbWVwYWRQcm92aWRlciB7Ci0gICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoSElER2FtZXBhZFByb3ZpZGVyKTsKLSAgICBmcmllbmQgY2xh
c3MgTmV2ZXJEZXN0cm95ZWQ8SElER2FtZXBhZFByb3ZpZGVyPjsKLXB1YmxpYzoKLSAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgSElER2FtZXBhZFByb3ZpZGVyJiBzaW5nbGV0b24oKTsKLQotICAg
IHZpcnR1YWwgdm9pZCBzdGFydE1vbml0b3JpbmdHYW1lcGFkcyhHYW1lcGFkUHJvdmlkZXJDbGll
bnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcE1vbml0b3JpbmdHYW1lcGFkcyhHYW1lcGFkUHJv
dmlkZXJDbGllbnQqKTsKLSAgICB2aXJ0dWFsIGNvbnN0IFZlY3RvcjxQbGF0Zm9ybUdhbWVwYWQq
PiYgcGxhdGZvcm1HYW1lcGFkcygpIHsgcmV0dXJuIG1fZ2FtZXBhZFZlY3RvcjsgfQotCi0gICAg
dm9pZCBkZXZpY2VBZGRlZChJT0hJRERldmljZVJlZik7Ci0gICAgdm9pZCBkZXZpY2VSZW1vdmVk
KElPSElERGV2aWNlUmVmKTsKLSAgICB2b2lkIHZhbHVlc0NoYW5nZWQoSU9ISURWYWx1ZVJlZik7
Ci0KLXByaXZhdGU6Ci0gICAgSElER2FtZXBhZFByb3ZpZGVyKCk7Ci0KLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8SElER2FtZXBhZD4gcmVtb3ZlR2FtZXBhZEZvckRldmljZShJT0hJRERldmljZVJlZik7
Ci0KLSAgICB2b2lkIG9wZW5BbmRTY2hlZHVsZU1hbmFnZXIoKTsKLSAgICB2b2lkIGNsb3NlQW5k
VW5zY2hlZHVsZU1hbmFnZXIoKTsKLQotICAgIHZvaWQgY29ubmVjdGlvbkRlbGF5VGltZXJGaXJl
ZCgpOwotICAgIHZvaWQgaW5wdXROb3RpZmljYXRpb25UaW1lckZpcmVkKCk7Ci0KLSAgICB1bnNp
Z25lZCBpbmRleEZvck5ld2x5Q29ubmVjdGVkRGV2aWNlKCk7Ci0KLSAgICBWZWN0b3I8UGxhdGZv
cm1HYW1lcGFkKj4gbV9nYW1lcGFkVmVjdG9yOwotICAgIEhhc2hNYXA8SU9ISUREZXZpY2VSZWYs
IHN0ZDo6dW5pcXVlX3B0cjxISURHYW1lcGFkPj4gbV9nYW1lcGFkTWFwOwotCi0gICAgUmV0YWlu
UHRyPElPSElETWFuYWdlclJlZj4gbV9tYW5hZ2VyOwotCi0gICAgSGFzaFNldDxHYW1lcGFkUHJv
dmlkZXJDbGllbnQqPiBtX2NsaWVudHM7Ci0gICAgYm9vbCBtX3Nob3VsZERpc3BhdGNoQ2FsbGJh
Y2tzOwotCi0gICAgVGltZXIgbV9jb25uZWN0aW9uRGVsYXlUaW1lcjsKLSAgICBUaW1lciBtX2lu
cHV0Tm90aWZpY2F0aW9uVGltZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoR0FNRVBBRCkKLSNlbmRpZiAvLyBISURHYW1lcGFkUHJvdmlkZXJfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>