<?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>219755</bug_id>
          
          <creation_ts>2020-12-10 12:36:00 -0800</creation_ts>
          <short_desc>[MSE] Refactor SourceBufferParserWebM in preparation for supporting audio</short_desc>
          <delta_ts>2020-12-24 14:31:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>220144</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1713664</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-12-10 12:36:00 -0800</bug_when>
    <thetext>Refactor SourceBufferParserWebM in preparation for supporting audio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713665</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-12-10 12:36:16 -0800</bug_when>
    <thetext>&lt;rdar://problem/72192625&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713671</commentid>
    <comment_count>2</comment_count>
      <attachid>415913</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-12-10 12:47:11 -0800</bug_when>
    <thetext>Created attachment 415913
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713681</commentid>
    <comment_count>3</comment_count>
      <attachid>415916</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-12-10 12:59:25 -0800</bug_when>
    <thetext>Created attachment 415916
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713692</commentid>
    <comment_count>4</comment_count>
      <attachid>415920</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-12-10 13:20:44 -0800</bug_when>
    <thetext>Created attachment 415920
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713700</commentid>
    <comment_count>5</comment_count>
      <attachid>415923</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-12-10 13:41:45 -0800</bug_when>
    <thetext>Created attachment 415923
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713703</commentid>
    <comment_count>6</comment_count>
      <attachid>415924</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-12-10 13:50:59 -0800</bug_when>
    <thetext>Created attachment 415924
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713706</commentid>
    <comment_count>7</comment_count>
      <attachid>415926</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-12-10 13:58:31 -0800</bug_when>
    <thetext>Created attachment 415926
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713715</commentid>
    <comment_count>8</comment_count>
      <attachid>415929</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-12-10 14:14:01 -0800</bug_when>
    <thetext>Created attachment 415929
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713749</commentid>
    <comment_count>9</comment_count>
      <attachid>415940</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2020-12-10 15:37:11 -0800</bug_when>
    <thetext>Created attachment 415940
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713770</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-12-10 16:46:12 -0800</bug_when>
    <thetext>Committed r270662: &lt;https://trac.webkit.org/changeset/270662&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 415940.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415913</attachid>
            <date>2020-12-10 12:47:11 -0800</date>
            <delta_ts>2020-12-10 13:01:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219755-20201210124710.patch</filename>
            <type>text/plain</type>
            <size>84973</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwNjM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGE5YjdjY2JmMTY3YWI0
M2I1YWYzZWIzZmI0Y2QzMDM2MTdiZmI3ZS4uZDBmZTg1NmUyNmI0NDdlZjg0MGFiOThlM2M2ZjFk
YTU0ZWEzOTkzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDIwLTEyLTEwICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNU0VdIFJlZmFj
dG9yIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gaW4gcHJlcGFyYXRpb24gZm9yIHN1cHBvcnRpbmcg
YXVkaW8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
OTc1NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzIxOTI2MjU+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3IgdGhlIFdlYk0gcGFyc2Vy
IGluIHByZXBhcmF0aW9uIGZvciBzdXBwb3J0aW5nIGF1ZGlvOiBtb3ZlIFZQOS1zcGVjaWZpYyBj
b2RlCisgICAgICAgIGludG8gVlA5VXRpbGl0aWVzQ29jb2EsIGNvbnZlcnQgVHJhY2tEYXRhIGZy
b20gYSBzdHJ1Y3QgdG8gYSBjbGFzcyBhbmQgbWFkZSBkZXJpdmVkCisgICAgICAgIGNsYXNzZXMg
Zm9yIGF1ZGlvIGFuZCB2aWRlbywgYWRkIHN0dWIgZnVuY3Rpb24gdG8gY3JlYXRlIGZvcm1hdCBk
ZXNjcmlwdGlvbnMgZm9yIAorICAgICAgICBWb3JiaXMgYW5kIE9wdXMgYXVkaW8uCisKKyAgICAg
ICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKworICAgICAgICAqIHBsYXRmb3JtL2NvY29hL01lZGlhVXRpbGl0aWVzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24pOiBBZGQg
b3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgbWFnaWMgY29va2llLgorICAgICAgICAqIHBsYXRmb3Jt
L2NvY29hL01lZGlhVXRpbGl0aWVzLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OmlzQ29udGVudFR5cGVTdXBwb3J0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnJlc2V0UGFyc2VyU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6dHJhY2tEYXRhRm9yVHJhY2tOdW1iZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25UcmFja0VudHJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cHJvdmlkZU1lZGlhRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0
YTo6Y29uc3VtZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJh
bWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlv
VHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6Zmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldE1pbmltdW1BdWRpb1NhbXBsZUR1cmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NvbG9yUHJpbWFyaWVzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NNQ29sb3JQcmltYXJpZXMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01UcmFuc2ZlckZ1bmN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb01hdHJpeENvZWZmaWNpZW50cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9DTVlDYkNSTWF0cml4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJz
YW1wbGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGb3JtYXREZXNjcmlw
dGlvbkZyb21WUDlIZWFkZXJQYXJzZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKGlzVHlwZSk6
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1t
OgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ29sb3JQcmltYXJpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Y29udmVydFRvQ01Db2xvclByaW1hcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpj
b252ZXJ0VG9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpjb252
ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvTWF0
cml4Q29lZmZpY2llbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NNWUNiQ1JNYXRy
aXgpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFN1YnNhbXBsaW5nWFlUb0Nocm9tYVN1YnNh
bXBsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQ
OUhlYWRlclBhcnNlcik6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJN
QXVkaW9VdGlsaXRpZXNDb2NvYS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpyZWdpc3RlckRlY29kZXJGYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF1
ZGlvRm9ybWF0RGVzY3JpcHRpb25Gb3JGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2ll
RnJvbU9wdXNDb2RlY1ByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNPcHVzRGVjb2RlckF2
YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVPcHVzQXVkaW9Gb3JtYXREZXNjcmlw
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVGcm9tVm9yYmlzQ29kZWNQcml2YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OmlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVWb3JiaXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKToKKwogMjAyMC0xMi0x
MCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0lGQ10g
SW50cm9kdWNlIElubGluZVRleHRJdGVtOjppc1dvcmRTZXBhcmF0b3IKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29j
b2EudHh0CmluZGV4IDhmOTlmOWExOTE4Yzk1NTg4NWZiMmFjYjk5YzhkMWE3NTI2NWFhMDMuLmU1
OTEzOWZiYjQ1NjUwZGVmOTk2ZjgyMWQ1Y2FmYTQwYjcyZDhlY2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0Nv
Y29hLnR4dApAQCAtMzc2LDYgKzM3Niw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkNv
cmVDQUxheWVyRXh0cmFzLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJDb3JlRGVjb21w
cmVzc2lvblNlc3Npb24ubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0K
IHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdQVUxheWVyLm1tCitwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9XZWJNVXRpbGl0aWVzQ29jb2EubW0gQG5vLXVuaWZ5CiBwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9WaWRlb1RyYWNrUHJpdmF0ZVdlYk0uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
dGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQv
Rm9udENvcmVUZXh0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGJlNGZjYWZmOWZjOTI1OWI0NmMzNTM5YjZlYTkzYWY0YWRj
N2ZiMjUuLmZmNTJhMDZhMjY3NjNjN2U3Yjg3ODU0ZDcyOTQ0MGVhMjI1YTY0Y2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIx
OCw2ICsyMTgsOCBAQAogCQkwN0VFNzZFQzFCRTk2REIwMDBGODkxMzMgLyogTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3RUU3NkVBMUJFOTZEQjAwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3RUU3
NkVGMUJFQTYxOTgwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdFRTc2RUQxQkVBNjE5
ODAwRjg5MTMzIC8qIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLmggKi87IH07CiAJCTA3RjRF
OTMzMjBCMzU4N0YwMDJFMzgwMyAvKiBBVkFzc2V0TUlNRVR5cGVDYWNoZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdDOEFEMTIxRDA3M0Q2MzAwODdD
NUNFIC8qIEFWQXNzZXRNSU1FVHlwZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMDdGNUNGRjUyNTgyQTUxRDAwNjYyRUY1IC8qIFdlYk1B
dWRpb1V0aWxpdGllc0NvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwN0Y1Q0ZGNDI1ODJBNEY4MDA2NjJFRjUgLyogV2ViTUF1ZGlvVXRpbGl0aWVz
Q29jb2EuaCAqLzsgfTsKKwkJMDdGNUNGRjYyNTgyQTUyOTAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0
aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDdGNUNGRjIyNTgyQTRGODAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29h
Lm1tICovOyB9OwogCQkwN0Y4NzY4NDFBRDU4MEY5MDA5MDU4NDkgLyogTWVkaWFQbGF5YmFja1Rh
cmdldENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3Rjg3NjgzMUFENEE5NDUwMDkwNTg0OSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0Q29udGV4
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3
Rjk0NDE2MTg2NEQwNDYwMDVEMzFDQiAvKiBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQUU4QzA4MTc0
NkI5NTcwMDUzMkQ3OCAvKiBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwN0ZFOTlERDE4ODA3QTdE
MDAyNTY2NDggLyogTWVkaWFFbGVtZW50U2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdGRTk5REIxODgwN0E3RDAwMjU2NjQ4IC8qIE1lZGlh
RWxlbWVudFNlc3Npb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtNTg3NSw2ICs1ODc3LDggQEAKIAkJMDdFRTc2RUExQkU5NkRCMDAwRjg5MTMz
IC8qIE1vY2tSZWFsdGltZVZpZGVvU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1vY2tSZWFsdGltZVZpZGVvU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA3RUU3NkVEMUJFQTYxOTgwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJj
ZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrUmVhbHRpbWVWaWRl
b1NvdXJjZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwN0VFNzZFRTFCRUE2
MTk4MDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDdGNUNGRjIyNTgyQTRGODAwNjYyRUY1
IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2Vi
TUF1ZGlvVXRpbGl0aWVzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3
RjVDRkY0MjU4MkE0RjgwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwN0Y4NzY4MzFBRDRBOTQ1MDA5MDU4NDkgLyogTWVkaWFQbGF5YmFja1Rhcmdl
dENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFQbGF5YmFj
a1RhcmdldENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdGRTk5REEx
ODgwN0E3RDAwMjU2NjQ4IC8qIE1lZGlhRWxlbWVudFNlc3Npb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFFbGVtZW50U2Vzc2lvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3RkU5OURCMTg4MDdBN0QwMDI1NjY0OCAvKiBNZWRpYUVs
ZW1lbnRTZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRWxl
bWVudFNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2ODY3LDYgKzI2
ODcxLDggQEAKIAkJCQk0OUZGQkYzRTExQzkzRUUzMDA2QTcxMTggLyogV2ViR0xMYXllci5tbSAq
LywKIAkJCQkzMTg0MzZEQjIxQjlEQUEwMDBFRDM4M0UgLyogV2ViR1BVTGF5ZXIuaCAqLywKIAkJ
CQkzMTg0MzZERDIxQjlEQUEwMDBFRDM4M0UgLyogV2ViR1BVTGF5ZXIubW0gKi8sCisJCQkJMDdG
NUNGRjQyNTgyQTRGODAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29hLmggKi8sCisJ
CQkJMDdGNUNGRjIyNTgyQTRGODAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1t
ICovLAogCQkJKTsKIAkJCXBhdGggPSBjb2NvYTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CkBAIC0zNTI1Niw2ICszNTI2Miw3IEBACiAJCQkJNDk0QkQ3OTUwRjU1QzhFRTAwNzQ3ODI4IC8q
IFdlYktpdFBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUMwRkYyNTBFNENFQjZFMDA3RDZG
RTUgLyogV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNGMzMy
RjBGMkI5QTI1MDA0QjY3OTUgLyogV2ViTGF5ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3RjVD
RkY1MjU4MkE1MUQwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMDcwOUQ3OEYxQUU1NTU1NDAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1h
bmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3MDlENzk1MUFFNTVBMjkwMDRFNDJGOCAvKiBX
ZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzA5RDc5
MzFBRTU1NTdFMDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zNjYxMCw2ICszNjYxNyw3IEBACiAJCQkJMkQwNjIxNEQxREE2M0E4QjAwQTdG
QjI2IC8qIFdlYktpdE1lZGlhS2V5cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDA2MjE0RjFE
QTYzQTkxMDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlTZXNzaW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTdDNDhBNkQwMTkxQzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3BhY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMDdGNUNGRjYyNTgyQTUyOTAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0
aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMDcwOUQ3OTIxQUU1NTU3RTAwNEU0
MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUNBRjM0ODIwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUNFQ0RDOTNDMjFGMjk3MjkwMDk3NkJEMSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQVZLaXQubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL01lZGlhVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL01lZGlhVXRpbGl0aWVzLmNwcAppbmRleCBiNDhiNGY1NjMzMmQwNTlkOWZi
MTc3NTU0MzBhMWY4ZTA1NjJjY2M1Li5hNTMzMzJjZjdkYmQ2NDY2ZjQ0ZjU3NmQxY2Q3YWRlNzYx
NTBhYTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NZWRpYVV0
aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTWVkaWFVdGls
aXRpZXMuY3BwCkBAIC0zNSwxMSArMzUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgUEFMOwogCi1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3Jl
YXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBk
ZXNjcmlwdGlvbikKK1JldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVBdWRp
b0Zvcm1hdERlc2NyaXB0aW9uKGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCBzaXplX3QgbWFnaWNDb29raWVTaXplLCBjb25zdCB2b2lkKiBtYWdpY0Nvb2tpZSkKIHsK
ICAgICBhdXRvIGJhc2ljRGVzY3JpcHRpb24gPSBXVEY6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJh
c2ljRGVzY3JpcHRpb24qPihkZXNjcmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3Jp
cHRpb24pOwogICAgIENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0ID0gbnVsbHB0cjsKLSAg
ICBhdXRvIGVycm9yID0gQ01BdWRpb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGJhc2ljRGVzY3JpcHRpb24sIDAsIG51bGxwdHIsIDAsIG51bGxwdHIsIG51bGxw
dHIsICZmb3JtYXQpOworICAgIGF1dG8gZXJyb3IgPSBDTUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25D
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYmFzaWNEZXNjcmlwdGlvbiwgMCwgbnVsbHB0ciwg
bWFnaWNDb29raWVTaXplLCBtYWdpY0Nvb2tpZSwgbnVsbHB0ciwgJmZvcm1hdCk7CiAgICAgaWYg
KGVycm9yKSB7CiAgICAgICAgIExPR19FUlJPUigiY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlv
biBmYWlsZWQgd2l0aCAlZCIsIGVycm9yKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NZWRpYVV0aWxpdGllcy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTWVkaWFVdGlsaXRpZXMuaAppbmRleCA2YjY3
YzY2Nzg1ZDQ3ZDI3MDJiNWM2NDllZjI4NWU0YjBhNWUxMjY2Li45MTcwOGVhMjJhZDRiNWJiYzdl
Zjg5ZDRjYjVkYjM1OTlkOGU2MjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9NZWRpYVV0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL01lZGlhVXRpbGl0aWVzLmgKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjsKIGNsYXNzIFBsYXRmb3JtQXVkaW9EYXRh
OwogCi1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9Gb3JtYXRE
ZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJik7CitSZXRhaW5QdHI8Q01G
b3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihjb25zdCBB
dWRpb1N0cmVhbURlc2NyaXB0aW9uJiwgc2l6ZV90IG1hZ2ljQ29va2llU2l6ZSA9IDAsIGNvbnN0
IHZvaWQqIG1hZ2ljQ29va2llID0gbnVsbHB0cik7CiBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJS
ZWY+IGNyZWF0ZUF1ZGlvU2FtcGxlQnVmZmVyKGNvbnN0IFBsYXRmb3JtQXVkaW9EYXRhJiwgY29u
c3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYsIENNVGltZSwgc2l6ZV90IHNhbXBsZUNvdW50KTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNw
cAppbmRleCBiZTFlMDg2ZTBhYzUyMzU0NjM2YTAwNmFiMzJkMWI5MmY0MGI0ZDgxLi41YzE5ZGQw
MjJmMDNmZjYwN2RmMGNmZWNiYTBhZmFlYzdlYzdkYTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNLmNwcApAQCAtMzksMTEgKzM5LDEzIEBACiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCiAjaW5jbHVkZSAiVlA5VXRpbGl0aWVzQ29jb2EuaCIKICNpbmNsdWRlICJWaWRlb1RyYWNr
UHJpdmF0ZVdlYk0uaCIKKyNpbmNsdWRlICJXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0RhdGFWaWV3Lmg+CiAjaW5jbHVkZSA8d2VibS93ZWJtX3Bh
cnNlci5oPgogI2luY2x1ZGUgPHd0Zi9BbGdvcml0aG1zLmg+CiAjaW5jbHVkZSA8d3RmL0xvZ2dl
ckhlbHBlci5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGlzdC5oPgogI2luY2x1ZGUgPHd0
Zi9jZi9UeXBlQ2FzdHNDRi5oPgogI2luY2x1ZGUgPHd0Zi9kYXJ3aW4vV2Vha0xpbmtpbmcuaD4K
QEAgLTIzNiw3ICsyMzgsNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBMb2dBcmd1bWVudDxXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZT4gewogCiB9IC8vIG5hbWVzcGFjZSBXVEYK
IAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBQQUw7CkBAIC00NTYs
NiArNDU3LDcgQEAgcHJpdmF0ZToKIAogTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OmlzQ29udGVudFR5cGVTdXBwb3J0ZWQoY29uc3QgQ29udGVu
dFR5cGUmIHR5cGUpCiB7CisjaWYgRU5BQkxFKFZQOSkgfHwgRU5BQkxFKFZPUkJJUykgfHwgRU5B
QkxFKE9QVVMpCiAgICAgaWYgKCFpc1dlYm1QYXJzZXJBdmFpbGFibGUoKSkKICAgICAgICAgcmV0
dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CiAKQEAg
LTQ2NywxMCArNDY5LDE0IEBAIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjppc0NvbnRlbnRUeXBlU3VwcG9ydGVkKGNvCiAgICAgaWYgKCFjb2Rl
Y3NQYXJhbWV0ZXIpCiAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5
cGU6Ok1heUJlU3VwcG9ydGVkOwogCi0jaWYgRU5BQkxFKFZQOSkKICAgICBhdXRvIHNwbGl0UmVz
dWx0cyA9IFN0cmluZ1ZpZXcoY29kZWNzUGFyYW1ldGVyKS5zcGxpdCgnLCcpOwogICAgIGZvciAo
YXV0byBzcGxpdCA6IHNwbGl0UmVzdWx0cykgeworI2lmIEVOQUJMRShWUDkpCiAgICAgICAgIGlm
IChzcGxpdC5zdGFydHNXaXRoKCJ2cDA5IikpIHsKKworICAgICAgICAgICAgaWYgKCFpc1ZQOURl
Y29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVt
czo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKwogICAgICAgICAgICAgYXV0byBjb2Rl
Y1BhcmFtZXRlcnMgPSBwYXJzZVZQQ29kZWNQYXJhbWV0ZXJzKHNwbGl0KTsKICAgICAgICAgICAg
IGlmICghY29kZWNQYXJhbWV0ZXJzKQogICAgICAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXll
ckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwpAQCAtNDgwLDE0ICs0ODYsMzgg
QEAgTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
OmlzQ29udGVudFR5cGVTdXBwb3J0ZWQoY28KIAogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KLSAgICAgICAgLy8gRklYTUU6IEFkZCBPcHVzIFN1cHBvcnQKLSAgICAgICAgLy8gRklY
TUU6IEFkZCBWb3JiaXMgU3VwcG9ydAorI2VuZGlmIC8vIEVOQUJMRShWUDkpCisKKyNpZiBFTkFC
TEUoVk9SQklTKQorICAgICAgICBpZiAoc3BsaXQgPT0gInZvcmJpcyIpIHsKKyAgICAgICAgICAg
IGlmICghaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKFZPUkJJUykKKwor
I2lmIEVOQUJMRShPUFVTKQorICAgICAgICBpZiAoc3BsaXQgPT0gIm9wdXMiKSB7CisgICAgICAg
ICAgICBpZiAoIWlzT3B1c0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoT1BVUykKKwog
ICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBv
cnRlZDsKICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKFZQOSkgfHwgRU5BQkxFKFZPUkJJUykgfHwg
RU5BQkxFKE9QVVMpCisKICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBl
OjpJc1N1cHBvcnRlZDsKLSNlbHNlCi0gICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBv
cnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0jZW5kaWYKK30KKworUmVmUHRyPFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk0+IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNyZWF0ZShjb25zdCBDb250ZW50
VHlwZSYgdHlwZSkKK3sKKyAgICBpZiAoaXNDb250ZW50VHlwZVN1cHBvcnRlZCh0eXBlKSAhPSBN
ZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkKQorICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKSk7CisgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlNvdXJjZUJ1ZmZlclBhcnNl
cldlYk0oKQpAQCAtNTcxLDYgKzYwMSw3IEBAIGJvb2wgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
c2hvdWxkUHJvdmlkZU1lZGlhZGF0YUZvclRyYWNrSUQodWludDY0X3QpCiB2b2lkIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OnJlc2V0UGFyc2VyU3RhdGUoKQogewogICAgIElORk9fTE9HX0lGX1BP
U1NJQkxFKExPR0lERU5USUZJRVIpOworICAgIGZsdXNoUGVuZGluZ0F1ZGlvQnVmZmVycygpOwog
ICAgIG1fcGFyc2VyLT5EaWRTZWVrKCk7CiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpOb25lOwogICAg
IG1fdHJhY2tzLmNsZWFyKCk7CkBAIC02MDQsNyArNjM1LDcgQEAgdm9pZCBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpzZXRMb2dnZXIoY29uc3QgTG9nZ2VyJiBsb2dnZXIsIGNvbnN0IHZvaWQqIGxv
Z0lkZW4KIGF1dG8gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6dHJhY2tEYXRhRm9yVHJhY2tOdW1i
ZXIodWludDY0X3QgdHJhY2tOdW1iZXIpIC0+IFRyYWNrRGF0YSoKIHsKICAgICBmb3IgKGF1dG8m
IHRyYWNrIDogbV90cmFja3MpIHsKLSAgICAgICAgaWYgKHRyYWNrLnRyYWNrLnRyYWNrX251bWJl
ci5pc19wcmVzZW50KCkgJiYgdHJhY2sudHJhY2sudHJhY2tfbnVtYmVyLnZhbHVlKCkgPT0gdHJh
Y2tOdW1iZXIpCisgICAgICAgIGlmICh0cmFjay0+dHJhY2soKS50cmFja19udW1iZXIuaXNfcHJl
c2VudCgpICYmIHRyYWNrLT50cmFjaygpLnRyYWNrX251bWJlci52YWx1ZSgpID09IHRyYWNrTnVt
YmVyKQogICAgICAgICAgICAgcmV0dXJuICZ0cmFjazsKICAgICB9CiAgICAgcmV0dXJuIG51bGxw
dHI7CkBAIC03NDgsNyArNzc5LDcgQEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9u
Q2x1c3RlckJlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYgbWV0YWRhdGEsIGMKIFN0YXR1cyBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblRyYWNrRW50cnkoY29uc3QgRWxlbWVudE1ldGFkYXRh
JiBtZXRhZGF0YSwgY29uc3QgVHJhY2tFbnRyeSYgdHJhY2tFbnRyeSkKIHsKICAgICBVTlVTRURf
UEFSQU0obWV0YWRhdGEpOwotICAgIGlmICghdHJhY2tFbnRyeS50cmFja190eXBlLmlzX3ByZXNl
bnQoKSkKKyAgICBpZiAoIXRyYWNrRW50cnkudHJhY2tfdHlwZS5pc19wcmVzZW50KCkgfHwgIXRy
YWNrRW50cnkuY29kZWNfaWQuaXNfcHJlc2VudCgpKQogICAgICAgICByZXR1cm4gU3RhdHVzKFN0
YXR1czo6a09rQ29tcGxldGVkKTsKIAogICAgIGF1dG8gdHJhY2tUeXBlID0gdHJhY2tFbnRyeS50
cmFja190eXBlLnZhbHVlKCk7CkBAIC03NTYsOCArNzg3LDMwIEBAIFN0YXR1cyBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpPblRyYWNrRW50cnkoY29uc3QgRWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0
YSwgY29uCiAgICAgICAgIG1faW5pdGlhbGl6YXRpb25TZWdtZW50LT52aWRlb1RyYWNrcy5hcHBl
bmQoeyBNZWRpYURlc2NyaXB0aW9uV2ViTTo6Y3JlYXRlKFRyYWNrRW50cnkodHJhY2tFbnRyeSkp
LCBWaWRlb1RyYWNrUHJpdmF0ZVdlYk06OmNyZWF0ZShUcmFja0VudHJ5KHRyYWNrRW50cnkpKSB9
KTsKICAgICBlbHNlIGlmICh0cmFja1R5cGUgPT0gVHJhY2tUeXBlOjprQXVkaW8pCiAgICAgICAg
IG1faW5pdGlhbGl6YXRpb25TZWdtZW50LT5hdWRpb1RyYWNrcy5hcHBlbmQoeyBNZWRpYURlc2Ny
aXB0aW9uV2ViTTo6Y3JlYXRlKFRyYWNrRW50cnkodHJhY2tFbnRyeSkpLCBBdWRpb1RyYWNrUHJp
dmF0ZVdlYk06OmNyZWF0ZShUcmFja0VudHJ5KHRyYWNrRW50cnkpKSB9KTsKLSAgICBtX3RyYWNr
cy5hcHBlbmQoeyBUcmFja0VudHJ5KHRyYWNrRW50cnkpLCB7IH0sIG51bGxwdHIsIG51bGxwdHIs
IDAgfSk7CiAKKyAgICBTdHJpbmdWaWV3IGNvZGVjU3RyaW5nIHsgdHJhY2tFbnRyeS5jb2RlY19p
ZC52YWx1ZSgpLmRhdGEoKSwgKHVuc2lnbmVkKXRyYWNrRW50cnkuY29kZWNfaWQudmFsdWUoKS5s
ZW5ndGgoKSB9OworI2lmIEVOQUJMRShWUDkpCisgICAgaWYgKGNvZGVjU3RyaW5nID09ICJWX1ZQ
OSIgJiYgaXNWUDlEZWNvZGVyQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgbV90cmFja3MuYXBwZW5k
KFZpZGVvVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpWUDksIHRyYWNrRW50cnksICp0aGlz
KSk7CisgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOworICAgIH0K
KyNlbmRpZgorCisjaWYgRU5BQkxFKFZPUkJJUykKKyAgICBpZiAoY29kZWNTdHJpbmcgPT0gIkFf
Vk9SQklTIiAmJiBpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKSkgeworICAgICAgICBtX3RyYWNr
cy5hcHBlbmQoQXVkaW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6OlZvcmJpcywgdHJhY2tF
bnRyeSwgKnRoaXMsIG1fbWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24pKTsKKyAgICAgICAgcmV0
dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CisgICAgfQorI2VuZGlmCisKKyNpZiBF
TkFCTEUoT1BVUykKKyAgICBpZiAoY29kZWNTdHJpbmcgPT0gIkFfT1BVUyIgJiYgaXNPcHVzRGVj
b2RlckF2YWlsYWJsZSgpKSB7CisgICAgICAgIG1fdHJhY2tzLmFwcGVuZChBdWRpb1RyYWNrRGF0
YTo6Y3JlYXRlKENvZGVjVHlwZTo6T3B1cywgdHJhY2tFbnRyeSwgKnRoaXMsIG1fbWluaW11bUF1
ZGlvU2FtcGxlRHVyYXRpb24pKTsKKyAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0Nv
bXBsZXRlZCk7CisgICAgfQorI2VuZGlmCisKKyAgICBtX3RyYWNrcy5hcHBlbmQoVHJhY2tEYXRh
OjpjcmVhdGUoQ29kZWNUeXBlOjpVbnN1cHBvcnRlZCwgdHJhY2tFbnRyeSwgKnRoaXMpKTsKICAg
ICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIApAQCAtODI3LDQwNiAr
ODgwLDI4MCBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25CbG9ja0dy
b3VwRW5kKGNvbnN0IHdlYm06OkVsZW1lbnRNZXRhZGF0YQogICAgIHJldHVybiBTdGF0dXMoU3Rh
dHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi0jaWYgRU5BQkxFKFZQOSkKIAotc3RhdGljIHVpbnQ4
X3QgY29udmVydFRvQ29sb3JQcmltYXJpZXMoY29uc3QgUHJpbWFyaWVzJiBjb2VmZmljaWVudHMp
Cit3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25GcmFtZShjb25zdCBGcmFt
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgUmVhZGVyKiByZWFkZXIsIHVpbnQ2NF90KiBieXRlc1JlbWFp
bmluZykKIHsKLSAgICBzd2l0Y2ggKGNvZWZmaWNpZW50cykgewotICAgIGNhc2UgUHJpbWFyaWVz
OjprQnQ3MDk6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6
QlRfNzA5XzY7Ci0gICAgY2FzZSBQcmltYXJpZXM6OmtVbnNwZWNpZmllZDoKLSAgICAgICAgcmV0
dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpVbnNwZWNpZmllZDsKLSAgICBjYXNl
IFByaW1hcmllczo6a0J0NDcwTToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9y
UHJpbWFyaWVzOjpCVF80NzBfNl9NOwotICAgIGNhc2UgUHJpbWFyaWVzOjprQnQ0NzBCZzoKLSAg
ICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF80NzBfN19CRzsK
LSAgICBjYXNlIFByaW1hcmllczo6a1NtcHRlMTcwTToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmln
dXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF82MDFfNzsKLSAgICBjYXNlIFByaW1hcmllczo6a1Nt
cHRlMjQwTToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpT
TVBURV9TVF8yNDA7Ci0gICAgY2FzZSBQcmltYXJpZXM6OmtGaWxtOgotICAgICAgICByZXR1cm4g
VlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkZpbG07Ci0gICAgY2FzZSBQcmltYXJpZXM6
OmtCdDIwMjA6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6
QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U7Ci0gICAgY2FzZSBQcmltYXJpZXM6OmtTbXB0
ZVN0NDI4MToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpT
TVBURV9TVF80MjhfMTsKLSAgICBjYXNlIFByaW1hcmllczo6a1NtcHRlUnA0MzE6Ci0gICAgICAg
IHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfUlBfNDMxXzI7Ci0g
ICAgY2FzZSBQcmltYXJpZXM6OmtTbXB0ZUVnNDMyOgotICAgICAgICByZXR1cm4gVlBDb25maWd1
cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX0VHXzQzMl8xOwotICAgIGNhc2UgUHJpbWFyaWVz
OjprSmVkZWNQMjJQaG9zcGhvcnM6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xv
clByaW1hcmllczo6RUJVX1RlY2hfMzIxM19FOwotICAgIH0KLX0KKyAgICBBU1NFUlQocmVhZGVy
KTsKKyAgICBpZiAoIXJlYWRlcikKKyAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RF
bm91Z2hNZW1vcnkpOwogCi1zdGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRvQ01Db2xvclByaW1h
cmllcyh1aW50OF90IHByaW1hcmllcykKLXsKLSAgICBzd2l0Y2ggKHByaW1hcmllcykgewotICAg
IGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzcwOV82OgotICAgICAgICBy
ZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19JVFVfUl83MDlfMjsKLSAgICBjYXNl
IFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpFQlVfVGVjaF8zMjEzX0U6Ci0gICAgICAg
IHJldHVybiBrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzX0VCVV8zMjEzOwotICAgIGNhc2Ug
VlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzYwMV83OgotICAgIGNhc2UgVlBDb25m
aWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NUXzI0MDoKLSAgICAgICAgcmV0dXJuIGtD
VkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfU01QVEVfQzsKLSAgICBjYXNlIFZQQ29uZmlndXJh
dGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9SUF80MzFfMjoKLSAgICAgICAgcmV0dXJuIGtDTUZv
cm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJpZXNfRENJX1AzOwotICAgIGNhc2UgVlBDb25maWd1
cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX0VHXzQzMl8xOgotICAgICAgICByZXR1cm4ga0NN
Rm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19QM19ENjU7Ci0gICAgY2FzZSBWUENvbmZp
Z3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U6Ci0g
ICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX0lUVV9SXzIw
MjA7Ci0gICAgfQorICAgIGlmICghbV9jdXJyZW50QmxvY2spCisgICAgICAgIHJldHVybiBTdGF0
dXMoU3RhdHVzOjprSW52YWxpZEVsZW1lbnRJZCk7CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0K
KyAgICBhdXRvKiBibG9jayA9IFdURjo6c3dpdGNoT24oKm1fY3VycmVudEJsb2NrLCBbXShCbG9j
ayYgYmxvY2spIHsKKyAgICAgICAgcmV0dXJuICZibG9jazsKKyAgICB9LCBbXShTaW1wbGVCbG9j
ayYgYmxvY2spIC0+IEJsb2NrKiB7CisgICAgICAgIHJldHVybiAmYmxvY2s7CisgICAgfSk7Cisg
ICAgaWYgKCFibG9jaykKKyAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtJbnZhbGlkRWxl
bWVudElkKTsKIAotc3RhdGljIHVpbnQ4X3QgY29udmVydFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3MoY29uc3QgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MmIGNoYXJhY3RlcmlzdGljcykKLXsKLSAg
ICBzd2l0Y2ggKGNoYXJhY3RlcmlzdGljcykgewotICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OmtCdDcwOToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzOjpCVF83MDlfNjsKLSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
OjprVW5zcGVjaWZpZWQ6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6VW5zcGVjaWZpZWQ7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3Rlcmlz
dGljczo6a0dhbW1hMjJjdXJ2ZToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF80NzBfNl9NOwotICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OmtHYW1tYTI4Y3VydmU6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfNDcwXzdfQkc7Ci0gICAgY2FzZSBUcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6a1NtcHRlMTcwTToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlv
blRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF82MDFfNzsKLSAgICBjYXNlIFRyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzOjprU21wdGUyNDBNOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9u
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzI0MDsKLSAgICBjYXNlIFRyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzOjprTGluZWFyOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9u
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxpbmVhcjsKLSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjprTG9nOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJD
aGFyYWN0ZXJpc3RpY3M6OkxvZ3JpdGhtaWM7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3Rlcmlz
dGljczo6a0xvZ1NxcnQ6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6TG9ncml0aG1pY19TcXJ0OwotICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OmtJZWM2MTk2NjI0OgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OklFQ182MTk2Nl8yXzQ7Ci0gICAgY2FzZSBUcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6a0J0MTM2MUV4dGVuZGVkQ29sb3VyR2FtdXQ6Ci0gICAgICAgIHJldHVy
biBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfMTM2MV8wOwotICAg
IGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtJZWM2MTk2NjIxOgotICAgICAgICByZXR1
cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OklFQ182MTk2Nl8yXzE7
Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6azEwQml0QnQyMDIwOgotICAgICAg
ICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBf
MTBiaXQ7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6azEyQml0QnQyMDIwOgot
ICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJU
XzIwMjBfMTJiaXQ7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a1NtcHRlU3Qy
MDg0OgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OlNNUFRFX1NUXzIwODQ7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a1Nt
cHRlU3Q0MjgxOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OlNNUFRFX1NUXzQyOF8xOwotICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OmtBcmliU3RkQjY3SGxnOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIxMDBfSExHOworICAgIGF1dG8gdHJhY2tOdW1iZXIgPSBi
bG9jay0+dHJhY2tfbnVtYmVyOworICAgIGF1dG8qIHRyYWNrRGF0YSA9IHRyYWNrRGF0YUZvclRy
YWNrTnVtYmVyKHRyYWNrTnVtYmVyKTsKKyAgICBpZiAoIXRyYWNrRGF0YSkgeworICAgICAgICBF
UlJPUl9MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgIklnbm9yaW5nIHVua25vd24gdHJh
Y2sgbnVtYmVyICIsIHRyYWNrTnVtYmVyKTsKKyAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6
OmtJbnZhbGlkRWxlbWVudElkKTsKICAgICB9Ci19CiAKLXN0YXRpYyBDRlN0cmluZ1JlZiBjb252
ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24odWludDhfdCBjaGFyYWN0ZXJpc3RpY3MpCi17Ci0gICAg
c3dpdGNoIChjaGFyYWN0ZXJpc3RpY3MpIHsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF83MDlfNjoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVm
ZmVyVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl83MDlfMjsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlv
blRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF8yNDA6Ci0gICAgICAgIHJldHVybiBr
Q1ZJbWFnZUJ1ZmZlclRyYW5zZmVyRnVuY3Rpb25fU01QVEVfMjQwTV8xOTk1OwotICAgIGNhc2Ug
VlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzIwODQ6Ci0g
ICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fU01QVEVf
U1RfMjA4NF9QUTsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjpCVF8yMDIwXzEwYml0OgotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTJiaXQ6Ci0gICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNj
cmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fSVRVX1JfMjAyMDsKLSAgICBjYXNlIFZQQ29uZmlndXJh
dGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF80MjhfMToKLSAgICAgICAgcmV0
dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9TTVBURV9TVF80MjhfMTsK
LSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMTAw
X0hMRzoKLSAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlv
bl9JVFVfUl8yMTAwX0hMRzsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjpJRUNfNjE5NjZfMl8xOgotICAgICAgICByZXR1cm4gUEFMOjpjYW5Mb2FkX0Nv
cmVNZWRpYV9rQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fc1JHQigpID8gZ2V0
X0NvcmVNZWRpYV9rQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fc1JHQigpIDog
bnVsbHB0cjsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
OjpMaW5lYXI6Ci0gICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVu
Y3Rpb25fTGluZWFyOworICAgIHN3aXRjaCAodHJhY2tEYXRhLT5jb2RlYygpKSB7CisgICAgY2Fz
ZSBDb2RlY1R5cGU6OlZQOToKKyAgICBjYXNlIENvZGVjVHlwZTo6Vm9yYmlzOgorICAgIGNhc2Ug
Q29kZWNUeXBlOjpPcHVzOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ29kZWNUeXBlOjpV
bnN1cHBvcnRlZDoKKyAgICAgICAgcmV0dXJuIFNraXAocmVhZGVyLCBieXRlc1JlbWFpbmluZyk7
CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHRyYWNrRGF0YS0+Y29u
c3VtZUZyYW1lRGF0YSgqcmVhZGVyLCBtZXRhZGF0YSwgYnl0ZXNSZW1haW5pbmcsIENNVGltZU1h
a2UoYmxvY2stPnRpbWVjb2RlICsgbV9jdXJyZW50VGltZWNvZGUsIG1fdGltZXNjYWxlKSwgYmxv
Y2stPm51bV9mcmFtZXMpOwogfQogCi1zdGF0aWMgdWludDhfdCBjb252ZXJ0VG9NYXRyaXhDb2Vm
ZmljaWVudHMoY29uc3QgTWF0cml4Q29lZmZpY2llbnRzJiBjb2VmZmljaWVudHMpCit2b2lkIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OnByb3ZpZGVNZWRpYURhdGEoUmV0YWluUHRyPENNU2FtcGxl
QnVmZmVyUmVmPiBzYW1wbGVCdWZmZXIsIHVpbnQ2NF90IHRyYWNrSUQpCiB7Ci0gICAgc3dpdGNo
IChjb2VmZmljaWVudHMpIHsKLSAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a1JnYjoKLSAg
ICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6SWRlbnRpdHk7
Ci0gICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtCdDcwOToKLSAgICAgICAgcmV0dXJuIFZQ
Q29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfNzA5XzY7Ci0gICAgY2FzZSBNYXRy
aXhDb2VmZmljaWVudHM6OmtVbnNwZWNpZmllZDoKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJh
dGlvbk1hdHJpeENvZWZmaWNpZW50czo6VW5zcGVjaWZpZWQ7Ci0gICAgY2FzZSBNYXRyaXhDb2Vm
ZmljaWVudHM6OmtGY2M6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2Vm
ZmljaWVudHM6OkZDQzsKLSAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a0J0NDcwQmc6Ci0g
ICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzQ3MF83
X0JHOwotICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprU21wdGUxNzBNOgotICAgICAgICBy
ZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF82MDFfNzsKLSAgICBj
YXNlIE1hdHJpeENvZWZmaWNpZW50czo6a1NtcHRlMjQwTToKLSAgICAgICAgcmV0dXJuIFZQQ29u
ZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6U01QVEVfU1RfMjQwOwotICAgIGNhc2UgTWF0
cml4Q29lZmZpY2llbnRzOjprWUNnQ286Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25N
YXRyaXhDb2VmZmljaWVudHM6OllDZ0NvOwotICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjpr
QnQyMDIwTm9uY29uc3RhbnRMdW1pbmFuY2U6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRp
b25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzIwMjBfTm9uY29uc3RhbnRfTHVtaW5hbmNlOwotICAg
IGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprQnQyMDIwQ29uc3RhbnRMdW1pbmFuY2U6Ci0gICAg
ICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzIwMjBfQ29u
c3RhbnRfTHVtaW5hbmNlOwotICAgIH0KKyAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHNhbXBsZUJ1ZmZlciA9IFdURk1vdmUoc2FtcGxl
QnVmZmVyKSwgdHJhY2tJRF0gKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghbV9kaWRQcm92aWRl
TWVkaWFEYXRhQ2FsbGJhY2spCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBt
ZWRpYVNhbXBsZSA9IE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKHNhbXBsZUJ1ZmZlci5nZXQo
KSwgdHJhY2tJRCk7CisgICAgICAgIG1fZGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKFdURk1v
dmUobWVkaWFTYW1wbGUpLCB0cmFja0lELCBlbXB0eVN0cmluZygpKTsKKyAgICB9KTsKIH0KIAot
c3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNWUNiQ1JNYXRyaXgodWludDhfdCBjb2VmZmlj
aWVudHMpCisjZGVmaW5lIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoLi4uKSBpZiAocGFy
c2VyKCkubG9nZ2VyUHRyKCkpIHBhcnNlcigpLmxvZ2dlclB0cigpLT5lcnJvcihsb2dDaGFubmVs
KCksIFdURjo6TG9nZ2VyOjpMb2dTaXRlSWRlbnRpZmllcihsb2dDbGFzc05hbWUoKSwgX19mdW5j
X18sIHBhcnNlcigpLmxvZ0lkZW50aWZpZXIoKSksIF9fVkFfQVJHU19fKQorCit3ZWJtOjpTdGF0
dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURh
dGEod2VibTo6UmVhZGVyJiByZWFkZXIsIGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1
aW50NjRfdCogYnl0ZXNSZW1haW5pbmcsIGNvbnN0IENNVGltZSYgcHJlc2VudGF0aW9uVGltZSwg
aW50IHNhbXBsZUNvdW50KQogewotICAgIHN3aXRjaCAoY29lZmZpY2llbnRzKSB7Ci0gICAgY2Fz
ZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzIwMjBfTm9uY29uc3RhbnRf
THVtaW5hbmNlOgotICAgICAgICByZXR1cm4ga0NNRm9ybWF0RGVzY3JpcHRpb25ZQ2JDck1hdHJp
eF9JVFVfUl8yMDIwOwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRz
OjpCVF80NzBfN19CRzoKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50
czo6QlRfNjAxXzc6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lU
VV9SXzYwMV80OwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpC
VF83MDlfNjoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1Jf
NzA5XzI7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OlNNUFRF
X1NUXzI0MDoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfU01QVEVf
MjQwTV8xOTk1OwotICAgIH0KKyAgICBDTUJsb2NrQnVmZmVyUmVmIHJhd0Jsb2NrQnVmZmVyID0g
bnVsbHB0cjsKIAotICAgIHJldHVybiBudWxscHRyOwotfQorICAgIGlmICghbV9jdXJyZW50Qmxv
Y2tCdWZmZXIpIHsKKyAgICAgICAgYXV0byBlcnIgPSBDTUJsb2NrQnVmZmVyQ3JlYXRlV2l0aE1l
bW9yeUJsb2NrKGtDRkFsbG9jYXRvckRlZmF1bHQsIG51bGxwdHIsIG1ldGFkYXRhLnNpemUsIGtD
RkFsbG9jYXRvckRlZmF1bHQsIG51bGxwdHIsIDAsIG1ldGFkYXRhLnNpemUsIDAsICZyYXdCbG9j
a0J1ZmZlcik7CisgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJS
T1JfSUZfUE9TU0lCTEUoIkNNQmxvY2tCdWZmZXJDcmVhdGVXaXRoTWVtb3J5QmxvY2sgZmFpbGVk
IHdpdGggZXJyb3IiLCBlcnIpOworICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0
ZXNSZW1haW5pbmcpOworICAgICAgICB9CiAKLXN0YXRpYyB1aW50OF90IGNvbnZlcnRTdWJzYW1w
bGluZ1hZVG9DaHJvbWFTdWJzYW1wbGluZyh1aW50NjRfdCB4LCB1aW50NjRfdCB5KQotewotICAg
IGlmICh4ICYgeSkKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNocm9tYVN1YnNhbXBs
aW5nOjpTdWJzYW1wbGluZ180MjBfQ29sb2NhdGVkOwotICAgIGlmICh4ICYgIXkpCi0gICAgICAg
IHJldHVybiBWUENvbmZpZ3VyYXRpb25DaHJvbWFTdWJzYW1wbGluZzo6U3Vic2FtcGxpbmdfNDIy
OwotICAgIGlmICgheCAmICF5KQotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ2hyb21h
U3Vic2FtcGxpbmc6OlN1YnNhbXBsaW5nXzQ0NDsKLSAgICAvLyBUaGlzIGluZGljYXRlcyA0OjQ6
MCBzdWJzYW1wbGluZywgd2hpY2ggaXMgbm90IGV4cHJlc3NhYmxlIGluIHRoZSAndnBjQycgYm94
LiBEZWZhdWx0IHRvIDQ6MjowLgotICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25DaHJvbWFTdWJz
YW1wbGluZzo6U3Vic2FtcGxpbmdfNDIwX0NvbG9jYXRlZDsKLX0KKyAgICAgICAgbV9jdXJyZW50
QmxvY2tCdWZmZXIgPSBhZG9wdENGKHJhd0Jsb2NrQnVmZmVyKTsKKyAgICAgICAgbV9jdXJyZW50
QmxvY2tCdWZmZXJQb3NpdGlvbiA9IDA7CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q01Gb3JtYXREZXNj
cmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5SGVhZGVyUGFyc2VyKGNv
bnN0IHZwOV9wYXJzZXI6OlZwOUhlYWRlclBhcnNlciYgcGFyc2VyLCBjb25zdCB3ZWJtOjpFbGVt
ZW50PENvbG91cj4mIGNvbG9yKQotewotICAgIC8vIFJlZjogIlZQIENvZGVjIElTTyBNZWRpYSBG
aWxlIEZvcm1hdCBCaW5kaW5nLCB2MS4wLCAyMDE3LTAzLTMxIgotICAgIC8vIDxodHRwczovL3d3
dy53ZWJtcHJvamVjdC5vcmcvdnA5L21wNC8+Ci0gICAgLy8KLSAgICAvLyBjbGFzcyBWUENvZGVj
Q29uZmlndXJhdGlvbkJveCBleHRlbmRzIEZ1bGxCb3goJ3ZwY0MnLCB2ZXJzaW9uID0gMSwgMCkK
LSAgICAvLyB7Ci0gICAgLy8gICAgIFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkKCkgdnBjQ29u
ZmlnOwotICAgIC8vIH0KLSAgICAvLwotICAgIC8vIGFsaWduZWQgKDgpIGNsYXNzIFZQQ29kZWND
b25maWd1cmF0aW9uUmVjb3JkIHsKLSAgICAvLyAgICAgdW5zaWduZWQgaW50ICg4KSAgICAgcHJv
ZmlsZTsKLSAgICAvLyAgICAgdW5zaWduZWQgaW50ICg4KSAgICAgbGV2ZWw7Ci0gICAgLy8gICAg
IHVuc2lnbmVkIGludCAoNCkgICAgIGJpdERlcHRoOwotICAgIC8vICAgICB1bnNpZ25lZCBpbnQg
KDMpICAgICBjaHJvbWFTdWJzYW1wbGluZzsKLSAgICAvLyAgICAgdW5zaWduZWQgaW50ICgxKSAg
ICAgdmlkZW9GdWxsUmFuZ2VGbGFnOwotICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDgpICAgICBj
b2xvdXJQcmltYXJpZXM7Ci0gICAgLy8gICAgIHVuc2lnbmVkIGludCAoOCkgICAgIHRyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzOwotICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDgpICAgICBtYXRyaXhD
b2VmZmljaWVudHM7Ci0gICAgLy8gICAgIHVuc2lnbmVkIGludCAoMTYpICAgIGNvZGVjSW50aWFs
aXphdGlvbkRhdGFTaXplOwotICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDgpW10gICBjb2RlY0lu
dGlhbGl6YXRpb25EYXRhOwotICAgIC8vIH0KLSAgICAvLwotICAgIC8vIGNvZGVjSW50aWFsaXph
dGlvbkRhdGFTaXpl4oCLRm9yIFZQOCBhbmQgVlA5IHRoaXMgZmllbGQgbXVzdCBiZSAwLgotICAg
IC8vIGNvZGVjSW50aWFsaXphdGlvbkRhdGHigItiaW5hcnkgY29kZWMgaW5pdGlhbGl6YXRpb24g
ZGF0YS4gTm90IHVzZWQgZm9yIFZQOCBhbmQgVlA5LgotICAgIC8vCi0gICAgLy8gRklYTUU6IENv
bnZlcnQgZXhpc3Rpbmcgc3RydWN0IHRvIGFuIElTT0JveCBhbmQgcmVwbGFjZSB0aGUgd3JpdGlu
ZyBjb2RlIGJlbG93Ci0gICAgLy8gd2l0aCBhIHN1YmNsYXNzIG9mIElTT0Z1bGxCb3guCi0KLSAg
ICBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCByZWNvcmQ7Ci0KLSAgICByZWNvcmQucHJvZmls
ZSA9IHBhcnNlci5wcm9maWxlKCk7Ci0gICAgLy8gQ29yZU1lZGlhIGRvZXMgbmF0IGNhcmUgYWJv
dXQgdGhlIFZQOSBjb2RlYyBsZXZlbDsgaGFyZC1jb2RlIHRvIExldmVsIDEuMCBoZXJlOgotICAg
IHJlY29yZC5sZXZlbCA9IDEwOwotICAgIHJlY29yZC5iaXREZXB0aCA9IHBhcnNlci5iaXRfZGVw
dGgoKTsKLSAgICByZWNvcmQudmlkZW9GdWxsUmFuZ2VGbGFnID0gcGFyc2VyLmNvbG9yX3Jhbmdl
KCkgPyBWUENvbmZpZ3VyYXRpb25SYW5nZTo6RnVsbFJhbmdlIDogVlBDb25maWd1cmF0aW9uUmFu
Z2U6OlZpZGVvUmFuZ2U7Ci0gICAgcmVjb3JkLmNocm9tYVN1YnNhbXBsaW5nID0gY29udmVydFN1
YnNhbXBsaW5nWFlUb0Nocm9tYVN1YnNhbXBsaW5nKHBhcnNlci5zdWJzYW1wbGluZ194KCksIHBh
cnNlci5zdWJzYW1wbGluZ195KCkpOwotICAgIHJlY29yZC5jb2xvclByaW1hcmllcyA9IFZQQ29u
ZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpVbnNwZWNpZmllZDsKLSAgICByZWNvcmQudHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3MgPSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6VW5zcGVjaWZpZWQ7Ci0gICAgcmVjb3JkLm1hdHJpeENvZWZmaWNpZW50cyA9IFZQQ29uZmln
dXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6VW5zcGVjaWZpZWQ7Ci0KLSAgICAvLyBDb250YWlu
ZXIgY29sb3IgdmFsdWVzIGNhbiBvdmVycmlkZSBwZXItc2FtcGxlIG9uZXM6Ci0gICAgaWYgKGNv
bG9yLmlzX3ByZXNlbnQoKSkgewotICAgICAgICBhdXRvJiBjb2xvclZhbHVlID0gY29sb3IudmFs
dWUoKTsKLSAgICAgICAgaWYgKGNvbG9yVmFsdWUuY2hyb21hX3N1YnNhbXBsaW5nX3guaXNfcHJl
c2VudCgpICYmIGNvbG9yVmFsdWUuY2hyb21hX3N1YnNhbXBsaW5nX3kuaXNfcHJlc2VudCgpKQot
ICAgICAgICAgICAgcmVjb3JkLmNocm9tYVN1YnNhbXBsaW5nID0gY29udmVydFN1YnNhbXBsaW5n
WFlUb0Nocm9tYVN1YnNhbXBsaW5nKGNvbG9yVmFsdWUuY2hyb21hX3N1YnNhbXBsaW5nX3gudmFs
dWUoKSwgY29sb3JWYWx1ZS5jaHJvbWFfc3Vic2FtcGxpbmdfeS52YWx1ZSgpKTsKLSAgICAgICAg
aWYgKGNvbG9yVmFsdWUucmFuZ2UuaXNfcHJlc2VudCgpICYmIGNvbG9yVmFsdWUucmFuZ2UudmFs
dWUoKSAhPSBSYW5nZTo6a1Vuc3BlY2lmaWVkKQotICAgICAgICAgICAgcmVjb3JkLnZpZGVvRnVs
bFJhbmdlRmxhZyA9IGNvbG9yVmFsdWUucmFuZ2UudmFsdWUoKSA9PSBSYW5nZTo6a0Z1bGwgPyBW
UENvbmZpZ3VyYXRpb25SYW5nZTo6RnVsbFJhbmdlIDogVlBDb25maWd1cmF0aW9uUmFuZ2U6OlZp
ZGVvUmFuZ2U7Ci0gICAgICAgIGlmIChjb2xvclZhbHVlLmJpdHNfcGVyX2NoYW5uZWwuaXNfcHJl
c2VudCgpKQotICAgICAgICAgICAgcmVjb3JkLmJpdERlcHRoID0gY29sb3JWYWx1ZS5iaXRzX3Bl
cl9jaGFubmVsLnZhbHVlKCk7Ci0gICAgICAgIGlmIChjb2xvclZhbHVlLnRyYW5zZmVyX2NoYXJh
Y3RlcmlzdGljcy5pc19wcmVzZW50KCkpCi0gICAgICAgICAgICByZWNvcmQudHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3MgPSBjb252ZXJ0VG9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcyhjb2xvclZhbHVl
LnRyYW5zZmVyX2NoYXJhY3RlcmlzdGljcy52YWx1ZSgpKTsKLSAgICAgICAgaWYgKGNvbG9yVmFs
dWUubWF0cml4X2NvZWZmaWNpZW50cy5pc19wcmVzZW50KCkpCi0gICAgICAgICAgICByZWNvcmQu
bWF0cml4Q29lZmZpY2llbnRzID0gY29udmVydFRvTWF0cml4Q29lZmZpY2llbnRzKGNvbG9yVmFs
dWUubWF0cml4X2NvZWZmaWNpZW50cy52YWx1ZSgpKTsKLSAgICAgICAgaWYgKGNvbG9yVmFsdWUu
cHJpbWFyaWVzLmlzX3ByZXNlbnQoKSkKLSAgICAgICAgICAgIHJlY29yZC5jb2xvclByaW1hcmll
cyA9IGNvbnZlcnRUb0NvbG9yUHJpbWFyaWVzKGNvbG9yVmFsdWUucHJpbWFyaWVzLnZhbHVlKCkp
OworICAgICAgICBlcnIgPSBDTUJsb2NrQnVmZmVyQXNzdXJlQmxvY2tNZW1vcnkobV9jdXJyZW50
QmxvY2tCdWZmZXIuZ2V0KCkpOworICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICBQQVJT
RVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUF1ZGlvU2FtcGxlQnVmZmVyQ3JlYXRlV2l0aFBh
Y2tldERlc2NyaXB0aW9ucyBmYWlsZWQgd2l0aCBlcnJvciIsIGVycik7CisgICAgICAgICAgICBy
ZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CisgICAgICAgIH0KICAgICB9CiAK
LSAgICBjb25zdGV4cHIgc2l6ZV90IFZQQ29kZWNDb25maWd1cmF0aW9uQ29udGVudHNTaXplID0g
MTI7CisgICAgc2l6ZV90IGJ5dGVzVG9SZWFkID0gbWV0YWRhdGEuc2l6ZSAtIG1fY3VycmVudEJs
b2NrQnVmZmVyUG9zaXRpb247CisgICAgd2hpbGUgKGJ5dGVzVG9SZWFkKSB7CisgICAgICAgIHNp
emVfdCBzZWdtZW50U2l6ZUF0UG9zaXRpb24gPSAwOworICAgICAgICB1aW50OF90KiBibG9ja0J1
ZmZlckRhdGEgPSBudWxscHRyOworICAgICAgICBhdXRvIGVyciA9IENNQmxvY2tCdWZmZXJHZXRE
YXRhUG9pbnRlcihtX2N1cnJlbnRCbG9ja0J1ZmZlci5nZXQoKSwgbV9jdXJyZW50QmxvY2tCdWZm
ZXJQb3NpdGlvbiwgJnNlZ21lbnRTaXplQXRQb3NpdGlvbiwgbnVsbHB0ciwgKGNoYXIqKikmYmxv
Y2tCdWZmZXJEYXRhKTsKKyAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgUEFSU0VSX0xP
R19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyIGZhaWxlZCB3
aXRoIGVycm9yIiwgZXJyKTsKKyAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVz
UmVtYWluaW5nKTsKKyAgICAgICAgfQogCi0gICAgdWludDMyX3QgdmVyc2lvbkFuZEZsYWdzID0g
MSA8PCAyNDsKLSAgICB1aW50OF90IGJpdERlcHRoQ2hyb21hQW5kUmFuZ2UgPSAoMHhGICYgcmVj
b3JkLmJpdERlcHRoKSA8PCA0IHwgKDB4NyAmIHJlY29yZC5jaHJvbWFTdWJzYW1wbGluZykgPDwg
MSB8ICgweDEgJiByZWNvcmQudmlkZW9GdWxsUmFuZ2VGbGFnKTsKLSAgICB1aW50MTZfdCBjb2Rl
Y0ludGlhbGl6YXRpb25EYXRhU2l6ZSA9IDA7CisgICAgICAgIHNpemVfdCBieXRlc1RvUmVhZEZy
b21UaGlzU2VnbWVudCA9IHN0ZDo6bWluKGJ5dGVzVG9SZWFkLCBzZWdtZW50U2l6ZUF0UG9zaXRp
b24pOworICAgICAgICB1aW50NjRfdCBieXRlc1JlYWQ7CiAKLSAgICBhdXRvIHZpZXcgPSBKU0M6
OkRhdGFWaWV3OjpjcmVhdGUoQXJyYXlCdWZmZXI6OmNyZWF0ZShWUENvZGVjQ29uZmlndXJhdGlv
bkNvbnRlbnRzU2l6ZSwgMSksIDAsIFZQQ29kZWNDb25maWd1cmF0aW9uQ29udGVudHNTaXplKTsK
LSAgICB2aWV3LT5zZXQoMCwgdmVyc2lvbkFuZEZsYWdzLCBmYWxzZSk7Ci0gICAgdmlldy0+c2V0
KDQsIHJlY29yZC5wcm9maWxlLCBmYWxzZSk7Ci0gICAgdmlldy0+c2V0KDUsIHJlY29yZC5sZXZl
bCwgZmFsc2UpOwotICAgIHZpZXctPnNldCg2LCBiaXREZXB0aENocm9tYUFuZFJhbmdlLCBmYWxz
ZSk7Ci0gICAgdmlldy0+c2V0KDcsIHJlY29yZC5jb2xvclByaW1hcmllcywgZmFsc2UpOwotICAg
IHZpZXctPnNldCg4LCByZWNvcmQudHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MsIGZhbHNlKTsKLSAg
ICB2aWV3LT5zZXQoOSwgcmVjb3JkLm1hdHJpeENvZWZmaWNpZW50cywgZmFsc2UpOwotICAgIHZp
ZXctPnNldCgxMCwgY29kZWNJbnRpYWxpemF0aW9uRGF0YVNpemUsIGZhbHNlKTsKKyAgICAgICAg
YXV0byBzdGF0dXMgPSByZWFkZXIuUmVhZChieXRlc1RvUmVhZEZyb21UaGlzU2VnbWVudCwgKHVp
bnQ4X3QqKWJsb2NrQnVmZmVyRGF0YSwgJmJ5dGVzUmVhZCk7CisgICAgICAgIGJ5dGVzVG9SZWFk
IC09IGJ5dGVzUmVhZDsKKyAgICAgICAgKmJ5dGVzUmVtYWluaW5nIC09IGJ5dGVzUmVhZDsKKyAg
ICAgICAgbV9jdXJyZW50QmxvY2tCdWZmZXJQb3NpdGlvbiArPSBieXRlc1JlYWQ7CiAKLSAgICBh
dXRvIGRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoY29u
c3QgVUludDggKil2aWV3LT5kYXRhKCksIHZpZXctPmJ5dGVMZW5ndGgoKSkpOworICAgICAgICAv
LyBGSVhNRTogV2UgY2FuJ3QgeWV0IGhhbmRsZSBwYXJzaW5nIGEgRnJhbWUgdGhhdCBkb2Vzbid0
IGhhdmUgYWxsIGl0cyBtZW1vcnkgYXZhaWxhYmxlLgorICAgICAgICBpZiAoc3RhdHVzLmNvZGUg
PT0gd2VibTo6U3RhdHVzOjprT2tQYXJ0aWFsIHx8IHN0YXR1cy5jb2RlID09IHdlYm06OlN0YXR1
czo6a1dvdWxkQmxvY2spCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KIAotICAg
IENGVHlwZVJlZiBjb25maWd1cmF0aW9uS2V5c1tdID0geyBDRlNUUigidnBjQyIpIH07Ci0gICAg
Q0ZUeXBlUmVmIGNvbmZpZ3VyYXRpb25WYWx1ZXNbXSA9IHsgZGF0YS5nZXQoKSB9OwotICAgIGF1
dG8gY29uZmlndXJhdGlvbkRpY3QgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBjb25maWd1cmF0aW9uS2V5cywgY29uZmlndXJhdGlvblZhbHVlcywgV1RG
X0FSUkFZX0xFTkdUSChjb25maWd1cmF0aW9uS2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNh
bGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICBjcmVhdGVT
YW1wbGVCdWZmZXIocHJlc2VudGF0aW9uVGltZSwgc2FtcGxlQ291bnQpOwogCi0gICAgVmVjdG9y
PENGVHlwZVJlZj4gZXh0ZW5zaW9uc0tleXMgeyBrQ01Gb3JtYXREZXNjcmlwdGlvbkV4dGVuc2lv
bl9TYW1wbGVEZXNjcmlwdGlvbkV4dGVuc2lvbkF0b21zIH07Ci0gICAgVmVjdG9yPENGVHlwZVJl
Zj4gZXh0ZW5zaW9uc1ZhbHVlcyA9IHsgY29uZmlndXJhdGlvbkRpY3QuZ2V0KCkgfTsKKyAgICBy
ZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Cit9CiAKLSAgICBpZiAocmVjb3Jk
LnZpZGVvRnVsbFJhbmdlRmxhZyA9PSBWUENvbmZpZ3VyYXRpb25SYW5nZTo6RnVsbFJhbmdlKSB7
Ci0gICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ01Gb3JtYXREZXNjcmlwdGlvbkV4dGVu
c2lvbl9GdWxsUmFuZ2VWaWRlbyk7Ci0gICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGtD
RkJvb2xlYW5UcnVlKTsKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0Rh
dGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcihjb25zdCBDTVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIGlu
dCBzYW1wbGVDb3VudCkKK3sKKyAgICB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBudWxscHRy
OworICAgIHNpemVfdCBzZWdtZW50U2l6ZUF0UG9zaXRpb24gPSAwOworICAgIGF1dG8gZXJyID0g
Q01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyKG1fY3VycmVudEJsb2NrQnVmZmVyLmdldCgpLCAw
LCAmc2VnbWVudFNpemVBdFBvc2l0aW9uLCBudWxscHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRh
dGEpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJM
RSgiQ01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdXRvIGNtQ29sb3JQcmltYXJpZXMg
PSBjb252ZXJ0VG9DTUNvbG9yUHJpbWFyaWVzKHJlY29yZC5jb2xvclByaW1hcmllcykpIHsKLSAg
ICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNL
ZXkpOwotICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbUNvbG9yUHJpbWFyaWVzKTsK
KyAgICBpZiAoIW1faGVhZGVyUGFyc2VyLlBhcnNlVW5jb21wcmVzc2VkSGVhZGVyKGJsb2NrQnVm
ZmVyRGF0YSwgc2VnbWVudFNpemVBdFBvc2l0aW9uKSkgeworICAgICAgICBQQVJTRVJfTE9HX0VS
Uk9SX0lGX1BPU1NJQkxFKCJQYXJzZVVuY29tcHJlc3NlZEhlYWRlciBmYWlsZWQiKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdXRvIGNtVHJhbnNmZXJGdW5jdGlvbiA9IGNv
bnZlcnRUb0NNVHJhbnNmZXJGdW5jdGlvbihyZWNvcmQudHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3Mp
KSB7Ci0gICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlclRyYW5zZmVy
RnVuY3Rpb25LZXkpOwotICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbVRyYW5zZmVy
RnVuY3Rpb24pOworICAgIC8vIE9ubHkgdXBkYXRlIHRoZSBmb3JtYXQgZGVzY3JpcHRpb24gd2hl
biB0aGUgaGVhZGVyIGluZGljYXRlcyB0aGF0IHRoZSBzYW1wbGUgaXMKKyAgICAvLyBhIGtleS1m
cmFtZSwgb3RoZXJ3aXNlIGNvbG9yIGluZm9ybWF0aW9uIHdpbGwgbm90IGJlIHBhcnNlZC4KKyAg
ICBhdXRvIHRyYWNrID0gdGhpcy0+dHJhY2soKTsKKyAgICBpZiAobV9oZWFkZXJQYXJzZXIua2V5
KCkpIHsKKyAgICAgICAgYXV0byBmb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZUZvcm1hdERlc2Ny
aXB0aW9uRnJvbVZQOUhlYWRlclBhcnNlcihtX2hlYWRlclBhcnNlciwgdHJhY2sudmlkZW8udmFs
dWUoKS5jb2xvdXIpOworICAgICAgICBpZiAoIWZvcm1hdERlc2NyaXB0aW9uKSB7CisgICAgICAg
ICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJmYWlsZWQgdG8gY3JlYXRlIGZvcm1h
dCBkZXNjcmlwdGlvbiBmcm9tIFZQOSBoZWFkZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBzZXRGb3JtYXREZXNjcmlwdGlvbihXVEZNb3ZlKGZvcm1hdERlc2Ny
aXB0aW9uKSk7CiAgICAgfQogCi0gICAgaWYgKGF1dG8gY21NYXRyaXggPSBjb252ZXJ0VG9DTVlD
YkNSTWF0cml4KHJlY29yZC5tYXRyaXhDb2VmZmljaWVudHMpKSB7Ci0gICAgICAgIGV4dGVuc2lv
bnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5KTsKLSAgICAgICAgZXh0
ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21NYXRyaXgpOworICAgIC8vIEZJWE1FOiBBIGJsb2NrIG1p
Z2h0IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBmcmFtZSwgYnV0IG9ubHkgdGhpcyBmcmFtZSBoYXMg
YmVlbiByZWFkIGludG8gYGN1cnJlbnRCbG9ja0J1ZmZlcmAuCisgICAgLy8gQmVsb3cgd2UgY3Jl
YXRlIHNhbXBsZSBidWZmZXJzIGZvciBlYWNoIGZyYW1lLCBlYWNoIHdpdGggdGhlIGJsb2NrJ3Mg
dGltZWNvZGUgYW5kIGBudW1fZnJhbWVzYCB2YWx1ZS4KKyAgICAvLyBTaG91bGRuJ3Qgd2UgY3Jl
YXRlIGp1c3Qgb25lIHNhbXBsZSBidWZmZXIgb25jZSBhbGwgdGhlIGJsb2NrJ3MgZnJhbWVzIGhh
dmUgYmVlbiByZWFkIGludG8gYGN1cnJlbnRCbG9ja0J1ZmZlcmA/CisKKyAgICB1aW50NjRfdCBk
dXJhdGlvbiA9IDA7CisgICAgaWYgKHRyYWNrLmRlZmF1bHRfZHVyYXRpb24uaXNfcHJlc2VudCgp
KQorICAgICAgICBkdXJhdGlvbiA9IHRyYWNrLmRlZmF1bHRfZHVyYXRpb24udmFsdWUoKSAqIHBy
ZXNlbnRhdGlvblRpbWUudGltZXNjYWxlIC8gMTAwMDAwMDAwMDsKKworICAgIENNU2FtcGxlQnVm
ZmVyUmVmIHJhd1NhbXBsZUJ1ZmZlciA9IG51bGxwdHI7CisgICAgc2l6ZV90IGZyYW1lU2l6ZSA9
IENNQmxvY2tCdWZmZXJHZXREYXRhTGVuZ3RoKG1fY3VycmVudEJsb2NrQnVmZmVyLmdldCgpKTsK
KyAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nID0geyBDTVRpbWVNYWtlKGR1cmF0aW9uLCBw
cmVzZW50YXRpb25UaW1lLnRpbWVzY2FsZSksIHByZXNlbnRhdGlvblRpbWUsIHByZXNlbnRhdGlv
blRpbWUgfTsKKyAgICBlcnIgPSBDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5KGtDRkFsbG9jYXRv
ckRlZmF1bHQsIG1fY3VycmVudEJsb2NrQnVmZmVyLmdldCgpLCBmb3JtYXREZXNjcmlwdGlvbigp
LmdldCgpLCBzYW1wbGVDb3VudCwgMSwgJnRpbWluZywgMSwgJmZyYW1lU2l6ZSwgJnJhd1NhbXBs
ZUJ1ZmZlcik7CisgICAgaWYgKGVycikgeworICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BP
U1NJQkxFKCJDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5IGZhaWxlZCB3aXRoIGVycm9yIiwgZXJy
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGFkb3B0
Q0YocmF3U2FtcGxlQnVmZmVyKTsKIAotICAgIGF1dG8gZXh0ZW5zaW9ucyA9IGFkb3B0Q0YoQ0ZE
aWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGV4dGVuc2lvbnNLZXlzLmRhdGEo
KSwgZXh0ZW5zaW9uc1ZhbHVlcy5kYXRhKCksIGV4dGVuc2lvbnNLZXlzLnNpemUoKSwgJmtDRlR5
cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNr
cykpOworICAgIG1fY3VycmVudEJsb2NrQnVmZmVyID0gbnVsbHB0cjsKKyAgICBtX2N1cnJlbnRC
bG9ja0J1ZmZlclBvc2l0aW9uID0gMDsKIAotICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJl
ZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7Ci0gICAgaWYgKG5vRXJyICE9IENNVmlkZW9G
b3JtYXREZXNjcmlwdGlvbkNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ01WaWRlb0NvZGVj
VHlwZV9WUDksIHBhcnNlci53aWR0aCgpLCBwYXJzZXIuaGVpZ2h0KCksIGV4dGVuc2lvbnMuZ2V0
KCksICZmb3JtYXREZXNjcmlwdGlvbikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJl
dHVybiBhZG9wdENGKGZvcm1hdERlc2NyaXB0aW9uKTsKKyAgICBpZiAoIW1faGVhZGVyUGFyc2Vy
LmtleSgpKSB7CisgICAgICAgIGF1dG8gYXR0YWNobWVudHNBcnJheSA9IENNU2FtcGxlQnVmZmVy
R2V0U2FtcGxlQXR0YWNobWVudHNBcnJheShzYW1wbGVCdWZmZXIuZ2V0KCksIHRydWUpOworICAg
ICAgICBBU1NFUlQoYXR0YWNobWVudHNBcnJheSk7CisgICAgICAgIGlmICghYXR0YWNobWVudHNB
cnJheSkgeworICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01TYW1w
bGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5IHJldHVybmVkIE5VTEwiKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMCwg
Y291bnQgPSBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSk7IGkgPCBjb3VudDsgKytp
KSB7CisgICAgICAgICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gY2hl
Y2tlZF9jZl9jYXN0PENGTXV0YWJsZURpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5k
ZXgoYXR0YWNobWVudHNBcnJheSwgaSkpOworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFs
dWUoYXR0YWNobWVudHMsIGtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfTm90U3luYywga0NGQm9vbGVh
blRydWUpOworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byB0cmFja0lEID0gdHJhY2sudHJh
Y2tfdWlkLnZhbHVlKCk7CisgICAgcGFyc2VyKCkucHJvdmlkZU1lZGlhRGF0YShzYW1wbGVCdWZm
ZXIubGVha1JlZigpLCB0cmFja0lEKTsKIH0KLSNlbmRpZgogCi13ZWJtOjpTdGF0dXMgU291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6T25GcmFtZShjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwg
UmVhZGVyKiByZWFkZXIsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZykKK3dlYm06OlN0YXR1cyBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3
ZWJtOjpSZWFkZXImIHJlYWRlciwgY29uc3QgRnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2
NF90KiBieXRlc1JlbWFpbmluZywgY29uc3QgQ01UaW1lJiBwcmVzZW50YXRpb25UaW1lLCBpbnQg
c2FtcGxlQ291bnQpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKG1ldGFkYXRhKTsKLSAgICBVTlVTRURf
UEFSQU0oYnl0ZXNSZW1haW5pbmcpOworICAgIEFTU0VSVF9VTlVTRUQoc2FtcGxlQ291bnQsIHNh
bXBsZUNvdW50ID09IDEpOwogCi0gICAgQVNTRVJUKHJlYWRlcik7Ci0gICAgaWYgKCFyZWFkZXIp
Ci0gICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5KTsKKyAgICBp
ZiAoIWZvcm1hdERlc2NyaXB0aW9uKCkpIHsKKyAgICAgICAgaWYgKCF0cmFjaygpLmNvZGVjX3By
aXZhdGUuaXNfcHJlc2VudCgpKSB7CisgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BP
U1NJQkxFKCJBdWRpbyB0cmFjayBtaXNzaW5nIG1hZ2ljIGNvb2tpZSIpOworICAgICAgICAgICAg
cmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOworICAgICAgICB9CiAKLSAgICBp
ZiAoIW1fY3VycmVudEJsb2NrKQotICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a0ludmFs
aWRFbGVtZW50SWQpOworICAgICAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4g
Zm9ybWF0RGVzY3JpcHRpb247CisgICAgICAgIGF1dG8mIHByaXZhdGVEYXRhID0gdHJhY2soKS5j
b2RlY19wcml2YXRlLnZhbHVlKCk7CisgICAgICAgIGlmIChjb2RlYygpID09IENvZGVjVHlwZTo6
Vm9yYmlzKQorICAgICAgICAgICAgZm9ybWF0RGVzY3JpcHRpb24gPSBjcmVhdGVWb3JiaXNBdWRp
b0Zvcm1hdERlc2NyaXB0aW9uKHByaXZhdGVEYXRhLnNpemUoKSwgcHJpdmF0ZURhdGEuZGF0YSgp
KTsKKyAgICAgICAgZWxzZSBpZiAoY29kZWMoKSA9PSBDb2RlY1R5cGU6Ok9wdXMpCisgICAgICAg
ICAgICBmb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZU9wdXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9u
KHByaXZhdGVEYXRhLnNpemUoKSwgcHJpdmF0ZURhdGEuZGF0YSgpKTsKIAotICAgIGF1dG8qIGJs
b2NrID0gV1RGOjpzd2l0Y2hPbigqbV9jdXJyZW50QmxvY2ssIFtdKEJsb2NrJiBibG9jaykgewot
ICAgICAgICByZXR1cm4gJmJsb2NrOwotICAgIH0sIFtdKFNpbXBsZUJsb2NrJiBibG9jaykgLT4g
QmxvY2sqIHsKLSAgICAgICAgcmV0dXJuICZibG9jazsKLSAgICB9KTsKLSAgICBpZiAoIWJsb2Nr
KQotICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a0ludmFsaWRFbGVtZW50SWQpOworICAg
ICAgICBpZiAoIWZvcm1hdERlc2NyaXB0aW9uKSB7CisgICAgICAgICAgICBQQVJTRVJfTE9HX0VS
Uk9SX0lGX1BPU1NJQkxFKCJGYWlsZWQgdG8gY3JlYXRlIGZvcm1hdCBkZXNjcmlwdGlvbiBmcm9t
IGF1ZGlvIHRyYWNrIGhlYWRlciIpOworICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwg
Ynl0ZXNSZW1haW5pbmcpOworICAgICAgICB9CiAKLSAgICBhdXRvIHRyYWNrTnVtYmVyID0gYmxv
Y2stPnRyYWNrX251bWJlcjsKKyAgICAgICAgYXV0byBzdHJlYW1EZXNjcmlwdGlvbiA9IENNQXVk
aW9Gb3JtYXREZXNjcmlwdGlvbkdldFN0cmVhbUJhc2ljRGVzY3JpcHRpb24oZm9ybWF0RGVzY3Jp
cHRpb24uZ2V0KCkpOworICAgICAgICBpZiAoIXN0cmVhbURlc2NyaXB0aW9uKSB7CisgICAgICAg
ICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUF1ZGlvRm9ybWF0RGVzY3JpcHRp
b25HZXRTdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIGZhaWxlZCIpOworICAgICAgICAgICAgcmV0dXJu
IFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOworICAgICAgICB9CisgICAgICAgIG1fcGFj
a2V0RHVyYXRpb24gPSBDTVRpbWVNYWtlKHN0cmVhbURlc2NyaXB0aW9uLT5tRnJhbWVzUGVyUGFj
a2V0LCBzdHJlYW1EZXNjcmlwdGlvbi0+bVNhbXBsZVJhdGUpOwogCi0gICAgYXV0byogdHJhY2tE
YXRhID0gdHJhY2tEYXRhRm9yVHJhY2tOdW1iZXIodHJhY2tOdW1iZXIpOwotICAgIGlmICghdHJh
Y2tEYXRhKQotICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a0ludmFsaWRFbGVtZW50SWQp
OwotICAgIGF1dG8mIHRyYWNrID0gdHJhY2tEYXRhLT50cmFjazsKKyAgICAgICAgc2V0Rm9ybWF0
RGVzY3JpcHRpb24oV1RGTW92ZShmb3JtYXREZXNjcmlwdGlvbikpOworICAgIH0KIAotICAgIHVp
bnQ2NF90IGR1cmF0aW9uID0gMDsKLSAgICBpZiAodHJhY2suZGVmYXVsdF9kdXJhdGlvbi5pc19w
cmVzZW50KCkpCi0gICAgICAgIGR1cmF0aW9uID0gdHJhY2suZGVmYXVsdF9kdXJhdGlvbi52YWx1
ZSgpICogbV90aW1lc2NhbGUgLyAxMDAwMDAwMDAwOworICAgIGlmIChtX3BhY2tldERhdGEuaXNF
bXB0eSgpKSB7CisgICAgICAgIG1fcGFja2V0RGF0YS5yZXNpemUobWV0YWRhdGEuc2l6ZSk7Cisg
ICAgICAgIG1fcGFja2V0Qnl0ZXNSZWFkID0gMDsKKyAgICAgICAgbV9ieXRlT2Zmc2V0ID0gbWV0
YWRhdGEucG9zaXRpb247CisgICAgICAgIG1fc2FtcGxlUHJlc2VudGF0aW9uVGltZSA9IHByZXNl
bnRhdGlvblRpbWU7CisgICAgfQogCi0jaWYgRU5BQkxFKFZQOSkKLSAgICBpZiAodHJhY2suY29k
ZWNfaWQuaXNfcHJlc2VudCgpICYmIHRyYWNrLmNvZGVjX2lkLnZhbHVlKCkgPT0gIlZfVlA5Iikg
ewotICAgICAgICBpZiAoIXRyYWNrRGF0YS0+Y3VycmVudEJsb2NrQnVmZmVyKSB7Ci0gICAgICAg
ICAgICBDTUJsb2NrQnVmZmVyUmVmIHJhd0Jsb2NrQnVmZmVyID0gbnVsbHB0cjsKLSAgICAgICAg
ICAgIGlmIChub0VyciAhPSBDTUJsb2NrQnVmZmVyQ3JlYXRlV2l0aE1lbW9yeUJsb2NrKGtDRkFs
bG9jYXRvckRlZmF1bHQsIG51bGxwdHIsIG1ldGFkYXRhLnNpemUsIGtDRkFsbG9jYXRvckRlZmF1
bHQsIG51bGxwdHIsIDAsIG1ldGFkYXRhLnNpemUsIDAsICZyYXdCbG9ja0J1ZmZlcikpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIFNraXAocmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAg
ICAgICB0cmFja0RhdGEtPmN1cnJlbnRCbG9ja0J1ZmZlciA9IGFkb3B0Q0YocmF3QmxvY2tCdWZm
ZXIpOwotICAgICAgICAgICAgdHJhY2tEYXRhLT5jdXJyZW50QmxvY2tCdWZmZXJQb3NpdGlvbiA9
IDA7Ci0KLSAgICAgICAgICAgIGlmIChub0VyciAhPSBDTUJsb2NrQnVmZmVyQXNzdXJlQmxvY2tN
ZW1vcnkodHJhY2tEYXRhLT5jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCkpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBTa2lwKHJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwotICAgICAgICB9CisgICAg
c2l6ZV90IHBhY2tldERhdGFPZmZzZXQgPSBtX3BhY2tldEJ5dGVzUmVhZDsKKyAgICBzaXplX3Qg
Ynl0ZXNUb1JlYWQgPSBtZXRhZGF0YS5zaXplOworICAgIHdoaWxlIChieXRlc1RvUmVhZCkgewor
ICAgICAgICB1aW50NjRfdCBieXRlc1JlYWQ7CisgICAgICAgIGF1dG8gc3RhdHVzID0gcmVhZGVy
LlJlYWQoYnl0ZXNUb1JlYWQsIG1fcGFja2V0RGF0YS5kYXRhKCkgKyBtX3BhY2tldEJ5dGVzUmVh
ZCwgJmJ5dGVzUmVhZCk7CisgICAgICAgIGJ5dGVzVG9SZWFkIC09IGJ5dGVzUmVhZDsKKyAgICAg
ICAgKmJ5dGVzUmVtYWluaW5nIC09IGJ5dGVzUmVhZDsKKyAgICAgICAgbV9wYWNrZXRCeXRlc1Jl
YWQgKz0gYnl0ZXNSZWFkOworCisgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4ndCB5ZXQgaGFuZGxl
IHBhcnNpbmcgYSBGcmFtZSB0aGF0IGRvZXNuJ3QgaGF2ZSBhbGwgaXRzIG1lbW9yeSBhdmFpbGFi
bGUuCisgICAgICAgIGlmIChzdGF0dXMuY29kZSA9PSB3ZWJtOjpTdGF0dXM6OmtPa1BhcnRpYWwg
fHwgc3RhdHVzLmNvZGUgPT0gd2VibTo6U3RhdHVzOjprV291bGRCbG9jaykKKyAgICAgICAgICAg
IHJldHVybiBzdGF0dXM7CisgICAgfQogCi0gICAgICAgIHNpemVfdCBudW1Ub1JlYWQgPSBtZXRh
ZGF0YS5zaXplIC0gdHJhY2tEYXRhLT5jdXJyZW50QmxvY2tCdWZmZXJQb3NpdGlvbjsKLSAgICAg
ICAgc2l6ZV90IHNlZ21lbnRTaXplQXRQb3NpdGlvbiA9IDA7Ci0gICAgICAgIHVpbnQ4X3QqIGJs
b2NrQnVmZmVyRGF0YSA9IG51bGxwdHI7CisgICAgbV9wYWNrZXREZXNjcmlwdGlvbnMuYXBwZW5k
KHsgc3RhdGljX2Nhc3Q8aW50NjRfdD4ocGFja2V0RGF0YU9mZnNldCksIDAsIHN0YXRpY19jYXN0
PFVJbnQzMj4obWV0YWRhdGEuc2l6ZSkgfSk7CisgICAgYXV0byBzYW1wbGVEdXJhdGlvbiA9IENN
VGltZUdldFNlY29uZHMoQ01UaW1lU3VidHJhY3QocHJlc2VudGF0aW9uVGltZSwgbV9zYW1wbGVQ
cmVzZW50YXRpb25UaW1lKSkgKyBDTVRpbWVHZXRTZWNvbmRzKG1fcGFja2V0RHVyYXRpb24pOwor
ICAgIGlmIChzYW1wbGVEdXJhdGlvbiA+PSBtX21pbmltdW1TYW1wbGVEdXJhdGlvbikKKyAgICAg
ICAgY3JlYXRlU2FtcGxlQnVmZmVyKCk7CiAKLSAgICAgICAgd2hpbGUgKG51bVRvUmVhZCkgewot
ICAgICAgICAgICAgaWYgKG5vRXJyICE9IENNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlcih0cmFj
a0RhdGEtPmN1cnJlbnRCbG9ja0J1ZmZlci5nZXQoKSwgdHJhY2tEYXRhLT5jdXJyZW50QmxvY2tC
dWZmZXJQb3NpdGlvbiwgJnNlZ21lbnRTaXplQXRQb3NpdGlvbiwgbnVsbHB0ciwgKGNoYXIqKikm
YmxvY2tCdWZmZXJEYXRhKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2tpcChyZWFkZXIsIGJ5
dGVzUmVtYWluaW5nKTsKKyAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7
Cit9CiAKLSAgICAgICAgICAgIHNpemVfdCBudW1Ub1JlYWRGcm9tVGhpc1NlZ21lbnQgPSBzdGQ6
Om1pbihudW1Ub1JlYWQsIHNlZ21lbnRTaXplQXRQb3NpdGlvbik7Ci0gICAgICAgICAgICB1aW50
NjRfdCBudW1BY3R1YWxseVdyaXR0ZW5Ub1RoaXNTZWdtZW50Owordm9pZCBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKCkKK3sKKyAgICBp
ZiAobV9wYWNrZXREZXNjcmlwdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgICAgIGF1dG8gc3RhdHVzID0gbV9yZWFkZXItPlJlYWQobnVtVG9SZWFkRnJvbVRoaXNT
ZWdtZW50LCAodWludDhfdCopYmxvY2tCdWZmZXJEYXRhLCAmbnVtQWN0dWFsbHlXcml0dGVuVG9U
aGlzU2VnbWVudCk7Ci0gICAgICAgICAgICBudW1Ub1JlYWQgLT0gbnVtQWN0dWFsbHlXcml0dGVu
VG9UaGlzU2VnbWVudDsKLSAgICAgICAgICAgICpieXRlc1JlbWFpbmluZyAtPSBudW1BY3R1YWxs
eVdyaXR0ZW5Ub1RoaXNTZWdtZW50OwotICAgICAgICAgICAgdHJhY2tEYXRhLT5jdXJyZW50Qmxv
Y2tCdWZmZXJQb3NpdGlvbiArPSBudW1BY3R1YWxseVdyaXR0ZW5Ub1RoaXNTZWdtZW50OworICAg
IEFTU0VSVCghbV9wYWNrZXREYXRhLmlzRW1wdHkoKSk7CiAKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBjYW4ndCB5ZXQgaGFuZGxlIHBhcnNpbmcgYSBGcmFtZSB0aGF0IGRvZXNuJ3QgaGF2ZSBh
bGwgaXRzIG1lbW9yeSBhdmFpbGFibGUuCi0gICAgICAgICAgICBpZiAoc3RhdHVzLmNvZGUgPT0g
d2VibTo6U3RhdHVzOjprT2tQYXJ0aWFsIHx8IHN0YXR1cy5jb2RlID09IHdlYm06OlN0YXR1czo6
a1dvdWxkQmxvY2spCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfQor
ICAgIENNQmxvY2tCdWZmZXJSZWYgYmxvY2tCdWZmZXIgPSBudWxscHRyOworICAgIGF1dG8gZXJy
ID0gQ01CbG9ja0J1ZmZlckNyZWF0ZVdpdGhNZW1vcnlCbG9jayhrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBudWxscHRyLCBtX3BhY2tldERhdGEuc2l6ZUluQnl0ZXMoKSwga0NGQWxsb2NhdG9yRGVmYXVs
dCwgbnVsbHB0ciwgMCwgbV9wYWNrZXREYXRhLnNpemVJbkJ5dGVzKCksIGtDTUJsb2NrQnVmZmVy
QXNzdXJlTWVtb3J5Tm93RmxhZywgJmJsb2NrQnVmZmVyKTsKKyAgICBpZiAoZXJyKSB7CisgICAg
ICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQmxvY2tCdWZmZXJDcmVhdGVXaXRo
TWVtb3J5QmxvY2sgZmFpbGVkIHdpdGggJWQiLCBlcnIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGF1dG8gYnVmZmVyID0gYWRvcHRDRihibG9ja0J1ZmZlcik7CiAKLSAgICAgICAgaWYg
KG5vRXJyICE9IENNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlcih0cmFja0RhdGEtPmN1cnJlbnRC
bG9ja0J1ZmZlci5nZXQoKSwgMCwgJnNlZ21lbnRTaXplQXRQb3NpdGlvbiwgbnVsbHB0ciwgKGNo
YXIqKikmYmxvY2tCdWZmZXJEYXRhKSkKLSAgICAgICAgICAgIHJldHVybiBTa2lwKHJlYWRlciwg
Ynl0ZXNSZW1haW5pbmcpOwotCi0gICAgICAgIGF1dG8mIGhlYWRlclBhcnNlciA9IHRyYWNrRGF0
YS0+aGVhZGVyUGFyc2VyOwotICAgICAgICBpZiAoIWhlYWRlclBhcnNlci5QYXJzZVVuY29tcHJl
c3NlZEhlYWRlcihibG9ja0J1ZmZlckRhdGEsIHNlZ21lbnRTaXplQXRQb3NpdGlvbikpCi0gICAg
ICAgICAgICByZXR1cm4gU2tpcChyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLQotICAgICAgICAv
LyBPbmx5IHVwZGF0ZSB0aGUgZm9ybWF0IGRlc2NyaXB0aW9uIHdoZW4gdGhlIGhlYWRlciBpbmRp
Y2F0ZXMgdGhhdCB0aGUgc2FtcGxlIGlzCi0gICAgICAgIC8vIGEga2V5LWZyYW1lLCBvdGhlcndp
c2UgY29sb3IgaW5mb3JtYXRpb24gd2lsbCBub3QgYmUgcGFyc2VkLgotICAgICAgICBpZiAoaGVh
ZGVyUGFyc2VyLmtleSgpKQotICAgICAgICAgICAgdHJhY2tEYXRhLT5mb3JtYXREZXNjcmlwdGlv
biA9IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOUhlYWRlclBhcnNlcihoZWFkZXJQYXJz
ZXIsIHRyYWNrLnZpZGVvLnZhbHVlKCkuY29sb3VyKTsKLSAgICAgICAgaWYgKCF0cmFja0RhdGEt
PmZvcm1hdERlc2NyaXB0aW9uKQotICAgICAgICAgICAgcmV0dXJuIFNraXAocmVhZGVyLCBieXRl
c1JlbWFpbmluZyk7Ci0KLSAgICAgICAgYXV0byBwdHMgPSBDTVRpbWVNYWtlKGJsb2NrLT50aW1l
Y29kZSArIG1fY3VycmVudFRpbWVjb2RlLCBtX3RpbWVzY2FsZSk7Ci0gICAgICAgIENNU2FtcGxl
VGltaW5nSW5mbyB0aW1pbmcgPSB7IENNVGltZU1ha2UoZHVyYXRpb24sIG1fdGltZXNjYWxlKSwg
cHRzLCBwdHMgfTsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBtZXRhZGF0YS5zaXplOwotCi0gICAg
ICAgIGF1dG8gc2FtcGxlQ291bnQgPSBibG9jay0+bnVtX2ZyYW1lczsKLSAgICAgICAgQ01TYW1w
bGVCdWZmZXJSZWYgcmF3U2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKG5vRXJy
ICE9IENNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdHJhY2tE
YXRhLT5jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCksIHRyYWNrRGF0YS0+Zm9ybWF0RGVzY3JpcHRp
b24uZ2V0KCksIHNhbXBsZUNvdW50LCAxLCAmdGltaW5nLCAxLCAmc2l6ZSwgJnJhd1NhbXBsZUJ1
ZmZlcikpCi0gICAgICAgICAgICByZXR1cm4gU2tpcChyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsK
LSAgICAgICAgYXV0byBzYW1wbGVCdWZmZXIgPSBhZG9wdENGKHJhd1NhbXBsZUJ1ZmZlcik7Ci0K
LSAgICAgICAgdHJhY2tEYXRhLT5jdXJyZW50QmxvY2tCdWZmZXIgPSBudWxscHRyOwotICAgICAg
ICB0cmFja0RhdGEtPmN1cnJlbnRCbG9ja0J1ZmZlclBvc2l0aW9uID0gMDsKLQotICAgICAgICBp
ZiAoIWhlYWRlclBhcnNlci5rZXkoKSkgewotICAgICAgICAgICAgYXV0byBhdHRhY2htZW50c0Fy
cmF5ID0gQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5KHNhbXBsZUJ1ZmZl
ci5nZXQoKSwgdHJ1ZSk7Ci0gICAgICAgICAgICBBU1NFUlQoYXR0YWNobWVudHNBcnJheSk7Ci0g
ICAgICAgICAgICBpZiAoIWF0dGFjaG1lbnRzQXJyYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFNraXAocmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAgICAgICBmb3IgKENGSW5kZXgg
aSA9IDAsIGNvdW50ID0gQ0ZBcnJheUdldENvdW50KGF0dGFjaG1lbnRzQXJyYXkpOyBpIDwgY291
bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0YWNo
bWVudHMgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdl
dFZhbHVlQXRJbmRleChhdHRhY2htZW50c0FycmF5LCBpKSk7Ci0gICAgICAgICAgICAgICAgQ0ZE
aWN0aW9uYXJ5U2V0VmFsdWUoYXR0YWNobWVudHMsIGtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfTm90
U3luYywga0NGQm9vbGVhblRydWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgZXJy
ID0gQ01CbG9ja0J1ZmZlclJlcGxhY2VEYXRhQnl0ZXMobV9wYWNrZXREYXRhLmRhdGEoKSwgYnVm
ZmVyLmdldCgpLCAwLCBtX3BhY2tldERhdGEuc2l6ZUluQnl0ZXMoKSk7CisgICAgaWYgKGVycikg
eworICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUJsb2NrQnVmZmVyUmVw
bGFjZURhdGFCeXRlcyBmYWlsZWQgd2l0aCAlZCIsIGVycik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBDTVNhbXBsZUJ1ZmZlclJlZiByYXdTYW1wbGVCdWZmZXIgPSBudWxscHRyOwor
ICAgIGVyciA9IENNQXVkaW9TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeVdpdGhQYWNrZXREZXNjcmlw
dGlvbnMoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYnVmZmVyLmdldCgpLCBmb3JtYXREZXNjcmlwdGlv
bigpLmdldCgpLCBtX3BhY2tldERlc2NyaXB0aW9ucy5zaXplKCksIG1fc2FtcGxlUHJlc2VudGF0
aW9uVGltZSwgbV9wYWNrZXREZXNjcmlwdGlvbnMuZGF0YSgpLCAmcmF3U2FtcGxlQnVmZmVyKTsK
KyAgICBpZiAoZXJyKSB7CisgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNN
QXVkaW9TYW1wbGVCdWZmZXJDcmVhdGVXaXRoUGFja2V0RGVzY3JpcHRpb25zIGZhaWxlZCB3aXRo
ICVkIiwgZXJyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhdXRvIHNhbXBsZUJ1ZmZl
ciA9IGFkb3B0Q0YocmF3U2FtcGxlQnVmZmVyKTsKIAotICAgICAgICBhdXRvIHRyYWNrSUQgPSB0
cmFjay50cmFja191aWQudmFsdWUoKTsKKyAgICBtX3BhY2tldERhdGEuY2xlYXIoKTsKKyAgICBt
X3BhY2tldERlc2NyaXB0aW9ucy5jbGVhcigpOwogCi0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQo
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgc2FtcGxlQnVmZmVyID0gV1RG
TW92ZShzYW1wbGVCdWZmZXIpLCB0cmFja0lEXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGlm
ICghbV9kaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2spCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgYXV0byBtZWRpYVNhbXBsZSA9IE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3Jl
YXRlKHNhbXBsZUJ1ZmZlci5nZXQoKSwgdHJhY2tJRCk7Ci0gICAgICAgICAgICBtX2RpZFByb3Zp
ZGVNZWRpYURhdGFDYWxsYmFjayhXVEZNb3ZlKG1lZGlhU2FtcGxlKSwgdHJhY2tJRCwgZW1wdHlT
dHJpbmcoKSk7Ci0gICAgICAgIH0pOworICAgIGF1dG8gdHJhY2tJRCA9IHRyYWNrKCkudHJhY2tf
dWlkLnZhbHVlKCk7CisgICAgcGFyc2VyKCkucHJvdmlkZU1lZGlhRGF0YShzYW1wbGVCdWZmZXIu
bGVha1JlZigpLCB0cmFja0lEKTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpm
bHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMoKQoreworICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX3Ry
YWNrcykgeworICAgICAgICBpZiAodHJhY2stPnRyYWNrVHlwZSgpID09IFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OlRyYWNrRGF0YTo6VHlwZTo6QXVkaW8pCisgICAgICAgICAgICBkb3duY2FzdDxB
dWRpb1RyYWNrRGF0YT4odHJhY2suZ2V0KCkpLmNyZWF0ZVNhbXBsZUJ1ZmZlcigpOwogICAgIH0K
LSNlbmRpZgorfQogCi0gICAgcmV0dXJuIFNraXAocmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Cit2
b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldE1pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9u
KGZsb2F0IGR1cmF0aW9uKQoreworICAgIG1fbWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24gPSBk
dXJhdGlvbjsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCmluZGV4IDNhODQ2
NDU5YTNlYjM1NTM2MTIxMjk3NmM4ZWFkZTQ2M2Q2M2IxOTcuLmJjZjE2MjQxNDE5ZDUzYTQ1NzFi
ZGI1OTRmZTUwMzk3YzM0ZmNhM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKQEAg
LTI4LDYgKzI4LDggQEAKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogCiAjaW5jbHVkZSAiU291
cmNlQnVmZmVyUGFyc2VyLmgiCisjaW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+
CisjaW5jbHVkZSA8Q29yZU1lZGlhL0NNVGltZS5oPgogI2luY2x1ZGUgPGNvbW1vbi92cDlfaGVh
ZGVyX3BhcnNlci5oPgogI2luY2x1ZGUgPHdlYm0vY2FsbGJhY2suaD4KICNpbmNsdWRlIDx3ZWJt
L3N0YXR1cy5oPgpAQCAtNDEsNyArNDMsNiBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogI2luY2x1ZGUgPHd0Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5oPgogCi10eXBlZGVm
IHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlciAqQ01TYW1wbGVCdWZmZXJSZWY7CiB0eXBlZGVm
IGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uKiBDTUZvcm1hdERlc2NyaXB0
aW9uUmVmOwogdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQ01CbG9ja0J1ZmZlciAqQ01CbG9ja0J1ZmZl
clJlZjsKIApAQCAtNTEsMTAgKzUyLDE1IEBAIGNsYXNzIFdlYm1QYXJzZXI7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgTWVkaWFTYW1wbGVBVkZPYmpDOworCiBjbGFzcyBXRUJDT1JF
X0VYUE9SVCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNIDogcHVibGljIFNvdXJjZUJ1ZmZlclBhcnNl
ciwgcHJpdmF0ZSB3ZWJtOjpDYWxsYmFjayB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CisgICAgY2xhc3MgU3RyZWFtaW5nVmVjdG9yUmVhZGVyOworCiAgICAgc3RhdGlj
IE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBpc0NvbnRlbnRUeXBlU3VwcG9ydGVkKGNv
bnN0IENvbnRlbnRUeXBlJik7CisgICAgc3RhdGljIFJlZlB0cjxTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNPiBjcmVhdGUoY29uc3QgQ29udGVudFR5cGUmKTsKIAogICAgIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk0oKTsKICAgICB+U291cmNlQnVmZmVyUGFyc2VyV2ViTSgpOwpAQCAtNzEsOSArNzcsMTIg
QEAgcHVibGljOgogICAgIHZvaWQgcmVzZXRQYXJzZXJTdGF0ZSgpIGZpbmFsOwogICAgIHZvaWQg
aW52YWxpZGF0ZSgpIGZpbmFsOwogCi0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgdm9p
ZCBmbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMoKTsKKyAgICB2b2lkIHNldE1pbmltdW1BdWRpb1Nh
bXBsZUR1cmF0aW9uKGZsb2F0KTsKKwogICAgIHZvaWQgc2V0TG9nZ2VyKGNvbnN0IFdURjo6TG9n
Z2VyJiwgY29uc3Qgdm9pZCogaWRlbnRpZmllcikgZmluYWw7Ci0jZW5kaWYKKworICAgIHZvaWQg
cHJvdmlkZU1lZGlhRGF0YShSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+LCB1aW50NjRfdCk7
CiAKICAgICBlbnVtIGNsYXNzIEVycm9yQ29kZSA6IGludDMyX3QgewogICAgICAgICBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNRXJyb3JDb2RlU3RhcnQgPSAyMDAwLApAQCAtOTUsMjAgKzEwNCwxMTkg
QEAgcHVibGljOgogICAgICAgICBSZWFkaW5nQ2x1c3RlciwKICAgICB9OwogCi1wcml2YXRlOgot
ICAgIHN0cnVjdCBUcmFja0RhdGEgewotICAgICAgICB3ZWJtOjpUcmFja0VudHJ5IHRyYWNrOwot
ICAgICAgICB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXIgaGVhZGVyUGFyc2VyOwotICAgICAg
ICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gZm9ybWF0RGVzY3JpcHRpb247Ci0g
ICAgICAgIFJldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiBjdXJyZW50QmxvY2tCdWZmZXI7Ci0g
ICAgICAgIHVpbnQ2NF90IGN1cnJlbnRCbG9ja0J1ZmZlclBvc2l0aW9uIHsgMCB9OworICAgIGVu
dW0gY2xhc3MgQ29kZWNUeXBlIDogdWludDhfdCB7CisgICAgICAgIFVuc3VwcG9ydGVkLAorICAg
ICAgICBWUDksCisgICAgICAgIFZvcmJpcywKKyAgICAgICAgT3B1cywKKyAgICB9OworCisgICAg
Y2xhc3MgVHJhY2tEYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgYXV0byBjcmVhdGUoQ29kZWNUeXBlIGNvZGVjVHlwZSwg
Y29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgU291cmNlQnVmZmVyUGFyc2VyV2Vi
TSYgcGFyc2VyKSAtPiBVbmlxdWVSZWY8VHJhY2tEYXRhPgorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxUcmFja0RhdGE+KGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwg
VHlwZTo6VW5rbm93biwgcGFyc2VyKTsKKyAgICAgICAgfQorCisgICAgICAgIGVudW0gY2xhc3Mg
VHlwZSB7CisgICAgICAgICAgICBVbmtub3duLAorICAgICAgICAgICAgQXVkaW8sCisgICAgICAg
ICAgICBWaWRlbywKKyAgICAgICAgfTsKKworICAgICAgICBUcmFja0RhdGEoQ29kZWNUeXBlIGNv
ZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgVHlwZSB0cmFja1R5
cGUsIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIHBhcnNlcikKKyAgICAgICAgICAgIDogbV9jb2Rl
YyB7IGNvZGVjVHlwZSB9CisgICAgICAgICAgICAsIG1fdHJhY2sgeyB3ZWJtOjpUcmFja0VudHJ5
IHsgdHJhY2tFbnRyeSB9IH0KKyAgICAgICAgICAgICwgbV90cmFja1R5cGUgeyB0cmFja1R5cGUg
fQorICAgICAgICAgICAgLCBtX3BhcnNlciB7IHBhcnNlciB9CisgICAgICAgIHsKKyAgICAgICAg
fQorICAgICAgICB2aXJ0dWFsIH5UcmFja0RhdGEoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgQ29k
ZWNUeXBlIGNvZGVjKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlYzsgfQorICAgICAgICB3ZWJtOjpU
cmFja0VudHJ5JiB0cmFjaygpIHsgcmV0dXJuIG1fdHJhY2s7IH0KKyAgICAgICAgVHlwZSB0cmFj
a1R5cGUoKSBjb25zdCB7IHJldHVybiBtX3RyYWNrVHlwZTsgfQorCisgICAgICAgIFJldGFpblB0
cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBmb3JtYXREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1f
Zm9ybWF0RGVzY3JpcHRpb247IH0KKyAgICAgICAgdm9pZCBzZXRGb3JtYXREZXNjcmlwdGlvbihS
ZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4mJiBkZXNjcmlwdGlvbikgeyBtX2Zvcm1h
dERlc2NyaXB0aW9uID0gV1RGTW92ZShkZXNjcmlwdGlvbik7IH0KKworICAgICAgICBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIoKSBjb25zdCB7IHJldHVybiBtX3BhcnNlcjsgfQorICAg
ICAgICAKKyAgICAgICAgdmlydHVhbCB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJt
OjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqLCBjb25zdCBD
TVRpbWUmLCBpbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgcmV0dXJuIHdlYm06OlN0YXR1cyh3ZWJtOjpTdGF0dXM6OmtJbnZhbGlk
RWxlbWVudElkKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ29kZWNUeXBl
IG1fY29kZWM7CisgICAgICAgIHdlYm06OlRyYWNrRW50cnkgbV90cmFjazsKKyAgICAgICAgVHlw
ZSBtX3RyYWNrVHlwZTsKKyAgICAgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+
IG1fZm9ybWF0RGVzY3JpcHRpb247CisgICAgICAgIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIG1f
cGFyc2VyOworICAgIH07CisKKyAgICBjbGFzcyBWaWRlb1RyYWNrRGF0YSA6IHB1YmxpYyBUcmFj
a0RhdGEgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIGF1dG8gY3JlYXRlKENvZGVjVHlw
ZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk0mIHBhcnNlcikgLT4gVW5pcXVlUmVmPFZpZGVvVHJhY2tEYXRhPgorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxWaWRlb1RyYWNrRGF0YT4o
Y29kZWNUeXBlLCB0cmFja0VudHJ5LCBwYXJzZXIpOworICAgICAgICB9CisKKyAgICAgICAgVmlk
ZW9UcmFja0RhdGEoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYg
dHJhY2tFbnRyeSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2VyKQorICAgICAgICAgICAg
OiBUcmFja0RhdGEoY29kZWNUeXBlLCB0cmFja0VudHJ5LCBUeXBlOjpWaWRlbywgcGFyc2VyKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1l
RGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3Qq
LCBjb25zdCBDTVRpbWUmLCBpbnQpIGZpbmFsOworICAgICAgICAKKyAgICBwcml2YXRlOgorICAg
ICAgICB2b2lkIGNyZWF0ZVNhbXBsZUJ1ZmZlcihjb25zdCBDTVRpbWUmLCBpbnQpOworICAgICAg
ICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCB7IHJldHVybiAiVmlkZW9UcmFja0Rh
dGEiOyB9CisKKyAgICAgICAgdnA5X3BhcnNlcjo6VnA5SGVhZGVyUGFyc2VyIG1faGVhZGVyUGFy
c2VyOworICAgICAgICBSZXRhaW5QdHI8Q01CbG9ja0J1ZmZlclJlZj4gbV9jdXJyZW50QmxvY2tC
dWZmZXI7CisgICAgICAgIHVpbnQ2NF90IG1fY3VycmVudEJsb2NrQnVmZmVyUG9zaXRpb24geyAw
IH07CisgICAgfTsKKworICAgIGNsYXNzIEF1ZGlvVHJhY2tEYXRhIDogcHVibGljIFRyYWNrRGF0
YSB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgYXV0byBjcmVhdGUoQ29kZWNUeXBlIGNv
ZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgU291cmNlQnVmZmVy
UGFyc2VyV2ViTSYgcGFyc2VyLCBmbG9hdCBtaW5pbXVtU2FtcGxlRHVyYXRpb24pIC0+IFVuaXF1
ZVJlZjxBdWRpb1RyYWNrRGF0YT4KKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmlxdWVSZWY8QXVkaW9UcmFja0RhdGE+KGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwgcGFyc2VyLCBt
aW5pbXVtU2FtcGxlRHVyYXRpb24pOworICAgICAgICB9CisKKyAgICAgICAgQXVkaW9UcmFja0Rh
dGEoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRy
eSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2VyLCBmbG9hdCBtaW5pbXVtU2FtcGxlRHVy
YXRpb24pCisgICAgICAgICAgICA6IFRyYWNrRGF0YSB7IGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwg
VHlwZTo6QXVkaW8sIHBhcnNlciB9CisgICAgICAgICAgICAsIG1fbWluaW11bVNhbXBsZUR1cmF0
aW9uIHsgbWluaW11bVNhbXBsZUR1cmF0aW9uIH0KKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgd2VibTo6U3RhdHVzIGNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qg
d2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90KiwgY29uc3QgQ01UaW1lJiwgaW50KSBmaW5h
bDsKKyAgICAgICAgdm9pZCBjcmVhdGVTYW1wbGVCdWZmZXIoKTsKKworICAgIHByaXZhdGU6Cisg
ICAgICAgIGNvbnN0IGNoYXIqIGxvZ0NsYXNzTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJBdWRpb1Ry
YWNrRGF0YSI7IH0KKworICAgICAgICBDTVRpbWUgbV9zYW1wbGVQcmVzZW50YXRpb25UaW1lOwor
ICAgICAgICBDTVRpbWUgbV9wYWNrZXREdXJhdGlvbjsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IG1fcGFja2V0RGF0YTsKKyAgICAgICAgc2l6ZV90IG1fcGFja2V0Qnl0ZXNSZWFkIHsgMCB9Owor
ICAgICAgICBzaXplX3QgbV9ieXRlT2Zmc2V0IHsgMCB9OworICAgICAgICBWZWN0b3I8QXVkaW9T
dHJlYW1QYWNrZXREZXNjcmlwdGlvbj4gbV9wYWNrZXREZXNjcmlwdGlvbnM7CisKKyAgICAgICAg
Ly8gRklYTUU6IDAuNSAtIDEuMCBzZWNvbmRzIGlzIGEgYmV0dGVyIGR1cmF0aW9uIHBlciBzYW1w
bGUgYnVmZmVyLCBidXQgdXNlIDIgc2Vjb25kcyBzbyBhdCBsZWFzdCB0aGUgZmlyc3QKKyAgICAg
ICAgLy8gc2FtcGxlIGJ1ZmZlciB3aWxsIHBsYXkgdW50aWwgd2UgZml4IFNhbXBsZUN1cnNvcjo6
Y3JlYXRlU2FtcGxlQnVmZmVyIHRvIGRlYWwgd2l0aCBgZW5kQ3Vyc29yYC4KKyAgICAgICAgZmxv
YXQgbV9taW5pbXVtU2FtcGxlRHVyYXRpb24geyAyIH07CiAgICAgfTsKLSAgICBUcmFja0RhdGEq
IHRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHVpbnQ2NF90KTsKIAotI2lmICFSRUxFQVNFX0xPR19E
SVNBQkxFRAogICAgIGNvbnN0IFdURjo6TG9nZ2VyKiBsb2dnZXJQdHIoKSBjb25zdCB7IHJldHVy
biBtX2xvZ2dlci5nZXQoKTsgfQogICAgIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25z
dCB7IHJldHVybiBtX2xvZ0lkZW50aWZpZXI7IH0KLSNlbmRpZgorCitwcml2YXRlOgorCisgICAg
VHJhY2tEYXRhKiB0cmFja0RhdGFGb3JUcmFja051bWJlcih1aW50NjRfdCk7CiAKICAgICAvLyB3
ZWJtOjpDYWxsYmFjawogICAgIHdlYm06OlN0YXR1cyBPbkVsZW1lbnRCZWdpbihjb25zdCB3ZWJt
OjpFbGVtZW50TWV0YWRhdGEmLCB3ZWJtOjpBY3Rpb24qKSBmaW5hbDsKQEAgLTEzNSwyMCArMjQz
LDE4IEBAIHByaXZhdGU6CiAKICAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6Ok5vbmUgfTsKIAot
ICAgIGNsYXNzIFN0cmVhbWluZ1ZlY3RvclJlYWRlcjsKICAgICBVbmlxdWVSZWY8U3RyZWFtaW5n
VmVjdG9yUmVhZGVyPiBtX3JlYWRlcjsKIAotICAgIFZlY3RvcjxUcmFja0RhdGE+IG1fdHJhY2tz
OworICAgIFZlY3RvcjxVbmlxdWVSZWY8VHJhY2tEYXRhPj4gbV90cmFja3M7CiAgICAgdXNpbmcg
QmxvY2tWYXJpYW50ID0gVmFyaWFudDx3ZWJtOjpCbG9jaywgd2VibTo6U2ltcGxlQmxvY2s+Owog
ICAgIE9wdGlvbmFsPEJsb2NrVmFyaWFudD4gbV9jdXJyZW50QmxvY2s7CiAgICAgT3B0aW9uYWw8
dWludDY0X3Q+IG1fcmV3aW5kVG9Qb3NpdGlvbjsKKyAgICBmbG9hdCBtX21pbmltdW1BdWRpb1Nh
bXBsZUR1cmF0aW9uIHsgMiB9OwogCiAgICAgQm94PEJpbmFyeVNlbWFwaG9yZT4gbV9pbml0aWFs
aXphdGlvblNlZ21lbnRJc0hhbmRsZWRTZW1hcGhvcmU7CiAKLSNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKICAgICBSZWZQdHI8Y29uc3QgV1RGOjpMb2dnZXI+IG1fbG9nZ2VyOwogICAgIGNvbnN0
IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxwdHIgfTsKLSNlbmRpZgogfTsKIAogfQpAQCAt
MTU3LDQgKzI2MywxMiBAQCBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNv
dXJjZUJ1ZmZlclBhcnNlcldlYk0pCiAgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlciYgcGFyc2VyKSB7IHJldHVybiBwYXJzZXIudHlwZSgpID09
IFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcjo6VHlwZTo6V2ViTTsgfQogU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19FTkQoKQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhKQorICAgIHN0YXRpYyBib29s
IGlzVHlwZShjb25zdCBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGEm
IHRyYWNrRGF0YSkgeyByZXR1cm4gdHJhY2tEYXRhLnRyYWNrVHlwZSgpID09IFdlYkNvcmU6OlNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6VHlwZTo6VmlkZW87IH0KK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRU5EKCkKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YSkKKyAgICBzdGF0aWMg
Ym9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tE
YXRhJiB0cmFja0RhdGEpIHsgcmV0dXJuIHRyYWNrRGF0YS50cmFja1R5cGUoKSA9PSBXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OlR5cGU6OkF1ZGlvOyB9CitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU09VUkNF
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5
VXRpbGl0aWVzQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1ZQOVV0aWxpdGllc0NvY29hLmgKaW5kZXggMTRjNmYzYWU5ODQzMGFhZWMyYjhlODIyYjFmYjUx
YjQ3NThhYTkzMC4uNWNjZDM1Nzc5MzE0NDk5ZTc2NDA1OGYyNDI4ZDJhNmZlYjUwM2U0NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0
aWVzQ29jb2EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9W
UDlVdGlsaXRpZXNDb2NvYS5oCkBAIC0yOCw2ICsyOCwxMyBAQAogI2lmIEVOQUJMRShWUDkpICYm
IFBMQVRGT1JNKENPQ09BKQogCiAjaW5jbHVkZSAiVlA5VXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8
d2VibS9kb21fdHlwZXMuaD4KKwordHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXRE
ZXNjcmlwdGlvbiogQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsKKworbmFtZXNwYWNlIHZwOV9wYXJz
ZXIgeworY2xhc3MgVnA5SGVhZGVyUGFyc2VyOworfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTQ0LDYgKzUxLDggQEAgZXh0ZXJuIGJvb2wgaXNWUDlEZWNvZGVyQXZhaWxhYmxlKCk7CiBl
eHRlcm4gYm9vbCBpc1ZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkU3VwcG9ydGVkKFZQQ29kZWND
b25maWd1cmF0aW9uUmVjb3JkJik7CiBleHRlcm4gYm9vbCB2YWxpZGF0ZVZQUGFyYW1ldGVycyhW
UENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYsIE1lZGlhQ2FwYWJpbGl0aWVzSW5mbyYsIGNvbnN0
IFZpZGVvQ29uZmlndXJhdGlvbiYpOwogCitSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJl
Zj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5SGVhZGVyUGFyc2VyKGNvbnN0IHZwOV9w
YXJzZXI6OlZwOUhlYWRlclBhcnNlciYsIGNvbnN0IHdlYm06OkVsZW1lbnQ8d2VibTo6Q29sb3Vy
PiYpOworCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbQppbmRleCBjODFlOTdhYTNl
NDc3ZDdjN2I4OWMxNjE5YTlmM2ZmMmYyYmVjMGExLi40MTIyNTBmOTc0N2E4OTkyNmFlZTViOTI4
MWYxYTQxM2JjMmU4YzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbQpAQCAtMjMsOCArMjMsOCBA
QAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJWUDlVdGlsaXRpZXNDb2NvYS5oIgorI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJWUDlVdGlsaXRpZXNDb2NvYS5oIgogCiAjaWYgRU5BQkxFKFZQOSkgJiYg
UExBVEZPUk0oQ09DT0EpCiAKQEAgLTM2LDEzICszNiwyMCBAQAogI2ltcG9ydCAiU3lzdGVtQmF0
dGVyeS5oIgogI2ltcG9ydCAiVmlkZW9Db25maWd1cmF0aW9uLmgiCiAjaW1wb3J0IDxDb3JlTWVk
aWEvQ01Gb3JtYXREZXNjcmlwdGlvbi5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvRGF0YVZp
ZXcuaD4KKyNpbXBvcnQgPGNvbW1vbi92cDlfaGVhZGVyX3BhcnNlci5oPgogI2ltcG9ydCA8d3Rm
L3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgogCiAjaW1wb3J0IDxwYWwvY29jb2Ev
QVZGb3VuZGF0aW9uU29mdExpbmsuaD4KKyNpbXBvcnQgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGlu
ay5oPgorI2ltcG9ydCAiQ29yZVZpZGVvU29mdExpbmsuaCIKICNpbXBvcnQgIlZpZGVvVG9vbGJv
eFNvZnRMaW5rLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordXNpbmcgbmFtZXNwYWNlIFBB
TDsKK3VzaW5nIG5hbWVzcGFjZSB3ZWJtOworCiBzdGF0aWMgYm9vbCBoYXJkd2FyZVZQOURlY29k
ZXJEaXNhYmxlZEZvclRlc3RpbmcgeyBmYWxzZSB9OwogCiBzdHJ1Y3QgT3ZlcnJpZGVTY3JlZW5E
YXRhIHsKQEAgLTI1Nyw2ICsyNjQsMjg4IEBAIGJvb2wgdmFsaWRhdGVWUFBhcmFtZXRlcnMoVlBD
b2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmIGNvZGVjQ29uZmlndXJhdGlvbiwgTWVkaWFDCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyB1aW50OF90IGNvbnZlcnRUb0NvbG9yUHJpbWFyaWVz
KGNvbnN0IFByaW1hcmllcyYgY29lZmZpY2llbnRzKQoreworICAgIHN3aXRjaCAoY29lZmZpY2ll
bnRzKSB7CisgICAgY2FzZSBQcmltYXJpZXM6OmtCdDcwOToKKyAgICAgICAgcmV0dXJuIFZQQ29u
ZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF83MDlfNjsKKyAgICBjYXNlIFByaW1hcmllczo6
a1Vuc3BlY2lmaWVkOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJp
ZXM6OlVuc3BlY2lmaWVkOworICAgIGNhc2UgUHJpbWFyaWVzOjprQnQ0NzBNOgorICAgICAgICBy
ZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzQ3MF82X007CisgICAgY2Fz
ZSBQcmltYXJpZXM6OmtCdDQ3MEJnOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29s
b3JQcmltYXJpZXM6OkJUXzQ3MF83X0JHOworICAgIGNhc2UgUHJpbWFyaWVzOjprU21wdGUxNzBN
OgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzYwMV83
OworICAgIGNhc2UgUHJpbWFyaWVzOjprU21wdGUyNDBNOgorICAgICAgICByZXR1cm4gVlBDb25m
aWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NUXzI0MDsKKyAgICBjYXNlIFByaW1hcmll
czo6a0ZpbG06CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6
RmlsbTsKKyAgICBjYXNlIFByaW1hcmllczo6a0J0MjAyMDoKKyAgICAgICAgcmV0dXJuIFZQQ29u
ZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF8yMDIwX05vbmNvbnN0YW50X0x1bWluYW5jZTsK
KyAgICBjYXNlIFByaW1hcmllczo6a1NtcHRlU3Q0MjgxOgorICAgICAgICByZXR1cm4gVlBDb25m
aWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NUXzQyOF8xOworICAgIGNhc2UgUHJpbWFy
aWVzOjprU21wdGVScDQzMToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJp
bWFyaWVzOjpTTVBURV9SUF80MzFfMjsKKyAgICBjYXNlIFByaW1hcmllczo6a1NtcHRlRWc0MzI6
CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfRUdf
NDMyXzE7CisgICAgY2FzZSBQcmltYXJpZXM6OmtKZWRlY1AyMlBob3NwaG9yczoKKyAgICAgICAg
cmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpFQlVfVGVjaF8zMjEzX0U7Cisg
ICAgfQorfQorCitzdGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRvQ01Db2xvclByaW1hcmllcyh1
aW50OF90IHByaW1hcmllcykKK3sKKyAgICBzd2l0Y2ggKHByaW1hcmllcykgeworICAgIGNhc2Ug
VlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzcwOV82OgorICAgICAgICByZXR1cm4g
a0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19JVFVfUl83MDlfMjsKKyAgICBjYXNlIFZQQ29u
ZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpFQlVfVGVjaF8zMjEzX0U6CisgICAgICAgIHJldHVy
biBrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzX0VCVV8zMjEzOworICAgIGNhc2UgVlBDb25m
aWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzYwMV83OgorICAgIGNhc2UgVlBDb25maWd1cmF0
aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NUXzI0MDoKKyAgICAgICAgcmV0dXJuIGtDVkltYWdl
QnVmZmVyQ29sb3JQcmltYXJpZXNfU01QVEVfQzsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNv
bG9yUHJpbWFyaWVzOjpTTVBURV9SUF80MzFfMjoKKyAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERl
c2NyaXB0aW9uQ29sb3JQcmltYXJpZXNfRENJX1AzOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9u
Q29sb3JQcmltYXJpZXM6OlNNUFRFX0VHXzQzMl8xOgorICAgICAgICByZXR1cm4ga0NNRm9ybWF0
RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19QM19ENjU7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRp
b25Db2xvclByaW1hcmllczo6QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U6CisgICAgICAg
IHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX0lUVV9SXzIwMjA7Cisg
ICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyB1aW50OF90IGNvbnZlcnRU
b1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKGNvbnN0IFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzJiBj
aGFyYWN0ZXJpc3RpY3MpCit7CisgICAgc3dpdGNoIChjaGFyYWN0ZXJpc3RpY3MpIHsKKyAgICBj
YXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprQnQ3MDk6CisgICAgICAgIHJldHVybiBWUENv
bmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfNzA5XzY7CisgICAgY2FzZSBU
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a1Vuc3BlY2lmaWVkOgorICAgICAgICByZXR1cm4gVlBD
b25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlVuc3BlY2lmaWVkOworICAgIGNh
c2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtHYW1tYTIyY3VydmU6CisgICAgICAgIHJldHVy
biBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfNDcwXzZfTTsKKyAg
ICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprR2FtbWEyOGN1cnZlOgorICAgICAgICBy
ZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzQ3MF83X0JH
OworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtTbXB0ZTE3ME06CisgICAgICAg
IHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfNjAxXzc7
CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a1NtcHRlMjQwTToKKyAgICAgICAg
cmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF8y
NDA7CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0xpbmVhcjoKKyAgICAgICAg
cmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMaW5lYXI7Cisg
ICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0xvZzoKKyAgICAgICAgcmV0dXJuIFZQ
Q29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMb2dyaXRobWljOworICAgIGNh
c2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtMb2dTcXJ0OgorICAgICAgICByZXR1cm4gVlBD
b25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxvZ3JpdGhtaWNfU3FydDsKKyAg
ICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprSWVjNjE5NjYyNDoKKyAgICAgICAgcmV0
dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJRUNfNjE5NjZfMl80
OworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtCdDEzNjFFeHRlbmRlZENvbG91
ckdhbXV0OgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OkJUXzEzNjFfMDsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprSWVj
NjE5NjYyMToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVy
aXN0aWNzOjpJRUNfNjE5NjZfMl8xOworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OmsxMEJpdEJ0MjAyMDoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzOjpCVF8yMDIwXzEwYml0OworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OmsxMkJpdEJ0MjAyMDoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMDIwXzEyYml0OworICAgIGNhc2UgVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OmtTbXB0ZVN0MjA4NDoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlv
blRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF8yMDg0OworICAgIGNhc2UgVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OmtTbXB0ZVN0NDI4MToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmln
dXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF80MjhfMTsKKyAgICBjYXNl
IFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprQXJpYlN0ZEI2N0hsZzoKKyAgICAgICAgcmV0dXJu
IFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMTAwX0hMRzsKKyAg
ICB9Cit9CisKK3N0YXRpYyBDRlN0cmluZ1JlZiBjb252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24o
dWludDhfdCBjaGFyYWN0ZXJpc3RpY3MpCit7CisgICAgc3dpdGNoIChjaGFyYWN0ZXJpc3RpY3Mp
IHsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF83
MDlfNjoKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbl9JVFVf
Ul83MDlfMjsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
OjpTTVBURV9TVF8yNDA6CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlclRyYW5zZmVyRnVu
Y3Rpb25fU01QVEVfMjQwTV8xOTk1OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJD
aGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzIwODQ6CisgICAgICAgIHJldHVybiBrQ01Gb3JtYXRE
ZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fU01QVEVfU1RfMjA4NF9QUTsKKyAgICBjYXNlIFZQ
Q29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMDIwXzEwYml0OgorICAg
IGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTJi
aXQ6CisgICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25f
SVRVX1JfMjAyMDsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjpTTVBURV9TVF80MjhfMToKKyAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9u
VHJhbnNmZXJGdW5jdGlvbl9TTVBURV9TVF80MjhfMTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlv
blRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMTAwX0hMRzoKKyAgICAgICAgcmV0dXJuIGtD
TUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl8yMTAwX0hMRzsKKyAgICBj
YXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJRUNfNjE5NjZfMl8x
OgorICAgICAgICByZXR1cm4gY2FuTG9hZF9Db3JlTWVkaWFfa0NNRm9ybWF0RGVzY3JpcHRpb25U
cmFuc2ZlckZ1bmN0aW9uX3NSR0IoKSA/IFBBTDo6Z2V0X0NvcmVNZWRpYV9rQ01Gb3JtYXREZXNj
cmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fc1JHQigpIDogbnVsbHB0cjsKKyAgICBjYXNlIFZQQ29u
ZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMaW5lYXI6CisgICAgICAgIHJldHVy
biBrQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fTGluZWFyOworICAgIH0KKwor
ICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgdWludDhfdCBjb252ZXJ0VG9NYXRyaXhD
b2VmZmljaWVudHMoY29uc3QgTWF0cml4Q29lZmZpY2llbnRzJiBjb2VmZmljaWVudHMpCit7Cisg
ICAgc3dpdGNoIChjb2VmZmljaWVudHMpIHsKKyAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6
a1JnYjoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6
SWRlbnRpdHk7CisgICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtCdDcwOToKKyAgICAgICAg
cmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfNzA5XzY7CisgICAg
Y2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtVbnNwZWNpZmllZDoKKyAgICAgICAgcmV0dXJuIFZQ
Q29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6VW5zcGVjaWZpZWQ7CisgICAgY2FzZSBN
YXRyaXhDb2VmZmljaWVudHM6OmtGY2M6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25N
YXRyaXhDb2VmZmljaWVudHM6OkZDQzsKKyAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a0J0
NDcwQmc6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6
OkJUXzQ3MF83X0JHOworICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprU21wdGUxNzBNOgor
ICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF82MDFf
NzsKKyAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a1NtcHRlMjQwTToKKyAgICAgICAgcmV0
dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6U01QVEVfU1RfMjQwOworICAg
IGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprWUNnQ286CisgICAgICAgIHJldHVybiBWUENvbmZp
Z3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OllDZ0NvOworICAgIGNhc2UgTWF0cml4Q29lZmZp
Y2llbnRzOjprQnQyMDIwTm9uY29uc3RhbnRMdW1pbmFuY2U6CisgICAgICAgIHJldHVybiBWUENv
bmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzIwMjBfTm9uY29uc3RhbnRfTHVtaW5h
bmNlOworICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprQnQyMDIwQ29uc3RhbnRMdW1pbmFu
Y2U6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJU
XzIwMjBfQ29uc3RhbnRfTHVtaW5hbmNlOworICAgIH0KK30KKworc3RhdGljIENGU3RyaW5nUmVm
IGNvbnZlcnRUb0NNWUNiQ1JNYXRyaXgodWludDhfdCBjb2VmZmljaWVudHMpCit7CisgICAgc3dp
dGNoIChjb2VmZmljaWVudHMpIHsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZm
aWNpZW50czo6QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U6CisgICAgICAgIHJldHVybiBr
Q01Gb3JtYXREZXNjcmlwdGlvbllDYkNyTWF0cml4X0lUVV9SXzIwMjA7CisgICAgY2FzZSBWUENv
bmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzQ3MF83X0JHOgorICAgIGNhc2UgVlBD
b25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF82MDFfNzoKKyAgICAgICAgcmV0dXJu
IGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNjAxXzQ7CisgICAgY2FzZSBWUENvbmZp
Z3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzcwOV82OgorICAgICAgICByZXR1cm4ga0NW
SW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlfMjsKKyAgICBjYXNlIFZQQ29uZmlndXJh
dGlvbk1hdHJpeENvZWZmaWNpZW50czo6U01QVEVfU1RfMjQwOgorICAgICAgICByZXR1cm4ga0NW
SW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9TTVBURV8yNDBNXzE5OTU7CisgICAgfQorCisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyB1aW50OF90IGNvbnZlcnRTdWJzYW1wbGluZ1hZVG9D
aHJvbWFTdWJzYW1wbGluZyh1aW50NjRfdCB4LCB1aW50NjRfdCB5KQoreworICAgIGlmICh4ICYg
eSkKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNocm9tYVN1YnNhbXBsaW5nOjpTdWJz
YW1wbGluZ180MjBfQ29sb2NhdGVkOworICAgIGlmICh4ICYgIXkpCisgICAgICAgIHJldHVybiBW
UENvbmZpZ3VyYXRpb25DaHJvbWFTdWJzYW1wbGluZzo6U3Vic2FtcGxpbmdfNDIyOworICAgIGlm
ICgheCAmICF5KQorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ2hyb21hU3Vic2FtcGxp
bmc6OlN1YnNhbXBsaW5nXzQ0NDsKKyAgICAvLyBUaGlzIGluZGljYXRlcyA0OjQ6MCBzdWJzYW1w
bGluZywgd2hpY2ggaXMgbm90IGV4cHJlc3NhYmxlIGluIHRoZSAndnBjQycgYm94LiBEZWZhdWx0
IHRvIDQ6MjowLgorICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25DaHJvbWFTdWJzYW1wbGluZzo6
U3Vic2FtcGxpbmdfNDIwX0NvbG9jYXRlZDsKK30KKworUmV0YWluUHRyPENNRm9ybWF0RGVzY3Jp
cHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOUhlYWRlclBhcnNlcihjb25z
dCB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXImIHBhcnNlciwgY29uc3Qgd2VibTo6RWxlbWVu
dDxDb2xvdXI+JiBjb2xvcikKK3sKKyAgICAvLyBSZWY6ICJWUCBDb2RlYyBJU08gTWVkaWEgRmls
ZSBGb3JtYXQgQmluZGluZywgdjEuMCwgMjAxNy0wMy0zMSIKKyAgICAvLyA8aHR0cHM6Ly93d3cu
d2VibXByb2plY3Qub3JnL3ZwOS9tcDQvPgorICAgIC8vCisgICAgLy8gY2xhc3MgVlBDb2RlY0Nv
bmZpZ3VyYXRpb25Cb3ggZXh0ZW5kcyBGdWxsQm94KCd2cGNDJywgdmVyc2lvbiA9IDEsIDApCisg
ICAgLy8geworICAgIC8vICAgICBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCgpIHZwY0NvbmZp
ZzsKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBhbGlnbmVkICg4KSBjbGFzcyBWUENvZGVjQ29u
ZmlndXJhdGlvblJlY29yZCB7CisgICAgLy8gICAgIHVuc2lnbmVkIGludCAoOCkgICAgIHByb2Zp
bGU7CisgICAgLy8gICAgIHVuc2lnbmVkIGludCAoOCkgICAgIGxldmVsOworICAgIC8vICAgICB1
bnNpZ25lZCBpbnQgKDQpICAgICBiaXREZXB0aDsKKyAgICAvLyAgICAgdW5zaWduZWQgaW50ICgz
KSAgICAgY2hyb21hU3Vic2FtcGxpbmc7CisgICAgLy8gICAgIHVuc2lnbmVkIGludCAoMSkgICAg
IHZpZGVvRnVsbFJhbmdlRmxhZzsKKyAgICAvLyAgICAgdW5zaWduZWQgaW50ICg4KSAgICAgY29s
b3VyUHJpbWFyaWVzOworICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDgpICAgICB0cmFuc2ZlckNo
YXJhY3RlcmlzdGljczsKKyAgICAvLyAgICAgdW5zaWduZWQgaW50ICg4KSAgICAgbWF0cml4Q29l
ZmZpY2llbnRzOworICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDE2KSAgICBjb2RlY0ludGlhbGl6
YXRpb25EYXRhU2l6ZTsKKyAgICAvLyAgICAgdW5zaWduZWQgaW50ICg4KVtdICAgY29kZWNJbnRp
YWxpemF0aW9uRGF0YTsKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBjb2RlY0ludGlhbGl6YXRp
b25EYXRhU2l6ZeKAi0ZvciBWUDggYW5kIFZQOSB0aGlzIGZpZWxkIG11c3QgYmUgMC4KKyAgICAv
LyBjb2RlY0ludGlhbGl6YXRpb25EYXRh4oCLYmluYXJ5IGNvZGVjIGluaXRpYWxpemF0aW9uIGRh
dGEuIE5vdCB1c2VkIGZvciBWUDggYW5kIFZQOS4KKyAgICAvLworICAgIC8vIEZJWE1FOiBDb252
ZXJ0IGV4aXN0aW5nIHN0cnVjdCB0byBhbiBJU09Cb3ggYW5kIHJlcGxhY2UgdGhlIHdyaXRpbmcg
Y29kZSBiZWxvdworICAgIC8vIHdpdGggYSBzdWJjbGFzcyBvZiBJU09GdWxsQm94LgorCisgICAg
VlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQgcmVjb3JkOworCisgICAgcmVjb3JkLnByb2ZpbGUg
PSBwYXJzZXIucHJvZmlsZSgpOworICAgIC8vIENvcmVNZWRpYSBkb2VzIG5hdCBjYXJlIGFib3V0
IHRoZSBWUDkgY29kZWMgbGV2ZWw7IGhhcmQtY29kZSB0byBMZXZlbCAxLjAgaGVyZToKKyAgICBy
ZWNvcmQubGV2ZWwgPSAxMDsKKyAgICByZWNvcmQuYml0RGVwdGggPSBwYXJzZXIuYml0X2RlcHRo
KCk7CisgICAgcmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxhZyA9IHBhcnNlci5jb2xvcl9yYW5nZSgp
ID8gVlBDb25maWd1cmF0aW9uUmFuZ2U6OkZ1bGxSYW5nZSA6IFZQQ29uZmlndXJhdGlvblJhbmdl
OjpWaWRlb1JhbmdlOworICAgIHJlY29yZC5jaHJvbWFTdWJzYW1wbGluZyA9IGNvbnZlcnRTdWJz
YW1wbGluZ1hZVG9DaHJvbWFTdWJzYW1wbGluZyhwYXJzZXIuc3Vic2FtcGxpbmdfeCgpLCBwYXJz
ZXIuc3Vic2FtcGxpbmdfeSgpKTsKKyAgICByZWNvcmQuY29sb3JQcmltYXJpZXMgPSBWUENvbmZp
Z3VyYXRpb25Db2xvclByaW1hcmllczo6VW5zcGVjaWZpZWQ7CisgICAgcmVjb3JkLnRyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzID0gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OlVuc3BlY2lmaWVkOworICAgIHJlY29yZC5tYXRyaXhDb2VmZmljaWVudHMgPSBWUENvbmZpZ3Vy
YXRpb25NYXRyaXhDb2VmZmljaWVudHM6OlVuc3BlY2lmaWVkOworCisgICAgLy8gQ29udGFpbmVy
IGNvbG9yIHZhbHVlcyBjYW4gb3ZlcnJpZGUgcGVyLXNhbXBsZSBvbmVzOgorICAgIGlmIChjb2xv
ci5pc19wcmVzZW50KCkpIHsKKyAgICAgICAgYXV0byYgY29sb3JWYWx1ZSA9IGNvbG9yLnZhbHVl
KCk7CisgICAgICAgIGlmIChjb2xvclZhbHVlLmNocm9tYV9zdWJzYW1wbGluZ194LmlzX3ByZXNl
bnQoKSAmJiBjb2xvclZhbHVlLmNocm9tYV9zdWJzYW1wbGluZ195LmlzX3ByZXNlbnQoKSkKKyAg
ICAgICAgICAgIHJlY29yZC5jaHJvbWFTdWJzYW1wbGluZyA9IGNvbnZlcnRTdWJzYW1wbGluZ1hZ
VG9DaHJvbWFTdWJzYW1wbGluZyhjb2xvclZhbHVlLmNocm9tYV9zdWJzYW1wbGluZ194LnZhbHVl
KCksIGNvbG9yVmFsdWUuY2hyb21hX3N1YnNhbXBsaW5nX3kudmFsdWUoKSk7CisgICAgICAgIGlm
IChjb2xvclZhbHVlLnJhbmdlLmlzX3ByZXNlbnQoKSAmJiBjb2xvclZhbHVlLnJhbmdlLnZhbHVl
KCkgIT0gUmFuZ2U6OmtVbnNwZWNpZmllZCkKKyAgICAgICAgICAgIHJlY29yZC52aWRlb0Z1bGxS
YW5nZUZsYWcgPSBjb2xvclZhbHVlLnJhbmdlLnZhbHVlKCkgPT0gUmFuZ2U6OmtGdWxsID8gVlBD
b25maWd1cmF0aW9uUmFuZ2U6OkZ1bGxSYW5nZSA6IFZQQ29uZmlndXJhdGlvblJhbmdlOjpWaWRl
b1JhbmdlOworICAgICAgICBpZiAoY29sb3JWYWx1ZS5iaXRzX3Blcl9jaGFubmVsLmlzX3ByZXNl
bnQoKSkKKyAgICAgICAgICAgIHJlY29yZC5iaXREZXB0aCA9IGNvbG9yVmFsdWUuYml0c19wZXJf
Y2hhbm5lbC52YWx1ZSgpOworICAgICAgICBpZiAoY29sb3JWYWx1ZS50cmFuc2Zlcl9jaGFyYWN0
ZXJpc3RpY3MuaXNfcHJlc2VudCgpKQorICAgICAgICAgICAgcmVjb3JkLnRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzID0gY29udmVydFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MoY29sb3JWYWx1ZS50
cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MudmFsdWUoKSk7CisgICAgICAgIGlmIChjb2xvclZhbHVl
Lm1hdHJpeF9jb2VmZmljaWVudHMuaXNfcHJlc2VudCgpKQorICAgICAgICAgICAgcmVjb3JkLm1h
dHJpeENvZWZmaWNpZW50cyA9IGNvbnZlcnRUb01hdHJpeENvZWZmaWNpZW50cyhjb2xvclZhbHVl
Lm1hdHJpeF9jb2VmZmljaWVudHMudmFsdWUoKSk7CisgICAgICAgIGlmIChjb2xvclZhbHVlLnBy
aW1hcmllcy5pc19wcmVzZW50KCkpCisgICAgICAgICAgICByZWNvcmQuY29sb3JQcmltYXJpZXMg
PSBjb252ZXJ0VG9Db2xvclByaW1hcmllcyhjb2xvclZhbHVlLnByaW1hcmllcy52YWx1ZSgpKTsK
KyAgICB9CisKKyAgICBjb25zdGV4cHIgc2l6ZV90IFZQQ29kZWNDb25maWd1cmF0aW9uQ29udGVu
dHNTaXplID0gMTI7CisKKyAgICB1aW50MzJfdCB2ZXJzaW9uQW5kRmxhZ3MgPSAxIDw8IDI0Owor
ICAgIHVpbnQ4X3QgYml0RGVwdGhDaHJvbWFBbmRSYW5nZSA9ICgweEYgJiByZWNvcmQuYml0RGVw
dGgpIDw8IDQgfCAoMHg3ICYgcmVjb3JkLmNocm9tYVN1YnNhbXBsaW5nKSA8PCAxIHwgKDB4MSAm
IHJlY29yZC52aWRlb0Z1bGxSYW5nZUZsYWcpOworICAgIHVpbnQxNl90IGNvZGVjSW50aWFsaXph
dGlvbkRhdGFTaXplID0gMDsKKworICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZpZXc6OmNyZWF0
ZShBcnJheUJ1ZmZlcjo6Y3JlYXRlKFZQQ29kZWNDb25maWd1cmF0aW9uQ29udGVudHNTaXplLCAx
KSwgMCwgVlBDb2RlY0NvbmZpZ3VyYXRpb25Db250ZW50c1NpemUpOworICAgIHZpZXctPnNldCgw
LCB2ZXJzaW9uQW5kRmxhZ3MsIGZhbHNlKTsKKyAgICB2aWV3LT5zZXQoNCwgcmVjb3JkLnByb2Zp
bGUsIGZhbHNlKTsKKyAgICB2aWV3LT5zZXQoNSwgcmVjb3JkLmxldmVsLCBmYWxzZSk7CisgICAg
dmlldy0+c2V0KDYsIGJpdERlcHRoQ2hyb21hQW5kUmFuZ2UsIGZhbHNlKTsKKyAgICB2aWV3LT5z
ZXQoNywgcmVjb3JkLmNvbG9yUHJpbWFyaWVzLCBmYWxzZSk7CisgICAgdmlldy0+c2V0KDgsIHJl
Y29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGljcywgZmFsc2UpOworICAgIHZpZXctPnNldCg5LCBy
ZWNvcmQubWF0cml4Q29lZmZpY2llbnRzLCBmYWxzZSk7CisgICAgdmlldy0+c2V0KDEwLCBjb2Rl
Y0ludGlhbGl6YXRpb25EYXRhU2l6ZSwgZmFsc2UpOworCisgICAgYXV0byBkYXRhID0gYWRvcHRD
RihDRkRhdGFDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKGNvbnN0IFVJbnQ4ICopdmlldy0+
ZGF0YSgpLCB2aWV3LT5ieXRlTGVuZ3RoKCkpKTsKKworICAgIENGVHlwZVJlZiBjb25maWd1cmF0
aW9uS2V5c1tdID0geyBDRlNUUigidnBjQyIpIH07CisgICAgQ0ZUeXBlUmVmIGNvbmZpZ3VyYXRp
b25WYWx1ZXNbXSA9IHsgZGF0YS5nZXQoKSB9OworICAgIGF1dG8gY29uZmlndXJhdGlvbkRpY3Qg
PSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb25maWd1
cmF0aW9uS2V5cywgY29uZmlndXJhdGlvblZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChjb25maWd1
cmF0aW9uS2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0
aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKworICAgIFZlY3RvcjxDRlR5cGVSZWY+IGV4dGVuc2lv
bnNLZXlzIHsga0NNRm9ybWF0RGVzY3JpcHRpb25FeHRlbnNpb25fU2FtcGxlRGVzY3JpcHRpb25F
eHRlbnNpb25BdG9tcyB9OworICAgIFZlY3RvcjxDRlR5cGVSZWY+IGV4dGVuc2lvbnNWYWx1ZXMg
PSB7IGNvbmZpZ3VyYXRpb25EaWN0LmdldCgpIH07CisKKyAgICBpZiAocmVjb3JkLnZpZGVvRnVs
bFJhbmdlRmxhZyA9PSBWUENvbmZpZ3VyYXRpb25SYW5nZTo6RnVsbFJhbmdlKSB7CisgICAgICAg
IGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ01Gb3JtYXREZXNjcmlwdGlvbkV4dGVuc2lvbl9GdWxs
UmFuZ2VWaWRlbyk7CisgICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGtDRkJvb2xlYW5U
cnVlKTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBjbUNvbG9yUHJpbWFyaWVzID0gY29udmVydFRv
Q01Db2xvclByaW1hcmllcyhyZWNvcmQuY29sb3JQcmltYXJpZXMpKSB7CisgICAgICAgIGV4dGVu
c2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzS2V5KTsKKyAgICAg
ICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21Db2xvclByaW1hcmllcyk7CisgICAgfQorCisg
ICAgaWYgKGF1dG8gY21UcmFuc2ZlckZ1bmN0aW9uID0gY29udmVydFRvQ01UcmFuc2ZlckZ1bmN0
aW9uKHJlY29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGljcykpIHsKKyAgICAgICAgZXh0ZW5zaW9u
c0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbktleSk7CisgICAgICAg
IGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGNtVHJhbnNmZXJGdW5jdGlvbik7CisgICAgfQorCisg
ICAgaWYgKGF1dG8gY21NYXRyaXggPSBjb252ZXJ0VG9DTVlDYkNSTWF0cml4KHJlY29yZC5tYXRy
aXhDb2VmZmljaWVudHMpKSB7CisgICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFn
ZUJ1ZmZlcllDYkNyTWF0cml4S2V5KTsKKyAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQo
Y21NYXRyaXgpOworICAgIH0KKworICAgIGF1dG8gZXh0ZW5zaW9ucyA9IGFkb3B0Q0YoQ0ZEaWN0
aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGV4dGVuc2lvbnNLZXlzLmRhdGEoKSwg
ZXh0ZW5zaW9uc1ZhbHVlcy5kYXRhKCksIGV4dGVuc2lvbnNLZXlzLnNpemUoKSwgJmtDRlR5cGVE
aWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykp
OworCisgICAgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uID0g
bnVsbHB0cjsKKyAgICBpZiAobm9FcnIgIT0gQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDTVZpZGVvQ29kZWNUeXBlX1ZQOSwgcGFyc2VyLndpZHRo
KCksIHBhcnNlci5oZWlnaHQoKSwgZXh0ZW5zaW9ucy5nZXQoKSwgJmZvcm1hdERlc2NyaXB0aW9u
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGFkb3B0Q0YoZm9ybWF0RGVz
Y3JpcHRpb24pOworfQorCiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxp
dGllc0NvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJN
QXVkaW9VdGlsaXRpZXNDb2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIxZjYzN2MwMjRmOGM1ODdlYWNiM2I3
ZWEwMTc3MjYzY2E4NzgzNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oCkBAIC0wLDAgKzEs
NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKENPQ09BKQor
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitjbGFzcyBBdWRpb1N0cmVhbURlc2NyaXB0
aW9uOwordHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlvbiogQ01G
b3JtYXREZXNjcmlwdGlvblJlZjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIGlzVm9y
YmlzRGVjb2RlckF2YWlsYWJsZSgpOworUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+
IGNyZWF0ZVZvcmJpc0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24oc2l6ZV90LCBjb25zdCB2b2lkKik7
CisKK2Jvb2wgaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpOworUmV0YWluUHRyPENNRm9ybWF0RGVz
Y3JpcHRpb25SZWY+IGNyZWF0ZU9wdXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKHNpemVfdCwgY29u
c3Qgdm9pZCopOworCit9CisKKyNlbmRpZiAvLyAmJiBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxp
dGllc0NvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2Vi
TUF1ZGlvVXRpbGl0aWVzQ29jb2EubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWM0Y2E2MDhiNmE5MzlmMTU4MmVm
NGY2NzI5NGU0MGJjYjczMTc2YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1tCkBAIC0wLDAg
KzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJN
QXVkaW9VdGlsaXRpZXNDb2NvYS5oIgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisKKyNpbXBvcnQg
IkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9y
dCAiTWVkaWFVdGlsaXRpZXMuaCIKKyNpbXBvcnQgPEF1ZGlvVG9vbGJveC9BdWRpb0NvbXBvbmVu
dC5oPgorI2ltcG9ydCA8QXVkaW9Ub29sYm94L0F1ZGlvRm9ybWF0Lmg+CisjaW1wb3J0IDxDb3Jl
QXVkaW8vQ29yZUF1ZGlvVHlwZXNQcml2Lmg+CisjaW1wb3J0IDxDb3JlTWVkaWEvQ01Gb3JtYXRE
ZXNjcmlwdGlvbi5oPgorI2ltcG9ydCA8ZGxmY24uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisjaWYgRU5BQkxFKFZPUkJJUykgfHwgRU5BQkxFKE9QVVMpCitzdGF0aWMgYm9vbCByZWdpc3Rl
ckRlY29kZXJGYWN0b3J5KGNvbnN0IGNoYXIqIGRlY29kZXJOYW1lLCBPU1R5cGUgZGVjb2RlclR5
cGUpCit7CisgICAgY29uc3RleHByIGNoYXIgYXVkaW9Db21wb25lbnRzRHlsaWJbXSA9ICIvU3lz
dGVtL0xpYnJhcnkvQ29tcG9uZW50cy9BdWRpb0NvZGVjcy5jb21wb25lbnQvQ29udGVudHMvTWFj
T1MvQXVkaW9Db2RlY3MiOworICAgIHZvaWQgKmhhbmRsZSA9IGRsb3BlbihhdWRpb0NvbXBvbmVu
dHNEeWxpYiwgUlRMRF9MQVpZIHwgUlRMRF9MT0NBTCk7CisgICAgaWYgKCFoYW5kbGUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIEF1ZGlvQ29tcG9uZW50RmFjdG9yeUZ1bmN0aW9uIGRl
Y29kZXJGYWN0b3J5ID0gcmVpbnRlcnByZXRfY2FzdDxBdWRpb0NvbXBvbmVudEZhY3RvcnlGdW5j
dGlvbj4oZGxzeW0oaGFuZGxlLCBkZWNvZGVyTmFtZSkpOworICAgIGlmICghZGVjb2RlckZhY3Rv
cnkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEF1ZGlvQ29tcG9uZW50RGVzY3JpcHRp
b24gZGVzYyB7ICdhZGVjJywgZGVjb2RlclR5cGUsICdhcHBsJywga0F1ZGlvQ29tcG9uZW50Rmxh
Z19TYW5kYm94U2FmZSwgMCB9OworICAgIGlmICghQXVkaW9Db21wb25lbnRSZWdpc3RlcigmZGVz
YywgQ0ZTVFIoIiIpLCAwLCBkZWNvZGVyRmFjdG9yeSkpIHsKKyAgICAgICAgZGxjbG9zZShoYW5k
bGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3N0YXRpYyBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9G
b3JtYXREZXNjcmlwdGlvbkZvckZvcm1hdChPU1R5cGUgZm9ybWF0SUQsIFZlY3Rvcjx1aW50OF90
PiBtYWdpY0Nvb2tpZSkKK3sKKyAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gYXNiZCB7
IH07CisgICAgYXNiZC5tRm9ybWF0SUQgPSBmb3JtYXRJRDsKKyAgICB1aW50MzJfdCBzaXplID0g
c2l6ZW9mKGFzYmQpOworICAgIGF1dG8gZXJyb3IgPSBBdWRpb0Zvcm1hdEdldFByb3BlcnR5KGtB
dWRpb0Zvcm1hdFByb3BlcnR5X0Zvcm1hdEluZm8sIG1hZ2ljQ29va2llLnNpemUoKSwgbWFnaWND
b29raWUuZGF0YSgpLCAmc2l6ZSwgJmFzYmQpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihNZWRpYSwgImNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25Gb3JG
b3JtYXQgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgZXJyb3IsIChjaGFyICopJmVycm9y
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGNyZWF0ZUF1
ZGlvRm9ybWF0RGVzY3JpcHRpb24oQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKGFzYmQpLCBtYWdp
Y0Nvb2tpZS5zaXplKCksIG1hZ2ljQ29va2llLmRhdGEoKSk7Cit9CisjZW5kaWYgLy8gRU5BQkxF
KFZPUkJJUykgfHwgRU5BQkxFKE9QVVMpCisKKyNpZiBFTkFCTEUoT1BVUykKK3N0YXRpYyBWZWN0
b3I8dWludDhfdD4gY29va2llRnJvbU9wdXNDb2RlY1ByaXZhdGUoc2l6ZV90LCBjb25zdCB2b2lk
KikKK3sKKyAgICByZXR1cm4geyB9OworfQorI2VuZGlmCisKK2Jvb2wgaXNPcHVzRGVjb2RlckF2
YWlsYWJsZSgpCit7CisgICAgc3RhdGljIGJvb2wgYXZhaWxhYmxlOworCisjaWYgRU5BQkxFKE9Q
VVMpICYmIFBMQVRGT1JNKE1BQykKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tl
bjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57CisgICAgICAgIGF2YWlsYWJsZSA9
IHJlZ2lzdGVyRGVjb2RlckZhY3RvcnkoIkFDT3B1c0RlY29kZXJGYWN0b3J5IiwgJ29wdXMnKTsK
KyAgICB9KTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGF2YWlsYWJsZTsKK30KKworUmV0YWluUHRy
PENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZU9wdXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9u
KHNpemVfdCBwcml2YXRlRGF0YVNpemUsIGNvbnN0IHZvaWQqIHByaXZhdGVEYXRhKQoreworI2lm
IEVOQUJMRShPUFVTKQorICAgIGlmICghaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29va2llRGF0YSA9IGNvb2tpZUZyb21PcHVz
Q29kZWNQcml2YXRlKHByaXZhdGVEYXRhU2l6ZSwgcHJpdmF0ZURhdGEpOworICAgIGlmICghY29v
a2llRGF0YS5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGNy
ZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25Gb3JGb3JtYXQoJ29wdXMnLCBjb29raWVEYXRhKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHByaXZhdGVEYXRhU2l6ZSk7CisgICAgVU5VU0VEX1BB
UkFNKHByaXZhdGVEYXRhKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRpZgorfQorCisjaWYg
RU5BQkxFKFZPUkJJUykKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gY29va2llRnJvbVZvcmJpc0Nv
ZGVjUHJpdmF0ZShzaXplX3QgY29kZWNQcml2YXRlU2l6ZSwgY29uc3Qgdm9pZCogY29kZWNQcml2
YXRlRGF0YSkKK3sKKyAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0
Zi1jZWxsYXItY29kZWMtMDMKKyAgICAvLyA2LjQuMTUuIEFfVk9SQklTCisgICAgLy8gQ29kZWMg
SUQ6IEFfVk9SQklTCisgICAgLy8gQ29kZWMgTmFtZTogVm9yYmlzCisgICAgLy8gSW5pdGlhbGl6
YXRpb246IFRoZSAiUHJpdmF0ZSBEYXRhIiBjb250YWlucyB0aGUgZmlyc3QgdGhyZWUgVm9yYmlz
IHBhY2tldCBpbiBvcmRlci4gVGhlIGxlbmd0aHMgb2YgdGhlCisgICAgLy8gcGFja2V0cyBwcmVj
ZWRlcyB0aGVtLiBUaGUgYWN0dWFsIGxheW91dCBpczoKKyAgICAvLyAtIEJ5dGUgMTogbnVtYmVy
IG9mIGRpc3RpbmN0IHBhY2tldHMgJyIjcCInIG1pbnVzIG9uZSBpbnNpZGUgdGhlIENvZGVjUHJp
dmF0ZSBibG9jay5UaGlzIE1VU1QgYmUgJzInCisgICAgLy8gICBmb3IgY3VycmVudCAoYXMgb2Yg
MjAxNi0wNy0wOCkgVm9yYmlzIGhlYWRlcnMuCisgICAgLy8gLSBCeXRlcyAyLi5uOiBsZW5ndGhz
IG9mIHRoZSBmaXJzdCAnIiNwIicgcGFja2V0cywgY29kZWQgaW4gWGlwaC1zdHlsZSBsYWNpbmcu
IFRoZSBsZW5ndGggb2YgdGhlIGxhc3QKKyAgICAvLyAgIHBhY2tldCBpcyB0aGUgbGVuZ3RoIG9m
IHRoZSBDb2RlY1ByaXZhdGUgYmxvY2sgbWludXMgdGhlIGxlbmd0aHMgY29kZWQgaW4gdGhlc2Ug
Ynl0ZXMgbWludXMgb25lLgorICAgIC8vIC0gQnl0ZXMgbisxLi46IFRoZSBWb3JiaXMgaWRlbnRp
ZmljYXRpb24gaGVhZGVyLCBmb2xsb3dlZCBieSB0aGUgVm9yYmlzIGNvbW1lbnQgaGVhZGVyIGZv
bGxvd2VkIGJ5IHRoZQorICAgIC8vICAgY29kZWMgc2V0dXAgaGVhZGVyLgorCisgICAgY29uc3Qg
dW5zaWduZWQgY2hhciogcHJpdmF0ZURhdGFQdHIgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oY29kZWNQcml2YXRlRGF0YSk7CisKKyAgICBjb25zdCBpbnQgdm9yYmlzTWluaW11
bUNvb2tpZVNpemUgPSAzOworICAgIGlmIChjb2RlY1ByaXZhdGVTaXplIDwgdm9yYmlzTWluaW11
bUNvb2tpZVNpemUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTWVkaWEsICJjb29raWVG
cm9tVm9yYmlzQ29kZWNQcml2YXRlOiBjb2RlYyBwcml2YXRlIGRhdGEgdG9vIHNtYWxsICglenUp
IiwgY29kZWNQcml2YXRlU2l6ZSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAg
Ly8gRGVzcGl0ZSB0aGUgIlRoaXMgTVVTVCBiZSAnMiciIGNvbW1lbnQgaW4gdGhlIElFVEYgZG9j
dW1lbnQsIHBhY2tldCBjb3VudCBpcyBub3QgYWx3YXlzIGVxdWFsIHRvCisgICAgLy8gMiBpbiBy
ZWFsLXdvcmQgZmlsZXMsIHNvIGlnbm9yZSB0aGF0IGZpZWxkLgorICAgIGNvbnN0IHVpbnQxNl90
IGlkSGVhZGVyU2l6ZSA9IHByaXZhdGVEYXRhUHRyWzFdOworICAgIGNvbnN0IHVpbnQxNl90IGNv
bW1lbnRIZWFkZXJTaXplID0gcHJpdmF0ZURhdGFQdHJbMl07CisgICAgY29uc3QgdWludDE2X3Qg
Y2FsY3VsYXRlZEhlYWRlclNpemUgPSAxICsgaWRIZWFkZXJTaXplICsgY29tbWVudEhlYWRlclNp
emU7CisgICAgaWYgKDEgKyBpZEhlYWRlclNpemUgKyBjb21tZW50SGVhZGVyU2l6ZSA+IGNvZGVj
UHJpdmF0ZVNpemUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTWVkaWEsICJjb29raWVG
cm9tVm9yYmlzQ29kZWNQcml2YXRlOiBjb2RlYyBwcml2YXRlIGRhdGEgdG9vIHNtYWxsICglenUp
IGZvciBoZWFkZXIgc2l6ZXMgKCVkKSIsIGNvZGVjUHJpdmF0ZVNpemUsIGNhbGN1bGF0ZWRIZWFk
ZXJTaXplKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBpZEhlYWRlciA9ICZwcml2YXRlRGF0YVB0clszXTsKKyAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBjb21tZW50SGVhZGVyID0gaWRIZWFkZXIgKyBpZEhlYWRlclNpemU7CisgICAgY29u
c3QgdW5zaWduZWQgY2hhciogY29kZWNTZXR1cEhlYWRlciA9IGNvbW1lbnRIZWFkZXIgKyBjb21t
ZW50SGVhZGVyU2l6ZTsKKyAgICBjb25zdCB1aW50MTZfdCBjb2RlY1NldHVwSGVhZGVyU2l6ZSA9
IGNvZGVjUHJpdmF0ZVNpemUgLSBpZEhlYWRlclNpemUgLSBjb21tZW50SGVhZGVyU2l6ZSAtIDIg
LSAxOworCisgICAgaWYgKChpZEhlYWRlclNpemUgKyBjb21tZW50SGVhZGVyU2l6ZSArIGNvZGVj
U2V0dXBIZWFkZXJTaXplICsgMykgPiBjb2RlY1ByaXZhdGVTaXplKSB7CisgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKE1lZGlhLCAiY29va2llRnJvbVZvcmJpc0NvZGVjUHJpdmF0ZTogY29kZWMg
cHJpdmF0ZSBoZWFkZXIgc2l6ZSBpcyBpbnZhbGlkIC0gaWQgPSAlZCwgY29tbWVudCA9ICVkLCBo
ZWFkZXIgPSAlZCwgY2h1bmsgc2l6ZSA9ICV6dSIsIGlkSGVhZGVyU2l6ZSwgY29tbWVudEhlYWRl
clNpemUsIGNvZGVjU2V0dXBIZWFkZXJTaXplLCBjb2RlY1ByaXZhdGVTaXplKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gY29va2llRGF0YTsKKyAg
ICBjb29raWVEYXRhLmFwcGVuZChyZWludGVycHJldF9jYXN0X3B0cjxjb25zdCB1aW50OF90Kj4o
JmlkSGVhZGVyU2l6ZSksIHNpemVvZihpZEhlYWRlclNpemUpKTsKKyAgICBjb29raWVEYXRhLmFw
cGVuZChpZEhlYWRlciwgaWRIZWFkZXJTaXplKTsKKworICAgIGNvb2tpZURhdGEuYXBwZW5kKHJl
aW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IHVpbnQ4X3QqPigmY29tbWVudEhlYWRlclNpemUpLCBz
aXplb2YoY29tbWVudEhlYWRlclNpemUpKTsKKyAgICBjb29raWVEYXRhLmFwcGVuZChjb21tZW50
SGVhZGVyLCBjb21tZW50SGVhZGVyU2l6ZSk7CisKKyAgICBjb29raWVEYXRhLmFwcGVuZChyZWlu
dGVycHJldF9jYXN0X3B0cjxjb25zdCB1aW50OF90Kj4oJmNvZGVjU2V0dXBIZWFkZXJTaXplKSwg
c2l6ZW9mKGNvZGVjU2V0dXBIZWFkZXJTaXplKSk7CisgICAgY29va2llRGF0YS5hcHBlbmQoY29k
ZWNTZXR1cEhlYWRlciwgY29kZWNTZXR1cEhlYWRlclNpemUpOworCisgICAgcmV0dXJuIGNvb2tp
ZURhdGE7Cit9CisjZW5kaWYgLy8gRU5BQkxFKFZPUkJJUykKKworYm9vbCBpc1ZvcmJpc0RlY29k
ZXJBdmFpbGFibGUoKQoreworICAgIHN0YXRpYyBib29sIGF2YWlsYWJsZTsKKworI2lmIEVOQUJM
RShWT1JCSVMpICYmIFBMQVRGT1JNKE1BQykKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9u
Y2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57CisgICAgICAgIGF2YWls
YWJsZSA9IHJlZ2lzdGVyRGVjb2RlckZhY3RvcnkoIkFDVm9yYmlzRGVjb2RlckZhY3RvcnkiLCAn
dm9yYicpOworICAgIH0pOworI2VuZGlmCisKKyAgICByZXR1cm4gYXZhaWxhYmxlOworfQorCitS
ZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlVm9yYmlzQXVkaW9Gb3JtYXRE
ZXNjcmlwdGlvbihzaXplX3QgcHJpdmF0ZURhdGFTaXplLCBjb25zdCB2b2lkKiBwcml2YXRlRGF0
YSkKK3sKKyNpZiBFTkFCTEUoVk9SQklTKQorICAgIGlmICghaXNWb3JiaXNEZWNvZGVyQXZhaWxh
YmxlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBjb29raWVEYXRhID0g
Y29va2llRnJvbVZvcmJpc0NvZGVjUHJpdmF0ZShwcml2YXRlRGF0YVNpemUsIHByaXZhdGVEYXRh
KTsKKyAgICBpZiAoIWNvb2tpZURhdGEuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIHJldHVybiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uRm9yRm9ybWF0KCd2b3Ji
JywgY29va2llRGF0YSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwcml2YXRlRGF0YVNpemUp
OworICAgIFVOVVNFRF9QQVJBTShwcml2YXRlRGF0YSk7CisgICAgcmV0dXJuIG51bGxwdHI7Cisj
ZW5kaWYKK30KKworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCg==
</data>
<flag name="commit-queue"
          id="433271"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415916</attachid>
            <date>2020-12-10 12:59:25 -0800</date>
            <delta_ts>2020-12-10 13:42:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219755-20201210125924.patch</filename>
            <type>text/plain</type>
            <size>84931</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwNjM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGE5YjdjY2JmMTY3YWI0
M2I1YWYzZWIzZmI0Y2QzMDM2MTdiZmI3ZS4uZDBmZTg1NmUyNmI0NDdlZjg0MGFiOThlM2M2ZjFk
YTU0ZWEzOTkzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDIwLTEyLTEwICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNU0VdIFJlZmFj
dG9yIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gaW4gcHJlcGFyYXRpb24gZm9yIHN1cHBvcnRpbmcg
YXVkaW8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
OTc1NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzIxOTI2MjU+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3IgdGhlIFdlYk0gcGFyc2Vy
IGluIHByZXBhcmF0aW9uIGZvciBzdXBwb3J0aW5nIGF1ZGlvOiBtb3ZlIFZQOS1zcGVjaWZpYyBj
b2RlCisgICAgICAgIGludG8gVlA5VXRpbGl0aWVzQ29jb2EsIGNvbnZlcnQgVHJhY2tEYXRhIGZy
b20gYSBzdHJ1Y3QgdG8gYSBjbGFzcyBhbmQgbWFkZSBkZXJpdmVkCisgICAgICAgIGNsYXNzZXMg
Zm9yIGF1ZGlvIGFuZCB2aWRlbywgYWRkIHN0dWIgZnVuY3Rpb24gdG8gY3JlYXRlIGZvcm1hdCBk
ZXNjcmlwdGlvbnMgZm9yIAorICAgICAgICBWb3JiaXMgYW5kIE9wdXMgYXVkaW8uCisKKyAgICAg
ICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKworICAgICAgICAqIHBsYXRmb3JtL2NvY29hL01lZGlhVXRpbGl0aWVzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24pOiBBZGQg
b3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgbWFnaWMgY29va2llLgorICAgICAgICAqIHBsYXRmb3Jt
L2NvY29hL01lZGlhVXRpbGl0aWVzLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OmlzQ29udGVudFR5cGVTdXBwb3J0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnJlc2V0UGFyc2VyU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6dHJhY2tEYXRhRm9yVHJhY2tOdW1iZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25UcmFja0VudHJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cHJvdmlkZU1lZGlhRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0
YTo6Y29uc3VtZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJh
bWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlv
VHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6Zmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldE1pbmltdW1BdWRpb1NhbXBsZUR1cmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NvbG9yUHJpbWFyaWVzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NNQ29sb3JQcmltYXJpZXMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01UcmFuc2ZlckZ1bmN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb01hdHJpeENvZWZmaWNpZW50cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9DTVlDYkNSTWF0cml4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJz
YW1wbGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGb3JtYXREZXNjcmlw
dGlvbkZyb21WUDlIZWFkZXJQYXJzZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKGlzVHlwZSk6
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1t
OgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ29sb3JQcmltYXJpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Y29udmVydFRvQ01Db2xvclByaW1hcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpj
b252ZXJ0VG9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpjb252
ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvTWF0
cml4Q29lZmZpY2llbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NNWUNiQ1JNYXRy
aXgpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFN1YnNhbXBsaW5nWFlUb0Nocm9tYVN1YnNh
bXBsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQ
OUhlYWRlclBhcnNlcik6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJN
QXVkaW9VdGlsaXRpZXNDb2NvYS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpyZWdpc3RlckRlY29kZXJGYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF1
ZGlvRm9ybWF0RGVzY3JpcHRpb25Gb3JGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2ll
RnJvbU9wdXNDb2RlY1ByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNPcHVzRGVjb2RlckF2
YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVPcHVzQXVkaW9Gb3JtYXREZXNjcmlw
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVGcm9tVm9yYmlzQ29kZWNQcml2YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OmlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVWb3JiaXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKToKKwogMjAyMC0xMi0x
MCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0lGQ10g
SW50cm9kdWNlIElubGluZVRleHRJdGVtOjppc1dvcmRTZXBhcmF0b3IKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29j
b2EudHh0CmluZGV4IDhmOTlmOWExOTE4Yzk1NTg4NWZiMmFjYjk5YzhkMWE3NTI2NWFhMDMuLmU1
OTEzOWZiYjQ1NjUwZGVmOTk2ZjgyMWQ1Y2FmYTQwYjcyZDhlY2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0Nv
Y29hLnR4dApAQCAtMzc2LDYgKzM3Niw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkNv
cmVDQUxheWVyRXh0cmFzLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJDb3JlRGVjb21w
cmVzc2lvblNlc3Npb24ubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0K
IHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdQVUxheWVyLm1tCitwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9XZWJNVXRpbGl0aWVzQ29jb2EubW0gQG5vLXVuaWZ5CiBwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9WaWRlb1RyYWNrUHJpdmF0ZVdlYk0uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
dGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQv
Rm9udENvcmVUZXh0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGJlNGZjYWZmOWZjOTI1OWI0NmMzNTM5YjZlYTkzYWY0YWRj
N2ZiMjUuLmZmNTJhMDZhMjY3NjNjN2U3Yjg3ODU0ZDcyOTQ0MGVhMjI1YTY0Y2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIx
OCw2ICsyMTgsOCBAQAogCQkwN0VFNzZFQzFCRTk2REIwMDBGODkxMzMgLyogTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3RUU3NkVBMUJFOTZEQjAwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3RUU3
NkVGMUJFQTYxOTgwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdFRTc2RUQxQkVBNjE5
ODAwRjg5MTMzIC8qIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLmggKi87IH07CiAJCTA3RjRF
OTMzMjBCMzU4N0YwMDJFMzgwMyAvKiBBVkFzc2V0TUlNRVR5cGVDYWNoZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdDOEFEMTIxRDA3M0Q2MzAwODdD
NUNFIC8qIEFWQXNzZXRNSU1FVHlwZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMDdGNUNGRjUyNTgyQTUxRDAwNjYyRUY1IC8qIFdlYk1B
dWRpb1V0aWxpdGllc0NvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwN0Y1Q0ZGNDI1ODJBNEY4MDA2NjJFRjUgLyogV2ViTUF1ZGlvVXRpbGl0aWVz
Q29jb2EuaCAqLzsgfTsKKwkJMDdGNUNGRjYyNTgyQTUyOTAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0
aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDdGNUNGRjIyNTgyQTRGODAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29h
Lm1tICovOyB9OwogCQkwN0Y4NzY4NDFBRDU4MEY5MDA5MDU4NDkgLyogTWVkaWFQbGF5YmFja1Rh
cmdldENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3Rjg3NjgzMUFENEE5NDUwMDkwNTg0OSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0Q29udGV4
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3
Rjk0NDE2MTg2NEQwNDYwMDVEMzFDQiAvKiBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQUU4QzA4MTc0
NkI5NTcwMDUzMkQ3OCAvKiBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwN0ZFOTlERDE4ODA3QTdE
MDAyNTY2NDggLyogTWVkaWFFbGVtZW50U2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdGRTk5REIxODgwN0E3RDAwMjU2NjQ4IC8qIE1lZGlh
RWxlbWVudFNlc3Npb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtNTg3NSw2ICs1ODc3LDggQEAKIAkJMDdFRTc2RUExQkU5NkRCMDAwRjg5MTMz
IC8qIE1vY2tSZWFsdGltZVZpZGVvU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1vY2tSZWFsdGltZVZpZGVvU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA3RUU3NkVEMUJFQTYxOTgwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJj
ZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrUmVhbHRpbWVWaWRl
b1NvdXJjZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwN0VFNzZFRTFCRUE2
MTk4MDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDdGNUNGRjIyNTgyQTRGODAwNjYyRUY1
IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2Vi
TUF1ZGlvVXRpbGl0aWVzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3
RjVDRkY0MjU4MkE0RjgwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwN0Y4NzY4MzFBRDRBOTQ1MDA5MDU4NDkgLyogTWVkaWFQbGF5YmFja1Rhcmdl
dENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFQbGF5YmFj
a1RhcmdldENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdGRTk5REEx
ODgwN0E3RDAwMjU2NjQ4IC8qIE1lZGlhRWxlbWVudFNlc3Npb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFFbGVtZW50U2Vzc2lvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3RkU5OURCMTg4MDdBN0QwMDI1NjY0OCAvKiBNZWRpYUVs
ZW1lbnRTZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRWxl
bWVudFNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2ODY3LDYgKzI2
ODcxLDggQEAKIAkJCQk0OUZGQkYzRTExQzkzRUUzMDA2QTcxMTggLyogV2ViR0xMYXllci5tbSAq
LywKIAkJCQkzMTg0MzZEQjIxQjlEQUEwMDBFRDM4M0UgLyogV2ViR1BVTGF5ZXIuaCAqLywKIAkJ
CQkzMTg0MzZERDIxQjlEQUEwMDBFRDM4M0UgLyogV2ViR1BVTGF5ZXIubW0gKi8sCisJCQkJMDdG
NUNGRjQyNTgyQTRGODAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29hLmggKi8sCisJ
CQkJMDdGNUNGRjIyNTgyQTRGODAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1t
ICovLAogCQkJKTsKIAkJCXBhdGggPSBjb2NvYTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CkBAIC0zNTI1Niw2ICszNTI2Miw3IEBACiAJCQkJNDk0QkQ3OTUwRjU1QzhFRTAwNzQ3ODI4IC8q
IFdlYktpdFBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUMwRkYyNTBFNENFQjZFMDA3RDZG
RTUgLyogV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNGMzMy
RjBGMkI5QTI1MDA0QjY3OTUgLyogV2ViTGF5ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3RjVD
RkY1MjU4MkE1MUQwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMDcwOUQ3OEYxQUU1NTU1NDAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1h
bmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3MDlENzk1MUFFNTVBMjkwMDRFNDJGOCAvKiBX
ZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzA5RDc5
MzFBRTU1NTdFMDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zNjYxMCw2ICszNjYxNyw3IEBACiAJCQkJMkQwNjIxNEQxREE2M0E4QjAwQTdG
QjI2IC8qIFdlYktpdE1lZGlhS2V5cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDA2MjE0RjFE
QTYzQTkxMDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlTZXNzaW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTdDNDhBNkQwMTkxQzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3BhY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMDdGNUNGRjYyNTgyQTUyOTAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0
aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMDcwOUQ3OTIxQUU1NTU3RTAwNEU0
MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUNBRjM0ODIwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUNFQ0RDOTNDMjFGMjk3MjkwMDk3NkJEMSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQVZLaXQubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL01lZGlhVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL01lZGlhVXRpbGl0aWVzLmNwcAppbmRleCBiNDhiNGY1NjMzMmQwNTlkOWZi
MTc3NTU0MzBhMWY4ZTA1NjJjY2M1Li5hNTMzMzJjZjdkYmQ2NDY2ZjQ0ZjU3NmQxY2Q3YWRlNzYx
NTBhYTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NZWRpYVV0
aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTWVkaWFVdGls
aXRpZXMuY3BwCkBAIC0zNSwxMSArMzUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgUEFMOwogCi1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3Jl
YXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBk
ZXNjcmlwdGlvbikKK1JldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVBdWRp
b0Zvcm1hdERlc2NyaXB0aW9uKGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCBzaXplX3QgbWFnaWNDb29raWVTaXplLCBjb25zdCB2b2lkKiBtYWdpY0Nvb2tpZSkKIHsK
ICAgICBhdXRvIGJhc2ljRGVzY3JpcHRpb24gPSBXVEY6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJh
c2ljRGVzY3JpcHRpb24qPihkZXNjcmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3Jp
cHRpb24pOwogICAgIENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0ID0gbnVsbHB0cjsKLSAg
ICBhdXRvIGVycm9yID0gQ01BdWRpb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGJhc2ljRGVzY3JpcHRpb24sIDAsIG51bGxwdHIsIDAsIG51bGxwdHIsIG51bGxw
dHIsICZmb3JtYXQpOworICAgIGF1dG8gZXJyb3IgPSBDTUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25D
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYmFzaWNEZXNjcmlwdGlvbiwgMCwgbnVsbHB0ciwg
bWFnaWNDb29raWVTaXplLCBtYWdpY0Nvb2tpZSwgbnVsbHB0ciwgJmZvcm1hdCk7CiAgICAgaWYg
KGVycm9yKSB7CiAgICAgICAgIExPR19FUlJPUigiY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlv
biBmYWlsZWQgd2l0aCAlZCIsIGVycm9yKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NZWRpYVV0aWxpdGllcy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTWVkaWFVdGlsaXRpZXMuaAppbmRleCA2YjY3
YzY2Nzg1ZDQ3ZDI3MDJiNWM2NDllZjI4NWU0YjBhNWUxMjY2Li45MTcwOGVhMjJhZDRiNWJiYzdl
Zjg5ZDRjYjVkYjM1OTlkOGU2MjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9NZWRpYVV0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL01lZGlhVXRpbGl0aWVzLmgKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjsKIGNsYXNzIFBsYXRmb3JtQXVkaW9EYXRh
OwogCi1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9Gb3JtYXRE
ZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJik7CitSZXRhaW5QdHI8Q01G
b3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihjb25zdCBB
dWRpb1N0cmVhbURlc2NyaXB0aW9uJiwgc2l6ZV90IG1hZ2ljQ29va2llU2l6ZSA9IDAsIGNvbnN0
IHZvaWQqIG1hZ2ljQ29va2llID0gbnVsbHB0cik7CiBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJS
ZWY+IGNyZWF0ZUF1ZGlvU2FtcGxlQnVmZmVyKGNvbnN0IFBsYXRmb3JtQXVkaW9EYXRhJiwgY29u
c3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYsIENNVGltZSwgc2l6ZV90IHNhbXBsZUNvdW50KTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNw
cAppbmRleCBiZTFlMDg2ZTBhYzUyMzU0NjM2YTAwNmFiMzJkMWI5MmY0MGI0ZDgxLi41YzE5ZGQw
MjJmMDNmZjYwN2RmMGNmZWNiYTBhZmFlYzdlYzdkYTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNLmNwcApAQCAtMzksMTEgKzM5LDEzIEBACiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCiAjaW5jbHVkZSAiVlA5VXRpbGl0aWVzQ29jb2EuaCIKICNpbmNsdWRlICJWaWRlb1RyYWNr
UHJpdmF0ZVdlYk0uaCIKKyNpbmNsdWRlICJXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0RhdGFWaWV3Lmg+CiAjaW5jbHVkZSA8d2VibS93ZWJtX3Bh
cnNlci5oPgogI2luY2x1ZGUgPHd0Zi9BbGdvcml0aG1zLmg+CiAjaW5jbHVkZSA8d3RmL0xvZ2dl
ckhlbHBlci5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGlzdC5oPgogI2luY2x1ZGUgPHd0
Zi9jZi9UeXBlQ2FzdHNDRi5oPgogI2luY2x1ZGUgPHd0Zi9kYXJ3aW4vV2Vha0xpbmtpbmcuaD4K
QEAgLTIzNiw3ICsyMzgsNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBMb2dBcmd1bWVudDxXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZT4gewogCiB9IC8vIG5hbWVzcGFjZSBXVEYK
IAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBQQUw7CkBAIC00NTYs
NiArNDU3LDcgQEAgcHJpdmF0ZToKIAogTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OmlzQ29udGVudFR5cGVTdXBwb3J0ZWQoY29uc3QgQ29udGVu
dFR5cGUmIHR5cGUpCiB7CisjaWYgRU5BQkxFKFZQOSkgfHwgRU5BQkxFKFZPUkJJUykgfHwgRU5B
QkxFKE9QVVMpCiAgICAgaWYgKCFpc1dlYm1QYXJzZXJBdmFpbGFibGUoKSkKICAgICAgICAgcmV0
dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CiAKQEAg
LTQ2NywxMCArNDY5LDE0IEBAIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjppc0NvbnRlbnRUeXBlU3VwcG9ydGVkKGNvCiAgICAgaWYgKCFjb2Rl
Y3NQYXJhbWV0ZXIpCiAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5
cGU6Ok1heUJlU3VwcG9ydGVkOwogCi0jaWYgRU5BQkxFKFZQOSkKICAgICBhdXRvIHNwbGl0UmVz
dWx0cyA9IFN0cmluZ1ZpZXcoY29kZWNzUGFyYW1ldGVyKS5zcGxpdCgnLCcpOwogICAgIGZvciAo
YXV0byBzcGxpdCA6IHNwbGl0UmVzdWx0cykgeworI2lmIEVOQUJMRShWUDkpCiAgICAgICAgIGlm
IChzcGxpdC5zdGFydHNXaXRoKCJ2cDA5IikpIHsKKworICAgICAgICAgICAgaWYgKCFpc1ZQOURl
Y29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVt
czo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKwogICAgICAgICAgICAgYXV0byBjb2Rl
Y1BhcmFtZXRlcnMgPSBwYXJzZVZQQ29kZWNQYXJhbWV0ZXJzKHNwbGl0KTsKICAgICAgICAgICAg
IGlmICghY29kZWNQYXJhbWV0ZXJzKQogICAgICAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXll
ckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwpAQCAtNDgwLDE0ICs0ODYsMzgg
QEAgTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
OmlzQ29udGVudFR5cGVTdXBwb3J0ZWQoY28KIAogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KLSAgICAgICAgLy8gRklYTUU6IEFkZCBPcHVzIFN1cHBvcnQKLSAgICAgICAgLy8gRklY
TUU6IEFkZCBWb3JiaXMgU3VwcG9ydAorI2VuZGlmIC8vIEVOQUJMRShWUDkpCisKKyNpZiBFTkFC
TEUoVk9SQklTKQorICAgICAgICBpZiAoc3BsaXQgPT0gInZvcmJpcyIpIHsKKyAgICAgICAgICAg
IGlmICghaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKFZPUkJJUykKKwor
I2lmIEVOQUJMRShPUFVTKQorICAgICAgICBpZiAoc3BsaXQgPT0gIm9wdXMiKSB7CisgICAgICAg
ICAgICBpZiAoIWlzT3B1c0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoT1BVUykKKwog
ICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBv
cnRlZDsKICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKFZQOSkgfHwgRU5BQkxFKFZPUkJJUykgfHwg
RU5BQkxFKE9QVVMpCisKICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBl
OjpJc1N1cHBvcnRlZDsKLSNlbHNlCi0gICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBv
cnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0jZW5kaWYKK30KKworUmVmUHRyPFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk0+IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNyZWF0ZShjb25zdCBDb250ZW50
VHlwZSYgdHlwZSkKK3sKKyAgICBpZiAoaXNDb250ZW50VHlwZVN1cHBvcnRlZCh0eXBlKSAhPSBN
ZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkKQorICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKSk7CisgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlNvdXJjZUJ1ZmZlclBhcnNl
cldlYk0oKQpAQCAtNTcxLDYgKzYwMSw3IEBAIGJvb2wgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
c2hvdWxkUHJvdmlkZU1lZGlhZGF0YUZvclRyYWNrSUQodWludDY0X3QpCiB2b2lkIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OnJlc2V0UGFyc2VyU3RhdGUoKQogewogICAgIElORk9fTE9HX0lGX1BP
U1NJQkxFKExPR0lERU5USUZJRVIpOworICAgIGZsdXNoUGVuZGluZ0F1ZGlvQnVmZmVycygpOwog
ICAgIG1fcGFyc2VyLT5EaWRTZWVrKCk7CiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpOb25lOwogICAg
IG1fdHJhY2tzLmNsZWFyKCk7CkBAIC02MDQsNyArNjM1LDcgQEAgdm9pZCBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpzZXRMb2dnZXIoY29uc3QgTG9nZ2VyJiBsb2dnZXIsIGNvbnN0IHZvaWQqIGxv
Z0lkZW4KIGF1dG8gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6dHJhY2tEYXRhRm9yVHJhY2tOdW1i
ZXIodWludDY0X3QgdHJhY2tOdW1iZXIpIC0+IFRyYWNrRGF0YSoKIHsKICAgICBmb3IgKGF1dG8m
IHRyYWNrIDogbV90cmFja3MpIHsKLSAgICAgICAgaWYgKHRyYWNrLnRyYWNrLnRyYWNrX251bWJl
ci5pc19wcmVzZW50KCkgJiYgdHJhY2sudHJhY2sudHJhY2tfbnVtYmVyLnZhbHVlKCkgPT0gdHJh
Y2tOdW1iZXIpCisgICAgICAgIGlmICh0cmFjay0+dHJhY2soKS50cmFja19udW1iZXIuaXNfcHJl
c2VudCgpICYmIHRyYWNrLT50cmFjaygpLnRyYWNrX251bWJlci52YWx1ZSgpID09IHRyYWNrTnVt
YmVyKQogICAgICAgICAgICAgcmV0dXJuICZ0cmFjazsKICAgICB9CiAgICAgcmV0dXJuIG51bGxw
dHI7CkBAIC03NDgsNyArNzc5LDcgQEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9u
Q2x1c3RlckJlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0YSYgbWV0YWRhdGEsIGMKIFN0YXR1cyBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblRyYWNrRW50cnkoY29uc3QgRWxlbWVudE1ldGFkYXRh
JiBtZXRhZGF0YSwgY29uc3QgVHJhY2tFbnRyeSYgdHJhY2tFbnRyeSkKIHsKICAgICBVTlVTRURf
UEFSQU0obWV0YWRhdGEpOwotICAgIGlmICghdHJhY2tFbnRyeS50cmFja190eXBlLmlzX3ByZXNl
bnQoKSkKKyAgICBpZiAoIXRyYWNrRW50cnkudHJhY2tfdHlwZS5pc19wcmVzZW50KCkgfHwgIXRy
YWNrRW50cnkuY29kZWNfaWQuaXNfcHJlc2VudCgpKQogICAgICAgICByZXR1cm4gU3RhdHVzKFN0
YXR1czo6a09rQ29tcGxldGVkKTsKIAogICAgIGF1dG8gdHJhY2tUeXBlID0gdHJhY2tFbnRyeS50
cmFja190eXBlLnZhbHVlKCk7CkBAIC03NTYsOCArNzg3LDMwIEBAIFN0YXR1cyBTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpPblRyYWNrRW50cnkoY29uc3QgRWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0
YSwgY29uCiAgICAgICAgIG1faW5pdGlhbGl6YXRpb25TZWdtZW50LT52aWRlb1RyYWNrcy5hcHBl
bmQoeyBNZWRpYURlc2NyaXB0aW9uV2ViTTo6Y3JlYXRlKFRyYWNrRW50cnkodHJhY2tFbnRyeSkp
LCBWaWRlb1RyYWNrUHJpdmF0ZVdlYk06OmNyZWF0ZShUcmFja0VudHJ5KHRyYWNrRW50cnkpKSB9
KTsKICAgICBlbHNlIGlmICh0cmFja1R5cGUgPT0gVHJhY2tUeXBlOjprQXVkaW8pCiAgICAgICAg
IG1faW5pdGlhbGl6YXRpb25TZWdtZW50LT5hdWRpb1RyYWNrcy5hcHBlbmQoeyBNZWRpYURlc2Ny
aXB0aW9uV2ViTTo6Y3JlYXRlKFRyYWNrRW50cnkodHJhY2tFbnRyeSkpLCBBdWRpb1RyYWNrUHJp
dmF0ZVdlYk06OmNyZWF0ZShUcmFja0VudHJ5KHRyYWNrRW50cnkpKSB9KTsKLSAgICBtX3RyYWNr
cy5hcHBlbmQoeyBUcmFja0VudHJ5KHRyYWNrRW50cnkpLCB7IH0sIG51bGxwdHIsIG51bGxwdHIs
IDAgfSk7CiAKKyAgICBTdHJpbmdWaWV3IGNvZGVjU3RyaW5nIHsgdHJhY2tFbnRyeS5jb2RlY19p
ZC52YWx1ZSgpLmRhdGEoKSwgKHVuc2lnbmVkKXRyYWNrRW50cnkuY29kZWNfaWQudmFsdWUoKS5s
ZW5ndGgoKSB9OworI2lmIEVOQUJMRShWUDkpCisgICAgaWYgKGNvZGVjU3RyaW5nID09ICJWX1ZQ
OSIgJiYgaXNWUDlEZWNvZGVyQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgbV90cmFja3MuYXBwZW5k
KFZpZGVvVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpWUDksIHRyYWNrRW50cnksICp0aGlz
KSk7CisgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOworICAgIH0K
KyNlbmRpZgorCisjaWYgRU5BQkxFKFZPUkJJUykKKyAgICBpZiAoY29kZWNTdHJpbmcgPT0gIkFf
Vk9SQklTIiAmJiBpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKSkgeworICAgICAgICBtX3RyYWNr
cy5hcHBlbmQoQXVkaW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6OlZvcmJpcywgdHJhY2tF
bnRyeSwgKnRoaXMsIG1fbWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24pKTsKKyAgICAgICAgcmV0
dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CisgICAgfQorI2VuZGlmCisKKyNpZiBF
TkFCTEUoT1BVUykKKyAgICBpZiAoY29kZWNTdHJpbmcgPT0gIkFfT1BVUyIgJiYgaXNPcHVzRGVj
b2RlckF2YWlsYWJsZSgpKSB7CisgICAgICAgIG1fdHJhY2tzLmFwcGVuZChBdWRpb1RyYWNrRGF0
YTo6Y3JlYXRlKENvZGVjVHlwZTo6T3B1cywgdHJhY2tFbnRyeSwgKnRoaXMsIG1fbWluaW11bUF1
ZGlvU2FtcGxlRHVyYXRpb24pKTsKKyAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0Nv
bXBsZXRlZCk7CisgICAgfQorI2VuZGlmCisKKyAgICBtX3RyYWNrcy5hcHBlbmQoVHJhY2tEYXRh
OjpjcmVhdGUoQ29kZWNUeXBlOjpVbnN1cHBvcnRlZCwgdHJhY2tFbnRyeSwgKnRoaXMpKTsKICAg
ICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIH0KIApAQCAtODI3LDQwNiAr
ODgwLDI4MCBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25CbG9ja0dy
b3VwRW5kKGNvbnN0IHdlYm06OkVsZW1lbnRNZXRhZGF0YQogICAgIHJldHVybiBTdGF0dXMoU3Rh
dHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi0jaWYgRU5BQkxFKFZQOSkKIAotc3RhdGljIHVpbnQ4
X3QgY29udmVydFRvQ29sb3JQcmltYXJpZXMoY29uc3QgUHJpbWFyaWVzJiBjb2VmZmljaWVudHMp
Cit3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25GcmFtZShjb25zdCBGcmFt
ZU1ldGFkYXRhJiBtZXRhZGF0YSwgUmVhZGVyKiByZWFkZXIsIHVpbnQ2NF90KiBieXRlc1JlbWFp
bmluZykKIHsKLSAgICBzd2l0Y2ggKGNvZWZmaWNpZW50cykgewotICAgIGNhc2UgUHJpbWFyaWVz
OjprQnQ3MDk6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6
QlRfNzA5XzY7Ci0gICAgY2FzZSBQcmltYXJpZXM6OmtVbnNwZWNpZmllZDoKLSAgICAgICAgcmV0
dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpVbnNwZWNpZmllZDsKLSAgICBjYXNl
IFByaW1hcmllczo6a0J0NDcwTToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9y
UHJpbWFyaWVzOjpCVF80NzBfNl9NOwotICAgIGNhc2UgUHJpbWFyaWVzOjprQnQ0NzBCZzoKLSAg
ICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF80NzBfN19CRzsK
LSAgICBjYXNlIFByaW1hcmllczo6a1NtcHRlMTcwTToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmln
dXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF82MDFfNzsKLSAgICBjYXNlIFByaW1hcmllczo6a1Nt
cHRlMjQwTToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpT
TVBURV9TVF8yNDA7Ci0gICAgY2FzZSBQcmltYXJpZXM6OmtGaWxtOgotICAgICAgICByZXR1cm4g
VlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkZpbG07Ci0gICAgY2FzZSBQcmltYXJpZXM6
OmtCdDIwMjA6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6
QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U7Ci0gICAgY2FzZSBQcmltYXJpZXM6OmtTbXB0
ZVN0NDI4MToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpT
TVBURV9TVF80MjhfMTsKLSAgICBjYXNlIFByaW1hcmllczo6a1NtcHRlUnA0MzE6Ci0gICAgICAg
IHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfUlBfNDMxXzI7Ci0g
ICAgY2FzZSBQcmltYXJpZXM6OmtTbXB0ZUVnNDMyOgotICAgICAgICByZXR1cm4gVlBDb25maWd1
cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX0VHXzQzMl8xOwotICAgIGNhc2UgUHJpbWFyaWVz
OjprSmVkZWNQMjJQaG9zcGhvcnM6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xv
clByaW1hcmllczo6RUJVX1RlY2hfMzIxM19FOwotICAgIH0KLX0KKyAgICBBU1NFUlQocmVhZGVy
KTsKKyAgICBpZiAoIXJlYWRlcikKKyAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RF
bm91Z2hNZW1vcnkpOwogCi1zdGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRvQ01Db2xvclByaW1h
cmllcyh1aW50OF90IHByaW1hcmllcykKLXsKLSAgICBzd2l0Y2ggKHByaW1hcmllcykgewotICAg
IGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzcwOV82OgotICAgICAgICBy
ZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19JVFVfUl83MDlfMjsKLSAgICBjYXNl
IFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpFQlVfVGVjaF8zMjEzX0U6Ci0gICAgICAg
IHJldHVybiBrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzX0VCVV8zMjEzOwotICAgIGNhc2Ug
VlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzYwMV83OgotICAgIGNhc2UgVlBDb25m
aWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NUXzI0MDoKLSAgICAgICAgcmV0dXJuIGtD
VkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfU01QVEVfQzsKLSAgICBjYXNlIFZQQ29uZmlndXJh
dGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9SUF80MzFfMjoKLSAgICAgICAgcmV0dXJuIGtDTUZv
cm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJpZXNfRENJX1AzOwotICAgIGNhc2UgVlBDb25maWd1
cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX0VHXzQzMl8xOgotICAgICAgICByZXR1cm4ga0NN
Rm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19QM19ENjU7Ci0gICAgY2FzZSBWUENvbmZp
Z3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U6Ci0g
ICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX0lUVV9SXzIw
MjA7Ci0gICAgfQorICAgIGlmICghbV9jdXJyZW50QmxvY2spCisgICAgICAgIHJldHVybiBTdGF0
dXMoU3RhdHVzOjprSW52YWxpZEVsZW1lbnRJZCk7CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0K
KyAgICBhdXRvKiBibG9jayA9IFdURjo6c3dpdGNoT24oKm1fY3VycmVudEJsb2NrLCBbXShCbG9j
ayYgYmxvY2spIHsKKyAgICAgICAgcmV0dXJuICZibG9jazsKKyAgICB9LCBbXShTaW1wbGVCbG9j
ayYgYmxvY2spIC0+IEJsb2NrKiB7CisgICAgICAgIHJldHVybiAmYmxvY2s7CisgICAgfSk7Cisg
ICAgaWYgKCFibG9jaykKKyAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtJbnZhbGlkRWxl
bWVudElkKTsKIAotc3RhdGljIHVpbnQ4X3QgY29udmVydFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3MoY29uc3QgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MmIGNoYXJhY3RlcmlzdGljcykKLXsKLSAg
ICBzd2l0Y2ggKGNoYXJhY3RlcmlzdGljcykgewotICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OmtCdDcwOToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzOjpCVF83MDlfNjsKLSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
OjprVW5zcGVjaWZpZWQ6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6VW5zcGVjaWZpZWQ7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3Rlcmlz
dGljczo6a0dhbW1hMjJjdXJ2ZToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF80NzBfNl9NOwotICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OmtHYW1tYTI4Y3VydmU6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfNDcwXzdfQkc7Ci0gICAgY2FzZSBUcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6a1NtcHRlMTcwTToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlv
blRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF82MDFfNzsKLSAgICBjYXNlIFRyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzOjprU21wdGUyNDBNOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9u
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzI0MDsKLSAgICBjYXNlIFRyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzOjprTGluZWFyOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9u
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxpbmVhcjsKLSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjprTG9nOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJD
aGFyYWN0ZXJpc3RpY3M6OkxvZ3JpdGhtaWM7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3Rlcmlz
dGljczo6a0xvZ1NxcnQ6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6TG9ncml0aG1pY19TcXJ0OwotICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OmtJZWM2MTk2NjI0OgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OklFQ182MTk2Nl8yXzQ7Ci0gICAgY2FzZSBUcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6a0J0MTM2MUV4dGVuZGVkQ29sb3VyR2FtdXQ6Ci0gICAgICAgIHJldHVy
biBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfMTM2MV8wOwotICAg
IGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtJZWM2MTk2NjIxOgotICAgICAgICByZXR1
cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OklFQ182MTk2Nl8yXzE7
Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6azEwQml0QnQyMDIwOgotICAgICAg
ICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBf
MTBiaXQ7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6azEyQml0QnQyMDIwOgot
ICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJU
XzIwMjBfMTJiaXQ7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a1NtcHRlU3Qy
MDg0OgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OlNNUFRFX1NUXzIwODQ7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a1Nt
cHRlU3Q0MjgxOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OlNNUFRFX1NUXzQyOF8xOwotICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OmtBcmliU3RkQjY3SGxnOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIxMDBfSExHOworICAgIGF1dG8gdHJhY2tOdW1iZXIgPSBi
bG9jay0+dHJhY2tfbnVtYmVyOworICAgIGF1dG8qIHRyYWNrRGF0YSA9IHRyYWNrRGF0YUZvclRy
YWNrTnVtYmVyKHRyYWNrTnVtYmVyKTsKKyAgICBpZiAoIXRyYWNrRGF0YSkgeworICAgICAgICBF
UlJPUl9MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgIklnbm9yaW5nIHVua25vd24gdHJh
Y2sgbnVtYmVyICIsIHRyYWNrTnVtYmVyKTsKKyAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6
OmtJbnZhbGlkRWxlbWVudElkKTsKICAgICB9Ci19CiAKLXN0YXRpYyBDRlN0cmluZ1JlZiBjb252
ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24odWludDhfdCBjaGFyYWN0ZXJpc3RpY3MpCi17Ci0gICAg
c3dpdGNoIChjaGFyYWN0ZXJpc3RpY3MpIHsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF83MDlfNjoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVm
ZmVyVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl83MDlfMjsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlv
blRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF8yNDA6Ci0gICAgICAgIHJldHVybiBr
Q1ZJbWFnZUJ1ZmZlclRyYW5zZmVyRnVuY3Rpb25fU01QVEVfMjQwTV8xOTk1OwotICAgIGNhc2Ug
VlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzIwODQ6Ci0g
ICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fU01QVEVf
U1RfMjA4NF9QUTsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjpCVF8yMDIwXzEwYml0OgotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTJiaXQ6Ci0gICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNj
cmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fSVRVX1JfMjAyMDsKLSAgICBjYXNlIFZQQ29uZmlndXJh
dGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF80MjhfMToKLSAgICAgICAgcmV0
dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9TTVBURV9TVF80MjhfMTsK
LSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMTAw
X0hMRzoKLSAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlv
bl9JVFVfUl8yMTAwX0hMRzsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjpJRUNfNjE5NjZfMl8xOgotICAgICAgICByZXR1cm4gUEFMOjpjYW5Mb2FkX0Nv
cmVNZWRpYV9rQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fc1JHQigpID8gZ2V0
X0NvcmVNZWRpYV9rQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fc1JHQigpIDog
bnVsbHB0cjsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
OjpMaW5lYXI6Ci0gICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVu
Y3Rpb25fTGluZWFyOworICAgIHN3aXRjaCAodHJhY2tEYXRhLT5jb2RlYygpKSB7CisgICAgY2Fz
ZSBDb2RlY1R5cGU6OlZQOToKKyAgICBjYXNlIENvZGVjVHlwZTo6Vm9yYmlzOgorICAgIGNhc2Ug
Q29kZWNUeXBlOjpPcHVzOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgQ29kZWNUeXBlOjpV
bnN1cHBvcnRlZDoKKyAgICAgICAgcmV0dXJuIFNraXAocmVhZGVyLCBieXRlc1JlbWFpbmluZyk7
CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHRyYWNrRGF0YS0+Y29u
c3VtZUZyYW1lRGF0YSgqcmVhZGVyLCBtZXRhZGF0YSwgYnl0ZXNSZW1haW5pbmcsIENNVGltZU1h
a2UoYmxvY2stPnRpbWVjb2RlICsgbV9jdXJyZW50VGltZWNvZGUsIG1fdGltZXNjYWxlKSwgYmxv
Y2stPm51bV9mcmFtZXMpOwogfQogCi1zdGF0aWMgdWludDhfdCBjb252ZXJ0VG9NYXRyaXhDb2Vm
ZmljaWVudHMoY29uc3QgTWF0cml4Q29lZmZpY2llbnRzJiBjb2VmZmljaWVudHMpCit2b2lkIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OnByb3ZpZGVNZWRpYURhdGEoUmV0YWluUHRyPENNU2FtcGxl
QnVmZmVyUmVmPiBzYW1wbGVCdWZmZXIsIHVpbnQ2NF90IHRyYWNrSUQpCiB7Ci0gICAgc3dpdGNo
IChjb2VmZmljaWVudHMpIHsKLSAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a1JnYjoKLSAg
ICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6SWRlbnRpdHk7
Ci0gICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtCdDcwOToKLSAgICAgICAgcmV0dXJuIFZQ
Q29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfNzA5XzY7Ci0gICAgY2FzZSBNYXRy
aXhDb2VmZmljaWVudHM6OmtVbnNwZWNpZmllZDoKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJh
dGlvbk1hdHJpeENvZWZmaWNpZW50czo6VW5zcGVjaWZpZWQ7Ci0gICAgY2FzZSBNYXRyaXhDb2Vm
ZmljaWVudHM6OmtGY2M6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2Vm
ZmljaWVudHM6OkZDQzsKLSAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a0J0NDcwQmc6Ci0g
ICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzQ3MF83
X0JHOwotICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprU21wdGUxNzBNOgotICAgICAgICBy
ZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF82MDFfNzsKLSAgICBj
YXNlIE1hdHJpeENvZWZmaWNpZW50czo6a1NtcHRlMjQwTToKLSAgICAgICAgcmV0dXJuIFZQQ29u
ZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6U01QVEVfU1RfMjQwOwotICAgIGNhc2UgTWF0
cml4Q29lZmZpY2llbnRzOjprWUNnQ286Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25N
YXRyaXhDb2VmZmljaWVudHM6OllDZ0NvOwotICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjpr
QnQyMDIwTm9uY29uc3RhbnRMdW1pbmFuY2U6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRp
b25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzIwMjBfTm9uY29uc3RhbnRfTHVtaW5hbmNlOwotICAg
IGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprQnQyMDIwQ29uc3RhbnRMdW1pbmFuY2U6Ci0gICAg
ICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzIwMjBfQ29u
c3RhbnRfTHVtaW5hbmNlOwotICAgIH0KKyAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHNhbXBsZUJ1ZmZlciA9IFdURk1vdmUoc2FtcGxl
QnVmZmVyKSwgdHJhY2tJRF0gKCkgbXV0YWJsZSB7CisgICAgICAgIGlmICghbV9kaWRQcm92aWRl
TWVkaWFEYXRhQ2FsbGJhY2spCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBt
ZWRpYVNhbXBsZSA9IE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKHNhbXBsZUJ1ZmZlci5nZXQo
KSwgdHJhY2tJRCk7CisgICAgICAgIG1fZGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKFdURk1v
dmUobWVkaWFTYW1wbGUpLCB0cmFja0lELCBlbXB0eVN0cmluZygpKTsKKyAgICB9KTsKIH0KIAot
c3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNWUNiQ1JNYXRyaXgodWludDhfdCBjb2VmZmlj
aWVudHMpCisjZGVmaW5lIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoLi4uKSBpZiAocGFy
c2VyKCkubG9nZ2VyUHRyKCkpIHBhcnNlcigpLmxvZ2dlclB0cigpLT5lcnJvcihsb2dDaGFubmVs
KCksIFdURjo6TG9nZ2VyOjpMb2dTaXRlSWRlbnRpZmllcihsb2dDbGFzc05hbWUoKSwgX19mdW5j
X18sIHBhcnNlcigpLmxvZ0lkZW50aWZpZXIoKSksIF9fVkFfQVJHU19fKQorCit3ZWJtOjpTdGF0
dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OmNvbnN1bWVGcmFtZURh
dGEod2VibTo6UmVhZGVyJiByZWFkZXIsIGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1
aW50NjRfdCogYnl0ZXNSZW1haW5pbmcsIGNvbnN0IENNVGltZSYgcHJlc2VudGF0aW9uVGltZSwg
aW50IHNhbXBsZUNvdW50KQogewotICAgIHN3aXRjaCAoY29lZmZpY2llbnRzKSB7Ci0gICAgY2Fz
ZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzIwMjBfTm9uY29uc3RhbnRf
THVtaW5hbmNlOgotICAgICAgICByZXR1cm4ga0NNRm9ybWF0RGVzY3JpcHRpb25ZQ2JDck1hdHJp
eF9JVFVfUl8yMDIwOwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRz
OjpCVF80NzBfN19CRzoKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50
czo6QlRfNjAxXzc6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lU
VV9SXzYwMV80OwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpC
VF83MDlfNjoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1Jf
NzA5XzI7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OlNNUFRF
X1NUXzI0MDoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfU01QVEVf
MjQwTV8xOTk1OwotICAgIH0KKyAgICBDTUJsb2NrQnVmZmVyUmVmIHJhd0Jsb2NrQnVmZmVyID0g
bnVsbHB0cjsKIAotICAgIHJldHVybiBudWxscHRyOwotfQorICAgIGlmICghbV9jdXJyZW50Qmxv
Y2tCdWZmZXIpIHsKKyAgICAgICAgYXV0byBlcnIgPSBDTUJsb2NrQnVmZmVyQ3JlYXRlV2l0aE1l
bW9yeUJsb2NrKGtDRkFsbG9jYXRvckRlZmF1bHQsIG51bGxwdHIsIG1ldGFkYXRhLnNpemUsIGtD
RkFsbG9jYXRvckRlZmF1bHQsIG51bGxwdHIsIDAsIG1ldGFkYXRhLnNpemUsIDAsICZyYXdCbG9j
a0J1ZmZlcik7CisgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJS
T1JfSUZfUE9TU0lCTEUoIkNNQmxvY2tCdWZmZXJDcmVhdGVXaXRoTWVtb3J5QmxvY2sgZmFpbGVk
IHdpdGggZXJyb3IiLCBlcnIpOworICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0
ZXNSZW1haW5pbmcpOworICAgICAgICB9CiAKLXN0YXRpYyB1aW50OF90IGNvbnZlcnRTdWJzYW1w
bGluZ1hZVG9DaHJvbWFTdWJzYW1wbGluZyh1aW50NjRfdCB4LCB1aW50NjRfdCB5KQotewotICAg
IGlmICh4ICYgeSkKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNocm9tYVN1YnNhbXBs
aW5nOjpTdWJzYW1wbGluZ180MjBfQ29sb2NhdGVkOwotICAgIGlmICh4ICYgIXkpCi0gICAgICAg
IHJldHVybiBWUENvbmZpZ3VyYXRpb25DaHJvbWFTdWJzYW1wbGluZzo6U3Vic2FtcGxpbmdfNDIy
OwotICAgIGlmICgheCAmICF5KQotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ2hyb21h
U3Vic2FtcGxpbmc6OlN1YnNhbXBsaW5nXzQ0NDsKLSAgICAvLyBUaGlzIGluZGljYXRlcyA0OjQ6
MCBzdWJzYW1wbGluZywgd2hpY2ggaXMgbm90IGV4cHJlc3NhYmxlIGluIHRoZSAndnBjQycgYm94
LiBEZWZhdWx0IHRvIDQ6MjowLgotICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25DaHJvbWFTdWJz
YW1wbGluZzo6U3Vic2FtcGxpbmdfNDIwX0NvbG9jYXRlZDsKLX0KKyAgICAgICAgbV9jdXJyZW50
QmxvY2tCdWZmZXIgPSBhZG9wdENGKHJhd0Jsb2NrQnVmZmVyKTsKKyAgICAgICAgbV9jdXJyZW50
QmxvY2tCdWZmZXJQb3NpdGlvbiA9IDA7CiAKLXN0YXRpYyBSZXRhaW5QdHI8Q01Gb3JtYXREZXNj
cmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5SGVhZGVyUGFyc2VyKGNv
bnN0IHZwOV9wYXJzZXI6OlZwOUhlYWRlclBhcnNlciYgcGFyc2VyLCBjb25zdCB3ZWJtOjpFbGVt
ZW50PENvbG91cj4mIGNvbG9yKQotewotICAgIC8vIFJlZjogIlZQIENvZGVjIElTTyBNZWRpYSBG
aWxlIEZvcm1hdCBCaW5kaW5nLCB2MS4wLCAyMDE3LTAzLTMxIgotICAgIC8vIDxodHRwczovL3d3
dy53ZWJtcHJvamVjdC5vcmcvdnA5L21wNC8+Ci0gICAgLy8KLSAgICAvLyBjbGFzcyBWUENvZGVj
Q29uZmlndXJhdGlvbkJveCBleHRlbmRzIEZ1bGxCb3goJ3ZwY0MnLCB2ZXJzaW9uID0gMSwgMCkK
LSAgICAvLyB7Ci0gICAgLy8gICAgIFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkKCkgdnBjQ29u
ZmlnOwotICAgIC8vIH0KLSAgICAvLwotICAgIC8vIGFsaWduZWQgKDgpIGNsYXNzIFZQQ29kZWND
b25maWd1cmF0aW9uUmVjb3JkIHsKLSAgICAvLyAgICAgdW5zaWduZWQgaW50ICg4KSAgICAgcHJv
ZmlsZTsKLSAgICAvLyAgICAgdW5zaWduZWQgaW50ICg4KSAgICAgbGV2ZWw7Ci0gICAgLy8gICAg
IHVuc2lnbmVkIGludCAoNCkgICAgIGJpdERlcHRoOwotICAgIC8vICAgICB1bnNpZ25lZCBpbnQg
KDMpICAgICBjaHJvbWFTdWJzYW1wbGluZzsKLSAgICAvLyAgICAgdW5zaWduZWQgaW50ICgxKSAg
ICAgdmlkZW9GdWxsUmFuZ2VGbGFnOwotICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDgpICAgICBj
b2xvdXJQcmltYXJpZXM7Ci0gICAgLy8gICAgIHVuc2lnbmVkIGludCAoOCkgICAgIHRyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzOwotICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDgpICAgICBtYXRyaXhD
b2VmZmljaWVudHM7Ci0gICAgLy8gICAgIHVuc2lnbmVkIGludCAoMTYpICAgIGNvZGVjSW50aWFs
aXphdGlvbkRhdGFTaXplOwotICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDgpW10gICBjb2RlY0lu
dGlhbGl6YXRpb25EYXRhOwotICAgIC8vIH0KLSAgICAvLwotICAgIC8vIGNvZGVjSW50aWFsaXph
dGlvbkRhdGFTaXpl4oCLRm9yIFZQOCBhbmQgVlA5IHRoaXMgZmllbGQgbXVzdCBiZSAwLgotICAg
IC8vIGNvZGVjSW50aWFsaXphdGlvbkRhdGHigItiaW5hcnkgY29kZWMgaW5pdGlhbGl6YXRpb24g
ZGF0YS4gTm90IHVzZWQgZm9yIFZQOCBhbmQgVlA5LgotICAgIC8vCi0gICAgLy8gRklYTUU6IENv
bnZlcnQgZXhpc3Rpbmcgc3RydWN0IHRvIGFuIElTT0JveCBhbmQgcmVwbGFjZSB0aGUgd3JpdGlu
ZyBjb2RlIGJlbG93Ci0gICAgLy8gd2l0aCBhIHN1YmNsYXNzIG9mIElTT0Z1bGxCb3guCi0KLSAg
ICBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCByZWNvcmQ7Ci0KLSAgICByZWNvcmQucHJvZmls
ZSA9IHBhcnNlci5wcm9maWxlKCk7Ci0gICAgLy8gQ29yZU1lZGlhIGRvZXMgbmF0IGNhcmUgYWJv
dXQgdGhlIFZQOSBjb2RlYyBsZXZlbDsgaGFyZC1jb2RlIHRvIExldmVsIDEuMCBoZXJlOgotICAg
IHJlY29yZC5sZXZlbCA9IDEwOwotICAgIHJlY29yZC5iaXREZXB0aCA9IHBhcnNlci5iaXRfZGVw
dGgoKTsKLSAgICByZWNvcmQudmlkZW9GdWxsUmFuZ2VGbGFnID0gcGFyc2VyLmNvbG9yX3Jhbmdl
KCkgPyBWUENvbmZpZ3VyYXRpb25SYW5nZTo6RnVsbFJhbmdlIDogVlBDb25maWd1cmF0aW9uUmFu
Z2U6OlZpZGVvUmFuZ2U7Ci0gICAgcmVjb3JkLmNocm9tYVN1YnNhbXBsaW5nID0gY29udmVydFN1
YnNhbXBsaW5nWFlUb0Nocm9tYVN1YnNhbXBsaW5nKHBhcnNlci5zdWJzYW1wbGluZ194KCksIHBh
cnNlci5zdWJzYW1wbGluZ195KCkpOwotICAgIHJlY29yZC5jb2xvclByaW1hcmllcyA9IFZQQ29u
ZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpVbnNwZWNpZmllZDsKLSAgICByZWNvcmQudHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3MgPSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6VW5zcGVjaWZpZWQ7Ci0gICAgcmVjb3JkLm1hdHJpeENvZWZmaWNpZW50cyA9IFZQQ29uZmln
dXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6VW5zcGVjaWZpZWQ7Ci0KLSAgICAvLyBDb250YWlu
ZXIgY29sb3IgdmFsdWVzIGNhbiBvdmVycmlkZSBwZXItc2FtcGxlIG9uZXM6Ci0gICAgaWYgKGNv
bG9yLmlzX3ByZXNlbnQoKSkgewotICAgICAgICBhdXRvJiBjb2xvclZhbHVlID0gY29sb3IudmFs
dWUoKTsKLSAgICAgICAgaWYgKGNvbG9yVmFsdWUuY2hyb21hX3N1YnNhbXBsaW5nX3guaXNfcHJl
c2VudCgpICYmIGNvbG9yVmFsdWUuY2hyb21hX3N1YnNhbXBsaW5nX3kuaXNfcHJlc2VudCgpKQot
ICAgICAgICAgICAgcmVjb3JkLmNocm9tYVN1YnNhbXBsaW5nID0gY29udmVydFN1YnNhbXBsaW5n
WFlUb0Nocm9tYVN1YnNhbXBsaW5nKGNvbG9yVmFsdWUuY2hyb21hX3N1YnNhbXBsaW5nX3gudmFs
dWUoKSwgY29sb3JWYWx1ZS5jaHJvbWFfc3Vic2FtcGxpbmdfeS52YWx1ZSgpKTsKLSAgICAgICAg
aWYgKGNvbG9yVmFsdWUucmFuZ2UuaXNfcHJlc2VudCgpICYmIGNvbG9yVmFsdWUucmFuZ2UudmFs
dWUoKSAhPSBSYW5nZTo6a1Vuc3BlY2lmaWVkKQotICAgICAgICAgICAgcmVjb3JkLnZpZGVvRnVs
bFJhbmdlRmxhZyA9IGNvbG9yVmFsdWUucmFuZ2UudmFsdWUoKSA9PSBSYW5nZTo6a0Z1bGwgPyBW
UENvbmZpZ3VyYXRpb25SYW5nZTo6RnVsbFJhbmdlIDogVlBDb25maWd1cmF0aW9uUmFuZ2U6OlZp
ZGVvUmFuZ2U7Ci0gICAgICAgIGlmIChjb2xvclZhbHVlLmJpdHNfcGVyX2NoYW5uZWwuaXNfcHJl
c2VudCgpKQotICAgICAgICAgICAgcmVjb3JkLmJpdERlcHRoID0gY29sb3JWYWx1ZS5iaXRzX3Bl
cl9jaGFubmVsLnZhbHVlKCk7Ci0gICAgICAgIGlmIChjb2xvclZhbHVlLnRyYW5zZmVyX2NoYXJh
Y3RlcmlzdGljcy5pc19wcmVzZW50KCkpCi0gICAgICAgICAgICByZWNvcmQudHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3MgPSBjb252ZXJ0VG9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcyhjb2xvclZhbHVl
LnRyYW5zZmVyX2NoYXJhY3RlcmlzdGljcy52YWx1ZSgpKTsKLSAgICAgICAgaWYgKGNvbG9yVmFs
dWUubWF0cml4X2NvZWZmaWNpZW50cy5pc19wcmVzZW50KCkpCi0gICAgICAgICAgICByZWNvcmQu
bWF0cml4Q29lZmZpY2llbnRzID0gY29udmVydFRvTWF0cml4Q29lZmZpY2llbnRzKGNvbG9yVmFs
dWUubWF0cml4X2NvZWZmaWNpZW50cy52YWx1ZSgpKTsKLSAgICAgICAgaWYgKGNvbG9yVmFsdWUu
cHJpbWFyaWVzLmlzX3ByZXNlbnQoKSkKLSAgICAgICAgICAgIHJlY29yZC5jb2xvclByaW1hcmll
cyA9IGNvbnZlcnRUb0NvbG9yUHJpbWFyaWVzKGNvbG9yVmFsdWUucHJpbWFyaWVzLnZhbHVlKCkp
OworICAgICAgICBlcnIgPSBDTUJsb2NrQnVmZmVyQXNzdXJlQmxvY2tNZW1vcnkobV9jdXJyZW50
QmxvY2tCdWZmZXIuZ2V0KCkpOworICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICBQQVJT
RVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUF1ZGlvU2FtcGxlQnVmZmVyQ3JlYXRlV2l0aFBh
Y2tldERlc2NyaXB0aW9ucyBmYWlsZWQgd2l0aCBlcnJvciIsIGVycik7CisgICAgICAgICAgICBy
ZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CisgICAgICAgIH0KICAgICB9CiAK
LSAgICBjb25zdGV4cHIgc2l6ZV90IFZQQ29kZWNDb25maWd1cmF0aW9uQ29udGVudHNTaXplID0g
MTI7CisgICAgc2l6ZV90IGJ5dGVzVG9SZWFkID0gbWV0YWRhdGEuc2l6ZSAtIG1fY3VycmVudEJs
b2NrQnVmZmVyUG9zaXRpb247CisgICAgd2hpbGUgKGJ5dGVzVG9SZWFkKSB7CisgICAgICAgIHNp
emVfdCBzZWdtZW50U2l6ZUF0UG9zaXRpb24gPSAwOworICAgICAgICB1aW50OF90KiBibG9ja0J1
ZmZlckRhdGEgPSBudWxscHRyOworICAgICAgICBhdXRvIGVyciA9IENNQmxvY2tCdWZmZXJHZXRE
YXRhUG9pbnRlcihtX2N1cnJlbnRCbG9ja0J1ZmZlci5nZXQoKSwgbV9jdXJyZW50QmxvY2tCdWZm
ZXJQb3NpdGlvbiwgJnNlZ21lbnRTaXplQXRQb3NpdGlvbiwgbnVsbHB0ciwgKGNoYXIqKikmYmxv
Y2tCdWZmZXJEYXRhKTsKKyAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgUEFSU0VSX0xP
R19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyIGZhaWxlZCB3
aXRoIGVycm9yIiwgZXJyKTsKKyAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVz
UmVtYWluaW5nKTsKKyAgICAgICAgfQogCi0gICAgdWludDMyX3QgdmVyc2lvbkFuZEZsYWdzID0g
MSA8PCAyNDsKLSAgICB1aW50OF90IGJpdERlcHRoQ2hyb21hQW5kUmFuZ2UgPSAoMHhGICYgcmVj
b3JkLmJpdERlcHRoKSA8PCA0IHwgKDB4NyAmIHJlY29yZC5jaHJvbWFTdWJzYW1wbGluZykgPDwg
MSB8ICgweDEgJiByZWNvcmQudmlkZW9GdWxsUmFuZ2VGbGFnKTsKLSAgICB1aW50MTZfdCBjb2Rl
Y0ludGlhbGl6YXRpb25EYXRhU2l6ZSA9IDA7CisgICAgICAgIHNpemVfdCBieXRlc1RvUmVhZEZy
b21UaGlzU2VnbWVudCA9IHN0ZDo6bWluKGJ5dGVzVG9SZWFkLCBzZWdtZW50U2l6ZUF0UG9zaXRp
b24pOworICAgICAgICB1aW50NjRfdCBieXRlc1JlYWQ7CiAKLSAgICBhdXRvIHZpZXcgPSBKU0M6
OkRhdGFWaWV3OjpjcmVhdGUoQXJyYXlCdWZmZXI6OmNyZWF0ZShWUENvZGVjQ29uZmlndXJhdGlv
bkNvbnRlbnRzU2l6ZSwgMSksIDAsIFZQQ29kZWNDb25maWd1cmF0aW9uQ29udGVudHNTaXplKTsK
LSAgICB2aWV3LT5zZXQoMCwgdmVyc2lvbkFuZEZsYWdzLCBmYWxzZSk7Ci0gICAgdmlldy0+c2V0
KDQsIHJlY29yZC5wcm9maWxlLCBmYWxzZSk7Ci0gICAgdmlldy0+c2V0KDUsIHJlY29yZC5sZXZl
bCwgZmFsc2UpOwotICAgIHZpZXctPnNldCg2LCBiaXREZXB0aENocm9tYUFuZFJhbmdlLCBmYWxz
ZSk7Ci0gICAgdmlldy0+c2V0KDcsIHJlY29yZC5jb2xvclByaW1hcmllcywgZmFsc2UpOwotICAg
IHZpZXctPnNldCg4LCByZWNvcmQudHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MsIGZhbHNlKTsKLSAg
ICB2aWV3LT5zZXQoOSwgcmVjb3JkLm1hdHJpeENvZWZmaWNpZW50cywgZmFsc2UpOwotICAgIHZp
ZXctPnNldCgxMCwgY29kZWNJbnRpYWxpemF0aW9uRGF0YVNpemUsIGZhbHNlKTsKKyAgICAgICAg
YXV0byBzdGF0dXMgPSByZWFkZXIuUmVhZChieXRlc1RvUmVhZEZyb21UaGlzU2VnbWVudCwgKHVp
bnQ4X3QqKWJsb2NrQnVmZmVyRGF0YSwgJmJ5dGVzUmVhZCk7CisgICAgICAgIGJ5dGVzVG9SZWFk
IC09IGJ5dGVzUmVhZDsKKyAgICAgICAgKmJ5dGVzUmVtYWluaW5nIC09IGJ5dGVzUmVhZDsKKyAg
ICAgICAgbV9jdXJyZW50QmxvY2tCdWZmZXJQb3NpdGlvbiArPSBieXRlc1JlYWQ7CiAKLSAgICBh
dXRvIGRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAoY29u
c3QgVUludDggKil2aWV3LT5kYXRhKCksIHZpZXctPmJ5dGVMZW5ndGgoKSkpOworICAgICAgICAv
LyBGSVhNRTogV2UgY2FuJ3QgeWV0IGhhbmRsZSBwYXJzaW5nIGEgRnJhbWUgdGhhdCBkb2Vzbid0
IGhhdmUgYWxsIGl0cyBtZW1vcnkgYXZhaWxhYmxlLgorICAgICAgICBpZiAoc3RhdHVzLmNvZGUg
PT0gd2VibTo6U3RhdHVzOjprT2tQYXJ0aWFsIHx8IHN0YXR1cy5jb2RlID09IHdlYm06OlN0YXR1
czo6a1dvdWxkQmxvY2spCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KIAotICAg
IENGVHlwZVJlZiBjb25maWd1cmF0aW9uS2V5c1tdID0geyBDRlNUUigidnBjQyIpIH07Ci0gICAg
Q0ZUeXBlUmVmIGNvbmZpZ3VyYXRpb25WYWx1ZXNbXSA9IHsgZGF0YS5nZXQoKSB9OwotICAgIGF1
dG8gY29uZmlndXJhdGlvbkRpY3QgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCBjb25maWd1cmF0aW9uS2V5cywgY29uZmlndXJhdGlvblZhbHVlcywgV1RG
X0FSUkFZX0xFTkdUSChjb25maWd1cmF0aW9uS2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNh
bGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICBjcmVhdGVT
YW1wbGVCdWZmZXIocHJlc2VudGF0aW9uVGltZSwgc2FtcGxlQ291bnQpOwogCi0gICAgVmVjdG9y
PENGVHlwZVJlZj4gZXh0ZW5zaW9uc0tleXMgeyBrQ01Gb3JtYXREZXNjcmlwdGlvbkV4dGVuc2lv
bl9TYW1wbGVEZXNjcmlwdGlvbkV4dGVuc2lvbkF0b21zIH07Ci0gICAgVmVjdG9yPENGVHlwZVJl
Zj4gZXh0ZW5zaW9uc1ZhbHVlcyA9IHsgY29uZmlndXJhdGlvbkRpY3QuZ2V0KCkgfTsKKyAgICBy
ZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Cit9CiAKLSAgICBpZiAocmVjb3Jk
LnZpZGVvRnVsbFJhbmdlRmxhZyA9PSBWUENvbmZpZ3VyYXRpb25SYW5nZTo6RnVsbFJhbmdlKSB7
Ci0gICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ01Gb3JtYXREZXNjcmlwdGlvbkV4dGVu
c2lvbl9GdWxsUmFuZ2VWaWRlbyk7Ci0gICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGtD
RkJvb2xlYW5UcnVlKTsKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0Rh
dGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcihjb25zdCBDTVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIGlu
dCBzYW1wbGVDb3VudCkKK3sKKyAgICB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBudWxscHRy
OworICAgIHNpemVfdCBzZWdtZW50U2l6ZUF0UG9zaXRpb24gPSAwOworICAgIGF1dG8gZXJyID0g
Q01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyKG1fY3VycmVudEJsb2NrQnVmZmVyLmdldCgpLCAw
LCAmc2VnbWVudFNpemVBdFBvc2l0aW9uLCBudWxscHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRh
dGEpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJM
RSgiQ01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdXRvIGNtQ29sb3JQcmltYXJpZXMg
PSBjb252ZXJ0VG9DTUNvbG9yUHJpbWFyaWVzKHJlY29yZC5jb2xvclByaW1hcmllcykpIHsKLSAg
ICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNL
ZXkpOwotICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbUNvbG9yUHJpbWFyaWVzKTsK
KyAgICBpZiAoIW1faGVhZGVyUGFyc2VyLlBhcnNlVW5jb21wcmVzc2VkSGVhZGVyKGJsb2NrQnVm
ZmVyRGF0YSwgc2VnbWVudFNpemVBdFBvc2l0aW9uKSkgeworICAgICAgICBQQVJTRVJfTE9HX0VS
Uk9SX0lGX1BPU1NJQkxFKCJQYXJzZVVuY29tcHJlc3NlZEhlYWRlciBmYWlsZWQiKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdXRvIGNtVHJhbnNmZXJGdW5jdGlvbiA9IGNv
bnZlcnRUb0NNVHJhbnNmZXJGdW5jdGlvbihyZWNvcmQudHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3Mp
KSB7Ci0gICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlclRyYW5zZmVy
RnVuY3Rpb25LZXkpOwotICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbVRyYW5zZmVy
RnVuY3Rpb24pOworICAgIC8vIE9ubHkgdXBkYXRlIHRoZSBmb3JtYXQgZGVzY3JpcHRpb24gd2hl
biB0aGUgaGVhZGVyIGluZGljYXRlcyB0aGF0IHRoZSBzYW1wbGUgaXMKKyAgICAvLyBhIGtleS1m
cmFtZSwgb3RoZXJ3aXNlIGNvbG9yIGluZm9ybWF0aW9uIHdpbGwgbm90IGJlIHBhcnNlZC4KKyAg
ICBhdXRvIHRyYWNrID0gdGhpcy0+dHJhY2soKTsKKyAgICBpZiAobV9oZWFkZXJQYXJzZXIua2V5
KCkpIHsKKyAgICAgICAgYXV0byBmb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZUZvcm1hdERlc2Ny
aXB0aW9uRnJvbVZQOUhlYWRlclBhcnNlcihtX2hlYWRlclBhcnNlciwgdHJhY2sudmlkZW8udmFs
dWUoKS5jb2xvdXIpOworICAgICAgICBpZiAoIWZvcm1hdERlc2NyaXB0aW9uKSB7CisgICAgICAg
ICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJmYWlsZWQgdG8gY3JlYXRlIGZvcm1h
dCBkZXNjcmlwdGlvbiBmcm9tIFZQOSBoZWFkZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBzZXRGb3JtYXREZXNjcmlwdGlvbihXVEZNb3ZlKGZvcm1hdERlc2Ny
aXB0aW9uKSk7CiAgICAgfQogCi0gICAgaWYgKGF1dG8gY21NYXRyaXggPSBjb252ZXJ0VG9DTVlD
YkNSTWF0cml4KHJlY29yZC5tYXRyaXhDb2VmZmljaWVudHMpKSB7Ci0gICAgICAgIGV4dGVuc2lv
bnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5KTsKLSAgICAgICAgZXh0
ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21NYXRyaXgpOworICAgIC8vIEZJWE1FOiBBIGJsb2NrIG1p
Z2h0IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBmcmFtZSwgYnV0IG9ubHkgdGhpcyBmcmFtZSBoYXMg
YmVlbiByZWFkIGludG8gYGN1cnJlbnRCbG9ja0J1ZmZlcmAuCisgICAgLy8gQmVsb3cgd2UgY3Jl
YXRlIHNhbXBsZSBidWZmZXJzIGZvciBlYWNoIGZyYW1lLCBlYWNoIHdpdGggdGhlIGJsb2NrJ3Mg
dGltZWNvZGUgYW5kIGBudW1fZnJhbWVzYCB2YWx1ZS4KKyAgICAvLyBTaG91bGRuJ3Qgd2UgY3Jl
YXRlIGp1c3Qgb25lIHNhbXBsZSBidWZmZXIgb25jZSBhbGwgdGhlIGJsb2NrJ3MgZnJhbWVzIGhh
dmUgYmVlbiByZWFkIGludG8gYGN1cnJlbnRCbG9ja0J1ZmZlcmA/CisKKyAgICB1aW50NjRfdCBk
dXJhdGlvbiA9IDA7CisgICAgaWYgKHRyYWNrLmRlZmF1bHRfZHVyYXRpb24uaXNfcHJlc2VudCgp
KQorICAgICAgICBkdXJhdGlvbiA9IHRyYWNrLmRlZmF1bHRfZHVyYXRpb24udmFsdWUoKSAqIHBy
ZXNlbnRhdGlvblRpbWUudGltZXNjYWxlIC8gMTAwMDAwMDAwMDsKKworICAgIENNU2FtcGxlQnVm
ZmVyUmVmIHJhd1NhbXBsZUJ1ZmZlciA9IG51bGxwdHI7CisgICAgc2l6ZV90IGZyYW1lU2l6ZSA9
IENNQmxvY2tCdWZmZXJHZXREYXRhTGVuZ3RoKG1fY3VycmVudEJsb2NrQnVmZmVyLmdldCgpKTsK
KyAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nID0geyBDTVRpbWVNYWtlKGR1cmF0aW9uLCBw
cmVzZW50YXRpb25UaW1lLnRpbWVzY2FsZSksIHByZXNlbnRhdGlvblRpbWUsIHByZXNlbnRhdGlv
blRpbWUgfTsKKyAgICBlcnIgPSBDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5KGtDRkFsbG9jYXRv
ckRlZmF1bHQsIG1fY3VycmVudEJsb2NrQnVmZmVyLmdldCgpLCBmb3JtYXREZXNjcmlwdGlvbigp
LmdldCgpLCBzYW1wbGVDb3VudCwgMSwgJnRpbWluZywgMSwgJmZyYW1lU2l6ZSwgJnJhd1NhbXBs
ZUJ1ZmZlcik7CisgICAgaWYgKGVycikgeworICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BP
U1NJQkxFKCJDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5IGZhaWxlZCB3aXRoIGVycm9yIiwgZXJy
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGFkb3B0
Q0YocmF3U2FtcGxlQnVmZmVyKTsKIAotICAgIGF1dG8gZXh0ZW5zaW9ucyA9IGFkb3B0Q0YoQ0ZE
aWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGV4dGVuc2lvbnNLZXlzLmRhdGEo
KSwgZXh0ZW5zaW9uc1ZhbHVlcy5kYXRhKCksIGV4dGVuc2lvbnNLZXlzLnNpemUoKSwgJmtDRlR5
cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNr
cykpOworICAgIG1fY3VycmVudEJsb2NrQnVmZmVyID0gbnVsbHB0cjsKKyAgICBtX2N1cnJlbnRC
bG9ja0J1ZmZlclBvc2l0aW9uID0gMDsKIAotICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJl
ZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7Ci0gICAgaWYgKG5vRXJyICE9IENNVmlkZW9G
b3JtYXREZXNjcmlwdGlvbkNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ01WaWRlb0NvZGVj
VHlwZV9WUDksIHBhcnNlci53aWR0aCgpLCBwYXJzZXIuaGVpZ2h0KCksIGV4dGVuc2lvbnMuZ2V0
KCksICZmb3JtYXREZXNjcmlwdGlvbikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJl
dHVybiBhZG9wdENGKGZvcm1hdERlc2NyaXB0aW9uKTsKKyAgICBpZiAoIW1faGVhZGVyUGFyc2Vy
LmtleSgpKSB7CisgICAgICAgIGF1dG8gYXR0YWNobWVudHNBcnJheSA9IENNU2FtcGxlQnVmZmVy
R2V0U2FtcGxlQXR0YWNobWVudHNBcnJheShzYW1wbGVCdWZmZXIuZ2V0KCksIHRydWUpOworICAg
ICAgICBBU1NFUlQoYXR0YWNobWVudHNBcnJheSk7CisgICAgICAgIGlmICghYXR0YWNobWVudHNB
cnJheSkgeworICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01TYW1w
bGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5IHJldHVybmVkIE5VTEwiKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMCwg
Y291bnQgPSBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSk7IGkgPCBjb3VudDsgKytp
KSB7CisgICAgICAgICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gY2hl
Y2tlZF9jZl9jYXN0PENGTXV0YWJsZURpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5k
ZXgoYXR0YWNobWVudHNBcnJheSwgaSkpOworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFs
dWUoYXR0YWNobWVudHMsIGtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfTm90U3luYywga0NGQm9vbGVh
blRydWUpOworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byB0cmFja0lEID0gdHJhY2sudHJh
Y2tfdWlkLnZhbHVlKCk7CisgICAgcGFyc2VyKCkucHJvdmlkZU1lZGlhRGF0YShzYW1wbGVCdWZm
ZXIubGVha1JlZigpLCB0cmFja0lEKTsKIH0KLSNlbmRpZgogCi13ZWJtOjpTdGF0dXMgU291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6T25GcmFtZShjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwg
UmVhZGVyKiByZWFkZXIsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZykKK3dlYm06OlN0YXR1cyBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3
ZWJtOjpSZWFkZXImIHJlYWRlciwgY29uc3QgRnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2
NF90KiBieXRlc1JlbWFpbmluZywgY29uc3QgQ01UaW1lJiBwcmVzZW50YXRpb25UaW1lLCBpbnQg
c2FtcGxlQ291bnQpCiB7Ci0gICAgVU5VU0VEX1BBUkFNKG1ldGFkYXRhKTsKLSAgICBVTlVTRURf
UEFSQU0oYnl0ZXNSZW1haW5pbmcpOworICAgIEFTU0VSVF9VTlVTRUQoc2FtcGxlQ291bnQsIHNh
bXBsZUNvdW50ID09IDEpOwogCi0gICAgQVNTRVJUKHJlYWRlcik7Ci0gICAgaWYgKCFyZWFkZXIp
Ci0gICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprTm90RW5vdWdoTWVtb3J5KTsKKyAgICBp
ZiAoIWZvcm1hdERlc2NyaXB0aW9uKCkpIHsKKyAgICAgICAgaWYgKCF0cmFjaygpLmNvZGVjX3By
aXZhdGUuaXNfcHJlc2VudCgpKSB7CisgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BP
U1NJQkxFKCJBdWRpbyB0cmFjayBtaXNzaW5nIG1hZ2ljIGNvb2tpZSIpOworICAgICAgICAgICAg
cmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOworICAgICAgICB9CiAKLSAgICBp
ZiAoIW1fY3VycmVudEJsb2NrKQotICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a0ludmFs
aWRFbGVtZW50SWQpOworICAgICAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4g
Zm9ybWF0RGVzY3JpcHRpb247CisgICAgICAgIGF1dG8mIHByaXZhdGVEYXRhID0gdHJhY2soKS5j
b2RlY19wcml2YXRlLnZhbHVlKCk7CisgICAgICAgIGlmIChjb2RlYygpID09IENvZGVjVHlwZTo6
Vm9yYmlzKQorICAgICAgICAgICAgZm9ybWF0RGVzY3JpcHRpb24gPSBjcmVhdGVWb3JiaXNBdWRp
b0Zvcm1hdERlc2NyaXB0aW9uKHByaXZhdGVEYXRhLnNpemUoKSwgcHJpdmF0ZURhdGEuZGF0YSgp
KTsKKyAgICAgICAgZWxzZSBpZiAoY29kZWMoKSA9PSBDb2RlY1R5cGU6Ok9wdXMpCisgICAgICAg
ICAgICBmb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZU9wdXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9u
KHByaXZhdGVEYXRhLnNpemUoKSwgcHJpdmF0ZURhdGEuZGF0YSgpKTsKIAotICAgIGF1dG8qIGJs
b2NrID0gV1RGOjpzd2l0Y2hPbigqbV9jdXJyZW50QmxvY2ssIFtdKEJsb2NrJiBibG9jaykgewot
ICAgICAgICByZXR1cm4gJmJsb2NrOwotICAgIH0sIFtdKFNpbXBsZUJsb2NrJiBibG9jaykgLT4g
QmxvY2sqIHsKLSAgICAgICAgcmV0dXJuICZibG9jazsKLSAgICB9KTsKLSAgICBpZiAoIWJsb2Nr
KQotICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a0ludmFsaWRFbGVtZW50SWQpOworICAg
ICAgICBpZiAoIWZvcm1hdERlc2NyaXB0aW9uKSB7CisgICAgICAgICAgICBQQVJTRVJfTE9HX0VS
Uk9SX0lGX1BPU1NJQkxFKCJGYWlsZWQgdG8gY3JlYXRlIGZvcm1hdCBkZXNjcmlwdGlvbiBmcm9t
IGF1ZGlvIHRyYWNrIGhlYWRlciIpOworICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwg
Ynl0ZXNSZW1haW5pbmcpOworICAgICAgICB9CiAKLSAgICBhdXRvIHRyYWNrTnVtYmVyID0gYmxv
Y2stPnRyYWNrX251bWJlcjsKKyAgICAgICAgYXV0byBzdHJlYW1EZXNjcmlwdGlvbiA9IENNQXVk
aW9Gb3JtYXREZXNjcmlwdGlvbkdldFN0cmVhbUJhc2ljRGVzY3JpcHRpb24oZm9ybWF0RGVzY3Jp
cHRpb24uZ2V0KCkpOworICAgICAgICBpZiAoIXN0cmVhbURlc2NyaXB0aW9uKSB7CisgICAgICAg
ICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUF1ZGlvRm9ybWF0RGVzY3JpcHRp
b25HZXRTdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIGZhaWxlZCIpOworICAgICAgICAgICAgcmV0dXJu
IFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOworICAgICAgICB9CisgICAgICAgIG1fcGFj
a2V0RHVyYXRpb24gPSBDTVRpbWVNYWtlKHN0cmVhbURlc2NyaXB0aW9uLT5tRnJhbWVzUGVyUGFj
a2V0LCBzdHJlYW1EZXNjcmlwdGlvbi0+bVNhbXBsZVJhdGUpOwogCi0gICAgYXV0byogdHJhY2tE
YXRhID0gdHJhY2tEYXRhRm9yVHJhY2tOdW1iZXIodHJhY2tOdW1iZXIpOwotICAgIGlmICghdHJh
Y2tEYXRhKQotICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a0ludmFsaWRFbGVtZW50SWQp
OwotICAgIGF1dG8mIHRyYWNrID0gdHJhY2tEYXRhLT50cmFjazsKKyAgICAgICAgc2V0Rm9ybWF0
RGVzY3JpcHRpb24oV1RGTW92ZShmb3JtYXREZXNjcmlwdGlvbikpOworICAgIH0KIAotICAgIHVp
bnQ2NF90IGR1cmF0aW9uID0gMDsKLSAgICBpZiAodHJhY2suZGVmYXVsdF9kdXJhdGlvbi5pc19w
cmVzZW50KCkpCi0gICAgICAgIGR1cmF0aW9uID0gdHJhY2suZGVmYXVsdF9kdXJhdGlvbi52YWx1
ZSgpICogbV90aW1lc2NhbGUgLyAxMDAwMDAwMDAwOworICAgIGlmIChtX3BhY2tldERhdGEuaXNF
bXB0eSgpKSB7CisgICAgICAgIG1fcGFja2V0RGF0YS5yZXNpemUobWV0YWRhdGEuc2l6ZSk7Cisg
ICAgICAgIG1fcGFja2V0Qnl0ZXNSZWFkID0gMDsKKyAgICAgICAgbV9ieXRlT2Zmc2V0ID0gbWV0
YWRhdGEucG9zaXRpb247CisgICAgICAgIG1fc2FtcGxlUHJlc2VudGF0aW9uVGltZSA9IHByZXNl
bnRhdGlvblRpbWU7CisgICAgfQogCi0jaWYgRU5BQkxFKFZQOSkKLSAgICBpZiAodHJhY2suY29k
ZWNfaWQuaXNfcHJlc2VudCgpICYmIHRyYWNrLmNvZGVjX2lkLnZhbHVlKCkgPT0gIlZfVlA5Iikg
ewotICAgICAgICBpZiAoIXRyYWNrRGF0YS0+Y3VycmVudEJsb2NrQnVmZmVyKSB7Ci0gICAgICAg
ICAgICBDTUJsb2NrQnVmZmVyUmVmIHJhd0Jsb2NrQnVmZmVyID0gbnVsbHB0cjsKLSAgICAgICAg
ICAgIGlmIChub0VyciAhPSBDTUJsb2NrQnVmZmVyQ3JlYXRlV2l0aE1lbW9yeUJsb2NrKGtDRkFs
bG9jYXRvckRlZmF1bHQsIG51bGxwdHIsIG1ldGFkYXRhLnNpemUsIGtDRkFsbG9jYXRvckRlZmF1
bHQsIG51bGxwdHIsIDAsIG1ldGFkYXRhLnNpemUsIDAsICZyYXdCbG9ja0J1ZmZlcikpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIFNraXAocmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAg
ICAgICB0cmFja0RhdGEtPmN1cnJlbnRCbG9ja0J1ZmZlciA9IGFkb3B0Q0YocmF3QmxvY2tCdWZm
ZXIpOwotICAgICAgICAgICAgdHJhY2tEYXRhLT5jdXJyZW50QmxvY2tCdWZmZXJQb3NpdGlvbiA9
IDA7Ci0KLSAgICAgICAgICAgIGlmIChub0VyciAhPSBDTUJsb2NrQnVmZmVyQXNzdXJlQmxvY2tN
ZW1vcnkodHJhY2tEYXRhLT5jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCkpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBTa2lwKHJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwotICAgICAgICB9CisgICAg
c2l6ZV90IHBhY2tldERhdGFPZmZzZXQgPSBtX3BhY2tldEJ5dGVzUmVhZDsKKyAgICBzaXplX3Qg
Ynl0ZXNUb1JlYWQgPSBtZXRhZGF0YS5zaXplOworICAgIHdoaWxlIChieXRlc1RvUmVhZCkgewor
ICAgICAgICB1aW50NjRfdCBieXRlc1JlYWQ7CisgICAgICAgIGF1dG8gc3RhdHVzID0gcmVhZGVy
LlJlYWQoYnl0ZXNUb1JlYWQsIG1fcGFja2V0RGF0YS5kYXRhKCkgKyBtX3BhY2tldEJ5dGVzUmVh
ZCwgJmJ5dGVzUmVhZCk7CisgICAgICAgIGJ5dGVzVG9SZWFkIC09IGJ5dGVzUmVhZDsKKyAgICAg
ICAgKmJ5dGVzUmVtYWluaW5nIC09IGJ5dGVzUmVhZDsKKyAgICAgICAgbV9wYWNrZXRCeXRlc1Jl
YWQgKz0gYnl0ZXNSZWFkOworCisgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4ndCB5ZXQgaGFuZGxl
IHBhcnNpbmcgYSBGcmFtZSB0aGF0IGRvZXNuJ3QgaGF2ZSBhbGwgaXRzIG1lbW9yeSBhdmFpbGFi
bGUuCisgICAgICAgIGlmIChzdGF0dXMuY29kZSA9PSB3ZWJtOjpTdGF0dXM6OmtPa1BhcnRpYWwg
fHwgc3RhdHVzLmNvZGUgPT0gd2VibTo6U3RhdHVzOjprV291bGRCbG9jaykKKyAgICAgICAgICAg
IHJldHVybiBzdGF0dXM7CisgICAgfQogCi0gICAgICAgIHNpemVfdCBudW1Ub1JlYWQgPSBtZXRh
ZGF0YS5zaXplIC0gdHJhY2tEYXRhLT5jdXJyZW50QmxvY2tCdWZmZXJQb3NpdGlvbjsKLSAgICAg
ICAgc2l6ZV90IHNlZ21lbnRTaXplQXRQb3NpdGlvbiA9IDA7Ci0gICAgICAgIHVpbnQ4X3QqIGJs
b2NrQnVmZmVyRGF0YSA9IG51bGxwdHI7CisgICAgbV9wYWNrZXREZXNjcmlwdGlvbnMuYXBwZW5k
KHsgc3RhdGljX2Nhc3Q8aW50NjRfdD4ocGFja2V0RGF0YU9mZnNldCksIDAsIHN0YXRpY19jYXN0
PFVJbnQzMj4obWV0YWRhdGEuc2l6ZSkgfSk7CisgICAgYXV0byBzYW1wbGVEdXJhdGlvbiA9IENN
VGltZUdldFNlY29uZHMoQ01UaW1lU3VidHJhY3QocHJlc2VudGF0aW9uVGltZSwgbV9zYW1wbGVQ
cmVzZW50YXRpb25UaW1lKSkgKyBDTVRpbWVHZXRTZWNvbmRzKG1fcGFja2V0RHVyYXRpb24pOwor
ICAgIGlmIChzYW1wbGVEdXJhdGlvbiA+PSBtX21pbmltdW1TYW1wbGVEdXJhdGlvbikKKyAgICAg
ICAgY3JlYXRlU2FtcGxlQnVmZmVyKCk7CiAKLSAgICAgICAgd2hpbGUgKG51bVRvUmVhZCkgewot
ICAgICAgICAgICAgaWYgKG5vRXJyICE9IENNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlcih0cmFj
a0RhdGEtPmN1cnJlbnRCbG9ja0J1ZmZlci5nZXQoKSwgdHJhY2tEYXRhLT5jdXJyZW50QmxvY2tC
dWZmZXJQb3NpdGlvbiwgJnNlZ21lbnRTaXplQXRQb3NpdGlvbiwgbnVsbHB0ciwgKGNoYXIqKikm
YmxvY2tCdWZmZXJEYXRhKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2tpcChyZWFkZXIsIGJ5
dGVzUmVtYWluaW5nKTsKKyAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7
Cit9CiAKLSAgICAgICAgICAgIHNpemVfdCBudW1Ub1JlYWRGcm9tVGhpc1NlZ21lbnQgPSBzdGQ6
Om1pbihudW1Ub1JlYWQsIHNlZ21lbnRTaXplQXRQb3NpdGlvbik7Ci0gICAgICAgICAgICB1aW50
NjRfdCBudW1BY3R1YWxseVdyaXR0ZW5Ub1RoaXNTZWdtZW50Owordm9pZCBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKCkKK3sKKyAgICBp
ZiAobV9wYWNrZXREZXNjcmlwdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgICAgIGF1dG8gc3RhdHVzID0gbV9yZWFkZXItPlJlYWQobnVtVG9SZWFkRnJvbVRoaXNT
ZWdtZW50LCAodWludDhfdCopYmxvY2tCdWZmZXJEYXRhLCAmbnVtQWN0dWFsbHlXcml0dGVuVG9U
aGlzU2VnbWVudCk7Ci0gICAgICAgICAgICBudW1Ub1JlYWQgLT0gbnVtQWN0dWFsbHlXcml0dGVu
VG9UaGlzU2VnbWVudDsKLSAgICAgICAgICAgICpieXRlc1JlbWFpbmluZyAtPSBudW1BY3R1YWxs
eVdyaXR0ZW5Ub1RoaXNTZWdtZW50OwotICAgICAgICAgICAgdHJhY2tEYXRhLT5jdXJyZW50Qmxv
Y2tCdWZmZXJQb3NpdGlvbiArPSBudW1BY3R1YWxseVdyaXR0ZW5Ub1RoaXNTZWdtZW50OworICAg
IEFTU0VSVCghbV9wYWNrZXREYXRhLmlzRW1wdHkoKSk7CiAKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBXZSBjYW4ndCB5ZXQgaGFuZGxlIHBhcnNpbmcgYSBGcmFtZSB0aGF0IGRvZXNuJ3QgaGF2ZSBh
bGwgaXRzIG1lbW9yeSBhdmFpbGFibGUuCi0gICAgICAgICAgICBpZiAoc3RhdHVzLmNvZGUgPT0g
d2VibTo6U3RhdHVzOjprT2tQYXJ0aWFsIHx8IHN0YXR1cy5jb2RlID09IHdlYm06OlN0YXR1czo6
a1dvdWxkQmxvY2spCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgfQor
ICAgIENNQmxvY2tCdWZmZXJSZWYgYmxvY2tCdWZmZXIgPSBudWxscHRyOworICAgIGF1dG8gZXJy
ID0gQ01CbG9ja0J1ZmZlckNyZWF0ZVdpdGhNZW1vcnlCbG9jayhrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBudWxscHRyLCBtX3BhY2tldERhdGEuc2l6ZUluQnl0ZXMoKSwga0NGQWxsb2NhdG9yRGVmYXVs
dCwgbnVsbHB0ciwgMCwgbV9wYWNrZXREYXRhLnNpemVJbkJ5dGVzKCksIGtDTUJsb2NrQnVmZmVy
QXNzdXJlTWVtb3J5Tm93RmxhZywgJmJsb2NrQnVmZmVyKTsKKyAgICBpZiAoZXJyKSB7CisgICAg
ICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQmxvY2tCdWZmZXJDcmVhdGVXaXRo
TWVtb3J5QmxvY2sgZmFpbGVkIHdpdGggJWQiLCBlcnIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGF1dG8gYnVmZmVyID0gYWRvcHRDRihibG9ja0J1ZmZlcik7CiAKLSAgICAgICAgaWYg
KG5vRXJyICE9IENNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlcih0cmFja0RhdGEtPmN1cnJlbnRC
bG9ja0J1ZmZlci5nZXQoKSwgMCwgJnNlZ21lbnRTaXplQXRQb3NpdGlvbiwgbnVsbHB0ciwgKGNo
YXIqKikmYmxvY2tCdWZmZXJEYXRhKSkKLSAgICAgICAgICAgIHJldHVybiBTa2lwKHJlYWRlciwg
Ynl0ZXNSZW1haW5pbmcpOwotCi0gICAgICAgIGF1dG8mIGhlYWRlclBhcnNlciA9IHRyYWNrRGF0
YS0+aGVhZGVyUGFyc2VyOwotICAgICAgICBpZiAoIWhlYWRlclBhcnNlci5QYXJzZVVuY29tcHJl
c3NlZEhlYWRlcihibG9ja0J1ZmZlckRhdGEsIHNlZ21lbnRTaXplQXRQb3NpdGlvbikpCi0gICAg
ICAgICAgICByZXR1cm4gU2tpcChyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLQotICAgICAgICAv
LyBPbmx5IHVwZGF0ZSB0aGUgZm9ybWF0IGRlc2NyaXB0aW9uIHdoZW4gdGhlIGhlYWRlciBpbmRp
Y2F0ZXMgdGhhdCB0aGUgc2FtcGxlIGlzCi0gICAgICAgIC8vIGEga2V5LWZyYW1lLCBvdGhlcndp
c2UgY29sb3IgaW5mb3JtYXRpb24gd2lsbCBub3QgYmUgcGFyc2VkLgotICAgICAgICBpZiAoaGVh
ZGVyUGFyc2VyLmtleSgpKQotICAgICAgICAgICAgdHJhY2tEYXRhLT5mb3JtYXREZXNjcmlwdGlv
biA9IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOUhlYWRlclBhcnNlcihoZWFkZXJQYXJz
ZXIsIHRyYWNrLnZpZGVvLnZhbHVlKCkuY29sb3VyKTsKLSAgICAgICAgaWYgKCF0cmFja0RhdGEt
PmZvcm1hdERlc2NyaXB0aW9uKQotICAgICAgICAgICAgcmV0dXJuIFNraXAocmVhZGVyLCBieXRl
c1JlbWFpbmluZyk7Ci0KLSAgICAgICAgYXV0byBwdHMgPSBDTVRpbWVNYWtlKGJsb2NrLT50aW1l
Y29kZSArIG1fY3VycmVudFRpbWVjb2RlLCBtX3RpbWVzY2FsZSk7Ci0gICAgICAgIENNU2FtcGxl
VGltaW5nSW5mbyB0aW1pbmcgPSB7IENNVGltZU1ha2UoZHVyYXRpb24sIG1fdGltZXNjYWxlKSwg
cHRzLCBwdHMgfTsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBtZXRhZGF0YS5zaXplOwotCi0gICAg
ICAgIGF1dG8gc2FtcGxlQ291bnQgPSBibG9jay0+bnVtX2ZyYW1lczsKLSAgICAgICAgQ01TYW1w
bGVCdWZmZXJSZWYgcmF3U2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKG5vRXJy
ICE9IENNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdHJhY2tE
YXRhLT5jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCksIHRyYWNrRGF0YS0+Zm9ybWF0RGVzY3JpcHRp
b24uZ2V0KCksIHNhbXBsZUNvdW50LCAxLCAmdGltaW5nLCAxLCAmc2l6ZSwgJnJhd1NhbXBsZUJ1
ZmZlcikpCi0gICAgICAgICAgICByZXR1cm4gU2tpcChyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsK
LSAgICAgICAgYXV0byBzYW1wbGVCdWZmZXIgPSBhZG9wdENGKHJhd1NhbXBsZUJ1ZmZlcik7Ci0K
LSAgICAgICAgdHJhY2tEYXRhLT5jdXJyZW50QmxvY2tCdWZmZXIgPSBudWxscHRyOwotICAgICAg
ICB0cmFja0RhdGEtPmN1cnJlbnRCbG9ja0J1ZmZlclBvc2l0aW9uID0gMDsKLQotICAgICAgICBp
ZiAoIWhlYWRlclBhcnNlci5rZXkoKSkgewotICAgICAgICAgICAgYXV0byBhdHRhY2htZW50c0Fy
cmF5ID0gQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5KHNhbXBsZUJ1ZmZl
ci5nZXQoKSwgdHJ1ZSk7Ci0gICAgICAgICAgICBBU1NFUlQoYXR0YWNobWVudHNBcnJheSk7Ci0g
ICAgICAgICAgICBpZiAoIWF0dGFjaG1lbnRzQXJyYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFNraXAocmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAgICAgICBmb3IgKENGSW5kZXgg
aSA9IDAsIGNvdW50ID0gQ0ZBcnJheUdldENvdW50KGF0dGFjaG1lbnRzQXJyYXkpOyBpIDwgY291
bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0YWNo
bWVudHMgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdl
dFZhbHVlQXRJbmRleChhdHRhY2htZW50c0FycmF5LCBpKSk7Ci0gICAgICAgICAgICAgICAgQ0ZE
aWN0aW9uYXJ5U2V0VmFsdWUoYXR0YWNobWVudHMsIGtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfTm90
U3luYywga0NGQm9vbGVhblRydWUpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgZXJy
ID0gQ01CbG9ja0J1ZmZlclJlcGxhY2VEYXRhQnl0ZXMobV9wYWNrZXREYXRhLmRhdGEoKSwgYnVm
ZmVyLmdldCgpLCAwLCBtX3BhY2tldERhdGEuc2l6ZUluQnl0ZXMoKSk7CisgICAgaWYgKGVycikg
eworICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUJsb2NrQnVmZmVyUmVw
bGFjZURhdGFCeXRlcyBmYWlsZWQgd2l0aCAlZCIsIGVycik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBDTVNhbXBsZUJ1ZmZlclJlZiByYXdTYW1wbGVCdWZmZXIgPSBudWxscHRyOwor
ICAgIGVyciA9IENNQXVkaW9TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeVdpdGhQYWNrZXREZXNjcmlw
dGlvbnMoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYnVmZmVyLmdldCgpLCBmb3JtYXREZXNjcmlwdGlv
bigpLmdldCgpLCBtX3BhY2tldERlc2NyaXB0aW9ucy5zaXplKCksIG1fc2FtcGxlUHJlc2VudGF0
aW9uVGltZSwgbV9wYWNrZXREZXNjcmlwdGlvbnMuZGF0YSgpLCAmcmF3U2FtcGxlQnVmZmVyKTsK
KyAgICBpZiAoZXJyKSB7CisgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNN
QXVkaW9TYW1wbGVCdWZmZXJDcmVhdGVXaXRoUGFja2V0RGVzY3JpcHRpb25zIGZhaWxlZCB3aXRo
ICVkIiwgZXJyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhdXRvIHNhbXBsZUJ1ZmZl
ciA9IGFkb3B0Q0YocmF3U2FtcGxlQnVmZmVyKTsKIAotICAgICAgICBhdXRvIHRyYWNrSUQgPSB0
cmFjay50cmFja191aWQudmFsdWUoKTsKKyAgICBtX3BhY2tldERhdGEuY2xlYXIoKTsKKyAgICBt
X3BhY2tldERlc2NyaXB0aW9ucy5jbGVhcigpOwogCi0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQo
W3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgc2FtcGxlQnVmZmVyID0gV1RG
TW92ZShzYW1wbGVCdWZmZXIpLCB0cmFja0lEXSAoKSBtdXRhYmxlIHsKLSAgICAgICAgICAgIGlm
ICghbV9kaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2spCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgYXV0byBtZWRpYVNhbXBsZSA9IE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3Jl
YXRlKHNhbXBsZUJ1ZmZlci5nZXQoKSwgdHJhY2tJRCk7Ci0gICAgICAgICAgICBtX2RpZFByb3Zp
ZGVNZWRpYURhdGFDYWxsYmFjayhXVEZNb3ZlKG1lZGlhU2FtcGxlKSwgdHJhY2tJRCwgZW1wdHlT
dHJpbmcoKSk7Ci0gICAgICAgIH0pOworICAgIGF1dG8gdHJhY2tJRCA9IHRyYWNrKCkudHJhY2tf
dWlkLnZhbHVlKCk7CisgICAgcGFyc2VyKCkucHJvdmlkZU1lZGlhRGF0YShzYW1wbGVCdWZmZXIu
bGVha1JlZigpLCB0cmFja0lEKTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpm
bHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMoKQoreworICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX3Ry
YWNrcykgeworICAgICAgICBpZiAodHJhY2stPnRyYWNrVHlwZSgpID09IFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OlRyYWNrRGF0YTo6VHlwZTo6QXVkaW8pCisgICAgICAgICAgICBkb3duY2FzdDxB
dWRpb1RyYWNrRGF0YT4odHJhY2suZ2V0KCkpLmNyZWF0ZVNhbXBsZUJ1ZmZlcigpOwogICAgIH0K
LSNlbmRpZgorfQogCi0gICAgcmV0dXJuIFNraXAocmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Cit2
b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldE1pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9u
KGZsb2F0IGR1cmF0aW9uKQoreworICAgIG1fbWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24gPSBk
dXJhdGlvbjsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5oCmluZGV4IDNhODQ2
NDU5YTNlYjM1NTM2MTIxMjk3NmM4ZWFkZTQ2M2Q2M2IxOTcuLmJjZjE2MjQxNDE5ZDUzYTQ1NzFi
ZGI1OTRmZTUwMzk3YzM0ZmNhM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKQEAg
LTI4LDYgKzI4LDggQEAKICNpZiBFTkFCTEUoTUVESUFfU09VUkNFKQogCiAjaW5jbHVkZSAiU291
cmNlQnVmZmVyUGFyc2VyLmgiCisjaW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+
CisjaW5jbHVkZSA8Q29yZU1lZGlhL0NNVGltZS5oPgogI2luY2x1ZGUgPGNvbW1vbi92cDlfaGVh
ZGVyX3BhcnNlci5oPgogI2luY2x1ZGUgPHdlYm0vY2FsbGJhY2suaD4KICNpbmNsdWRlIDx3ZWJt
L3N0YXR1cy5oPgpAQCAtNDEsNyArNDMsNiBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogI2luY2x1ZGUgPHd0Zi90aHJlYWRzL0JpbmFyeVNlbWFwaG9yZS5oPgogCi10eXBlZGVm
IHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlciAqQ01TYW1wbGVCdWZmZXJSZWY7CiB0eXBlZGVm
IGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uKiBDTUZvcm1hdERlc2NyaXB0
aW9uUmVmOwogdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQ01CbG9ja0J1ZmZlciAqQ01CbG9ja0J1ZmZl
clJlZjsKIApAQCAtNTEsMTAgKzUyLDE1IEBAIGNsYXNzIFdlYm1QYXJzZXI7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgTWVkaWFTYW1wbGVBVkZPYmpDOworCiBjbGFzcyBXRUJDT1JF
X0VYUE9SVCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNIDogcHVibGljIFNvdXJjZUJ1ZmZlclBhcnNl
ciwgcHJpdmF0ZSB3ZWJtOjpDYWxsYmFjayB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CisgICAgY2xhc3MgU3RyZWFtaW5nVmVjdG9yUmVhZGVyOworCiAgICAgc3RhdGlj
IE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBpc0NvbnRlbnRUeXBlU3VwcG9ydGVkKGNv
bnN0IENvbnRlbnRUeXBlJik7CisgICAgc3RhdGljIFJlZlB0cjxTb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNPiBjcmVhdGUoY29uc3QgQ29udGVudFR5cGUmKTsKIAogICAgIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk0oKTsKICAgICB+U291cmNlQnVmZmVyUGFyc2VyV2ViTSgpOwpAQCAtNzEsOSArNzcsMTIg
QEAgcHVibGljOgogICAgIHZvaWQgcmVzZXRQYXJzZXJTdGF0ZSgpIGZpbmFsOwogICAgIHZvaWQg
aW52YWxpZGF0ZSgpIGZpbmFsOwogCi0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgdm9p
ZCBmbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMoKTsKKyAgICB2b2lkIHNldE1pbmltdW1BdWRpb1Nh
bXBsZUR1cmF0aW9uKGZsb2F0KTsKKwogICAgIHZvaWQgc2V0TG9nZ2VyKGNvbnN0IFdURjo6TG9n
Z2VyJiwgY29uc3Qgdm9pZCogaWRlbnRpZmllcikgZmluYWw7Ci0jZW5kaWYKKworICAgIHZvaWQg
cHJvdmlkZU1lZGlhRGF0YShSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+LCB1aW50NjRfdCk7
CiAKICAgICBlbnVtIGNsYXNzIEVycm9yQ29kZSA6IGludDMyX3QgewogICAgICAgICBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNRXJyb3JDb2RlU3RhcnQgPSAyMDAwLApAQCAtOTUsMjAgKzEwNCwxMTkg
QEAgcHVibGljOgogICAgICAgICBSZWFkaW5nQ2x1c3RlciwKICAgICB9OwogCi1wcml2YXRlOgot
ICAgIHN0cnVjdCBUcmFja0RhdGEgewotICAgICAgICB3ZWJtOjpUcmFja0VudHJ5IHRyYWNrOwot
ICAgICAgICB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXIgaGVhZGVyUGFyc2VyOwotICAgICAg
ICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gZm9ybWF0RGVzY3JpcHRpb247Ci0g
ICAgICAgIFJldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVmPiBjdXJyZW50QmxvY2tCdWZmZXI7Ci0g
ICAgICAgIHVpbnQ2NF90IGN1cnJlbnRCbG9ja0J1ZmZlclBvc2l0aW9uIHsgMCB9OworICAgIGVu
dW0gY2xhc3MgQ29kZWNUeXBlIDogdWludDhfdCB7CisgICAgICAgIFVuc3VwcG9ydGVkLAorICAg
ICAgICBWUDksCisgICAgICAgIFZvcmJpcywKKyAgICAgICAgT3B1cywKKyAgICB9OworCisgICAg
Y2xhc3MgVHJhY2tEYXRhIHsKKyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAg
cHVibGljOgorICAgICAgICBzdGF0aWMgYXV0byBjcmVhdGUoQ29kZWNUeXBlIGNvZGVjVHlwZSwg
Y29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgU291cmNlQnVmZmVyUGFyc2VyV2Vi
TSYgcGFyc2VyKSAtPiBVbmlxdWVSZWY8VHJhY2tEYXRhPgorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxUcmFja0RhdGE+KGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwg
VHlwZTo6VW5rbm93biwgcGFyc2VyKTsKKyAgICAgICAgfQorCisgICAgICAgIGVudW0gY2xhc3Mg
VHlwZSB7CisgICAgICAgICAgICBVbmtub3duLAorICAgICAgICAgICAgQXVkaW8sCisgICAgICAg
ICAgICBWaWRlbywKKyAgICAgICAgfTsKKworICAgICAgICBUcmFja0RhdGEoQ29kZWNUeXBlIGNv
ZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgVHlwZSB0cmFja1R5
cGUsIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIHBhcnNlcikKKyAgICAgICAgICAgIDogbV9jb2Rl
YyB7IGNvZGVjVHlwZSB9CisgICAgICAgICAgICAsIG1fdHJhY2sgeyB3ZWJtOjpUcmFja0VudHJ5
IHsgdHJhY2tFbnRyeSB9IH0KKyAgICAgICAgICAgICwgbV90cmFja1R5cGUgeyB0cmFja1R5cGUg
fQorICAgICAgICAgICAgLCBtX3BhcnNlciB7IHBhcnNlciB9CisgICAgICAgIHsKKyAgICAgICAg
fQorICAgICAgICB2aXJ0dWFsIH5UcmFja0RhdGEoKSA9IGRlZmF1bHQ7CisKKyAgICAgICAgQ29k
ZWNUeXBlIGNvZGVjKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlYzsgfQorICAgICAgICB3ZWJtOjpU
cmFja0VudHJ5JiB0cmFjaygpIHsgcmV0dXJuIG1fdHJhY2s7IH0KKyAgICAgICAgVHlwZSB0cmFj
a1R5cGUoKSBjb25zdCB7IHJldHVybiBtX3RyYWNrVHlwZTsgfQorCisgICAgICAgIFJldGFpblB0
cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBmb3JtYXREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1f
Zm9ybWF0RGVzY3JpcHRpb247IH0KKyAgICAgICAgdm9pZCBzZXRGb3JtYXREZXNjcmlwdGlvbihS
ZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4mJiBkZXNjcmlwdGlvbikgeyBtX2Zvcm1h
dERlc2NyaXB0aW9uID0gV1RGTW92ZShkZXNjcmlwdGlvbik7IH0KKworICAgICAgICBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIoKSBjb25zdCB7IHJldHVybiBtX3BhcnNlcjsgfQorICAg
ICAgICAKKyAgICAgICAgdmlydHVhbCB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJt
OjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqLCBjb25zdCBD
TVRpbWUmLCBpbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgcmV0dXJuIHdlYm06OlN0YXR1cyh3ZWJtOjpTdGF0dXM6OmtJbnZhbGlk
RWxlbWVudElkKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ29kZWNUeXBl
IG1fY29kZWM7CisgICAgICAgIHdlYm06OlRyYWNrRW50cnkgbV90cmFjazsKKyAgICAgICAgVHlw
ZSBtX3RyYWNrVHlwZTsKKyAgICAgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+
IG1fZm9ybWF0RGVzY3JpcHRpb247CisgICAgICAgIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIG1f
cGFyc2VyOworICAgIH07CisKKyAgICBjbGFzcyBWaWRlb1RyYWNrRGF0YSA6IHB1YmxpYyBUcmFj
a0RhdGEgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIGF1dG8gY3JlYXRlKENvZGVjVHlw
ZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk0mIHBhcnNlcikgLT4gVW5pcXVlUmVmPFZpZGVvVHJhY2tEYXRhPgorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxWaWRlb1RyYWNrRGF0YT4o
Y29kZWNUeXBlLCB0cmFja0VudHJ5LCBwYXJzZXIpOworICAgICAgICB9CisKKyAgICAgICAgVmlk
ZW9UcmFja0RhdGEoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYg
dHJhY2tFbnRyeSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2VyKQorICAgICAgICAgICAg
OiBUcmFja0RhdGEoY29kZWNUeXBlLCB0cmFja0VudHJ5LCBUeXBlOjpWaWRlbywgcGFyc2VyKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1l
RGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3Qq
LCBjb25zdCBDTVRpbWUmLCBpbnQpIGZpbmFsOworICAgICAgICAKKyAgICBwcml2YXRlOgorICAg
ICAgICB2b2lkIGNyZWF0ZVNhbXBsZUJ1ZmZlcihjb25zdCBDTVRpbWUmLCBpbnQpOworICAgICAg
ICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCB7IHJldHVybiAiVmlkZW9UcmFja0Rh
dGEiOyB9CisKKyAgICAgICAgdnA5X3BhcnNlcjo6VnA5SGVhZGVyUGFyc2VyIG1faGVhZGVyUGFy
c2VyOworICAgICAgICBSZXRhaW5QdHI8Q01CbG9ja0J1ZmZlclJlZj4gbV9jdXJyZW50QmxvY2tC
dWZmZXI7CisgICAgICAgIHVpbnQ2NF90IG1fY3VycmVudEJsb2NrQnVmZmVyUG9zaXRpb24geyAw
IH07CisgICAgfTsKKworICAgIGNsYXNzIEF1ZGlvVHJhY2tEYXRhIDogcHVibGljIFRyYWNrRGF0
YSB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgYXV0byBjcmVhdGUoQ29kZWNUeXBlIGNv
ZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgU291cmNlQnVmZmVy
UGFyc2VyV2ViTSYgcGFyc2VyLCBmbG9hdCBtaW5pbXVtU2FtcGxlRHVyYXRpb24pIC0+IFVuaXF1
ZVJlZjxBdWRpb1RyYWNrRGF0YT4KKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmlxdWVSZWY8QXVkaW9UcmFja0RhdGE+KGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwgcGFyc2VyLCBt
aW5pbXVtU2FtcGxlRHVyYXRpb24pOworICAgICAgICB9CisKKyAgICAgICAgQXVkaW9UcmFja0Rh
dGEoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRy
eSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2VyLCBmbG9hdCBtaW5pbXVtU2FtcGxlRHVy
YXRpb24pCisgICAgICAgICAgICA6IFRyYWNrRGF0YSB7IGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwg
VHlwZTo6QXVkaW8sIHBhcnNlciB9CisgICAgICAgICAgICAsIG1fbWluaW11bVNhbXBsZUR1cmF0
aW9uIHsgbWluaW11bVNhbXBsZUR1cmF0aW9uIH0KKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgd2VibTo6U3RhdHVzIGNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qg
d2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90KiwgY29uc3QgQ01UaW1lJiwgaW50KSBmaW5h
bDsKKyAgICAgICAgdm9pZCBjcmVhdGVTYW1wbGVCdWZmZXIoKTsKKworICAgIHByaXZhdGU6Cisg
ICAgICAgIGNvbnN0IGNoYXIqIGxvZ0NsYXNzTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJBdWRpb1Ry
YWNrRGF0YSI7IH0KKworICAgICAgICBDTVRpbWUgbV9zYW1wbGVQcmVzZW50YXRpb25UaW1lOwor
ICAgICAgICBDTVRpbWUgbV9wYWNrZXREdXJhdGlvbjsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+
IG1fcGFja2V0RGF0YTsKKyAgICAgICAgc2l6ZV90IG1fcGFja2V0Qnl0ZXNSZWFkIHsgMCB9Owor
ICAgICAgICBzaXplX3QgbV9ieXRlT2Zmc2V0IHsgMCB9OworICAgICAgICBWZWN0b3I8QXVkaW9T
dHJlYW1QYWNrZXREZXNjcmlwdGlvbj4gbV9wYWNrZXREZXNjcmlwdGlvbnM7CisKKyAgICAgICAg
Ly8gRklYTUU6IDAuNSAtIDEuMCBzZWNvbmRzIGlzIGEgYmV0dGVyIGR1cmF0aW9uIHBlciBzYW1w
bGUgYnVmZmVyLCBidXQgdXNlIDIgc2Vjb25kcyBzbyBhdCBsZWFzdCB0aGUgZmlyc3QKKyAgICAg
ICAgLy8gc2FtcGxlIGJ1ZmZlciB3aWxsIHBsYXkgdW50aWwgd2UgZml4IFNhbXBsZUN1cnNvcjo6
Y3JlYXRlU2FtcGxlQnVmZmVyIHRvIGRlYWwgd2l0aCBgZW5kQ3Vyc29yYC4KKyAgICAgICAgZmxv
YXQgbV9taW5pbXVtU2FtcGxlRHVyYXRpb24geyAyIH07CiAgICAgfTsKLSAgICBUcmFja0RhdGEq
IHRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHVpbnQ2NF90KTsKIAotI2lmICFSRUxFQVNFX0xPR19E
SVNBQkxFRAogICAgIGNvbnN0IFdURjo6TG9nZ2VyKiBsb2dnZXJQdHIoKSBjb25zdCB7IHJldHVy
biBtX2xvZ2dlci5nZXQoKTsgfQogICAgIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25z
dCB7IHJldHVybiBtX2xvZ0lkZW50aWZpZXI7IH0KLSNlbmRpZgorCitwcml2YXRlOgorCisgICAg
VHJhY2tEYXRhKiB0cmFja0RhdGFGb3JUcmFja051bWJlcih1aW50NjRfdCk7CiAKICAgICAvLyB3
ZWJtOjpDYWxsYmFjawogICAgIHdlYm06OlN0YXR1cyBPbkVsZW1lbnRCZWdpbihjb25zdCB3ZWJt
OjpFbGVtZW50TWV0YWRhdGEmLCB3ZWJtOjpBY3Rpb24qKSBmaW5hbDsKQEAgLTEzNSwyMCArMjQz
LDE4IEBAIHByaXZhdGU6CiAKICAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6Ok5vbmUgfTsKIAot
ICAgIGNsYXNzIFN0cmVhbWluZ1ZlY3RvclJlYWRlcjsKICAgICBVbmlxdWVSZWY8U3RyZWFtaW5n
VmVjdG9yUmVhZGVyPiBtX3JlYWRlcjsKIAotICAgIFZlY3RvcjxUcmFja0RhdGE+IG1fdHJhY2tz
OworICAgIFZlY3RvcjxVbmlxdWVSZWY8VHJhY2tEYXRhPj4gbV90cmFja3M7CiAgICAgdXNpbmcg
QmxvY2tWYXJpYW50ID0gVmFyaWFudDx3ZWJtOjpCbG9jaywgd2VibTo6U2ltcGxlQmxvY2s+Owog
ICAgIE9wdGlvbmFsPEJsb2NrVmFyaWFudD4gbV9jdXJyZW50QmxvY2s7CiAgICAgT3B0aW9uYWw8
dWludDY0X3Q+IG1fcmV3aW5kVG9Qb3NpdGlvbjsKKyAgICBmbG9hdCBtX21pbmltdW1BdWRpb1Nh
bXBsZUR1cmF0aW9uIHsgMiB9OwogCiAgICAgQm94PEJpbmFyeVNlbWFwaG9yZT4gbV9pbml0aWFs
aXphdGlvblNlZ21lbnRJc0hhbmRsZWRTZW1hcGhvcmU7CiAKLSNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKICAgICBSZWZQdHI8Y29uc3QgV1RGOjpMb2dnZXI+IG1fbG9nZ2VyOwogICAgIGNvbnN0
IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxwdHIgfTsKLSNlbmRpZgogfTsKIAogfQpAQCAt
MTU3LDQgKzI2MywxMiBAQCBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNv
dXJjZUJ1ZmZlclBhcnNlcldlYk0pCiAgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlciYgcGFyc2VyKSB7IHJldHVybiBwYXJzZXIudHlwZSgpID09
IFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcjo6VHlwZTo6V2ViTTsgfQogU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19FTkQoKQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhKQorICAgIHN0YXRpYyBib29s
IGlzVHlwZShjb25zdCBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGEm
IHRyYWNrRGF0YSkgeyByZXR1cm4gdHJhY2tEYXRhLnRyYWNrVHlwZSgpID09IFdlYkNvcmU6OlNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6VHlwZTo6VmlkZW87IH0KK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRU5EKCkKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YSkKKyAgICBzdGF0aWMg
Ym9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tE
YXRhJiB0cmFja0RhdGEpIHsgcmV0dXJuIHRyYWNrRGF0YS50cmFja1R5cGUoKSA9PSBXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OlR5cGU6OkF1ZGlvOyB9CitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU09VUkNF
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5
VXRpbGl0aWVzQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L1ZQOVV0aWxpdGllc0NvY29hLmgKaW5kZXggMTRjNmYzYWU5ODQzMGFhZWMyYjhlODIyYjFmYjUx
YjQ3NThhYTkzMC4uNWNjZDM1Nzc5MzE0NDk5ZTc2NDA1OGYyNDI4ZDJhNmZlYjUwM2U0NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0
aWVzQ29jb2EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9W
UDlVdGlsaXRpZXNDb2NvYS5oCkBAIC0yOCw2ICsyOCwxMyBAQAogI2lmIEVOQUJMRShWUDkpICYm
IFBMQVRGT1JNKENPQ09BKQogCiAjaW5jbHVkZSAiVlA5VXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8
d2VibS9kb21fdHlwZXMuaD4KKwordHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXRE
ZXNjcmlwdGlvbiogQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsKKworbmFtZXNwYWNlIHZwOV9wYXJz
ZXIgeworY2xhc3MgVnA5SGVhZGVyUGFyc2VyOworfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTQ0LDYgKzUxLDggQEAgZXh0ZXJuIGJvb2wgaXNWUDlEZWNvZGVyQXZhaWxhYmxlKCk7CiBl
eHRlcm4gYm9vbCBpc1ZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkU3VwcG9ydGVkKFZQQ29kZWND
b25maWd1cmF0aW9uUmVjb3JkJik7CiBleHRlcm4gYm9vbCB2YWxpZGF0ZVZQUGFyYW1ldGVycyhW
UENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYsIE1lZGlhQ2FwYWJpbGl0aWVzSW5mbyYsIGNvbnN0
IFZpZGVvQ29uZmlndXJhdGlvbiYpOwogCitSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJl
Zj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5SGVhZGVyUGFyc2VyKGNvbnN0IHZwOV9w
YXJzZXI6OlZwOUhlYWRlclBhcnNlciYsIGNvbnN0IHdlYm06OkVsZW1lbnQ8d2VibTo6Q29sb3Vy
PiYpOworCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbQppbmRleCBjODFlOTdhYTNl
NDc3ZDdjN2I4OWMxNjE5YTlmM2ZmMmYyYmVjMGExLi40MTIyNTBmOTc0N2E4OTkyNmFlZTViOTI4
MWYxYTQxM2JjMmU4YzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbQpAQCAtMjMsOCArMjMsOCBA
QAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJWUDlVdGlsaXRpZXNDb2NvYS5oIgorI2ltcG9ydCAiY29uZmln
LmgiCisjaW1wb3J0ICJWUDlVdGlsaXRpZXNDb2NvYS5oIgogCiAjaWYgRU5BQkxFKFZQOSkgJiYg
UExBVEZPUk0oQ09DT0EpCiAKQEAgLTM2LDEzICszNiwyMCBAQAogI2ltcG9ydCAiU3lzdGVtQmF0
dGVyeS5oIgogI2ltcG9ydCAiVmlkZW9Db25maWd1cmF0aW9uLmgiCiAjaW1wb3J0IDxDb3JlTWVk
aWEvQ01Gb3JtYXREZXNjcmlwdGlvbi5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvRGF0YVZp
ZXcuaD4KKyNpbXBvcnQgPGNvbW1vbi92cDlfaGVhZGVyX3BhcnNlci5oPgogI2ltcG9ydCA8d3Rm
L3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgogCiAjaW1wb3J0IDxwYWwvY29jb2Ev
QVZGb3VuZGF0aW9uU29mdExpbmsuaD4KKyNpbXBvcnQgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGlu
ay5oPgorI2ltcG9ydCAiQ29yZVZpZGVvU29mdExpbmsuaCIKICNpbXBvcnQgIlZpZGVvVG9vbGJv
eFNvZnRMaW5rLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordXNpbmcgbmFtZXNwYWNlIFBB
TDsKK3VzaW5nIG5hbWVzcGFjZSB3ZWJtOworCiBzdGF0aWMgYm9vbCBoYXJkd2FyZVZQOURlY29k
ZXJEaXNhYmxlZEZvclRlc3RpbmcgeyBmYWxzZSB9OwogCiBzdHJ1Y3QgT3ZlcnJpZGVTY3JlZW5E
YXRhIHsKQEAgLTI1Nyw2ICsyNjQsMjg4IEBAIGJvb2wgdmFsaWRhdGVWUFBhcmFtZXRlcnMoVlBD
b2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmIGNvZGVjQ29uZmlndXJhdGlvbiwgTWVkaWFDCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyB1aW50OF90IGNvbnZlcnRUb0NvbG9yUHJpbWFyaWVz
KGNvbnN0IFByaW1hcmllcyYgY29lZmZpY2llbnRzKQoreworICAgIHN3aXRjaCAoY29lZmZpY2ll
bnRzKSB7CisgICAgY2FzZSBQcmltYXJpZXM6OmtCdDcwOToKKyAgICAgICAgcmV0dXJuIFZQQ29u
ZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF83MDlfNjsKKyAgICBjYXNlIFByaW1hcmllczo6
a1Vuc3BlY2lmaWVkOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJp
ZXM6OlVuc3BlY2lmaWVkOworICAgIGNhc2UgUHJpbWFyaWVzOjprQnQ0NzBNOgorICAgICAgICBy
ZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzQ3MF82X007CisgICAgY2Fz
ZSBQcmltYXJpZXM6OmtCdDQ3MEJnOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29s
b3JQcmltYXJpZXM6OkJUXzQ3MF83X0JHOworICAgIGNhc2UgUHJpbWFyaWVzOjprU21wdGUxNzBN
OgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzYwMV83
OworICAgIGNhc2UgUHJpbWFyaWVzOjprU21wdGUyNDBNOgorICAgICAgICByZXR1cm4gVlBDb25m
aWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NUXzI0MDsKKyAgICBjYXNlIFByaW1hcmll
czo6a0ZpbG06CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6
RmlsbTsKKyAgICBjYXNlIFByaW1hcmllczo6a0J0MjAyMDoKKyAgICAgICAgcmV0dXJuIFZQQ29u
ZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF8yMDIwX05vbmNvbnN0YW50X0x1bWluYW5jZTsK
KyAgICBjYXNlIFByaW1hcmllczo6a1NtcHRlU3Q0MjgxOgorICAgICAgICByZXR1cm4gVlBDb25m
aWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NUXzQyOF8xOworICAgIGNhc2UgUHJpbWFy
aWVzOjprU21wdGVScDQzMToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJp
bWFyaWVzOjpTTVBURV9SUF80MzFfMjsKKyAgICBjYXNlIFByaW1hcmllczo6a1NtcHRlRWc0MzI6
CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfRUdf
NDMyXzE7CisgICAgY2FzZSBQcmltYXJpZXM6OmtKZWRlY1AyMlBob3NwaG9yczoKKyAgICAgICAg
cmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpFQlVfVGVjaF8zMjEzX0U7Cisg
ICAgfQorfQorCitzdGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRvQ01Db2xvclByaW1hcmllcyh1
aW50OF90IHByaW1hcmllcykKK3sKKyAgICBzd2l0Y2ggKHByaW1hcmllcykgeworICAgIGNhc2Ug
VlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzcwOV82OgorICAgICAgICByZXR1cm4g
a0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19JVFVfUl83MDlfMjsKKyAgICBjYXNlIFZQQ29u
ZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpFQlVfVGVjaF8zMjEzX0U6CisgICAgICAgIHJldHVy
biBrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzX0VCVV8zMjEzOworICAgIGNhc2UgVlBDb25m
aWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzYwMV83OgorICAgIGNhc2UgVlBDb25maWd1cmF0
aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NUXzI0MDoKKyAgICAgICAgcmV0dXJuIGtDVkltYWdl
QnVmZmVyQ29sb3JQcmltYXJpZXNfU01QVEVfQzsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNv
bG9yUHJpbWFyaWVzOjpTTVBURV9SUF80MzFfMjoKKyAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERl
c2NyaXB0aW9uQ29sb3JQcmltYXJpZXNfRENJX1AzOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9u
Q29sb3JQcmltYXJpZXM6OlNNUFRFX0VHXzQzMl8xOgorICAgICAgICByZXR1cm4ga0NNRm9ybWF0
RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19QM19ENjU7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRp
b25Db2xvclByaW1hcmllczo6QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U6CisgICAgICAg
IHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX0lUVV9SXzIwMjA7Cisg
ICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyB1aW50OF90IGNvbnZlcnRU
b1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKGNvbnN0IFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzJiBj
aGFyYWN0ZXJpc3RpY3MpCit7CisgICAgc3dpdGNoIChjaGFyYWN0ZXJpc3RpY3MpIHsKKyAgICBj
YXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprQnQ3MDk6CisgICAgICAgIHJldHVybiBWUENv
bmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfNzA5XzY7CisgICAgY2FzZSBU
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a1Vuc3BlY2lmaWVkOgorICAgICAgICByZXR1cm4gVlBD
b25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlVuc3BlY2lmaWVkOworICAgIGNh
c2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtHYW1tYTIyY3VydmU6CisgICAgICAgIHJldHVy
biBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfNDcwXzZfTTsKKyAg
ICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprR2FtbWEyOGN1cnZlOgorICAgICAgICBy
ZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzQ3MF83X0JH
OworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtTbXB0ZTE3ME06CisgICAgICAg
IHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfNjAxXzc7
CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a1NtcHRlMjQwTToKKyAgICAgICAg
cmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF8y
NDA7CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0xpbmVhcjoKKyAgICAgICAg
cmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMaW5lYXI7Cisg
ICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0xvZzoKKyAgICAgICAgcmV0dXJuIFZQ
Q29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMb2dyaXRobWljOworICAgIGNh
c2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtMb2dTcXJ0OgorICAgICAgICByZXR1cm4gVlBD
b25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxvZ3JpdGhtaWNfU3FydDsKKyAg
ICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprSWVjNjE5NjYyNDoKKyAgICAgICAgcmV0
dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJRUNfNjE5NjZfMl80
OworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtCdDEzNjFFeHRlbmRlZENvbG91
ckdhbXV0OgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OkJUXzEzNjFfMDsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprSWVj
NjE5NjYyMToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVy
aXN0aWNzOjpJRUNfNjE5NjZfMl8xOworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OmsxMEJpdEJ0MjAyMDoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzOjpCVF8yMDIwXzEwYml0OworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OmsxMkJpdEJ0MjAyMDoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMDIwXzEyYml0OworICAgIGNhc2UgVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OmtTbXB0ZVN0MjA4NDoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlv
blRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF8yMDg0OworICAgIGNhc2UgVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OmtTbXB0ZVN0NDI4MToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmln
dXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF80MjhfMTsKKyAgICBjYXNl
IFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprQXJpYlN0ZEI2N0hsZzoKKyAgICAgICAgcmV0dXJu
IFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMTAwX0hMRzsKKyAg
ICB9Cit9CisKK3N0YXRpYyBDRlN0cmluZ1JlZiBjb252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24o
dWludDhfdCBjaGFyYWN0ZXJpc3RpY3MpCit7CisgICAgc3dpdGNoIChjaGFyYWN0ZXJpc3RpY3Mp
IHsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF83
MDlfNjoKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbl9JVFVf
Ul83MDlfMjsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
OjpTTVBURV9TVF8yNDA6CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlclRyYW5zZmVyRnVu
Y3Rpb25fU01QVEVfMjQwTV8xOTk1OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJD
aGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzIwODQ6CisgICAgICAgIHJldHVybiBrQ01Gb3JtYXRE
ZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fU01QVEVfU1RfMjA4NF9QUTsKKyAgICBjYXNlIFZQ
Q29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMDIwXzEwYml0OgorICAg
IGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTJi
aXQ6CisgICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25f
SVRVX1JfMjAyMDsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjpTTVBURV9TVF80MjhfMToKKyAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9u
VHJhbnNmZXJGdW5jdGlvbl9TTVBURV9TVF80MjhfMTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlv
blRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMTAwX0hMRzoKKyAgICAgICAgcmV0dXJuIGtD
TUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl8yMTAwX0hMRzsKKyAgICBj
YXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJRUNfNjE5NjZfMl8x
OgorICAgICAgICByZXR1cm4gY2FuTG9hZF9Db3JlTWVkaWFfa0NNRm9ybWF0RGVzY3JpcHRpb25U
cmFuc2ZlckZ1bmN0aW9uX3NSR0IoKSA/IFBBTDo6Z2V0X0NvcmVNZWRpYV9rQ01Gb3JtYXREZXNj
cmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fc1JHQigpIDogbnVsbHB0cjsKKyAgICBjYXNlIFZQQ29u
ZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMaW5lYXI6CisgICAgICAgIHJldHVy
biBrQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fTGluZWFyOworICAgIH0KKwor
ICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgdWludDhfdCBjb252ZXJ0VG9NYXRyaXhD
b2VmZmljaWVudHMoY29uc3QgTWF0cml4Q29lZmZpY2llbnRzJiBjb2VmZmljaWVudHMpCit7Cisg
ICAgc3dpdGNoIChjb2VmZmljaWVudHMpIHsKKyAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6
a1JnYjoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6
SWRlbnRpdHk7CisgICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtCdDcwOToKKyAgICAgICAg
cmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfNzA5XzY7CisgICAg
Y2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtVbnNwZWNpZmllZDoKKyAgICAgICAgcmV0dXJuIFZQ
Q29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6VW5zcGVjaWZpZWQ7CisgICAgY2FzZSBN
YXRyaXhDb2VmZmljaWVudHM6OmtGY2M6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25N
YXRyaXhDb2VmZmljaWVudHM6OkZDQzsKKyAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a0J0
NDcwQmc6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6
OkJUXzQ3MF83X0JHOworICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprU21wdGUxNzBNOgor
ICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF82MDFf
NzsKKyAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a1NtcHRlMjQwTToKKyAgICAgICAgcmV0
dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6U01QVEVfU1RfMjQwOworICAg
IGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprWUNnQ286CisgICAgICAgIHJldHVybiBWUENvbmZp
Z3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OllDZ0NvOworICAgIGNhc2UgTWF0cml4Q29lZmZp
Y2llbnRzOjprQnQyMDIwTm9uY29uc3RhbnRMdW1pbmFuY2U6CisgICAgICAgIHJldHVybiBWUENv
bmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzIwMjBfTm9uY29uc3RhbnRfTHVtaW5h
bmNlOworICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprQnQyMDIwQ29uc3RhbnRMdW1pbmFu
Y2U6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJU
XzIwMjBfQ29uc3RhbnRfTHVtaW5hbmNlOworICAgIH0KK30KKworc3RhdGljIENGU3RyaW5nUmVm
IGNvbnZlcnRUb0NNWUNiQ1JNYXRyaXgodWludDhfdCBjb2VmZmljaWVudHMpCit7CisgICAgc3dp
dGNoIChjb2VmZmljaWVudHMpIHsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZm
aWNpZW50czo6QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U6CisgICAgICAgIHJldHVybiBr
Q01Gb3JtYXREZXNjcmlwdGlvbllDYkNyTWF0cml4X0lUVV9SXzIwMjA7CisgICAgY2FzZSBWUENv
bmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzQ3MF83X0JHOgorICAgIGNhc2UgVlBD
b25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF82MDFfNzoKKyAgICAgICAgcmV0dXJu
IGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNjAxXzQ7CisgICAgY2FzZSBWUENvbmZp
Z3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzcwOV82OgorICAgICAgICByZXR1cm4ga0NW
SW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlfMjsKKyAgICBjYXNlIFZQQ29uZmlndXJh
dGlvbk1hdHJpeENvZWZmaWNpZW50czo6U01QVEVfU1RfMjQwOgorICAgICAgICByZXR1cm4ga0NW
SW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9TTVBURV8yNDBNXzE5OTU7CisgICAgfQorCisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyB1aW50OF90IGNvbnZlcnRTdWJzYW1wbGluZ1hZVG9D
aHJvbWFTdWJzYW1wbGluZyh1aW50NjRfdCB4LCB1aW50NjRfdCB5KQoreworICAgIGlmICh4ICYg
eSkKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNocm9tYVN1YnNhbXBsaW5nOjpTdWJz
YW1wbGluZ180MjBfQ29sb2NhdGVkOworICAgIGlmICh4ICYgIXkpCisgICAgICAgIHJldHVybiBW
UENvbmZpZ3VyYXRpb25DaHJvbWFTdWJzYW1wbGluZzo6U3Vic2FtcGxpbmdfNDIyOworICAgIGlm
ICgheCAmICF5KQorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ2hyb21hU3Vic2FtcGxp
bmc6OlN1YnNhbXBsaW5nXzQ0NDsKKyAgICAvLyBUaGlzIGluZGljYXRlcyA0OjQ6MCBzdWJzYW1w
bGluZywgd2hpY2ggaXMgbm90IGV4cHJlc3NhYmxlIGluIHRoZSAndnBjQycgYm94LiBEZWZhdWx0
IHRvIDQ6MjowLgorICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25DaHJvbWFTdWJzYW1wbGluZzo6
U3Vic2FtcGxpbmdfNDIwX0NvbG9jYXRlZDsKK30KKworUmV0YWluUHRyPENNRm9ybWF0RGVzY3Jp
cHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOUhlYWRlclBhcnNlcihjb25z
dCB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXImIHBhcnNlciwgY29uc3Qgd2VibTo6RWxlbWVu
dDxDb2xvdXI+JiBjb2xvcikKK3sKKyAgICAvLyBSZWY6ICJWUCBDb2RlYyBJU08gTWVkaWEgRmls
ZSBGb3JtYXQgQmluZGluZywgdjEuMCwgMjAxNy0wMy0zMSIKKyAgICAvLyA8aHR0cHM6Ly93d3cu
d2VibXByb2plY3Qub3JnL3ZwOS9tcDQvPgorICAgIC8vCisgICAgLy8gY2xhc3MgVlBDb2RlY0Nv
bmZpZ3VyYXRpb25Cb3ggZXh0ZW5kcyBGdWxsQm94KCd2cGNDJywgdmVyc2lvbiA9IDEsIDApCisg
ICAgLy8geworICAgIC8vICAgICBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCgpIHZwY0NvbmZp
ZzsKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBhbGlnbmVkICg4KSBjbGFzcyBWUENvZGVjQ29u
ZmlndXJhdGlvblJlY29yZCB7CisgICAgLy8gICAgIHVuc2lnbmVkIGludCAoOCkgICAgIHByb2Zp
bGU7CisgICAgLy8gICAgIHVuc2lnbmVkIGludCAoOCkgICAgIGxldmVsOworICAgIC8vICAgICB1
bnNpZ25lZCBpbnQgKDQpICAgICBiaXREZXB0aDsKKyAgICAvLyAgICAgdW5zaWduZWQgaW50ICgz
KSAgICAgY2hyb21hU3Vic2FtcGxpbmc7CisgICAgLy8gICAgIHVuc2lnbmVkIGludCAoMSkgICAg
IHZpZGVvRnVsbFJhbmdlRmxhZzsKKyAgICAvLyAgICAgdW5zaWduZWQgaW50ICg4KSAgICAgY29s
b3VyUHJpbWFyaWVzOworICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDgpICAgICB0cmFuc2ZlckNo
YXJhY3RlcmlzdGljczsKKyAgICAvLyAgICAgdW5zaWduZWQgaW50ICg4KSAgICAgbWF0cml4Q29l
ZmZpY2llbnRzOworICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDE2KSAgICBjb2RlY0ludGlhbGl6
YXRpb25EYXRhU2l6ZTsKKyAgICAvLyAgICAgdW5zaWduZWQgaW50ICg4KVtdICAgY29kZWNJbnRp
YWxpemF0aW9uRGF0YTsKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBjb2RlY0ludGlhbGl6YXRp
b25EYXRhU2l6ZeKAi0ZvciBWUDggYW5kIFZQOSB0aGlzIGZpZWxkIG11c3QgYmUgMC4KKyAgICAv
LyBjb2RlY0ludGlhbGl6YXRpb25EYXRh4oCLYmluYXJ5IGNvZGVjIGluaXRpYWxpemF0aW9uIGRh
dGEuIE5vdCB1c2VkIGZvciBWUDggYW5kIFZQOS4KKyAgICAvLworICAgIC8vIEZJWE1FOiBDb252
ZXJ0IGV4aXN0aW5nIHN0cnVjdCB0byBhbiBJU09Cb3ggYW5kIHJlcGxhY2UgdGhlIHdyaXRpbmcg
Y29kZSBiZWxvdworICAgIC8vIHdpdGggYSBzdWJjbGFzcyBvZiBJU09GdWxsQm94LgorCisgICAg
VlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQgcmVjb3JkOworCisgICAgcmVjb3JkLnByb2ZpbGUg
PSBwYXJzZXIucHJvZmlsZSgpOworICAgIC8vIENvcmVNZWRpYSBkb2VzIG5hdCBjYXJlIGFib3V0
IHRoZSBWUDkgY29kZWMgbGV2ZWw7IGhhcmQtY29kZSB0byBMZXZlbCAxLjAgaGVyZToKKyAgICBy
ZWNvcmQubGV2ZWwgPSAxMDsKKyAgICByZWNvcmQuYml0RGVwdGggPSBwYXJzZXIuYml0X2RlcHRo
KCk7CisgICAgcmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxhZyA9IHBhcnNlci5jb2xvcl9yYW5nZSgp
ID8gVlBDb25maWd1cmF0aW9uUmFuZ2U6OkZ1bGxSYW5nZSA6IFZQQ29uZmlndXJhdGlvblJhbmdl
OjpWaWRlb1JhbmdlOworICAgIHJlY29yZC5jaHJvbWFTdWJzYW1wbGluZyA9IGNvbnZlcnRTdWJz
YW1wbGluZ1hZVG9DaHJvbWFTdWJzYW1wbGluZyhwYXJzZXIuc3Vic2FtcGxpbmdfeCgpLCBwYXJz
ZXIuc3Vic2FtcGxpbmdfeSgpKTsKKyAgICByZWNvcmQuY29sb3JQcmltYXJpZXMgPSBWUENvbmZp
Z3VyYXRpb25Db2xvclByaW1hcmllczo6VW5zcGVjaWZpZWQ7CisgICAgcmVjb3JkLnRyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzID0gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OlVuc3BlY2lmaWVkOworICAgIHJlY29yZC5tYXRyaXhDb2VmZmljaWVudHMgPSBWUENvbmZpZ3Vy
YXRpb25NYXRyaXhDb2VmZmljaWVudHM6OlVuc3BlY2lmaWVkOworCisgICAgLy8gQ29udGFpbmVy
IGNvbG9yIHZhbHVlcyBjYW4gb3ZlcnJpZGUgcGVyLXNhbXBsZSBvbmVzOgorICAgIGlmIChjb2xv
ci5pc19wcmVzZW50KCkpIHsKKyAgICAgICAgYXV0byYgY29sb3JWYWx1ZSA9IGNvbG9yLnZhbHVl
KCk7CisgICAgICAgIGlmIChjb2xvclZhbHVlLmNocm9tYV9zdWJzYW1wbGluZ194LmlzX3ByZXNl
bnQoKSAmJiBjb2xvclZhbHVlLmNocm9tYV9zdWJzYW1wbGluZ195LmlzX3ByZXNlbnQoKSkKKyAg
ICAgICAgICAgIHJlY29yZC5jaHJvbWFTdWJzYW1wbGluZyA9IGNvbnZlcnRTdWJzYW1wbGluZ1hZ
VG9DaHJvbWFTdWJzYW1wbGluZyhjb2xvclZhbHVlLmNocm9tYV9zdWJzYW1wbGluZ194LnZhbHVl
KCksIGNvbG9yVmFsdWUuY2hyb21hX3N1YnNhbXBsaW5nX3kudmFsdWUoKSk7CisgICAgICAgIGlm
IChjb2xvclZhbHVlLnJhbmdlLmlzX3ByZXNlbnQoKSAmJiBjb2xvclZhbHVlLnJhbmdlLnZhbHVl
KCkgIT0gUmFuZ2U6OmtVbnNwZWNpZmllZCkKKyAgICAgICAgICAgIHJlY29yZC52aWRlb0Z1bGxS
YW5nZUZsYWcgPSBjb2xvclZhbHVlLnJhbmdlLnZhbHVlKCkgPT0gUmFuZ2U6OmtGdWxsID8gVlBD
b25maWd1cmF0aW9uUmFuZ2U6OkZ1bGxSYW5nZSA6IFZQQ29uZmlndXJhdGlvblJhbmdlOjpWaWRl
b1JhbmdlOworICAgICAgICBpZiAoY29sb3JWYWx1ZS5iaXRzX3Blcl9jaGFubmVsLmlzX3ByZXNl
bnQoKSkKKyAgICAgICAgICAgIHJlY29yZC5iaXREZXB0aCA9IGNvbG9yVmFsdWUuYml0c19wZXJf
Y2hhbm5lbC52YWx1ZSgpOworICAgICAgICBpZiAoY29sb3JWYWx1ZS50cmFuc2Zlcl9jaGFyYWN0
ZXJpc3RpY3MuaXNfcHJlc2VudCgpKQorICAgICAgICAgICAgcmVjb3JkLnRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzID0gY29udmVydFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MoY29sb3JWYWx1ZS50
cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MudmFsdWUoKSk7CisgICAgICAgIGlmIChjb2xvclZhbHVl
Lm1hdHJpeF9jb2VmZmljaWVudHMuaXNfcHJlc2VudCgpKQorICAgICAgICAgICAgcmVjb3JkLm1h
dHJpeENvZWZmaWNpZW50cyA9IGNvbnZlcnRUb01hdHJpeENvZWZmaWNpZW50cyhjb2xvclZhbHVl
Lm1hdHJpeF9jb2VmZmljaWVudHMudmFsdWUoKSk7CisgICAgICAgIGlmIChjb2xvclZhbHVlLnBy
aW1hcmllcy5pc19wcmVzZW50KCkpCisgICAgICAgICAgICByZWNvcmQuY29sb3JQcmltYXJpZXMg
PSBjb252ZXJ0VG9Db2xvclByaW1hcmllcyhjb2xvclZhbHVlLnByaW1hcmllcy52YWx1ZSgpKTsK
KyAgICB9CisKKyAgICBjb25zdGV4cHIgc2l6ZV90IFZQQ29kZWNDb25maWd1cmF0aW9uQ29udGVu
dHNTaXplID0gMTI7CisKKyAgICB1aW50MzJfdCB2ZXJzaW9uQW5kRmxhZ3MgPSAxIDw8IDI0Owor
ICAgIHVpbnQ4X3QgYml0RGVwdGhDaHJvbWFBbmRSYW5nZSA9ICgweEYgJiByZWNvcmQuYml0RGVw
dGgpIDw8IDQgfCAoMHg3ICYgcmVjb3JkLmNocm9tYVN1YnNhbXBsaW5nKSA8PCAxIHwgKDB4MSAm
IHJlY29yZC52aWRlb0Z1bGxSYW5nZUZsYWcpOworICAgIHVpbnQxNl90IGNvZGVjSW50aWFsaXph
dGlvbkRhdGFTaXplID0gMDsKKworICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZpZXc6OmNyZWF0
ZShBcnJheUJ1ZmZlcjo6Y3JlYXRlKFZQQ29kZWNDb25maWd1cmF0aW9uQ29udGVudHNTaXplLCAx
KSwgMCwgVlBDb2RlY0NvbmZpZ3VyYXRpb25Db250ZW50c1NpemUpOworICAgIHZpZXctPnNldCgw
LCB2ZXJzaW9uQW5kRmxhZ3MsIGZhbHNlKTsKKyAgICB2aWV3LT5zZXQoNCwgcmVjb3JkLnByb2Zp
bGUsIGZhbHNlKTsKKyAgICB2aWV3LT5zZXQoNSwgcmVjb3JkLmxldmVsLCBmYWxzZSk7CisgICAg
dmlldy0+c2V0KDYsIGJpdERlcHRoQ2hyb21hQW5kUmFuZ2UsIGZhbHNlKTsKKyAgICB2aWV3LT5z
ZXQoNywgcmVjb3JkLmNvbG9yUHJpbWFyaWVzLCBmYWxzZSk7CisgICAgdmlldy0+c2V0KDgsIHJl
Y29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGljcywgZmFsc2UpOworICAgIHZpZXctPnNldCg5LCBy
ZWNvcmQubWF0cml4Q29lZmZpY2llbnRzLCBmYWxzZSk7CisgICAgdmlldy0+c2V0KDEwLCBjb2Rl
Y0ludGlhbGl6YXRpb25EYXRhU2l6ZSwgZmFsc2UpOworCisgICAgYXV0byBkYXRhID0gYWRvcHRD
RihDRkRhdGFDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKGNvbnN0IFVJbnQ4ICopdmlldy0+
ZGF0YSgpLCB2aWV3LT5ieXRlTGVuZ3RoKCkpKTsKKworICAgIENGVHlwZVJlZiBjb25maWd1cmF0
aW9uS2V5c1tdID0geyBDRlNUUigidnBjQyIpIH07CisgICAgQ0ZUeXBlUmVmIGNvbmZpZ3VyYXRp
b25WYWx1ZXNbXSA9IHsgZGF0YS5nZXQoKSB9OworICAgIGF1dG8gY29uZmlndXJhdGlvbkRpY3Qg
PSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb25maWd1
cmF0aW9uS2V5cywgY29uZmlndXJhdGlvblZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChjb25maWd1
cmF0aW9uS2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0
aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKworICAgIFZlY3RvcjxDRlR5cGVSZWY+IGV4dGVuc2lv
bnNLZXlzIHsga0NNRm9ybWF0RGVzY3JpcHRpb25FeHRlbnNpb25fU2FtcGxlRGVzY3JpcHRpb25F
eHRlbnNpb25BdG9tcyB9OworICAgIFZlY3RvcjxDRlR5cGVSZWY+IGV4dGVuc2lvbnNWYWx1ZXMg
PSB7IGNvbmZpZ3VyYXRpb25EaWN0LmdldCgpIH07CisKKyAgICBpZiAocmVjb3JkLnZpZGVvRnVs
bFJhbmdlRmxhZyA9PSBWUENvbmZpZ3VyYXRpb25SYW5nZTo6RnVsbFJhbmdlKSB7CisgICAgICAg
IGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ01Gb3JtYXREZXNjcmlwdGlvbkV4dGVuc2lvbl9GdWxs
UmFuZ2VWaWRlbyk7CisgICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGtDRkJvb2xlYW5U
cnVlKTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBjbUNvbG9yUHJpbWFyaWVzID0gY29udmVydFRv
Q01Db2xvclByaW1hcmllcyhyZWNvcmQuY29sb3JQcmltYXJpZXMpKSB7CisgICAgICAgIGV4dGVu
c2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzS2V5KTsKKyAgICAg
ICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21Db2xvclByaW1hcmllcyk7CisgICAgfQorCisg
ICAgaWYgKGF1dG8gY21UcmFuc2ZlckZ1bmN0aW9uID0gY29udmVydFRvQ01UcmFuc2ZlckZ1bmN0
aW9uKHJlY29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGljcykpIHsKKyAgICAgICAgZXh0ZW5zaW9u
c0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbktleSk7CisgICAgICAg
IGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGNtVHJhbnNmZXJGdW5jdGlvbik7CisgICAgfQorCisg
ICAgaWYgKGF1dG8gY21NYXRyaXggPSBjb252ZXJ0VG9DTVlDYkNSTWF0cml4KHJlY29yZC5tYXRy
aXhDb2VmZmljaWVudHMpKSB7CisgICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFn
ZUJ1ZmZlcllDYkNyTWF0cml4S2V5KTsKKyAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQo
Y21NYXRyaXgpOworICAgIH0KKworICAgIGF1dG8gZXh0ZW5zaW9ucyA9IGFkb3B0Q0YoQ0ZEaWN0
aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGV4dGVuc2lvbnNLZXlzLmRhdGEoKSwg
ZXh0ZW5zaW9uc1ZhbHVlcy5kYXRhKCksIGV4dGVuc2lvbnNLZXlzLnNpemUoKSwgJmtDRlR5cGVE
aWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykp
OworCisgICAgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uID0g
bnVsbHB0cjsKKyAgICBpZiAobm9FcnIgIT0gQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDTVZpZGVvQ29kZWNUeXBlX1ZQOSwgcGFyc2VyLndpZHRo
KCksIHBhcnNlci5oZWlnaHQoKSwgZXh0ZW5zaW9ucy5nZXQoKSwgJmZvcm1hdERlc2NyaXB0aW9u
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGFkb3B0Q0YoZm9ybWF0RGVz
Y3JpcHRpb24pOworfQorCiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxp
dGllc0NvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJN
QXVkaW9VdGlsaXRpZXNDb2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIxZjYzN2MwMjRmOGM1ODdlYWNiM2I3
ZWEwMTc3MjYzY2E4NzgzNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oCkBAIC0wLDAgKzEs
NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKENPQ09BKQor
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitjbGFzcyBBdWRpb1N0cmVhbURlc2NyaXB0
aW9uOwordHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlvbiogQ01G
b3JtYXREZXNjcmlwdGlvblJlZjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIGlzVm9y
YmlzRGVjb2RlckF2YWlsYWJsZSgpOworUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+
IGNyZWF0ZVZvcmJpc0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24oc2l6ZV90LCBjb25zdCB2b2lkKik7
CisKK2Jvb2wgaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpOworUmV0YWluUHRyPENNRm9ybWF0RGVz
Y3JpcHRpb25SZWY+IGNyZWF0ZU9wdXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKHNpemVfdCwgY29u
c3Qgdm9pZCopOworCit9CisKKyNlbmRpZiAvLyAmJiBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxp
dGllc0NvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2Vi
TUF1ZGlvVXRpbGl0aWVzQ29jb2EubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjI3M2RjZTE1N2RjZWY2MmNmNWZm
YTc2OTIyOTRjOTFlYzFhNmNmZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1tCkBAIC0wLDAg
KzEsMjA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJN
QXVkaW9VdGlsaXRpZXNDb2NvYS5oIgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisKKyNpbXBvcnQg
IkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9y
dCAiTWVkaWFVdGlsaXRpZXMuaCIKKyNpbXBvcnQgPEF1ZGlvVG9vbGJveC9BdWRpb0NvbXBvbmVu
dC5oPgorI2ltcG9ydCA8QXVkaW9Ub29sYm94L0F1ZGlvRm9ybWF0Lmg+CisjaW1wb3J0IDxDb3Jl
TWVkaWEvQ01Gb3JtYXREZXNjcmlwdGlvbi5oPgorI2ltcG9ydCA8ZGxmY24uaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisjaWYgRU5BQkxFKFZPUkJJUykgfHwgRU5BQkxFKE9QVVMpCitzdGF0
aWMgYm9vbCByZWdpc3RlckRlY29kZXJGYWN0b3J5KGNvbnN0IGNoYXIqIGRlY29kZXJOYW1lLCBP
U1R5cGUgZGVjb2RlclR5cGUpCit7CisgICAgY29uc3RleHByIGNoYXIgYXVkaW9Db21wb25lbnRz
RHlsaWJbXSA9ICIvU3lzdGVtL0xpYnJhcnkvQ29tcG9uZW50cy9BdWRpb0NvZGVjcy5jb21wb25l
bnQvQ29udGVudHMvTWFjT1MvQXVkaW9Db2RlY3MiOworICAgIHZvaWQgKmhhbmRsZSA9IGRsb3Bl
bihhdWRpb0NvbXBvbmVudHNEeWxpYiwgUlRMRF9MQVpZIHwgUlRMRF9MT0NBTCk7CisgICAgaWYg
KCFoYW5kbGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEF1ZGlvQ29tcG9uZW50RmFj
dG9yeUZ1bmN0aW9uIGRlY29kZXJGYWN0b3J5ID0gcmVpbnRlcnByZXRfY2FzdDxBdWRpb0NvbXBv
bmVudEZhY3RvcnlGdW5jdGlvbj4oZGxzeW0oaGFuZGxlLCBkZWNvZGVyTmFtZSkpOworICAgIGlm
ICghZGVjb2RlckZhY3RvcnkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEF1ZGlvQ29t
cG9uZW50RGVzY3JpcHRpb24gZGVzYyB7ICdhZGVjJywgZGVjb2RlclR5cGUsICdhcHBsJywga0F1
ZGlvQ29tcG9uZW50RmxhZ19TYW5kYm94U2FmZSwgMCB9OworICAgIGlmICghQXVkaW9Db21wb25l
bnRSZWdpc3RlcigmZGVzYywgQ0ZTVFIoIiIpLCAwLCBkZWNvZGVyRmFjdG9yeSkpIHsKKyAgICAg
ICAgZGxjbG9zZShoYW5kbGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJl
Zj4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkZvckZvcm1hdChPU1R5cGUgZm9ybWF0SUQs
IFZlY3Rvcjx1aW50OF90PiBtYWdpY0Nvb2tpZSkKK3sKKyAgICBBdWRpb1N0cmVhbUJhc2ljRGVz
Y3JpcHRpb24gYXNiZCB7IH07CisgICAgYXNiZC5tRm9ybWF0SUQgPSBmb3JtYXRJRDsKKyAgICB1
aW50MzJfdCBzaXplID0gc2l6ZW9mKGFzYmQpOworICAgIGF1dG8gZXJyb3IgPSBBdWRpb0Zvcm1h
dEdldFByb3BlcnR5KGtBdWRpb0Zvcm1hdFByb3BlcnR5X0Zvcm1hdEluZm8sIG1hZ2ljQ29va2ll
LnNpemUoKSwgbWFnaWNDb29raWUuZGF0YSgpLCAmc2l6ZSwgJmFzYmQpOworICAgIGlmIChlcnJv
cikgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihNZWRpYSwgImNyZWF0ZUF1ZGlvRm9ybWF0
RGVzY3JpcHRpb25Gb3JGb3JtYXQgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgZXJyb3Is
IChjaGFyICopJmVycm9yKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAg
cmV0dXJuIGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24oQ0FBdWRpb1N0cmVhbURlc2NyaXB0
aW9uKGFzYmQpLCBtYWdpY0Nvb2tpZS5zaXplKCksIG1hZ2ljQ29va2llLmRhdGEoKSk7Cit9Cisj
ZW5kaWYgLy8gRU5BQkxFKFZPUkJJUykgfHwgRU5BQkxFKE9QVVMpCisKKyNpZiBFTkFCTEUoT1BV
UykKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gY29va2llRnJvbU9wdXNDb2RlY1ByaXZhdGUoc2l6
ZV90LCBjb25zdCB2b2lkKikKK3sKKyAgICByZXR1cm4geyB9OworfQorI2VuZGlmCisKK2Jvb2wg
aXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpCit7CisgICAgc3RhdGljIGJvb2wgYXZhaWxhYmxlOwor
CisjaWYgRU5BQkxFKE9QVVMpICYmIFBMQVRGT1JNKE1BQykKKyAgICBzdGF0aWMgZGlzcGF0Y2hf
b25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57CisgICAg
ICAgIGF2YWlsYWJsZSA9IHJlZ2lzdGVyRGVjb2RlckZhY3RvcnkoIkFDT3B1c0RlY29kZXJGYWN0
b3J5IiwgJ29wdXMnKTsKKyAgICB9KTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGF2YWlsYWJsZTsK
K30KKworUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZU9wdXNBdWRpb0Zv
cm1hdERlc2NyaXB0aW9uKHNpemVfdCBwcml2YXRlRGF0YVNpemUsIGNvbnN0IHZvaWQqIHByaXZh
dGVEYXRhKQoreworI2lmIEVOQUJMRShPUFVTKQorICAgIGlmICghaXNPcHVzRGVjb2RlckF2YWls
YWJsZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29va2llRGF0YSA9
IGNvb2tpZUZyb21PcHVzQ29kZWNQcml2YXRlKHByaXZhdGVEYXRhU2l6ZSwgcHJpdmF0ZURhdGEp
OworICAgIGlmICghY29va2llRGF0YS5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgcmV0dXJuIGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25Gb3JGb3JtYXQoJ29wdXMn
LCBjb29raWVEYXRhKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHByaXZhdGVEYXRhU2l6ZSk7
CisgICAgVU5VU0VEX1BBUkFNKHByaXZhdGVEYXRhKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyNl
bmRpZgorfQorCisjaWYgRU5BQkxFKFZPUkJJUykKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gY29v
a2llRnJvbVZvcmJpc0NvZGVjUHJpdmF0ZShzaXplX3QgY29kZWNQcml2YXRlU2l6ZSwgY29uc3Qg
dm9pZCogY29kZWNQcml2YXRlRGF0YSkKK3sKKyAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3Jn
L2h0bWwvZHJhZnQtaWV0Zi1jZWxsYXItY29kZWMtMDMKKyAgICAvLyA2LjQuMTUuIEFfVk9SQklT
CisgICAgLy8gQ29kZWMgSUQ6IEFfVk9SQklTCisgICAgLy8gQ29kZWMgTmFtZTogVm9yYmlzCisg
ICAgLy8gSW5pdGlhbGl6YXRpb246IFRoZSAiUHJpdmF0ZSBEYXRhIiBjb250YWlucyB0aGUgZmly
c3QgdGhyZWUgVm9yYmlzIHBhY2tldCBpbiBvcmRlci4gVGhlIGxlbmd0aHMgb2YgdGhlCisgICAg
Ly8gcGFja2V0cyBwcmVjZWRlcyB0aGVtLiBUaGUgYWN0dWFsIGxheW91dCBpczoKKyAgICAvLyAt
IEJ5dGUgMTogbnVtYmVyIG9mIGRpc3RpbmN0IHBhY2tldHMgJyIjcCInIG1pbnVzIG9uZSBpbnNp
ZGUgdGhlIENvZGVjUHJpdmF0ZSBibG9jay5UaGlzIE1VU1QgYmUgJzInCisgICAgLy8gICBmb3Ig
Y3VycmVudCAoYXMgb2YgMjAxNi0wNy0wOCkgVm9yYmlzIGhlYWRlcnMuCisgICAgLy8gLSBCeXRl
cyAyLi5uOiBsZW5ndGhzIG9mIHRoZSBmaXJzdCAnIiNwIicgcGFja2V0cywgY29kZWQgaW4gWGlw
aC1zdHlsZSBsYWNpbmcuIFRoZSBsZW5ndGggb2YgdGhlIGxhc3QKKyAgICAvLyAgIHBhY2tldCBp
cyB0aGUgbGVuZ3RoIG9mIHRoZSBDb2RlY1ByaXZhdGUgYmxvY2sgbWludXMgdGhlIGxlbmd0aHMg
Y29kZWQgaW4gdGhlc2UgYnl0ZXMgbWludXMgb25lLgorICAgIC8vIC0gQnl0ZXMgbisxLi46IFRo
ZSBWb3JiaXMgaWRlbnRpZmljYXRpb24gaGVhZGVyLCBmb2xsb3dlZCBieSB0aGUgVm9yYmlzIGNv
bW1lbnQgaGVhZGVyIGZvbGxvd2VkIGJ5IHRoZQorICAgIC8vICAgY29kZWMgc2V0dXAgaGVhZGVy
LgorCisgICAgY29uc3QgdW5zaWduZWQgY2hhciogcHJpdmF0ZURhdGFQdHIgPSBzdGF0aWNfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oY29kZWNQcml2YXRlRGF0YSk7CisKKyAgICBjb25zdCBp
bnQgdm9yYmlzTWluaW11bUNvb2tpZVNpemUgPSAzOworICAgIGlmIChjb2RlY1ByaXZhdGVTaXpl
IDwgdm9yYmlzTWluaW11bUNvb2tpZVNpemUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
TWVkaWEsICJjb29raWVGcm9tVm9yYmlzQ29kZWNQcml2YXRlOiBjb2RlYyBwcml2YXRlIGRhdGEg
dG9vIHNtYWxsICglenUpIiwgY29kZWNQcml2YXRlU2l6ZSk7CisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorCisgICAgLy8gRGVzcGl0ZSB0aGUgIlRoaXMgTVVTVCBiZSAnMiciIGNvbW1lbnQg
aW4gdGhlIElFVEYgZG9jdW1lbnQsIHBhY2tldCBjb3VudCBpcyBub3QgYWx3YXlzIGVxdWFsIHRv
CisgICAgLy8gMiBpbiByZWFsLXdvcmQgZmlsZXMsIHNvIGlnbm9yZSB0aGF0IGZpZWxkLgorICAg
IGNvbnN0IHVpbnQxNl90IGlkSGVhZGVyU2l6ZSA9IHByaXZhdGVEYXRhUHRyWzFdOworICAgIGNv
bnN0IHVpbnQxNl90IGNvbW1lbnRIZWFkZXJTaXplID0gcHJpdmF0ZURhdGFQdHJbMl07CisgICAg
Y29uc3QgdWludDE2X3QgY2FsY3VsYXRlZEhlYWRlclNpemUgPSAxICsgaWRIZWFkZXJTaXplICsg
Y29tbWVudEhlYWRlclNpemU7CisgICAgaWYgKDEgKyBpZEhlYWRlclNpemUgKyBjb21tZW50SGVh
ZGVyU2l6ZSA+IGNvZGVjUHJpdmF0ZVNpemUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1Io
TWVkaWEsICJjb29raWVGcm9tVm9yYmlzQ29kZWNQcml2YXRlOiBjb2RlYyBwcml2YXRlIGRhdGEg
dG9vIHNtYWxsICglenUpIGZvciBoZWFkZXIgc2l6ZXMgKCVkKSIsIGNvZGVjUHJpdmF0ZVNpemUs
IGNhbGN1bGF0ZWRIZWFkZXJTaXplKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAg
ICBjb25zdCB1bnNpZ25lZCBjaGFyKiBpZEhlYWRlciA9ICZwcml2YXRlRGF0YVB0clszXTsKKyAg
ICBjb25zdCB1bnNpZ25lZCBjaGFyKiBjb21tZW50SGVhZGVyID0gaWRIZWFkZXIgKyBpZEhlYWRl
clNpemU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogY29kZWNTZXR1cEhlYWRlciA9IGNvbW1l
bnRIZWFkZXIgKyBjb21tZW50SGVhZGVyU2l6ZTsKKyAgICBjb25zdCB1aW50MTZfdCBjb2RlY1Nl
dHVwSGVhZGVyU2l6ZSA9IGNvZGVjUHJpdmF0ZVNpemUgLSBpZEhlYWRlclNpemUgLSBjb21tZW50
SGVhZGVyU2l6ZSAtIDIgLSAxOworCisgICAgaWYgKChpZEhlYWRlclNpemUgKyBjb21tZW50SGVh
ZGVyU2l6ZSArIGNvZGVjU2V0dXBIZWFkZXJTaXplICsgMykgPiBjb2RlY1ByaXZhdGVTaXplKSB7
CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE1lZGlhLCAiY29va2llRnJvbVZvcmJpc0NvZGVj
UHJpdmF0ZTogY29kZWMgcHJpdmF0ZSBoZWFkZXIgc2l6ZSBpcyBpbnZhbGlkIC0gaWQgPSAlZCwg
Y29tbWVudCA9ICVkLCBoZWFkZXIgPSAlZCwgY2h1bmsgc2l6ZSA9ICV6dSIsIGlkSGVhZGVyU2l6
ZSwgY29tbWVudEhlYWRlclNpemUsIGNvZGVjU2V0dXBIZWFkZXJTaXplLCBjb2RlY1ByaXZhdGVT
aXplKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4g
Y29va2llRGF0YTsKKyAgICBjb29raWVEYXRhLmFwcGVuZChyZWludGVycHJldF9jYXN0X3B0cjxj
b25zdCB1aW50OF90Kj4oJmlkSGVhZGVyU2l6ZSksIHNpemVvZihpZEhlYWRlclNpemUpKTsKKyAg
ICBjb29raWVEYXRhLmFwcGVuZChpZEhlYWRlciwgaWRIZWFkZXJTaXplKTsKKworICAgIGNvb2tp
ZURhdGEuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IHVpbnQ4X3QqPigmY29tbWVu
dEhlYWRlclNpemUpLCBzaXplb2YoY29tbWVudEhlYWRlclNpemUpKTsKKyAgICBjb29raWVEYXRh
LmFwcGVuZChjb21tZW50SGVhZGVyLCBjb21tZW50SGVhZGVyU2l6ZSk7CisKKyAgICBjb29raWVE
YXRhLmFwcGVuZChyZWludGVycHJldF9jYXN0X3B0cjxjb25zdCB1aW50OF90Kj4oJmNvZGVjU2V0
dXBIZWFkZXJTaXplKSwgc2l6ZW9mKGNvZGVjU2V0dXBIZWFkZXJTaXplKSk7CisgICAgY29va2ll
RGF0YS5hcHBlbmQoY29kZWNTZXR1cEhlYWRlciwgY29kZWNTZXR1cEhlYWRlclNpemUpOworCisg
ICAgcmV0dXJuIGNvb2tpZURhdGE7Cit9CisjZW5kaWYgLy8gRU5BQkxFKFZPUkJJUykKKworYm9v
bCBpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKQoreworICAgIHN0YXRpYyBib29sIGF2YWlsYWJs
ZTsKKworI2lmIEVOQUJMRShWT1JCSVMpICYmIFBMQVRGT1JNKE1BQykKKyAgICBzdGF0aWMgZGlz
cGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57
CisgICAgICAgIGF2YWlsYWJsZSA9IHJlZ2lzdGVyRGVjb2RlckZhY3RvcnkoIkFDVm9yYmlzRGVj
b2RlckZhY3RvcnkiLCAndm9yYicpOworICAgIH0pOworI2VuZGlmCisKKyAgICByZXR1cm4gYXZh
aWxhYmxlOworfQorCitSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlVm9y
YmlzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihzaXplX3QgcHJpdmF0ZURhdGFTaXplLCBjb25zdCB2
b2lkKiBwcml2YXRlRGF0YSkKK3sKKyNpZiBFTkFCTEUoVk9SQklTKQorICAgIGlmICghaXNWb3Ji
aXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0
byBjb29raWVEYXRhID0gY29va2llRnJvbVZvcmJpc0NvZGVjUHJpdmF0ZShwcml2YXRlRGF0YVNp
emUsIHByaXZhdGVEYXRhKTsKKyAgICBpZiAoIWNvb2tpZURhdGEuc2l6ZSgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9u
Rm9yRm9ybWF0KCd2b3JiJywgY29va2llRGF0YSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShw
cml2YXRlRGF0YVNpemUpOworICAgIFVOVVNFRF9QQVJBTShwcml2YXRlRGF0YSk7CisgICAgcmV0
dXJuIG51bGxwdHI7CisjZW5kaWYKK30KKworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0Ep
Cg==
</data>
<flag name="commit-queue"
          id="433281"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415920</attachid>
            <date>2020-12-10 13:20:44 -0800</date>
            <delta_ts>2020-12-10 14:00:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219755-20201210132043.patch</filename>
            <type>text/plain</type>
            <size>85012</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwNjM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGE5YjdjY2JmMTY3YWI0
M2I1YWYzZWIzZmI0Y2QzMDM2MTdiZmI3ZS4uZDBmZTg1NmUyNmI0NDdlZjg0MGFiOThlM2M2ZjFk
YTU0ZWEzOTkzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDIwLTEyLTEwICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNU0VdIFJlZmFj
dG9yIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gaW4gcHJlcGFyYXRpb24gZm9yIHN1cHBvcnRpbmcg
YXVkaW8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
OTc1NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzIxOTI2MjU+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3IgdGhlIFdlYk0gcGFyc2Vy
IGluIHByZXBhcmF0aW9uIGZvciBzdXBwb3J0aW5nIGF1ZGlvOiBtb3ZlIFZQOS1zcGVjaWZpYyBj
b2RlCisgICAgICAgIGludG8gVlA5VXRpbGl0aWVzQ29jb2EsIGNvbnZlcnQgVHJhY2tEYXRhIGZy
b20gYSBzdHJ1Y3QgdG8gYSBjbGFzcyBhbmQgbWFkZSBkZXJpdmVkCisgICAgICAgIGNsYXNzZXMg
Zm9yIGF1ZGlvIGFuZCB2aWRlbywgYWRkIHN0dWIgZnVuY3Rpb24gdG8gY3JlYXRlIGZvcm1hdCBk
ZXNjcmlwdGlvbnMgZm9yIAorICAgICAgICBWb3JiaXMgYW5kIE9wdXMgYXVkaW8uCisKKyAgICAg
ICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKworICAgICAgICAqIHBsYXRmb3JtL2NvY29hL01lZGlhVXRpbGl0aWVzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24pOiBBZGQg
b3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgbWFnaWMgY29va2llLgorICAgICAgICAqIHBsYXRmb3Jt
L2NvY29hL01lZGlhVXRpbGl0aWVzLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OmlzQ29udGVudFR5cGVTdXBwb3J0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnJlc2V0UGFyc2VyU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6dHJhY2tEYXRhRm9yVHJhY2tOdW1iZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25UcmFja0VudHJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cHJvdmlkZU1lZGlhRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0
YTo6Y29uc3VtZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJh
bWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlv
VHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6Zmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldE1pbmltdW1BdWRpb1NhbXBsZUR1cmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NvbG9yUHJpbWFyaWVzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NNQ29sb3JQcmltYXJpZXMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01UcmFuc2ZlckZ1bmN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb01hdHJpeENvZWZmaWNpZW50cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9DTVlDYkNSTWF0cml4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJz
YW1wbGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGb3JtYXREZXNjcmlw
dGlvbkZyb21WUDlIZWFkZXJQYXJzZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKGlzVHlwZSk6
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1t
OgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ29sb3JQcmltYXJpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Y29udmVydFRvQ01Db2xvclByaW1hcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpj
b252ZXJ0VG9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpjb252
ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvTWF0
cml4Q29lZmZpY2llbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NNWUNiQ1JNYXRy
aXgpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFN1YnNhbXBsaW5nWFlUb0Nocm9tYVN1YnNh
bXBsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQ
OUhlYWRlclBhcnNlcik6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJN
QXVkaW9VdGlsaXRpZXNDb2NvYS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpyZWdpc3RlckRlY29kZXJGYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF1
ZGlvRm9ybWF0RGVzY3JpcHRpb25Gb3JGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2ll
RnJvbU9wdXNDb2RlY1ByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNPcHVzRGVjb2RlckF2
YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVPcHVzQXVkaW9Gb3JtYXREZXNjcmlw
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVGcm9tVm9yYmlzQ29kZWNQcml2YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OmlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVWb3JiaXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKToKKwogMjAyMC0xMi0x
MCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0lGQ10g
SW50cm9kdWNlIElubGluZVRleHRJdGVtOjppc1dvcmRTZXBhcmF0b3IKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29j
b2EudHh0CmluZGV4IDhmOTlmOWExOTE4Yzk1NTg4NWZiMmFjYjk5YzhkMWE3NTI2NWFhMDMuLmU1
OTEzOWZiYjQ1NjUwZGVmOTk2ZjgyMWQ1Y2FmYTQwYjcyZDhlY2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0Nv
Y29hLnR4dApAQCAtMzc2LDYgKzM3Niw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkNv
cmVDQUxheWVyRXh0cmFzLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJDb3JlRGVjb21w
cmVzc2lvblNlc3Npb24ubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0K
IHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdQVUxheWVyLm1tCitwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9XZWJNVXRpbGl0aWVzQ29jb2EubW0gQG5vLXVuaWZ5CiBwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9WaWRlb1RyYWNrUHJpdmF0ZVdlYk0uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
dGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQv
Rm9udENvcmVUZXh0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGJlNGZjYWZmOWZjOTI1OWI0NmMzNTM5YjZlYTkzYWY0YWRj
N2ZiMjUuLmZmNTJhMDZhMjY3NjNjN2U3Yjg3ODU0ZDcyOTQ0MGVhMjI1YTY0Y2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIx
OCw2ICsyMTgsOCBAQAogCQkwN0VFNzZFQzFCRTk2REIwMDBGODkxMzMgLyogTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3RUU3NkVBMUJFOTZEQjAwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3RUU3
NkVGMUJFQTYxOTgwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdFRTc2RUQxQkVBNjE5
ODAwRjg5MTMzIC8qIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLmggKi87IH07CiAJCTA3RjRF
OTMzMjBCMzU4N0YwMDJFMzgwMyAvKiBBVkFzc2V0TUlNRVR5cGVDYWNoZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdDOEFEMTIxRDA3M0Q2MzAwODdD
NUNFIC8qIEFWQXNzZXRNSU1FVHlwZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMDdGNUNGRjUyNTgyQTUxRDAwNjYyRUY1IC8qIFdlYk1B
dWRpb1V0aWxpdGllc0NvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwN0Y1Q0ZGNDI1ODJBNEY4MDA2NjJFRjUgLyogV2ViTUF1ZGlvVXRpbGl0aWVz
Q29jb2EuaCAqLzsgfTsKKwkJMDdGNUNGRjYyNTgyQTUyOTAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0
aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDdGNUNGRjIyNTgyQTRGODAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29h
Lm1tICovOyB9OwogCQkwN0Y4NzY4NDFBRDU4MEY5MDA5MDU4NDkgLyogTWVkaWFQbGF5YmFja1Rh
cmdldENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3Rjg3NjgzMUFENEE5NDUwMDkwNTg0OSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0Q29udGV4
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3
Rjk0NDE2MTg2NEQwNDYwMDVEMzFDQiAvKiBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQUU4QzA4MTc0
NkI5NTcwMDUzMkQ3OCAvKiBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwN0ZFOTlERDE4ODA3QTdE
MDAyNTY2NDggLyogTWVkaWFFbGVtZW50U2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdGRTk5REIxODgwN0E3RDAwMjU2NjQ4IC8qIE1lZGlh
RWxlbWVudFNlc3Npb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtNTg3NSw2ICs1ODc3LDggQEAKIAkJMDdFRTc2RUExQkU5NkRCMDAwRjg5MTMz
IC8qIE1vY2tSZWFsdGltZVZpZGVvU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1vY2tSZWFsdGltZVZpZGVvU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA3RUU3NkVEMUJFQTYxOTgwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJj
ZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrUmVhbHRpbWVWaWRl
b1NvdXJjZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwN0VFNzZFRTFCRUE2
MTk4MDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDdGNUNGRjIyNTgyQTRGODAwNjYyRUY1
IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2Vi
TUF1ZGlvVXRpbGl0aWVzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3
RjVDRkY0MjU4MkE0RjgwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwN0Y4NzY4MzFBRDRBOTQ1MDA5MDU4NDkgLyogTWVkaWFQbGF5YmFja1Rhcmdl
dENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFQbGF5YmFj
a1RhcmdldENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdGRTk5REEx
ODgwN0E3RDAwMjU2NjQ4IC8qIE1lZGlhRWxlbWVudFNlc3Npb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFFbGVtZW50U2Vzc2lvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3RkU5OURCMTg4MDdBN0QwMDI1NjY0OCAvKiBNZWRpYUVs
ZW1lbnRTZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRWxl
bWVudFNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2ODY3LDYgKzI2
ODcxLDggQEAKIAkJCQk0OUZGQkYzRTExQzkzRUUzMDA2QTcxMTggLyogV2ViR0xMYXllci5tbSAq
LywKIAkJCQkzMTg0MzZEQjIxQjlEQUEwMDBFRDM4M0UgLyogV2ViR1BVTGF5ZXIuaCAqLywKIAkJ
CQkzMTg0MzZERDIxQjlEQUEwMDBFRDM4M0UgLyogV2ViR1BVTGF5ZXIubW0gKi8sCisJCQkJMDdG
NUNGRjQyNTgyQTRGODAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29hLmggKi8sCisJ
CQkJMDdGNUNGRjIyNTgyQTRGODAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1t
ICovLAogCQkJKTsKIAkJCXBhdGggPSBjb2NvYTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CkBAIC0zNTI1Niw2ICszNTI2Miw3IEBACiAJCQkJNDk0QkQ3OTUwRjU1QzhFRTAwNzQ3ODI4IC8q
IFdlYktpdFBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUMwRkYyNTBFNENFQjZFMDA3RDZG
RTUgLyogV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNGMzMy
RjBGMkI5QTI1MDA0QjY3OTUgLyogV2ViTGF5ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3RjVD
RkY1MjU4MkE1MUQwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMDcwOUQ3OEYxQUU1NTU1NDAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1h
bmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3MDlENzk1MUFFNTVBMjkwMDRFNDJGOCAvKiBX
ZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzA5RDc5
MzFBRTU1NTdFMDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zNjYxMCw2ICszNjYxNyw3IEBACiAJCQkJMkQwNjIxNEQxREE2M0E4QjAwQTdG
QjI2IC8qIFdlYktpdE1lZGlhS2V5cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDA2MjE0RjFE
QTYzQTkxMDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlTZXNzaW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTdDNDhBNkQwMTkxQzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3BhY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMDdGNUNGRjYyNTgyQTUyOTAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0
aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMDcwOUQ3OTIxQUU1NTU3RTAwNEU0
MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUNBRjM0ODIwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUNFQ0RDOTNDMjFGMjk3MjkwMDk3NkJEMSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQVZLaXQubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL01lZGlhVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL01lZGlhVXRpbGl0aWVzLmNwcAppbmRleCBiNDhiNGY1NjMzMmQwNTlkOWZi
MTc3NTU0MzBhMWY4ZTA1NjJjY2M1Li5hNTMzMzJjZjdkYmQ2NDY2ZjQ0ZjU3NmQxY2Q3YWRlNzYx
NTBhYTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NZWRpYVV0
aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTWVkaWFVdGls
aXRpZXMuY3BwCkBAIC0zNSwxMSArMzUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgUEFMOwogCi1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3Jl
YXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBk
ZXNjcmlwdGlvbikKK1JldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVBdWRp
b0Zvcm1hdERlc2NyaXB0aW9uKGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCBzaXplX3QgbWFnaWNDb29raWVTaXplLCBjb25zdCB2b2lkKiBtYWdpY0Nvb2tpZSkKIHsK
ICAgICBhdXRvIGJhc2ljRGVzY3JpcHRpb24gPSBXVEY6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJh
c2ljRGVzY3JpcHRpb24qPihkZXNjcmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3Jp
cHRpb24pOwogICAgIENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0ID0gbnVsbHB0cjsKLSAg
ICBhdXRvIGVycm9yID0gQ01BdWRpb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGJhc2ljRGVzY3JpcHRpb24sIDAsIG51bGxwdHIsIDAsIG51bGxwdHIsIG51bGxw
dHIsICZmb3JtYXQpOworICAgIGF1dG8gZXJyb3IgPSBDTUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25D
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYmFzaWNEZXNjcmlwdGlvbiwgMCwgbnVsbHB0ciwg
bWFnaWNDb29raWVTaXplLCBtYWdpY0Nvb2tpZSwgbnVsbHB0ciwgJmZvcm1hdCk7CiAgICAgaWYg
KGVycm9yKSB7CiAgICAgICAgIExPR19FUlJPUigiY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlv
biBmYWlsZWQgd2l0aCAlZCIsIGVycm9yKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NZWRpYVV0aWxpdGllcy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTWVkaWFVdGlsaXRpZXMuaAppbmRleCA2YjY3
YzY2Nzg1ZDQ3ZDI3MDJiNWM2NDllZjI4NWU0YjBhNWUxMjY2Li45MTcwOGVhMjJhZDRiNWJiYzdl
Zjg5ZDRjYjVkYjM1OTlkOGU2MjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9NZWRpYVV0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL01lZGlhVXRpbGl0aWVzLmgKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjsKIGNsYXNzIFBsYXRmb3JtQXVkaW9EYXRh
OwogCi1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9Gb3JtYXRE
ZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJik7CitSZXRhaW5QdHI8Q01G
b3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihjb25zdCBB
dWRpb1N0cmVhbURlc2NyaXB0aW9uJiwgc2l6ZV90IG1hZ2ljQ29va2llU2l6ZSA9IDAsIGNvbnN0
IHZvaWQqIG1hZ2ljQ29va2llID0gbnVsbHB0cik7CiBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJS
ZWY+IGNyZWF0ZUF1ZGlvU2FtcGxlQnVmZmVyKGNvbnN0IFBsYXRmb3JtQXVkaW9EYXRhJiwgY29u
c3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYsIENNVGltZSwgc2l6ZV90IHNhbXBsZUNvdW50KTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNw
cAppbmRleCBiZTFlMDg2ZTBhYzUyMzU0NjM2YTAwNmFiMzJkMWI5MmY0MGI0ZDgxLi5jNzIzY2Vh
MGRmMjFkZjY4NjliZmIwNjg2YTUwZGFlYzZiNTQwZjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNLmNwcApAQCAtMzksMTEgKzM5LDEzIEBACiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCiAjaW5jbHVkZSAiVlA5VXRpbGl0aWVzQ29jb2EuaCIKICNpbmNsdWRlICJWaWRlb1RyYWNr
UHJpdmF0ZVdlYk0uaCIKKyNpbmNsdWRlICJXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0RhdGFWaWV3Lmg+CiAjaW5jbHVkZSA8d2VibS93ZWJtX3Bh
cnNlci5oPgogI2luY2x1ZGUgPHd0Zi9BbGdvcml0aG1zLmg+CiAjaW5jbHVkZSA8d3RmL0xvZ2dl
ckhlbHBlci5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGlzdC5oPgogI2luY2x1ZGUgPHd0
Zi9jZi9UeXBlQ2FzdHNDRi5oPgogI2luY2x1ZGUgPHd0Zi9kYXJ3aW4vV2Vha0xpbmtpbmcuaD4K
QEAgLTIzNiw3ICsyMzgsNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBMb2dBcmd1bWVudDxXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZT4gewogCiB9IC8vIG5hbWVzcGFjZSBXVEYK
IAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBQQUw7CkBAIC00NTYs
NiArNDU3LDcgQEAgcHJpdmF0ZToKIAogTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OmlzQ29udGVudFR5cGVTdXBwb3J0ZWQoY29uc3QgQ29udGVu
dFR5cGUmIHR5cGUpCiB7CisjaWYgRU5BQkxFKFZQOSkgfHwgRU5BQkxFKFZPUkJJUykgfHwgRU5B
QkxFKE9QVVMpCiAgICAgaWYgKCFpc1dlYm1QYXJzZXJBdmFpbGFibGUoKSkKICAgICAgICAgcmV0
dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CiAKQEAg
LTQ2NywxMCArNDY5LDE0IEBAIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjppc0NvbnRlbnRUeXBlU3VwcG9ydGVkKGNvCiAgICAgaWYgKCFjb2Rl
Y3NQYXJhbWV0ZXIpCiAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5
cGU6Ok1heUJlU3VwcG9ydGVkOwogCi0jaWYgRU5BQkxFKFZQOSkKICAgICBhdXRvIHNwbGl0UmVz
dWx0cyA9IFN0cmluZ1ZpZXcoY29kZWNzUGFyYW1ldGVyKS5zcGxpdCgnLCcpOwogICAgIGZvciAo
YXV0byBzcGxpdCA6IHNwbGl0UmVzdWx0cykgeworI2lmIEVOQUJMRShWUDkpCiAgICAgICAgIGlm
IChzcGxpdC5zdGFydHNXaXRoKCJ2cDA5IikpIHsKKworICAgICAgICAgICAgaWYgKCFpc1ZQOURl
Y29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVt
czo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKwogICAgICAgICAgICAgYXV0byBjb2Rl
Y1BhcmFtZXRlcnMgPSBwYXJzZVZQQ29kZWNQYXJhbWV0ZXJzKHNwbGl0KTsKICAgICAgICAgICAg
IGlmICghY29kZWNQYXJhbWV0ZXJzKQogICAgICAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXll
ckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwpAQCAtNDgwLDE0ICs0ODYsNDAg
QEAgTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
OmlzQ29udGVudFR5cGVTdXBwb3J0ZWQoY28KIAogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KLSAgICAgICAgLy8gRklYTUU6IEFkZCBPcHVzIFN1cHBvcnQKLSAgICAgICAgLy8gRklY
TUU6IEFkZCBWb3JiaXMgU3VwcG9ydAorI2VuZGlmIC8vIEVOQUJMRShWUDkpCisKKyNpZiBFTkFC
TEUoVk9SQklTKQorICAgICAgICBpZiAoc3BsaXQgPT0gInZvcmJpcyIpIHsKKyAgICAgICAgICAg
IGlmICghaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKFZPUkJJUykKKwor
I2lmIEVOQUJMRShPUFVTKQorICAgICAgICBpZiAoc3BsaXQgPT0gIm9wdXMiKSB7CisgICAgICAg
ICAgICBpZiAoIWlzT3B1c0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoT1BVUykKKwog
ICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBv
cnRlZDsKICAgICB9Ci0gICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6
SXNTdXBwb3J0ZWQ7CiAjZWxzZQotICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0
c1R5cGU6OklzTm90U3VwcG9ydGVkOwotI2VuZGlmCisgICAgVU5VU0VEX1BBUkFNKHR5cGUpCisj
ZW5kaWYgLy8gRU5BQkxFKFZQOSkgfHwgRU5BQkxFKFZPUkJJUykgfHwgRU5BQkxFKE9QVVMpCisK
KyAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc1N1cHBvcnRlZDsK
K30KKworUmVmUHRyPFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0+IFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OmNyZWF0ZShjb25zdCBDb250ZW50VHlwZSYgdHlwZSkKK3sKKyAgICBpZiAoaXNDb250ZW50
VHlwZVN1cHBvcnRlZCh0eXBlKSAhPSBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6Oklz
Tm90U3VwcG9ydGVkKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk0oKSk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKQpAQCAtNTcxLDYgKzYwMyw3IEBAIGJvb2wg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2hvdWxkUHJvdmlkZU1lZGlhZGF0YUZvclRyYWNrSUQo
dWludDY0X3QpCiB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnJlc2V0UGFyc2VyU3RhdGUo
KQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOworICAgIGZsdXNo
UGVuZGluZ0F1ZGlvQnVmZmVycygpOwogICAgIG1fcGFyc2VyLT5EaWRTZWVrKCk7CiAgICAgbV9z
dGF0ZSA9IFN0YXRlOjpOb25lOwogICAgIG1fdHJhY2tzLmNsZWFyKCk7CkBAIC02MDQsNyArNjM3
LDcgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRMb2dnZXIoY29uc3QgTG9nZ2Vy
JiBsb2dnZXIsIGNvbnN0IHZvaWQqIGxvZ0lkZW4KIGF1dG8gU291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6dHJhY2tEYXRhRm9yVHJhY2tOdW1iZXIodWludDY0X3QgdHJhY2tOdW1iZXIpIC0+IFRyYWNr
RGF0YSoKIHsKICAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV90cmFja3MpIHsKLSAgICAgICAgaWYg
KHRyYWNrLnRyYWNrLnRyYWNrX251bWJlci5pc19wcmVzZW50KCkgJiYgdHJhY2sudHJhY2sudHJh
Y2tfbnVtYmVyLnZhbHVlKCkgPT0gdHJhY2tOdW1iZXIpCisgICAgICAgIGlmICh0cmFjay0+dHJh
Y2soKS50cmFja19udW1iZXIuaXNfcHJlc2VudCgpICYmIHRyYWNrLT50cmFjaygpLnRyYWNrX251
bWJlci52YWx1ZSgpID09IHRyYWNrTnVtYmVyKQogICAgICAgICAgICAgcmV0dXJuICZ0cmFjazsK
ICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC03NDgsNyArNzgxLDcgQEAgU3RhdHVzIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uQ2x1c3RlckJlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0
YSYgbWV0YWRhdGEsIGMKIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblRyYWNrRW50
cnkoY29uc3QgRWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgVHJhY2tFbnRyeSYgdHJh
Y2tFbnRyeSkKIHsKICAgICBVTlVTRURfUEFSQU0obWV0YWRhdGEpOwotICAgIGlmICghdHJhY2tF
bnRyeS50cmFja190eXBlLmlzX3ByZXNlbnQoKSkKKyAgICBpZiAoIXRyYWNrRW50cnkudHJhY2tf
dHlwZS5pc19wcmVzZW50KCkgfHwgIXRyYWNrRW50cnkuY29kZWNfaWQuaXNfcHJlc2VudCgpKQog
ICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIAogICAgIGF1dG8g
dHJhY2tUeXBlID0gdHJhY2tFbnRyeS50cmFja190eXBlLnZhbHVlKCk7CkBAIC03NTYsOCArNzg5
LDMwIEBAIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblRyYWNrRW50cnkoY29uc3Qg
RWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uCiAgICAgICAgIG1faW5pdGlhbGl6YXRpb25T
ZWdtZW50LT52aWRlb1RyYWNrcy5hcHBlbmQoeyBNZWRpYURlc2NyaXB0aW9uV2ViTTo6Y3JlYXRl
KFRyYWNrRW50cnkodHJhY2tFbnRyeSkpLCBWaWRlb1RyYWNrUHJpdmF0ZVdlYk06OmNyZWF0ZShU
cmFja0VudHJ5KHRyYWNrRW50cnkpKSB9KTsKICAgICBlbHNlIGlmICh0cmFja1R5cGUgPT0gVHJh
Y2tUeXBlOjprQXVkaW8pCiAgICAgICAgIG1faW5pdGlhbGl6YXRpb25TZWdtZW50LT5hdWRpb1Ry
YWNrcy5hcHBlbmQoeyBNZWRpYURlc2NyaXB0aW9uV2ViTTo6Y3JlYXRlKFRyYWNrRW50cnkodHJh
Y2tFbnRyeSkpLCBBdWRpb1RyYWNrUHJpdmF0ZVdlYk06OmNyZWF0ZShUcmFja0VudHJ5KHRyYWNr
RW50cnkpKSB9KTsKLSAgICBtX3RyYWNrcy5hcHBlbmQoeyBUcmFja0VudHJ5KHRyYWNrRW50cnkp
LCB7IH0sIG51bGxwdHIsIG51bGxwdHIsIDAgfSk7CiAKKyAgICBTdHJpbmdWaWV3IGNvZGVjU3Ry
aW5nIHsgdHJhY2tFbnRyeS5jb2RlY19pZC52YWx1ZSgpLmRhdGEoKSwgKHVuc2lnbmVkKXRyYWNr
RW50cnkuY29kZWNfaWQudmFsdWUoKS5sZW5ndGgoKSB9OworI2lmIEVOQUJMRShWUDkpCisgICAg
aWYgKGNvZGVjU3RyaW5nID09ICJWX1ZQOSIgJiYgaXNWUDlEZWNvZGVyQXZhaWxhYmxlKCkpIHsK
KyAgICAgICAgbV90cmFja3MuYXBwZW5kKFZpZGVvVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBl
OjpWUDksIHRyYWNrRW50cnksICp0aGlzKSk7CisgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVz
OjprT2tDb21wbGV0ZWQpOworICAgIH0KKyNlbmRpZgorCisjaWYgRU5BQkxFKFZPUkJJUykKKyAg
ICBpZiAoY29kZWNTdHJpbmcgPT0gIkFfVk9SQklTIiAmJiBpc1ZvcmJpc0RlY29kZXJBdmFpbGFi
bGUoKSkgeworICAgICAgICBtX3RyYWNrcy5hcHBlbmQoQXVkaW9UcmFja0RhdGE6OmNyZWF0ZShD
b2RlY1R5cGU6OlZvcmJpcywgdHJhY2tFbnRyeSwgKnRoaXMsIG1fbWluaW11bUF1ZGlvU2FtcGxl
RHVyYXRpb24pKTsKKyAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7
CisgICAgfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoT1BVUykKKyAgICBpZiAoY29kZWNTdHJpbmcg
PT0gIkFfT1BVUyIgJiYgaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpKSB7CisgICAgICAgIG1fdHJh
Y2tzLmFwcGVuZChBdWRpb1RyYWNrRGF0YTo6Y3JlYXRlKENvZGVjVHlwZTo6T3B1cywgdHJhY2tF
bnRyeSwgKnRoaXMsIG1fbWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24pKTsKKyAgICAgICAgcmV0
dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CisgICAgfQorI2VuZGlmCisKKyAgICBt
X3RyYWNrcy5hcHBlbmQoVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpVbnN1cHBvcnRlZCwg
dHJhY2tFbnRyeSwgKnRoaXMpKTsKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxl
dGVkKTsKIH0KIApAQCAtODI3LDQwNiArODgyLDI4MCBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6T25CbG9ja0dyb3VwRW5kKGNvbnN0IHdlYm06OkVsZW1lbnRNZXRhZGF0
YQogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi0jaWYgRU5B
QkxFKFZQOSkKIAotc3RhdGljIHVpbnQ4X3QgY29udmVydFRvQ29sb3JQcmltYXJpZXMoY29uc3Qg
UHJpbWFyaWVzJiBjb2VmZmljaWVudHMpCit3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6T25GcmFtZShjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgUmVhZGVyKiByZWFk
ZXIsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZykKIHsKLSAgICBzd2l0Y2ggKGNvZWZmaWNpZW50
cykgewotICAgIGNhc2UgUHJpbWFyaWVzOjprQnQ3MDk6Ci0gICAgICAgIHJldHVybiBWUENvbmZp
Z3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfNzA5XzY7Ci0gICAgY2FzZSBQcmltYXJpZXM6OmtV
bnNwZWNpZmllZDoKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVz
OjpVbnNwZWNpZmllZDsKLSAgICBjYXNlIFByaW1hcmllczo6a0J0NDcwTToKLSAgICAgICAgcmV0
dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF80NzBfNl9NOwotICAgIGNhc2Ug
UHJpbWFyaWVzOjprQnQ0NzBCZzoKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9y
UHJpbWFyaWVzOjpCVF80NzBfN19CRzsKLSAgICBjYXNlIFByaW1hcmllczo6a1NtcHRlMTcwTToK
LSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF82MDFfNzsK
LSAgICBjYXNlIFByaW1hcmllczo6a1NtcHRlMjQwTToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmln
dXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9TVF8yNDA7Ci0gICAgY2FzZSBQcmltYXJpZXM6
OmtGaWxtOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkZp
bG07Ci0gICAgY2FzZSBQcmltYXJpZXM6OmtCdDIwMjA6Ci0gICAgICAgIHJldHVybiBWUENvbmZp
Z3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U7Ci0g
ICAgY2FzZSBQcmltYXJpZXM6OmtTbXB0ZVN0NDI4MToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmln
dXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9TVF80MjhfMTsKLSAgICBjYXNlIFByaW1hcmll
czo6a1NtcHRlUnA0MzE6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1h
cmllczo6U01QVEVfUlBfNDMxXzI7Ci0gICAgY2FzZSBQcmltYXJpZXM6OmtTbXB0ZUVnNDMyOgot
ICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX0VHXzQz
Ml8xOwotICAgIGNhc2UgUHJpbWFyaWVzOjprSmVkZWNQMjJQaG9zcGhvcnM6Ci0gICAgICAgIHJl
dHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6RUJVX1RlY2hfMzIxM19FOwotICAg
IH0KLX0KKyAgICBBU1NFUlQocmVhZGVyKTsKKyAgICBpZiAoIXJlYWRlcikKKyAgICAgICAgcmV0
dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkpOwogCi1zdGF0aWMgQ0ZTdHJpbmdS
ZWYgY29udmVydFRvQ01Db2xvclByaW1hcmllcyh1aW50OF90IHByaW1hcmllcykKLXsKLSAgICBz
d2l0Y2ggKHByaW1hcmllcykgewotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJp
ZXM6OkJUXzcwOV82OgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmll
c19JVFVfUl83MDlfMjsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpF
QlVfVGVjaF8zMjEzX0U6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFy
aWVzX0VCVV8zMjEzOwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJU
XzYwMV83OgotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NU
XzI0MDoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfU01QVEVf
QzsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9SUF80MzFf
MjoKLSAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJpZXNfRENJ
X1AzOwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX0VHXzQz
Ml8xOgotICAgICAgICByZXR1cm4ga0NNRm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19Q
M19ENjU7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfMjAyMF9O
b25jb25zdGFudF9MdW1pbmFuY2U6Ci0gICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlv
bkNvbG9yUHJpbWFyaWVzX0lUVV9SXzIwMjA7Ci0gICAgfQorICAgIGlmICghbV9jdXJyZW50Qmxv
Y2spCisgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprSW52YWxpZEVsZW1lbnRJZCk7CiAK
LSAgICByZXR1cm4gbnVsbHB0cjsKLX0KKyAgICBhdXRvKiBibG9jayA9IFdURjo6c3dpdGNoT24o
Km1fY3VycmVudEJsb2NrLCBbXShCbG9jayYgYmxvY2spIHsKKyAgICAgICAgcmV0dXJuICZibG9j
azsKKyAgICB9LCBbXShTaW1wbGVCbG9jayYgYmxvY2spIC0+IEJsb2NrKiB7CisgICAgICAgIHJl
dHVybiAmYmxvY2s7CisgICAgfSk7CisgICAgaWYgKCFibG9jaykKKyAgICAgICAgcmV0dXJuIFN0
YXR1cyhTdGF0dXM6OmtJbnZhbGlkRWxlbWVudElkKTsKIAotc3RhdGljIHVpbnQ4X3QgY29udmVy
dFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MoY29uc3QgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3Mm
IGNoYXJhY3RlcmlzdGljcykKLXsKLSAgICBzd2l0Y2ggKGNoYXJhY3RlcmlzdGljcykgewotICAg
IGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtCdDcwOToKLSAgICAgICAgcmV0dXJuIFZQ
Q29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF83MDlfNjsKLSAgICBjYXNl
IFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprVW5zcGVjaWZpZWQ6Ci0gICAgICAgIHJldHVybiBW
UENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6VW5zcGVjaWZpZWQ7Ci0gICAg
Y2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0dhbW1hMjJjdXJ2ZToKLSAgICAgICAgcmV0
dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF80NzBfNl9NOwot
ICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtHYW1tYTI4Y3VydmU6Ci0gICAgICAg
IHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfNDcwXzdf
Qkc7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a1NtcHRlMTcwTToKLSAgICAg
ICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF82MDFf
NzsKLSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprU21wdGUyNDBNOgotICAgICAg
ICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NU
XzI0MDsKLSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprTGluZWFyOgotICAgICAg
ICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxpbmVhcjsK
LSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprTG9nOgotICAgICAgICByZXR1cm4g
VlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxvZ3JpdGhtaWM7Ci0gICAg
Y2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0xvZ1NxcnQ6Ci0gICAgICAgIHJldHVybiBW
UENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TG9ncml0aG1pY19TcXJ0Owot
ICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtJZWM2MTk2NjI0OgotICAgICAgICBy
ZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OklFQ182MTk2Nl8y
XzQ7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0J0MTM2MUV4dGVuZGVkQ29s
b3VyR2FtdXQ6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6QlRfMTM2MV8wOwotICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtJ
ZWM2MTk2NjIxOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OklFQ182MTk2Nl8yXzE7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6azEwQml0QnQyMDIwOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJD
aGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTBiaXQ7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6azEyQml0QnQyMDIwOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTJiaXQ7Ci0gICAgY2FzZSBUcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6a1NtcHRlU3QyMDg0OgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0
aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzIwODQ7Ci0gICAgY2FzZSBUcmFu
c2ZlckNoYXJhY3RlcmlzdGljczo6a1NtcHRlU3Q0MjgxOgotICAgICAgICByZXR1cm4gVlBDb25m
aWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzQyOF8xOwotICAgIGNh
c2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtBcmliU3RkQjY3SGxnOgotICAgICAgICByZXR1
cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIxMDBfSExHOwor
ICAgIGF1dG8gdHJhY2tOdW1iZXIgPSBibG9jay0+dHJhY2tfbnVtYmVyOworICAgIGF1dG8qIHRy
YWNrRGF0YSA9IHRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHRyYWNrTnVtYmVyKTsKKyAgICBpZiAo
IXRyYWNrRGF0YSkgeworICAgICAgICBFUlJPUl9MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklF
UiwgIklnbm9yaW5nIHVua25vd24gdHJhY2sgbnVtYmVyICIsIHRyYWNrTnVtYmVyKTsKKyAgICAg
ICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtJbnZhbGlkRWxlbWVudElkKTsKICAgICB9Ci19CiAK
LXN0YXRpYyBDRlN0cmluZ1JlZiBjb252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24odWludDhfdCBj
aGFyYWN0ZXJpc3RpY3MpCi17Ci0gICAgc3dpdGNoIChjaGFyYWN0ZXJpc3RpY3MpIHsKLSAgICBj
YXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF83MDlfNjoKLSAg
ICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl83MDlfMjsK
LSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9T
VF8yNDA6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlclRyYW5zZmVyRnVuY3Rpb25fU01Q
VEVfMjQwTV8xOTk1OwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OlNNUFRFX1NUXzIwODQ6Ci0gICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlv
blRyYW5zZmVyRnVuY3Rpb25fU01QVEVfU1RfMjA4NF9QUTsKLSAgICBjYXNlIFZQQ29uZmlndXJh
dGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMDIwXzEwYml0OgotICAgIGNhc2UgVlBD
b25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTJiaXQ6Ci0gICAg
ICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fSVRVX1JfMjAy
MDsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBU
RV9TVF80MjhfMToKLSAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJG
dW5jdGlvbl9TTVBURV9TVF80MjhfMTsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzOjpCVF8yMTAwX0hMRzoKLSAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERl
c2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl8yMTAwX0hMRzsKLSAgICBjYXNlIFZQQ29u
ZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJRUNfNjE5NjZfMl8xOgotICAgICAg
ICByZXR1cm4gUEFMOjpjYW5Mb2FkX0NvcmVNZWRpYV9rQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5z
ZmVyRnVuY3Rpb25fc1JHQigpID8gZ2V0X0NvcmVNZWRpYV9rQ01Gb3JtYXREZXNjcmlwdGlvblRy
YW5zZmVyRnVuY3Rpb25fc1JHQigpIDogbnVsbHB0cjsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlv
blRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMaW5lYXI6Ci0gICAgICAgIHJldHVybiBrQ01Gb3Jt
YXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fTGluZWFyOworICAgIHN3aXRjaCAodHJhY2tE
YXRhLT5jb2RlYygpKSB7CisgICAgY2FzZSBDb2RlY1R5cGU6OlZQOToKKyAgICBjYXNlIENvZGVj
VHlwZTo6Vm9yYmlzOgorICAgIGNhc2UgQ29kZWNUeXBlOjpPcHVzOgorICAgICAgICBicmVhazsK
KworICAgIGNhc2UgQ29kZWNUeXBlOjpVbnN1cHBvcnRlZDoKKyAgICAgICAgcmV0dXJuIFNraXAo
cmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgcmV0dXJuIHRyYWNrRGF0YS0+Y29uc3VtZUZyYW1lRGF0YSgqcmVhZGVyLCBtZXRhZGF0YSwg
Ynl0ZXNSZW1haW5pbmcsIENNVGltZU1ha2UoYmxvY2stPnRpbWVjb2RlICsgbV9jdXJyZW50VGlt
ZWNvZGUsIG1fdGltZXNjYWxlKSwgYmxvY2stPm51bV9mcmFtZXMpOwogfQogCi1zdGF0aWMgdWlu
dDhfdCBjb252ZXJ0VG9NYXRyaXhDb2VmZmljaWVudHMoY29uc3QgTWF0cml4Q29lZmZpY2llbnRz
JiBjb2VmZmljaWVudHMpCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnByb3ZpZGVNZWRp
YURhdGEoUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBzYW1wbGVCdWZmZXIsIHVpbnQ2NF90
IHRyYWNrSUQpCiB7Ci0gICAgc3dpdGNoIChjb2VmZmljaWVudHMpIHsKLSAgICBjYXNlIE1hdHJp
eENvZWZmaWNpZW50czo6a1JnYjoKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJp
eENvZWZmaWNpZW50czo6SWRlbnRpdHk7Ci0gICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtC
dDcwOToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6
QlRfNzA5XzY7Ci0gICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtVbnNwZWNpZmllZDoKLSAg
ICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6VW5zcGVjaWZp
ZWQ7Ci0gICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtGY2M6Ci0gICAgICAgIHJldHVybiBW
UENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkZDQzsKLSAgICBjYXNlIE1hdHJpeENv
ZWZmaWNpZW50czo6a0J0NDcwQmc6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRy
aXhDb2VmZmljaWVudHM6OkJUXzQ3MF83X0JHOwotICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRz
OjprU21wdGUxNzBNOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZp
Y2llbnRzOjpCVF82MDFfNzsKLSAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a1NtcHRlMjQw
TToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6U01Q
VEVfU1RfMjQwOwotICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprWUNnQ286Ci0gICAgICAg
IHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OllDZ0NvOwotICAgIGNh
c2UgTWF0cml4Q29lZmZpY2llbnRzOjprQnQyMDIwTm9uY29uc3RhbnRMdW1pbmFuY2U6Ci0gICAg
ICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzIwMjBfTm9u
Y29uc3RhbnRfTHVtaW5hbmNlOwotICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprQnQyMDIw
Q29uc3RhbnRMdW1pbmFuY2U6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhD
b2VmZmljaWVudHM6OkJUXzIwMjBfQ29uc3RhbnRfTHVtaW5hbmNlOwotICAgIH0KKyAgICBjYWxs
T25NYWluVGhyZWFkKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHNhbXBs
ZUJ1ZmZlciA9IFdURk1vdmUoc2FtcGxlQnVmZmVyKSwgdHJhY2tJRF0gKCkgbXV0YWJsZSB7Cisg
ICAgICAgIGlmICghbV9kaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2spCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgYXV0byBtZWRpYVNhbXBsZSA9IE1lZGlhU2FtcGxlQVZGT2JqQzo6
Y3JlYXRlKHNhbXBsZUJ1ZmZlci5nZXQoKSwgdHJhY2tJRCk7CisgICAgICAgIG1fZGlkUHJvdmlk
ZU1lZGlhRGF0YUNhbGxiYWNrKFdURk1vdmUobWVkaWFTYW1wbGUpLCB0cmFja0lELCBlbXB0eVN0
cmluZygpKTsKKyAgICB9KTsKIH0KIAotc3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNWUNi
Q1JNYXRyaXgodWludDhfdCBjb2VmZmljaWVudHMpCisjZGVmaW5lIFBBUlNFUl9MT0dfRVJST1Jf
SUZfUE9TU0lCTEUoLi4uKSBpZiAocGFyc2VyKCkubG9nZ2VyUHRyKCkpIHBhcnNlcigpLmxvZ2dl
clB0cigpLT5lcnJvcihsb2dDaGFubmVsKCksIFdURjo6TG9nZ2VyOjpMb2dTaXRlSWRlbnRpZmll
cihsb2dDbGFzc05hbWUoKSwgX19mdW5jX18sIHBhcnNlcigpLmxvZ0lkZW50aWZpZXIoKSksIF9f
VkFfQVJHU19fKQorCit3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9U
cmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkZXIsIGNvbnN0IEZy
YW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcsIGNvbnN0IENN
VGltZSYgcHJlc2VudGF0aW9uVGltZSwgaW50IHNhbXBsZUNvdW50KQogewotICAgIHN3aXRjaCAo
Y29lZmZpY2llbnRzKSB7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVu
dHM6OkJUXzIwMjBfTm9uY29uc3RhbnRfTHVtaW5hbmNlOgotICAgICAgICByZXR1cm4ga0NNRm9y
bWF0RGVzY3JpcHRpb25ZQ2JDck1hdHJpeF9JVFVfUl8yMDIwOwotICAgIGNhc2UgVlBDb25maWd1
cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF80NzBfN19CRzoKLSAgICBjYXNlIFZQQ29uZmln
dXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfNjAxXzc6Ci0gICAgICAgIHJldHVybiBrQ1ZJ
bWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzYwMV80OwotICAgIGNhc2UgVlBDb25maWd1cmF0
aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF83MDlfNjoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdl
QnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNzA5XzI7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25N
YXRyaXhDb2VmZmljaWVudHM6OlNNUFRFX1NUXzI0MDoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdl
QnVmZmVyWUNiQ3JNYXRyaXhfU01QVEVfMjQwTV8xOTk1OwotICAgIH0KKyAgICBDTUJsb2NrQnVm
ZmVyUmVmIHJhd0Jsb2NrQnVmZmVyID0gbnVsbHB0cjsKIAotICAgIHJldHVybiBudWxscHRyOwot
fQorICAgIGlmICghbV9jdXJyZW50QmxvY2tCdWZmZXIpIHsKKyAgICAgICAgYXV0byBlcnIgPSBD
TUJsb2NrQnVmZmVyQ3JlYXRlV2l0aE1lbW9yeUJsb2NrKGtDRkFsbG9jYXRvckRlZmF1bHQsIG51
bGxwdHIsIG1ldGFkYXRhLnNpemUsIGtDRkFsbG9jYXRvckRlZmF1bHQsIG51bGxwdHIsIDAsIG1l
dGFkYXRhLnNpemUsIDAsICZyYXdCbG9ja0J1ZmZlcik7CisgICAgICAgIGlmIChlcnIpIHsKKyAg
ICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQmxvY2tCdWZmZXJDcmVh
dGVXaXRoTWVtb3J5QmxvY2sgZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIpOworICAgICAgICAgICAg
cmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOworICAgICAgICB9CiAKLXN0YXRp
YyB1aW50OF90IGNvbnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJzYW1wbGluZyh1aW50NjRf
dCB4LCB1aW50NjRfdCB5KQotewotICAgIGlmICh4ICYgeSkKLSAgICAgICAgcmV0dXJuIFZQQ29u
ZmlndXJhdGlvbkNocm9tYVN1YnNhbXBsaW5nOjpTdWJzYW1wbGluZ180MjBfQ29sb2NhdGVkOwot
ICAgIGlmICh4ICYgIXkpCi0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25DaHJvbWFTdWJz
YW1wbGluZzo6U3Vic2FtcGxpbmdfNDIyOwotICAgIGlmICgheCAmICF5KQotICAgICAgICByZXR1
cm4gVlBDb25maWd1cmF0aW9uQ2hyb21hU3Vic2FtcGxpbmc6OlN1YnNhbXBsaW5nXzQ0NDsKLSAg
ICAvLyBUaGlzIGluZGljYXRlcyA0OjQ6MCBzdWJzYW1wbGluZywgd2hpY2ggaXMgbm90IGV4cHJl
c3NhYmxlIGluIHRoZSAndnBjQycgYm94LiBEZWZhdWx0IHRvIDQ6MjowLgotICAgIHJldHVybiBW
UENvbmZpZ3VyYXRpb25DaHJvbWFTdWJzYW1wbGluZzo6U3Vic2FtcGxpbmdfNDIwX0NvbG9jYXRl
ZDsKLX0KKyAgICAgICAgbV9jdXJyZW50QmxvY2tCdWZmZXIgPSBhZG9wdENGKHJhd0Jsb2NrQnVm
ZmVyKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2tCdWZmZXJQb3NpdGlvbiA9IDA7CiAKLXN0YXRp
YyBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRp
b25Gcm9tVlA5SGVhZGVyUGFyc2VyKGNvbnN0IHZwOV9wYXJzZXI6OlZwOUhlYWRlclBhcnNlciYg
cGFyc2VyLCBjb25zdCB3ZWJtOjpFbGVtZW50PENvbG91cj4mIGNvbG9yKQotewotICAgIC8vIFJl
ZjogIlZQIENvZGVjIElTTyBNZWRpYSBGaWxlIEZvcm1hdCBCaW5kaW5nLCB2MS4wLCAyMDE3LTAz
LTMxIgotICAgIC8vIDxodHRwczovL3d3dy53ZWJtcHJvamVjdC5vcmcvdnA5L21wNC8+Ci0gICAg
Ly8KLSAgICAvLyBjbGFzcyBWUENvZGVjQ29uZmlndXJhdGlvbkJveCBleHRlbmRzIEZ1bGxCb3go
J3ZwY0MnLCB2ZXJzaW9uID0gMSwgMCkKLSAgICAvLyB7Ci0gICAgLy8gICAgIFZQQ29kZWNDb25m
aWd1cmF0aW9uUmVjb3JkKCkgdnBjQ29uZmlnOwotICAgIC8vIH0KLSAgICAvLwotICAgIC8vIGFs
aWduZWQgKDgpIGNsYXNzIFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkIHsKLSAgICAvLyAgICAg
dW5zaWduZWQgaW50ICg4KSAgICAgcHJvZmlsZTsKLSAgICAvLyAgICAgdW5zaWduZWQgaW50ICg4
KSAgICAgbGV2ZWw7Ci0gICAgLy8gICAgIHVuc2lnbmVkIGludCAoNCkgICAgIGJpdERlcHRoOwot
ICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDMpICAgICBjaHJvbWFTdWJzYW1wbGluZzsKLSAgICAv
LyAgICAgdW5zaWduZWQgaW50ICgxKSAgICAgdmlkZW9GdWxsUmFuZ2VGbGFnOwotICAgIC8vICAg
ICB1bnNpZ25lZCBpbnQgKDgpICAgICBjb2xvdXJQcmltYXJpZXM7Ci0gICAgLy8gICAgIHVuc2ln
bmVkIGludCAoOCkgICAgIHRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOwotICAgIC8vICAgICB1bnNp
Z25lZCBpbnQgKDgpICAgICBtYXRyaXhDb2VmZmljaWVudHM7Ci0gICAgLy8gICAgIHVuc2lnbmVk
IGludCAoMTYpICAgIGNvZGVjSW50aWFsaXphdGlvbkRhdGFTaXplOwotICAgIC8vICAgICB1bnNp
Z25lZCBpbnQgKDgpW10gICBjb2RlY0ludGlhbGl6YXRpb25EYXRhOwotICAgIC8vIH0KLSAgICAv
LwotICAgIC8vIGNvZGVjSW50aWFsaXphdGlvbkRhdGFTaXpl4oCLRm9yIFZQOCBhbmQgVlA5IHRo
aXMgZmllbGQgbXVzdCBiZSAwLgotICAgIC8vIGNvZGVjSW50aWFsaXphdGlvbkRhdGHigItiaW5h
cnkgY29kZWMgaW5pdGlhbGl6YXRpb24gZGF0YS4gTm90IHVzZWQgZm9yIFZQOCBhbmQgVlA5Lgot
ICAgIC8vCi0gICAgLy8gRklYTUU6IENvbnZlcnQgZXhpc3Rpbmcgc3RydWN0IHRvIGFuIElTT0Jv
eCBhbmQgcmVwbGFjZSB0aGUgd3JpdGluZyBjb2RlIGJlbG93Ci0gICAgLy8gd2l0aCBhIHN1YmNs
YXNzIG9mIElTT0Z1bGxCb3guCi0KLSAgICBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCByZWNv
cmQ7Ci0KLSAgICByZWNvcmQucHJvZmlsZSA9IHBhcnNlci5wcm9maWxlKCk7Ci0gICAgLy8gQ29y
ZU1lZGlhIGRvZXMgbmF0IGNhcmUgYWJvdXQgdGhlIFZQOSBjb2RlYyBsZXZlbDsgaGFyZC1jb2Rl
IHRvIExldmVsIDEuMCBoZXJlOgotICAgIHJlY29yZC5sZXZlbCA9IDEwOwotICAgIHJlY29yZC5i
aXREZXB0aCA9IHBhcnNlci5iaXRfZGVwdGgoKTsKLSAgICByZWNvcmQudmlkZW9GdWxsUmFuZ2VG
bGFnID0gcGFyc2VyLmNvbG9yX3JhbmdlKCkgPyBWUENvbmZpZ3VyYXRpb25SYW5nZTo6RnVsbFJh
bmdlIDogVlBDb25maWd1cmF0aW9uUmFuZ2U6OlZpZGVvUmFuZ2U7Ci0gICAgcmVjb3JkLmNocm9t
YVN1YnNhbXBsaW5nID0gY29udmVydFN1YnNhbXBsaW5nWFlUb0Nocm9tYVN1YnNhbXBsaW5nKHBh
cnNlci5zdWJzYW1wbGluZ194KCksIHBhcnNlci5zdWJzYW1wbGluZ195KCkpOwotICAgIHJlY29y
ZC5jb2xvclByaW1hcmllcyA9IFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpVbnNwZWNp
ZmllZDsKLSAgICByZWNvcmQudHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MgPSBWUENvbmZpZ3VyYXRp
b25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6VW5zcGVjaWZpZWQ7Ci0gICAgcmVjb3JkLm1hdHJp
eENvZWZmaWNpZW50cyA9IFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6VW5zcGVj
aWZpZWQ7Ci0KLSAgICAvLyBDb250YWluZXIgY29sb3IgdmFsdWVzIGNhbiBvdmVycmlkZSBwZXIt
c2FtcGxlIG9uZXM6Ci0gICAgaWYgKGNvbG9yLmlzX3ByZXNlbnQoKSkgewotICAgICAgICBhdXRv
JiBjb2xvclZhbHVlID0gY29sb3IudmFsdWUoKTsKLSAgICAgICAgaWYgKGNvbG9yVmFsdWUuY2hy
b21hX3N1YnNhbXBsaW5nX3guaXNfcHJlc2VudCgpICYmIGNvbG9yVmFsdWUuY2hyb21hX3N1YnNh
bXBsaW5nX3kuaXNfcHJlc2VudCgpKQotICAgICAgICAgICAgcmVjb3JkLmNocm9tYVN1YnNhbXBs
aW5nID0gY29udmVydFN1YnNhbXBsaW5nWFlUb0Nocm9tYVN1YnNhbXBsaW5nKGNvbG9yVmFsdWUu
Y2hyb21hX3N1YnNhbXBsaW5nX3gudmFsdWUoKSwgY29sb3JWYWx1ZS5jaHJvbWFfc3Vic2FtcGxp
bmdfeS52YWx1ZSgpKTsKLSAgICAgICAgaWYgKGNvbG9yVmFsdWUucmFuZ2UuaXNfcHJlc2VudCgp
ICYmIGNvbG9yVmFsdWUucmFuZ2UudmFsdWUoKSAhPSBSYW5nZTo6a1Vuc3BlY2lmaWVkKQotICAg
ICAgICAgICAgcmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxhZyA9IGNvbG9yVmFsdWUucmFuZ2UudmFs
dWUoKSA9PSBSYW5nZTo6a0Z1bGwgPyBWUENvbmZpZ3VyYXRpb25SYW5nZTo6RnVsbFJhbmdlIDog
VlBDb25maWd1cmF0aW9uUmFuZ2U6OlZpZGVvUmFuZ2U7Ci0gICAgICAgIGlmIChjb2xvclZhbHVl
LmJpdHNfcGVyX2NoYW5uZWwuaXNfcHJlc2VudCgpKQotICAgICAgICAgICAgcmVjb3JkLmJpdERl
cHRoID0gY29sb3JWYWx1ZS5iaXRzX3Blcl9jaGFubmVsLnZhbHVlKCk7Ci0gICAgICAgIGlmIChj
b2xvclZhbHVlLnRyYW5zZmVyX2NoYXJhY3RlcmlzdGljcy5pc19wcmVzZW50KCkpCi0gICAgICAg
ICAgICByZWNvcmQudHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MgPSBjb252ZXJ0VG9UcmFuc2ZlckNo
YXJhY3RlcmlzdGljcyhjb2xvclZhbHVlLnRyYW5zZmVyX2NoYXJhY3RlcmlzdGljcy52YWx1ZSgp
KTsKLSAgICAgICAgaWYgKGNvbG9yVmFsdWUubWF0cml4X2NvZWZmaWNpZW50cy5pc19wcmVzZW50
KCkpCi0gICAgICAgICAgICByZWNvcmQubWF0cml4Q29lZmZpY2llbnRzID0gY29udmVydFRvTWF0
cml4Q29lZmZpY2llbnRzKGNvbG9yVmFsdWUubWF0cml4X2NvZWZmaWNpZW50cy52YWx1ZSgpKTsK
LSAgICAgICAgaWYgKGNvbG9yVmFsdWUucHJpbWFyaWVzLmlzX3ByZXNlbnQoKSkKLSAgICAgICAg
ICAgIHJlY29yZC5jb2xvclByaW1hcmllcyA9IGNvbnZlcnRUb0NvbG9yUHJpbWFyaWVzKGNvbG9y
VmFsdWUucHJpbWFyaWVzLnZhbHVlKCkpOworICAgICAgICBlcnIgPSBDTUJsb2NrQnVmZmVyQXNz
dXJlQmxvY2tNZW1vcnkobV9jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCkpOworICAgICAgICBpZiAo
ZXJyKSB7CisgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUF1ZGlv
U2FtcGxlQnVmZmVyQ3JlYXRlV2l0aFBhY2tldERlc2NyaXB0aW9ucyBmYWlsZWQgd2l0aCBlcnJv
ciIsIGVycik7CisgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmlu
Zyk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBjb25zdGV4cHIgc2l6ZV90IFZQQ29kZWNDb25m
aWd1cmF0aW9uQ29udGVudHNTaXplID0gMTI7CisgICAgc2l6ZV90IGJ5dGVzVG9SZWFkID0gbWV0
YWRhdGEuc2l6ZSAtIG1fY3VycmVudEJsb2NrQnVmZmVyUG9zaXRpb247CisgICAgd2hpbGUgKGJ5
dGVzVG9SZWFkKSB7CisgICAgICAgIHNpemVfdCBzZWdtZW50U2l6ZUF0UG9zaXRpb24gPSAwOwor
ICAgICAgICB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBudWxscHRyOworICAgICAgICBhdXRv
IGVyciA9IENNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlcihtX2N1cnJlbnRCbG9ja0J1ZmZlci5n
ZXQoKSwgbV9jdXJyZW50QmxvY2tCdWZmZXJQb3NpdGlvbiwgJnNlZ21lbnRTaXplQXRQb3NpdGlv
biwgbnVsbHB0ciwgKGNoYXIqKikmYmxvY2tCdWZmZXJEYXRhKTsKKyAgICAgICAgaWYgKGVycikg
eworICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZl
ckdldERhdGFQb2ludGVyIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKKyAgICAgICAgICAgIHJl
dHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKKyAgICAgICAgfQogCi0gICAgdWlu
dDMyX3QgdmVyc2lvbkFuZEZsYWdzID0gMSA8PCAyNDsKLSAgICB1aW50OF90IGJpdERlcHRoQ2hy
b21hQW5kUmFuZ2UgPSAoMHhGICYgcmVjb3JkLmJpdERlcHRoKSA8PCA0IHwgKDB4NyAmIHJlY29y
ZC5jaHJvbWFTdWJzYW1wbGluZykgPDwgMSB8ICgweDEgJiByZWNvcmQudmlkZW9GdWxsUmFuZ2VG
bGFnKTsKLSAgICB1aW50MTZfdCBjb2RlY0ludGlhbGl6YXRpb25EYXRhU2l6ZSA9IDA7CisgICAg
ICAgIHNpemVfdCBieXRlc1RvUmVhZEZyb21UaGlzU2VnbWVudCA9IHN0ZDo6bWluKGJ5dGVzVG9S
ZWFkLCBzZWdtZW50U2l6ZUF0UG9zaXRpb24pOworICAgICAgICB1aW50NjRfdCBieXRlc1JlYWQ7
CiAKLSAgICBhdXRvIHZpZXcgPSBKU0M6OkRhdGFWaWV3OjpjcmVhdGUoQXJyYXlCdWZmZXI6OmNy
ZWF0ZShWUENvZGVjQ29uZmlndXJhdGlvbkNvbnRlbnRzU2l6ZSwgMSksIDAsIFZQQ29kZWNDb25m
aWd1cmF0aW9uQ29udGVudHNTaXplKTsKLSAgICB2aWV3LT5zZXQoMCwgdmVyc2lvbkFuZEZsYWdz
LCBmYWxzZSk7Ci0gICAgdmlldy0+c2V0KDQsIHJlY29yZC5wcm9maWxlLCBmYWxzZSk7Ci0gICAg
dmlldy0+c2V0KDUsIHJlY29yZC5sZXZlbCwgZmFsc2UpOwotICAgIHZpZXctPnNldCg2LCBiaXRE
ZXB0aENocm9tYUFuZFJhbmdlLCBmYWxzZSk7Ci0gICAgdmlldy0+c2V0KDcsIHJlY29yZC5jb2xv
clByaW1hcmllcywgZmFsc2UpOwotICAgIHZpZXctPnNldCg4LCByZWNvcmQudHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3MsIGZhbHNlKTsKLSAgICB2aWV3LT5zZXQoOSwgcmVjb3JkLm1hdHJpeENvZWZm
aWNpZW50cywgZmFsc2UpOwotICAgIHZpZXctPnNldCgxMCwgY29kZWNJbnRpYWxpemF0aW9uRGF0
YVNpemUsIGZhbHNlKTsKKyAgICAgICAgYXV0byBzdGF0dXMgPSByZWFkZXIuUmVhZChieXRlc1Rv
UmVhZEZyb21UaGlzU2VnbWVudCwgKHVpbnQ4X3QqKWJsb2NrQnVmZmVyRGF0YSwgJmJ5dGVzUmVh
ZCk7CisgICAgICAgIGJ5dGVzVG9SZWFkIC09IGJ5dGVzUmVhZDsKKyAgICAgICAgKmJ5dGVzUmVt
YWluaW5nIC09IGJ5dGVzUmVhZDsKKyAgICAgICAgbV9jdXJyZW50QmxvY2tCdWZmZXJQb3NpdGlv
biArPSBieXRlc1JlYWQ7CiAKLSAgICBhdXRvIGRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCAoY29uc3QgVUludDggKil2aWV3LT5kYXRhKCksIHZpZXctPmJ5
dGVMZW5ndGgoKSkpOworICAgICAgICAvLyBGSVhNRTogV2UgY2FuJ3QgeWV0IGhhbmRsZSBwYXJz
aW5nIGEgRnJhbWUgdGhhdCBkb2Vzbid0IGhhdmUgYWxsIGl0cyBtZW1vcnkgYXZhaWxhYmxlLgor
ICAgICAgICBpZiAoc3RhdHVzLmNvZGUgPT0gd2VibTo6U3RhdHVzOjprT2tQYXJ0aWFsIHx8IHN0
YXR1cy5jb2RlID09IHdlYm06OlN0YXR1czo6a1dvdWxkQmxvY2spCisgICAgICAgICAgICByZXR1
cm4gc3RhdHVzOworICAgIH0KIAotICAgIENGVHlwZVJlZiBjb25maWd1cmF0aW9uS2V5c1tdID0g
eyBDRlNUUigidnBjQyIpIH07Ci0gICAgQ0ZUeXBlUmVmIGNvbmZpZ3VyYXRpb25WYWx1ZXNbXSA9
IHsgZGF0YS5nZXQoKSB9OwotICAgIGF1dG8gY29uZmlndXJhdGlvbkRpY3QgPSBhZG9wdENGKENG
RGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb25maWd1cmF0aW9uS2V5cywg
Y29uZmlndXJhdGlvblZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChjb25maWd1cmF0aW9uS2V5cyks
ICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVD
YWxsQmFja3MpKTsKKyAgICBjcmVhdGVTYW1wbGVCdWZmZXIocHJlc2VudGF0aW9uVGltZSwgc2Ft
cGxlQ291bnQpOwogCi0gICAgVmVjdG9yPENGVHlwZVJlZj4gZXh0ZW5zaW9uc0tleXMgeyBrQ01G
b3JtYXREZXNjcmlwdGlvbkV4dGVuc2lvbl9TYW1wbGVEZXNjcmlwdGlvbkV4dGVuc2lvbkF0b21z
IH07Ci0gICAgVmVjdG9yPENGVHlwZVJlZj4gZXh0ZW5zaW9uc1ZhbHVlcyA9IHsgY29uZmlndXJh
dGlvbkRpY3QuZ2V0KCkgfTsKKyAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmlu
Zyk7Cit9CiAKLSAgICBpZiAocmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxhZyA9PSBWUENvbmZpZ3Vy
YXRpb25SYW5nZTo6RnVsbFJhbmdlKSB7Ci0gICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChr
Q01Gb3JtYXREZXNjcmlwdGlvbkV4dGVuc2lvbl9GdWxsUmFuZ2VWaWRlbyk7Ci0gICAgICAgIGV4
dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGtDRkJvb2xlYW5UcnVlKTsKK3ZvaWQgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcihjb25zdCBDTVRp
bWUmIHByZXNlbnRhdGlvblRpbWUsIGludCBzYW1wbGVDb3VudCkKK3sKKyAgICB1aW50OF90KiBi
bG9ja0J1ZmZlckRhdGEgPSBudWxscHRyOworICAgIHNpemVfdCBzZWdtZW50U2l6ZUF0UG9zaXRp
b24gPSAwOworICAgIGF1dG8gZXJyID0gQ01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyKG1fY3Vy
cmVudEJsb2NrQnVmZmVyLmdldCgpLCAwLCAmc2VnbWVudFNpemVBdFBvc2l0aW9uLCBudWxscHRy
LCAoY2hhcioqKSZibG9ja0J1ZmZlckRhdGEpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUEFS
U0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyIGZh
aWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
IChhdXRvIGNtQ29sb3JQcmltYXJpZXMgPSBjb252ZXJ0VG9DTUNvbG9yUHJpbWFyaWVzKHJlY29y
ZC5jb2xvclByaW1hcmllcykpIHsKLSAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtDVklt
YWdlQnVmZmVyQ29sb3JQcmltYXJpZXNLZXkpOwotICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFw
cGVuZChjbUNvbG9yUHJpbWFyaWVzKTsKKyAgICBpZiAoIW1faGVhZGVyUGFyc2VyLlBhcnNlVW5j
b21wcmVzc2VkSGVhZGVyKGJsb2NrQnVmZmVyRGF0YSwgc2VnbWVudFNpemVBdFBvc2l0aW9uKSkg
eworICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJQYXJzZVVuY29tcHJlc3Nl
ZEhlYWRlciBmYWlsZWQiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdXRv
IGNtVHJhbnNmZXJGdW5jdGlvbiA9IGNvbnZlcnRUb0NNVHJhbnNmZXJGdW5jdGlvbihyZWNvcmQu
dHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MpKSB7Ci0gICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVu
ZChrQ1ZJbWFnZUJ1ZmZlclRyYW5zZmVyRnVuY3Rpb25LZXkpOwotICAgICAgICBleHRlbnNpb25z
VmFsdWVzLmFwcGVuZChjbVRyYW5zZmVyRnVuY3Rpb24pOworICAgIC8vIE9ubHkgdXBkYXRlIHRo
ZSBmb3JtYXQgZGVzY3JpcHRpb24gd2hlbiB0aGUgaGVhZGVyIGluZGljYXRlcyB0aGF0IHRoZSBz
YW1wbGUgaXMKKyAgICAvLyBhIGtleS1mcmFtZSwgb3RoZXJ3aXNlIGNvbG9yIGluZm9ybWF0aW9u
IHdpbGwgbm90IGJlIHBhcnNlZC4KKyAgICBhdXRvIHRyYWNrID0gdGhpcy0+dHJhY2soKTsKKyAg
ICBpZiAobV9oZWFkZXJQYXJzZXIua2V5KCkpIHsKKyAgICAgICAgYXV0byBmb3JtYXREZXNjcmlw
dGlvbiA9IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOUhlYWRlclBhcnNlcihtX2hlYWRl
clBhcnNlciwgdHJhY2sudmlkZW8udmFsdWUoKS5jb2xvdXIpOworICAgICAgICBpZiAoIWZvcm1h
dERlc2NyaXB0aW9uKSB7CisgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxF
KCJmYWlsZWQgdG8gY3JlYXRlIGZvcm1hdCBkZXNjcmlwdGlvbiBmcm9tIFZQOSBoZWFkZXIiKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzZXRGb3JtYXREZXNjcmlw
dGlvbihXVEZNb3ZlKGZvcm1hdERlc2NyaXB0aW9uKSk7CiAgICAgfQogCi0gICAgaWYgKGF1dG8g
Y21NYXRyaXggPSBjb252ZXJ0VG9DTVlDYkNSTWF0cml4KHJlY29yZC5tYXRyaXhDb2VmZmljaWVu
dHMpKSB7Ci0gICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlcllDYkNy
TWF0cml4S2V5KTsKLSAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21NYXRyaXgpOwor
ICAgIC8vIEZJWE1FOiBBIGJsb2NrIG1pZ2h0IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBmcmFtZSwg
YnV0IG9ubHkgdGhpcyBmcmFtZSBoYXMgYmVlbiByZWFkIGludG8gYGN1cnJlbnRCbG9ja0J1ZmZl
cmAuCisgICAgLy8gQmVsb3cgd2UgY3JlYXRlIHNhbXBsZSBidWZmZXJzIGZvciBlYWNoIGZyYW1l
LCBlYWNoIHdpdGggdGhlIGJsb2NrJ3MgdGltZWNvZGUgYW5kIGBudW1fZnJhbWVzYCB2YWx1ZS4K
KyAgICAvLyBTaG91bGRuJ3Qgd2UgY3JlYXRlIGp1c3Qgb25lIHNhbXBsZSBidWZmZXIgb25jZSBh
bGwgdGhlIGJsb2NrJ3MgZnJhbWVzIGhhdmUgYmVlbiByZWFkIGludG8gYGN1cnJlbnRCbG9ja0J1
ZmZlcmA/CisKKyAgICB1aW50NjRfdCBkdXJhdGlvbiA9IDA7CisgICAgaWYgKHRyYWNrLmRlZmF1
bHRfZHVyYXRpb24uaXNfcHJlc2VudCgpKQorICAgICAgICBkdXJhdGlvbiA9IHRyYWNrLmRlZmF1
bHRfZHVyYXRpb24udmFsdWUoKSAqIHByZXNlbnRhdGlvblRpbWUudGltZXNjYWxlIC8gMTAwMDAw
MDAwMDsKKworICAgIENNU2FtcGxlQnVmZmVyUmVmIHJhd1NhbXBsZUJ1ZmZlciA9IG51bGxwdHI7
CisgICAgc2l6ZV90IGZyYW1lU2l6ZSA9IENNQmxvY2tCdWZmZXJHZXREYXRhTGVuZ3RoKG1fY3Vy
cmVudEJsb2NrQnVmZmVyLmdldCgpKTsKKyAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nID0g
eyBDTVRpbWVNYWtlKGR1cmF0aW9uLCBwcmVzZW50YXRpb25UaW1lLnRpbWVzY2FsZSksIHByZXNl
bnRhdGlvblRpbWUsIHByZXNlbnRhdGlvblRpbWUgfTsKKyAgICBlcnIgPSBDTVNhbXBsZUJ1ZmZl
ckNyZWF0ZVJlYWR5KGtDRkFsbG9jYXRvckRlZmF1bHQsIG1fY3VycmVudEJsb2NrQnVmZmVyLmdl
dCgpLCBmb3JtYXREZXNjcmlwdGlvbigpLmdldCgpLCBzYW1wbGVDb3VudCwgMSwgJnRpbWluZywg
MSwgJmZyYW1lU2l6ZSwgJnJhd1NhbXBsZUJ1ZmZlcik7CisgICAgaWYgKGVycikgeworICAgICAg
ICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5
IGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBh
dXRvIHNhbXBsZUJ1ZmZlciA9IGFkb3B0Q0YocmF3U2FtcGxlQnVmZmVyKTsKKworICAgIG1fY3Vy
cmVudEJsb2NrQnVmZmVyID0gbnVsbHB0cjsKKyAgICBtX2N1cnJlbnRCbG9ja0J1ZmZlclBvc2l0
aW9uID0gMDsKIAotICAgIGF1dG8gZXh0ZW5zaW9ucyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3Jl
YXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGV4dGVuc2lvbnNLZXlzLmRhdGEoKSwgZXh0ZW5zaW9u
c1ZhbHVlcy5kYXRhKCksIGV4dGVuc2lvbnNLZXlzLnNpemUoKSwgJmtDRlR5cGVEaWN0aW9uYXJ5
S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgIGlm
ICghbV9oZWFkZXJQYXJzZXIua2V5KCkpIHsKKyAgICAgICAgYXV0byBhdHRhY2htZW50c0FycmF5
ID0gQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5KHNhbXBsZUJ1ZmZlci5n
ZXQoKSwgdHJ1ZSk7CisgICAgICAgIEFTU0VSVChhdHRhY2htZW50c0FycmF5KTsKKyAgICAgICAg
aWYgKCFhdHRhY2htZW50c0FycmF5KSB7CisgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lG
X1BPU1NJQkxFKCJDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkgcmV0dXJu
ZWQgTlVMTCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZm9y
IChDRkluZGV4IGkgPSAwLCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChhdHRhY2htZW50c0FycmF5
KTsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYg
YXR0YWNobWVudHMgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4oQ0ZB
cnJheUdldFZhbHVlQXRJbmRleChhdHRhY2htZW50c0FycmF5LCBpKSk7CisgICAgICAgICAgICBD
RkRpY3Rpb25hcnlTZXRWYWx1ZShhdHRhY2htZW50cywga0NNU2FtcGxlQXR0YWNobWVudEtleV9O
b3RTeW5jLCBrQ0ZCb29sZWFuVHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBDTVZpZGVv
Rm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBudWxscHRyOwotICAgIGlm
IChub0VyciAhPSBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25DcmVhdGUoa0NGQWxsb2NhdG9yRGVm
YXVsdCwga0NNVmlkZW9Db2RlY1R5cGVfVlA5LCBwYXJzZXIud2lkdGgoKSwgcGFyc2VyLmhlaWdo
dCgpLCBleHRlbnNpb25zLmdldCgpLCAmZm9ybWF0RGVzY3JpcHRpb24pKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYWRvcHRDRihmb3JtYXREZXNjcmlwdGlvbik7CisgICAg
YXV0byB0cmFja0lEID0gdHJhY2sudHJhY2tfdWlkLnZhbHVlKCk7CisgICAgcGFyc2VyKCkucHJv
dmlkZU1lZGlhRGF0YShzYW1wbGVCdWZmZXIubGVha1JlZigpLCB0cmFja0lEKTsKIH0KLSNlbmRp
ZgogCi13ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25GcmFtZShjb25zdCBG
cmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgUmVhZGVyKiByZWFkZXIsIHVpbnQ2NF90KiBieXRlc1Jl
bWFpbmluZykKK3dlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNr
RGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwgY29uc3QgRnJhbWVN
ZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZywgY29uc3QgQ01UaW1l
JiBwcmVzZW50YXRpb25UaW1lLCBpbnQgc2FtcGxlQ291bnQpCiB7Ci0gICAgVU5VU0VEX1BBUkFN
KG1ldGFkYXRhKTsKLSAgICBVTlVTRURfUEFSQU0oYnl0ZXNSZW1haW5pbmcpOworICAgIEFTU0VS
VF9VTlVTRUQoc2FtcGxlQ291bnQsIHNhbXBsZUNvdW50ID09IDEpOwogCi0gICAgQVNTRVJUKHJl
YWRlcik7Ci0gICAgaWYgKCFyZWFkZXIpCi0gICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjpr
Tm90RW5vdWdoTWVtb3J5KTsKKyAgICBpZiAoIWZvcm1hdERlc2NyaXB0aW9uKCkpIHsKKyAgICAg
ICAgaWYgKCF0cmFjaygpLmNvZGVjX3ByaXZhdGUuaXNfcHJlc2VudCgpKSB7CisgICAgICAgICAg
ICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJBdWRpbyB0cmFjayBtaXNzaW5nIG1hZ2lj
IGNvb2tpZSIpOworICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5p
bmcpOworICAgICAgICB9CiAKLSAgICBpZiAoIW1fY3VycmVudEJsb2NrKQotICAgICAgICByZXR1
cm4gU3RhdHVzKFN0YXR1czo6a0ludmFsaWRFbGVtZW50SWQpOworICAgICAgICBSZXRhaW5QdHI8
Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gZm9ybWF0RGVzY3JpcHRpb247CisgICAgICAgIGF1dG8m
IHByaXZhdGVEYXRhID0gdHJhY2soKS5jb2RlY19wcml2YXRlLnZhbHVlKCk7CisgICAgICAgIGlm
IChjb2RlYygpID09IENvZGVjVHlwZTo6Vm9yYmlzKQorICAgICAgICAgICAgZm9ybWF0RGVzY3Jp
cHRpb24gPSBjcmVhdGVWb3JiaXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKHByaXZhdGVEYXRhLnNp
emUoKSwgcHJpdmF0ZURhdGEuZGF0YSgpKTsKKyAgICAgICAgZWxzZSBpZiAoY29kZWMoKSA9PSBD
b2RlY1R5cGU6Ok9wdXMpCisgICAgICAgICAgICBmb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZU9w
dXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKHByaXZhdGVEYXRhLnNpemUoKSwgcHJpdmF0ZURhdGEu
ZGF0YSgpKTsKIAotICAgIGF1dG8qIGJsb2NrID0gV1RGOjpzd2l0Y2hPbigqbV9jdXJyZW50Qmxv
Y2ssIFtdKEJsb2NrJiBibG9jaykgewotICAgICAgICByZXR1cm4gJmJsb2NrOwotICAgIH0sIFtd
KFNpbXBsZUJsb2NrJiBibG9jaykgLT4gQmxvY2sqIHsKLSAgICAgICAgcmV0dXJuICZibG9jazsK
LSAgICB9KTsKLSAgICBpZiAoIWJsb2NrKQotICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6
a0ludmFsaWRFbGVtZW50SWQpOworICAgICAgICBpZiAoIWZvcm1hdERlc2NyaXB0aW9uKSB7Cisg
ICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJGYWlsZWQgdG8gY3JlYXRl
IGZvcm1hdCBkZXNjcmlwdGlvbiBmcm9tIGF1ZGlvIHRyYWNrIGhlYWRlciIpOworICAgICAgICAg
ICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOworICAgICAgICB9CiAKLSAg
ICBhdXRvIHRyYWNrTnVtYmVyID0gYmxvY2stPnRyYWNrX251bWJlcjsKKyAgICAgICAgYXV0byBz
dHJlYW1EZXNjcmlwdGlvbiA9IENNQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkdldFN0cmVhbUJhc2lj
RGVzY3JpcHRpb24oZm9ybWF0RGVzY3JpcHRpb24uZ2V0KCkpOworICAgICAgICBpZiAoIXN0cmVh
bURlc2NyaXB0aW9uKSB7CisgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxF
KCJDTUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25HZXRTdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIGZhaWxl
ZCIpOworICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwor
ICAgICAgICB9CisgICAgICAgIG1fcGFja2V0RHVyYXRpb24gPSBDTVRpbWVNYWtlKHN0cmVhbURl
c2NyaXB0aW9uLT5tRnJhbWVzUGVyUGFja2V0LCBzdHJlYW1EZXNjcmlwdGlvbi0+bVNhbXBsZVJh
dGUpOwogCi0gICAgYXV0byogdHJhY2tEYXRhID0gdHJhY2tEYXRhRm9yVHJhY2tOdW1iZXIodHJh
Y2tOdW1iZXIpOwotICAgIGlmICghdHJhY2tEYXRhKQotICAgICAgICByZXR1cm4gU3RhdHVzKFN0
YXR1czo6a0ludmFsaWRFbGVtZW50SWQpOwotICAgIGF1dG8mIHRyYWNrID0gdHJhY2tEYXRhLT50
cmFjazsKKyAgICAgICAgc2V0Rm9ybWF0RGVzY3JpcHRpb24oV1RGTW92ZShmb3JtYXREZXNjcmlw
dGlvbikpOworICAgIH0KIAotICAgIHVpbnQ2NF90IGR1cmF0aW9uID0gMDsKLSAgICBpZiAodHJh
Y2suZGVmYXVsdF9kdXJhdGlvbi5pc19wcmVzZW50KCkpCi0gICAgICAgIGR1cmF0aW9uID0gdHJh
Y2suZGVmYXVsdF9kdXJhdGlvbi52YWx1ZSgpICogbV90aW1lc2NhbGUgLyAxMDAwMDAwMDAwOwor
ICAgIGlmIChtX3BhY2tldERhdGEuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fcGFja2V0RGF0YS5y
ZXNpemUobWV0YWRhdGEuc2l6ZSk7CisgICAgICAgIG1fcGFja2V0Qnl0ZXNSZWFkID0gMDsKKyAg
ICAgICAgbV9ieXRlT2Zmc2V0ID0gbWV0YWRhdGEucG9zaXRpb247CisgICAgICAgIG1fc2FtcGxl
UHJlc2VudGF0aW9uVGltZSA9IHByZXNlbnRhdGlvblRpbWU7CisgICAgfQogCi0jaWYgRU5BQkxF
KFZQOSkKLSAgICBpZiAodHJhY2suY29kZWNfaWQuaXNfcHJlc2VudCgpICYmIHRyYWNrLmNvZGVj
X2lkLnZhbHVlKCkgPT0gIlZfVlA5IikgewotICAgICAgICBpZiAoIXRyYWNrRGF0YS0+Y3VycmVu
dEJsb2NrQnVmZmVyKSB7Ci0gICAgICAgICAgICBDTUJsb2NrQnVmZmVyUmVmIHJhd0Jsb2NrQnVm
ZmVyID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGlmIChub0VyciAhPSBDTUJsb2NrQnVmZmVyQ3Jl
YXRlV2l0aE1lbW9yeUJsb2NrKGtDRkFsbG9jYXRvckRlZmF1bHQsIG51bGxwdHIsIG1ldGFkYXRh
LnNpemUsIGtDRkFsbG9jYXRvckRlZmF1bHQsIG51bGxwdHIsIDAsIG1ldGFkYXRhLnNpemUsIDAs
ICZyYXdCbG9ja0J1ZmZlcikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNraXAocmVhZGVyLCBi
eXRlc1JlbWFpbmluZyk7Ci0gICAgICAgICAgICB0cmFja0RhdGEtPmN1cnJlbnRCbG9ja0J1ZmZl
ciA9IGFkb3B0Q0YocmF3QmxvY2tCdWZmZXIpOwotICAgICAgICAgICAgdHJhY2tEYXRhLT5jdXJy
ZW50QmxvY2tCdWZmZXJQb3NpdGlvbiA9IDA7Ci0KLSAgICAgICAgICAgIGlmIChub0VyciAhPSBD
TUJsb2NrQnVmZmVyQXNzdXJlQmxvY2tNZW1vcnkodHJhY2tEYXRhLT5jdXJyZW50QmxvY2tCdWZm
ZXIuZ2V0KCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBTa2lwKHJlYWRlciwgYnl0ZXNSZW1h
aW5pbmcpOwotICAgICAgICB9CisgICAgc2l6ZV90IHBhY2tldERhdGFPZmZzZXQgPSBtX3BhY2tl
dEJ5dGVzUmVhZDsKKyAgICBzaXplX3QgYnl0ZXNUb1JlYWQgPSBtZXRhZGF0YS5zaXplOworICAg
IHdoaWxlIChieXRlc1RvUmVhZCkgeworICAgICAgICB1aW50NjRfdCBieXRlc1JlYWQ7CisgICAg
ICAgIGF1dG8gc3RhdHVzID0gcmVhZGVyLlJlYWQoYnl0ZXNUb1JlYWQsIG1fcGFja2V0RGF0YS5k
YXRhKCkgKyBtX3BhY2tldEJ5dGVzUmVhZCwgJmJ5dGVzUmVhZCk7CisgICAgICAgIGJ5dGVzVG9S
ZWFkIC09IGJ5dGVzUmVhZDsKKyAgICAgICAgKmJ5dGVzUmVtYWluaW5nIC09IGJ5dGVzUmVhZDsK
KyAgICAgICAgbV9wYWNrZXRCeXRlc1JlYWQgKz0gYnl0ZXNSZWFkOworCisgICAgICAgIC8vIEZJ
WE1FOiBXZSBjYW4ndCB5ZXQgaGFuZGxlIHBhcnNpbmcgYSBGcmFtZSB0aGF0IGRvZXNuJ3QgaGF2
ZSBhbGwgaXRzIG1lbW9yeSBhdmFpbGFibGUuCisgICAgICAgIGlmIChzdGF0dXMuY29kZSA9PSB3
ZWJtOjpTdGF0dXM6OmtPa1BhcnRpYWwgfHwgc3RhdHVzLmNvZGUgPT0gd2VibTo6U3RhdHVzOjpr
V291bGRCbG9jaykKKyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQogCi0gICAgICAg
IHNpemVfdCBudW1Ub1JlYWQgPSBtZXRhZGF0YS5zaXplIC0gdHJhY2tEYXRhLT5jdXJyZW50Qmxv
Y2tCdWZmZXJQb3NpdGlvbjsKLSAgICAgICAgc2l6ZV90IHNlZ21lbnRTaXplQXRQb3NpdGlvbiA9
IDA7Ci0gICAgICAgIHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IG51bGxwdHI7CisgICAgbV9w
YWNrZXREZXNjcmlwdGlvbnMuYXBwZW5kKHsgc3RhdGljX2Nhc3Q8aW50NjRfdD4ocGFja2V0RGF0
YU9mZnNldCksIDAsIHN0YXRpY19jYXN0PFVJbnQzMj4obWV0YWRhdGEuc2l6ZSkgfSk7CisgICAg
YXV0byBzYW1wbGVEdXJhdGlvbiA9IENNVGltZUdldFNlY29uZHMoQ01UaW1lU3VidHJhY3QocHJl
c2VudGF0aW9uVGltZSwgbV9zYW1wbGVQcmVzZW50YXRpb25UaW1lKSkgKyBDTVRpbWVHZXRTZWNv
bmRzKG1fcGFja2V0RHVyYXRpb24pOworICAgIGlmIChzYW1wbGVEdXJhdGlvbiA+PSBtX21pbmlt
dW1TYW1wbGVEdXJhdGlvbikKKyAgICAgICAgY3JlYXRlU2FtcGxlQnVmZmVyKCk7CiAKLSAgICAg
ICAgd2hpbGUgKG51bVRvUmVhZCkgewotICAgICAgICAgICAgaWYgKG5vRXJyICE9IENNQmxvY2tC
dWZmZXJHZXREYXRhUG9pbnRlcih0cmFja0RhdGEtPmN1cnJlbnRCbG9ja0J1ZmZlci5nZXQoKSwg
dHJhY2tEYXRhLT5jdXJyZW50QmxvY2tCdWZmZXJQb3NpdGlvbiwgJnNlZ21lbnRTaXplQXRQb3Np
dGlvbiwgbnVsbHB0ciwgKGNoYXIqKikmYmxvY2tCdWZmZXJEYXRhKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gU2tpcChyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKKyAgICByZXR1cm4gU2tpcCgm
cmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Cit9CiAKLSAgICAgICAgICAgIHNpemVfdCBudW1Ub1Jl
YWRGcm9tVGhpc1NlZ21lbnQgPSBzdGQ6Om1pbihudW1Ub1JlYWQsIHNlZ21lbnRTaXplQXRQb3Np
dGlvbik7Ci0gICAgICAgICAgICB1aW50NjRfdCBudW1BY3R1YWxseVdyaXR0ZW5Ub1RoaXNTZWdt
ZW50Owordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y3JlYXRl
U2FtcGxlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9wYWNrZXREZXNjcmlwdGlvbnMuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIGF1dG8gc3RhdHVzID0gbV9yZWFkZXIt
PlJlYWQobnVtVG9SZWFkRnJvbVRoaXNTZWdtZW50LCAodWludDhfdCopYmxvY2tCdWZmZXJEYXRh
LCAmbnVtQWN0dWFsbHlXcml0dGVuVG9UaGlzU2VnbWVudCk7Ci0gICAgICAgICAgICBudW1Ub1Jl
YWQgLT0gbnVtQWN0dWFsbHlXcml0dGVuVG9UaGlzU2VnbWVudDsKLSAgICAgICAgICAgICpieXRl
c1JlbWFpbmluZyAtPSBudW1BY3R1YWxseVdyaXR0ZW5Ub1RoaXNTZWdtZW50OwotICAgICAgICAg
ICAgdHJhY2tEYXRhLT5jdXJyZW50QmxvY2tCdWZmZXJQb3NpdGlvbiArPSBudW1BY3R1YWxseVdy
aXR0ZW5Ub1RoaXNTZWdtZW50OworICAgIEFTU0VSVCghbV9wYWNrZXREYXRhLmlzRW1wdHkoKSk7
CiAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4ndCB5ZXQgaGFuZGxlIHBhcnNpbmcgYSBG
cmFtZSB0aGF0IGRvZXNuJ3QgaGF2ZSBhbGwgaXRzIG1lbW9yeSBhdmFpbGFibGUuCi0gICAgICAg
ICAgICBpZiAoc3RhdHVzLmNvZGUgPT0gd2VibTo6U3RhdHVzOjprT2tQYXJ0aWFsIHx8IHN0YXR1
cy5jb2RlID09IHdlYm06OlN0YXR1czo6a1dvdWxkQmxvY2spCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHN0YXR1czsKLSAgICAgICAgfQorICAgIENNQmxvY2tCdWZmZXJSZWYgYmxvY2tCdWZmZXIg
PSBudWxscHRyOworICAgIGF1dG8gZXJyID0gQ01CbG9ja0J1ZmZlckNyZWF0ZVdpdGhNZW1vcnlC
bG9jayhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBudWxscHRyLCBtX3BhY2tldERhdGEuc2l6ZUluQnl0
ZXMoKSwga0NGQWxsb2NhdG9yRGVmYXVsdCwgbnVsbHB0ciwgMCwgbV9wYWNrZXREYXRhLnNpemVJ
bkJ5dGVzKCksIGtDTUJsb2NrQnVmZmVyQXNzdXJlTWVtb3J5Tm93RmxhZywgJmJsb2NrQnVmZmVy
KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUo
IkNNQmxvY2tCdWZmZXJDcmVhdGVXaXRoTWVtb3J5QmxvY2sgZmFpbGVkIHdpdGggJWQiLCBlcnIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGF1dG8gYnVmZmVyID0gYWRvcHRDRihibG9j
a0J1ZmZlcik7CiAKLSAgICAgICAgaWYgKG5vRXJyICE9IENNQmxvY2tCdWZmZXJHZXREYXRhUG9p
bnRlcih0cmFja0RhdGEtPmN1cnJlbnRCbG9ja0J1ZmZlci5nZXQoKSwgMCwgJnNlZ21lbnRTaXpl
QXRQb3NpdGlvbiwgbnVsbHB0ciwgKGNoYXIqKikmYmxvY2tCdWZmZXJEYXRhKSkKLSAgICAgICAg
ICAgIHJldHVybiBTa2lwKHJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwotCi0gICAgICAgIGF1dG8m
IGhlYWRlclBhcnNlciA9IHRyYWNrRGF0YS0+aGVhZGVyUGFyc2VyOwotICAgICAgICBpZiAoIWhl
YWRlclBhcnNlci5QYXJzZVVuY29tcHJlc3NlZEhlYWRlcihibG9ja0J1ZmZlckRhdGEsIHNlZ21l
bnRTaXplQXRQb3NpdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gU2tpcChyZWFkZXIsIGJ5dGVz
UmVtYWluaW5nKTsKLQotICAgICAgICAvLyBPbmx5IHVwZGF0ZSB0aGUgZm9ybWF0IGRlc2NyaXB0
aW9uIHdoZW4gdGhlIGhlYWRlciBpbmRpY2F0ZXMgdGhhdCB0aGUgc2FtcGxlIGlzCi0gICAgICAg
IC8vIGEga2V5LWZyYW1lLCBvdGhlcndpc2UgY29sb3IgaW5mb3JtYXRpb24gd2lsbCBub3QgYmUg
cGFyc2VkLgotICAgICAgICBpZiAoaGVhZGVyUGFyc2VyLmtleSgpKQotICAgICAgICAgICAgdHJh
Y2tEYXRhLT5mb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQ
OUhlYWRlclBhcnNlcihoZWFkZXJQYXJzZXIsIHRyYWNrLnZpZGVvLnZhbHVlKCkuY29sb3VyKTsK
LSAgICAgICAgaWYgKCF0cmFja0RhdGEtPmZvcm1hdERlc2NyaXB0aW9uKQotICAgICAgICAgICAg
cmV0dXJuIFNraXAocmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0KLSAgICAgICAgYXV0byBwdHMg
PSBDTVRpbWVNYWtlKGJsb2NrLT50aW1lY29kZSArIG1fY3VycmVudFRpbWVjb2RlLCBtX3RpbWVz
Y2FsZSk7Ci0gICAgICAgIENNU2FtcGxlVGltaW5nSW5mbyB0aW1pbmcgPSB7IENNVGltZU1ha2Uo
ZHVyYXRpb24sIG1fdGltZXNjYWxlKSwgcHRzLCBwdHMgfTsKLSAgICAgICAgc2l6ZV90IHNpemUg
PSBtZXRhZGF0YS5zaXplOwotCi0gICAgICAgIGF1dG8gc2FtcGxlQ291bnQgPSBibG9jay0+bnVt
X2ZyYW1lczsKLSAgICAgICAgQ01TYW1wbGVCdWZmZXJSZWYgcmF3U2FtcGxlQnVmZmVyID0gbnVs
bHB0cjsKLSAgICAgICAgaWYgKG5vRXJyICE9IENNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgdHJhY2tEYXRhLT5jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCksIHRy
YWNrRGF0YS0+Zm9ybWF0RGVzY3JpcHRpb24uZ2V0KCksIHNhbXBsZUNvdW50LCAxLCAmdGltaW5n
LCAxLCAmc2l6ZSwgJnJhd1NhbXBsZUJ1ZmZlcikpCi0gICAgICAgICAgICByZXR1cm4gU2tpcChy
ZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLSAgICAgICAgYXV0byBzYW1wbGVCdWZmZXIgPSBhZG9w
dENGKHJhd1NhbXBsZUJ1ZmZlcik7Ci0KLSAgICAgICAgdHJhY2tEYXRhLT5jdXJyZW50QmxvY2tC
dWZmZXIgPSBudWxscHRyOwotICAgICAgICB0cmFja0RhdGEtPmN1cnJlbnRCbG9ja0J1ZmZlclBv
c2l0aW9uID0gMDsKLQotICAgICAgICBpZiAoIWhlYWRlclBhcnNlci5rZXkoKSkgewotICAgICAg
ICAgICAgYXV0byBhdHRhY2htZW50c0FycmF5ID0gQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRh
Y2htZW50c0FycmF5KHNhbXBsZUJ1ZmZlci5nZXQoKSwgdHJ1ZSk7Ci0gICAgICAgICAgICBBU1NF
UlQoYXR0YWNobWVudHNBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIWF0dGFjaG1lbnRzQXJyYXkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNraXAocmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0g
ICAgICAgICAgICBmb3IgKENGSW5kZXggaSA9IDAsIGNvdW50ID0gQ0ZBcnJheUdldENvdW50KGF0
dGFjaG1lbnRzQXJyYXkpOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIENGTXV0
YWJsZURpY3Rpb25hcnlSZWYgYXR0YWNobWVudHMgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZNdXRhYmxl
RGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChhdHRhY2htZW50c0FycmF5LCBp
KSk7Ci0gICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoYXR0YWNobWVudHMsIGtD
TVNhbXBsZUF0dGFjaG1lbnRLZXlfTm90U3luYywga0NGQm9vbGVhblRydWUpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9CisgICAgZXJyID0gQ01CbG9ja0J1ZmZlclJlcGxhY2VEYXRhQnl0ZXMo
bV9wYWNrZXREYXRhLmRhdGEoKSwgYnVmZmVyLmdldCgpLCAwLCBtX3BhY2tldERhdGEuc2l6ZUlu
Qnl0ZXMoKSk7CisgICAgaWYgKGVycikgeworICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BP
U1NJQkxFKCJDTUJsb2NrQnVmZmVyUmVwbGFjZURhdGFCeXRlcyBmYWlsZWQgd2l0aCAlZCIsIGVy
cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDTVNhbXBsZUJ1ZmZlclJlZiByYXdT
YW1wbGVCdWZmZXIgPSBudWxscHRyOworICAgIGVyciA9IENNQXVkaW9TYW1wbGVCdWZmZXJDcmVh
dGVSZWFkeVdpdGhQYWNrZXREZXNjcmlwdGlvbnMoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYnVmZmVy
LmdldCgpLCBmb3JtYXREZXNjcmlwdGlvbigpLmdldCgpLCBtX3BhY2tldERlc2NyaXB0aW9ucy5z
aXplKCksIG1fc2FtcGxlUHJlc2VudGF0aW9uVGltZSwgbV9wYWNrZXREZXNjcmlwdGlvbnMuZGF0
YSgpLCAmcmF3U2FtcGxlQnVmZmVyKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIFBBUlNFUl9M
T0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQXVkaW9TYW1wbGVCdWZmZXJDcmVhdGVXaXRoUGFja2V0
RGVzY3JpcHRpb25zIGZhaWxlZCB3aXRoICVkIiwgZXJyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGFkb3B0Q0YocmF3U2FtcGxlQnVmZmVyKTsKIAot
ICAgICAgICBhdXRvIHRyYWNrSUQgPSB0cmFjay50cmFja191aWQudmFsdWUoKTsKKyAgICBtX3Bh
Y2tldERhdGEuY2xlYXIoKTsKKyAgICBtX3BhY2tldERlc2NyaXB0aW9ucy5jbGVhcigpOwogCi0g
ICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgc2FtcGxlQnVmZmVyID0gV1RGTW92ZShzYW1wbGVCdWZmZXIpLCB0cmFja0lEXSAoKSBt
dXRhYmxlIHsKLSAgICAgICAgICAgIGlmICghbV9kaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2sp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgYXV0byBtZWRpYVNhbXBsZSA9
IE1lZGlhU2FtcGxlQVZGT2JqQzo6Y3JlYXRlKHNhbXBsZUJ1ZmZlci5nZXQoKSwgdHJhY2tJRCk7
Ci0gICAgICAgICAgICBtX2RpZFByb3ZpZGVNZWRpYURhdGFDYWxsYmFjayhXVEZNb3ZlKG1lZGlh
U2FtcGxlKSwgdHJhY2tJRCwgZW1wdHlTdHJpbmcoKSk7Ci0gICAgICAgIH0pOworICAgIGF1dG8g
dHJhY2tJRCA9IHRyYWNrKCkudHJhY2tfdWlkLnZhbHVlKCk7CisgICAgcGFyc2VyKCkucHJvdmlk
ZU1lZGlhRGF0YShzYW1wbGVCdWZmZXIubGVha1JlZigpLCB0cmFja0lEKTsKK30KKwordm9pZCBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpmbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMoKQoreworICAg
IGZvciAoYXV0byYgdHJhY2sgOiBtX3RyYWNrcykgeworICAgICAgICBpZiAodHJhY2stPnRyYWNr
VHlwZSgpID09IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6VHlwZTo6QXVkaW8p
CisgICAgICAgICAgICBkb3duY2FzdDxBdWRpb1RyYWNrRGF0YT4odHJhY2suZ2V0KCkpLmNyZWF0
ZVNhbXBsZUJ1ZmZlcigpOwogICAgIH0KLSNlbmRpZgorfQogCi0gICAgcmV0dXJuIFNraXAocmVh
ZGVyLCBieXRlc1JlbWFpbmluZyk7Cit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldE1p
bmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uKGZsb2F0IGR1cmF0aW9uKQoreworICAgIG1fbWluaW11
bUF1ZGlvU2FtcGxlRHVyYXRpb24gPSBkdXJhdGlvbjsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2Vi
TS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVy
UGFyc2VyV2ViTS5oCmluZGV4IDNhODQ2NDU5YTNlYjM1NTM2MTIxMjk3NmM4ZWFkZTQ2M2Q2M2Ix
OTcuLmJjZjE2MjQxNDE5ZDUzYTQ1NzFiZGI1OTRmZTUwMzk3YzM0ZmNhM2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNl
cldlYk0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNLmgKQEAgLTI4LDYgKzI4LDggQEAKICNpZiBFTkFCTEUoTUVESUFf
U09VUkNFKQogCiAjaW5jbHVkZSAiU291cmNlQnVmZmVyUGFyc2VyLmgiCisjaW5jbHVkZSA8Q29y
ZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+CisjaW5jbHVkZSA8Q29yZU1lZGlhL0NNVGltZS5oPgog
I2luY2x1ZGUgPGNvbW1vbi92cDlfaGVhZGVyX3BhcnNlci5oPgogI2luY2x1ZGUgPHdlYm0vY2Fs
bGJhY2suaD4KICNpbmNsdWRlIDx3ZWJtL3N0YXR1cy5oPgpAQCAtNDEsNyArNDMsNiBAQAogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90aHJlYWRzL0JpbmFy
eVNlbWFwaG9yZS5oPgogCi10eXBlZGVmIHN0cnVjdCBvcGFxdWVDTVNhbXBsZUJ1ZmZlciAqQ01T
YW1wbGVCdWZmZXJSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2Ny
aXB0aW9uKiBDTUZvcm1hdERlc2NyaXB0aW9uUmVmOwogdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlQ01C
bG9ja0J1ZmZlciAqQ01CbG9ja0J1ZmZlclJlZjsKIApAQCAtNTEsMTAgKzUyLDE1IEBAIGNsYXNz
IFdlYm1QYXJzZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgTWVkaWFTYW1wbGVB
VkZPYmpDOworCiBjbGFzcyBXRUJDT1JFX0VYUE9SVCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNIDog
cHVibGljIFNvdXJjZUJ1ZmZlclBhcnNlciwgcHJpdmF0ZSB3ZWJtOjpDYWxsYmFjayB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CisgICAgY2xhc3MgU3RyZWFtaW5nVmVj
dG9yUmVhZGVyOworCiAgICAgc3RhdGljIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBp
c0NvbnRlbnRUeXBlU3VwcG9ydGVkKGNvbnN0IENvbnRlbnRUeXBlJik7CisgICAgc3RhdGljIFJl
ZlB0cjxTb3VyY2VCdWZmZXJQYXJzZXJXZWJNPiBjcmVhdGUoY29uc3QgQ29udGVudFR5cGUmKTsK
IAogICAgIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKTsKICAgICB+U291cmNlQnVmZmVyUGFyc2Vy
V2ViTSgpOwpAQCAtNzEsOSArNzcsMTIgQEAgcHVibGljOgogICAgIHZvaWQgcmVzZXRQYXJzZXJT
dGF0ZSgpIGZpbmFsOwogICAgIHZvaWQgaW52YWxpZGF0ZSgpIGZpbmFsOwogCi0jaWYgIVJFTEVB
U0VfTE9HX0RJU0FCTEVECisgICAgdm9pZCBmbHVzaFBlbmRpbmdBdWRpb0J1ZmZlcnMoKTsKKyAg
ICB2b2lkIHNldE1pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uKGZsb2F0KTsKKwogICAgIHZvaWQg
c2V0TG9nZ2VyKGNvbnN0IFdURjo6TG9nZ2VyJiwgY29uc3Qgdm9pZCogaWRlbnRpZmllcikgZmlu
YWw7Ci0jZW5kaWYKKworICAgIHZvaWQgcHJvdmlkZU1lZGlhRGF0YShSZXRhaW5QdHI8Q01TYW1w
bGVCdWZmZXJSZWY+LCB1aW50NjRfdCk7CiAKICAgICBlbnVtIGNsYXNzIEVycm9yQ29kZSA6IGlu
dDMyX3QgewogICAgICAgICBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNRXJyb3JDb2RlU3RhcnQgPSAy
MDAwLApAQCAtOTUsMjAgKzEwNCwxMTkgQEAgcHVibGljOgogICAgICAgICBSZWFkaW5nQ2x1c3Rl
ciwKICAgICB9OwogCi1wcml2YXRlOgotICAgIHN0cnVjdCBUcmFja0RhdGEgewotICAgICAgICB3
ZWJtOjpUcmFja0VudHJ5IHRyYWNrOwotICAgICAgICB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJz
ZXIgaGVhZGVyUGFyc2VyOwotICAgICAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJl
Zj4gZm9ybWF0RGVzY3JpcHRpb247Ci0gICAgICAgIFJldGFpblB0cjxDTUJsb2NrQnVmZmVyUmVm
PiBjdXJyZW50QmxvY2tCdWZmZXI7Ci0gICAgICAgIHVpbnQ2NF90IGN1cnJlbnRCbG9ja0J1ZmZl
clBvc2l0aW9uIHsgMCB9OworICAgIGVudW0gY2xhc3MgQ29kZWNUeXBlIDogdWludDhfdCB7Cisg
ICAgICAgIFVuc3VwcG9ydGVkLAorICAgICAgICBWUDksCisgICAgICAgIFZvcmJpcywKKyAgICAg
ICAgT3B1cywKKyAgICB9OworCisgICAgY2xhc3MgVHJhY2tEYXRhIHsKKyAgICAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgYXV0byBjcmVh
dGUoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRy
eSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2VyKSAtPiBVbmlxdWVSZWY8VHJhY2tEYXRh
PgorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxUcmFja0RhdGE+
KGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwgVHlwZTo6VW5rbm93biwgcGFyc2VyKTsKKyAgICAgICAg
fQorCisgICAgICAgIGVudW0gY2xhc3MgVHlwZSB7CisgICAgICAgICAgICBVbmtub3duLAorICAg
ICAgICAgICAgQXVkaW8sCisgICAgICAgICAgICBWaWRlbywKKyAgICAgICAgfTsKKworICAgICAg
ICBUcmFja0RhdGEoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYg
dHJhY2tFbnRyeSwgVHlwZSB0cmFja1R5cGUsIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIHBhcnNl
cikKKyAgICAgICAgICAgIDogbV9jb2RlYyB7IGNvZGVjVHlwZSB9CisgICAgICAgICAgICAsIG1f
dHJhY2sgeyB3ZWJtOjpUcmFja0VudHJ5IHsgdHJhY2tFbnRyeSB9IH0KKyAgICAgICAgICAgICwg
bV90cmFja1R5cGUgeyB0cmFja1R5cGUgfQorICAgICAgICAgICAgLCBtX3BhcnNlciB7IHBhcnNl
ciB9CisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIH5UcmFja0RhdGEoKSA9
IGRlZmF1bHQ7CisKKyAgICAgICAgQ29kZWNUeXBlIGNvZGVjKCkgY29uc3QgeyByZXR1cm4gbV9j
b2RlYzsgfQorICAgICAgICB3ZWJtOjpUcmFja0VudHJ5JiB0cmFjaygpIHsgcmV0dXJuIG1fdHJh
Y2s7IH0KKyAgICAgICAgVHlwZSB0cmFja1R5cGUoKSBjb25zdCB7IHJldHVybiBtX3RyYWNrVHlw
ZTsgfQorCisgICAgICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBmb3JtYXRE
ZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fZm9ybWF0RGVzY3JpcHRpb247IH0KKyAgICAgICAgdm9p
ZCBzZXRGb3JtYXREZXNjcmlwdGlvbihSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4m
JiBkZXNjcmlwdGlvbikgeyBtX2Zvcm1hdERlc2NyaXB0aW9uID0gV1RGTW92ZShkZXNjcmlwdGlv
bik7IH0KKworICAgICAgICBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIoKSBjb25zdCB7
IHJldHVybiBtX3BhcnNlcjsgfQorICAgICAgICAKKyAgICAgICAgdmlydHVhbCB3ZWJtOjpTdGF0
dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFk
YXRhJiwgdWludDY0X3QqLCBjb25zdCBDTVRpbWUmLCBpbnQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIHdlYm06OlN0YXR1
cyh3ZWJtOjpTdGF0dXM6OmtJbnZhbGlkRWxlbWVudElkKTsKKyAgICAgICAgfQorCisgICAgcHJp
dmF0ZToKKyAgICAgICAgQ29kZWNUeXBlIG1fY29kZWM7CisgICAgICAgIHdlYm06OlRyYWNrRW50
cnkgbV90cmFjazsKKyAgICAgICAgVHlwZSBtX3RyYWNrVHlwZTsKKyAgICAgICAgUmV0YWluUHRy
PENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IG1fZm9ybWF0RGVzY3JpcHRpb247CisgICAgICAgIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk0mIG1fcGFyc2VyOworICAgIH07CisKKyAgICBjbGFzcyBWaWRl
b1RyYWNrRGF0YSA6IHB1YmxpYyBUcmFja0RhdGEgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3Rh
dGljIGF1dG8gY3JlYXRlKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50
cnkmIHRyYWNrRW50cnksIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIHBhcnNlcikgLT4gVW5pcXVl
UmVmPFZpZGVvVHJhY2tEYXRhPgorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVu
aXF1ZVJlZjxWaWRlb1RyYWNrRGF0YT4oY29kZWNUeXBlLCB0cmFja0VudHJ5LCBwYXJzZXIpOwor
ICAgICAgICB9CisKKyAgICAgICAgVmlkZW9UcmFja0RhdGEoQ29kZWNUeXBlIGNvZGVjVHlwZSwg
Y29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgU291cmNlQnVmZmVyUGFyc2VyV2Vi
TSYgcGFyc2VyKQorICAgICAgICAgICAgOiBUcmFja0RhdGEoY29kZWNUeXBlLCB0cmFja0VudHJ5
LCBUeXBlOjpWaWRlbywgcGFyc2VyKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB3
ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpG
cmFtZU1ldGFkYXRhJiwgdWludDY0X3QqLCBjb25zdCBDTVRpbWUmLCBpbnQpIGZpbmFsOworICAg
ICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGNyZWF0ZVNhbXBsZUJ1ZmZlcihjb25z
dCBDTVRpbWUmLCBpbnQpOworICAgICAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25z
dCB7IHJldHVybiAiVmlkZW9UcmFja0RhdGEiOyB9CisKKyAgICAgICAgdnA5X3BhcnNlcjo6VnA5
SGVhZGVyUGFyc2VyIG1faGVhZGVyUGFyc2VyOworICAgICAgICBSZXRhaW5QdHI8Q01CbG9ja0J1
ZmZlclJlZj4gbV9jdXJyZW50QmxvY2tCdWZmZXI7CisgICAgICAgIHVpbnQ2NF90IG1fY3VycmVu
dEJsb2NrQnVmZmVyUG9zaXRpb24geyAwIH07CisgICAgfTsKKworICAgIGNsYXNzIEF1ZGlvVHJh
Y2tEYXRhIDogcHVibGljIFRyYWNrRGF0YSB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMg
YXV0byBjcmVhdGUoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYg
dHJhY2tFbnRyeSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2VyLCBmbG9hdCBtaW5pbXVt
U2FtcGxlRHVyYXRpb24pIC0+IFVuaXF1ZVJlZjxBdWRpb1RyYWNrRGF0YT4KKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8QXVkaW9UcmFja0RhdGE+KGNvZGVjVHlw
ZSwgdHJhY2tFbnRyeSwgcGFyc2VyLCBtaW5pbXVtU2FtcGxlRHVyYXRpb24pOworICAgICAgICB9
CisKKyAgICAgICAgQXVkaW9UcmFja0RhdGEoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2Vi
bTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2Vy
LCBmbG9hdCBtaW5pbXVtU2FtcGxlRHVyYXRpb24pCisgICAgICAgICAgICA6IFRyYWNrRGF0YSB7
IGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwgVHlwZTo6QXVkaW8sIHBhcnNlciB9CisgICAgICAgICAg
ICAsIG1fbWluaW11bVNhbXBsZUR1cmF0aW9uIHsgbWluaW11bVNhbXBsZUR1cmF0aW9uIH0KKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgd2VibTo6U3RhdHVzIGNvbnN1bWVGcmFtZURh
dGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90Kiwg
Y29uc3QgQ01UaW1lJiwgaW50KSBmaW5hbDsKKyAgICAgICAgdm9pZCBjcmVhdGVTYW1wbGVCdWZm
ZXIoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IGNoYXIqIGxvZ0NsYXNzTmFtZSgp
IGNvbnN0IHsgcmV0dXJuICJBdWRpb1RyYWNrRGF0YSI7IH0KKworICAgICAgICBDTVRpbWUgbV9z
YW1wbGVQcmVzZW50YXRpb25UaW1lOworICAgICAgICBDTVRpbWUgbV9wYWNrZXREdXJhdGlvbjsK
KyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fcGFja2V0RGF0YTsKKyAgICAgICAgc2l6ZV90IG1f
cGFja2V0Qnl0ZXNSZWFkIHsgMCB9OworICAgICAgICBzaXplX3QgbV9ieXRlT2Zmc2V0IHsgMCB9
OworICAgICAgICBWZWN0b3I8QXVkaW9TdHJlYW1QYWNrZXREZXNjcmlwdGlvbj4gbV9wYWNrZXRE
ZXNjcmlwdGlvbnM7CisKKyAgICAgICAgLy8gRklYTUU6IDAuNSAtIDEuMCBzZWNvbmRzIGlzIGEg
YmV0dGVyIGR1cmF0aW9uIHBlciBzYW1wbGUgYnVmZmVyLCBidXQgdXNlIDIgc2Vjb25kcyBzbyBh
dCBsZWFzdCB0aGUgZmlyc3QKKyAgICAgICAgLy8gc2FtcGxlIGJ1ZmZlciB3aWxsIHBsYXkgdW50
aWwgd2UgZml4IFNhbXBsZUN1cnNvcjo6Y3JlYXRlU2FtcGxlQnVmZmVyIHRvIGRlYWwgd2l0aCBg
ZW5kQ3Vyc29yYC4KKyAgICAgICAgZmxvYXQgbV9taW5pbXVtU2FtcGxlRHVyYXRpb24geyAyIH07
CiAgICAgfTsKLSAgICBUcmFja0RhdGEqIHRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHVpbnQ2NF90
KTsKIAotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIGNvbnN0IFdURjo6TG9nZ2VyKiBs
b2dnZXJQdHIoKSBjb25zdCB7IHJldHVybiBtX2xvZ2dlci5nZXQoKTsgfQogICAgIGNvbnN0IHZv
aWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2xvZ0lkZW50aWZpZXI7IH0KLSNl
bmRpZgorCitwcml2YXRlOgorCisgICAgVHJhY2tEYXRhKiB0cmFja0RhdGFGb3JUcmFja051bWJl
cih1aW50NjRfdCk7CiAKICAgICAvLyB3ZWJtOjpDYWxsYmFjawogICAgIHdlYm06OlN0YXR1cyBP
bkVsZW1lbnRCZWdpbihjb25zdCB3ZWJtOjpFbGVtZW50TWV0YWRhdGEmLCB3ZWJtOjpBY3Rpb24q
KSBmaW5hbDsKQEAgLTEzNSwyMCArMjQzLDE4IEBAIHByaXZhdGU6CiAKICAgICBTdGF0ZSBtX3N0
YXRlIHsgU3RhdGU6Ok5vbmUgfTsKIAotICAgIGNsYXNzIFN0cmVhbWluZ1ZlY3RvclJlYWRlcjsK
ICAgICBVbmlxdWVSZWY8U3RyZWFtaW5nVmVjdG9yUmVhZGVyPiBtX3JlYWRlcjsKIAotICAgIFZl
Y3RvcjxUcmFja0RhdGE+IG1fdHJhY2tzOworICAgIFZlY3RvcjxVbmlxdWVSZWY8VHJhY2tEYXRh
Pj4gbV90cmFja3M7CiAgICAgdXNpbmcgQmxvY2tWYXJpYW50ID0gVmFyaWFudDx3ZWJtOjpCbG9j
aywgd2VibTo6U2ltcGxlQmxvY2s+OwogICAgIE9wdGlvbmFsPEJsb2NrVmFyaWFudD4gbV9jdXJy
ZW50QmxvY2s7CiAgICAgT3B0aW9uYWw8dWludDY0X3Q+IG1fcmV3aW5kVG9Qb3NpdGlvbjsKKyAg
ICBmbG9hdCBtX21pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uIHsgMiB9OwogCiAgICAgQm94PEJp
bmFyeVNlbWFwaG9yZT4gbV9pbml0aWFsaXphdGlvblNlZ21lbnRJc0hhbmRsZWRTZW1hcGhvcmU7
CiAKLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICBSZWZQdHI8Y29uc3QgV1RGOjpMb2dn
ZXI+IG1fbG9nZ2VyOwogICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxwdHIg
fTsKLSNlbmRpZgogfTsKIAogfQpAQCAtMTU3LDQgKzI2MywxMiBAQCBTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk0pCiAgICAgc3RhdGlj
IGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlciYgcGFyc2VyKSB7
IHJldHVybiBwYXJzZXIudHlwZSgpID09IFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcjo6VHlw
ZTo6V2ViTTsgfQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQogCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJh
Y2tEYXRhKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpUcmFja0RhdGEmIHRyYWNrRGF0YSkgeyByZXR1cm4gdHJhY2tEYXRhLnRy
YWNrVHlwZSgpID09IFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6
VHlwZTo6VmlkZW87IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRp
b1RyYWNrRGF0YSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhJiB0cmFja0RhdGEpIHsgcmV0dXJuIHRyYWNrRGF0
YS50cmFja1R5cGUoKSA9PSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0Rh
dGE6OlR5cGU6OkF1ZGlvOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKICNlbmRp
ZiAvLyBFTkFCTEUoTUVESUFfU09VUkNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLmgKaW5kZXggMTRjNmYz
YWU5ODQzMGFhZWMyYjhlODIyYjFmYjUxYjQ3NThhYTkzMC4uNWNjZDM1Nzc5MzE0NDk5ZTc2NDA1
OGYyNDI4ZDJhNmZlYjUwM2U0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oCkBAIC0yOCw2ICsyOCwx
MyBAQAogI2lmIEVOQUJMRShWUDkpICYmIFBMQVRGT1JNKENPQ09BKQogCiAjaW5jbHVkZSAiVlA5
VXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8d2VibS9kb21fdHlwZXMuaD4KKwordHlwZWRlZiBjb25z
dCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlvbiogQ01Gb3JtYXREZXNjcmlwdGlvblJl
ZjsKKworbmFtZXNwYWNlIHZwOV9wYXJzZXIgeworY2xhc3MgVnA5SGVhZGVyUGFyc2VyOworfQog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ0LDYgKzUxLDggQEAgZXh0ZXJuIGJvb2wgaXNW
UDlEZWNvZGVyQXZhaWxhYmxlKCk7CiBleHRlcm4gYm9vbCBpc1ZQQ29kZWNDb25maWd1cmF0aW9u
UmVjb3JkU3VwcG9ydGVkKFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJik7CiBleHRlcm4gYm9v
bCB2YWxpZGF0ZVZQUGFyYW1ldGVycyhWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYsIE1lZGlh
Q2FwYWJpbGl0aWVzSW5mbyYsIGNvbnN0IFZpZGVvQ29uZmlndXJhdGlvbiYpOwogCitSZXRhaW5Q
dHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5
SGVhZGVyUGFyc2VyKGNvbnN0IHZwOV9wYXJzZXI6OlZwOUhlYWRlclBhcnNlciYsIGNvbnN0IHdl
Ym06OkVsZW1lbnQ8d2VibTo6Q29sb3VyPiYpOworCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXND
b2NvYS5tbQppbmRleCBjODFlOTdhYTNlNDc3ZDdjN2I4OWMxNjE5YTlmM2ZmMmYyYmVjMGExLi40
MTIyNTBmOTc0N2E4OTkyNmFlZTViOTI4MWYxYTQxM2JjMmU4YzEzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXND
b2NvYS5tbQpAQCAtMjMsOCArMjMsOCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJWUDlVdGlsaXRpZXND
b2NvYS5oIgorI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJWUDlVdGlsaXRpZXNDb2NvYS5o
IgogCiAjaWYgRU5BQkxFKFZQOSkgJiYgUExBVEZPUk0oQ09DT0EpCiAKQEAgLTM2LDEzICszNiwy
MCBAQAogI2ltcG9ydCAiU3lzdGVtQmF0dGVyeS5oIgogI2ltcG9ydCAiVmlkZW9Db25maWd1cmF0
aW9uLmgiCiAjaW1wb3J0IDxDb3JlTWVkaWEvQ01Gb3JtYXREZXNjcmlwdGlvbi5oPgorI2ltcG9y
dCA8SmF2YVNjcmlwdENvcmUvRGF0YVZpZXcuaD4KKyNpbXBvcnQgPGNvbW1vbi92cDlfaGVhZGVy
X3BhcnNlci5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5o
PgogCiAjaW1wb3J0IDxwYWwvY29jb2EvQVZGb3VuZGF0aW9uU29mdExpbmsuaD4KKyNpbXBvcnQg
PHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgorI2ltcG9ydCAiQ29yZVZpZGVvU29mdExpbmsu
aCIKICNpbXBvcnQgIlZpZGVvVG9vbGJveFNvZnRMaW5rLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAordXNpbmcgbmFtZXNwYWNlIFBBTDsKK3VzaW5nIG5hbWVzcGFjZSB3ZWJtOworCiBzdGF0
aWMgYm9vbCBoYXJkd2FyZVZQOURlY29kZXJEaXNhYmxlZEZvclRlc3RpbmcgeyBmYWxzZSB9Owog
CiBzdHJ1Y3QgT3ZlcnJpZGVTY3JlZW5EYXRhIHsKQEAgLTI1Nyw2ICsyNjQsMjg4IEBAIGJvb2wg
dmFsaWRhdGVWUFBhcmFtZXRlcnMoVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmIGNvZGVjQ29u
ZmlndXJhdGlvbiwgTWVkaWFDCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyB1aW50OF90
IGNvbnZlcnRUb0NvbG9yUHJpbWFyaWVzKGNvbnN0IFByaW1hcmllcyYgY29lZmZpY2llbnRzKQor
eworICAgIHN3aXRjaCAoY29lZmZpY2llbnRzKSB7CisgICAgY2FzZSBQcmltYXJpZXM6OmtCdDcw
OToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF83MDlf
NjsKKyAgICBjYXNlIFByaW1hcmllczo6a1Vuc3BlY2lmaWVkOgorICAgICAgICByZXR1cm4gVlBD
b25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlVuc3BlY2lmaWVkOworICAgIGNhc2UgUHJpbWFy
aWVzOjprQnQ0NzBNOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJp
ZXM6OkJUXzQ3MF82X007CisgICAgY2FzZSBQcmltYXJpZXM6OmtCdDQ3MEJnOgorICAgICAgICBy
ZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzQ3MF83X0JHOworICAgIGNh
c2UgUHJpbWFyaWVzOjprU21wdGUxNzBNOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9u
Q29sb3JQcmltYXJpZXM6OkJUXzYwMV83OworICAgIGNhc2UgUHJpbWFyaWVzOjprU21wdGUyNDBN
OgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NU
XzI0MDsKKyAgICBjYXNlIFByaW1hcmllczo6a0ZpbG06CisgICAgICAgIHJldHVybiBWUENvbmZp
Z3VyYXRpb25Db2xvclByaW1hcmllczo6RmlsbTsKKyAgICBjYXNlIFByaW1hcmllczo6a0J0MjAy
MDoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF8yMDIw
X05vbmNvbnN0YW50X0x1bWluYW5jZTsKKyAgICBjYXNlIFByaW1hcmllczo6a1NtcHRlU3Q0Mjgx
OgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NU
XzQyOF8xOworICAgIGNhc2UgUHJpbWFyaWVzOjprU21wdGVScDQzMToKKyAgICAgICAgcmV0dXJu
IFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9SUF80MzFfMjsKKyAgICBjYXNl
IFByaW1hcmllczo6a1NtcHRlRWc0MzI6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25D
b2xvclByaW1hcmllczo6U01QVEVfRUdfNDMyXzE7CisgICAgY2FzZSBQcmltYXJpZXM6OmtKZWRl
Y1AyMlBob3NwaG9yczoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFy
aWVzOjpFQlVfVGVjaF8zMjEzX0U7CisgICAgfQorfQorCitzdGF0aWMgQ0ZTdHJpbmdSZWYgY29u
dmVydFRvQ01Db2xvclByaW1hcmllcyh1aW50OF90IHByaW1hcmllcykKK3sKKyAgICBzd2l0Y2gg
KHByaW1hcmllcykgeworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJU
XzcwOV82OgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19JVFVf
Ul83MDlfMjsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpFQlVfVGVj
aF8zMjEzX0U6CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzX0VC
VV8zMjEzOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzYwMV83
OgorICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NUXzI0MDoK
KyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfU01QVEVfQzsKKyAg
ICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9SUF80MzFfMjoKKyAg
ICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJpZXNfRENJX1AzOwor
ICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX0VHXzQzMl8xOgor
ICAgICAgICByZXR1cm4ga0NNRm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19QM19ENjU7
CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfMjAyMF9Ob25jb25z
dGFudF9MdW1pbmFuY2U6CisgICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9y
UHJpbWFyaWVzX0lUVV9SXzIwMjA7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K3N0YXRpYyB1aW50OF90IGNvbnZlcnRUb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKGNvbnN0IFRy
YW5zZmVyQ2hhcmFjdGVyaXN0aWNzJiBjaGFyYWN0ZXJpc3RpY3MpCit7CisgICAgc3dpdGNoIChj
aGFyYWN0ZXJpc3RpY3MpIHsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprQnQ3
MDk6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6QlRfNzA5XzY7CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a1Vuc3BlY2lm
aWVkOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OlVuc3BlY2lmaWVkOworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtHYW1t
YTIyY3VydmU6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6QlRfNDcwXzZfTTsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpr
R2FtbWEyOGN1cnZlOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OkJUXzQ3MF83X0JHOworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OmtTbXB0ZTE3ME06CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6QlRfNjAxXzc7CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6a1NtcHRlMjQwTToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzOjpTTVBURV9TVF8yNDA7CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3Rlcmlz
dGljczo6a0xpbmVhcjoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzOjpMaW5lYXI7CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
a0xvZzoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjpMb2dyaXRobWljOworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtMb2dT
cXJ0OgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OkxvZ3JpdGhtaWNfU3FydDsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpr
SWVjNjE5NjYyNDoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjpJRUNfNjE5NjZfMl80OworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OmtCdDEzNjFFeHRlbmRlZENvbG91ckdhbXV0OgorICAgICAgICByZXR1cm4gVlBDb25maWd1
cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzEzNjFfMDsKKyAgICBjYXNlIFRyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjprSWVjNjE5NjYyMToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmln
dXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJRUNfNjE5NjZfMl8xOworICAgIGNhc2Ug
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmsxMEJpdEJ0MjAyMDoKKyAgICAgICAgcmV0dXJuIFZQ
Q29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMDIwXzEwYml0OworICAg
IGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmsxMkJpdEJ0MjAyMDoKKyAgICAgICAgcmV0
dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMDIwXzEyYml0
OworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtTbXB0ZVN0MjA4NDoKKyAgICAg
ICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9T
VF8yMDg0OworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtTbXB0ZVN0NDI4MToK
KyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpT
TVBURV9TVF80MjhfMTsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprQXJpYlN0
ZEI2N0hsZzoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVy
aXN0aWNzOjpCVF8yMTAwX0hMRzsKKyAgICB9Cit9CisKK3N0YXRpYyBDRlN0cmluZ1JlZiBjb252
ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24odWludDhfdCBjaGFyYWN0ZXJpc3RpY3MpCit7CisgICAg
c3dpdGNoIChjaGFyYWN0ZXJpc3RpY3MpIHsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF83MDlfNjoKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVm
ZmVyVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl83MDlfMjsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlv
blRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF8yNDA6CisgICAgICAgIHJldHVybiBr
Q1ZJbWFnZUJ1ZmZlclRyYW5zZmVyRnVuY3Rpb25fU01QVEVfMjQwTV8xOTk1OworICAgIGNhc2Ug
VlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzIwODQ6Cisg
ICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fU01QVEVf
U1RfMjA4NF9QUTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjpCVF8yMDIwXzEwYml0OgorICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTJiaXQ6CisgICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNj
cmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fSVRVX1JfMjAyMDsKKyAgICBjYXNlIFZQQ29uZmlndXJh
dGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF80MjhfMToKKyAgICAgICAgcmV0
dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9TTVBURV9TVF80MjhfMTsK
KyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMTAw
X0hMRzoKKyAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlv
bl9JVFVfUl8yMTAwX0hMRzsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjpJRUNfNjE5NjZfMl8xOgorICAgICAgICByZXR1cm4gY2FuTG9hZF9Db3JlTWVk
aWFfa0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX3NSR0IoKSA/IFBBTDo6Z2V0
X0NvcmVNZWRpYV9rQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fc1JHQigpIDog
bnVsbHB0cjsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
OjpMaW5lYXI6CisgICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVu
Y3Rpb25fTGluZWFyOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMg
dWludDhfdCBjb252ZXJ0VG9NYXRyaXhDb2VmZmljaWVudHMoY29uc3QgTWF0cml4Q29lZmZpY2ll
bnRzJiBjb2VmZmljaWVudHMpCit7CisgICAgc3dpdGNoIChjb2VmZmljaWVudHMpIHsKKyAgICBj
YXNlIE1hdHJpeENvZWZmaWNpZW50czo6a1JnYjoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJh
dGlvbk1hdHJpeENvZWZmaWNpZW50czo6SWRlbnRpdHk7CisgICAgY2FzZSBNYXRyaXhDb2VmZmlj
aWVudHM6OmtCdDcwOToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZm
aWNpZW50czo6QlRfNzA5XzY7CisgICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtVbnNwZWNp
ZmllZDoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6
VW5zcGVjaWZpZWQ7CisgICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtGY2M6CisgICAgICAg
IHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkZDQzsKKyAgICBjYXNl
IE1hdHJpeENvZWZmaWNpZW50czo6a0J0NDcwQmc6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3Vy
YXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzQ3MF83X0JHOworICAgIGNhc2UgTWF0cml4Q29l
ZmZpY2llbnRzOjprU21wdGUxNzBNOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0
cml4Q29lZmZpY2llbnRzOjpCVF82MDFfNzsKKyAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6
a1NtcHRlMjQwTToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNp
ZW50czo6U01QVEVfU1RfMjQwOworICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprWUNnQ286
CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OllDZ0Nv
OworICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprQnQyMDIwTm9uY29uc3RhbnRMdW1pbmFu
Y2U6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJU
XzIwMjBfTm9uY29uc3RhbnRfTHVtaW5hbmNlOworICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRz
OjprQnQyMDIwQ29uc3RhbnRMdW1pbmFuY2U6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRp
b25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzIwMjBfQ29uc3RhbnRfTHVtaW5hbmNlOworICAgIH0K
K30KKworc3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNWUNiQ1JNYXRyaXgodWludDhfdCBj
b2VmZmljaWVudHMpCit7CisgICAgc3dpdGNoIChjb2VmZmljaWVudHMpIHsKKyAgICBjYXNlIFZQ
Q29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfMjAyMF9Ob25jb25zdGFudF9MdW1p
bmFuY2U6CisgICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvbllDYkNyTWF0cml4X0lU
VV9SXzIwMjA7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJU
XzQ3MF83X0JHOgorICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpC
VF82MDFfNzoKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1Jf
NjAxXzQ7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzcw
OV82OgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlf
MjsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6U01QVEVfU1Rf
MjQwOgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9TTVBURV8yNDBN
XzE5OTU7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyB1aW50OF90
IGNvbnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJzYW1wbGluZyh1aW50NjRfdCB4LCB1aW50
NjRfdCB5KQoreworICAgIGlmICh4ICYgeSkKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlv
bkNocm9tYVN1YnNhbXBsaW5nOjpTdWJzYW1wbGluZ180MjBfQ29sb2NhdGVkOworICAgIGlmICh4
ICYgIXkpCisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25DaHJvbWFTdWJzYW1wbGluZzo6
U3Vic2FtcGxpbmdfNDIyOworICAgIGlmICgheCAmICF5KQorICAgICAgICByZXR1cm4gVlBDb25m
aWd1cmF0aW9uQ2hyb21hU3Vic2FtcGxpbmc6OlN1YnNhbXBsaW5nXzQ0NDsKKyAgICAvLyBUaGlz
IGluZGljYXRlcyA0OjQ6MCBzdWJzYW1wbGluZywgd2hpY2ggaXMgbm90IGV4cHJlc3NhYmxlIGlu
IHRoZSAndnBjQycgYm94LiBEZWZhdWx0IHRvIDQ6MjowLgorICAgIHJldHVybiBWUENvbmZpZ3Vy
YXRpb25DaHJvbWFTdWJzYW1wbGluZzo6U3Vic2FtcGxpbmdfNDIwX0NvbG9jYXRlZDsKK30KKwor
UmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9u
RnJvbVZQOUhlYWRlclBhcnNlcihjb25zdCB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXImIHBh
cnNlciwgY29uc3Qgd2VibTo6RWxlbWVudDxDb2xvdXI+JiBjb2xvcikKK3sKKyAgICAvLyBSZWY6
ICJWUCBDb2RlYyBJU08gTWVkaWEgRmlsZSBGb3JtYXQgQmluZGluZywgdjEuMCwgMjAxNy0wMy0z
MSIKKyAgICAvLyA8aHR0cHM6Ly93d3cud2VibXByb2plY3Qub3JnL3ZwOS9tcDQvPgorICAgIC8v
CisgICAgLy8gY2xhc3MgVlBDb2RlY0NvbmZpZ3VyYXRpb25Cb3ggZXh0ZW5kcyBGdWxsQm94KCd2
cGNDJywgdmVyc2lvbiA9IDEsIDApCisgICAgLy8geworICAgIC8vICAgICBWUENvZGVjQ29uZmln
dXJhdGlvblJlY29yZCgpIHZwY0NvbmZpZzsKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBhbGln
bmVkICg4KSBjbGFzcyBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCB7CisgICAgLy8gICAgIHVu
c2lnbmVkIGludCAoOCkgICAgIHByb2ZpbGU7CisgICAgLy8gICAgIHVuc2lnbmVkIGludCAoOCkg
ICAgIGxldmVsOworICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDQpICAgICBiaXREZXB0aDsKKyAg
ICAvLyAgICAgdW5zaWduZWQgaW50ICgzKSAgICAgY2hyb21hU3Vic2FtcGxpbmc7CisgICAgLy8g
ICAgIHVuc2lnbmVkIGludCAoMSkgICAgIHZpZGVvRnVsbFJhbmdlRmxhZzsKKyAgICAvLyAgICAg
dW5zaWduZWQgaW50ICg4KSAgICAgY29sb3VyUHJpbWFyaWVzOworICAgIC8vICAgICB1bnNpZ25l
ZCBpbnQgKDgpICAgICB0cmFuc2ZlckNoYXJhY3RlcmlzdGljczsKKyAgICAvLyAgICAgdW5zaWdu
ZWQgaW50ICg4KSAgICAgbWF0cml4Q29lZmZpY2llbnRzOworICAgIC8vICAgICB1bnNpZ25lZCBp
bnQgKDE2KSAgICBjb2RlY0ludGlhbGl6YXRpb25EYXRhU2l6ZTsKKyAgICAvLyAgICAgdW5zaWdu
ZWQgaW50ICg4KVtdICAgY29kZWNJbnRpYWxpemF0aW9uRGF0YTsKKyAgICAvLyB9CisgICAgLy8K
KyAgICAvLyBjb2RlY0ludGlhbGl6YXRpb25EYXRhU2l6ZeKAi0ZvciBWUDggYW5kIFZQOSB0aGlz
IGZpZWxkIG11c3QgYmUgMC4KKyAgICAvLyBjb2RlY0ludGlhbGl6YXRpb25EYXRh4oCLYmluYXJ5
IGNvZGVjIGluaXRpYWxpemF0aW9uIGRhdGEuIE5vdCB1c2VkIGZvciBWUDggYW5kIFZQOS4KKyAg
ICAvLworICAgIC8vIEZJWE1FOiBDb252ZXJ0IGV4aXN0aW5nIHN0cnVjdCB0byBhbiBJU09Cb3gg
YW5kIHJlcGxhY2UgdGhlIHdyaXRpbmcgY29kZSBiZWxvdworICAgIC8vIHdpdGggYSBzdWJjbGFz
cyBvZiBJU09GdWxsQm94LgorCisgICAgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQgcmVjb3Jk
OworCisgICAgcmVjb3JkLnByb2ZpbGUgPSBwYXJzZXIucHJvZmlsZSgpOworICAgIC8vIENvcmVN
ZWRpYSBkb2VzIG5hdCBjYXJlIGFib3V0IHRoZSBWUDkgY29kZWMgbGV2ZWw7IGhhcmQtY29kZSB0
byBMZXZlbCAxLjAgaGVyZToKKyAgICByZWNvcmQubGV2ZWwgPSAxMDsKKyAgICByZWNvcmQuYml0
RGVwdGggPSBwYXJzZXIuYml0X2RlcHRoKCk7CisgICAgcmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxh
ZyA9IHBhcnNlci5jb2xvcl9yYW5nZSgpID8gVlBDb25maWd1cmF0aW9uUmFuZ2U6OkZ1bGxSYW5n
ZSA6IFZQQ29uZmlndXJhdGlvblJhbmdlOjpWaWRlb1JhbmdlOworICAgIHJlY29yZC5jaHJvbWFT
dWJzYW1wbGluZyA9IGNvbnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJzYW1wbGluZyhwYXJz
ZXIuc3Vic2FtcGxpbmdfeCgpLCBwYXJzZXIuc3Vic2FtcGxpbmdfeSgpKTsKKyAgICByZWNvcmQu
Y29sb3JQcmltYXJpZXMgPSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6VW5zcGVjaWZp
ZWQ7CisgICAgcmVjb3JkLnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzID0gVlBDb25maWd1cmF0aW9u
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlVuc3BlY2lmaWVkOworICAgIHJlY29yZC5tYXRyaXhD
b2VmZmljaWVudHMgPSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OlVuc3BlY2lm
aWVkOworCisgICAgLy8gQ29udGFpbmVyIGNvbG9yIHZhbHVlcyBjYW4gb3ZlcnJpZGUgcGVyLXNh
bXBsZSBvbmVzOgorICAgIGlmIChjb2xvci5pc19wcmVzZW50KCkpIHsKKyAgICAgICAgYXV0byYg
Y29sb3JWYWx1ZSA9IGNvbG9yLnZhbHVlKCk7CisgICAgICAgIGlmIChjb2xvclZhbHVlLmNocm9t
YV9zdWJzYW1wbGluZ194LmlzX3ByZXNlbnQoKSAmJiBjb2xvclZhbHVlLmNocm9tYV9zdWJzYW1w
bGluZ195LmlzX3ByZXNlbnQoKSkKKyAgICAgICAgICAgIHJlY29yZC5jaHJvbWFTdWJzYW1wbGlu
ZyA9IGNvbnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJzYW1wbGluZyhjb2xvclZhbHVlLmNo
cm9tYV9zdWJzYW1wbGluZ194LnZhbHVlKCksIGNvbG9yVmFsdWUuY2hyb21hX3N1YnNhbXBsaW5n
X3kudmFsdWUoKSk7CisgICAgICAgIGlmIChjb2xvclZhbHVlLnJhbmdlLmlzX3ByZXNlbnQoKSAm
JiBjb2xvclZhbHVlLnJhbmdlLnZhbHVlKCkgIT0gUmFuZ2U6OmtVbnNwZWNpZmllZCkKKyAgICAg
ICAgICAgIHJlY29yZC52aWRlb0Z1bGxSYW5nZUZsYWcgPSBjb2xvclZhbHVlLnJhbmdlLnZhbHVl
KCkgPT0gUmFuZ2U6OmtGdWxsID8gVlBDb25maWd1cmF0aW9uUmFuZ2U6OkZ1bGxSYW5nZSA6IFZQ
Q29uZmlndXJhdGlvblJhbmdlOjpWaWRlb1JhbmdlOworICAgICAgICBpZiAoY29sb3JWYWx1ZS5i
aXRzX3Blcl9jaGFubmVsLmlzX3ByZXNlbnQoKSkKKyAgICAgICAgICAgIHJlY29yZC5iaXREZXB0
aCA9IGNvbG9yVmFsdWUuYml0c19wZXJfY2hhbm5lbC52YWx1ZSgpOworICAgICAgICBpZiAoY29s
b3JWYWx1ZS50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MuaXNfcHJlc2VudCgpKQorICAgICAgICAg
ICAgcmVjb3JkLnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzID0gY29udmVydFRvVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3MoY29sb3JWYWx1ZS50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MudmFsdWUoKSk7
CisgICAgICAgIGlmIChjb2xvclZhbHVlLm1hdHJpeF9jb2VmZmljaWVudHMuaXNfcHJlc2VudCgp
KQorICAgICAgICAgICAgcmVjb3JkLm1hdHJpeENvZWZmaWNpZW50cyA9IGNvbnZlcnRUb01hdHJp
eENvZWZmaWNpZW50cyhjb2xvclZhbHVlLm1hdHJpeF9jb2VmZmljaWVudHMudmFsdWUoKSk7Cisg
ICAgICAgIGlmIChjb2xvclZhbHVlLnByaW1hcmllcy5pc19wcmVzZW50KCkpCisgICAgICAgICAg
ICByZWNvcmQuY29sb3JQcmltYXJpZXMgPSBjb252ZXJ0VG9Db2xvclByaW1hcmllcyhjb2xvclZh
bHVlLnByaW1hcmllcy52YWx1ZSgpKTsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgc2l6ZV90IFZQ
Q29kZWNDb25maWd1cmF0aW9uQ29udGVudHNTaXplID0gMTI7CisKKyAgICB1aW50MzJfdCB2ZXJz
aW9uQW5kRmxhZ3MgPSAxIDw8IDI0OworICAgIHVpbnQ4X3QgYml0RGVwdGhDaHJvbWFBbmRSYW5n
ZSA9ICgweEYgJiByZWNvcmQuYml0RGVwdGgpIDw8IDQgfCAoMHg3ICYgcmVjb3JkLmNocm9tYVN1
YnNhbXBsaW5nKSA8PCAxIHwgKDB4MSAmIHJlY29yZC52aWRlb0Z1bGxSYW5nZUZsYWcpOworICAg
IHVpbnQxNl90IGNvZGVjSW50aWFsaXphdGlvbkRhdGFTaXplID0gMDsKKworICAgIGF1dG8gdmll
dyA9IEpTQzo6RGF0YVZpZXc6OmNyZWF0ZShBcnJheUJ1ZmZlcjo6Y3JlYXRlKFZQQ29kZWNDb25m
aWd1cmF0aW9uQ29udGVudHNTaXplLCAxKSwgMCwgVlBDb2RlY0NvbmZpZ3VyYXRpb25Db250ZW50
c1NpemUpOworICAgIHZpZXctPnNldCgwLCB2ZXJzaW9uQW5kRmxhZ3MsIGZhbHNlKTsKKyAgICB2
aWV3LT5zZXQoNCwgcmVjb3JkLnByb2ZpbGUsIGZhbHNlKTsKKyAgICB2aWV3LT5zZXQoNSwgcmVj
b3JkLmxldmVsLCBmYWxzZSk7CisgICAgdmlldy0+c2V0KDYsIGJpdERlcHRoQ2hyb21hQW5kUmFu
Z2UsIGZhbHNlKTsKKyAgICB2aWV3LT5zZXQoNywgcmVjb3JkLmNvbG9yUHJpbWFyaWVzLCBmYWxz
ZSk7CisgICAgdmlldy0+c2V0KDgsIHJlY29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGljcywgZmFs
c2UpOworICAgIHZpZXctPnNldCg5LCByZWNvcmQubWF0cml4Q29lZmZpY2llbnRzLCBmYWxzZSk7
CisgICAgdmlldy0+c2V0KDEwLCBjb2RlY0ludGlhbGl6YXRpb25EYXRhU2l6ZSwgZmFsc2UpOwor
CisgICAgYXV0byBkYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgKGNvbnN0IFVJbnQ4ICopdmlldy0+ZGF0YSgpLCB2aWV3LT5ieXRlTGVuZ3RoKCkpKTsKKwor
ICAgIENGVHlwZVJlZiBjb25maWd1cmF0aW9uS2V5c1tdID0geyBDRlNUUigidnBjQyIpIH07Cisg
ICAgQ0ZUeXBlUmVmIGNvbmZpZ3VyYXRpb25WYWx1ZXNbXSA9IHsgZGF0YS5nZXQoKSB9OworICAg
IGF1dG8gY29uZmlndXJhdGlvbkRpY3QgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBjb25maWd1cmF0aW9uS2V5cywgY29uZmlndXJhdGlvblZhbHVlcywg
V1RGX0FSUkFZX0xFTkdUSChjb25maWd1cmF0aW9uS2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtl
eUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKworICAgIFZl
Y3RvcjxDRlR5cGVSZWY+IGV4dGVuc2lvbnNLZXlzIHsga0NNRm9ybWF0RGVzY3JpcHRpb25FeHRl
bnNpb25fU2FtcGxlRGVzY3JpcHRpb25FeHRlbnNpb25BdG9tcyB9OworICAgIFZlY3RvcjxDRlR5
cGVSZWY+IGV4dGVuc2lvbnNWYWx1ZXMgPSB7IGNvbmZpZ3VyYXRpb25EaWN0LmdldCgpIH07CisK
KyAgICBpZiAocmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxhZyA9PSBWUENvbmZpZ3VyYXRpb25SYW5n
ZTo6RnVsbFJhbmdlKSB7CisgICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ01Gb3JtYXRE
ZXNjcmlwdGlvbkV4dGVuc2lvbl9GdWxsUmFuZ2VWaWRlbyk7CisgICAgICAgIGV4dGVuc2lvbnNW
YWx1ZXMuYXBwZW5kKGtDRkJvb2xlYW5UcnVlKTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBjbUNv
bG9yUHJpbWFyaWVzID0gY29udmVydFRvQ01Db2xvclByaW1hcmllcyhyZWNvcmQuY29sb3JQcmlt
YXJpZXMpKSB7CisgICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlckNv
bG9yUHJpbWFyaWVzS2V5KTsKKyAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21Db2xv
clByaW1hcmllcyk7CisgICAgfQorCisgICAgaWYgKGF1dG8gY21UcmFuc2ZlckZ1bmN0aW9uID0g
Y29udmVydFRvQ01UcmFuc2ZlckZ1bmN0aW9uKHJlY29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGlj
cykpIHsKKyAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyVHJhbnNm
ZXJGdW5jdGlvbktleSk7CisgICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGNtVHJhbnNm
ZXJGdW5jdGlvbik7CisgICAgfQorCisgICAgaWYgKGF1dG8gY21NYXRyaXggPSBjb252ZXJ0VG9D
TVlDYkNSTWF0cml4KHJlY29yZC5tYXRyaXhDb2VmZmljaWVudHMpKSB7CisgICAgICAgIGV4dGVu
c2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5KTsKKyAgICAgICAg
ZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21NYXRyaXgpOworICAgIH0KKworICAgIGF1dG8gZXh0
ZW5zaW9ucyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGV4dGVuc2lvbnNLZXlzLmRhdGEoKSwgZXh0ZW5zaW9uc1ZhbHVlcy5kYXRhKCksIGV4dGVuc2lv
bnNLZXlzLnNpemUoKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURp
Y3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworCisgICAgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9u
UmVmIGZvcm1hdERlc2NyaXB0aW9uID0gbnVsbHB0cjsKKyAgICBpZiAobm9FcnIgIT0gQ01WaWRl
b0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDTVZpZGVvQ29k
ZWNUeXBlX1ZQOSwgcGFyc2VyLndpZHRoKCksIHBhcnNlci5oZWlnaHQoKSwgZXh0ZW5zaW9ucy5n
ZXQoKSwgJmZvcm1hdERlc2NyaXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
cmV0dXJuIGFkb3B0Q0YoZm9ybWF0RGVzY3JpcHRpb24pOworfQorCiB9CiAKICNlbmRpZiAvLyBQ
TEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmIxZjYzN2MwMjRmOGM1ODdlYWNiM2I3ZWEwMTc3MjYzY2E4NzgzNDkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGls
aXRpZXNDb2NvYS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIFBMQVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitj
bGFzcyBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOwordHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVl
Q01Gb3JtYXREZXNjcmlwdGlvbiogQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitib29sIGlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpOworUmV0YWluUHRy
PENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZVZvcmJpc0F1ZGlvRm9ybWF0RGVzY3JpcHRp
b24oc2l6ZV90LCBjb25zdCB2b2lkKik7CisKK2Jvb2wgaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgp
OworUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZU9wdXNBdWRpb0Zvcm1h
dERlc2NyaXB0aW9uKHNpemVfdCwgY29uc3Qgdm9pZCopOworCit9CisKKyNlbmRpZiAvLyAmJiBQ
TEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjI3M2RjZTE1N2RjZWY2MmNmNWZmYTc2OTIyOTRjOTFlYzFhNmNmZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0
aWxpdGllc0NvY29hLm1tCkBAIC0wLDAgKzEsMjA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oIgorCisjaWYgUExB
VEZPUk0oQ09DT0EpCisKKyNpbXBvcnQgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgorI2lt
cG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVkaWFVdGlsaXRpZXMuaCIKKyNpbXBvcnQgPEF1
ZGlvVG9vbGJveC9BdWRpb0NvbXBvbmVudC5oPgorI2ltcG9ydCA8QXVkaW9Ub29sYm94L0F1ZGlv
Rm9ybWF0Lmg+CisjaW1wb3J0IDxDb3JlTWVkaWEvQ01Gb3JtYXREZXNjcmlwdGlvbi5oPgorI2lt
cG9ydCA8ZGxmY24uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgRU5BQkxFKFZPUkJJ
UykgfHwgRU5BQkxFKE9QVVMpCitzdGF0aWMgYm9vbCByZWdpc3RlckRlY29kZXJGYWN0b3J5KGNv
bnN0IGNoYXIqIGRlY29kZXJOYW1lLCBPU1R5cGUgZGVjb2RlclR5cGUpCit7CisgICAgY29uc3Rl
eHByIGNoYXIgYXVkaW9Db21wb25lbnRzRHlsaWJbXSA9ICIvU3lzdGVtL0xpYnJhcnkvQ29tcG9u
ZW50cy9BdWRpb0NvZGVjcy5jb21wb25lbnQvQ29udGVudHMvTWFjT1MvQXVkaW9Db2RlY3MiOwor
ICAgIHZvaWQgKmhhbmRsZSA9IGRsb3BlbihhdWRpb0NvbXBvbmVudHNEeWxpYiwgUlRMRF9MQVpZ
IHwgUlRMRF9MT0NBTCk7CisgICAgaWYgKCFoYW5kbGUpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIEF1ZGlvQ29tcG9uZW50RmFjdG9yeUZ1bmN0aW9uIGRlY29kZXJGYWN0b3J5ID0gcmVp
bnRlcnByZXRfY2FzdDxBdWRpb0NvbXBvbmVudEZhY3RvcnlGdW5jdGlvbj4oZGxzeW0oaGFuZGxl
LCBkZWNvZGVyTmFtZSkpOworICAgIGlmICghZGVjb2RlckZhY3RvcnkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIEF1ZGlvQ29tcG9uZW50RGVzY3JpcHRpb24gZGVzYyB7ICdhZGVjJywg
ZGVjb2RlclR5cGUsICdhcHBsJywga0F1ZGlvQ29tcG9uZW50RmxhZ19TYW5kYm94U2FmZSwgMCB9
OworICAgIGlmICghQXVkaW9Db21wb25lbnRSZWdpc3RlcigmZGVzYywgQ0ZTVFIoIiIpLCAwLCBk
ZWNvZGVyRmFjdG9yeSkpIHsKKyAgICAgICAgZGxjbG9zZShoYW5kbGUpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBSZXRhaW5Q
dHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkZv
ckZvcm1hdChPU1R5cGUgZm9ybWF0SUQsIFZlY3Rvcjx1aW50OF90PiBtYWdpY0Nvb2tpZSkKK3sK
KyAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gYXNiZCB7IH07CisgICAgYXNiZC5tRm9y
bWF0SUQgPSBmb3JtYXRJRDsKKyAgICB1aW50MzJfdCBzaXplID0gc2l6ZW9mKGFzYmQpOworICAg
IGF1dG8gZXJyb3IgPSBBdWRpb0Zvcm1hdEdldFByb3BlcnR5KGtBdWRpb0Zvcm1hdFByb3BlcnR5
X0Zvcm1hdEluZm8sIG1hZ2ljQ29va2llLnNpemUoKSwgbWFnaWNDb29raWUuZGF0YSgpLCAmc2l6
ZSwgJmFzYmQpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihN
ZWRpYSwgImNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25Gb3JGb3JtYXQgZmFpbGVkIHdpdGgg
ZXJyb3IgJWQgKCUuNHMpIiwgZXJyb3IsIChjaGFyICopJmVycm9yKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRp
b24oQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKGFzYmQpLCBtYWdpY0Nvb2tpZS5zaXplKCksIG1h
Z2ljQ29va2llLmRhdGEoKSk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKFZPUkJJUykgfHwgRU5BQkxF
KE9QVVMpCisKKyNpZiBFTkFCTEUoT1BVUykKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gY29va2ll
RnJvbU9wdXNDb2RlY1ByaXZhdGUoc2l6ZV90LCBjb25zdCB2b2lkKikKK3sKKyAgICByZXR1cm4g
eyB9OworfQorI2VuZGlmCisKK2Jvb2wgaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpCit7CisgICAg
c3RhdGljIGJvb2wgYXZhaWxhYmxlOworCisjaWYgRU5BQkxFKE9QVVMpICYmIFBMQVRGT1JNKE1B
QykKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9v
bmNlKCZvbmNlVG9rZW4sIF57CisgICAgICAgIGF2YWlsYWJsZSA9IHJlZ2lzdGVyRGVjb2RlckZh
Y3RvcnkoIkFDT3B1c0RlY29kZXJGYWN0b3J5IiwgJ29wdXMnKTsKKyAgICB9KTsKKyNlbmRpZgor
CisgICAgcmV0dXJuIGF2YWlsYWJsZTsKK30KKworUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRp
b25SZWY+IGNyZWF0ZU9wdXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKHNpemVfdCBwcml2YXRlRGF0
YVNpemUsIGNvbnN0IHZvaWQqIHByaXZhdGVEYXRhKQoreworI2lmIEVOQUJMRShPUFVTKQorICAg
IGlmICghaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGF1dG8gY29va2llRGF0YSA9IGNvb2tpZUZyb21PcHVzQ29kZWNQcml2YXRlKHByaXZh
dGVEYXRhU2l6ZSwgcHJpdmF0ZURhdGEpOworICAgIGlmICghY29va2llRGF0YS5zaXplKCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGNyZWF0ZUF1ZGlvRm9ybWF0RGVz
Y3JpcHRpb25Gb3JGb3JtYXQoJ29wdXMnLCBjb29raWVEYXRhKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKHByaXZhdGVEYXRhU2l6ZSk7CisgICAgVU5VU0VEX1BBUkFNKHByaXZhdGVEYXRhKTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKFZPUkJJUykKK3N0
YXRpYyBWZWN0b3I8dWludDhfdD4gY29va2llRnJvbVZvcmJpc0NvZGVjUHJpdmF0ZShzaXplX3Qg
Y29kZWNQcml2YXRlU2l6ZSwgY29uc3Qgdm9pZCogY29kZWNQcml2YXRlRGF0YSkKK3sKKyAgICAv
LyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1jZWxsYXItY29kZWMtMDMK
KyAgICAvLyA2LjQuMTUuIEFfVk9SQklTCisgICAgLy8gQ29kZWMgSUQ6IEFfVk9SQklTCisgICAg
Ly8gQ29kZWMgTmFtZTogVm9yYmlzCisgICAgLy8gSW5pdGlhbGl6YXRpb246IFRoZSAiUHJpdmF0
ZSBEYXRhIiBjb250YWlucyB0aGUgZmlyc3QgdGhyZWUgVm9yYmlzIHBhY2tldCBpbiBvcmRlci4g
VGhlIGxlbmd0aHMgb2YgdGhlCisgICAgLy8gcGFja2V0cyBwcmVjZWRlcyB0aGVtLiBUaGUgYWN0
dWFsIGxheW91dCBpczoKKyAgICAvLyAtIEJ5dGUgMTogbnVtYmVyIG9mIGRpc3RpbmN0IHBhY2tl
dHMgJyIjcCInIG1pbnVzIG9uZSBpbnNpZGUgdGhlIENvZGVjUHJpdmF0ZSBibG9jay5UaGlzIE1V
U1QgYmUgJzInCisgICAgLy8gICBmb3IgY3VycmVudCAoYXMgb2YgMjAxNi0wNy0wOCkgVm9yYmlz
IGhlYWRlcnMuCisgICAgLy8gLSBCeXRlcyAyLi5uOiBsZW5ndGhzIG9mIHRoZSBmaXJzdCAnIiNw
IicgcGFja2V0cywgY29kZWQgaW4gWGlwaC1zdHlsZSBsYWNpbmcuIFRoZSBsZW5ndGggb2YgdGhl
IGxhc3QKKyAgICAvLyAgIHBhY2tldCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBDb2RlY1ByaXZhdGUg
YmxvY2sgbWludXMgdGhlIGxlbmd0aHMgY29kZWQgaW4gdGhlc2UgYnl0ZXMgbWludXMgb25lLgor
ICAgIC8vIC0gQnl0ZXMgbisxLi46IFRoZSBWb3JiaXMgaWRlbnRpZmljYXRpb24gaGVhZGVyLCBm
b2xsb3dlZCBieSB0aGUgVm9yYmlzIGNvbW1lbnQgaGVhZGVyIGZvbGxvd2VkIGJ5IHRoZQorICAg
IC8vICAgY29kZWMgc2V0dXAgaGVhZGVyLgorCisgICAgY29uc3QgdW5zaWduZWQgY2hhciogcHJp
dmF0ZURhdGFQdHIgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oY29kZWNQcml2
YXRlRGF0YSk7CisKKyAgICBjb25zdCBpbnQgdm9yYmlzTWluaW11bUNvb2tpZVNpemUgPSAzOwor
ICAgIGlmIChjb2RlY1ByaXZhdGVTaXplIDwgdm9yYmlzTWluaW11bUNvb2tpZVNpemUpIHsKKyAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTWVkaWEsICJjb29raWVGcm9tVm9yYmlzQ29kZWNQcml2
YXRlOiBjb2RlYyBwcml2YXRlIGRhdGEgdG9vIHNtYWxsICglenUpIiwgY29kZWNQcml2YXRlU2l6
ZSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgLy8gRGVzcGl0ZSB0aGUgIlRo
aXMgTVVTVCBiZSAnMiciIGNvbW1lbnQgaW4gdGhlIElFVEYgZG9jdW1lbnQsIHBhY2tldCBjb3Vu
dCBpcyBub3QgYWx3YXlzIGVxdWFsIHRvCisgICAgLy8gMiBpbiByZWFsLXdvcmQgZmlsZXMsIHNv
IGlnbm9yZSB0aGF0IGZpZWxkLgorICAgIGNvbnN0IHVpbnQxNl90IGlkSGVhZGVyU2l6ZSA9IHBy
aXZhdGVEYXRhUHRyWzFdOworICAgIGNvbnN0IHVpbnQxNl90IGNvbW1lbnRIZWFkZXJTaXplID0g
cHJpdmF0ZURhdGFQdHJbMl07CisgICAgY29uc3QgdWludDE2X3QgY2FsY3VsYXRlZEhlYWRlclNp
emUgPSAxICsgaWRIZWFkZXJTaXplICsgY29tbWVudEhlYWRlclNpemU7CisgICAgaWYgKDEgKyBp
ZEhlYWRlclNpemUgKyBjb21tZW50SGVhZGVyU2l6ZSA+IGNvZGVjUHJpdmF0ZVNpemUpIHsKKyAg
ICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTWVkaWEsICJjb29raWVGcm9tVm9yYmlzQ29kZWNQcml2
YXRlOiBjb2RlYyBwcml2YXRlIGRhdGEgdG9vIHNtYWxsICglenUpIGZvciBoZWFkZXIgc2l6ZXMg
KCVkKSIsIGNvZGVjUHJpdmF0ZVNpemUsIGNhbGN1bGF0ZWRIZWFkZXJTaXplKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBpZEhlYWRlciA9
ICZwcml2YXRlRGF0YVB0clszXTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBjb21tZW50SGVh
ZGVyID0gaWRIZWFkZXIgKyBpZEhlYWRlclNpemU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciog
Y29kZWNTZXR1cEhlYWRlciA9IGNvbW1lbnRIZWFkZXIgKyBjb21tZW50SGVhZGVyU2l6ZTsKKyAg
ICBjb25zdCB1aW50MTZfdCBjb2RlY1NldHVwSGVhZGVyU2l6ZSA9IGNvZGVjUHJpdmF0ZVNpemUg
LSBpZEhlYWRlclNpemUgLSBjb21tZW50SGVhZGVyU2l6ZSAtIDIgLSAxOworCisgICAgaWYgKChp
ZEhlYWRlclNpemUgKyBjb21tZW50SGVhZGVyU2l6ZSArIGNvZGVjU2V0dXBIZWFkZXJTaXplICsg
MykgPiBjb2RlY1ByaXZhdGVTaXplKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE1lZGlh
LCAiY29va2llRnJvbVZvcmJpc0NvZGVjUHJpdmF0ZTogY29kZWMgcHJpdmF0ZSBoZWFkZXIgc2l6
ZSBpcyBpbnZhbGlkIC0gaWQgPSAlZCwgY29tbWVudCA9ICVkLCBoZWFkZXIgPSAlZCwgY2h1bmsg
c2l6ZSA9ICV6dSIsIGlkSGVhZGVyU2l6ZSwgY29tbWVudEhlYWRlclNpemUsIGNvZGVjU2V0dXBI
ZWFkZXJTaXplLCBjb2RlY1ByaXZhdGVTaXplKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICBWZWN0b3I8dWludDhfdD4gY29va2llRGF0YTsKKyAgICBjb29raWVEYXRhLmFwcGVu
ZChyZWludGVycHJldF9jYXN0X3B0cjxjb25zdCB1aW50OF90Kj4oJmlkSGVhZGVyU2l6ZSksIHNp
emVvZihpZEhlYWRlclNpemUpKTsKKyAgICBjb29raWVEYXRhLmFwcGVuZChpZEhlYWRlciwgaWRI
ZWFkZXJTaXplKTsKKworICAgIGNvb2tpZURhdGEuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3RfcHRy
PGNvbnN0IHVpbnQ4X3QqPigmY29tbWVudEhlYWRlclNpemUpLCBzaXplb2YoY29tbWVudEhlYWRl
clNpemUpKTsKKyAgICBjb29raWVEYXRhLmFwcGVuZChjb21tZW50SGVhZGVyLCBjb21tZW50SGVh
ZGVyU2l6ZSk7CisKKyAgICBjb29raWVEYXRhLmFwcGVuZChyZWludGVycHJldF9jYXN0X3B0cjxj
b25zdCB1aW50OF90Kj4oJmNvZGVjU2V0dXBIZWFkZXJTaXplKSwgc2l6ZW9mKGNvZGVjU2V0dXBI
ZWFkZXJTaXplKSk7CisgICAgY29va2llRGF0YS5hcHBlbmQoY29kZWNTZXR1cEhlYWRlciwgY29k
ZWNTZXR1cEhlYWRlclNpemUpOworCisgICAgcmV0dXJuIGNvb2tpZURhdGE7Cit9CisjZW5kaWYg
Ly8gRU5BQkxFKFZPUkJJUykKKworYm9vbCBpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKQorewor
ICAgIHN0YXRpYyBib29sIGF2YWlsYWJsZTsKKworI2lmIEVOQUJMRShWT1JCSVMpICYmIFBMQVRG
T1JNKE1BQykKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNw
YXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57CisgICAgICAgIGF2YWlsYWJsZSA9IHJlZ2lzdGVyRGVj
b2RlckZhY3RvcnkoIkFDVm9yYmlzRGVjb2RlckZhY3RvcnkiLCAndm9yYicpOworICAgIH0pOwor
I2VuZGlmCisKKyAgICByZXR1cm4gYXZhaWxhYmxlOworfQorCitSZXRhaW5QdHI8Q01Gb3JtYXRE
ZXNjcmlwdGlvblJlZj4gY3JlYXRlVm9yYmlzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihzaXplX3Qg
cHJpdmF0ZURhdGFTaXplLCBjb25zdCB2b2lkKiBwcml2YXRlRGF0YSkKK3sKKyNpZiBFTkFCTEUo
Vk9SQklTKQorICAgIGlmICghaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgYXV0byBjb29raWVEYXRhID0gY29va2llRnJvbVZvcmJpc0Nv
ZGVjUHJpdmF0ZShwcml2YXRlRGF0YVNpemUsIHByaXZhdGVEYXRhKTsKKyAgICBpZiAoIWNvb2tp
ZURhdGEuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBjcmVh
dGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uRm9yRm9ybWF0KCd2b3JiJywgY29va2llRGF0YSk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShwcml2YXRlRGF0YVNpemUpOworICAgIFVOVVNFRF9QQVJB
TShwcml2YXRlRGF0YSk7CisgICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKK30KKworfQorCisj
ZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCg==
</data>
<flag name="commit-queue"
          id="433289"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415923</attachid>
            <date>2020-12-10 13:41:45 -0800</date>
            <delta_ts>2020-12-10 14:16:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219755-20201210134145.patch</filename>
            <type>text/plain</type>
            <size>85179</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwNjM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGE5YjdjY2JmMTY3YWI0
M2I1YWYzZWIzZmI0Y2QzMDM2MTdiZmI3ZS4uZDBmZTg1NmUyNmI0NDdlZjg0MGFiOThlM2M2ZjFk
YTU0ZWEzOTkzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDIwLTEyLTEwICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNU0VdIFJlZmFj
dG9yIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gaW4gcHJlcGFyYXRpb24gZm9yIHN1cHBvcnRpbmcg
YXVkaW8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
OTc1NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzIxOTI2MjU+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3IgdGhlIFdlYk0gcGFyc2Vy
IGluIHByZXBhcmF0aW9uIGZvciBzdXBwb3J0aW5nIGF1ZGlvOiBtb3ZlIFZQOS1zcGVjaWZpYyBj
b2RlCisgICAgICAgIGludG8gVlA5VXRpbGl0aWVzQ29jb2EsIGNvbnZlcnQgVHJhY2tEYXRhIGZy
b20gYSBzdHJ1Y3QgdG8gYSBjbGFzcyBhbmQgbWFkZSBkZXJpdmVkCisgICAgICAgIGNsYXNzZXMg
Zm9yIGF1ZGlvIGFuZCB2aWRlbywgYWRkIHN0dWIgZnVuY3Rpb24gdG8gY3JlYXRlIGZvcm1hdCBk
ZXNjcmlwdGlvbnMgZm9yIAorICAgICAgICBWb3JiaXMgYW5kIE9wdXMgYXVkaW8uCisKKyAgICAg
ICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKworICAgICAgICAqIHBsYXRmb3JtL2NvY29hL01lZGlhVXRpbGl0aWVzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24pOiBBZGQg
b3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgbWFnaWMgY29va2llLgorICAgICAgICAqIHBsYXRmb3Jt
L2NvY29hL01lZGlhVXRpbGl0aWVzLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OmlzQ29udGVudFR5cGVTdXBwb3J0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnJlc2V0UGFyc2VyU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6dHJhY2tEYXRhRm9yVHJhY2tOdW1iZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25UcmFja0VudHJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cHJvdmlkZU1lZGlhRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0
YTo6Y29uc3VtZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJh
bWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlv
VHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6Zmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldE1pbmltdW1BdWRpb1NhbXBsZUR1cmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NvbG9yUHJpbWFyaWVzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NNQ29sb3JQcmltYXJpZXMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01UcmFuc2ZlckZ1bmN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb01hdHJpeENvZWZmaWNpZW50cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9DTVlDYkNSTWF0cml4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJz
YW1wbGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGb3JtYXREZXNjcmlw
dGlvbkZyb21WUDlIZWFkZXJQYXJzZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKGlzVHlwZSk6
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1t
OgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ29sb3JQcmltYXJpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Y29udmVydFRvQ01Db2xvclByaW1hcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpj
b252ZXJ0VG9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpjb252
ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvTWF0
cml4Q29lZmZpY2llbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NNWUNiQ1JNYXRy
aXgpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFN1YnNhbXBsaW5nWFlUb0Nocm9tYVN1YnNh
bXBsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQ
OUhlYWRlclBhcnNlcik6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJN
QXVkaW9VdGlsaXRpZXNDb2NvYS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpyZWdpc3RlckRlY29kZXJGYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF1
ZGlvRm9ybWF0RGVzY3JpcHRpb25Gb3JGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2ll
RnJvbU9wdXNDb2RlY1ByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNPcHVzRGVjb2RlckF2
YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVPcHVzQXVkaW9Gb3JtYXREZXNjcmlw
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVGcm9tVm9yYmlzQ29kZWNQcml2YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OmlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVWb3JiaXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKToKKwogMjAyMC0xMi0x
MCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0lGQ10g
SW50cm9kdWNlIElubGluZVRleHRJdGVtOjppc1dvcmRTZXBhcmF0b3IKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29j
b2EudHh0CmluZGV4IDhmOTlmOWExOTE4Yzk1NTg4NWZiMmFjYjk5YzhkMWE3NTI2NWFhMDMuLmU1
OTEzOWZiYjQ1NjUwZGVmOTk2ZjgyMWQ1Y2FmYTQwYjcyZDhlY2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0Nv
Y29hLnR4dApAQCAtMzc2LDYgKzM3Niw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkNv
cmVDQUxheWVyRXh0cmFzLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJDb3JlRGVjb21w
cmVzc2lvblNlc3Npb24ubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0K
IHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdQVUxheWVyLm1tCitwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9XZWJNVXRpbGl0aWVzQ29jb2EubW0gQG5vLXVuaWZ5CiBwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9WaWRlb1RyYWNrUHJpdmF0ZVdlYk0uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
dGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQv
Rm9udENvcmVUZXh0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGJlNGZjYWZmOWZjOTI1OWI0NmMzNTM5YjZlYTkzYWY0YWRj
N2ZiMjUuLmZmNTJhMDZhMjY3NjNjN2U3Yjg3ODU0ZDcyOTQ0MGVhMjI1YTY0Y2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIx
OCw2ICsyMTgsOCBAQAogCQkwN0VFNzZFQzFCRTk2REIwMDBGODkxMzMgLyogTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3RUU3NkVBMUJFOTZEQjAwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3RUU3
NkVGMUJFQTYxOTgwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdFRTc2RUQxQkVBNjE5
ODAwRjg5MTMzIC8qIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLmggKi87IH07CiAJCTA3RjRF
OTMzMjBCMzU4N0YwMDJFMzgwMyAvKiBBVkFzc2V0TUlNRVR5cGVDYWNoZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdDOEFEMTIxRDA3M0Q2MzAwODdD
NUNFIC8qIEFWQXNzZXRNSU1FVHlwZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMDdGNUNGRjUyNTgyQTUxRDAwNjYyRUY1IC8qIFdlYk1B
dWRpb1V0aWxpdGllc0NvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwN0Y1Q0ZGNDI1ODJBNEY4MDA2NjJFRjUgLyogV2ViTUF1ZGlvVXRpbGl0aWVz
Q29jb2EuaCAqLzsgfTsKKwkJMDdGNUNGRjYyNTgyQTUyOTAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0
aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDdGNUNGRjIyNTgyQTRGODAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29h
Lm1tICovOyB9OwogCQkwN0Y4NzY4NDFBRDU4MEY5MDA5MDU4NDkgLyogTWVkaWFQbGF5YmFja1Rh
cmdldENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3Rjg3NjgzMUFENEE5NDUwMDkwNTg0OSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0Q29udGV4
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3
Rjk0NDE2MTg2NEQwNDYwMDVEMzFDQiAvKiBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQUU4QzA4MTc0
NkI5NTcwMDUzMkQ3OCAvKiBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwN0ZFOTlERDE4ODA3QTdE
MDAyNTY2NDggLyogTWVkaWFFbGVtZW50U2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdGRTk5REIxODgwN0E3RDAwMjU2NjQ4IC8qIE1lZGlh
RWxlbWVudFNlc3Npb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtNTg3NSw2ICs1ODc3LDggQEAKIAkJMDdFRTc2RUExQkU5NkRCMDAwRjg5MTMz
IC8qIE1vY2tSZWFsdGltZVZpZGVvU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1vY2tSZWFsdGltZVZpZGVvU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA3RUU3NkVEMUJFQTYxOTgwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJj
ZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrUmVhbHRpbWVWaWRl
b1NvdXJjZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwN0VFNzZFRTFCRUE2
MTk4MDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDdGNUNGRjIyNTgyQTRGODAwNjYyRUY1
IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2Vi
TUF1ZGlvVXRpbGl0aWVzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3
RjVDRkY0MjU4MkE0RjgwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwN0Y4NzY4MzFBRDRBOTQ1MDA5MDU4NDkgLyogTWVkaWFQbGF5YmFja1Rhcmdl
dENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFQbGF5YmFj
a1RhcmdldENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdGRTk5REEx
ODgwN0E3RDAwMjU2NjQ4IC8qIE1lZGlhRWxlbWVudFNlc3Npb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFFbGVtZW50U2Vzc2lvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3RkU5OURCMTg4MDdBN0QwMDI1NjY0OCAvKiBNZWRpYUVs
ZW1lbnRTZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRWxl
bWVudFNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2ODY3LDYgKzI2
ODcxLDggQEAKIAkJCQk0OUZGQkYzRTExQzkzRUUzMDA2QTcxMTggLyogV2ViR0xMYXllci5tbSAq
LywKIAkJCQkzMTg0MzZEQjIxQjlEQUEwMDBFRDM4M0UgLyogV2ViR1BVTGF5ZXIuaCAqLywKIAkJ
CQkzMTg0MzZERDIxQjlEQUEwMDBFRDM4M0UgLyogV2ViR1BVTGF5ZXIubW0gKi8sCisJCQkJMDdG
NUNGRjQyNTgyQTRGODAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29hLmggKi8sCisJ
CQkJMDdGNUNGRjIyNTgyQTRGODAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1t
ICovLAogCQkJKTsKIAkJCXBhdGggPSBjb2NvYTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CkBAIC0zNTI1Niw2ICszNTI2Miw3IEBACiAJCQkJNDk0QkQ3OTUwRjU1QzhFRTAwNzQ3ODI4IC8q
IFdlYktpdFBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUMwRkYyNTBFNENFQjZFMDA3RDZG
RTUgLyogV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNGMzMy
RjBGMkI5QTI1MDA0QjY3OTUgLyogV2ViTGF5ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3RjVD
RkY1MjU4MkE1MUQwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMDcwOUQ3OEYxQUU1NTU1NDAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1h
bmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3MDlENzk1MUFFNTVBMjkwMDRFNDJGOCAvKiBX
ZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzA5RDc5
MzFBRTU1NTdFMDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zNjYxMCw2ICszNjYxNyw3IEBACiAJCQkJMkQwNjIxNEQxREE2M0E4QjAwQTdG
QjI2IC8qIFdlYktpdE1lZGlhS2V5cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDA2MjE0RjFE
QTYzQTkxMDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlTZXNzaW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTdDNDhBNkQwMTkxQzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3BhY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMDdGNUNGRjYyNTgyQTUyOTAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0
aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMDcwOUQ3OTIxQUU1NTU3RTAwNEU0
MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUNBRjM0ODIwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUNFQ0RDOTNDMjFGMjk3MjkwMDk3NkJEMSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQVZLaXQubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL01lZGlhVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL01lZGlhVXRpbGl0aWVzLmNwcAppbmRleCBiNDhiNGY1NjMzMmQwNTlkOWZi
MTc3NTU0MzBhMWY4ZTA1NjJjY2M1Li5hNTMzMzJjZjdkYmQ2NDY2ZjQ0ZjU3NmQxY2Q3YWRlNzYx
NTBhYTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NZWRpYVV0
aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTWVkaWFVdGls
aXRpZXMuY3BwCkBAIC0zNSwxMSArMzUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgUEFMOwogCi1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3Jl
YXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBk
ZXNjcmlwdGlvbikKK1JldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVBdWRp
b0Zvcm1hdERlc2NyaXB0aW9uKGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCBzaXplX3QgbWFnaWNDb29raWVTaXplLCBjb25zdCB2b2lkKiBtYWdpY0Nvb2tpZSkKIHsK
ICAgICBhdXRvIGJhc2ljRGVzY3JpcHRpb24gPSBXVEY6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJh
c2ljRGVzY3JpcHRpb24qPihkZXNjcmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3Jp
cHRpb24pOwogICAgIENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0ID0gbnVsbHB0cjsKLSAg
ICBhdXRvIGVycm9yID0gQ01BdWRpb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGJhc2ljRGVzY3JpcHRpb24sIDAsIG51bGxwdHIsIDAsIG51bGxwdHIsIG51bGxw
dHIsICZmb3JtYXQpOworICAgIGF1dG8gZXJyb3IgPSBDTUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25D
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYmFzaWNEZXNjcmlwdGlvbiwgMCwgbnVsbHB0ciwg
bWFnaWNDb29raWVTaXplLCBtYWdpY0Nvb2tpZSwgbnVsbHB0ciwgJmZvcm1hdCk7CiAgICAgaWYg
KGVycm9yKSB7CiAgICAgICAgIExPR19FUlJPUigiY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlv
biBmYWlsZWQgd2l0aCAlZCIsIGVycm9yKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NZWRpYVV0aWxpdGllcy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTWVkaWFVdGlsaXRpZXMuaAppbmRleCA2YjY3
YzY2Nzg1ZDQ3ZDI3MDJiNWM2NDllZjI4NWU0YjBhNWUxMjY2Li45MTcwOGVhMjJhZDRiNWJiYzdl
Zjg5ZDRjYjVkYjM1OTlkOGU2MjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9NZWRpYVV0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL01lZGlhVXRpbGl0aWVzLmgKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjsKIGNsYXNzIFBsYXRmb3JtQXVkaW9EYXRh
OwogCi1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9Gb3JtYXRE
ZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJik7CitSZXRhaW5QdHI8Q01G
b3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihjb25zdCBB
dWRpb1N0cmVhbURlc2NyaXB0aW9uJiwgc2l6ZV90IG1hZ2ljQ29va2llU2l6ZSA9IDAsIGNvbnN0
IHZvaWQqIG1hZ2ljQ29va2llID0gbnVsbHB0cik7CiBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJS
ZWY+IGNyZWF0ZUF1ZGlvU2FtcGxlQnVmZmVyKGNvbnN0IFBsYXRmb3JtQXVkaW9EYXRhJiwgY29u
c3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYsIENNVGltZSwgc2l6ZV90IHNhbXBsZUNvdW50KTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNw
cAppbmRleCBiZTFlMDg2ZTBhYzUyMzU0NjM2YTAwNmFiMzJkMWI5MmY0MGI0ZDgxLi44OTNkNDky
MTIxYWE0ZmUwZGZiNzIzNGFmZjFkNjVkMjc2ODgzOTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNLmNwcApAQCAtMzksMTEgKzM5LDEzIEBACiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCiAjaW5jbHVkZSAiVlA5VXRpbGl0aWVzQ29jb2EuaCIKICNpbmNsdWRlICJWaWRlb1RyYWNr
UHJpdmF0ZVdlYk0uaCIKKyNpbmNsdWRlICJXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0RhdGFWaWV3Lmg+CiAjaW5jbHVkZSA8d2VibS93ZWJtX3Bh
cnNlci5oPgogI2luY2x1ZGUgPHd0Zi9BbGdvcml0aG1zLmg+CiAjaW5jbHVkZSA8d3RmL0xvZ2dl
ckhlbHBlci5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGlzdC5oPgogI2luY2x1ZGUgPHd0
Zi9jZi9UeXBlQ2FzdHNDRi5oPgogI2luY2x1ZGUgPHd0Zi9kYXJ3aW4vV2Vha0xpbmtpbmcuaD4K
QEAgLTIzNiw3ICsyMzgsNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBMb2dBcmd1bWVudDxXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZT4gewogCiB9IC8vIG5hbWVzcGFjZSBXVEYK
IAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBQQUw7CkBAIC00NTYs
NiArNDU3LDcgQEAgcHJpdmF0ZToKIAogTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OmlzQ29udGVudFR5cGVTdXBwb3J0ZWQoY29uc3QgQ29udGVu
dFR5cGUmIHR5cGUpCiB7CisjaWYgRU5BQkxFKFZQOSkgfHwgRU5BQkxFKFZPUkJJUykgfHwgRU5B
QkxFKE9QVVMpCiAgICAgaWYgKCFpc1dlYm1QYXJzZXJBdmFpbGFibGUoKSkKICAgICAgICAgcmV0
dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CiAKQEAg
LTQ2NywxMCArNDY5LDE0IEBAIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjppc0NvbnRlbnRUeXBlU3VwcG9ydGVkKGNvCiAgICAgaWYgKCFjb2Rl
Y3NQYXJhbWV0ZXIpCiAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5
cGU6Ok1heUJlU3VwcG9ydGVkOwogCi0jaWYgRU5BQkxFKFZQOSkKICAgICBhdXRvIHNwbGl0UmVz
dWx0cyA9IFN0cmluZ1ZpZXcoY29kZWNzUGFyYW1ldGVyKS5zcGxpdCgnLCcpOwogICAgIGZvciAo
YXV0byBzcGxpdCA6IHNwbGl0UmVzdWx0cykgeworI2lmIEVOQUJMRShWUDkpCiAgICAgICAgIGlm
IChzcGxpdC5zdGFydHNXaXRoKCJ2cDA5IikpIHsKKworICAgICAgICAgICAgaWYgKCFpc1ZQOURl
Y29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVt
czo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKwogICAgICAgICAgICAgYXV0byBjb2Rl
Y1BhcmFtZXRlcnMgPSBwYXJzZVZQQ29kZWNQYXJhbWV0ZXJzKHNwbGl0KTsKICAgICAgICAgICAg
IGlmICghY29kZWNQYXJhbWV0ZXJzKQogICAgICAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXll
ckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwpAQCAtNDgwLDE0ICs0ODYsNDAg
QEAgTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
OmlzQ29udGVudFR5cGVTdXBwb3J0ZWQoY28KIAogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KLSAgICAgICAgLy8gRklYTUU6IEFkZCBPcHVzIFN1cHBvcnQKLSAgICAgICAgLy8gRklY
TUU6IEFkZCBWb3JiaXMgU3VwcG9ydAorI2VuZGlmIC8vIEVOQUJMRShWUDkpCisKKyNpZiBFTkFC
TEUoVk9SQklTKQorICAgICAgICBpZiAoc3BsaXQgPT0gInZvcmJpcyIpIHsKKyAgICAgICAgICAg
IGlmICghaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKFZPUkJJUykKKwor
I2lmIEVOQUJMRShPUFVTKQorICAgICAgICBpZiAoc3BsaXQgPT0gIm9wdXMiKSB7CisgICAgICAg
ICAgICBpZiAoIWlzT3B1c0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoT1BVUykKKwog
ICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBv
cnRlZDsKICAgICB9Ci0gICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6
SXNTdXBwb3J0ZWQ7CiAjZWxzZQotICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0
c1R5cGU6OklzTm90U3VwcG9ydGVkOwotI2VuZGlmCisgICAgVU5VU0VEX1BBUkFNKHR5cGUpCisj
ZW5kaWYgLy8gRU5BQkxFKFZQOSkgfHwgRU5BQkxFKFZPUkJJUykgfHwgRU5BQkxFKE9QVVMpCisK
KyAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc1N1cHBvcnRlZDsK
K30KKworUmVmUHRyPFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0+IFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OmNyZWF0ZShjb25zdCBDb250ZW50VHlwZSYgdHlwZSkKK3sKKyAgICBpZiAoaXNDb250ZW50
VHlwZVN1cHBvcnRlZCh0eXBlKSAhPSBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6Oklz
Tm90U3VwcG9ydGVkKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk0oKSk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKQpAQCAtNTcxLDYgKzYwMyw3IEBAIGJvb2wg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2hvdWxkUHJvdmlkZU1lZGlhZGF0YUZvclRyYWNrSUQo
dWludDY0X3QpCiB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnJlc2V0UGFyc2VyU3RhdGUo
KQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOworICAgIGZsdXNo
UGVuZGluZ0F1ZGlvQnVmZmVycygpOwogICAgIG1fcGFyc2VyLT5EaWRTZWVrKCk7CiAgICAgbV9z
dGF0ZSA9IFN0YXRlOjpOb25lOwogICAgIG1fdHJhY2tzLmNsZWFyKCk7CkBAIC02MDQsNyArNjM3
LDcgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRMb2dnZXIoY29uc3QgTG9nZ2Vy
JiBsb2dnZXIsIGNvbnN0IHZvaWQqIGxvZ0lkZW4KIGF1dG8gU291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6dHJhY2tEYXRhRm9yVHJhY2tOdW1iZXIodWludDY0X3QgdHJhY2tOdW1iZXIpIC0+IFRyYWNr
RGF0YSoKIHsKICAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV90cmFja3MpIHsKLSAgICAgICAgaWYg
KHRyYWNrLnRyYWNrLnRyYWNrX251bWJlci5pc19wcmVzZW50KCkgJiYgdHJhY2sudHJhY2sudHJh
Y2tfbnVtYmVyLnZhbHVlKCkgPT0gdHJhY2tOdW1iZXIpCisgICAgICAgIGlmICh0cmFjay0+dHJh
Y2soKS50cmFja19udW1iZXIuaXNfcHJlc2VudCgpICYmIHRyYWNrLT50cmFjaygpLnRyYWNrX251
bWJlci52YWx1ZSgpID09IHRyYWNrTnVtYmVyKQogICAgICAgICAgICAgcmV0dXJuICZ0cmFjazsK
ICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC03NDgsNyArNzgxLDcgQEAgU3RhdHVzIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uQ2x1c3RlckJlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0
YSYgbWV0YWRhdGEsIGMKIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblRyYWNrRW50
cnkoY29uc3QgRWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgVHJhY2tFbnRyeSYgdHJh
Y2tFbnRyeSkKIHsKICAgICBVTlVTRURfUEFSQU0obWV0YWRhdGEpOwotICAgIGlmICghdHJhY2tF
bnRyeS50cmFja190eXBlLmlzX3ByZXNlbnQoKSkKKyAgICBpZiAoIXRyYWNrRW50cnkudHJhY2tf
dHlwZS5pc19wcmVzZW50KCkgfHwgIXRyYWNrRW50cnkuY29kZWNfaWQuaXNfcHJlc2VudCgpKQog
ICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIAogICAgIGF1dG8g
dHJhY2tUeXBlID0gdHJhY2tFbnRyeS50cmFja190eXBlLnZhbHVlKCk7CkBAIC03NTYsOCArNzg5
LDMwIEBAIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblRyYWNrRW50cnkoY29uc3Qg
RWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uCiAgICAgICAgIG1faW5pdGlhbGl6YXRpb25T
ZWdtZW50LT52aWRlb1RyYWNrcy5hcHBlbmQoeyBNZWRpYURlc2NyaXB0aW9uV2ViTTo6Y3JlYXRl
KFRyYWNrRW50cnkodHJhY2tFbnRyeSkpLCBWaWRlb1RyYWNrUHJpdmF0ZVdlYk06OmNyZWF0ZShU
cmFja0VudHJ5KHRyYWNrRW50cnkpKSB9KTsKICAgICBlbHNlIGlmICh0cmFja1R5cGUgPT0gVHJh
Y2tUeXBlOjprQXVkaW8pCiAgICAgICAgIG1faW5pdGlhbGl6YXRpb25TZWdtZW50LT5hdWRpb1Ry
YWNrcy5hcHBlbmQoeyBNZWRpYURlc2NyaXB0aW9uV2ViTTo6Y3JlYXRlKFRyYWNrRW50cnkodHJh
Y2tFbnRyeSkpLCBBdWRpb1RyYWNrUHJpdmF0ZVdlYk06OmNyZWF0ZShUcmFja0VudHJ5KHRyYWNr
RW50cnkpKSB9KTsKLSAgICBtX3RyYWNrcy5hcHBlbmQoeyBUcmFja0VudHJ5KHRyYWNrRW50cnkp
LCB7IH0sIG51bGxwdHIsIG51bGxwdHIsIDAgfSk7CiAKKyAgICBTdHJpbmdWaWV3IGNvZGVjU3Ry
aW5nIHsgdHJhY2tFbnRyeS5jb2RlY19pZC52YWx1ZSgpLmRhdGEoKSwgKHVuc2lnbmVkKXRyYWNr
RW50cnkuY29kZWNfaWQudmFsdWUoKS5sZW5ndGgoKSB9OworI2lmIEVOQUJMRShWUDkpCisgICAg
aWYgKGNvZGVjU3RyaW5nID09ICJWX1ZQOSIgJiYgaXNWUDlEZWNvZGVyQXZhaWxhYmxlKCkpIHsK
KyAgICAgICAgbV90cmFja3MuYXBwZW5kKFZpZGVvVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBl
OjpWUDksIHRyYWNrRW50cnksICp0aGlzKSk7CisgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVz
OjprT2tDb21wbGV0ZWQpOworICAgIH0KKyNlbmRpZgorCisjaWYgRU5BQkxFKFZPUkJJUykKKyAg
ICBpZiAoY29kZWNTdHJpbmcgPT0gIkFfVk9SQklTIiAmJiBpc1ZvcmJpc0RlY29kZXJBdmFpbGFi
bGUoKSkgeworICAgICAgICBtX3RyYWNrcy5hcHBlbmQoQXVkaW9UcmFja0RhdGE6OmNyZWF0ZShD
b2RlY1R5cGU6OlZvcmJpcywgdHJhY2tFbnRyeSwgKnRoaXMsIG1fbWluaW11bUF1ZGlvU2FtcGxl
RHVyYXRpb24pKTsKKyAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7
CisgICAgfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoT1BVUykKKyAgICBpZiAoY29kZWNTdHJpbmcg
PT0gIkFfT1BVUyIgJiYgaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpKSB7CisgICAgICAgIG1fdHJh
Y2tzLmFwcGVuZChBdWRpb1RyYWNrRGF0YTo6Y3JlYXRlKENvZGVjVHlwZTo6T3B1cywgdHJhY2tF
bnRyeSwgKnRoaXMsIG1fbWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24pKTsKKyAgICAgICAgcmV0
dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CisgICAgfQorI2VuZGlmCisKKyAgICBt
X3RyYWNrcy5hcHBlbmQoVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpVbnN1cHBvcnRlZCwg
dHJhY2tFbnRyeSwgKnRoaXMpKTsKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxl
dGVkKTsKIH0KIApAQCAtODI3LDQwNiArODgyLDI4OCBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6T25CbG9ja0dyb3VwRW5kKGNvbnN0IHdlYm06OkVsZW1lbnRNZXRhZGF0
YQogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi0jaWYgRU5B
QkxFKFZQOSkKIAotc3RhdGljIHVpbnQ4X3QgY29udmVydFRvQ29sb3JQcmltYXJpZXMoY29uc3Qg
UHJpbWFyaWVzJiBjb2VmZmljaWVudHMpCit3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6T25GcmFtZShjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgUmVhZGVyKiByZWFk
ZXIsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZykKIHsKLSAgICBzd2l0Y2ggKGNvZWZmaWNpZW50
cykgewotICAgIGNhc2UgUHJpbWFyaWVzOjprQnQ3MDk6Ci0gICAgICAgIHJldHVybiBWUENvbmZp
Z3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfNzA5XzY7Ci0gICAgY2FzZSBQcmltYXJpZXM6OmtV
bnNwZWNpZmllZDoKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVz
OjpVbnNwZWNpZmllZDsKLSAgICBjYXNlIFByaW1hcmllczo6a0J0NDcwTToKLSAgICAgICAgcmV0
dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF80NzBfNl9NOwotICAgIGNhc2Ug
UHJpbWFyaWVzOjprQnQ0NzBCZzoKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9y
UHJpbWFyaWVzOjpCVF80NzBfN19CRzsKLSAgICBjYXNlIFByaW1hcmllczo6a1NtcHRlMTcwTToK
LSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF82MDFfNzsK
LSAgICBjYXNlIFByaW1hcmllczo6a1NtcHRlMjQwTToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmln
dXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9TVF8yNDA7Ci0gICAgY2FzZSBQcmltYXJpZXM6
OmtGaWxtOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkZp
bG07Ci0gICAgY2FzZSBQcmltYXJpZXM6OmtCdDIwMjA6Ci0gICAgICAgIHJldHVybiBWUENvbmZp
Z3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U7Ci0g
ICAgY2FzZSBQcmltYXJpZXM6OmtTbXB0ZVN0NDI4MToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmln
dXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9TVF80MjhfMTsKLSAgICBjYXNlIFByaW1hcmll
czo6a1NtcHRlUnA0MzE6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1h
cmllczo6U01QVEVfUlBfNDMxXzI7Ci0gICAgY2FzZSBQcmltYXJpZXM6OmtTbXB0ZUVnNDMyOgot
ICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX0VHXzQz
Ml8xOwotICAgIGNhc2UgUHJpbWFyaWVzOjprSmVkZWNQMjJQaG9zcGhvcnM6Ci0gICAgICAgIHJl
dHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6RUJVX1RlY2hfMzIxM19FOwotICAg
IH0KLX0KKyAgICBBU1NFUlQocmVhZGVyKTsKKyAgICBpZiAoIXJlYWRlcikKKyAgICAgICAgcmV0
dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkpOwogCi1zdGF0aWMgQ0ZTdHJpbmdS
ZWYgY29udmVydFRvQ01Db2xvclByaW1hcmllcyh1aW50OF90IHByaW1hcmllcykKLXsKLSAgICBz
d2l0Y2ggKHByaW1hcmllcykgewotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJp
ZXM6OkJUXzcwOV82OgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmll
c19JVFVfUl83MDlfMjsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpF
QlVfVGVjaF8zMjEzX0U6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFy
aWVzX0VCVV8zMjEzOwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJU
XzYwMV83OgotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NU
XzI0MDoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfU01QVEVf
QzsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9SUF80MzFf
MjoKLSAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJpZXNfRENJ
X1AzOwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX0VHXzQz
Ml8xOgotICAgICAgICByZXR1cm4ga0NNRm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19Q
M19ENjU7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfMjAyMF9O
b25jb25zdGFudF9MdW1pbmFuY2U6Ci0gICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlv
bkNvbG9yUHJpbWFyaWVzX0lUVV9SXzIwMjA7Ci0gICAgfQorICAgIGlmICghbV9jdXJyZW50Qmxv
Y2spCisgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprSW52YWxpZEVsZW1lbnRJZCk7CiAK
LSAgICByZXR1cm4gbnVsbHB0cjsKLX0KKyAgICBhdXRvKiBibG9jayA9IFdURjo6c3dpdGNoT24o
Km1fY3VycmVudEJsb2NrLCBbXShCbG9jayYgYmxvY2spIHsKKyAgICAgICAgcmV0dXJuICZibG9j
azsKKyAgICB9LCBbXShTaW1wbGVCbG9jayYgYmxvY2spIC0+IEJsb2NrKiB7CisgICAgICAgIHJl
dHVybiAmYmxvY2s7CisgICAgfSk7CisgICAgaWYgKCFibG9jaykKKyAgICAgICAgcmV0dXJuIFN0
YXR1cyhTdGF0dXM6OmtJbnZhbGlkRWxlbWVudElkKTsKIAotc3RhdGljIHVpbnQ4X3QgY29udmVy
dFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MoY29uc3QgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3Mm
IGNoYXJhY3RlcmlzdGljcykKLXsKLSAgICBzd2l0Y2ggKGNoYXJhY3RlcmlzdGljcykgewotICAg
IGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtCdDcwOToKLSAgICAgICAgcmV0dXJuIFZQ
Q29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF83MDlfNjsKLSAgICBjYXNl
IFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprVW5zcGVjaWZpZWQ6Ci0gICAgICAgIHJldHVybiBW
UENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6VW5zcGVjaWZpZWQ7Ci0gICAg
Y2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0dhbW1hMjJjdXJ2ZToKLSAgICAgICAgcmV0
dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF80NzBfNl9NOwot
ICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtHYW1tYTI4Y3VydmU6Ci0gICAgICAg
IHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfNDcwXzdf
Qkc7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a1NtcHRlMTcwTToKLSAgICAg
ICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF82MDFf
NzsKLSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprU21wdGUyNDBNOgotICAgICAg
ICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NU
XzI0MDsKLSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprTGluZWFyOgotICAgICAg
ICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxpbmVhcjsK
LSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprTG9nOgotICAgICAgICByZXR1cm4g
VlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxvZ3JpdGhtaWM7Ci0gICAg
Y2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0xvZ1NxcnQ6Ci0gICAgICAgIHJldHVybiBW
UENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TG9ncml0aG1pY19TcXJ0Owot
ICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtJZWM2MTk2NjI0OgotICAgICAgICBy
ZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OklFQ182MTk2Nl8y
XzQ7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0J0MTM2MUV4dGVuZGVkQ29s
b3VyR2FtdXQ6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6QlRfMTM2MV8wOwotICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtJ
ZWM2MTk2NjIxOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OklFQ182MTk2Nl8yXzE7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6azEwQml0QnQyMDIwOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJD
aGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTBiaXQ7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6azEyQml0QnQyMDIwOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTJiaXQ7Ci0gICAgY2FzZSBUcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6a1NtcHRlU3QyMDg0OgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0
aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzIwODQ7Ci0gICAgY2FzZSBUcmFu
c2ZlckNoYXJhY3RlcmlzdGljczo6a1NtcHRlU3Q0MjgxOgotICAgICAgICByZXR1cm4gVlBDb25m
aWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzQyOF8xOwotICAgIGNh
c2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtBcmliU3RkQjY3SGxnOgotICAgICAgICByZXR1
cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIxMDBfSExHOwor
ICAgIGF1dG8gdHJhY2tOdW1iZXIgPSBibG9jay0+dHJhY2tfbnVtYmVyOworICAgIGF1dG8qIHRy
YWNrRGF0YSA9IHRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHRyYWNrTnVtYmVyKTsKKyAgICBpZiAo
IXRyYWNrRGF0YSkgeworICAgICAgICBFUlJPUl9MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklF
UiwgIklnbm9yaW5nIHVua25vd24gdHJhY2sgbnVtYmVyICIsIHRyYWNrTnVtYmVyKTsKKyAgICAg
ICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtJbnZhbGlkRWxlbWVudElkKTsKICAgICB9Ci19CiAK
LXN0YXRpYyBDRlN0cmluZ1JlZiBjb252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24odWludDhfdCBj
aGFyYWN0ZXJpc3RpY3MpCi17Ci0gICAgc3dpdGNoIChjaGFyYWN0ZXJpc3RpY3MpIHsKLSAgICBj
YXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF83MDlfNjoKLSAg
ICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl83MDlfMjsK
LSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9T
VF8yNDA6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlclRyYW5zZmVyRnVuY3Rpb25fU01Q
VEVfMjQwTV8xOTk1OwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OlNNUFRFX1NUXzIwODQ6Ci0gICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlv
blRyYW5zZmVyRnVuY3Rpb25fU01QVEVfU1RfMjA4NF9QUTsKLSAgICBjYXNlIFZQQ29uZmlndXJh
dGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMDIwXzEwYml0OgotICAgIGNhc2UgVlBD
b25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTJiaXQ6Ci0gICAg
ICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fSVRVX1JfMjAy
MDsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBU
RV9TVF80MjhfMToKLSAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJG
dW5jdGlvbl9TTVBURV9TVF80MjhfMTsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzOjpCVF8yMTAwX0hMRzoKLSAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERl
c2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl8yMTAwX0hMRzsKLSAgICBjYXNlIFZQQ29u
ZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJRUNfNjE5NjZfMl8xOgotICAgICAg
ICByZXR1cm4gUEFMOjpjYW5Mb2FkX0NvcmVNZWRpYV9rQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5z
ZmVyRnVuY3Rpb25fc1JHQigpID8gZ2V0X0NvcmVNZWRpYV9rQ01Gb3JtYXREZXNjcmlwdGlvblRy
YW5zZmVyRnVuY3Rpb25fc1JHQigpIDogbnVsbHB0cjsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlv
blRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMaW5lYXI6Ci0gICAgICAgIHJldHVybiBrQ01Gb3Jt
YXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fTGluZWFyOworICAgIHN3aXRjaCAodHJhY2tE
YXRhLT5jb2RlYygpKSB7CisgICAgY2FzZSBDb2RlY1R5cGU6OlZQOToKKyAgICBjYXNlIENvZGVj
VHlwZTo6Vm9yYmlzOgorICAgIGNhc2UgQ29kZWNUeXBlOjpPcHVzOgorICAgICAgICBicmVhazsK
KworICAgIGNhc2UgQ29kZWNUeXBlOjpVbnN1cHBvcnRlZDoKKyAgICAgICAgcmV0dXJuIFNraXAo
cmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgcmV0dXJuIHRyYWNrRGF0YS0+Y29uc3VtZUZyYW1lRGF0YSgqcmVhZGVyLCBtZXRhZGF0YSwg
Ynl0ZXNSZW1haW5pbmcsIENNVGltZU1ha2UoYmxvY2stPnRpbWVjb2RlICsgbV9jdXJyZW50VGlt
ZWNvZGUsIG1fdGltZXNjYWxlKSwgYmxvY2stPm51bV9mcmFtZXMpOwogfQogCi1zdGF0aWMgdWlu
dDhfdCBjb252ZXJ0VG9NYXRyaXhDb2VmZmljaWVudHMoY29uc3QgTWF0cml4Q29lZmZpY2llbnRz
JiBjb2VmZmljaWVudHMpCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnByb3ZpZGVNZWRp
YURhdGEoUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBzYW1wbGVCdWZmZXIsIHVpbnQ2NF90
IHRyYWNrSUQpCiB7Ci0gICAgc3dpdGNoIChjb2VmZmljaWVudHMpIHsKLSAgICBjYXNlIE1hdHJp
eENvZWZmaWNpZW50czo6a1JnYjoKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJp
eENvZWZmaWNpZW50czo6SWRlbnRpdHk7Ci0gICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtC
dDcwOToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6
QlRfNzA5XzY7Ci0gICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtVbnNwZWNpZmllZDoKLSAg
ICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6VW5zcGVjaWZp
ZWQ7Ci0gICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtGY2M6Ci0gICAgICAgIHJldHVybiBW
UENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkZDQzsKLSAgICBjYXNlIE1hdHJpeENv
ZWZmaWNpZW50czo6a0J0NDcwQmc6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRy
aXhDb2VmZmljaWVudHM6OkJUXzQ3MF83X0JHOwotICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRz
OjprU21wdGUxNzBNOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZp
Y2llbnRzOjpCVF82MDFfNzsKLSAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a1NtcHRlMjQw
TToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6U01Q
VEVfU1RfMjQwOwotICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprWUNnQ286Ci0gICAgICAg
IHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OllDZ0NvOwotICAgIGNh
c2UgTWF0cml4Q29lZmZpY2llbnRzOjprQnQyMDIwTm9uY29uc3RhbnRMdW1pbmFuY2U6Ci0gICAg
ICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzIwMjBfTm9u
Y29uc3RhbnRfTHVtaW5hbmNlOwotICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprQnQyMDIw
Q29uc3RhbnRMdW1pbmFuY2U6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhD
b2VmZmljaWVudHM6OkJUXzIwMjBfQ29uc3RhbnRfTHVtaW5hbmNlOwotICAgIH0KKyAgICBjYWxs
T25NYWluVGhyZWFkKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHNhbXBs
ZUJ1ZmZlciA9IFdURk1vdmUoc2FtcGxlQnVmZmVyKSwgdHJhY2tJRF0gKCkgbXV0YWJsZSB7Cisg
ICAgICAgIGlmICghbV9kaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2spCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgYXV0byBtZWRpYVNhbXBsZSA9IE1lZGlhU2FtcGxlQVZGT2JqQzo6
Y3JlYXRlKHNhbXBsZUJ1ZmZlci5nZXQoKSwgdHJhY2tJRCk7CisgICAgICAgIG1fZGlkUHJvdmlk
ZU1lZGlhRGF0YUNhbGxiYWNrKFdURk1vdmUobWVkaWFTYW1wbGUpLCB0cmFja0lELCBlbXB0eVN0
cmluZygpKTsKKyAgICB9KTsKIH0KIAotc3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNWUNi
Q1JNYXRyaXgodWludDhfdCBjb2VmZmljaWVudHMpCisjZGVmaW5lIFBBUlNFUl9MT0dfRVJST1Jf
SUZfUE9TU0lCTEUoLi4uKSBpZiAocGFyc2VyKCkubG9nZ2VyUHRyKCkpIHBhcnNlcigpLmxvZ2dl
clB0cigpLT5lcnJvcihsb2dDaGFubmVsKCksIFdURjo6TG9nZ2VyOjpMb2dTaXRlSWRlbnRpZmll
cihsb2dDbGFzc05hbWUoKSwgX19mdW5jX18sIHBhcnNlcigpLmxvZ0lkZW50aWZpZXIoKSksIF9f
VkFfQVJHU19fKQorCit3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9U
cmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkZXIsIGNvbnN0IEZy
YW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcsIGNvbnN0IENN
VGltZSYgcHJlc2VudGF0aW9uVGltZSwgaW50IHNhbXBsZUNvdW50KQogewotICAgIHN3aXRjaCAo
Y29lZmZpY2llbnRzKSB7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVu
dHM6OkJUXzIwMjBfTm9uY29uc3RhbnRfTHVtaW5hbmNlOgotICAgICAgICByZXR1cm4ga0NNRm9y
bWF0RGVzY3JpcHRpb25ZQ2JDck1hdHJpeF9JVFVfUl8yMDIwOwotICAgIGNhc2UgVlBDb25maWd1
cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF80NzBfN19CRzoKLSAgICBjYXNlIFZQQ29uZmln
dXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfNjAxXzc6Ci0gICAgICAgIHJldHVybiBrQ1ZJ
bWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzYwMV80OwotICAgIGNhc2UgVlBDb25maWd1cmF0
aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF83MDlfNjoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdl
QnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNzA5XzI7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25N
YXRyaXhDb2VmZmljaWVudHM6OlNNUFRFX1NUXzI0MDoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdl
QnVmZmVyWUNiQ3JNYXRyaXhfU01QVEVfMjQwTV8xOTk1OwotICAgIH0KKyNpZiBFTkFCTEUoVlA5
KQorICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3QmxvY2tCdWZmZXIgPSBudWxscHRyOwogCi0gICAg
cmV0dXJuIG51bGxwdHI7Ci19CisgICAgaWYgKCFtX2N1cnJlbnRCbG9ja0J1ZmZlcikgeworICAg
ICAgICBhdXRvIGVyciA9IENNQmxvY2tCdWZmZXJDcmVhdGVXaXRoTWVtb3J5QmxvY2soa0NGQWxs
b2NhdG9yRGVmYXVsdCwgbnVsbHB0ciwgbWV0YWRhdGEuc2l6ZSwga0NGQWxsb2NhdG9yRGVmYXVs
dCwgbnVsbHB0ciwgMCwgbWV0YWRhdGEuc2l6ZSwgMCwgJnJhd0Jsb2NrQnVmZmVyKTsKKyAgICAg
ICAgaWYgKGVycikgeworICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgi
Q01CbG9ja0J1ZmZlckNyZWF0ZVdpdGhNZW1vcnlCbG9jayBmYWlsZWQgd2l0aCBlcnJvciIsIGVy
cik7CisgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Cisg
ICAgICAgIH0KIAotc3RhdGljIHVpbnQ4X3QgY29udmVydFN1YnNhbXBsaW5nWFlUb0Nocm9tYVN1
YnNhbXBsaW5nKHVpbnQ2NF90IHgsIHVpbnQ2NF90IHkpCi17Ci0gICAgaWYgKHggJiB5KQotICAg
ICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ2hyb21hU3Vic2FtcGxpbmc6OlN1YnNhbXBsaW5n
XzQyMF9Db2xvY2F0ZWQ7Ci0gICAgaWYgKHggJiAheSkKLSAgICAgICAgcmV0dXJuIFZQQ29uZmln
dXJhdGlvbkNocm9tYVN1YnNhbXBsaW5nOjpTdWJzYW1wbGluZ180MjI7Ci0gICAgaWYgKCF4ICYg
IXkpCi0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25DaHJvbWFTdWJzYW1wbGluZzo6U3Vi
c2FtcGxpbmdfNDQ0OwotICAgIC8vIFRoaXMgaW5kaWNhdGVzIDQ6NDowIHN1YnNhbXBsaW5nLCB3
aGljaCBpcyBub3QgZXhwcmVzc2FibGUgaW4gdGhlICd2cGNDJyBib3guIERlZmF1bHQgdG8gNDoy
OjAuCi0gICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNocm9tYVN1YnNhbXBsaW5nOjpTdWJzYW1w
bGluZ180MjBfQ29sb2NhdGVkOwotfQorICAgICAgICBtX2N1cnJlbnRCbG9ja0J1ZmZlciA9IGFk
b3B0Q0YocmF3QmxvY2tCdWZmZXIpOworICAgICAgICBtX2N1cnJlbnRCbG9ja0J1ZmZlclBvc2l0
aW9uID0gMDsKIAotc3RhdGljIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVh
dGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDlIZWFkZXJQYXJzZXIoY29uc3QgdnA5X3BhcnNlcjo6
VnA5SGVhZGVyUGFyc2VyJiBwYXJzZXIsIGNvbnN0IHdlYm06OkVsZW1lbnQ8Q29sb3VyPiYgY29s
b3IpCi17Ci0gICAgLy8gUmVmOiAiVlAgQ29kZWMgSVNPIE1lZGlhIEZpbGUgRm9ybWF0IEJpbmRp
bmcsIHYxLjAsIDIwMTctMDMtMzEiCi0gICAgLy8gPGh0dHBzOi8vd3d3LndlYm1wcm9qZWN0Lm9y
Zy92cDkvbXA0Lz4KLSAgICAvLwotICAgIC8vIGNsYXNzIFZQQ29kZWNDb25maWd1cmF0aW9uQm94
IGV4dGVuZHMgRnVsbEJveCgndnBjQycsIHZlcnNpb24gPSAxLCAwKQotICAgIC8vIHsKLSAgICAv
LyAgICAgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQoKSB2cGNDb25maWc7Ci0gICAgLy8gfQot
ICAgIC8vCi0gICAgLy8gYWxpZ25lZCAoOCkgY2xhc3MgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNv
cmQgewotICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDgpICAgICBwcm9maWxlOwotICAgIC8vICAg
ICB1bnNpZ25lZCBpbnQgKDgpICAgICBsZXZlbDsKLSAgICAvLyAgICAgdW5zaWduZWQgaW50ICg0
KSAgICAgYml0RGVwdGg7Ci0gICAgLy8gICAgIHVuc2lnbmVkIGludCAoMykgICAgIGNocm9tYVN1
YnNhbXBsaW5nOwotICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDEpICAgICB2aWRlb0Z1bGxSYW5n
ZUZsYWc7Ci0gICAgLy8gICAgIHVuc2lnbmVkIGludCAoOCkgICAgIGNvbG91clByaW1hcmllczsK
LSAgICAvLyAgICAgdW5zaWduZWQgaW50ICg4KSAgICAgdHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M7
Ci0gICAgLy8gICAgIHVuc2lnbmVkIGludCAoOCkgICAgIG1hdHJpeENvZWZmaWNpZW50czsKLSAg
ICAvLyAgICAgdW5zaWduZWQgaW50ICgxNikgICAgY29kZWNJbnRpYWxpemF0aW9uRGF0YVNpemU7
Ci0gICAgLy8gICAgIHVuc2lnbmVkIGludCAoOClbXSAgIGNvZGVjSW50aWFsaXphdGlvbkRhdGE7
Ci0gICAgLy8gfQotICAgIC8vCi0gICAgLy8gY29kZWNJbnRpYWxpemF0aW9uRGF0YVNpemXigItG
b3IgVlA4IGFuZCBWUDkgdGhpcyBmaWVsZCBtdXN0IGJlIDAuCi0gICAgLy8gY29kZWNJbnRpYWxp
emF0aW9uRGF0YeKAi2JpbmFyeSBjb2RlYyBpbml0aWFsaXphdGlvbiBkYXRhLiBOb3QgdXNlZCBm
b3IgVlA4IGFuZCBWUDkuCi0gICAgLy8KLSAgICAvLyBGSVhNRTogQ29udmVydCBleGlzdGluZyBz
dHJ1Y3QgdG8gYW4gSVNPQm94IGFuZCByZXBsYWNlIHRoZSB3cml0aW5nIGNvZGUgYmVsb3cKLSAg
ICAvLyB3aXRoIGEgc3ViY2xhc3Mgb2YgSVNPRnVsbEJveC4KLQotICAgIFZQQ29kZWNDb25maWd1
cmF0aW9uUmVjb3JkIHJlY29yZDsKLQotICAgIHJlY29yZC5wcm9maWxlID0gcGFyc2VyLnByb2Zp
bGUoKTsKLSAgICAvLyBDb3JlTWVkaWEgZG9lcyBuYXQgY2FyZSBhYm91dCB0aGUgVlA5IGNvZGVj
IGxldmVsOyBoYXJkLWNvZGUgdG8gTGV2ZWwgMS4wIGhlcmU6Ci0gICAgcmVjb3JkLmxldmVsID0g
MTA7Ci0gICAgcmVjb3JkLmJpdERlcHRoID0gcGFyc2VyLmJpdF9kZXB0aCgpOwotICAgIHJlY29y
ZC52aWRlb0Z1bGxSYW5nZUZsYWcgPSBwYXJzZXIuY29sb3JfcmFuZ2UoKSA/IFZQQ29uZmlndXJh
dGlvblJhbmdlOjpGdWxsUmFuZ2UgOiBWUENvbmZpZ3VyYXRpb25SYW5nZTo6VmlkZW9SYW5nZTsK
LSAgICByZWNvcmQuY2hyb21hU3Vic2FtcGxpbmcgPSBjb252ZXJ0U3Vic2FtcGxpbmdYWVRvQ2hy
b21hU3Vic2FtcGxpbmcocGFyc2VyLnN1YnNhbXBsaW5nX3goKSwgcGFyc2VyLnN1YnNhbXBsaW5n
X3koKSk7Ci0gICAgcmVjb3JkLmNvbG9yUHJpbWFyaWVzID0gVlBDb25maWd1cmF0aW9uQ29sb3JQ
cmltYXJpZXM6OlVuc3BlY2lmaWVkOwotICAgIHJlY29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGlj
cyA9IFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpVbnNwZWNpZmllZDsK
LSAgICByZWNvcmQubWF0cml4Q29lZmZpY2llbnRzID0gVlBDb25maWd1cmF0aW9uTWF0cml4Q29l
ZmZpY2llbnRzOjpVbnNwZWNpZmllZDsKLQotICAgIC8vIENvbnRhaW5lciBjb2xvciB2YWx1ZXMg
Y2FuIG92ZXJyaWRlIHBlci1zYW1wbGUgb25lczoKLSAgICBpZiAoY29sb3IuaXNfcHJlc2VudCgp
KSB7Ci0gICAgICAgIGF1dG8mIGNvbG9yVmFsdWUgPSBjb2xvci52YWx1ZSgpOwotICAgICAgICBp
ZiAoY29sb3JWYWx1ZS5jaHJvbWFfc3Vic2FtcGxpbmdfeC5pc19wcmVzZW50KCkgJiYgY29sb3JW
YWx1ZS5jaHJvbWFfc3Vic2FtcGxpbmdfeS5pc19wcmVzZW50KCkpCi0gICAgICAgICAgICByZWNv
cmQuY2hyb21hU3Vic2FtcGxpbmcgPSBjb252ZXJ0U3Vic2FtcGxpbmdYWVRvQ2hyb21hU3Vic2Ft
cGxpbmcoY29sb3JWYWx1ZS5jaHJvbWFfc3Vic2FtcGxpbmdfeC52YWx1ZSgpLCBjb2xvclZhbHVl
LmNocm9tYV9zdWJzYW1wbGluZ195LnZhbHVlKCkpOwotICAgICAgICBpZiAoY29sb3JWYWx1ZS5y
YW5nZS5pc19wcmVzZW50KCkgJiYgY29sb3JWYWx1ZS5yYW5nZS52YWx1ZSgpICE9IFJhbmdlOjpr
VW5zcGVjaWZpZWQpCi0gICAgICAgICAgICByZWNvcmQudmlkZW9GdWxsUmFuZ2VGbGFnID0gY29s
b3JWYWx1ZS5yYW5nZS52YWx1ZSgpID09IFJhbmdlOjprRnVsbCA/IFZQQ29uZmlndXJhdGlvblJh
bmdlOjpGdWxsUmFuZ2UgOiBWUENvbmZpZ3VyYXRpb25SYW5nZTo6VmlkZW9SYW5nZTsKLSAgICAg
ICAgaWYgKGNvbG9yVmFsdWUuYml0c19wZXJfY2hhbm5lbC5pc19wcmVzZW50KCkpCi0gICAgICAg
ICAgICByZWNvcmQuYml0RGVwdGggPSBjb2xvclZhbHVlLmJpdHNfcGVyX2NoYW5uZWwudmFsdWUo
KTsKLSAgICAgICAgaWYgKGNvbG9yVmFsdWUudHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzLmlzX3By
ZXNlbnQoKSkKLSAgICAgICAgICAgIHJlY29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGljcyA9IGNv
bnZlcnRUb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKGNvbG9yVmFsdWUudHJhbnNmZXJfY2hhcmFj
dGVyaXN0aWNzLnZhbHVlKCkpOwotICAgICAgICBpZiAoY29sb3JWYWx1ZS5tYXRyaXhfY29lZmZp
Y2llbnRzLmlzX3ByZXNlbnQoKSkKLSAgICAgICAgICAgIHJlY29yZC5tYXRyaXhDb2VmZmljaWVu
dHMgPSBjb252ZXJ0VG9NYXRyaXhDb2VmZmljaWVudHMoY29sb3JWYWx1ZS5tYXRyaXhfY29lZmZp
Y2llbnRzLnZhbHVlKCkpOwotICAgICAgICBpZiAoY29sb3JWYWx1ZS5wcmltYXJpZXMuaXNfcHJl
c2VudCgpKQotICAgICAgICAgICAgcmVjb3JkLmNvbG9yUHJpbWFyaWVzID0gY29udmVydFRvQ29s
b3JQcmltYXJpZXMoY29sb3JWYWx1ZS5wcmltYXJpZXMudmFsdWUoKSk7CisgICAgICAgIGVyciA9
IENNQmxvY2tCdWZmZXJBc3N1cmVCbG9ja01lbW9yeShtX2N1cnJlbnRCbG9ja0J1ZmZlci5nZXQo
KSk7CisgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZf
UE9TU0lCTEUoIkNNQXVkaW9TYW1wbGVCdWZmZXJDcmVhdGVXaXRoUGFja2V0RGVzY3JpcHRpb25z
IGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKKyAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFk
ZXIsIGJ5dGVzUmVtYWluaW5nKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGNvbnN0ZXhwciBz
aXplX3QgVlBDb2RlY0NvbmZpZ3VyYXRpb25Db250ZW50c1NpemUgPSAxMjsKKyAgICBzaXplX3Qg
Ynl0ZXNUb1JlYWQgPSBtZXRhZGF0YS5zaXplIC0gbV9jdXJyZW50QmxvY2tCdWZmZXJQb3NpdGlv
bjsKKyAgICB3aGlsZSAoYnl0ZXNUb1JlYWQpIHsKKyAgICAgICAgc2l6ZV90IHNlZ21lbnRTaXpl
QXRQb3NpdGlvbiA9IDA7CisgICAgICAgIHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IG51bGxw
dHI7CisgICAgICAgIGF1dG8gZXJyID0gQ01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyKG1fY3Vy
cmVudEJsb2NrQnVmZmVyLmdldCgpLCBtX2N1cnJlbnRCbG9ja0J1ZmZlclBvc2l0aW9uLCAmc2Vn
bWVudFNpemVBdFBvc2l0aW9uLCBudWxscHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRhdGEpOwor
ICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJ
QkxFKCJDTUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIgZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIp
OworICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOworICAg
ICAgICB9CiAKLSAgICB1aW50MzJfdCB2ZXJzaW9uQW5kRmxhZ3MgPSAxIDw8IDI0OwotICAgIHVp
bnQ4X3QgYml0RGVwdGhDaHJvbWFBbmRSYW5nZSA9ICgweEYgJiByZWNvcmQuYml0RGVwdGgpIDw8
IDQgfCAoMHg3ICYgcmVjb3JkLmNocm9tYVN1YnNhbXBsaW5nKSA8PCAxIHwgKDB4MSAmIHJlY29y
ZC52aWRlb0Z1bGxSYW5nZUZsYWcpOwotICAgIHVpbnQxNl90IGNvZGVjSW50aWFsaXphdGlvbkRh
dGFTaXplID0gMDsKKyAgICAgICAgc2l6ZV90IGJ5dGVzVG9SZWFkRnJvbVRoaXNTZWdtZW50ID0g
c3RkOjptaW4oYnl0ZXNUb1JlYWQsIHNlZ21lbnRTaXplQXRQb3NpdGlvbik7CisgICAgICAgIHVp
bnQ2NF90IGJ5dGVzUmVhZDsKIAotICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZpZXc6OmNyZWF0
ZShBcnJheUJ1ZmZlcjo6Y3JlYXRlKFZQQ29kZWNDb25maWd1cmF0aW9uQ29udGVudHNTaXplLCAx
KSwgMCwgVlBDb2RlY0NvbmZpZ3VyYXRpb25Db250ZW50c1NpemUpOwotICAgIHZpZXctPnNldCgw
LCB2ZXJzaW9uQW5kRmxhZ3MsIGZhbHNlKTsKLSAgICB2aWV3LT5zZXQoNCwgcmVjb3JkLnByb2Zp
bGUsIGZhbHNlKTsKLSAgICB2aWV3LT5zZXQoNSwgcmVjb3JkLmxldmVsLCBmYWxzZSk7Ci0gICAg
dmlldy0+c2V0KDYsIGJpdERlcHRoQ2hyb21hQW5kUmFuZ2UsIGZhbHNlKTsKLSAgICB2aWV3LT5z
ZXQoNywgcmVjb3JkLmNvbG9yUHJpbWFyaWVzLCBmYWxzZSk7Ci0gICAgdmlldy0+c2V0KDgsIHJl
Y29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGljcywgZmFsc2UpOwotICAgIHZpZXctPnNldCg5LCBy
ZWNvcmQubWF0cml4Q29lZmZpY2llbnRzLCBmYWxzZSk7Ci0gICAgdmlldy0+c2V0KDEwLCBjb2Rl
Y0ludGlhbGl6YXRpb25EYXRhU2l6ZSwgZmFsc2UpOworICAgICAgICBhdXRvIHN0YXR1cyA9IHJl
YWRlci5SZWFkKGJ5dGVzVG9SZWFkRnJvbVRoaXNTZWdtZW50LCAodWludDhfdCopYmxvY2tCdWZm
ZXJEYXRhLCAmYnl0ZXNSZWFkKTsKKyAgICAgICAgYnl0ZXNUb1JlYWQgLT0gYnl0ZXNSZWFkOwor
ICAgICAgICAqYnl0ZXNSZW1haW5pbmcgLT0gYnl0ZXNSZWFkOworICAgICAgICBtX2N1cnJlbnRC
bG9ja0J1ZmZlclBvc2l0aW9uICs9IGJ5dGVzUmVhZDsKIAotICAgIGF1dG8gZGF0YSA9IGFkb3B0
Q0YoQ0ZEYXRhQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIChjb25zdCBVSW50OCAqKXZpZXct
PmRhdGEoKSwgdmlldy0+Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4n
dCB5ZXQgaGFuZGxlIHBhcnNpbmcgYSBGcmFtZSB0aGF0IGRvZXNuJ3QgaGF2ZSBhbGwgaXRzIG1l
bW9yeSBhdmFpbGFibGUuCisgICAgICAgIGlmIChzdGF0dXMuY29kZSA9PSB3ZWJtOjpTdGF0dXM6
OmtPa1BhcnRpYWwgfHwgc3RhdHVzLmNvZGUgPT0gd2VibTo6U3RhdHVzOjprV291bGRCbG9jaykK
KyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQogCi0gICAgQ0ZUeXBlUmVmIGNvbmZp
Z3VyYXRpb25LZXlzW10gPSB7IENGU1RSKCJ2cGNDIikgfTsKLSAgICBDRlR5cGVSZWYgY29uZmln
dXJhdGlvblZhbHVlc1tdID0geyBkYXRhLmdldCgpIH07Ci0gICAgYXV0byBjb25maWd1cmF0aW9u
RGljdCA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGNv
bmZpZ3VyYXRpb25LZXlzLCBjb25maWd1cmF0aW9uVmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGNv
bmZpZ3VyYXRpb25LZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlw
ZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgIGNyZWF0ZVNhbXBsZUJ1ZmZlcihwcmVz
ZW50YXRpb25UaW1lLCBzYW1wbGVDb3VudCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShtZXRh
ZGF0YSkKKyAgICBVTlVTRURfUEFSQU0ocHJlc2VudGF0aW9uVGltZSkKKyAgICBVTlVTRURfUEFS
QU0oc2FtcGxlQ291bnQpCisjZW5kaWYKIAotICAgIFZlY3RvcjxDRlR5cGVSZWY+IGV4dGVuc2lv
bnNLZXlzIHsga0NNRm9ybWF0RGVzY3JpcHRpb25FeHRlbnNpb25fU2FtcGxlRGVzY3JpcHRpb25F
eHRlbnNpb25BdG9tcyB9OwotICAgIFZlY3RvcjxDRlR5cGVSZWY+IGV4dGVuc2lvbnNWYWx1ZXMg
PSB7IGNvbmZpZ3VyYXRpb25EaWN0LmdldCgpIH07CisgICAgcmV0dXJuIFNraXAoJnJlYWRlciwg
Ynl0ZXNSZW1haW5pbmcpOworfQogCi0gICAgaWYgKHJlY29yZC52aWRlb0Z1bGxSYW5nZUZsYWcg
PT0gVlBDb25maWd1cmF0aW9uUmFuZ2U6OkZ1bGxSYW5nZSkgewotICAgICAgICBleHRlbnNpb25z
S2V5cy5hcHBlbmQoa0NNRm9ybWF0RGVzY3JpcHRpb25FeHRlbnNpb25fRnVsbFJhbmdlVmlkZW8p
OwotICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChrQ0ZCb29sZWFuVHJ1ZSk7Cit2b2lk
IFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZm
ZXIoY29uc3QgQ01UaW1lJiBwcmVzZW50YXRpb25UaW1lLCBpbnQgc2FtcGxlQ291bnQpCit7Cisj
aWYgRU5BQkxFKFZQOSkKKyAgICB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBudWxscHRyOwor
ICAgIHNpemVfdCBzZWdtZW50U2l6ZUF0UG9zaXRpb24gPSAwOworICAgIGF1dG8gZXJyID0gQ01C
bG9ja0J1ZmZlckdldERhdGFQb2ludGVyKG1fY3VycmVudEJsb2NrQnVmZmVyLmdldCgpLCAwLCAm
c2VnbWVudFNpemVBdFBvc2l0aW9uLCBudWxscHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRhdGEp
OworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgi
Q01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKKyAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdXRvIGNtQ29sb3JQcmltYXJpZXMgPSBj
b252ZXJ0VG9DTUNvbG9yUHJpbWFyaWVzKHJlY29yZC5jb2xvclByaW1hcmllcykpIHsKLSAgICAg
ICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNLZXkp
OwotICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbUNvbG9yUHJpbWFyaWVzKTsKKyAg
ICBpZiAoIW1faGVhZGVyUGFyc2VyLlBhcnNlVW5jb21wcmVzc2VkSGVhZGVyKGJsb2NrQnVmZmVy
RGF0YSwgc2VnbWVudFNpemVBdFBvc2l0aW9uKSkgeworICAgICAgICBQQVJTRVJfTE9HX0VSUk9S
X0lGX1BPU1NJQkxFKCJQYXJzZVVuY29tcHJlc3NlZEhlYWRlciBmYWlsZWQiKTsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdXRvIGNtVHJhbnNmZXJGdW5jdGlvbiA9IGNvbnZl
cnRUb0NNVHJhbnNmZXJGdW5jdGlvbihyZWNvcmQudHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MpKSB7
Ci0gICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlclRyYW5zZmVyRnVu
Y3Rpb25LZXkpOwotICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbVRyYW5zZmVyRnVu
Y3Rpb24pOworICAgIC8vIE9ubHkgdXBkYXRlIHRoZSBmb3JtYXQgZGVzY3JpcHRpb24gd2hlbiB0
aGUgaGVhZGVyIGluZGljYXRlcyB0aGF0IHRoZSBzYW1wbGUgaXMKKyAgICAvLyBhIGtleS1mcmFt
ZSwgb3RoZXJ3aXNlIGNvbG9yIGluZm9ybWF0aW9uIHdpbGwgbm90IGJlIHBhcnNlZC4KKyAgICBh
dXRvIHRyYWNrID0gdGhpcy0+dHJhY2soKTsKKyAgICBpZiAobV9oZWFkZXJQYXJzZXIua2V5KCkp
IHsKKyAgICAgICAgYXV0byBmb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZUZvcm1hdERlc2NyaXB0
aW9uRnJvbVZQOUhlYWRlclBhcnNlcihtX2hlYWRlclBhcnNlciwgdHJhY2sudmlkZW8udmFsdWUo
KS5jb2xvdXIpOworICAgICAgICBpZiAoIWZvcm1hdERlc2NyaXB0aW9uKSB7CisgICAgICAgICAg
ICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJmYWlsZWQgdG8gY3JlYXRlIGZvcm1hdCBk
ZXNjcmlwdGlvbiBmcm9tIFZQOSBoZWFkZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBzZXRGb3JtYXREZXNjcmlwdGlvbihXVEZNb3ZlKGZvcm1hdERlc2NyaXB0
aW9uKSk7CiAgICAgfQogCi0gICAgaWYgKGF1dG8gY21NYXRyaXggPSBjb252ZXJ0VG9DTVlDYkNS
TWF0cml4KHJlY29yZC5tYXRyaXhDb2VmZmljaWVudHMpKSB7Ci0gICAgICAgIGV4dGVuc2lvbnNL
ZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5KTsKLSAgICAgICAgZXh0ZW5z
aW9uc1ZhbHVlcy5hcHBlbmQoY21NYXRyaXgpOworICAgIC8vIEZJWE1FOiBBIGJsb2NrIG1pZ2h0
IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBmcmFtZSwgYnV0IG9ubHkgdGhpcyBmcmFtZSBoYXMgYmVl
biByZWFkIGludG8gYGN1cnJlbnRCbG9ja0J1ZmZlcmAuCisgICAgLy8gQmVsb3cgd2UgY3JlYXRl
IHNhbXBsZSBidWZmZXJzIGZvciBlYWNoIGZyYW1lLCBlYWNoIHdpdGggdGhlIGJsb2NrJ3MgdGlt
ZWNvZGUgYW5kIGBudW1fZnJhbWVzYCB2YWx1ZS4KKyAgICAvLyBTaG91bGRuJ3Qgd2UgY3JlYXRl
IGp1c3Qgb25lIHNhbXBsZSBidWZmZXIgb25jZSBhbGwgdGhlIGJsb2NrJ3MgZnJhbWVzIGhhdmUg
YmVlbiByZWFkIGludG8gYGN1cnJlbnRCbG9ja0J1ZmZlcmA/CisKKyAgICB1aW50NjRfdCBkdXJh
dGlvbiA9IDA7CisgICAgaWYgKHRyYWNrLmRlZmF1bHRfZHVyYXRpb24uaXNfcHJlc2VudCgpKQor
ICAgICAgICBkdXJhdGlvbiA9IHRyYWNrLmRlZmF1bHRfZHVyYXRpb24udmFsdWUoKSAqIHByZXNl
bnRhdGlvblRpbWUudGltZXNjYWxlIC8gMTAwMDAwMDAwMDsKKworICAgIENNU2FtcGxlQnVmZmVy
UmVmIHJhd1NhbXBsZUJ1ZmZlciA9IG51bGxwdHI7CisgICAgc2l6ZV90IGZyYW1lU2l6ZSA9IENN
QmxvY2tCdWZmZXJHZXREYXRhTGVuZ3RoKG1fY3VycmVudEJsb2NrQnVmZmVyLmdldCgpKTsKKyAg
ICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nID0geyBDTVRpbWVNYWtlKGR1cmF0aW9uLCBwcmVz
ZW50YXRpb25UaW1lLnRpbWVzY2FsZSksIHByZXNlbnRhdGlvblRpbWUsIHByZXNlbnRhdGlvblRp
bWUgfTsKKyAgICBlcnIgPSBDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5KGtDRkFsbG9jYXRvckRl
ZmF1bHQsIG1fY3VycmVudEJsb2NrQnVmZmVyLmdldCgpLCBmb3JtYXREZXNjcmlwdGlvbigpLmdl
dCgpLCBzYW1wbGVDb3VudCwgMSwgJnRpbWluZywgMSwgJmZyYW1lU2l6ZSwgJnJhd1NhbXBsZUJ1
ZmZlcik7CisgICAgaWYgKGVycikgeworICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJ
QkxFKCJDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5IGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGFkb3B0Q0Yo
cmF3U2FtcGxlQnVmZmVyKTsKIAotICAgIGF1dG8gZXh0ZW5zaW9ucyA9IGFkb3B0Q0YoQ0ZEaWN0
aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGV4dGVuc2lvbnNLZXlzLmRhdGEoKSwg
ZXh0ZW5zaW9uc1ZhbHVlcy5kYXRhKCksIGV4dGVuc2lvbnNLZXlzLnNpemUoKSwgJmtDRlR5cGVE
aWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykp
OworICAgIG1fY3VycmVudEJsb2NrQnVmZmVyID0gbnVsbHB0cjsKKyAgICBtX2N1cnJlbnRCbG9j
a0J1ZmZlclBvc2l0aW9uID0gMDsKIAotICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiBm
b3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7Ci0gICAgaWYgKG5vRXJyICE9IENNVmlkZW9Gb3Jt
YXREZXNjcmlwdGlvbkNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ01WaWRlb0NvZGVjVHlw
ZV9WUDksIHBhcnNlci53aWR0aCgpLCBwYXJzZXIuaGVpZ2h0KCksIGV4dGVuc2lvbnMuZ2V0KCks
ICZmb3JtYXREZXNjcmlwdGlvbikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVy
biBhZG9wdENGKGZvcm1hdERlc2NyaXB0aW9uKTsKKyAgICBpZiAoIW1faGVhZGVyUGFyc2VyLmtl
eSgpKSB7CisgICAgICAgIGF1dG8gYXR0YWNobWVudHNBcnJheSA9IENNU2FtcGxlQnVmZmVyR2V0
U2FtcGxlQXR0YWNobWVudHNBcnJheShzYW1wbGVCdWZmZXIuZ2V0KCksIHRydWUpOworICAgICAg
ICBBU1NFUlQoYXR0YWNobWVudHNBcnJheSk7CisgICAgICAgIGlmICghYXR0YWNobWVudHNBcnJh
eSkgeworICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01TYW1wbGVC
dWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5IHJldHVybmVkIE5VTEwiKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMCwgY291
bnQgPSBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSk7IGkgPCBjb3VudDsgKytpKSB7
CisgICAgICAgICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gY2hlY2tl
ZF9jZl9jYXN0PENGTXV0YWJsZURpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgo
YXR0YWNobWVudHNBcnJheSwgaSkpOworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUo
YXR0YWNobWVudHMsIGtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfTm90U3luYywga0NGQm9vbGVhblRy
dWUpOworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byB0cmFja0lEID0gdHJhY2sudHJhY2tf
dWlkLnZhbHVlKCk7CisgICAgcGFyc2VyKCkucHJvdmlkZU1lZGlhRGF0YShzYW1wbGVCdWZmZXIu
bGVha1JlZigpLCB0cmFja0lEKTsKKyNlbmRpZiAvLyBFTkFCTEUoVlA5KQogfQotI2VuZGlmCiAK
LXdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkZyYW1lKGNvbnN0IEZyYW1l
TWV0YWRhdGEmIG1ldGFkYXRhLCBSZWFkZXIqIHJlYWRlciwgdWludDY0X3QqIGJ5dGVzUmVtYWlu
aW5nKQord2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRh
Ojpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLCBjb25zdCBGcmFtZU1ldGFk
YXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nLCBjb25zdCBDTVRpbWUmIHBy
ZXNlbnRhdGlvblRpbWUsIGludCBzYW1wbGVDb3VudCkKIHsKLSAgICBVTlVTRURfUEFSQU0obWV0
YWRhdGEpOwotICAgIFVOVVNFRF9QQVJBTShieXRlc1JlbWFpbmluZyk7CisgICAgQVNTRVJUX1VO
VVNFRChzYW1wbGVDb3VudCwgc2FtcGxlQ291bnQgPT0gMSk7CiAKLSAgICBBU1NFUlQocmVhZGVy
KTsKLSAgICBpZiAoIXJlYWRlcikKLSAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RF
bm91Z2hNZW1vcnkpOworICAgIGlmICghZm9ybWF0RGVzY3JpcHRpb24oKSkgeworICAgICAgICBp
ZiAoIXRyYWNrKCkuY29kZWNfcHJpdmF0ZS5pc19wcmVzZW50KCkpIHsKKyAgICAgICAgICAgIFBB
UlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkF1ZGlvIHRyYWNrIG1pc3NpbmcgbWFnaWMgY29v
a2llIik7CisgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7
CisgICAgICAgIH0KIAotICAgIGlmICghbV9jdXJyZW50QmxvY2spCi0gICAgICAgIHJldHVybiBT
dGF0dXMoU3RhdHVzOjprSW52YWxpZEVsZW1lbnRJZCk7CisgICAgICAgIFJldGFpblB0cjxDTUZv
cm1hdERlc2NyaXB0aW9uUmVmPiBmb3JtYXREZXNjcmlwdGlvbjsKKyAgICAgICAgYXV0byYgcHJp
dmF0ZURhdGEgPSB0cmFjaygpLmNvZGVjX3ByaXZhdGUudmFsdWUoKTsKKyAgICAgICAgaWYgKGNv
ZGVjKCkgPT0gQ29kZWNUeXBlOjpWb3JiaXMpCisgICAgICAgICAgICBmb3JtYXREZXNjcmlwdGlv
biA9IGNyZWF0ZVZvcmJpc0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24ocHJpdmF0ZURhdGEuc2l6ZSgp
LCBwcml2YXRlRGF0YS5kYXRhKCkpOworICAgICAgICBlbHNlIGlmIChjb2RlYygpID09IENvZGVj
VHlwZTo6T3B1cykKKyAgICAgICAgICAgIGZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlT3B1c0F1
ZGlvRm9ybWF0RGVzY3JpcHRpb24ocHJpdmF0ZURhdGEuc2l6ZSgpLCBwcml2YXRlRGF0YS5kYXRh
KCkpOwogCi0gICAgYXV0byogYmxvY2sgPSBXVEY6OnN3aXRjaE9uKCptX2N1cnJlbnRCbG9jaywg
W10oQmxvY2smIGJsb2NrKSB7Ci0gICAgICAgIHJldHVybiAmYmxvY2s7Ci0gICAgfSwgW10oU2lt
cGxlQmxvY2smIGJsb2NrKSAtPiBCbG9jayogewotICAgICAgICByZXR1cm4gJmJsb2NrOwotICAg
IH0pOwotICAgIGlmICghYmxvY2spCi0gICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprSW52
YWxpZEVsZW1lbnRJZCk7CisgICAgICAgIGlmICghZm9ybWF0RGVzY3JpcHRpb24pIHsKKyAgICAg
ICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkZhaWxlZCB0byBjcmVhdGUgZm9y
bWF0IGRlc2NyaXB0aW9uIGZyb20gYXVkaW8gdHJhY2sgaGVhZGVyIik7CisgICAgICAgICAgICBy
ZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CisgICAgICAgIH0KIAotICAgIGF1
dG8gdHJhY2tOdW1iZXIgPSBibG9jay0+dHJhY2tfbnVtYmVyOworICAgICAgICBhdXRvIHN0cmVh
bURlc2NyaXB0aW9uID0gQ01BdWRpb0Zvcm1hdERlc2NyaXB0aW9uR2V0U3RyZWFtQmFzaWNEZXNj
cmlwdGlvbihmb3JtYXREZXNjcmlwdGlvbi5nZXQoKSk7CisgICAgICAgIGlmICghc3RyZWFtRGVz
Y3JpcHRpb24pIHsKKyAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNN
QXVkaW9Gb3JtYXREZXNjcmlwdGlvbkdldFN0cmVhbUJhc2ljRGVzY3JpcHRpb24gZmFpbGVkIik7
CisgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CisgICAg
ICAgIH0KKyAgICAgICAgbV9wYWNrZXREdXJhdGlvbiA9IENNVGltZU1ha2Uoc3RyZWFtRGVzY3Jp
cHRpb24tPm1GcmFtZXNQZXJQYWNrZXQsIHN0cmVhbURlc2NyaXB0aW9uLT5tU2FtcGxlUmF0ZSk7
CiAKLSAgICBhdXRvKiB0cmFja0RhdGEgPSB0cmFja0RhdGFGb3JUcmFja051bWJlcih0cmFja051
bWJlcik7Ci0gICAgaWYgKCF0cmFja0RhdGEpCi0gICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVz
OjprSW52YWxpZEVsZW1lbnRJZCk7Ci0gICAgYXV0byYgdHJhY2sgPSB0cmFja0RhdGEtPnRyYWNr
OworICAgICAgICBzZXRGb3JtYXREZXNjcmlwdGlvbihXVEZNb3ZlKGZvcm1hdERlc2NyaXB0aW9u
KSk7CisgICAgfQogCi0gICAgdWludDY0X3QgZHVyYXRpb24gPSAwOwotICAgIGlmICh0cmFjay5k
ZWZhdWx0X2R1cmF0aW9uLmlzX3ByZXNlbnQoKSkKLSAgICAgICAgZHVyYXRpb24gPSB0cmFjay5k
ZWZhdWx0X2R1cmF0aW9uLnZhbHVlKCkgKiBtX3RpbWVzY2FsZSAvIDEwMDAwMDAwMDA7CisgICAg
aWYgKG1fcGFja2V0RGF0YS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9wYWNrZXREYXRhLnJlc2l6
ZShtZXRhZGF0YS5zaXplKTsKKyAgICAgICAgbV9wYWNrZXRCeXRlc1JlYWQgPSAwOworICAgICAg
ICBtX2J5dGVPZmZzZXQgPSBtZXRhZGF0YS5wb3NpdGlvbjsKKyAgICAgICAgbV9zYW1wbGVQcmVz
ZW50YXRpb25UaW1lID0gcHJlc2VudGF0aW9uVGltZTsKKyAgICB9CiAKLSNpZiBFTkFCTEUoVlA5
KQotICAgIGlmICh0cmFjay5jb2RlY19pZC5pc19wcmVzZW50KCkgJiYgdHJhY2suY29kZWNfaWQu
dmFsdWUoKSA9PSAiVl9WUDkiKSB7Ci0gICAgICAgIGlmICghdHJhY2tEYXRhLT5jdXJyZW50Qmxv
Y2tCdWZmZXIpIHsKLSAgICAgICAgICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3QmxvY2tCdWZmZXIg
PSBudWxscHRyOwotICAgICAgICAgICAgaWYgKG5vRXJyICE9IENNQmxvY2tCdWZmZXJDcmVhdGVX
aXRoTWVtb3J5QmxvY2soa0NGQWxsb2NhdG9yRGVmYXVsdCwgbnVsbHB0ciwgbWV0YWRhdGEuc2l6
ZSwga0NGQWxsb2NhdG9yRGVmYXVsdCwgbnVsbHB0ciwgMCwgbWV0YWRhdGEuc2l6ZSwgMCwgJnJh
d0Jsb2NrQnVmZmVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2tpcChyZWFkZXIsIGJ5dGVz
UmVtYWluaW5nKTsKLSAgICAgICAgICAgIHRyYWNrRGF0YS0+Y3VycmVudEJsb2NrQnVmZmVyID0g
YWRvcHRDRihyYXdCbG9ja0J1ZmZlcik7Ci0gICAgICAgICAgICB0cmFja0RhdGEtPmN1cnJlbnRC
bG9ja0J1ZmZlclBvc2l0aW9uID0gMDsKLQotICAgICAgICAgICAgaWYgKG5vRXJyICE9IENNQmxv
Y2tCdWZmZXJBc3N1cmVCbG9ja01lbW9yeSh0cmFja0RhdGEtPmN1cnJlbnRCbG9ja0J1ZmZlci5n
ZXQoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNraXAocmVhZGVyLCBieXRlc1JlbWFpbmlu
Zyk7Ci0gICAgICAgIH0KKyAgICBzaXplX3QgcGFja2V0RGF0YU9mZnNldCA9IG1fcGFja2V0Qnl0
ZXNSZWFkOworICAgIHNpemVfdCBieXRlc1RvUmVhZCA9IG1ldGFkYXRhLnNpemU7CisgICAgd2hp
bGUgKGJ5dGVzVG9SZWFkKSB7CisgICAgICAgIHVpbnQ2NF90IGJ5dGVzUmVhZDsKKyAgICAgICAg
YXV0byBzdGF0dXMgPSByZWFkZXIuUmVhZChieXRlc1RvUmVhZCwgbV9wYWNrZXREYXRhLmRhdGEo
KSArIG1fcGFja2V0Qnl0ZXNSZWFkLCAmYnl0ZXNSZWFkKTsKKyAgICAgICAgYnl0ZXNUb1JlYWQg
LT0gYnl0ZXNSZWFkOworICAgICAgICAqYnl0ZXNSZW1haW5pbmcgLT0gYnl0ZXNSZWFkOworICAg
ICAgICBtX3BhY2tldEJ5dGVzUmVhZCArPSBieXRlc1JlYWQ7CisKKyAgICAgICAgLy8gRklYTUU6
IFdlIGNhbid0IHlldCBoYW5kbGUgcGFyc2luZyBhIEZyYW1lIHRoYXQgZG9lc24ndCBoYXZlIGFs
bCBpdHMgbWVtb3J5IGF2YWlsYWJsZS4KKyAgICAgICAgaWYgKHN0YXR1cy5jb2RlID09IHdlYm06
OlN0YXR1czo6a09rUGFydGlhbCB8fCBzdGF0dXMuY29kZSA9PSB3ZWJtOjpTdGF0dXM6OmtXb3Vs
ZEJsb2NrKQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CiAKLSAgICAgICAgc2l6
ZV90IG51bVRvUmVhZCA9IG1ldGFkYXRhLnNpemUgLSB0cmFja0RhdGEtPmN1cnJlbnRCbG9ja0J1
ZmZlclBvc2l0aW9uOwotICAgICAgICBzaXplX3Qgc2VnbWVudFNpemVBdFBvc2l0aW9uID0gMDsK
LSAgICAgICAgdWludDhfdCogYmxvY2tCdWZmZXJEYXRhID0gbnVsbHB0cjsKKyAgICBtX3BhY2tl
dERlc2NyaXB0aW9ucy5hcHBlbmQoeyBzdGF0aWNfY2FzdDxpbnQ2NF90PihwYWNrZXREYXRhT2Zm
c2V0KSwgMCwgc3RhdGljX2Nhc3Q8VUludDMyPihtZXRhZGF0YS5zaXplKSB9KTsKKyAgICBhdXRv
IHNhbXBsZUR1cmF0aW9uID0gQ01UaW1lR2V0U2Vjb25kcyhDTVRpbWVTdWJ0cmFjdChwcmVzZW50
YXRpb25UaW1lLCBtX3NhbXBsZVByZXNlbnRhdGlvblRpbWUpKSArIENNVGltZUdldFNlY29uZHMo
bV9wYWNrZXREdXJhdGlvbik7CisgICAgaWYgKHNhbXBsZUR1cmF0aW9uID49IG1fbWluaW11bVNh
bXBsZUR1cmF0aW9uKQorICAgICAgICBjcmVhdGVTYW1wbGVCdWZmZXIoKTsKKworICAgIHJldHVy
biBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKK30KIAotICAgICAgICB3aGlsZSAobnVt
VG9SZWFkKSB7Ci0gICAgICAgICAgICBpZiAobm9FcnIgIT0gQ01CbG9ja0J1ZmZlckdldERhdGFQ
b2ludGVyKHRyYWNrRGF0YS0+Y3VycmVudEJsb2NrQnVmZmVyLmdldCgpLCB0cmFja0RhdGEtPmN1
cnJlbnRCbG9ja0J1ZmZlclBvc2l0aW9uLCAmc2VnbWVudFNpemVBdFBvc2l0aW9uLCBudWxscHRy
LCAoY2hhcioqKSZibG9ja0J1ZmZlckRhdGEpKQotICAgICAgICAgICAgICAgIHJldHVybiBTa2lw
KHJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpB
dWRpb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9wYWNrZXRE
ZXNjcmlwdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAgIHNp
emVfdCBudW1Ub1JlYWRGcm9tVGhpc1NlZ21lbnQgPSBzdGQ6Om1pbihudW1Ub1JlYWQsIHNlZ21l
bnRTaXplQXRQb3NpdGlvbik7Ci0gICAgICAgICAgICB1aW50NjRfdCBudW1BY3R1YWxseVdyaXR0
ZW5Ub1RoaXNTZWdtZW50OworICAgIEFTU0VSVCghbV9wYWNrZXREYXRhLmlzRW1wdHkoKSk7CiAK
LSAgICAgICAgICAgIGF1dG8gc3RhdHVzID0gbV9yZWFkZXItPlJlYWQobnVtVG9SZWFkRnJvbVRo
aXNTZWdtZW50LCAodWludDhfdCopYmxvY2tCdWZmZXJEYXRhLCAmbnVtQWN0dWFsbHlXcml0dGVu
VG9UaGlzU2VnbWVudCk7Ci0gICAgICAgICAgICBudW1Ub1JlYWQgLT0gbnVtQWN0dWFsbHlXcml0
dGVuVG9UaGlzU2VnbWVudDsKLSAgICAgICAgICAgICpieXRlc1JlbWFpbmluZyAtPSBudW1BY3R1
YWxseVdyaXR0ZW5Ub1RoaXNTZWdtZW50OwotICAgICAgICAgICAgdHJhY2tEYXRhLT5jdXJyZW50
QmxvY2tCdWZmZXJQb3NpdGlvbiArPSBudW1BY3R1YWxseVdyaXR0ZW5Ub1RoaXNTZWdtZW50Owor
ICAgIENNQmxvY2tCdWZmZXJSZWYgYmxvY2tCdWZmZXIgPSBudWxscHRyOworICAgIGF1dG8gZXJy
ID0gQ01CbG9ja0J1ZmZlckNyZWF0ZVdpdGhNZW1vcnlCbG9jayhrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBudWxscHRyLCBtX3BhY2tldERhdGEuc2l6ZUluQnl0ZXMoKSwga0NGQWxsb2NhdG9yRGVmYXVs
dCwgbnVsbHB0ciwgMCwgbV9wYWNrZXREYXRhLnNpemVJbkJ5dGVzKCksIGtDTUJsb2NrQnVmZmVy
QXNzdXJlTWVtb3J5Tm93RmxhZywgJmJsb2NrQnVmZmVyKTsKKyAgICBpZiAoZXJyKSB7CisgICAg
ICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQmxvY2tCdWZmZXJDcmVhdGVXaXRo
TWVtb3J5QmxvY2sgZmFpbGVkIHdpdGggJWQiLCBlcnIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGF1dG8gYnVmZmVyID0gYWRvcHRDRihibG9ja0J1ZmZlcik7CiAKLSAgICAgICAgICAg
IC8vIEZJWE1FOiBXZSBjYW4ndCB5ZXQgaGFuZGxlIHBhcnNpbmcgYSBGcmFtZSB0aGF0IGRvZXNu
J3QgaGF2ZSBhbGwgaXRzIG1lbW9yeSBhdmFpbGFibGUuCi0gICAgICAgICAgICBpZiAoc3RhdHVz
LmNvZGUgPT0gd2VibTo6U3RhdHVzOjprT2tQYXJ0aWFsIHx8IHN0YXR1cy5jb2RlID09IHdlYm06
OlN0YXR1czo6a1dvdWxkQmxvY2spCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAg
ICAgICAgfQorICAgIGVyciA9IENNQmxvY2tCdWZmZXJSZXBsYWNlRGF0YUJ5dGVzKG1fcGFja2V0
RGF0YS5kYXRhKCksIGJ1ZmZlci5nZXQoKSwgMCwgbV9wYWNrZXREYXRhLnNpemVJbkJ5dGVzKCkp
OworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgi
Q01CbG9ja0J1ZmZlclJlcGxhY2VEYXRhQnl0ZXMgZmFpbGVkIHdpdGggJWQiLCBlcnIpOworICAg
ICAgICByZXR1cm47CisgICAgfQogCi0gICAgICAgIGlmIChub0VyciAhPSBDTUJsb2NrQnVmZmVy
R2V0RGF0YVBvaW50ZXIodHJhY2tEYXRhLT5jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCksIDAsICZz
ZWdtZW50U2l6ZUF0UG9zaXRpb24sIG51bGxwdHIsIChjaGFyKiopJmJsb2NrQnVmZmVyRGF0YSkp
Ci0gICAgICAgICAgICByZXR1cm4gU2tpcChyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLQotICAg
ICAgICBhdXRvJiBoZWFkZXJQYXJzZXIgPSB0cmFja0RhdGEtPmhlYWRlclBhcnNlcjsKLSAgICAg
ICAgaWYgKCFoZWFkZXJQYXJzZXIuUGFyc2VVbmNvbXByZXNzZWRIZWFkZXIoYmxvY2tCdWZmZXJE
YXRhLCBzZWdtZW50U2l6ZUF0UG9zaXRpb24pKQotICAgICAgICAgICAgcmV0dXJuIFNraXAocmVh
ZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0KLSAgICAgICAgLy8gT25seSB1cGRhdGUgdGhlIGZvcm1h
dCBkZXNjcmlwdGlvbiB3aGVuIHRoZSBoZWFkZXIgaW5kaWNhdGVzIHRoYXQgdGhlIHNhbXBsZSBp
cwotICAgICAgICAvLyBhIGtleS1mcmFtZSwgb3RoZXJ3aXNlIGNvbG9yIGluZm9ybWF0aW9uIHdp
bGwgbm90IGJlIHBhcnNlZC4KLSAgICAgICAgaWYgKGhlYWRlclBhcnNlci5rZXkoKSkKLSAgICAg
ICAgICAgIHRyYWNrRGF0YS0+Zm9ybWF0RGVzY3JpcHRpb24gPSBjcmVhdGVGb3JtYXREZXNjcmlw
dGlvbkZyb21WUDlIZWFkZXJQYXJzZXIoaGVhZGVyUGFyc2VyLCB0cmFjay52aWRlby52YWx1ZSgp
LmNvbG91cik7Ci0gICAgICAgIGlmICghdHJhY2tEYXRhLT5mb3JtYXREZXNjcmlwdGlvbikKLSAg
ICAgICAgICAgIHJldHVybiBTa2lwKHJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwotCi0gICAgICAg
IGF1dG8gcHRzID0gQ01UaW1lTWFrZShibG9jay0+dGltZWNvZGUgKyBtX2N1cnJlbnRUaW1lY29k
ZSwgbV90aW1lc2NhbGUpOwotICAgICAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nID0geyBD
TVRpbWVNYWtlKGR1cmF0aW9uLCBtX3RpbWVzY2FsZSksIHB0cywgcHRzIH07Ci0gICAgICAgIHNp
emVfdCBzaXplID0gbWV0YWRhdGEuc2l6ZTsKLQotICAgICAgICBhdXRvIHNhbXBsZUNvdW50ID0g
YmxvY2stPm51bV9mcmFtZXM7Ci0gICAgICAgIENNU2FtcGxlQnVmZmVyUmVmIHJhd1NhbXBsZUJ1
ZmZlciA9IG51bGxwdHI7Ci0gICAgICAgIGlmIChub0VyciAhPSBDTVNhbXBsZUJ1ZmZlckNyZWF0
ZVJlYWR5KGtDRkFsbG9jYXRvckRlZmF1bHQsIHRyYWNrRGF0YS0+Y3VycmVudEJsb2NrQnVmZmVy
LmdldCgpLCB0cmFja0RhdGEtPmZvcm1hdERlc2NyaXB0aW9uLmdldCgpLCBzYW1wbGVDb3VudCwg
MSwgJnRpbWluZywgMSwgJnNpemUsICZyYXdTYW1wbGVCdWZmZXIpKQotICAgICAgICAgICAgcmV0
dXJuIFNraXAocmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAgIGF1dG8gc2FtcGxlQnVm
ZmVyID0gYWRvcHRDRihyYXdTYW1wbGVCdWZmZXIpOwotCi0gICAgICAgIHRyYWNrRGF0YS0+Y3Vy
cmVudEJsb2NrQnVmZmVyID0gbnVsbHB0cjsKLSAgICAgICAgdHJhY2tEYXRhLT5jdXJyZW50Qmxv
Y2tCdWZmZXJQb3NpdGlvbiA9IDA7Ci0KLSAgICAgICAgaWYgKCFoZWFkZXJQYXJzZXIua2V5KCkp
IHsKLSAgICAgICAgICAgIGF1dG8gYXR0YWNobWVudHNBcnJheSA9IENNU2FtcGxlQnVmZmVyR2V0
U2FtcGxlQXR0YWNobWVudHNBcnJheShzYW1wbGVCdWZmZXIuZ2V0KCksIHRydWUpOwotICAgICAg
ICAgICAgQVNTRVJUKGF0dGFjaG1lbnRzQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFhdHRhY2ht
ZW50c0FycmF5KQotICAgICAgICAgICAgICAgIHJldHVybiBTa2lwKHJlYWRlciwgYnl0ZXNSZW1h
aW5pbmcpOwotICAgICAgICAgICAgZm9yIChDRkluZGV4IGkgPSAwLCBjb3VudCA9IENGQXJyYXlH
ZXRDb3VudChhdHRhY2htZW50c0FycmF5KTsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAg
ICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gY2hlY2tlZF9jZl9jYXN0
PENGTXV0YWJsZURpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0YWNobWVu
dHNBcnJheSwgaSkpOwotICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGF0dGFj
aG1lbnRzLCBrQ01TYW1wbGVBdHRhY2htZW50S2V5X05vdFN5bmMsIGtDRkJvb2xlYW5UcnVlKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIENNU2FtcGxlQnVmZmVyUmVmIHJhd1NhbXBs
ZUJ1ZmZlciA9IG51bGxwdHI7CisgICAgZXJyID0gQ01BdWRpb1NhbXBsZUJ1ZmZlckNyZWF0ZVJl
YWR5V2l0aFBhY2tldERlc2NyaXB0aW9ucyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBidWZmZXIuZ2V0
KCksIGZvcm1hdERlc2NyaXB0aW9uKCkuZ2V0KCksIG1fcGFja2V0RGVzY3JpcHRpb25zLnNpemUo
KSwgbV9zYW1wbGVQcmVzZW50YXRpb25UaW1lLCBtX3BhY2tldERlc2NyaXB0aW9ucy5kYXRhKCks
ICZyYXdTYW1wbGVCdWZmZXIpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUEFSU0VSX0xPR19F
UlJPUl9JRl9QT1NTSUJMRSgiQ01BdWRpb1NhbXBsZUJ1ZmZlckNyZWF0ZVdpdGhQYWNrZXREZXNj
cmlwdGlvbnMgZmFpbGVkIHdpdGggJWQiLCBlcnIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGF1dG8gc2FtcGxlQnVmZmVyID0gYWRvcHRDRihyYXdTYW1wbGVCdWZmZXIpOwogCi0gICAg
ICAgIGF1dG8gdHJhY2tJRCA9IHRyYWNrLnRyYWNrX3VpZC52YWx1ZSgpOworICAgIG1fcGFja2V0
RGF0YS5jbGVhcigpOworICAgIG1fcGFja2V0RGVzY3JpcHRpb25zLmNsZWFyKCk7CiAKLSAgICAg
ICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
LCBzYW1wbGVCdWZmZXIgPSBXVEZNb3ZlKHNhbXBsZUJ1ZmZlciksIHRyYWNrSURdICgpIG11dGFi
bGUgewotICAgICAgICAgICAgaWYgKCFtX2RpZFByb3ZpZGVNZWRpYURhdGFDYWxsYmFjaykKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBhdXRvIG1lZGlhU2FtcGxlID0gTWVk
aWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlQnVmZmVyLmdldCgpLCB0cmFja0lEKTsKLSAg
ICAgICAgICAgIG1fZGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKFdURk1vdmUobWVkaWFTYW1w
bGUpLCB0cmFja0lELCBlbXB0eVN0cmluZygpKTsKLSAgICAgICAgfSk7CisgICAgYXV0byB0cmFj
a0lEID0gdHJhY2soKS50cmFja191aWQudmFsdWUoKTsKKyAgICBwYXJzZXIoKS5wcm92aWRlTWVk
aWFEYXRhKHNhbXBsZUJ1ZmZlci5sZWFrUmVmKCksIHRyYWNrSUQpOworfQorCit2b2lkIFNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVuZGluZ0F1ZGlvQnVmZmVycygpCit7CisgICAgZm9y
IChhdXRvJiB0cmFjayA6IG1fdHJhY2tzKSB7CisgICAgICAgIGlmICh0cmFjay0+dHJhY2tUeXBl
KCkgPT0gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpUeXBlOjpBdWRpbykKKyAg
ICAgICAgICAgIGRvd25jYXN0PEF1ZGlvVHJhY2tEYXRhPih0cmFjay5nZXQoKSkuY3JlYXRlU2Ft
cGxlQnVmZmVyKCk7CiAgICAgfQotI2VuZGlmCit9CiAKLSAgICByZXR1cm4gU2tpcChyZWFkZXIs
IGJ5dGVzUmVtYWluaW5nKTsKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2V0TWluaW11
bUF1ZGlvU2FtcGxlRHVyYXRpb24oZmxvYXQgZHVyYXRpb24pCit7CisgICAgbV9taW5pbXVtQXVk
aW9TYW1wbGVEdXJhdGlvbiA9IGR1cmF0aW9uOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNLmgKaW5kZXggM2E4NDY0NTlhM2ViMzU1MzYxMjEyOTc2YzhlYWRlNDYzZDYzYjE5Ny4u
YmNmMTYyNDE0MTlkNTNhNDU3MWJkYjU5NGZlNTAzOTdjMzRmY2EzZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2Vi
TS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1
ZmZlclBhcnNlcldlYk0uaApAQCAtMjgsNiArMjgsOCBAQAogI2lmIEVOQUJMRShNRURJQV9TT1VS
Q0UpCiAKICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQYXJzZXIuaCIKKyNpbmNsdWRlIDxDb3JlQXVk
aW8vQ29yZUF1ZGlvVHlwZXMuaD4KKyNpbmNsdWRlIDxDb3JlTWVkaWEvQ01UaW1lLmg+CiAjaW5j
bHVkZSA8Y29tbW9uL3ZwOV9oZWFkZXJfcGFyc2VyLmg+CiAjaW5jbHVkZSA8d2VibS9jYWxsYmFj
ay5oPgogI2luY2x1ZGUgPHdlYm0vc3RhdHVzLmg+CkBAIC00MSw3ICs0Myw2IEBACiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RocmVhZHMvQmluYXJ5U2Vt
YXBob3JlLmg+CiAKLXR5cGVkZWYgc3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyICpDTVNhbXBs
ZUJ1ZmZlclJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IG9wYXF1ZUNNRm9ybWF0RGVzY3JpcHRp
b24qIENNRm9ybWF0RGVzY3JpcHRpb25SZWY7CiB0eXBlZGVmIHN0cnVjdCBPcGFxdWVDTUJsb2Nr
QnVmZmVyICpDTUJsb2NrQnVmZmVyUmVmOwogCkBAIC01MSwxMCArNTIsMTUgQEAgY2xhc3MgV2Vi
bVBhcnNlcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBNZWRpYVNhbXBsZUFWRk9i
akM7CisKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gOiBwdWJs
aWMgU291cmNlQnVmZmVyUGFyc2VyLCBwcml2YXRlIHdlYm06OkNhbGxiYWNrIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICBjbGFzcyBTdHJlYW1pbmdWZWN0b3JS
ZWFkZXI7CisKICAgICBzdGF0aWMgTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIGlzQ29u
dGVudFR5cGVTdXBwb3J0ZWQoY29uc3QgQ29udGVudFR5cGUmKTsKKyAgICBzdGF0aWMgUmVmUHRy
PFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0+IGNyZWF0ZShjb25zdCBDb250ZW50VHlwZSYpOwogCiAg
ICAgU291cmNlQnVmZmVyUGFyc2VyV2ViTSgpOwogICAgIH5Tb3VyY2VCdWZmZXJQYXJzZXJXZWJN
KCk7CkBAIC03MSw5ICs3NywxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNldFBhcnNlclN0YXRl
KCkgZmluYWw7CiAgICAgdm9pZCBpbnZhbGlkYXRlKCkgZmluYWw7CiAKLSNpZiAhUkVMRUFTRV9M
T0dfRElTQUJMRUQKKyAgICB2b2lkIGZsdXNoUGVuZGluZ0F1ZGlvQnVmZmVycygpOworICAgIHZv
aWQgc2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24oZmxvYXQpOworCiAgICAgdm9pZCBzZXRM
b2dnZXIoY29uc3QgV1RGOjpMb2dnZXImLCBjb25zdCB2b2lkKiBpZGVudGlmaWVyKSBmaW5hbDsK
LSNlbmRpZgorCisgICAgdm9pZCBwcm92aWRlTWVkaWFEYXRhKFJldGFpblB0cjxDTVNhbXBsZUJ1
ZmZlclJlZj4sIHVpbnQ2NF90KTsKIAogICAgIGVudW0gY2xhc3MgRXJyb3JDb2RlIDogaW50MzJf
dCB7CiAgICAgICAgIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk1FcnJvckNvZGVTdGFydCA9IDIwMDAs
CkBAIC05NSwyMCArMTA0LDExOSBAQCBwdWJsaWM6CiAgICAgICAgIFJlYWRpbmdDbHVzdGVyLAog
ICAgIH07CiAKLXByaXZhdGU6Ci0gICAgc3RydWN0IFRyYWNrRGF0YSB7Ci0gICAgICAgIHdlYm06
OlRyYWNrRW50cnkgdHJhY2s7Ci0gICAgICAgIHZwOV9wYXJzZXI6OlZwOUhlYWRlclBhcnNlciBo
ZWFkZXJQYXJzZXI7Ci0gICAgICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBm
b3JtYXREZXNjcmlwdGlvbjsKLSAgICAgICAgUmV0YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+IGN1
cnJlbnRCbG9ja0J1ZmZlcjsKLSAgICAgICAgdWludDY0X3QgY3VycmVudEJsb2NrQnVmZmVyUG9z
aXRpb24geyAwIH07CisgICAgZW51bSBjbGFzcyBDb2RlY1R5cGUgOiB1aW50OF90IHsKKyAgICAg
ICAgVW5zdXBwb3J0ZWQsCisgICAgICAgIFZQOSwKKyAgICAgICAgVm9yYmlzLAorICAgICAgICBP
cHVzLAorICAgIH07CisKKyAgICBjbGFzcyBUcmFja0RhdGEgeworICAgICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBhdXRvIGNyZWF0ZShD
b2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBT
b3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIpIC0+IFVuaXF1ZVJlZjxUcmFja0RhdGE+Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFRyYWNrRGF0YT4oY29k
ZWNUeXBlLCB0cmFja0VudHJ5LCBUeXBlOjpVbmtub3duLCBwYXJzZXIpOworICAgICAgICB9CisK
KyAgICAgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgICAgIFVua25vd24sCisgICAgICAg
ICAgICBBdWRpbywKKyAgICAgICAgICAgIFZpZGVvLAorICAgICAgICB9OworCisgICAgICAgIFRy
YWNrRGF0YShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFj
a0VudHJ5LCBUeXBlIHRyYWNrVHlwZSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2VyKQor
ICAgICAgICAgICAgOiBtX2NvZGVjIHsgY29kZWNUeXBlIH0KKyAgICAgICAgICAgICwgbV90cmFj
ayB7IHdlYm06OlRyYWNrRW50cnkgeyB0cmFja0VudHJ5IH0gfQorICAgICAgICAgICAgLCBtX3Ry
YWNrVHlwZSB7IHRyYWNrVHlwZSB9CisgICAgICAgICAgICAsIG1fcGFyc2VyIHsgcGFyc2VyIH0K
KyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgflRyYWNrRGF0YSgpID0gZGVm
YXVsdDsKKworICAgICAgICBDb2RlY1R5cGUgY29kZWMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVj
OyB9CisgICAgICAgIHdlYm06OlRyYWNrRW50cnkmIHRyYWNrKCkgeyByZXR1cm4gbV90cmFjazsg
fQorICAgICAgICBUeXBlIHRyYWNrVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhY2tUeXBlOyB9
CisKKyAgICAgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGZvcm1hdERlc2Ny
aXB0aW9uKCkgeyByZXR1cm4gbV9mb3JtYXREZXNjcmlwdGlvbjsgfQorICAgICAgICB2b2lkIHNl
dEZvcm1hdERlc2NyaXB0aW9uKFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiYmIGRl
c2NyaXB0aW9uKSB7IG1fZm9ybWF0RGVzY3JpcHRpb24gPSBXVEZNb3ZlKGRlc2NyaXB0aW9uKTsg
fQorCisgICAgICAgIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIHBhcnNlcigpIGNvbnN0IHsgcmV0
dXJuIG1fcGFyc2VyOyB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHdlYm06OlN0YXR1cyBj
b25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEm
LCB1aW50NjRfdCosIGNvbnN0IENNVGltZSYsIGludCkKKyAgICAgICAgeworICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdl
Ym06OlN0YXR1czo6a0ludmFsaWRFbGVtZW50SWQpOworICAgICAgICB9CisKKyAgICBwcml2YXRl
OgorICAgICAgICBDb2RlY1R5cGUgbV9jb2RlYzsKKyAgICAgICAgd2VibTo6VHJhY2tFbnRyeSBt
X3RyYWNrOworICAgICAgICBUeXBlIG1fdHJhY2tUeXBlOworICAgICAgICBSZXRhaW5QdHI8Q01G
b3JtYXREZXNjcmlwdGlvblJlZj4gbV9mb3JtYXREZXNjcmlwdGlvbjsKKyAgICAgICAgU291cmNl
QnVmZmVyUGFyc2VyV2ViTSYgbV9wYXJzZXI7CisgICAgfTsKKworICAgIGNsYXNzIFZpZGVvVHJh
Y2tEYXRhIDogcHVibGljIFRyYWNrRGF0YSB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMg
YXV0byBjcmVhdGUoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYg
dHJhY2tFbnRyeSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2VyKSAtPiBVbmlxdWVSZWY8
VmlkZW9UcmFja0RhdGE+CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVl
UmVmPFZpZGVvVHJhY2tEYXRhPihjb2RlY1R5cGUsIHRyYWNrRW50cnksIHBhcnNlcik7CisgICAg
ICAgIH0KKworICAgICAgICBWaWRlb1RyYWNrRGF0YShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25z
dCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBw
YXJzZXIpCisgICAgICAgICAgICA6IFRyYWNrRGF0YShjb2RlY1R5cGUsIHRyYWNrRW50cnksIFR5
cGU6OlZpZGVvLCBwYXJzZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHdlYm06
OlN0YXR1cyBjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1l
TWV0YWRhdGEmLCB1aW50NjRfdCosIGNvbnN0IENNVGltZSYsIGludCkgZmluYWw7CisgICAgICAg
IAorICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgY3JlYXRlU2FtcGxlQnVmZmVyKGNvbnN0IENN
VGltZSYsIGludCk7CisgICAgICAgIGNvbnN0IGNoYXIqIGxvZ0NsYXNzTmFtZSgpIGNvbnN0IHsg
cmV0dXJuICJWaWRlb1RyYWNrRGF0YSI7IH0KKworICAgICAgICB2cDlfcGFyc2VyOjpWcDlIZWFk
ZXJQYXJzZXIgbV9oZWFkZXJQYXJzZXI7CisgICAgICAgIFJldGFpblB0cjxDTUJsb2NrQnVmZmVy
UmVmPiBtX2N1cnJlbnRCbG9ja0J1ZmZlcjsKKyAgICAgICAgdWludDY0X3QgbV9jdXJyZW50Qmxv
Y2tCdWZmZXJQb3NpdGlvbiB7IDAgfTsKKyAgICB9OworCisgICAgY2xhc3MgQXVkaW9UcmFja0Rh
dGEgOiBwdWJsaWMgVHJhY2tEYXRhIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBhdXRv
IGNyZWF0ZShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFj
a0VudHJ5LCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIsIGZsb2F0IG1pbmltdW1TYW1w
bGVEdXJhdGlvbikgLT4gVW5pcXVlUmVmPEF1ZGlvVHJhY2tEYXRhPgorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxBdWRpb1RyYWNrRGF0YT4oY29kZWNUeXBlLCB0
cmFja0VudHJ5LCBwYXJzZXIsIG1pbmltdW1TYW1wbGVEdXJhdGlvbik7CisgICAgICAgIH0KKwor
ICAgICAgICBBdWRpb1RyYWNrRGF0YShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpU
cmFja0VudHJ5JiB0cmFja0VudHJ5LCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIsIGZs
b2F0IG1pbmltdW1TYW1wbGVEdXJhdGlvbikKKyAgICAgICAgICAgIDogVHJhY2tEYXRhIHsgY29k
ZWNUeXBlLCB0cmFja0VudHJ5LCBUeXBlOjpBdWRpbywgcGFyc2VyIH0KKyAgICAgICAgICAgICwg
bV9taW5pbXVtU2FtcGxlRHVyYXRpb24geyBtaW5pbXVtU2FtcGxlRHVyYXRpb24gfQorICAgICAg
ICB7CisgICAgICAgIH0KKworICAgICAgICB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0YSh3
ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqLCBjb25z
dCBDTVRpbWUmLCBpbnQpIGZpbmFsOworICAgICAgICB2b2lkIGNyZWF0ZVNhbXBsZUJ1ZmZlcigp
OworCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkgY29u
c3QgeyByZXR1cm4gIkF1ZGlvVHJhY2tEYXRhIjsgfQorCisgICAgICAgIENNVGltZSBtX3NhbXBs
ZVByZXNlbnRhdGlvblRpbWU7CisgICAgICAgIENNVGltZSBtX3BhY2tldER1cmF0aW9uOworICAg
ICAgICBWZWN0b3I8dWludDhfdD4gbV9wYWNrZXREYXRhOworICAgICAgICBzaXplX3QgbV9wYWNr
ZXRCeXRlc1JlYWQgeyAwIH07CisgICAgICAgIHNpemVfdCBtX2J5dGVPZmZzZXQgeyAwIH07Cisg
ICAgICAgIFZlY3RvcjxBdWRpb1N0cmVhbVBhY2tldERlc2NyaXB0aW9uPiBtX3BhY2tldERlc2Ny
aXB0aW9uczsKKworICAgICAgICAvLyBGSVhNRTogMC41IC0gMS4wIHNlY29uZHMgaXMgYSBiZXR0
ZXIgZHVyYXRpb24gcGVyIHNhbXBsZSBidWZmZXIsIGJ1dCB1c2UgMiBzZWNvbmRzIHNvIGF0IGxl
YXN0IHRoZSBmaXJzdAorICAgICAgICAvLyBzYW1wbGUgYnVmZmVyIHdpbGwgcGxheSB1bnRpbCB3
ZSBmaXggU2FtcGxlQ3Vyc29yOjpjcmVhdGVTYW1wbGVCdWZmZXIgdG8gZGVhbCB3aXRoIGBlbmRD
dXJzb3JgLgorICAgICAgICBmbG9hdCBtX21pbmltdW1TYW1wbGVEdXJhdGlvbiB7IDIgfTsKICAg
ICB9OwotICAgIFRyYWNrRGF0YSogdHJhY2tEYXRhRm9yVHJhY2tOdW1iZXIodWludDY0X3QpOwog
Ci0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECiAgICAgY29uc3QgV1RGOjpMb2dnZXIqIGxvZ2dl
clB0cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nZ2VyLmdldCgpOyB9CiAgICAgY29uc3Qgdm9pZCog
bG9nSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nSWRlbnRpZmllcjsgfQotI2VuZGlm
CisKK3ByaXZhdGU6CisKKyAgICBUcmFja0RhdGEqIHRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHVp
bnQ2NF90KTsKIAogICAgIC8vIHdlYm06OkNhbGxiYWNrCiAgICAgd2VibTo6U3RhdHVzIE9uRWxl
bWVudEJlZ2luKGNvbnN0IHdlYm06OkVsZW1lbnRNZXRhZGF0YSYsIHdlYm06OkFjdGlvbiopIGZp
bmFsOwpAQCAtMTM1LDIwICsyNDMsMTggQEAgcHJpdmF0ZToKIAogICAgIFN0YXRlIG1fc3RhdGUg
eyBTdGF0ZTo6Tm9uZSB9OwogCi0gICAgY2xhc3MgU3RyZWFtaW5nVmVjdG9yUmVhZGVyOwogICAg
IFVuaXF1ZVJlZjxTdHJlYW1pbmdWZWN0b3JSZWFkZXI+IG1fcmVhZGVyOwogCi0gICAgVmVjdG9y
PFRyYWNrRGF0YT4gbV90cmFja3M7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxUcmFja0RhdGE+PiBt
X3RyYWNrczsKICAgICB1c2luZyBCbG9ja1ZhcmlhbnQgPSBWYXJpYW50PHdlYm06OkJsb2NrLCB3
ZWJtOjpTaW1wbGVCbG9jaz47CiAgICAgT3B0aW9uYWw8QmxvY2tWYXJpYW50PiBtX2N1cnJlbnRC
bG9jazsKICAgICBPcHRpb25hbDx1aW50NjRfdD4gbV9yZXdpbmRUb1Bvc2l0aW9uOworICAgIGZs
b2F0IG1fbWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24geyAyIH07CiAKICAgICBCb3g8QmluYXJ5
U2VtYXBob3JlPiBtX2luaXRpYWxpemF0aW9uU2VnbWVudElzSGFuZGxlZFNlbWFwaG9yZTsKIAot
I2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIFJlZlB0cjxjb25zdCBXVEY6OkxvZ2dlcj4g
bV9sb2dnZXI7CiAgICAgY29uc3Qgdm9pZCogbV9sb2dJZGVudGlmaWVyIHsgbnVsbHB0ciB9Owot
I2VuZGlmCiB9OwogCiB9CkBAIC0xNTcsNCArMjYzLDEyIEBAIFNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQkVHSU4oV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTSkKICAgICBzdGF0aWMgYm9v
bCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyJiBwYXJzZXIpIHsgcmV0
dXJuIHBhcnNlci50eXBlKCkgPT0gV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyOjpUeXBlOjpX
ZWJNOyB9CiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCiAKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQkVHSU4oV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0Rh
dGEpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OlRyYWNrRGF0YSYgdHJhY2tEYXRhKSB7IHJldHVybiB0cmFja0RhdGEudHJhY2tU
eXBlKCkgPT0gV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpUeXBl
OjpWaWRlbzsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJh
Y2tEYXRhKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpUcmFja0RhdGEmIHRyYWNrRGF0YSkgeyByZXR1cm4gdHJhY2tEYXRhLnRy
YWNrVHlwZSgpID09IFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6
VHlwZTo6QXVkaW87IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwogI2VuZGlmIC8v
IEVOQUJMRShNRURJQV9TT1VSQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaAppbmRleCAxNGM2ZjNhZTk4
NDMwYWFlYzJiOGU4MjJiMWZiNTFiNDc1OGFhOTMwLi41Y2NkMzU3NzkzMTQ0OTllNzY0MDU4ZjI0
MjhkMmE2ZmViNTAzZTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLmgKQEAgLTI4LDYgKzI4LDEzIEBA
CiAjaWYgRU5BQkxFKFZQOSkgJiYgUExBVEZPUk0oQ09DT0EpCiAKICNpbmNsdWRlICJWUDlVdGls
aXRpZXMuaCIKKyNpbmNsdWRlIDx3ZWJtL2RvbV90eXBlcy5oPgorCit0eXBlZGVmIGNvbnN0IHN0
cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uKiBDTUZvcm1hdERlc2NyaXB0aW9uUmVmOwor
CituYW1lc3BhY2UgdnA5X3BhcnNlciB7CitjbGFzcyBWcDlIZWFkZXJQYXJzZXI7Cit9CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDQsNiArNTEsOCBAQCBleHRlcm4gYm9vbCBpc1ZQOURl
Y29kZXJBdmFpbGFibGUoKTsKIGV4dGVybiBib29sIGlzVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNv
cmRTdXBwb3J0ZWQoVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmKTsKIGV4dGVybiBib29sIHZh
bGlkYXRlVlBQYXJhbWV0ZXJzKFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJiwgTWVkaWFDYXBh
YmlsaXRpZXNJbmZvJiwgY29uc3QgVmlkZW9Db25maWd1cmF0aW9uJik7CiAKK1JldGFpblB0cjxD
TUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDlIZWFk
ZXJQYXJzZXIoY29uc3QgdnA5X3BhcnNlcjo6VnA5SGVhZGVyUGFyc2VyJiwgY29uc3Qgd2VibTo6
RWxlbWVudDx3ZWJtOjpDb2xvdXI+Jik7CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29h
Lm1tCmluZGV4IGM4MWU5N2FhM2U0NzdkN2M3Yjg5YzE2MTlhOWYzZmYyZjJiZWMwYTEuLjQxMjI1
MGY5NzQ3YTg5OTI2YWVlNWI5MjgxZjFhNDEzYmMyZThjMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29h
Lm1tCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlZQOVV0aWxpdGllc0NvY29h
LmgiCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlZQOVV0aWxpdGllc0NvY29hLmgiCiAK
ICNpZiBFTkFCTEUoVlA5KSAmJiBQTEFURk9STShDT0NPQSkKIApAQCAtMzYsMTMgKzM2LDIwIEBA
CiAjaW1wb3J0ICJTeXN0ZW1CYXR0ZXJ5LmgiCiAjaW1wb3J0ICJWaWRlb0NvbmZpZ3VyYXRpb24u
aCIKICNpbXBvcnQgPENvcmVNZWRpYS9DTUZvcm1hdERlc2NyaXB0aW9uLmg+CisjaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9EYXRhVmlldy5oPgorI2ltcG9ydCA8Y29tbW9uL3ZwOV9oZWFkZXJfcGFy
c2VyLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9uLmg+CiAK
ICNpbXBvcnQgPHBhbC9jb2NvYS9BVkZvdW5kYXRpb25Tb2Z0TGluay5oPgorI2ltcG9ydCA8cGFs
L2NmL0NvcmVNZWRpYVNvZnRMaW5rLmg+CisjaW1wb3J0ICJDb3JlVmlkZW9Tb2Z0TGluay5oIgog
I2ltcG9ydCAiVmlkZW9Ub29sYm94U29mdExpbmsuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Cit1c2luZyBuYW1lc3BhY2UgUEFMOwordXNpbmcgbmFtZXNwYWNlIHdlYm07CisKIHN0YXRpYyBi
b29sIGhhcmR3YXJlVlA5RGVjb2RlckRpc2FibGVkRm9yVGVzdGluZyB7IGZhbHNlIH07CiAKIHN0
cnVjdCBPdmVycmlkZVNjcmVlbkRhdGEgewpAQCAtMjU3LDYgKzI2NCwyODggQEAgYm9vbCB2YWxp
ZGF0ZVZQUGFyYW1ldGVycyhWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYgY29kZWNDb25maWd1
cmF0aW9uLCBNZWRpYUMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIHVpbnQ4X3QgY29u
dmVydFRvQ29sb3JQcmltYXJpZXMoY29uc3QgUHJpbWFyaWVzJiBjb2VmZmljaWVudHMpCit7Cisg
ICAgc3dpdGNoIChjb2VmZmljaWVudHMpIHsKKyAgICBjYXNlIFByaW1hcmllczo6a0J0NzA5Ogor
ICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzcwOV82Owor
ICAgIGNhc2UgUHJpbWFyaWVzOjprVW5zcGVjaWZpZWQ6CisgICAgICAgIHJldHVybiBWUENvbmZp
Z3VyYXRpb25Db2xvclByaW1hcmllczo6VW5zcGVjaWZpZWQ7CisgICAgY2FzZSBQcmltYXJpZXM6
OmtCdDQ3ME06CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6
QlRfNDcwXzZfTTsKKyAgICBjYXNlIFByaW1hcmllczo6a0J0NDcwQmc6CisgICAgICAgIHJldHVy
biBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfNDcwXzdfQkc7CisgICAgY2FzZSBQ
cmltYXJpZXM6OmtTbXB0ZTE3ME06CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xv
clByaW1hcmllczo6QlRfNjAxXzc7CisgICAgY2FzZSBQcmltYXJpZXM6OmtTbXB0ZTI0ME06Cisg
ICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfU1RfMjQw
OworICAgIGNhc2UgUHJpbWFyaWVzOjprRmlsbToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJh
dGlvbkNvbG9yUHJpbWFyaWVzOjpGaWxtOworICAgIGNhc2UgUHJpbWFyaWVzOjprQnQyMDIwOgor
ICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzIwMjBfTm9u
Y29uc3RhbnRfTHVtaW5hbmNlOworICAgIGNhc2UgUHJpbWFyaWVzOjprU21wdGVTdDQyODE6Cisg
ICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfU1RfNDI4
XzE7CisgICAgY2FzZSBQcmltYXJpZXM6OmtTbXB0ZVJwNDMxOgorICAgICAgICByZXR1cm4gVlBD
b25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1JQXzQzMV8yOworICAgIGNhc2UgUHJp
bWFyaWVzOjprU21wdGVFZzQzMjoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9y
UHJpbWFyaWVzOjpTTVBURV9FR180MzJfMTsKKyAgICBjYXNlIFByaW1hcmllczo6a0plZGVjUDIy
UGhvc3Bob3JzOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6
OkVCVV9UZWNoXzMyMTNfRTsKKyAgICB9Cit9CisKK3N0YXRpYyBDRlN0cmluZ1JlZiBjb252ZXJ0
VG9DTUNvbG9yUHJpbWFyaWVzKHVpbnQ4X3QgcHJpbWFyaWVzKQoreworICAgIHN3aXRjaCAocHJp
bWFyaWVzKSB7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfNzA5
XzY6CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzX0lUVV9SXzcw
OV8yOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkVCVV9UZWNoXzMy
MTNfRToKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfRUJVXzMy
MTM7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfNjAxXzc6Cisg
ICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfU1RfMjQwOgorICAg
ICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19TTVBURV9DOworICAgIGNh
c2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1JQXzQzMV8yOgorICAgICAg
ICByZXR1cm4ga0NNRm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19EQ0lfUDM7CisgICAg
Y2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfRUdfNDMyXzE6CisgICAg
ICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX1AzX0Q2NTsKKyAg
ICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF8yMDIwX05vbmNvbnN0YW50
X0x1bWluYW5jZToKKyAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQcmlt
YXJpZXNfSVRVX1JfMjAyMDsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3Rh
dGljIHVpbnQ4X3QgY29udmVydFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MoY29uc3QgVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3MmIGNoYXJhY3RlcmlzdGljcykKK3sKKyAgICBzd2l0Y2ggKGNoYXJh
Y3RlcmlzdGljcykgeworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtCdDcwOToK
KyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpC
VF83MDlfNjsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprVW5zcGVjaWZpZWQ6
CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
VW5zcGVjaWZpZWQ7CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0dhbW1hMjJj
dXJ2ZToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjpCVF80NzBfNl9NOworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtHYW1t
YTI4Y3VydmU6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6QlRfNDcwXzdfQkc7CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
a1NtcHRlMTcwTToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjpCVF82MDFfNzsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpr
U21wdGUyNDBNOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OlNNUFRFX1NUXzI0MDsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
OjprTGluZWFyOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OkxpbmVhcjsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprTG9n
OgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OkxvZ3JpdGhtaWM7CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0xvZ1NxcnQ6
CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
TG9ncml0aG1pY19TcXJ0OworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtJZWM2
MTk2NjI0OgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OklFQ182MTk2Nl8yXzQ7CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
a0J0MTM2MUV4dGVuZGVkQ29sb3VyR2FtdXQ6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRp
b25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfMTM2MV8wOworICAgIGNhc2UgVHJhbnNmZXJD
aGFyYWN0ZXJpc3RpY3M6OmtJZWM2MTk2NjIxOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0
aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OklFQ182MTk2Nl8yXzE7CisgICAgY2FzZSBUcmFu
c2ZlckNoYXJhY3RlcmlzdGljczo6azEwQml0QnQyMDIwOgorICAgICAgICByZXR1cm4gVlBDb25m
aWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTBiaXQ7CisgICAgY2Fz
ZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6azEyQml0QnQyMDIwOgorICAgICAgICByZXR1cm4g
VlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTJiaXQ7Cisg
ICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a1NtcHRlU3QyMDg0OgorICAgICAgICBy
ZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzIw
ODQ7CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a1NtcHRlU3Q0MjgxOgorICAg
ICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRF
X1NUXzQyOF8xOworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtBcmliU3RkQjY3
SGxnOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OkJUXzIxMDBfSExHOworICAgIH0KK30KKworc3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRU
b0NNVHJhbnNmZXJGdW5jdGlvbih1aW50OF90IGNoYXJhY3RlcmlzdGljcykKK3sKKyAgICBzd2l0
Y2ggKGNoYXJhY3RlcmlzdGljcykgeworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJD
aGFyYWN0ZXJpc3RpY3M6OkJUXzcwOV82OgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJU
cmFuc2ZlckZ1bmN0aW9uX0lUVV9SXzcwOV8yOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzI0MDoKKyAgICAgICAgcmV0dXJuIGtDVklt
YWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbl9TTVBURV8yNDBNXzE5OTU7CisgICAgY2FzZSBWUENv
bmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U01QVEVfU1RfMjA4NDoKKyAgICAg
ICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9TTVBURV9TVF8y
MDg0X1BROworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OkJUXzIwMjBfMTBiaXQ6CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6QlRfMjAyMF8xMmJpdDoKKyAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0
aW9uVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl8yMDIwOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9u
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzQyOF8xOgorICAgICAgICByZXR1cm4g
a0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX1NNUFRFX1NUXzQyOF8xOworICAg
IGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIxMDBfSExH
OgorICAgICAgICByZXR1cm4ga0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX0lU
VV9SXzIxMDBfSExHOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OklFQ182MTk2Nl8yXzE6CisgICAgICAgIHJldHVybiBjYW5Mb2FkX0NvcmVNZWRpYV9r
Q01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fc1JHQigpID8gUEFMOjpnZXRfQ29y
ZU1lZGlhX2tDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9zUkdCKCkgOiBudWxs
cHRyOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6Okxp
bmVhcjoKKyAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlv
bl9MaW5lYXI7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyB1aW50
OF90IGNvbnZlcnRUb01hdHJpeENvZWZmaWNpZW50cyhjb25zdCBNYXRyaXhDb2VmZmljaWVudHMm
IGNvZWZmaWNpZW50cykKK3sKKyAgICBzd2l0Y2ggKGNvZWZmaWNpZW50cykgeworICAgIGNhc2Ug
TWF0cml4Q29lZmZpY2llbnRzOjprUmdiOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9u
TWF0cml4Q29lZmZpY2llbnRzOjpJZGVudGl0eTsKKyAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50
czo6a0J0NzA5OgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2ll
bnRzOjpCVF83MDlfNjsKKyAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a1Vuc3BlY2lmaWVk
OgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpVbnNw
ZWNpZmllZDsKKyAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a0ZjYzoKKyAgICAgICAgcmV0
dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6RkNDOworICAgIGNhc2UgTWF0
cml4Q29lZmZpY2llbnRzOjprQnQ0NzBCZzoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlv
bk1hdHJpeENvZWZmaWNpZW50czo6QlRfNDcwXzdfQkc7CisgICAgY2FzZSBNYXRyaXhDb2VmZmlj
aWVudHM6OmtTbXB0ZTE3ME06CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhD
b2VmZmljaWVudHM6OkJUXzYwMV83OworICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprU21w
dGUyNDBNOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRz
OjpTTVBURV9TVF8yNDA7CisgICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtZQ2dDbzoKKyAg
ICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6WUNnQ287Cisg
ICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtCdDIwMjBOb25jb25zdGFudEx1bWluYW5jZToK
KyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfMjAy
MF9Ob25jb25zdGFudF9MdW1pbmFuY2U7CisgICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtC
dDIwMjBDb25zdGFudEx1bWluYW5jZToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1h
dHJpeENvZWZmaWNpZW50czo6QlRfMjAyMF9Db25zdGFudF9MdW1pbmFuY2U7CisgICAgfQorfQor
CitzdGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRvQ01ZQ2JDUk1hdHJpeCh1aW50OF90IGNvZWZm
aWNpZW50cykKK3sKKyAgICBzd2l0Y2ggKGNvZWZmaWNpZW50cykgeworICAgIGNhc2UgVlBDb25m
aWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF8yMDIwX05vbmNvbnN0YW50X0x1bWluYW5j
ZToKKyAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uWUNiQ3JNYXRyaXhfSVRVX1Jf
MjAyMDsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfNDcw
XzdfQkc6CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzYw
MV83OgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl82MDFf
NDsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfNzA5XzY6
CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzcwOV8yOwor
ICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpTTVBURV9TVF8yNDA6
CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1NNUFRFXzI0ME1fMTk5
NTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIHVpbnQ4X3QgY29u
dmVydFN1YnNhbXBsaW5nWFlUb0Nocm9tYVN1YnNhbXBsaW5nKHVpbnQ2NF90IHgsIHVpbnQ2NF90
IHkpCit7CisgICAgaWYgKHggJiB5KQorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ2hy
b21hU3Vic2FtcGxpbmc6OlN1YnNhbXBsaW5nXzQyMF9Db2xvY2F0ZWQ7CisgICAgaWYgKHggJiAh
eSkKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNocm9tYVN1YnNhbXBsaW5nOjpTdWJz
YW1wbGluZ180MjI7CisgICAgaWYgKCF4ICYgIXkpCisgICAgICAgIHJldHVybiBWUENvbmZpZ3Vy
YXRpb25DaHJvbWFTdWJzYW1wbGluZzo6U3Vic2FtcGxpbmdfNDQ0OworICAgIC8vIFRoaXMgaW5k
aWNhdGVzIDQ6NDowIHN1YnNhbXBsaW5nLCB3aGljaCBpcyBub3QgZXhwcmVzc2FibGUgaW4gdGhl
ICd2cGNDJyBib3guIERlZmF1bHQgdG8gNDoyOjAuCisgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlv
bkNocm9tYVN1YnNhbXBsaW5nOjpTdWJzYW1wbGluZ180MjBfQ29sb2NhdGVkOworfQorCitSZXRh
aW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9t
VlA5SGVhZGVyUGFyc2VyKGNvbnN0IHZwOV9wYXJzZXI6OlZwOUhlYWRlclBhcnNlciYgcGFyc2Vy
LCBjb25zdCB3ZWJtOjpFbGVtZW50PENvbG91cj4mIGNvbG9yKQoreworICAgIC8vIFJlZjogIlZQ
IENvZGVjIElTTyBNZWRpYSBGaWxlIEZvcm1hdCBCaW5kaW5nLCB2MS4wLCAyMDE3LTAzLTMxIgor
ICAgIC8vIDxodHRwczovL3d3dy53ZWJtcHJvamVjdC5vcmcvdnA5L21wNC8+CisgICAgLy8KKyAg
ICAvLyBjbGFzcyBWUENvZGVjQ29uZmlndXJhdGlvbkJveCBleHRlbmRzIEZ1bGxCb3goJ3ZwY0Mn
LCB2ZXJzaW9uID0gMSwgMCkKKyAgICAvLyB7CisgICAgLy8gICAgIFZQQ29kZWNDb25maWd1cmF0
aW9uUmVjb3JkKCkgdnBjQ29uZmlnOworICAgIC8vIH0KKyAgICAvLworICAgIC8vIGFsaWduZWQg
KDgpIGNsYXNzIFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkIHsKKyAgICAvLyAgICAgdW5zaWdu
ZWQgaW50ICg4KSAgICAgcHJvZmlsZTsKKyAgICAvLyAgICAgdW5zaWduZWQgaW50ICg4KSAgICAg
bGV2ZWw7CisgICAgLy8gICAgIHVuc2lnbmVkIGludCAoNCkgICAgIGJpdERlcHRoOworICAgIC8v
ICAgICB1bnNpZ25lZCBpbnQgKDMpICAgICBjaHJvbWFTdWJzYW1wbGluZzsKKyAgICAvLyAgICAg
dW5zaWduZWQgaW50ICgxKSAgICAgdmlkZW9GdWxsUmFuZ2VGbGFnOworICAgIC8vICAgICB1bnNp
Z25lZCBpbnQgKDgpICAgICBjb2xvdXJQcmltYXJpZXM7CisgICAgLy8gICAgIHVuc2lnbmVkIGlu
dCAoOCkgICAgIHRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOworICAgIC8vICAgICB1bnNpZ25lZCBp
bnQgKDgpICAgICBtYXRyaXhDb2VmZmljaWVudHM7CisgICAgLy8gICAgIHVuc2lnbmVkIGludCAo
MTYpICAgIGNvZGVjSW50aWFsaXphdGlvbkRhdGFTaXplOworICAgIC8vICAgICB1bnNpZ25lZCBp
bnQgKDgpW10gICBjb2RlY0ludGlhbGl6YXRpb25EYXRhOworICAgIC8vIH0KKyAgICAvLworICAg
IC8vIGNvZGVjSW50aWFsaXphdGlvbkRhdGFTaXpl4oCLRm9yIFZQOCBhbmQgVlA5IHRoaXMgZmll
bGQgbXVzdCBiZSAwLgorICAgIC8vIGNvZGVjSW50aWFsaXphdGlvbkRhdGHigItiaW5hcnkgY29k
ZWMgaW5pdGlhbGl6YXRpb24gZGF0YS4gTm90IHVzZWQgZm9yIFZQOCBhbmQgVlA5LgorICAgIC8v
CisgICAgLy8gRklYTUU6IENvbnZlcnQgZXhpc3Rpbmcgc3RydWN0IHRvIGFuIElTT0JveCBhbmQg
cmVwbGFjZSB0aGUgd3JpdGluZyBjb2RlIGJlbG93CisgICAgLy8gd2l0aCBhIHN1YmNsYXNzIG9m
IElTT0Z1bGxCb3guCisKKyAgICBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCByZWNvcmQ7CisK
KyAgICByZWNvcmQucHJvZmlsZSA9IHBhcnNlci5wcm9maWxlKCk7CisgICAgLy8gQ29yZU1lZGlh
IGRvZXMgbmF0IGNhcmUgYWJvdXQgdGhlIFZQOSBjb2RlYyBsZXZlbDsgaGFyZC1jb2RlIHRvIExl
dmVsIDEuMCBoZXJlOgorICAgIHJlY29yZC5sZXZlbCA9IDEwOworICAgIHJlY29yZC5iaXREZXB0
aCA9IHBhcnNlci5iaXRfZGVwdGgoKTsKKyAgICByZWNvcmQudmlkZW9GdWxsUmFuZ2VGbGFnID0g
cGFyc2VyLmNvbG9yX3JhbmdlKCkgPyBWUENvbmZpZ3VyYXRpb25SYW5nZTo6RnVsbFJhbmdlIDog
VlBDb25maWd1cmF0aW9uUmFuZ2U6OlZpZGVvUmFuZ2U7CisgICAgcmVjb3JkLmNocm9tYVN1YnNh
bXBsaW5nID0gY29udmVydFN1YnNhbXBsaW5nWFlUb0Nocm9tYVN1YnNhbXBsaW5nKHBhcnNlci5z
dWJzYW1wbGluZ194KCksIHBhcnNlci5zdWJzYW1wbGluZ195KCkpOworICAgIHJlY29yZC5jb2xv
clByaW1hcmllcyA9IFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpVbnNwZWNpZmllZDsK
KyAgICByZWNvcmQudHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MgPSBWUENvbmZpZ3VyYXRpb25UcmFu
c2ZlckNoYXJhY3RlcmlzdGljczo6VW5zcGVjaWZpZWQ7CisgICAgcmVjb3JkLm1hdHJpeENvZWZm
aWNpZW50cyA9IFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6VW5zcGVjaWZpZWQ7
CisKKyAgICAvLyBDb250YWluZXIgY29sb3IgdmFsdWVzIGNhbiBvdmVycmlkZSBwZXItc2FtcGxl
IG9uZXM6CisgICAgaWYgKGNvbG9yLmlzX3ByZXNlbnQoKSkgeworICAgICAgICBhdXRvJiBjb2xv
clZhbHVlID0gY29sb3IudmFsdWUoKTsKKyAgICAgICAgaWYgKGNvbG9yVmFsdWUuY2hyb21hX3N1
YnNhbXBsaW5nX3guaXNfcHJlc2VudCgpICYmIGNvbG9yVmFsdWUuY2hyb21hX3N1YnNhbXBsaW5n
X3kuaXNfcHJlc2VudCgpKQorICAgICAgICAgICAgcmVjb3JkLmNocm9tYVN1YnNhbXBsaW5nID0g
Y29udmVydFN1YnNhbXBsaW5nWFlUb0Nocm9tYVN1YnNhbXBsaW5nKGNvbG9yVmFsdWUuY2hyb21h
X3N1YnNhbXBsaW5nX3gudmFsdWUoKSwgY29sb3JWYWx1ZS5jaHJvbWFfc3Vic2FtcGxpbmdfeS52
YWx1ZSgpKTsKKyAgICAgICAgaWYgKGNvbG9yVmFsdWUucmFuZ2UuaXNfcHJlc2VudCgpICYmIGNv
bG9yVmFsdWUucmFuZ2UudmFsdWUoKSAhPSBSYW5nZTo6a1Vuc3BlY2lmaWVkKQorICAgICAgICAg
ICAgcmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxhZyA9IGNvbG9yVmFsdWUucmFuZ2UudmFsdWUoKSA9
PSBSYW5nZTo6a0Z1bGwgPyBWUENvbmZpZ3VyYXRpb25SYW5nZTo6RnVsbFJhbmdlIDogVlBDb25m
aWd1cmF0aW9uUmFuZ2U6OlZpZGVvUmFuZ2U7CisgICAgICAgIGlmIChjb2xvclZhbHVlLmJpdHNf
cGVyX2NoYW5uZWwuaXNfcHJlc2VudCgpKQorICAgICAgICAgICAgcmVjb3JkLmJpdERlcHRoID0g
Y29sb3JWYWx1ZS5iaXRzX3Blcl9jaGFubmVsLnZhbHVlKCk7CisgICAgICAgIGlmIChjb2xvclZh
bHVlLnRyYW5zZmVyX2NoYXJhY3RlcmlzdGljcy5pc19wcmVzZW50KCkpCisgICAgICAgICAgICBy
ZWNvcmQudHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MgPSBjb252ZXJ0VG9UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljcyhjb2xvclZhbHVlLnRyYW5zZmVyX2NoYXJhY3RlcmlzdGljcy52YWx1ZSgpKTsKKyAg
ICAgICAgaWYgKGNvbG9yVmFsdWUubWF0cml4X2NvZWZmaWNpZW50cy5pc19wcmVzZW50KCkpCisg
ICAgICAgICAgICByZWNvcmQubWF0cml4Q29lZmZpY2llbnRzID0gY29udmVydFRvTWF0cml4Q29l
ZmZpY2llbnRzKGNvbG9yVmFsdWUubWF0cml4X2NvZWZmaWNpZW50cy52YWx1ZSgpKTsKKyAgICAg
ICAgaWYgKGNvbG9yVmFsdWUucHJpbWFyaWVzLmlzX3ByZXNlbnQoKSkKKyAgICAgICAgICAgIHJl
Y29yZC5jb2xvclByaW1hcmllcyA9IGNvbnZlcnRUb0NvbG9yUHJpbWFyaWVzKGNvbG9yVmFsdWUu
cHJpbWFyaWVzLnZhbHVlKCkpOworICAgIH0KKworICAgIGNvbnN0ZXhwciBzaXplX3QgVlBDb2Rl
Y0NvbmZpZ3VyYXRpb25Db250ZW50c1NpemUgPSAxMjsKKworICAgIHVpbnQzMl90IHZlcnNpb25B
bmRGbGFncyA9IDEgPDwgMjQ7CisgICAgdWludDhfdCBiaXREZXB0aENocm9tYUFuZFJhbmdlID0g
KDB4RiAmIHJlY29yZC5iaXREZXB0aCkgPDwgNCB8ICgweDcgJiByZWNvcmQuY2hyb21hU3Vic2Ft
cGxpbmcpIDw8IDEgfCAoMHgxICYgcmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxhZyk7CisgICAgdWlu
dDE2X3QgY29kZWNJbnRpYWxpemF0aW9uRGF0YVNpemUgPSAwOworCisgICAgYXV0byB2aWV3ID0g
SlNDOjpEYXRhVmlldzo6Y3JlYXRlKEFycmF5QnVmZmVyOjpjcmVhdGUoVlBDb2RlY0NvbmZpZ3Vy
YXRpb25Db250ZW50c1NpemUsIDEpLCAwLCBWUENvZGVjQ29uZmlndXJhdGlvbkNvbnRlbnRzU2l6
ZSk7CisgICAgdmlldy0+c2V0KDAsIHZlcnNpb25BbmRGbGFncywgZmFsc2UpOworICAgIHZpZXct
PnNldCg0LCByZWNvcmQucHJvZmlsZSwgZmFsc2UpOworICAgIHZpZXctPnNldCg1LCByZWNvcmQu
bGV2ZWwsIGZhbHNlKTsKKyAgICB2aWV3LT5zZXQoNiwgYml0RGVwdGhDaHJvbWFBbmRSYW5nZSwg
ZmFsc2UpOworICAgIHZpZXctPnNldCg3LCByZWNvcmQuY29sb3JQcmltYXJpZXMsIGZhbHNlKTsK
KyAgICB2aWV3LT5zZXQoOCwgcmVjb3JkLnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLCBmYWxzZSk7
CisgICAgdmlldy0+c2V0KDksIHJlY29yZC5tYXRyaXhDb2VmZmljaWVudHMsIGZhbHNlKTsKKyAg
ICB2aWV3LT5zZXQoMTAsIGNvZGVjSW50aWFsaXphdGlvbkRhdGFTaXplLCBmYWxzZSk7CisKKyAg
ICBhdXRvIGRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAo
Y29uc3QgVUludDggKil2aWV3LT5kYXRhKCksIHZpZXctPmJ5dGVMZW5ndGgoKSkpOworCisgICAg
Q0ZUeXBlUmVmIGNvbmZpZ3VyYXRpb25LZXlzW10gPSB7IENGU1RSKCJ2cGNDIikgfTsKKyAgICBD
RlR5cGVSZWYgY29uZmlndXJhdGlvblZhbHVlc1tdID0geyBkYXRhLmdldCgpIH07CisgICAgYXV0
byBjb25maWd1cmF0aW9uRGljdCA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9j
YXRvckRlZmF1bHQsIGNvbmZpZ3VyYXRpb25LZXlzLCBjb25maWd1cmF0aW9uVmFsdWVzLCBXVEZf
QVJSQVlfTEVOR1RIKGNvbmZpZ3VyYXRpb25LZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2Fs
bEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworCisgICAgVmVjdG9y
PENGVHlwZVJlZj4gZXh0ZW5zaW9uc0tleXMgeyBrQ01Gb3JtYXREZXNjcmlwdGlvbkV4dGVuc2lv
bl9TYW1wbGVEZXNjcmlwdGlvbkV4dGVuc2lvbkF0b21zIH07CisgICAgVmVjdG9yPENGVHlwZVJl
Zj4gZXh0ZW5zaW9uc1ZhbHVlcyA9IHsgY29uZmlndXJhdGlvbkRpY3QuZ2V0KCkgfTsKKworICAg
IGlmIChyZWNvcmQudmlkZW9GdWxsUmFuZ2VGbGFnID09IFZQQ29uZmlndXJhdGlvblJhbmdlOjpG
dWxsUmFuZ2UpIHsKKyAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtDTUZvcm1hdERlc2Ny
aXB0aW9uRXh0ZW5zaW9uX0Z1bGxSYW5nZVZpZGVvKTsKKyAgICAgICAgZXh0ZW5zaW9uc1ZhbHVl
cy5hcHBlbmQoa0NGQm9vbGVhblRydWUpOworICAgIH0KKworICAgIGlmIChhdXRvIGNtQ29sb3JQ
cmltYXJpZXMgPSBjb252ZXJ0VG9DTUNvbG9yUHJpbWFyaWVzKHJlY29yZC5jb2xvclByaW1hcmll
cykpIHsKKyAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyQ29sb3JQ
cmltYXJpZXNLZXkpOworICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbUNvbG9yUHJp
bWFyaWVzKTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBjbVRyYW5zZmVyRnVuY3Rpb24gPSBjb252
ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24ocmVjb3JkLnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKSkg
eworICAgICAgICBleHRlbnNpb25zS2V5cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJUcmFuc2ZlckZ1
bmN0aW9uS2V5KTsKKyAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21UcmFuc2ZlckZ1
bmN0aW9uKTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBjbU1hdHJpeCA9IGNvbnZlcnRUb0NNWUNi
Q1JNYXRyaXgocmVjb3JkLm1hdHJpeENvZWZmaWNpZW50cykpIHsKKyAgICAgICAgZXh0ZW5zaW9u
c0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhLZXkpOworICAgICAgICBleHRl
bnNpb25zVmFsdWVzLmFwcGVuZChjbU1hdHJpeCk7CisgICAgfQorCisgICAgYXV0byBleHRlbnNp
b25zID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZXh0
ZW5zaW9uc0tleXMuZGF0YSgpLCBleHRlbnNpb25zVmFsdWVzLmRhdGEoKSwgZXh0ZW5zaW9uc0tl
eXMuc2l6ZSgpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlv
bmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisKKyAgICBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25SZWYg
Zm9ybWF0RGVzY3JpcHRpb24gPSBudWxscHRyOworICAgIGlmIChub0VyciAhPSBDTVZpZGVvRm9y
bWF0RGVzY3JpcHRpb25DcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NNVmlkZW9Db2RlY1R5
cGVfVlA5LCBwYXJzZXIud2lkdGgoKSwgcGFyc2VyLmhlaWdodCgpLCBleHRlbnNpb25zLmdldCgp
LCAmZm9ybWF0RGVzY3JpcHRpb24pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1
cm4gYWRvcHRDRihmb3JtYXREZXNjcmlwdGlvbik7Cit9CisKIH0KIAogI2VuZGlmIC8vIFBMQVRG
T1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjFm
NjM3YzAyNGY4YzU4N2VhY2IzYjdlYTAxNzcyNjNjYTg3ODM0OQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGll
c0NvY29hLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgUExBVEZPUk0oQ09DT0EpCisKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK2NsYXNz
IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb247Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVDTUZv
cm1hdERlc2NyaXB0aW9uKiBDTUZvcm1hdERlc2NyaXB0aW9uUmVmOworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2Jvb2wgaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCk7CitSZXRhaW5QdHI8Q01G
b3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlVm9yYmlzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihz
aXplX3QsIGNvbnN0IHZvaWQqKTsKKworYm9vbCBpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCk7CitS
ZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlT3B1c0F1ZGlvRm9ybWF0RGVz
Y3JpcHRpb24oc2l6ZV90LCBjb25zdCB2b2lkKik7CisKK30KKworI2VuZGlmIC8vICYmIFBMQVRG
T1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
MjczZGNlMTU3ZGNlZjYyY2Y1ZmZhNzY5MjI5NGM5MWVjMWE2Y2ZkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0
aWVzQ29jb2EubW0KQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJjb25m
aWcuaCIKKyNpbXBvcnQgIldlYk1BdWRpb1V0aWxpdGllc0NvY29hLmgiCisKKyNpZiBQTEFURk9S
TShDT0NPQSkKKworI2ltcG9ydCAiQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCisjaW1wb3J0
ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYVV0aWxpdGllcy5oIgorI2ltcG9ydCA8QXVkaW9U
b29sYm94L0F1ZGlvQ29tcG9uZW50Lmg+CisjaW1wb3J0IDxBdWRpb1Rvb2xib3gvQXVkaW9Gb3Jt
YXQuaD4KKyNpbXBvcnQgPENvcmVNZWRpYS9DTUZvcm1hdERlc2NyaXB0aW9uLmg+CisjaW1wb3J0
IDxkbGZjbi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoVk9SQklTKSB8
fCBFTkFCTEUoT1BVUykKK3N0YXRpYyBib29sIHJlZ2lzdGVyRGVjb2RlckZhY3RvcnkoY29uc3Qg
Y2hhciogZGVjb2Rlck5hbWUsIE9TVHlwZSBkZWNvZGVyVHlwZSkKK3sKKyAgICBjb25zdGV4cHIg
Y2hhciBhdWRpb0NvbXBvbmVudHNEeWxpYltdID0gIi9TeXN0ZW0vTGlicmFyeS9Db21wb25lbnRz
L0F1ZGlvQ29kZWNzLmNvbXBvbmVudC9Db250ZW50cy9NYWNPUy9BdWRpb0NvZGVjcyI7CisgICAg
dm9pZCAqaGFuZGxlID0gZGxvcGVuKGF1ZGlvQ29tcG9uZW50c0R5bGliLCBSVExEX0xBWlkgfCBS
VExEX0xPQ0FMKTsKKyAgICBpZiAoIWhhbmRsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgQXVkaW9Db21wb25lbnRGYWN0b3J5RnVuY3Rpb24gZGVjb2RlckZhY3RvcnkgPSByZWludGVy
cHJldF9jYXN0PEF1ZGlvQ29tcG9uZW50RmFjdG9yeUZ1bmN0aW9uPihkbHN5bShoYW5kbGUsIGRl
Y29kZXJOYW1lKSk7CisgICAgaWYgKCFkZWNvZGVyRmFjdG9yeSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgQXVkaW9Db21wb25lbnREZXNjcmlwdGlvbiBkZXNjIHsgJ2FkZWMnLCBkZWNv
ZGVyVHlwZSwgJ2FwcGwnLCBrQXVkaW9Db21wb25lbnRGbGFnX1NhbmRib3hTYWZlLCAwIH07Cisg
ICAgaWYgKCFBdWRpb0NvbXBvbmVudFJlZ2lzdGVyKCZkZXNjLCBDRlNUUigiIiksIDAsIGRlY29k
ZXJGYWN0b3J5KSkgeworICAgICAgICBkbGNsb3NlKGhhbmRsZSk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIFJldGFpblB0cjxD
TUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uRm9yRm9y
bWF0KE9TVHlwZSBmb3JtYXRJRCwgVmVjdG9yPHVpbnQ4X3Q+IG1hZ2ljQ29va2llKQoreworICAg
IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBhc2JkIHsgfTsKKyAgICBhc2JkLm1Gb3JtYXRJ
RCA9IGZvcm1hdElEOworICAgIHVpbnQzMl90IHNpemUgPSBzaXplb2YoYXNiZCk7CisgICAgYXV0
byBlcnJvciA9IEF1ZGlvRm9ybWF0R2V0UHJvcGVydHkoa0F1ZGlvRm9ybWF0UHJvcGVydHlfRm9y
bWF0SW5mbywgbWFnaWNDb29raWUuc2l6ZSgpLCBtYWdpY0Nvb2tpZS5kYXRhKCksICZzaXplLCAm
YXNiZCk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE1lZGlh
LCAiY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkZvckZvcm1hdCBmYWlsZWQgd2l0aCBlcnJv
ciAlZCAoJS40cykiLCBlcnJvciwgKGNoYXIgKikmZXJyb3IpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oYXNiZCksIG1hZ2ljQ29va2llLnNpemUoKSwgbWFnaWND
b29raWUuZGF0YSgpKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoVk9SQklTKSB8fCBFTkFCTEUoT1BV
UykKKworI2lmIEVOQUJMRShPUFVTKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBjb29raWVGcm9t
T3B1c0NvZGVjUHJpdmF0ZShzaXplX3QsIGNvbnN0IHZvaWQqKQoreworICAgIHJldHVybiB7IH07
Cit9CisjZW5kaWYKKworYm9vbCBpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCkKK3sKKyAgICBzdGF0
aWMgYm9vbCBhdmFpbGFibGU7CisKKyNpZiBFTkFCTEUoT1BVUykgJiYgUExBVEZPUk0oTUFDKQor
ICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOworICAgIGRpc3BhdGNoX29uY2Uo
Jm9uY2VUb2tlbiwgXnsKKyAgICAgICAgYXZhaWxhYmxlID0gcmVnaXN0ZXJEZWNvZGVyRmFjdG9y
eSgiQUNPcHVzRGVjb2RlckZhY3RvcnkiLCAnb3B1cycpOworICAgIH0pOworI2VuZGlmCisKKyAg
ICByZXR1cm4gYXZhaWxhYmxlOworfQorCitSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJl
Zj4gY3JlYXRlT3B1c0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24oc2l6ZV90IHByaXZhdGVEYXRhU2l6
ZSwgY29uc3Qgdm9pZCogcHJpdmF0ZURhdGEpCit7CisjaWYgRU5BQkxFKE9QVVMpCisgICAgaWYg
KCFpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgYXV0byBjb29raWVEYXRhID0gY29va2llRnJvbU9wdXNDb2RlY1ByaXZhdGUocHJpdmF0ZURh
dGFTaXplLCBwcml2YXRlRGF0YSk7CisgICAgaWYgKCFjb29raWVEYXRhLnNpemUoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlw
dGlvbkZvckZvcm1hdCgnb3B1cycsIGNvb2tpZURhdGEpOworI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0ocHJpdmF0ZURhdGFTaXplKTsKKyAgICBVTlVTRURfUEFSQU0ocHJpdmF0ZURhdGEpOworICAg
IHJldHVybiBudWxscHRyOworI2VuZGlmCit9CisKKyNpZiBFTkFCTEUoVk9SQklTKQorc3RhdGlj
IFZlY3Rvcjx1aW50OF90PiBjb29raWVGcm9tVm9yYmlzQ29kZWNQcml2YXRlKHNpemVfdCBjb2Rl
Y1ByaXZhdGVTaXplLCBjb25zdCB2b2lkKiBjb2RlY1ByaXZhdGVEYXRhKQoreworICAgIC8vIGh0
dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLWNlbGxhci1jb2RlYy0wMworICAg
IC8vIDYuNC4xNS4gQV9WT1JCSVMKKyAgICAvLyBDb2RlYyBJRDogQV9WT1JCSVMKKyAgICAvLyBD
b2RlYyBOYW1lOiBWb3JiaXMKKyAgICAvLyBJbml0aWFsaXphdGlvbjogVGhlICJQcml2YXRlIERh
dGEiIGNvbnRhaW5zIHRoZSBmaXJzdCB0aHJlZSBWb3JiaXMgcGFja2V0IGluIG9yZGVyLiBUaGUg
bGVuZ3RocyBvZiB0aGUKKyAgICAvLyBwYWNrZXRzIHByZWNlZGVzIHRoZW0uIFRoZSBhY3R1YWwg
bGF5b3V0IGlzOgorICAgIC8vIC0gQnl0ZSAxOiBudW1iZXIgb2YgZGlzdGluY3QgcGFja2V0cyAn
IiNwIicgbWludXMgb25lIGluc2lkZSB0aGUgQ29kZWNQcml2YXRlIGJsb2NrLlRoaXMgTVVTVCBi
ZSAnMicKKyAgICAvLyAgIGZvciBjdXJyZW50IChhcyBvZiAyMDE2LTA3LTA4KSBWb3JiaXMgaGVh
ZGVycy4KKyAgICAvLyAtIEJ5dGVzIDIuLm46IGxlbmd0aHMgb2YgdGhlIGZpcnN0ICciI3AiJyBw
YWNrZXRzLCBjb2RlZCBpbiBYaXBoLXN0eWxlIGxhY2luZy4gVGhlIGxlbmd0aCBvZiB0aGUgbGFz
dAorICAgIC8vICAgcGFja2V0IGlzIHRoZSBsZW5ndGggb2YgdGhlIENvZGVjUHJpdmF0ZSBibG9j
ayBtaW51cyB0aGUgbGVuZ3RocyBjb2RlZCBpbiB0aGVzZSBieXRlcyBtaW51cyBvbmUuCisgICAg
Ly8gLSBCeXRlcyBuKzEuLjogVGhlIFZvcmJpcyBpZGVudGlmaWNhdGlvbiBoZWFkZXIsIGZvbGxv
d2VkIGJ5IHRoZSBWb3JiaXMgY29tbWVudCBoZWFkZXIgZm9sbG93ZWQgYnkgdGhlCisgICAgLy8g
ICBjb2RlYyBzZXR1cCBoZWFkZXIuCisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwcml2YXRl
RGF0YVB0ciA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihjb2RlY1ByaXZhdGVE
YXRhKTsKKworICAgIGNvbnN0IGludCB2b3JiaXNNaW5pbXVtQ29va2llU2l6ZSA9IDM7CisgICAg
aWYgKGNvZGVjUHJpdmF0ZVNpemUgPCB2b3JiaXNNaW5pbXVtQ29va2llU2l6ZSkgeworICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihNZWRpYSwgImNvb2tpZUZyb21Wb3JiaXNDb2RlY1ByaXZhdGU6
IGNvZGVjIHByaXZhdGUgZGF0YSB0b28gc21hbGwgKCV6dSkiLCBjb2RlY1ByaXZhdGVTaXplKTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICAvLyBEZXNwaXRlIHRoZSAiVGhpcyBN
VVNUIGJlICcyJyIgY29tbWVudCBpbiB0aGUgSUVURiBkb2N1bWVudCwgcGFja2V0IGNvdW50IGlz
IG5vdCBhbHdheXMgZXF1YWwgdG8KKyAgICAvLyAyIGluIHJlYWwtd29yZCBmaWxlcywgc28gaWdu
b3JlIHRoYXQgZmllbGQuCisgICAgY29uc3QgdWludDE2X3QgaWRIZWFkZXJTaXplID0gcHJpdmF0
ZURhdGFQdHJbMV07CisgICAgY29uc3QgdWludDE2X3QgY29tbWVudEhlYWRlclNpemUgPSBwcml2
YXRlRGF0YVB0clsyXTsKKyAgICBjb25zdCB1aW50MTZfdCBjYWxjdWxhdGVkSGVhZGVyU2l6ZSA9
IDEgKyBpZEhlYWRlclNpemUgKyBjb21tZW50SGVhZGVyU2l6ZTsKKyAgICBpZiAoMSArIGlkSGVh
ZGVyU2l6ZSArIGNvbW1lbnRIZWFkZXJTaXplID4gY29kZWNQcml2YXRlU2l6ZSkgeworICAgICAg
ICBSRUxFQVNFX0xPR19FUlJPUihNZWRpYSwgImNvb2tpZUZyb21Wb3JiaXNDb2RlY1ByaXZhdGU6
IGNvZGVjIHByaXZhdGUgZGF0YSB0b28gc21hbGwgKCV6dSkgZm9yIGhlYWRlciBzaXplcyAoJWQp
IiwgY29kZWNQcml2YXRlU2l6ZSwgY2FsY3VsYXRlZEhlYWRlclNpemUpOworICAgICAgICByZXR1
cm4geyB9OworICAgIH0KKworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGlkSGVhZGVyID0gJnBy
aXZhdGVEYXRhUHRyWzNdOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvbW1lbnRIZWFkZXIg
PSBpZEhlYWRlciArIGlkSGVhZGVyU2l6ZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBjb2Rl
Y1NldHVwSGVhZGVyID0gY29tbWVudEhlYWRlciArIGNvbW1lbnRIZWFkZXJTaXplOworICAgIGNv
bnN0IHVpbnQxNl90IGNvZGVjU2V0dXBIZWFkZXJTaXplID0gY29kZWNQcml2YXRlU2l6ZSAtIGlk
SGVhZGVyU2l6ZSAtIGNvbW1lbnRIZWFkZXJTaXplIC0gMiAtIDE7CisKKyAgICBpZiAoKGlkSGVh
ZGVyU2l6ZSArIGNvbW1lbnRIZWFkZXJTaXplICsgY29kZWNTZXR1cEhlYWRlclNpemUgKyAzKSA+
IGNvZGVjUHJpdmF0ZVNpemUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTWVkaWEsICJj
b29raWVGcm9tVm9yYmlzQ29kZWNQcml2YXRlOiBjb2RlYyBwcml2YXRlIGhlYWRlciBzaXplIGlz
IGludmFsaWQgLSBpZCA9ICVkLCBjb21tZW50ID0gJWQsIGhlYWRlciA9ICVkLCBjaHVuayBzaXpl
ID0gJXp1IiwgaWRIZWFkZXJTaXplLCBjb21tZW50SGVhZGVyU2l6ZSwgY29kZWNTZXR1cEhlYWRl
clNpemUsIGNvZGVjUHJpdmF0ZVNpemUpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwor
ICAgIFZlY3Rvcjx1aW50OF90PiBjb29raWVEYXRhOworICAgIGNvb2tpZURhdGEuYXBwZW5kKHJl
aW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IHVpbnQ4X3QqPigmaWRIZWFkZXJTaXplKSwgc2l6ZW9m
KGlkSGVhZGVyU2l6ZSkpOworICAgIGNvb2tpZURhdGEuYXBwZW5kKGlkSGVhZGVyLCBpZEhlYWRl
clNpemUpOworCisgICAgY29va2llRGF0YS5hcHBlbmQocmVpbnRlcnByZXRfY2FzdF9wdHI8Y29u
c3QgdWludDhfdCo+KCZjb21tZW50SGVhZGVyU2l6ZSksIHNpemVvZihjb21tZW50SGVhZGVyU2l6
ZSkpOworICAgIGNvb2tpZURhdGEuYXBwZW5kKGNvbW1lbnRIZWFkZXIsIGNvbW1lbnRIZWFkZXJT
aXplKTsKKworICAgIGNvb2tpZURhdGEuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0
IHVpbnQ4X3QqPigmY29kZWNTZXR1cEhlYWRlclNpemUpLCBzaXplb2YoY29kZWNTZXR1cEhlYWRl
clNpemUpKTsKKyAgICBjb29raWVEYXRhLmFwcGVuZChjb2RlY1NldHVwSGVhZGVyLCBjb2RlY1Nl
dHVwSGVhZGVyU2l6ZSk7CisKKyAgICByZXR1cm4gY29va2llRGF0YTsKK30KKyNlbmRpZiAvLyBF
TkFCTEUoVk9SQklTKQorCitib29sIGlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpCit7CisgICAg
c3RhdGljIGJvb2wgYXZhaWxhYmxlOworCisjaWYgRU5BQkxFKFZPUkJJUykgJiYgUExBVEZPUk0o
TUFDKQorICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOworICAgIGRpc3BhdGNo
X29uY2UoJm9uY2VUb2tlbiwgXnsKKyAgICAgICAgYXZhaWxhYmxlID0gcmVnaXN0ZXJEZWNvZGVy
RmFjdG9yeSgiQUNWb3JiaXNEZWNvZGVyRmFjdG9yeSIsICd2b3JiJyk7CisgICAgfSk7CisjZW5k
aWYKKworICAgIHJldHVybiBhdmFpbGFibGU7Cit9CisKK1JldGFpblB0cjxDTUZvcm1hdERlc2Ny
aXB0aW9uUmVmPiBjcmVhdGVWb3JiaXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKHNpemVfdCBwcml2
YXRlRGF0YVNpemUsIGNvbnN0IHZvaWQqIHByaXZhdGVEYXRhKQoreworI2lmIEVOQUJMRShWT1JC
SVMpCisgICAgaWYgKCFpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBhdXRvIGNvb2tpZURhdGEgPSBjb29raWVGcm9tVm9yYmlzQ29kZWNQ
cml2YXRlKHByaXZhdGVEYXRhU2l6ZSwgcHJpdmF0ZURhdGEpOworICAgIGlmICghY29va2llRGF0
YS5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGNyZWF0ZUF1
ZGlvRm9ybWF0RGVzY3JpcHRpb25Gb3JGb3JtYXQoJ3ZvcmInLCBjb29raWVEYXRhKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHByaXZhdGVEYXRhU2l6ZSk7CisgICAgVU5VU0VEX1BBUkFNKHBy
aXZhdGVEYXRhKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRpZgorfQorCit9CisKKyNlbmRp
ZiAvLyBQTEFURk9STShDT0NPQSkK
</data>
<flag name="commit-queue"
          id="433295"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415924</attachid>
            <date>2020-12-10 13:50:59 -0800</date>
            <delta_ts>2020-12-10 14:24:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219755-20201210135059.patch</filename>
            <type>text/plain</type>
            <size>85182</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwNjM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGE5YjdjY2JmMTY3YWI0
M2I1YWYzZWIzZmI0Y2QzMDM2MTdiZmI3ZS4uZDBmZTg1NmUyNmI0NDdlZjg0MGFiOThlM2M2ZjFk
YTU0ZWEzOTkzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDIwLTEyLTEwICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNU0VdIFJlZmFj
dG9yIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gaW4gcHJlcGFyYXRpb24gZm9yIHN1cHBvcnRpbmcg
YXVkaW8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
OTc1NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzIxOTI2MjU+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVmYWN0b3IgdGhlIFdlYk0gcGFyc2Vy
IGluIHByZXBhcmF0aW9uIGZvciBzdXBwb3J0aW5nIGF1ZGlvOiBtb3ZlIFZQOS1zcGVjaWZpYyBj
b2RlCisgICAgICAgIGludG8gVlA5VXRpbGl0aWVzQ29jb2EsIGNvbnZlcnQgVHJhY2tEYXRhIGZy
b20gYSBzdHJ1Y3QgdG8gYSBjbGFzcyBhbmQgbWFkZSBkZXJpdmVkCisgICAgICAgIGNsYXNzZXMg
Zm9yIGF1ZGlvIGFuZCB2aWRlbywgYWRkIHN0dWIgZnVuY3Rpb24gdG8gY3JlYXRlIGZvcm1hdCBk
ZXNjcmlwdGlvbnMgZm9yIAorICAgICAgICBWb3JiaXMgYW5kIE9wdXMgYXVkaW8uCisKKyAgICAg
ICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKworICAgICAgICAqIHBsYXRmb3JtL2NvY29hL01lZGlhVXRpbGl0aWVzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24pOiBBZGQg
b3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgbWFnaWMgY29va2llLgorICAgICAgICAqIHBsYXRmb3Jt
L2NvY29hL01lZGlhVXRpbGl0aWVzLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlclBhcnNlcldlYk06OmlzQ29udGVudFR5cGVTdXBwb3J0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnJlc2V0UGFyc2VyU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6dHJhY2tEYXRhRm9yVHJhY2tOdW1iZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25UcmFja0VudHJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRnJhbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cHJvdmlkZU1lZGlhRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0
YTo6Y29uc3VtZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJz
ZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJh
bWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlv
VHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6Zmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldE1pbmltdW1BdWRpb1NhbXBsZUR1cmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NvbG9yUHJpbWFyaWVzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NNQ29sb3JQcmltYXJpZXMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01UcmFuc2ZlckZ1bmN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb01hdHJpeENvZWZmaWNpZW50cyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9DTVlDYkNSTWF0cml4KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJz
YW1wbGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGb3JtYXREZXNjcmlw
dGlvbkZyb21WUDlIZWFkZXJQYXJzZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaDoKKyAgICAgICAgKGlzVHlwZSk6
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1t
OgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ29sb3JQcmltYXJpZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Y29udmVydFRvQ01Db2xvclByaW1hcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpj
b252ZXJ0VG9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcyk6CisgICAgICAgIChXZWJDb3JlOjpjb252
ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvTWF0
cml4Q29lZmZpY2llbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NNWUNiQ1JNYXRy
aXgpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFN1YnNhbXBsaW5nWFlUb0Nocm9tYVN1YnNh
bXBsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQ
OUhlYWRlclBhcnNlcik6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJN
QXVkaW9VdGlsaXRpZXNDb2NvYS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpyZWdpc3RlckRlY29kZXJGYWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUF1
ZGlvRm9ybWF0RGVzY3JpcHRpb25Gb3JGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2ll
RnJvbU9wdXNDb2RlY1ByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNPcHVzRGVjb2RlckF2
YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVPcHVzQXVkaW9Gb3JtYXREZXNjcmlw
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVGcm9tVm9yYmlzQ29kZWNQcml2YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OmlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVWb3JiaXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKToKKwogMjAyMC0xMi0x
MCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0lGQ10g
SW50cm9kdWNlIElubGluZVRleHRJdGVtOjppc1dvcmRTZXBhcmF0b3IKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29j
b2EudHh0CmluZGV4IDhmOTlmOWExOTE4Yzk1NTg4NWZiMmFjYjk5YzhkMWE3NTI2NWFhMDMuLmU1
OTEzOWZiYjQ1NjUwZGVmOTk2ZjgyMWQ1Y2FmYTQwYjcyZDhlY2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0Nv
Y29hLnR4dApAQCAtMzc2LDYgKzM3Niw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkNv
cmVDQUxheWVyRXh0cmFzLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJDb3JlRGVjb21w
cmVzc2lvblNlc3Npb24ubW0KIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdMTGF5ZXIubW0K
IHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYkdQVUxheWVyLm1tCitwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9XZWJNVXRpbGl0aWVzQ29jb2EubW0gQG5vLXVuaWZ5CiBwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9WaWRlb1RyYWNrUHJpdmF0ZVdlYk0uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jb3Jl
dGV4dC9Gb250Q2FzY2FkZUNvcmVUZXh0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQv
Rm9udENvcmVUZXh0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGJlNGZjYWZmOWZjOTI1OWI0NmMzNTM5YjZlYTkzYWY0YWRj
N2ZiMjUuLmZmNTJhMDZhMjY3NjNjN2U3Yjg3ODU0ZDcyOTQ0MGVhMjI1YTY0Y2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIx
OCw2ICsyMTgsOCBAQAogCQkwN0VFNzZFQzFCRTk2REIwMDBGODkxMzMgLyogTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3RUU3NkVBMUJFOTZEQjAwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3RUU3
NkVGMUJFQTYxOTgwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdFRTc2RUQxQkVBNjE5
ODAwRjg5MTMzIC8qIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLmggKi87IH07CiAJCTA3RjRF
OTMzMjBCMzU4N0YwMDJFMzgwMyAvKiBBVkFzc2V0TUlNRVR5cGVDYWNoZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdDOEFEMTIxRDA3M0Q2MzAwODdD
NUNFIC8qIEFWQXNzZXRNSU1FVHlwZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMDdGNUNGRjUyNTgyQTUxRDAwNjYyRUY1IC8qIFdlYk1B
dWRpb1V0aWxpdGllc0NvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwN0Y1Q0ZGNDI1ODJBNEY4MDA2NjJFRjUgLyogV2ViTUF1ZGlvVXRpbGl0aWVz
Q29jb2EuaCAqLzsgfTsKKwkJMDdGNUNGRjYyNTgyQTUyOTAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0
aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDdGNUNGRjIyNTgyQTRGODAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29h
Lm1tICovOyB9OwogCQkwN0Y4NzY4NDFBRDU4MEY5MDA5MDU4NDkgLyogTWVkaWFQbGF5YmFja1Rh
cmdldENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3Rjg3NjgzMUFENEE5NDUwMDkwNTg0OSAvKiBNZWRpYVBsYXliYWNrVGFyZ2V0Q29udGV4
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3
Rjk0NDE2MTg2NEQwNDYwMDVEMzFDQiAvKiBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQUU4QzA4MTc0
NkI5NTcwMDUzMkQ3OCAvKiBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwN0ZFOTlERDE4ODA3QTdE
MDAyNTY2NDggLyogTWVkaWFFbGVtZW50U2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdGRTk5REIxODgwN0E3RDAwMjU2NjQ4IC8qIE1lZGlh
RWxlbWVudFNlc3Npb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtNTg3NSw2ICs1ODc3LDggQEAKIAkJMDdFRTc2RUExQkU5NkRCMDAwRjg5MTMz
IC8qIE1vY2tSZWFsdGltZVZpZGVvU291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE1vY2tSZWFsdGltZVZpZGVvU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA3RUU3NkVEMUJFQTYxOTgwMEY4OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJj
ZU1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNb2NrUmVhbHRpbWVWaWRl
b1NvdXJjZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwN0VFNzZFRTFCRUE2
MTk4MDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDdGNUNGRjIyNTgyQTRGODAwNjYyRUY1
IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2Vi
TUF1ZGlvVXRpbGl0aWVzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3
RjVDRkY0MjU4MkE0RjgwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwN0Y4NzY4MzFBRDRBOTQ1MDA5MDU4NDkgLyogTWVkaWFQbGF5YmFja1Rhcmdl
dENvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFQbGF5YmFj
a1RhcmdldENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdGRTk5REEx
ODgwN0E3RDAwMjU2NjQ4IC8qIE1lZGlhRWxlbWVudFNlc3Npb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFFbGVtZW50U2Vzc2lvbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3RkU5OURCMTg4MDdBN0QwMDI1NjY0OCAvKiBNZWRpYUVs
ZW1lbnRTZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRWxl
bWVudFNlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2ODY3LDYgKzI2
ODcxLDggQEAKIAkJCQk0OUZGQkYzRTExQzkzRUUzMDA2QTcxMTggLyogV2ViR0xMYXllci5tbSAq
LywKIAkJCQkzMTg0MzZEQjIxQjlEQUEwMDBFRDM4M0UgLyogV2ViR1BVTGF5ZXIuaCAqLywKIAkJ
CQkzMTg0MzZERDIxQjlEQUEwMDBFRDM4M0UgLyogV2ViR1BVTGF5ZXIubW0gKi8sCisJCQkJMDdG
NUNGRjQyNTgyQTRGODAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29hLmggKi8sCisJ
CQkJMDdGNUNGRjIyNTgyQTRGODAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1t
ICovLAogCQkJKTsKIAkJCXBhdGggPSBjb2NvYTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CkBAIC0zNTI1Niw2ICszNTI2Miw3IEBACiAJCQkJNDk0QkQ3OTUwRjU1QzhFRTAwNzQ3ODI4IC8q
IFdlYktpdFBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMUMwRkYyNTBFNENFQjZFMDA3RDZG
RTUgLyogV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNGMzMy
RjBGMkI5QTI1MDA0QjY3OTUgLyogV2ViTGF5ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3RjVD
RkY1MjU4MkE1MUQwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMDcwOUQ3OEYxQUU1NTU1NDAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1h
bmFnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3MDlENzk1MUFFNTVBMjkwMDRFNDJGOCAvKiBX
ZWJNZWRpYVNlc3Npb25NYW5hZ2VyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzA5RDc5
MzFBRTU1NTdFMDA0RTQyRjggLyogV2ViTWVkaWFTZXNzaW9uTWFuYWdlck1hYy5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zNjYxMCw2ICszNjYxNyw3IEBACiAJCQkJMkQwNjIxNEQxREE2M0E4QjAwQTdG
QjI2IC8qIFdlYktpdE1lZGlhS2V5cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDA2MjE0RjFE
QTYzQTkxMDBBN0ZCMjYgLyogV2ViS2l0TWVkaWFLZXlTZXNzaW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTdDNDhBNkQwMTkxQzlENjUwMDAyNjY3NCAvKiBXZWJLaXROYW1lc3BhY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMDdGNUNGRjYyNTgyQTUyOTAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0
aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMDcwOUQ3OTIxQUU1NTU3RTAwNEU0
MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MUNBRjM0ODIwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCUNFQ0RDOTNDMjFGMjk3MjkwMDk3NkJEMSAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5D
b250cm9sbGVyQVZLaXQubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL01lZGlhVXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL01lZGlhVXRpbGl0aWVzLmNwcAppbmRleCBiNDhiNGY1NjMzMmQwNTlkOWZi
MTc3NTU0MzBhMWY4ZTA1NjJjY2M1Li5hNTMzMzJjZjdkYmQ2NDY2ZjQ0ZjU3NmQxY2Q3YWRlNzYx
NTBhYTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NZWRpYVV0
aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTWVkaWFVdGls
aXRpZXMuY3BwCkBAIC0zNSwxMSArMzUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgUEFMOwogCi1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3Jl
YXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBk
ZXNjcmlwdGlvbikKK1JldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVBdWRp
b0Zvcm1hdERlc2NyaXB0aW9uKGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uLCBzaXplX3QgbWFnaWNDb29raWVTaXplLCBjb25zdCB2b2lkKiBtYWdpY0Nvb2tpZSkKIHsK
ICAgICBhdXRvIGJhc2ljRGVzY3JpcHRpb24gPSBXVEY6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJh
c2ljRGVzY3JpcHRpb24qPihkZXNjcmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3Jp
cHRpb24pOwogICAgIENNRm9ybWF0RGVzY3JpcHRpb25SZWYgZm9ybWF0ID0gbnVsbHB0cjsKLSAg
ICBhdXRvIGVycm9yID0gQ01BdWRpb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIGJhc2ljRGVzY3JpcHRpb24sIDAsIG51bGxwdHIsIDAsIG51bGxwdHIsIG51bGxw
dHIsICZmb3JtYXQpOworICAgIGF1dG8gZXJyb3IgPSBDTUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25D
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYmFzaWNEZXNjcmlwdGlvbiwgMCwgbnVsbHB0ciwg
bWFnaWNDb29raWVTaXplLCBtYWdpY0Nvb2tpZSwgbnVsbHB0ciwgJmZvcm1hdCk7CiAgICAgaWYg
KGVycm9yKSB7CiAgICAgICAgIExPR19FUlJPUigiY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlv
biBmYWlsZWQgd2l0aCAlZCIsIGVycm9yKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9NZWRpYVV0aWxpdGllcy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTWVkaWFVdGlsaXRpZXMuaAppbmRleCA2YjY3
YzY2Nzg1ZDQ3ZDI3MDJiNWM2NDllZjI4NWU0YjBhNWUxMjY2Li45MTcwOGVhMjJhZDRiNWJiYzdl
Zjg5ZDRjYjVkYjM1OTlkOGU2MjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9NZWRpYVV0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL01lZGlhVXRpbGl0aWVzLmgKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjsKIGNsYXNzIFBsYXRmb3JtQXVkaW9EYXRh
OwogCi1SZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9Gb3JtYXRE
ZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJik7CitSZXRhaW5QdHI8Q01G
b3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihjb25zdCBB
dWRpb1N0cmVhbURlc2NyaXB0aW9uJiwgc2l6ZV90IG1hZ2ljQ29va2llU2l6ZSA9IDAsIGNvbnN0
IHZvaWQqIG1hZ2ljQ29va2llID0gbnVsbHB0cik7CiBSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJS
ZWY+IGNyZWF0ZUF1ZGlvU2FtcGxlQnVmZmVyKGNvbnN0IFBsYXRmb3JtQXVkaW9EYXRhJiwgY29u
c3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYsIENNVGltZSwgc2l6ZV90IHNhbXBsZUNvdW50KTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNw
cAppbmRleCBiZTFlMDg2ZTBhYzUyMzU0NjM2YTAwNmFiMzJkMWI5MmY0MGI0ZDgxLi5mYzU3YzM5
YTFiZTVkNWEyYTE2NWM5ODc3ZTQyOGM4MWMwZGZlZmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNLmNwcApAQCAtMzksMTEgKzM5LDEzIEBACiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVy
LmgiCiAjaW5jbHVkZSAiVlA5VXRpbGl0aWVzQ29jb2EuaCIKICNpbmNsdWRlICJWaWRlb1RyYWNr
UHJpdmF0ZVdlYk0uaCIKKyNpbmNsdWRlICJXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0RhdGFWaWV3Lmg+CiAjaW5jbHVkZSA8d2VibS93ZWJtX3Bh
cnNlci5oPgogI2luY2x1ZGUgPHd0Zi9BbGdvcml0aG1zLmg+CiAjaW5jbHVkZSA8d3RmL0xvZ2dl
ckhlbHBlci5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGlzdC5oPgogI2luY2x1ZGUgPHd0
Zi9jZi9UeXBlQ2FzdHNDRi5oPgogI2luY2x1ZGUgPHd0Zi9kYXJ3aW4vV2Vha0xpbmtpbmcuaD4K
QEAgLTIzNiw3ICsyMzgsNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBMb2dBcmd1bWVudDxXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpTdGF0ZT4gewogCiB9IC8vIG5hbWVzcGFjZSBXVEYK
IAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBQQUw7CkBAIC00NTYs
NiArNDU3LDcgQEAgcHJpdmF0ZToKIAogTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OmlzQ29udGVudFR5cGVTdXBwb3J0ZWQoY29uc3QgQ29udGVu
dFR5cGUmIHR5cGUpCiB7CisjaWYgRU5BQkxFKFZQOSkgfHwgRU5BQkxFKFZPUkJJUykgfHwgRU5B
QkxFKE9QVVMpCiAgICAgaWYgKCFpc1dlYm1QYXJzZXJBdmFpbGFibGUoKSkKICAgICAgICAgcmV0
dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CiAKQEAg
LTQ2NywxMCArNDY5LDE0IEBAIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjppc0NvbnRlbnRUeXBlU3VwcG9ydGVkKGNvCiAgICAgaWYgKCFjb2Rl
Y3NQYXJhbWV0ZXIpCiAgICAgICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5
cGU6Ok1heUJlU3VwcG9ydGVkOwogCi0jaWYgRU5BQkxFKFZQOSkKICAgICBhdXRvIHNwbGl0UmVz
dWx0cyA9IFN0cmluZ1ZpZXcoY29kZWNzUGFyYW1ldGVyKS5zcGxpdCgnLCcpOwogICAgIGZvciAo
YXV0byBzcGxpdCA6IHNwbGl0UmVzdWx0cykgeworI2lmIEVOQUJMRShWUDkpCiAgICAgICAgIGlm
IChzcGxpdC5zdGFydHNXaXRoKCJ2cDA5IikpIHsKKworICAgICAgICAgICAgaWYgKCFpc1ZQOURl
Y29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVt
czo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKwogICAgICAgICAgICAgYXV0byBjb2Rl
Y1BhcmFtZXRlcnMgPSBwYXJzZVZQQ29kZWNQYXJhbWV0ZXJzKHNwbGl0KTsKICAgICAgICAgICAg
IGlmICghY29kZWNQYXJhbWV0ZXJzKQogICAgICAgICAgICAgICAgIHJldHVybiBNZWRpYVBsYXll
ckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwpAQCAtNDgwLDE0ICs0ODYsNDAg
QEAgTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06
OmlzQ29udGVudFR5cGVTdXBwb3J0ZWQoY28KIAogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KLSAgICAgICAgLy8gRklYTUU6IEFkZCBPcHVzIFN1cHBvcnQKLSAgICAgICAgLy8gRklY
TUU6IEFkZCBWb3JiaXMgU3VwcG9ydAorI2VuZGlmIC8vIEVOQUJMRShWUDkpCisKKyNpZiBFTkFC
TEUoVk9SQklTKQorICAgICAgICBpZiAoc3BsaXQgPT0gInZvcmJpcyIpIHsKKyAgICAgICAgICAg
IGlmICghaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKFZPUkJJUykKKwor
I2lmIEVOQUJMRShPUFVTKQorICAgICAgICBpZiAoc3BsaXQgPT0gIm9wdXMiKSB7CisgICAgICAg
ICAgICBpZiAoIWlzT3B1c0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKKworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoT1BVUykKKwog
ICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBv
cnRlZDsKICAgICB9Ci0gICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6
SXNTdXBwb3J0ZWQ7CiAjZWxzZQotICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0
c1R5cGU6OklzTm90U3VwcG9ydGVkOwotI2VuZGlmCisgICAgVU5VU0VEX1BBUkFNKHR5cGUpCisj
ZW5kaWYgLy8gRU5BQkxFKFZQOSkgfHwgRU5BQkxFKFZPUkJJUykgfHwgRU5BQkxFKE9QVVMpCisK
KyAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpJc1N1cHBvcnRlZDsK
K30KKworUmVmUHRyPFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0+IFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OmNyZWF0ZShjb25zdCBDb250ZW50VHlwZSYgdHlwZSkKK3sKKyAgICBpZiAoaXNDb250ZW50
VHlwZVN1cHBvcnRlZCh0eXBlKSAhPSBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6Oklz
Tm90U3VwcG9ydGVkKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk0oKSk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKQpAQCAtNTcxLDYgKzYwMyw3IEBAIGJvb2wg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2hvdWxkUHJvdmlkZU1lZGlhZGF0YUZvclRyYWNrSUQo
dWludDY0X3QpCiB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnJlc2V0UGFyc2VyU3RhdGUo
KQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOworICAgIGZsdXNo
UGVuZGluZ0F1ZGlvQnVmZmVycygpOwogICAgIG1fcGFyc2VyLT5EaWRTZWVrKCk7CiAgICAgbV9z
dGF0ZSA9IFN0YXRlOjpOb25lOwogICAgIG1fdHJhY2tzLmNsZWFyKCk7CkBAIC02MDQsNyArNjM3
LDcgQEAgdm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRMb2dnZXIoY29uc3QgTG9nZ2Vy
JiBsb2dnZXIsIGNvbnN0IHZvaWQqIGxvZ0lkZW4KIGF1dG8gU291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6dHJhY2tEYXRhRm9yVHJhY2tOdW1iZXIodWludDY0X3QgdHJhY2tOdW1iZXIpIC0+IFRyYWNr
RGF0YSoKIHsKICAgICBmb3IgKGF1dG8mIHRyYWNrIDogbV90cmFja3MpIHsKLSAgICAgICAgaWYg
KHRyYWNrLnRyYWNrLnRyYWNrX251bWJlci5pc19wcmVzZW50KCkgJiYgdHJhY2sudHJhY2sudHJh
Y2tfbnVtYmVyLnZhbHVlKCkgPT0gdHJhY2tOdW1iZXIpCisgICAgICAgIGlmICh0cmFjay0+dHJh
Y2soKS50cmFja19udW1iZXIuaXNfcHJlc2VudCgpICYmIHRyYWNrLT50cmFjaygpLnRyYWNrX251
bWJlci52YWx1ZSgpID09IHRyYWNrTnVtYmVyKQogICAgICAgICAgICAgcmV0dXJuICZ0cmFjazsK
ICAgICB9CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC03NDgsNyArNzgxLDcgQEAgU3RhdHVzIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uQ2x1c3RlckJlZ2luKGNvbnN0IEVsZW1lbnRNZXRhZGF0
YSYgbWV0YWRhdGEsIGMKIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblRyYWNrRW50
cnkoY29uc3QgRWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uc3QgVHJhY2tFbnRyeSYgdHJh
Y2tFbnRyeSkKIHsKICAgICBVTlVTRURfUEFSQU0obWV0YWRhdGEpOwotICAgIGlmICghdHJhY2tF
bnRyeS50cmFja190eXBlLmlzX3ByZXNlbnQoKSkKKyAgICBpZiAoIXRyYWNrRW50cnkudHJhY2tf
dHlwZS5pc19wcmVzZW50KCkgfHwgIXRyYWNrRW50cnkuY29kZWNfaWQuaXNfcHJlc2VudCgpKQog
ICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKIAogICAgIGF1dG8g
dHJhY2tUeXBlID0gdHJhY2tFbnRyeS50cmFja190eXBlLnZhbHVlKCk7CkBAIC03NTYsOCArNzg5
LDMwIEBAIFN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPblRyYWNrRW50cnkoY29uc3Qg
RWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0YSwgY29uCiAgICAgICAgIG1faW5pdGlhbGl6YXRpb25T
ZWdtZW50LT52aWRlb1RyYWNrcy5hcHBlbmQoeyBNZWRpYURlc2NyaXB0aW9uV2ViTTo6Y3JlYXRl
KFRyYWNrRW50cnkodHJhY2tFbnRyeSkpLCBWaWRlb1RyYWNrUHJpdmF0ZVdlYk06OmNyZWF0ZShU
cmFja0VudHJ5KHRyYWNrRW50cnkpKSB9KTsKICAgICBlbHNlIGlmICh0cmFja1R5cGUgPT0gVHJh
Y2tUeXBlOjprQXVkaW8pCiAgICAgICAgIG1faW5pdGlhbGl6YXRpb25TZWdtZW50LT5hdWRpb1Ry
YWNrcy5hcHBlbmQoeyBNZWRpYURlc2NyaXB0aW9uV2ViTTo6Y3JlYXRlKFRyYWNrRW50cnkodHJh
Y2tFbnRyeSkpLCBBdWRpb1RyYWNrUHJpdmF0ZVdlYk06OmNyZWF0ZShUcmFja0VudHJ5KHRyYWNr
RW50cnkpKSB9KTsKLSAgICBtX3RyYWNrcy5hcHBlbmQoeyBUcmFja0VudHJ5KHRyYWNrRW50cnkp
LCB7IH0sIG51bGxwdHIsIG51bGxwdHIsIDAgfSk7CiAKKyAgICBTdHJpbmdWaWV3IGNvZGVjU3Ry
aW5nIHsgdHJhY2tFbnRyeS5jb2RlY19pZC52YWx1ZSgpLmRhdGEoKSwgKHVuc2lnbmVkKXRyYWNr
RW50cnkuY29kZWNfaWQudmFsdWUoKS5sZW5ndGgoKSB9OworI2lmIEVOQUJMRShWUDkpCisgICAg
aWYgKGNvZGVjU3RyaW5nID09ICJWX1ZQOSIgJiYgaXNWUDlEZWNvZGVyQXZhaWxhYmxlKCkpIHsK
KyAgICAgICAgbV90cmFja3MuYXBwZW5kKFZpZGVvVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBl
OjpWUDksIHRyYWNrRW50cnksICp0aGlzKSk7CisgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVz
OjprT2tDb21wbGV0ZWQpOworICAgIH0KKyNlbmRpZgorCisjaWYgRU5BQkxFKFZPUkJJUykKKyAg
ICBpZiAoY29kZWNTdHJpbmcgPT0gIkFfVk9SQklTIiAmJiBpc1ZvcmJpc0RlY29kZXJBdmFpbGFi
bGUoKSkgeworICAgICAgICBtX3RyYWNrcy5hcHBlbmQoQXVkaW9UcmFja0RhdGE6OmNyZWF0ZShD
b2RlY1R5cGU6OlZvcmJpcywgdHJhY2tFbnRyeSwgKnRoaXMsIG1fbWluaW11bUF1ZGlvU2FtcGxl
RHVyYXRpb24pKTsKKyAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7
CisgICAgfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoT1BVUykKKyAgICBpZiAoY29kZWNTdHJpbmcg
PT0gIkFfT1BVUyIgJiYgaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpKSB7CisgICAgICAgIG1fdHJh
Y2tzLmFwcGVuZChBdWRpb1RyYWNrRGF0YTo6Y3JlYXRlKENvZGVjVHlwZTo6T3B1cywgdHJhY2tF
bnRyeSwgKnRoaXMsIG1fbWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24pKTsKKyAgICAgICAgcmV0
dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CisgICAgfQorI2VuZGlmCisKKyAgICBt
X3RyYWNrcy5hcHBlbmQoVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpVbnN1cHBvcnRlZCwg
dHJhY2tFbnRyeSwgKnRoaXMpKTsKICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxl
dGVkKTsKIH0KIApAQCAtODI3LDQwNiArODgyLDI4OCBAQCB3ZWJtOjpTdGF0dXMgU291cmNlQnVm
ZmVyUGFyc2VyV2ViTTo6T25CbG9ja0dyb3VwRW5kKGNvbnN0IHdlYm06OkVsZW1lbnRNZXRhZGF0
YQogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCi0jaWYgRU5B
QkxFKFZQOSkKIAotc3RhdGljIHVpbnQ4X3QgY29udmVydFRvQ29sb3JQcmltYXJpZXMoY29uc3Qg
UHJpbWFyaWVzJiBjb2VmZmljaWVudHMpCit3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTTo6T25GcmFtZShjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgUmVhZGVyKiByZWFk
ZXIsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZykKIHsKLSAgICBzd2l0Y2ggKGNvZWZmaWNpZW50
cykgewotICAgIGNhc2UgUHJpbWFyaWVzOjprQnQ3MDk6Ci0gICAgICAgIHJldHVybiBWUENvbmZp
Z3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfNzA5XzY7Ci0gICAgY2FzZSBQcmltYXJpZXM6OmtV
bnNwZWNpZmllZDoKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVz
OjpVbnNwZWNpZmllZDsKLSAgICBjYXNlIFByaW1hcmllczo6a0J0NDcwTToKLSAgICAgICAgcmV0
dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF80NzBfNl9NOwotICAgIGNhc2Ug
UHJpbWFyaWVzOjprQnQ0NzBCZzoKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9y
UHJpbWFyaWVzOjpCVF80NzBfN19CRzsKLSAgICBjYXNlIFByaW1hcmllczo6a1NtcHRlMTcwTToK
LSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF82MDFfNzsK
LSAgICBjYXNlIFByaW1hcmllczo6a1NtcHRlMjQwTToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmln
dXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9TVF8yNDA7Ci0gICAgY2FzZSBQcmltYXJpZXM6
OmtGaWxtOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkZp
bG07Ci0gICAgY2FzZSBQcmltYXJpZXM6OmtCdDIwMjA6Ci0gICAgICAgIHJldHVybiBWUENvbmZp
Z3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U7Ci0g
ICAgY2FzZSBQcmltYXJpZXM6OmtTbXB0ZVN0NDI4MToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmln
dXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9TVF80MjhfMTsKLSAgICBjYXNlIFByaW1hcmll
czo6a1NtcHRlUnA0MzE6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1h
cmllczo6U01QVEVfUlBfNDMxXzI7Ci0gICAgY2FzZSBQcmltYXJpZXM6OmtTbXB0ZUVnNDMyOgot
ICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX0VHXzQz
Ml8xOwotICAgIGNhc2UgUHJpbWFyaWVzOjprSmVkZWNQMjJQaG9zcGhvcnM6Ci0gICAgICAgIHJl
dHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6RUJVX1RlY2hfMzIxM19FOwotICAg
IH0KLX0KKyAgICBBU1NFUlQocmVhZGVyKTsKKyAgICBpZiAoIXJlYWRlcikKKyAgICAgICAgcmV0
dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkpOwogCi1zdGF0aWMgQ0ZTdHJpbmdS
ZWYgY29udmVydFRvQ01Db2xvclByaW1hcmllcyh1aW50OF90IHByaW1hcmllcykKLXsKLSAgICBz
d2l0Y2ggKHByaW1hcmllcykgewotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJp
ZXM6OkJUXzcwOV82OgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmll
c19JVFVfUl83MDlfMjsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpF
QlVfVGVjaF8zMjEzX0U6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFy
aWVzX0VCVV8zMjEzOwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJU
XzYwMV83OgotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NU
XzI0MDoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfU01QVEVf
QzsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9SUF80MzFf
MjoKLSAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJpZXNfRENJ
X1AzOwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX0VHXzQz
Ml8xOgotICAgICAgICByZXR1cm4ga0NNRm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19Q
M19ENjU7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfMjAyMF9O
b25jb25zdGFudF9MdW1pbmFuY2U6Ci0gICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlv
bkNvbG9yUHJpbWFyaWVzX0lUVV9SXzIwMjA7Ci0gICAgfQorICAgIGlmICghbV9jdXJyZW50Qmxv
Y2spCisgICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprSW52YWxpZEVsZW1lbnRJZCk7CiAK
LSAgICByZXR1cm4gbnVsbHB0cjsKLX0KKyAgICBhdXRvKiBibG9jayA9IFdURjo6c3dpdGNoT24o
Km1fY3VycmVudEJsb2NrLCBbXShCbG9jayYgYmxvY2spIHsKKyAgICAgICAgcmV0dXJuICZibG9j
azsKKyAgICB9LCBbXShTaW1wbGVCbG9jayYgYmxvY2spIC0+IEJsb2NrKiB7CisgICAgICAgIHJl
dHVybiAmYmxvY2s7CisgICAgfSk7CisgICAgaWYgKCFibG9jaykKKyAgICAgICAgcmV0dXJuIFN0
YXR1cyhTdGF0dXM6OmtJbnZhbGlkRWxlbWVudElkKTsKIAotc3RhdGljIHVpbnQ4X3QgY29udmVy
dFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MoY29uc3QgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3Mm
IGNoYXJhY3RlcmlzdGljcykKLXsKLSAgICBzd2l0Y2ggKGNoYXJhY3RlcmlzdGljcykgewotICAg
IGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtCdDcwOToKLSAgICAgICAgcmV0dXJuIFZQ
Q29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF83MDlfNjsKLSAgICBjYXNl
IFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprVW5zcGVjaWZpZWQ6Ci0gICAgICAgIHJldHVybiBW
UENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6VW5zcGVjaWZpZWQ7Ci0gICAg
Y2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0dhbW1hMjJjdXJ2ZToKLSAgICAgICAgcmV0
dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF80NzBfNl9NOwot
ICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtHYW1tYTI4Y3VydmU6Ci0gICAgICAg
IHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfNDcwXzdf
Qkc7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a1NtcHRlMTcwTToKLSAgICAg
ICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF82MDFf
NzsKLSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprU21wdGUyNDBNOgotICAgICAg
ICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NU
XzI0MDsKLSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprTGluZWFyOgotICAgICAg
ICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxpbmVhcjsK
LSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprTG9nOgotICAgICAgICByZXR1cm4g
VlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxvZ3JpdGhtaWM7Ci0gICAg
Y2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0xvZ1NxcnQ6Ci0gICAgICAgIHJldHVybiBW
UENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TG9ncml0aG1pY19TcXJ0Owot
ICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtJZWM2MTk2NjI0OgotICAgICAgICBy
ZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OklFQ182MTk2Nl8y
XzQ7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0J0MTM2MUV4dGVuZGVkQ29s
b3VyR2FtdXQ6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6QlRfMTM2MV8wOwotICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtJ
ZWM2MTk2NjIxOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OklFQ182MTk2Nl8yXzE7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6azEwQml0QnQyMDIwOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJD
aGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTBiaXQ7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6azEyQml0QnQyMDIwOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTJiaXQ7Ci0gICAgY2FzZSBUcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6a1NtcHRlU3QyMDg0OgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0
aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzIwODQ7Ci0gICAgY2FzZSBUcmFu
c2ZlckNoYXJhY3RlcmlzdGljczo6a1NtcHRlU3Q0MjgxOgotICAgICAgICByZXR1cm4gVlBDb25m
aWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzQyOF8xOwotICAgIGNh
c2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtBcmliU3RkQjY3SGxnOgotICAgICAgICByZXR1
cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIxMDBfSExHOwor
ICAgIGF1dG8gdHJhY2tOdW1iZXIgPSBibG9jay0+dHJhY2tfbnVtYmVyOworICAgIGF1dG8qIHRy
YWNrRGF0YSA9IHRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHRyYWNrTnVtYmVyKTsKKyAgICBpZiAo
IXRyYWNrRGF0YSkgeworICAgICAgICBFUlJPUl9MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklF
UiwgIklnbm9yaW5nIHVua25vd24gdHJhY2sgbnVtYmVyICIsIHRyYWNrTnVtYmVyKTsKKyAgICAg
ICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtJbnZhbGlkRWxlbWVudElkKTsKICAgICB9Ci19CiAK
LXN0YXRpYyBDRlN0cmluZ1JlZiBjb252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24odWludDhfdCBj
aGFyYWN0ZXJpc3RpY3MpCi17Ci0gICAgc3dpdGNoIChjaGFyYWN0ZXJpc3RpY3MpIHsKLSAgICBj
YXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF83MDlfNjoKLSAg
ICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl83MDlfMjsK
LSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9T
VF8yNDA6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlclRyYW5zZmVyRnVuY3Rpb25fU01Q
VEVfMjQwTV8xOTk1OwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OlNNUFRFX1NUXzIwODQ6Ci0gICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlv
blRyYW5zZmVyRnVuY3Rpb25fU01QVEVfU1RfMjA4NF9QUTsKLSAgICBjYXNlIFZQQ29uZmlndXJh
dGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMDIwXzEwYml0OgotICAgIGNhc2UgVlBD
b25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTJiaXQ6Ci0gICAg
ICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fSVRVX1JfMjAy
MDsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBU
RV9TVF80MjhfMToKLSAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJG
dW5jdGlvbl9TTVBURV9TVF80MjhfMTsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzOjpCVF8yMTAwX0hMRzoKLSAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERl
c2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl8yMTAwX0hMRzsKLSAgICBjYXNlIFZQQ29u
ZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJRUNfNjE5NjZfMl8xOgotICAgICAg
ICByZXR1cm4gUEFMOjpjYW5Mb2FkX0NvcmVNZWRpYV9rQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5z
ZmVyRnVuY3Rpb25fc1JHQigpID8gZ2V0X0NvcmVNZWRpYV9rQ01Gb3JtYXREZXNjcmlwdGlvblRy
YW5zZmVyRnVuY3Rpb25fc1JHQigpIDogbnVsbHB0cjsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlv
blRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMaW5lYXI6Ci0gICAgICAgIHJldHVybiBrQ01Gb3Jt
YXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fTGluZWFyOworICAgIHN3aXRjaCAodHJhY2tE
YXRhLT5jb2RlYygpKSB7CisgICAgY2FzZSBDb2RlY1R5cGU6OlZQOToKKyAgICBjYXNlIENvZGVj
VHlwZTo6Vm9yYmlzOgorICAgIGNhc2UgQ29kZWNUeXBlOjpPcHVzOgorICAgICAgICBicmVhazsK
KworICAgIGNhc2UgQ29kZWNUeXBlOjpVbnN1cHBvcnRlZDoKKyAgICAgICAgcmV0dXJuIFNraXAo
cmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgcmV0dXJuIHRyYWNrRGF0YS0+Y29uc3VtZUZyYW1lRGF0YSgqcmVhZGVyLCBtZXRhZGF0YSwg
Ynl0ZXNSZW1haW5pbmcsIENNVGltZU1ha2UoYmxvY2stPnRpbWVjb2RlICsgbV9jdXJyZW50VGlt
ZWNvZGUsIG1fdGltZXNjYWxlKSwgYmxvY2stPm51bV9mcmFtZXMpOwogfQogCi1zdGF0aWMgdWlu
dDhfdCBjb252ZXJ0VG9NYXRyaXhDb2VmZmljaWVudHMoY29uc3QgTWF0cml4Q29lZmZpY2llbnRz
JiBjb2VmZmljaWVudHMpCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnByb3ZpZGVNZWRp
YURhdGEoUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBzYW1wbGVCdWZmZXIsIHVpbnQ2NF90
IHRyYWNrSUQpCiB7Ci0gICAgc3dpdGNoIChjb2VmZmljaWVudHMpIHsKLSAgICBjYXNlIE1hdHJp
eENvZWZmaWNpZW50czo6a1JnYjoKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJp
eENvZWZmaWNpZW50czo6SWRlbnRpdHk7Ci0gICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtC
dDcwOToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6
QlRfNzA5XzY7Ci0gICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtVbnNwZWNpZmllZDoKLSAg
ICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6VW5zcGVjaWZp
ZWQ7Ci0gICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtGY2M6Ci0gICAgICAgIHJldHVybiBW
UENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkZDQzsKLSAgICBjYXNlIE1hdHJpeENv
ZWZmaWNpZW50czo6a0J0NDcwQmc6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRy
aXhDb2VmZmljaWVudHM6OkJUXzQ3MF83X0JHOwotICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRz
OjprU21wdGUxNzBNOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZp
Y2llbnRzOjpCVF82MDFfNzsKLSAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a1NtcHRlMjQw
TToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6U01Q
VEVfU1RfMjQwOwotICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprWUNnQ286Ci0gICAgICAg
IHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OllDZ0NvOwotICAgIGNh
c2UgTWF0cml4Q29lZmZpY2llbnRzOjprQnQyMDIwTm9uY29uc3RhbnRMdW1pbmFuY2U6Ci0gICAg
ICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzIwMjBfTm9u
Y29uc3RhbnRfTHVtaW5hbmNlOwotICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprQnQyMDIw
Q29uc3RhbnRMdW1pbmFuY2U6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhD
b2VmZmljaWVudHM6OkJUXzIwMjBfQ29uc3RhbnRfTHVtaW5hbmNlOwotICAgIH0KKyAgICBjYWxs
T25NYWluVGhyZWFkKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHNhbXBs
ZUJ1ZmZlciA9IFdURk1vdmUoc2FtcGxlQnVmZmVyKSwgdHJhY2tJRF0gKCkgbXV0YWJsZSB7Cisg
ICAgICAgIGlmICghbV9kaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2spCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgYXV0byBtZWRpYVNhbXBsZSA9IE1lZGlhU2FtcGxlQVZGT2JqQzo6
Y3JlYXRlKHNhbXBsZUJ1ZmZlci5nZXQoKSwgdHJhY2tJRCk7CisgICAgICAgIG1fZGlkUHJvdmlk
ZU1lZGlhRGF0YUNhbGxiYWNrKFdURk1vdmUobWVkaWFTYW1wbGUpLCB0cmFja0lELCBlbXB0eVN0
cmluZygpKTsKKyAgICB9KTsKIH0KIAotc3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNWUNi
Q1JNYXRyaXgodWludDhfdCBjb2VmZmljaWVudHMpCisjZGVmaW5lIFBBUlNFUl9MT0dfRVJST1Jf
SUZfUE9TU0lCTEUoLi4uKSBpZiAocGFyc2VyKCkubG9nZ2VyUHRyKCkpIHBhcnNlcigpLmxvZ2dl
clB0cigpLT5lcnJvcihsb2dDaGFubmVsKCksIFdURjo6TG9nZ2VyOjpMb2dTaXRlSWRlbnRpZmll
cihsb2dDbGFzc05hbWUoKSwgX19mdW5jX18sIHBhcnNlcigpLmxvZ0lkZW50aWZpZXIoKSksIF9f
VkFfQVJHU19fKQorCit3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9U
cmFja0RhdGE6OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkZXIsIGNvbnN0IEZy
YW1lTWV0YWRhdGEmIG1ldGFkYXRhLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcsIGNvbnN0IENN
VGltZSYgcHJlc2VudGF0aW9uVGltZSwgaW50IHNhbXBsZUNvdW50KQogewotICAgIHN3aXRjaCAo
Y29lZmZpY2llbnRzKSB7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVu
dHM6OkJUXzIwMjBfTm9uY29uc3RhbnRfTHVtaW5hbmNlOgotICAgICAgICByZXR1cm4ga0NNRm9y
bWF0RGVzY3JpcHRpb25ZQ2JDck1hdHJpeF9JVFVfUl8yMDIwOwotICAgIGNhc2UgVlBDb25maWd1
cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF80NzBfN19CRzoKLSAgICBjYXNlIFZQQ29uZmln
dXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfNjAxXzc6Ci0gICAgICAgIHJldHVybiBrQ1ZJ
bWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzYwMV80OwotICAgIGNhc2UgVlBDb25maWd1cmF0
aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF83MDlfNjoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdl
QnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNzA5XzI7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25N
YXRyaXhDb2VmZmljaWVudHM6OlNNUFRFX1NUXzI0MDoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdl
QnVmZmVyWUNiQ3JNYXRyaXhfU01QVEVfMjQwTV8xOTk1OwotICAgIH0KKyNpZiBFTkFCTEUoVlA5
KQorICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3QmxvY2tCdWZmZXIgPSBudWxscHRyOwogCi0gICAg
cmV0dXJuIG51bGxwdHI7Ci19CisgICAgaWYgKCFtX2N1cnJlbnRCbG9ja0J1ZmZlcikgeworICAg
ICAgICBhdXRvIGVyciA9IENNQmxvY2tCdWZmZXJDcmVhdGVXaXRoTWVtb3J5QmxvY2soa0NGQWxs
b2NhdG9yRGVmYXVsdCwgbnVsbHB0ciwgbWV0YWRhdGEuc2l6ZSwga0NGQWxsb2NhdG9yRGVmYXVs
dCwgbnVsbHB0ciwgMCwgbWV0YWRhdGEuc2l6ZSwgMCwgJnJhd0Jsb2NrQnVmZmVyKTsKKyAgICAg
ICAgaWYgKGVycikgeworICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgi
Q01CbG9ja0J1ZmZlckNyZWF0ZVdpdGhNZW1vcnlCbG9jayBmYWlsZWQgd2l0aCBlcnJvciIsIGVy
cik7CisgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Cisg
ICAgICAgIH0KIAotc3RhdGljIHVpbnQ4X3QgY29udmVydFN1YnNhbXBsaW5nWFlUb0Nocm9tYVN1
YnNhbXBsaW5nKHVpbnQ2NF90IHgsIHVpbnQ2NF90IHkpCi17Ci0gICAgaWYgKHggJiB5KQotICAg
ICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ2hyb21hU3Vic2FtcGxpbmc6OlN1YnNhbXBsaW5n
XzQyMF9Db2xvY2F0ZWQ7Ci0gICAgaWYgKHggJiAheSkKLSAgICAgICAgcmV0dXJuIFZQQ29uZmln
dXJhdGlvbkNocm9tYVN1YnNhbXBsaW5nOjpTdWJzYW1wbGluZ180MjI7Ci0gICAgaWYgKCF4ICYg
IXkpCi0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25DaHJvbWFTdWJzYW1wbGluZzo6U3Vi
c2FtcGxpbmdfNDQ0OwotICAgIC8vIFRoaXMgaW5kaWNhdGVzIDQ6NDowIHN1YnNhbXBsaW5nLCB3
aGljaCBpcyBub3QgZXhwcmVzc2FibGUgaW4gdGhlICd2cGNDJyBib3guIERlZmF1bHQgdG8gNDoy
OjAuCi0gICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNocm9tYVN1YnNhbXBsaW5nOjpTdWJzYW1w
bGluZ180MjBfQ29sb2NhdGVkOwotfQorICAgICAgICBtX2N1cnJlbnRCbG9ja0J1ZmZlciA9IGFk
b3B0Q0YocmF3QmxvY2tCdWZmZXIpOworICAgICAgICBtX2N1cnJlbnRCbG9ja0J1ZmZlclBvc2l0
aW9uID0gMDsKIAotc3RhdGljIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVh
dGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDlIZWFkZXJQYXJzZXIoY29uc3QgdnA5X3BhcnNlcjo6
VnA5SGVhZGVyUGFyc2VyJiBwYXJzZXIsIGNvbnN0IHdlYm06OkVsZW1lbnQ8Q29sb3VyPiYgY29s
b3IpCi17Ci0gICAgLy8gUmVmOiAiVlAgQ29kZWMgSVNPIE1lZGlhIEZpbGUgRm9ybWF0IEJpbmRp
bmcsIHYxLjAsIDIwMTctMDMtMzEiCi0gICAgLy8gPGh0dHBzOi8vd3d3LndlYm1wcm9qZWN0Lm9y
Zy92cDkvbXA0Lz4KLSAgICAvLwotICAgIC8vIGNsYXNzIFZQQ29kZWNDb25maWd1cmF0aW9uQm94
IGV4dGVuZHMgRnVsbEJveCgndnBjQycsIHZlcnNpb24gPSAxLCAwKQotICAgIC8vIHsKLSAgICAv
LyAgICAgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQoKSB2cGNDb25maWc7Ci0gICAgLy8gfQot
ICAgIC8vCi0gICAgLy8gYWxpZ25lZCAoOCkgY2xhc3MgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNv
cmQgewotICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDgpICAgICBwcm9maWxlOwotICAgIC8vICAg
ICB1bnNpZ25lZCBpbnQgKDgpICAgICBsZXZlbDsKLSAgICAvLyAgICAgdW5zaWduZWQgaW50ICg0
KSAgICAgYml0RGVwdGg7Ci0gICAgLy8gICAgIHVuc2lnbmVkIGludCAoMykgICAgIGNocm9tYVN1
YnNhbXBsaW5nOwotICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDEpICAgICB2aWRlb0Z1bGxSYW5n
ZUZsYWc7Ci0gICAgLy8gICAgIHVuc2lnbmVkIGludCAoOCkgICAgIGNvbG91clByaW1hcmllczsK
LSAgICAvLyAgICAgdW5zaWduZWQgaW50ICg4KSAgICAgdHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M7
Ci0gICAgLy8gICAgIHVuc2lnbmVkIGludCAoOCkgICAgIG1hdHJpeENvZWZmaWNpZW50czsKLSAg
ICAvLyAgICAgdW5zaWduZWQgaW50ICgxNikgICAgY29kZWNJbnRpYWxpemF0aW9uRGF0YVNpemU7
Ci0gICAgLy8gICAgIHVuc2lnbmVkIGludCAoOClbXSAgIGNvZGVjSW50aWFsaXphdGlvbkRhdGE7
Ci0gICAgLy8gfQotICAgIC8vCi0gICAgLy8gY29kZWNJbnRpYWxpemF0aW9uRGF0YVNpemXigItG
b3IgVlA4IGFuZCBWUDkgdGhpcyBmaWVsZCBtdXN0IGJlIDAuCi0gICAgLy8gY29kZWNJbnRpYWxp
emF0aW9uRGF0YeKAi2JpbmFyeSBjb2RlYyBpbml0aWFsaXphdGlvbiBkYXRhLiBOb3QgdXNlZCBm
b3IgVlA4IGFuZCBWUDkuCi0gICAgLy8KLSAgICAvLyBGSVhNRTogQ29udmVydCBleGlzdGluZyBz
dHJ1Y3QgdG8gYW4gSVNPQm94IGFuZCByZXBsYWNlIHRoZSB3cml0aW5nIGNvZGUgYmVsb3cKLSAg
ICAvLyB3aXRoIGEgc3ViY2xhc3Mgb2YgSVNPRnVsbEJveC4KLQotICAgIFZQQ29kZWNDb25maWd1
cmF0aW9uUmVjb3JkIHJlY29yZDsKLQotICAgIHJlY29yZC5wcm9maWxlID0gcGFyc2VyLnByb2Zp
bGUoKTsKLSAgICAvLyBDb3JlTWVkaWEgZG9lcyBuYXQgY2FyZSBhYm91dCB0aGUgVlA5IGNvZGVj
IGxldmVsOyBoYXJkLWNvZGUgdG8gTGV2ZWwgMS4wIGhlcmU6Ci0gICAgcmVjb3JkLmxldmVsID0g
MTA7Ci0gICAgcmVjb3JkLmJpdERlcHRoID0gcGFyc2VyLmJpdF9kZXB0aCgpOwotICAgIHJlY29y
ZC52aWRlb0Z1bGxSYW5nZUZsYWcgPSBwYXJzZXIuY29sb3JfcmFuZ2UoKSA/IFZQQ29uZmlndXJh
dGlvblJhbmdlOjpGdWxsUmFuZ2UgOiBWUENvbmZpZ3VyYXRpb25SYW5nZTo6VmlkZW9SYW5nZTsK
LSAgICByZWNvcmQuY2hyb21hU3Vic2FtcGxpbmcgPSBjb252ZXJ0U3Vic2FtcGxpbmdYWVRvQ2hy
b21hU3Vic2FtcGxpbmcocGFyc2VyLnN1YnNhbXBsaW5nX3goKSwgcGFyc2VyLnN1YnNhbXBsaW5n
X3koKSk7Ci0gICAgcmVjb3JkLmNvbG9yUHJpbWFyaWVzID0gVlBDb25maWd1cmF0aW9uQ29sb3JQ
cmltYXJpZXM6OlVuc3BlY2lmaWVkOwotICAgIHJlY29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGlj
cyA9IFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpVbnNwZWNpZmllZDsK
LSAgICByZWNvcmQubWF0cml4Q29lZmZpY2llbnRzID0gVlBDb25maWd1cmF0aW9uTWF0cml4Q29l
ZmZpY2llbnRzOjpVbnNwZWNpZmllZDsKLQotICAgIC8vIENvbnRhaW5lciBjb2xvciB2YWx1ZXMg
Y2FuIG92ZXJyaWRlIHBlci1zYW1wbGUgb25lczoKLSAgICBpZiAoY29sb3IuaXNfcHJlc2VudCgp
KSB7Ci0gICAgICAgIGF1dG8mIGNvbG9yVmFsdWUgPSBjb2xvci52YWx1ZSgpOwotICAgICAgICBp
ZiAoY29sb3JWYWx1ZS5jaHJvbWFfc3Vic2FtcGxpbmdfeC5pc19wcmVzZW50KCkgJiYgY29sb3JW
YWx1ZS5jaHJvbWFfc3Vic2FtcGxpbmdfeS5pc19wcmVzZW50KCkpCi0gICAgICAgICAgICByZWNv
cmQuY2hyb21hU3Vic2FtcGxpbmcgPSBjb252ZXJ0U3Vic2FtcGxpbmdYWVRvQ2hyb21hU3Vic2Ft
cGxpbmcoY29sb3JWYWx1ZS5jaHJvbWFfc3Vic2FtcGxpbmdfeC52YWx1ZSgpLCBjb2xvclZhbHVl
LmNocm9tYV9zdWJzYW1wbGluZ195LnZhbHVlKCkpOwotICAgICAgICBpZiAoY29sb3JWYWx1ZS5y
YW5nZS5pc19wcmVzZW50KCkgJiYgY29sb3JWYWx1ZS5yYW5nZS52YWx1ZSgpICE9IFJhbmdlOjpr
VW5zcGVjaWZpZWQpCi0gICAgICAgICAgICByZWNvcmQudmlkZW9GdWxsUmFuZ2VGbGFnID0gY29s
b3JWYWx1ZS5yYW5nZS52YWx1ZSgpID09IFJhbmdlOjprRnVsbCA/IFZQQ29uZmlndXJhdGlvblJh
bmdlOjpGdWxsUmFuZ2UgOiBWUENvbmZpZ3VyYXRpb25SYW5nZTo6VmlkZW9SYW5nZTsKLSAgICAg
ICAgaWYgKGNvbG9yVmFsdWUuYml0c19wZXJfY2hhbm5lbC5pc19wcmVzZW50KCkpCi0gICAgICAg
ICAgICByZWNvcmQuYml0RGVwdGggPSBjb2xvclZhbHVlLmJpdHNfcGVyX2NoYW5uZWwudmFsdWUo
KTsKLSAgICAgICAgaWYgKGNvbG9yVmFsdWUudHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzLmlzX3By
ZXNlbnQoKSkKLSAgICAgICAgICAgIHJlY29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGljcyA9IGNv
bnZlcnRUb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKGNvbG9yVmFsdWUudHJhbnNmZXJfY2hhcmFj
dGVyaXN0aWNzLnZhbHVlKCkpOwotICAgICAgICBpZiAoY29sb3JWYWx1ZS5tYXRyaXhfY29lZmZp
Y2llbnRzLmlzX3ByZXNlbnQoKSkKLSAgICAgICAgICAgIHJlY29yZC5tYXRyaXhDb2VmZmljaWVu
dHMgPSBjb252ZXJ0VG9NYXRyaXhDb2VmZmljaWVudHMoY29sb3JWYWx1ZS5tYXRyaXhfY29lZmZp
Y2llbnRzLnZhbHVlKCkpOwotICAgICAgICBpZiAoY29sb3JWYWx1ZS5wcmltYXJpZXMuaXNfcHJl
c2VudCgpKQotICAgICAgICAgICAgcmVjb3JkLmNvbG9yUHJpbWFyaWVzID0gY29udmVydFRvQ29s
b3JQcmltYXJpZXMoY29sb3JWYWx1ZS5wcmltYXJpZXMudmFsdWUoKSk7CisgICAgICAgIGVyciA9
IENNQmxvY2tCdWZmZXJBc3N1cmVCbG9ja01lbW9yeShtX2N1cnJlbnRCbG9ja0J1ZmZlci5nZXQo
KSk7CisgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZf
UE9TU0lCTEUoIkNNQXVkaW9TYW1wbGVCdWZmZXJDcmVhdGVXaXRoUGFja2V0RGVzY3JpcHRpb25z
IGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKKyAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFk
ZXIsIGJ5dGVzUmVtYWluaW5nKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIGNvbnN0ZXhwciBz
aXplX3QgVlBDb2RlY0NvbmZpZ3VyYXRpb25Db250ZW50c1NpemUgPSAxMjsKKyAgICBzaXplX3Qg
Ynl0ZXNUb1JlYWQgPSBtZXRhZGF0YS5zaXplIC0gbV9jdXJyZW50QmxvY2tCdWZmZXJQb3NpdGlv
bjsKKyAgICB3aGlsZSAoYnl0ZXNUb1JlYWQpIHsKKyAgICAgICAgc2l6ZV90IHNlZ21lbnRTaXpl
QXRQb3NpdGlvbiA9IDA7CisgICAgICAgIHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IG51bGxw
dHI7CisgICAgICAgIGF1dG8gZXJyID0gQ01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyKG1fY3Vy
cmVudEJsb2NrQnVmZmVyLmdldCgpLCBtX2N1cnJlbnRCbG9ja0J1ZmZlclBvc2l0aW9uLCAmc2Vn
bWVudFNpemVBdFBvc2l0aW9uLCBudWxscHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRhdGEpOwor
ICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJ
QkxFKCJDTUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIgZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIp
OworICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOworICAg
ICAgICB9CiAKLSAgICB1aW50MzJfdCB2ZXJzaW9uQW5kRmxhZ3MgPSAxIDw8IDI0OwotICAgIHVp
bnQ4X3QgYml0RGVwdGhDaHJvbWFBbmRSYW5nZSA9ICgweEYgJiByZWNvcmQuYml0RGVwdGgpIDw8
IDQgfCAoMHg3ICYgcmVjb3JkLmNocm9tYVN1YnNhbXBsaW5nKSA8PCAxIHwgKDB4MSAmIHJlY29y
ZC52aWRlb0Z1bGxSYW5nZUZsYWcpOwotICAgIHVpbnQxNl90IGNvZGVjSW50aWFsaXphdGlvbkRh
dGFTaXplID0gMDsKKyAgICAgICAgc2l6ZV90IGJ5dGVzVG9SZWFkRnJvbVRoaXNTZWdtZW50ID0g
c3RkOjptaW4oYnl0ZXNUb1JlYWQsIHNlZ21lbnRTaXplQXRQb3NpdGlvbik7CisgICAgICAgIHVp
bnQ2NF90IGJ5dGVzUmVhZDsKIAotICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZpZXc6OmNyZWF0
ZShBcnJheUJ1ZmZlcjo6Y3JlYXRlKFZQQ29kZWNDb25maWd1cmF0aW9uQ29udGVudHNTaXplLCAx
KSwgMCwgVlBDb2RlY0NvbmZpZ3VyYXRpb25Db250ZW50c1NpemUpOwotICAgIHZpZXctPnNldCgw
LCB2ZXJzaW9uQW5kRmxhZ3MsIGZhbHNlKTsKLSAgICB2aWV3LT5zZXQoNCwgcmVjb3JkLnByb2Zp
bGUsIGZhbHNlKTsKLSAgICB2aWV3LT5zZXQoNSwgcmVjb3JkLmxldmVsLCBmYWxzZSk7Ci0gICAg
dmlldy0+c2V0KDYsIGJpdERlcHRoQ2hyb21hQW5kUmFuZ2UsIGZhbHNlKTsKLSAgICB2aWV3LT5z
ZXQoNywgcmVjb3JkLmNvbG9yUHJpbWFyaWVzLCBmYWxzZSk7Ci0gICAgdmlldy0+c2V0KDgsIHJl
Y29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGljcywgZmFsc2UpOwotICAgIHZpZXctPnNldCg5LCBy
ZWNvcmQubWF0cml4Q29lZmZpY2llbnRzLCBmYWxzZSk7Ci0gICAgdmlldy0+c2V0KDEwLCBjb2Rl
Y0ludGlhbGl6YXRpb25EYXRhU2l6ZSwgZmFsc2UpOworICAgICAgICBhdXRvIHN0YXR1cyA9IHJl
YWRlci5SZWFkKGJ5dGVzVG9SZWFkRnJvbVRoaXNTZWdtZW50LCAodWludDhfdCopYmxvY2tCdWZm
ZXJEYXRhLCAmYnl0ZXNSZWFkKTsKKyAgICAgICAgYnl0ZXNUb1JlYWQgLT0gYnl0ZXNSZWFkOwor
ICAgICAgICAqYnl0ZXNSZW1haW5pbmcgLT0gYnl0ZXNSZWFkOworICAgICAgICBtX2N1cnJlbnRC
bG9ja0J1ZmZlclBvc2l0aW9uICs9IGJ5dGVzUmVhZDsKIAotICAgIGF1dG8gZGF0YSA9IGFkb3B0
Q0YoQ0ZEYXRhQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIChjb25zdCBVSW50OCAqKXZpZXct
PmRhdGEoKSwgdmlldy0+Ynl0ZUxlbmd0aCgpKSk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4n
dCB5ZXQgaGFuZGxlIHBhcnNpbmcgYSBGcmFtZSB0aGF0IGRvZXNuJ3QgaGF2ZSBhbGwgaXRzIG1l
bW9yeSBhdmFpbGFibGUuCisgICAgICAgIGlmIChzdGF0dXMuY29kZSA9PSB3ZWJtOjpTdGF0dXM6
OmtPa1BhcnRpYWwgfHwgc3RhdHVzLmNvZGUgPT0gd2VibTo6U3RhdHVzOjprV291bGRCbG9jaykK
KyAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQogCi0gICAgQ0ZUeXBlUmVmIGNvbmZp
Z3VyYXRpb25LZXlzW10gPSB7IENGU1RSKCJ2cGNDIikgfTsKLSAgICBDRlR5cGVSZWYgY29uZmln
dXJhdGlvblZhbHVlc1tdID0geyBkYXRhLmdldCgpIH07Ci0gICAgYXV0byBjb25maWd1cmF0aW9u
RGljdCA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGNv
bmZpZ3VyYXRpb25LZXlzLCBjb25maWd1cmF0aW9uVmFsdWVzLCBXVEZfQVJSQVlfTEVOR1RIKGNv
bmZpZ3VyYXRpb25LZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlw
ZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgIGNyZWF0ZVNhbXBsZUJ1ZmZlcihwcmVz
ZW50YXRpb25UaW1lLCBzYW1wbGVDb3VudCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShtZXRh
ZGF0YSk7CisgICAgVU5VU0VEX1BBUkFNKHByZXNlbnRhdGlvblRpbWUpOworICAgIFVOVVNFRF9Q
QVJBTShzYW1wbGVDb3VudCk7CisjZW5kaWYKIAotICAgIFZlY3RvcjxDRlR5cGVSZWY+IGV4dGVu
c2lvbnNLZXlzIHsga0NNRm9ybWF0RGVzY3JpcHRpb25FeHRlbnNpb25fU2FtcGxlRGVzY3JpcHRp
b25FeHRlbnNpb25BdG9tcyB9OwotICAgIFZlY3RvcjxDRlR5cGVSZWY+IGV4dGVuc2lvbnNWYWx1
ZXMgPSB7IGNvbmZpZ3VyYXRpb25EaWN0LmdldCgpIH07CisgICAgcmV0dXJuIFNraXAoJnJlYWRl
ciwgYnl0ZXNSZW1haW5pbmcpOworfQogCi0gICAgaWYgKHJlY29yZC52aWRlb0Z1bGxSYW5nZUZs
YWcgPT0gVlBDb25maWd1cmF0aW9uUmFuZ2U6OkZ1bGxSYW5nZSkgewotICAgICAgICBleHRlbnNp
b25zS2V5cy5hcHBlbmQoa0NNRm9ybWF0RGVzY3JpcHRpb25FeHRlbnNpb25fRnVsbFJhbmdlVmlk
ZW8pOwotICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChrQ0ZCb29sZWFuVHJ1ZSk7Cit2
b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVC
dWZmZXIoY29uc3QgQ01UaW1lJiBwcmVzZW50YXRpb25UaW1lLCBpbnQgc2FtcGxlQ291bnQpCit7
CisjaWYgRU5BQkxFKFZQOSkKKyAgICB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBudWxscHRy
OworICAgIHNpemVfdCBzZWdtZW50U2l6ZUF0UG9zaXRpb24gPSAwOworICAgIGF1dG8gZXJyID0g
Q01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyKG1fY3VycmVudEJsb2NrQnVmZmVyLmdldCgpLCAw
LCAmc2VnbWVudFNpemVBdFBvc2l0aW9uLCBudWxscHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRh
dGEpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJM
RSgiQ01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdXRvIGNtQ29sb3JQcmltYXJpZXMg
PSBjb252ZXJ0VG9DTUNvbG9yUHJpbWFyaWVzKHJlY29yZC5jb2xvclByaW1hcmllcykpIHsKLSAg
ICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNL
ZXkpOwotICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbUNvbG9yUHJpbWFyaWVzKTsK
KyAgICBpZiAoIW1faGVhZGVyUGFyc2VyLlBhcnNlVW5jb21wcmVzc2VkSGVhZGVyKGJsb2NrQnVm
ZmVyRGF0YSwgc2VnbWVudFNpemVBdFBvc2l0aW9uKSkgeworICAgICAgICBQQVJTRVJfTE9HX0VS
Uk9SX0lGX1BPU1NJQkxFKCJQYXJzZVVuY29tcHJlc3NlZEhlYWRlciBmYWlsZWQiKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChhdXRvIGNtVHJhbnNmZXJGdW5jdGlvbiA9IGNv
bnZlcnRUb0NNVHJhbnNmZXJGdW5jdGlvbihyZWNvcmQudHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3Mp
KSB7Ci0gICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlclRyYW5zZmVy
RnVuY3Rpb25LZXkpOwotICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbVRyYW5zZmVy
RnVuY3Rpb24pOworICAgIC8vIE9ubHkgdXBkYXRlIHRoZSBmb3JtYXQgZGVzY3JpcHRpb24gd2hl
biB0aGUgaGVhZGVyIGluZGljYXRlcyB0aGF0IHRoZSBzYW1wbGUgaXMKKyAgICAvLyBhIGtleS1m
cmFtZSwgb3RoZXJ3aXNlIGNvbG9yIGluZm9ybWF0aW9uIHdpbGwgbm90IGJlIHBhcnNlZC4KKyAg
ICBhdXRvIHRyYWNrID0gdGhpcy0+dHJhY2soKTsKKyAgICBpZiAobV9oZWFkZXJQYXJzZXIua2V5
KCkpIHsKKyAgICAgICAgYXV0byBmb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZUZvcm1hdERlc2Ny
aXB0aW9uRnJvbVZQOUhlYWRlclBhcnNlcihtX2hlYWRlclBhcnNlciwgdHJhY2sudmlkZW8udmFs
dWUoKS5jb2xvdXIpOworICAgICAgICBpZiAoIWZvcm1hdERlc2NyaXB0aW9uKSB7CisgICAgICAg
ICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJmYWlsZWQgdG8gY3JlYXRlIGZvcm1h
dCBkZXNjcmlwdGlvbiBmcm9tIFZQOSBoZWFkZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBzZXRGb3JtYXREZXNjcmlwdGlvbihXVEZNb3ZlKGZvcm1hdERlc2Ny
aXB0aW9uKSk7CiAgICAgfQogCi0gICAgaWYgKGF1dG8gY21NYXRyaXggPSBjb252ZXJ0VG9DTVlD
YkNSTWF0cml4KHJlY29yZC5tYXRyaXhDb2VmZmljaWVudHMpKSB7Ci0gICAgICAgIGV4dGVuc2lv
bnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5KTsKLSAgICAgICAgZXh0
ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21NYXRyaXgpOworICAgIC8vIEZJWE1FOiBBIGJsb2NrIG1p
Z2h0IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSBmcmFtZSwgYnV0IG9ubHkgdGhpcyBmcmFtZSBoYXMg
YmVlbiByZWFkIGludG8gYGN1cnJlbnRCbG9ja0J1ZmZlcmAuCisgICAgLy8gQmVsb3cgd2UgY3Jl
YXRlIHNhbXBsZSBidWZmZXJzIGZvciBlYWNoIGZyYW1lLCBlYWNoIHdpdGggdGhlIGJsb2NrJ3Mg
dGltZWNvZGUgYW5kIGBudW1fZnJhbWVzYCB2YWx1ZS4KKyAgICAvLyBTaG91bGRuJ3Qgd2UgY3Jl
YXRlIGp1c3Qgb25lIHNhbXBsZSBidWZmZXIgb25jZSBhbGwgdGhlIGJsb2NrJ3MgZnJhbWVzIGhh
dmUgYmVlbiByZWFkIGludG8gYGN1cnJlbnRCbG9ja0J1ZmZlcmA/CisKKyAgICB1aW50NjRfdCBk
dXJhdGlvbiA9IDA7CisgICAgaWYgKHRyYWNrLmRlZmF1bHRfZHVyYXRpb24uaXNfcHJlc2VudCgp
KQorICAgICAgICBkdXJhdGlvbiA9IHRyYWNrLmRlZmF1bHRfZHVyYXRpb24udmFsdWUoKSAqIHBy
ZXNlbnRhdGlvblRpbWUudGltZXNjYWxlIC8gMTAwMDAwMDAwMDsKKworICAgIENNU2FtcGxlQnVm
ZmVyUmVmIHJhd1NhbXBsZUJ1ZmZlciA9IG51bGxwdHI7CisgICAgc2l6ZV90IGZyYW1lU2l6ZSA9
IENNQmxvY2tCdWZmZXJHZXREYXRhTGVuZ3RoKG1fY3VycmVudEJsb2NrQnVmZmVyLmdldCgpKTsK
KyAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nID0geyBDTVRpbWVNYWtlKGR1cmF0aW9uLCBw
cmVzZW50YXRpb25UaW1lLnRpbWVzY2FsZSksIHByZXNlbnRhdGlvblRpbWUsIHByZXNlbnRhdGlv
blRpbWUgfTsKKyAgICBlcnIgPSBDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5KGtDRkFsbG9jYXRv
ckRlZmF1bHQsIG1fY3VycmVudEJsb2NrQnVmZmVyLmdldCgpLCBmb3JtYXREZXNjcmlwdGlvbigp
LmdldCgpLCBzYW1wbGVDb3VudCwgMSwgJnRpbWluZywgMSwgJmZyYW1lU2l6ZSwgJnJhd1NhbXBs
ZUJ1ZmZlcik7CisgICAgaWYgKGVycikgeworICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BP
U1NJQkxFKCJDTVNhbXBsZUJ1ZmZlckNyZWF0ZVJlYWR5IGZhaWxlZCB3aXRoIGVycm9yIiwgZXJy
KTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGFkb3B0
Q0YocmF3U2FtcGxlQnVmZmVyKTsKIAotICAgIGF1dG8gZXh0ZW5zaW9ucyA9IGFkb3B0Q0YoQ0ZE
aWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGV4dGVuc2lvbnNLZXlzLmRhdGEo
KSwgZXh0ZW5zaW9uc1ZhbHVlcy5kYXRhKCksIGV4dGVuc2lvbnNLZXlzLnNpemUoKSwgJmtDRlR5
cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNr
cykpOworICAgIG1fY3VycmVudEJsb2NrQnVmZmVyID0gbnVsbHB0cjsKKyAgICBtX2N1cnJlbnRC
bG9ja0J1ZmZlclBvc2l0aW9uID0gMDsKIAotICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJl
ZiBmb3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7Ci0gICAgaWYgKG5vRXJyICE9IENNVmlkZW9G
b3JtYXREZXNjcmlwdGlvbkNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ01WaWRlb0NvZGVj
VHlwZV9WUDksIHBhcnNlci53aWR0aCgpLCBwYXJzZXIuaGVpZ2h0KCksIGV4dGVuc2lvbnMuZ2V0
KCksICZmb3JtYXREZXNjcmlwdGlvbikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJl
dHVybiBhZG9wdENGKGZvcm1hdERlc2NyaXB0aW9uKTsKKyAgICBpZiAoIW1faGVhZGVyUGFyc2Vy
LmtleSgpKSB7CisgICAgICAgIGF1dG8gYXR0YWNobWVudHNBcnJheSA9IENNU2FtcGxlQnVmZmVy
R2V0U2FtcGxlQXR0YWNobWVudHNBcnJheShzYW1wbGVCdWZmZXIuZ2V0KCksIHRydWUpOworICAg
ICAgICBBU1NFUlQoYXR0YWNobWVudHNBcnJheSk7CisgICAgICAgIGlmICghYXR0YWNobWVudHNB
cnJheSkgeworICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01TYW1w
bGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5IHJldHVybmVkIE5VTEwiKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMCwg
Y291bnQgPSBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSk7IGkgPCBjb3VudDsgKytp
KSB7CisgICAgICAgICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gY2hl
Y2tlZF9jZl9jYXN0PENGTXV0YWJsZURpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5k
ZXgoYXR0YWNobWVudHNBcnJheSwgaSkpOworICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFs
dWUoYXR0YWNobWVudHMsIGtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfTm90U3luYywga0NGQm9vbGVh
blRydWUpOworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byB0cmFja0lEID0gdHJhY2sudHJh
Y2tfdWlkLnZhbHVlKCk7CisgICAgcGFyc2VyKCkucHJvdmlkZU1lZGlhRGF0YShzYW1wbGVCdWZm
ZXIubGVha1JlZigpLCB0cmFja0lEKTsKKyNlbmRpZiAvLyBFTkFCTEUoVlA5KQogfQotI2VuZGlm
CiAKLXdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkZyYW1lKGNvbnN0IEZy
YW1lTWV0YWRhdGEmIG1ldGFkYXRhLCBSZWFkZXIqIHJlYWRlciwgdWludDY0X3QqIGJ5dGVzUmVt
YWluaW5nKQord2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tE
YXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLCBjb25zdCBGcmFtZU1l
dGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nLCBjb25zdCBDTVRpbWUm
IHByZXNlbnRhdGlvblRpbWUsIGludCBzYW1wbGVDb3VudCkKIHsKLSAgICBVTlVTRURfUEFSQU0o
bWV0YWRhdGEpOwotICAgIFVOVVNFRF9QQVJBTShieXRlc1JlbWFpbmluZyk7CisgICAgQVNTRVJU
X1VOVVNFRChzYW1wbGVDb3VudCwgc2FtcGxlQ291bnQgPT0gMSk7CiAKLSAgICBBU1NFUlQocmVh
ZGVyKTsKLSAgICBpZiAoIXJlYWRlcikKLSAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtO
b3RFbm91Z2hNZW1vcnkpOworICAgIGlmICghZm9ybWF0RGVzY3JpcHRpb24oKSkgeworICAgICAg
ICBpZiAoIXRyYWNrKCkuY29kZWNfcHJpdmF0ZS5pc19wcmVzZW50KCkpIHsKKyAgICAgICAgICAg
IFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkF1ZGlvIHRyYWNrIG1pc3NpbmcgbWFnaWMg
Y29va2llIik7CisgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmlu
Zyk7CisgICAgICAgIH0KIAotICAgIGlmICghbV9jdXJyZW50QmxvY2spCi0gICAgICAgIHJldHVy
biBTdGF0dXMoU3RhdHVzOjprSW52YWxpZEVsZW1lbnRJZCk7CisgICAgICAgIFJldGFpblB0cjxD
TUZvcm1hdERlc2NyaXB0aW9uUmVmPiBmb3JtYXREZXNjcmlwdGlvbjsKKyAgICAgICAgYXV0byYg
cHJpdmF0ZURhdGEgPSB0cmFjaygpLmNvZGVjX3ByaXZhdGUudmFsdWUoKTsKKyAgICAgICAgaWYg
KGNvZGVjKCkgPT0gQ29kZWNUeXBlOjpWb3JiaXMpCisgICAgICAgICAgICBmb3JtYXREZXNjcmlw
dGlvbiA9IGNyZWF0ZVZvcmJpc0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24ocHJpdmF0ZURhdGEuc2l6
ZSgpLCBwcml2YXRlRGF0YS5kYXRhKCkpOworICAgICAgICBlbHNlIGlmIChjb2RlYygpID09IENv
ZGVjVHlwZTo6T3B1cykKKyAgICAgICAgICAgIGZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlT3B1
c0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24ocHJpdmF0ZURhdGEuc2l6ZSgpLCBwcml2YXRlRGF0YS5k
YXRhKCkpOwogCi0gICAgYXV0byogYmxvY2sgPSBXVEY6OnN3aXRjaE9uKCptX2N1cnJlbnRCbG9j
aywgW10oQmxvY2smIGJsb2NrKSB7Ci0gICAgICAgIHJldHVybiAmYmxvY2s7Ci0gICAgfSwgW10o
U2ltcGxlQmxvY2smIGJsb2NrKSAtPiBCbG9jayogewotICAgICAgICByZXR1cm4gJmJsb2NrOwot
ICAgIH0pOwotICAgIGlmICghYmxvY2spCi0gICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjpr
SW52YWxpZEVsZW1lbnRJZCk7CisgICAgICAgIGlmICghZm9ybWF0RGVzY3JpcHRpb24pIHsKKyAg
ICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkZhaWxlZCB0byBjcmVhdGUg
Zm9ybWF0IGRlc2NyaXB0aW9uIGZyb20gYXVkaW8gdHJhY2sgaGVhZGVyIik7CisgICAgICAgICAg
ICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CisgICAgICAgIH0KIAotICAg
IGF1dG8gdHJhY2tOdW1iZXIgPSBibG9jay0+dHJhY2tfbnVtYmVyOworICAgICAgICBhdXRvIHN0
cmVhbURlc2NyaXB0aW9uID0gQ01BdWRpb0Zvcm1hdERlc2NyaXB0aW9uR2V0U3RyZWFtQmFzaWNE
ZXNjcmlwdGlvbihmb3JtYXREZXNjcmlwdGlvbi5nZXQoKSk7CisgICAgICAgIGlmICghc3RyZWFt
RGVzY3JpcHRpb24pIHsKKyAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUo
IkNNQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkdldFN0cmVhbUJhc2ljRGVzY3JpcHRpb24gZmFpbGVk
Iik7CisgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Cisg
ICAgICAgIH0KKyAgICAgICAgbV9wYWNrZXREdXJhdGlvbiA9IENNVGltZU1ha2Uoc3RyZWFtRGVz
Y3JpcHRpb24tPm1GcmFtZXNQZXJQYWNrZXQsIHN0cmVhbURlc2NyaXB0aW9uLT5tU2FtcGxlUmF0
ZSk7CiAKLSAgICBhdXRvKiB0cmFja0RhdGEgPSB0cmFja0RhdGFGb3JUcmFja051bWJlcih0cmFj
a051bWJlcik7Ci0gICAgaWYgKCF0cmFja0RhdGEpCi0gICAgICAgIHJldHVybiBTdGF0dXMoU3Rh
dHVzOjprSW52YWxpZEVsZW1lbnRJZCk7Ci0gICAgYXV0byYgdHJhY2sgPSB0cmFja0RhdGEtPnRy
YWNrOworICAgICAgICBzZXRGb3JtYXREZXNjcmlwdGlvbihXVEZNb3ZlKGZvcm1hdERlc2NyaXB0
aW9uKSk7CisgICAgfQogCi0gICAgdWludDY0X3QgZHVyYXRpb24gPSAwOwotICAgIGlmICh0cmFj
ay5kZWZhdWx0X2R1cmF0aW9uLmlzX3ByZXNlbnQoKSkKLSAgICAgICAgZHVyYXRpb24gPSB0cmFj
ay5kZWZhdWx0X2R1cmF0aW9uLnZhbHVlKCkgKiBtX3RpbWVzY2FsZSAvIDEwMDAwMDAwMDA7Cisg
ICAgaWYgKG1fcGFja2V0RGF0YS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9wYWNrZXREYXRhLnJl
c2l6ZShtZXRhZGF0YS5zaXplKTsKKyAgICAgICAgbV9wYWNrZXRCeXRlc1JlYWQgPSAwOworICAg
ICAgICBtX2J5dGVPZmZzZXQgPSBtZXRhZGF0YS5wb3NpdGlvbjsKKyAgICAgICAgbV9zYW1wbGVQ
cmVzZW50YXRpb25UaW1lID0gcHJlc2VudGF0aW9uVGltZTsKKyAgICB9CiAKLSNpZiBFTkFCTEUo
VlA5KQotICAgIGlmICh0cmFjay5jb2RlY19pZC5pc19wcmVzZW50KCkgJiYgdHJhY2suY29kZWNf
aWQudmFsdWUoKSA9PSAiVl9WUDkiKSB7Ci0gICAgICAgIGlmICghdHJhY2tEYXRhLT5jdXJyZW50
QmxvY2tCdWZmZXIpIHsKLSAgICAgICAgICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3QmxvY2tCdWZm
ZXIgPSBudWxscHRyOwotICAgICAgICAgICAgaWYgKG5vRXJyICE9IENNQmxvY2tCdWZmZXJDcmVh
dGVXaXRoTWVtb3J5QmxvY2soa0NGQWxsb2NhdG9yRGVmYXVsdCwgbnVsbHB0ciwgbWV0YWRhdGEu
c2l6ZSwga0NGQWxsb2NhdG9yRGVmYXVsdCwgbnVsbHB0ciwgMCwgbWV0YWRhdGEuc2l6ZSwgMCwg
JnJhd0Jsb2NrQnVmZmVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2tpcChyZWFkZXIsIGJ5
dGVzUmVtYWluaW5nKTsKLSAgICAgICAgICAgIHRyYWNrRGF0YS0+Y3VycmVudEJsb2NrQnVmZmVy
ID0gYWRvcHRDRihyYXdCbG9ja0J1ZmZlcik7Ci0gICAgICAgICAgICB0cmFja0RhdGEtPmN1cnJl
bnRCbG9ja0J1ZmZlclBvc2l0aW9uID0gMDsKLQotICAgICAgICAgICAgaWYgKG5vRXJyICE9IENN
QmxvY2tCdWZmZXJBc3N1cmVCbG9ja01lbW9yeSh0cmFja0RhdGEtPmN1cnJlbnRCbG9ja0J1ZmZl
ci5nZXQoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNraXAocmVhZGVyLCBieXRlc1JlbWFp
bmluZyk7Ci0gICAgICAgIH0KKyAgICBzaXplX3QgcGFja2V0RGF0YU9mZnNldCA9IG1fcGFja2V0
Qnl0ZXNSZWFkOworICAgIHNpemVfdCBieXRlc1RvUmVhZCA9IG1ldGFkYXRhLnNpemU7CisgICAg
d2hpbGUgKGJ5dGVzVG9SZWFkKSB7CisgICAgICAgIHVpbnQ2NF90IGJ5dGVzUmVhZDsKKyAgICAg
ICAgYXV0byBzdGF0dXMgPSByZWFkZXIuUmVhZChieXRlc1RvUmVhZCwgbV9wYWNrZXREYXRhLmRh
dGEoKSArIG1fcGFja2V0Qnl0ZXNSZWFkLCAmYnl0ZXNSZWFkKTsKKyAgICAgICAgYnl0ZXNUb1Jl
YWQgLT0gYnl0ZXNSZWFkOworICAgICAgICAqYnl0ZXNSZW1haW5pbmcgLT0gYnl0ZXNSZWFkOwor
ICAgICAgICBtX3BhY2tldEJ5dGVzUmVhZCArPSBieXRlc1JlYWQ7CisKKyAgICAgICAgLy8gRklY
TUU6IFdlIGNhbid0IHlldCBoYW5kbGUgcGFyc2luZyBhIEZyYW1lIHRoYXQgZG9lc24ndCBoYXZl
IGFsbCBpdHMgbWVtb3J5IGF2YWlsYWJsZS4KKyAgICAgICAgaWYgKHN0YXR1cy5jb2RlID09IHdl
Ym06OlN0YXR1czo6a09rUGFydGlhbCB8fCBzdGF0dXMuY29kZSA9PSB3ZWJtOjpTdGF0dXM6OmtX
b3VsZEJsb2NrKQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CiAKLSAgICAgICAg
c2l6ZV90IG51bVRvUmVhZCA9IG1ldGFkYXRhLnNpemUgLSB0cmFja0RhdGEtPmN1cnJlbnRCbG9j
a0J1ZmZlclBvc2l0aW9uOwotICAgICAgICBzaXplX3Qgc2VnbWVudFNpemVBdFBvc2l0aW9uID0g
MDsKLSAgICAgICAgdWludDhfdCogYmxvY2tCdWZmZXJEYXRhID0gbnVsbHB0cjsKKyAgICBtX3Bh
Y2tldERlc2NyaXB0aW9ucy5hcHBlbmQoeyBzdGF0aWNfY2FzdDxpbnQ2NF90PihwYWNrZXREYXRh
T2Zmc2V0KSwgMCwgc3RhdGljX2Nhc3Q8VUludDMyPihtZXRhZGF0YS5zaXplKSB9KTsKKyAgICBh
dXRvIHNhbXBsZUR1cmF0aW9uID0gQ01UaW1lR2V0U2Vjb25kcyhDTVRpbWVTdWJ0cmFjdChwcmVz
ZW50YXRpb25UaW1lLCBtX3NhbXBsZVByZXNlbnRhdGlvblRpbWUpKSArIENNVGltZUdldFNlY29u
ZHMobV9wYWNrZXREdXJhdGlvbik7CisgICAgaWYgKHNhbXBsZUR1cmF0aW9uID49IG1fbWluaW11
bVNhbXBsZUR1cmF0aW9uKQorICAgICAgICBjcmVhdGVTYW1wbGVCdWZmZXIoKTsKKworICAgIHJl
dHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKK30KIAotICAgICAgICB3aGlsZSAo
bnVtVG9SZWFkKSB7Ci0gICAgICAgICAgICBpZiAobm9FcnIgIT0gQ01CbG9ja0J1ZmZlckdldERh
dGFQb2ludGVyKHRyYWNrRGF0YS0+Y3VycmVudEJsb2NrQnVmZmVyLmdldCgpLCB0cmFja0RhdGEt
PmN1cnJlbnRCbG9ja0J1ZmZlclBvc2l0aW9uLCAmc2VnbWVudFNpemVBdFBvc2l0aW9uLCBudWxs
cHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRhdGEpKQotICAgICAgICAgICAgICAgIHJldHVybiBT
a2lwKHJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
OjpBdWRpb1RyYWNrRGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKCkKK3sKKyAgICBpZiAobV9wYWNr
ZXREZXNjcmlwdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgICAg
IHNpemVfdCBudW1Ub1JlYWRGcm9tVGhpc1NlZ21lbnQgPSBzdGQ6Om1pbihudW1Ub1JlYWQsIHNl
Z21lbnRTaXplQXRQb3NpdGlvbik7Ci0gICAgICAgICAgICB1aW50NjRfdCBudW1BY3R1YWxseVdy
aXR0ZW5Ub1RoaXNTZWdtZW50OworICAgIEFTU0VSVCghbV9wYWNrZXREYXRhLmlzRW1wdHkoKSk7
CiAKLSAgICAgICAgICAgIGF1dG8gc3RhdHVzID0gbV9yZWFkZXItPlJlYWQobnVtVG9SZWFkRnJv
bVRoaXNTZWdtZW50LCAodWludDhfdCopYmxvY2tCdWZmZXJEYXRhLCAmbnVtQWN0dWFsbHlXcml0
dGVuVG9UaGlzU2VnbWVudCk7Ci0gICAgICAgICAgICBudW1Ub1JlYWQgLT0gbnVtQWN0dWFsbHlX
cml0dGVuVG9UaGlzU2VnbWVudDsKLSAgICAgICAgICAgICpieXRlc1JlbWFpbmluZyAtPSBudW1B
Y3R1YWxseVdyaXR0ZW5Ub1RoaXNTZWdtZW50OwotICAgICAgICAgICAgdHJhY2tEYXRhLT5jdXJy
ZW50QmxvY2tCdWZmZXJQb3NpdGlvbiArPSBudW1BY3R1YWxseVdyaXR0ZW5Ub1RoaXNTZWdtZW50
OworICAgIENNQmxvY2tCdWZmZXJSZWYgYmxvY2tCdWZmZXIgPSBudWxscHRyOworICAgIGF1dG8g
ZXJyID0gQ01CbG9ja0J1ZmZlckNyZWF0ZVdpdGhNZW1vcnlCbG9jayhrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBudWxscHRyLCBtX3BhY2tldERhdGEuc2l6ZUluQnl0ZXMoKSwga0NGQWxsb2NhdG9yRGVm
YXVsdCwgbnVsbHB0ciwgMCwgbV9wYWNrZXREYXRhLnNpemVJbkJ5dGVzKCksIGtDTUJsb2NrQnVm
ZmVyQXNzdXJlTWVtb3J5Tm93RmxhZywgJmJsb2NrQnVmZmVyKTsKKyAgICBpZiAoZXJyKSB7Cisg
ICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQmxvY2tCdWZmZXJDcmVhdGVX
aXRoTWVtb3J5QmxvY2sgZmFpbGVkIHdpdGggJWQiLCBlcnIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGF1dG8gYnVmZmVyID0gYWRvcHRDRihibG9ja0J1ZmZlcik7CiAKLSAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBjYW4ndCB5ZXQgaGFuZGxlIHBhcnNpbmcgYSBGcmFtZSB0aGF0IGRv
ZXNuJ3QgaGF2ZSBhbGwgaXRzIG1lbW9yeSBhdmFpbGFibGUuCi0gICAgICAgICAgICBpZiAoc3Rh
dHVzLmNvZGUgPT0gd2VibTo6U3RhdHVzOjprT2tQYXJ0aWFsIHx8IHN0YXR1cy5jb2RlID09IHdl
Ym06OlN0YXR1czo6a1dvdWxkQmxvY2spCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsK
LSAgICAgICAgfQorICAgIGVyciA9IENNQmxvY2tCdWZmZXJSZXBsYWNlRGF0YUJ5dGVzKG1fcGFj
a2V0RGF0YS5kYXRhKCksIGJ1ZmZlci5nZXQoKSwgMCwgbV9wYWNrZXREYXRhLnNpemVJbkJ5dGVz
KCkpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJM
RSgiQ01CbG9ja0J1ZmZlclJlcGxhY2VEYXRhQnl0ZXMgZmFpbGVkIHdpdGggJWQiLCBlcnIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgICAgIGlmIChub0VyciAhPSBDTUJsb2NrQnVm
ZmVyR2V0RGF0YVBvaW50ZXIodHJhY2tEYXRhLT5jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCksIDAs
ICZzZWdtZW50U2l6ZUF0UG9zaXRpb24sIG51bGxwdHIsIChjaGFyKiopJmJsb2NrQnVmZmVyRGF0
YSkpCi0gICAgICAgICAgICByZXR1cm4gU2tpcChyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLQot
ICAgICAgICBhdXRvJiBoZWFkZXJQYXJzZXIgPSB0cmFja0RhdGEtPmhlYWRlclBhcnNlcjsKLSAg
ICAgICAgaWYgKCFoZWFkZXJQYXJzZXIuUGFyc2VVbmNvbXByZXNzZWRIZWFkZXIoYmxvY2tCdWZm
ZXJEYXRhLCBzZWdtZW50U2l6ZUF0UG9zaXRpb24pKQotICAgICAgICAgICAgcmV0dXJuIFNraXAo
cmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0KLSAgICAgICAgLy8gT25seSB1cGRhdGUgdGhlIGZv
cm1hdCBkZXNjcmlwdGlvbiB3aGVuIHRoZSBoZWFkZXIgaW5kaWNhdGVzIHRoYXQgdGhlIHNhbXBs
ZSBpcwotICAgICAgICAvLyBhIGtleS1mcmFtZSwgb3RoZXJ3aXNlIGNvbG9yIGluZm9ybWF0aW9u
IHdpbGwgbm90IGJlIHBhcnNlZC4KLSAgICAgICAgaWYgKGhlYWRlclBhcnNlci5rZXkoKSkKLSAg
ICAgICAgICAgIHRyYWNrRGF0YS0+Zm9ybWF0RGVzY3JpcHRpb24gPSBjcmVhdGVGb3JtYXREZXNj
cmlwdGlvbkZyb21WUDlIZWFkZXJQYXJzZXIoaGVhZGVyUGFyc2VyLCB0cmFjay52aWRlby52YWx1
ZSgpLmNvbG91cik7Ci0gICAgICAgIGlmICghdHJhY2tEYXRhLT5mb3JtYXREZXNjcmlwdGlvbikK
LSAgICAgICAgICAgIHJldHVybiBTa2lwKHJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwotCi0gICAg
ICAgIGF1dG8gcHRzID0gQ01UaW1lTWFrZShibG9jay0+dGltZWNvZGUgKyBtX2N1cnJlbnRUaW1l
Y29kZSwgbV90aW1lc2NhbGUpOwotICAgICAgICBDTVNhbXBsZVRpbWluZ0luZm8gdGltaW5nID0g
eyBDTVRpbWVNYWtlKGR1cmF0aW9uLCBtX3RpbWVzY2FsZSksIHB0cywgcHRzIH07Ci0gICAgICAg
IHNpemVfdCBzaXplID0gbWV0YWRhdGEuc2l6ZTsKLQotICAgICAgICBhdXRvIHNhbXBsZUNvdW50
ID0gYmxvY2stPm51bV9mcmFtZXM7Ci0gICAgICAgIENNU2FtcGxlQnVmZmVyUmVmIHJhd1NhbXBs
ZUJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgICAgIGlmIChub0VyciAhPSBDTVNhbXBsZUJ1ZmZlckNy
ZWF0ZVJlYWR5KGtDRkFsbG9jYXRvckRlZmF1bHQsIHRyYWNrRGF0YS0+Y3VycmVudEJsb2NrQnVm
ZmVyLmdldCgpLCB0cmFja0RhdGEtPmZvcm1hdERlc2NyaXB0aW9uLmdldCgpLCBzYW1wbGVDb3Vu
dCwgMSwgJnRpbWluZywgMSwgJnNpemUsICZyYXdTYW1wbGVCdWZmZXIpKQotICAgICAgICAgICAg
cmV0dXJuIFNraXAocmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAgIGF1dG8gc2FtcGxl
QnVmZmVyID0gYWRvcHRDRihyYXdTYW1wbGVCdWZmZXIpOwotCi0gICAgICAgIHRyYWNrRGF0YS0+
Y3VycmVudEJsb2NrQnVmZmVyID0gbnVsbHB0cjsKLSAgICAgICAgdHJhY2tEYXRhLT5jdXJyZW50
QmxvY2tCdWZmZXJQb3NpdGlvbiA9IDA7Ci0KLSAgICAgICAgaWYgKCFoZWFkZXJQYXJzZXIua2V5
KCkpIHsKLSAgICAgICAgICAgIGF1dG8gYXR0YWNobWVudHNBcnJheSA9IENNU2FtcGxlQnVmZmVy
R2V0U2FtcGxlQXR0YWNobWVudHNBcnJheShzYW1wbGVCdWZmZXIuZ2V0KCksIHRydWUpOwotICAg
ICAgICAgICAgQVNTRVJUKGF0dGFjaG1lbnRzQXJyYXkpOwotICAgICAgICAgICAgaWYgKCFhdHRh
Y2htZW50c0FycmF5KQotICAgICAgICAgICAgICAgIHJldHVybiBTa2lwKHJlYWRlciwgYnl0ZXNS
ZW1haW5pbmcpOwotICAgICAgICAgICAgZm9yIChDRkluZGV4IGkgPSAwLCBjb3VudCA9IENGQXJy
YXlHZXRDb3VudChhdHRhY2htZW50c0FycmF5KTsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIGF0dGFjaG1lbnRzID0gY2hlY2tlZF9jZl9j
YXN0PENGTXV0YWJsZURpY3Rpb25hcnlSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0YWNo
bWVudHNBcnJheSwgaSkpOwotICAgICAgICAgICAgICAgIENGRGljdGlvbmFyeVNldFZhbHVlKGF0
dGFjaG1lbnRzLCBrQ01TYW1wbGVBdHRhY2htZW50S2V5X05vdFN5bmMsIGtDRkJvb2xlYW5UcnVl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIENNU2FtcGxlQnVmZmVyUmVmIHJhd1Nh
bXBsZUJ1ZmZlciA9IG51bGxwdHI7CisgICAgZXJyID0gQ01BdWRpb1NhbXBsZUJ1ZmZlckNyZWF0
ZVJlYWR5V2l0aFBhY2tldERlc2NyaXB0aW9ucyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBidWZmZXIu
Z2V0KCksIGZvcm1hdERlc2NyaXB0aW9uKCkuZ2V0KCksIG1fcGFja2V0RGVzY3JpcHRpb25zLnNp
emUoKSwgbV9zYW1wbGVQcmVzZW50YXRpb25UaW1lLCBtX3BhY2tldERlc2NyaXB0aW9ucy5kYXRh
KCksICZyYXdTYW1wbGVCdWZmZXIpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUEFSU0VSX0xP
R19FUlJPUl9JRl9QT1NTSUJMRSgiQ01BdWRpb1NhbXBsZUJ1ZmZlckNyZWF0ZVdpdGhQYWNrZXRE
ZXNjcmlwdGlvbnMgZmFpbGVkIHdpdGggJWQiLCBlcnIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGF1dG8gc2FtcGxlQnVmZmVyID0gYWRvcHRDRihyYXdTYW1wbGVCdWZmZXIpOwogCi0g
ICAgICAgIGF1dG8gdHJhY2tJRCA9IHRyYWNrLnRyYWNrX3VpZC52YWx1ZSgpOworICAgIG1fcGFj
a2V0RGF0YS5jbGVhcigpOworICAgIG1fcGFja2V0RGVzY3JpcHRpb25zLmNsZWFyKCk7CiAKLSAg
ICAgICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBzYW1wbGVCdWZmZXIgPSBXVEZNb3ZlKHNhbXBsZUJ1ZmZlciksIHRyYWNrSURdICgpIG11
dGFibGUgewotICAgICAgICAgICAgaWYgKCFtX2RpZFByb3ZpZGVNZWRpYURhdGFDYWxsYmFjaykK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBhdXRvIG1lZGlhU2FtcGxlID0g
TWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlQnVmZmVyLmdldCgpLCB0cmFja0lEKTsK
LSAgICAgICAgICAgIG1fZGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKFdURk1vdmUobWVkaWFT
YW1wbGUpLCB0cmFja0lELCBlbXB0eVN0cmluZygpKTsKLSAgICAgICAgfSk7CisgICAgYXV0byB0
cmFja0lEID0gdHJhY2soKS50cmFja191aWQudmFsdWUoKTsKKyAgICBwYXJzZXIoKS5wcm92aWRl
TWVkaWFEYXRhKHNhbXBsZUJ1ZmZlci5sZWFrUmVmKCksIHRyYWNrSUQpOworfQorCit2b2lkIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVuZGluZ0F1ZGlvQnVmZmVycygpCit7CisgICAg
Zm9yIChhdXRvJiB0cmFjayA6IG1fdHJhY2tzKSB7CisgICAgICAgIGlmICh0cmFjay0+dHJhY2tU
eXBlKCkgPT0gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpUeXBlOjpBdWRpbykK
KyAgICAgICAgICAgIGRvd25jYXN0PEF1ZGlvVHJhY2tEYXRhPih0cmFjay5nZXQoKSkuY3JlYXRl
U2FtcGxlQnVmZmVyKCk7CiAgICAgfQotI2VuZGlmCit9CiAKLSAgICByZXR1cm4gU2tpcChyZWFk
ZXIsIGJ5dGVzUmVtYWluaW5nKTsKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2V0TWlu
aW11bUF1ZGlvU2FtcGxlRHVyYXRpb24oZmxvYXQgZHVyYXRpb24pCit7CisgICAgbV9taW5pbXVt
QXVkaW9TYW1wbGVEdXJhdGlvbiA9IGR1cmF0aW9uOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJN
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNLmgKaW5kZXggM2E4NDY0NTlhM2ViMzU1MzYxMjEyOTc2YzhlYWRlNDYzZDYzYjE5
Ny4uYmNmMTYyNDE0MTlkNTNhNDU3MWJkYjU5NGZlNTAzOTdjMzRmY2EzZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2Vy
V2ViTS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJj
ZUJ1ZmZlclBhcnNlcldlYk0uaApAQCAtMjgsNiArMjgsOCBAQAogI2lmIEVOQUJMRShNRURJQV9T
T1VSQ0UpCiAKICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQYXJzZXIuaCIKKyNpbmNsdWRlIDxDb3Jl
QXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KKyNpbmNsdWRlIDxDb3JlTWVkaWEvQ01UaW1lLmg+CiAj
aW5jbHVkZSA8Y29tbW9uL3ZwOV9oZWFkZXJfcGFyc2VyLmg+CiAjaW5jbHVkZSA8d2VibS9jYWxs
YmFjay5oPgogI2luY2x1ZGUgPHdlYm0vc3RhdHVzLmg+CkBAIC00MSw3ICs0Myw2IEBACiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RocmVhZHMvQmluYXJ5
U2VtYXBob3JlLmg+CiAKLXR5cGVkZWYgc3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyICpDTVNh
bXBsZUJ1ZmZlclJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IG9wYXF1ZUNNRm9ybWF0RGVzY3Jp
cHRpb24qIENNRm9ybWF0RGVzY3JpcHRpb25SZWY7CiB0eXBlZGVmIHN0cnVjdCBPcGFxdWVDTUJs
b2NrQnVmZmVyICpDTUJsb2NrQnVmZmVyUmVmOwogCkBAIC01MSwxMCArNTIsMTUgQEAgY2xhc3Mg
V2VibVBhcnNlcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBNZWRpYVNhbXBsZUFW
Rk9iakM7CisKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gOiBw
dWJsaWMgU291cmNlQnVmZmVyUGFyc2VyLCBwcml2YXRlIHdlYm06OkNhbGxiYWNrIHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICBjbGFzcyBTdHJlYW1pbmdWZWN0
b3JSZWFkZXI7CisKICAgICBzdGF0aWMgTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIGlz
Q29udGVudFR5cGVTdXBwb3J0ZWQoY29uc3QgQ29udGVudFR5cGUmKTsKKyAgICBzdGF0aWMgUmVm
UHRyPFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0+IGNyZWF0ZShjb25zdCBDb250ZW50VHlwZSYpOwog
CiAgICAgU291cmNlQnVmZmVyUGFyc2VyV2ViTSgpOwogICAgIH5Tb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNKCk7CkBAIC03MSw5ICs3NywxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNldFBhcnNlclN0
YXRlKCkgZmluYWw7CiAgICAgdm9pZCBpbnZhbGlkYXRlKCkgZmluYWw7CiAKLSNpZiAhUkVMRUFT
RV9MT0dfRElTQUJMRUQKKyAgICB2b2lkIGZsdXNoUGVuZGluZ0F1ZGlvQnVmZmVycygpOworICAg
IHZvaWQgc2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24oZmxvYXQpOworCiAgICAgdm9pZCBz
ZXRMb2dnZXIoY29uc3QgV1RGOjpMb2dnZXImLCBjb25zdCB2b2lkKiBpZGVudGlmaWVyKSBmaW5h
bDsKLSNlbmRpZgorCisgICAgdm9pZCBwcm92aWRlTWVkaWFEYXRhKFJldGFpblB0cjxDTVNhbXBs
ZUJ1ZmZlclJlZj4sIHVpbnQ2NF90KTsKIAogICAgIGVudW0gY2xhc3MgRXJyb3JDb2RlIDogaW50
MzJfdCB7CiAgICAgICAgIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk1FcnJvckNvZGVTdGFydCA9IDIw
MDAsCkBAIC05NSwyMCArMTA0LDExOSBAQCBwdWJsaWM6CiAgICAgICAgIFJlYWRpbmdDbHVzdGVy
LAogICAgIH07CiAKLXByaXZhdGU6Ci0gICAgc3RydWN0IFRyYWNrRGF0YSB7Ci0gICAgICAgIHdl
Ym06OlRyYWNrRW50cnkgdHJhY2s7Ci0gICAgICAgIHZwOV9wYXJzZXI6OlZwOUhlYWRlclBhcnNl
ciBoZWFkZXJQYXJzZXI7Ci0gICAgICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVm
PiBmb3JtYXREZXNjcmlwdGlvbjsKLSAgICAgICAgUmV0YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+
IGN1cnJlbnRCbG9ja0J1ZmZlcjsKLSAgICAgICAgdWludDY0X3QgY3VycmVudEJsb2NrQnVmZmVy
UG9zaXRpb24geyAwIH07CisgICAgZW51bSBjbGFzcyBDb2RlY1R5cGUgOiB1aW50OF90IHsKKyAg
ICAgICAgVW5zdXBwb3J0ZWQsCisgICAgICAgIFZQOSwKKyAgICAgICAgVm9yYmlzLAorICAgICAg
ICBPcHVzLAorICAgIH07CisKKyAgICBjbGFzcyBUcmFja0RhdGEgeworICAgICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBhdXRvIGNyZWF0
ZShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5
LCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIpIC0+IFVuaXF1ZVJlZjxUcmFja0RhdGE+
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFRyYWNrRGF0YT4o
Y29kZWNUeXBlLCB0cmFja0VudHJ5LCBUeXBlOjpVbmtub3duLCBwYXJzZXIpOworICAgICAgICB9
CisKKyAgICAgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgICAgIFVua25vd24sCisgICAg
ICAgICAgICBBdWRpbywKKyAgICAgICAgICAgIFZpZGVvLAorICAgICAgICB9OworCisgICAgICAg
IFRyYWNrRGF0YShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0
cmFja0VudHJ5LCBUeXBlIHRyYWNrVHlwZSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2Vy
KQorICAgICAgICAgICAgOiBtX2NvZGVjIHsgY29kZWNUeXBlIH0KKyAgICAgICAgICAgICwgbV90
cmFjayB7IHdlYm06OlRyYWNrRW50cnkgeyB0cmFja0VudHJ5IH0gfQorICAgICAgICAgICAgLCBt
X3RyYWNrVHlwZSB7IHRyYWNrVHlwZSB9CisgICAgICAgICAgICAsIG1fcGFyc2VyIHsgcGFyc2Vy
IH0KKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgflRyYWNrRGF0YSgpID0g
ZGVmYXVsdDsKKworICAgICAgICBDb2RlY1R5cGUgY29kZWMoKSBjb25zdCB7IHJldHVybiBtX2Nv
ZGVjOyB9CisgICAgICAgIHdlYm06OlRyYWNrRW50cnkmIHRyYWNrKCkgeyByZXR1cm4gbV90cmFj
azsgfQorICAgICAgICBUeXBlIHRyYWNrVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhY2tUeXBl
OyB9CisKKyAgICAgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGZvcm1hdERl
c2NyaXB0aW9uKCkgeyByZXR1cm4gbV9mb3JtYXREZXNjcmlwdGlvbjsgfQorICAgICAgICB2b2lk
IHNldEZvcm1hdERlc2NyaXB0aW9uKFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiYm
IGRlc2NyaXB0aW9uKSB7IG1fZm9ybWF0RGVzY3JpcHRpb24gPSBXVEZNb3ZlKGRlc2NyaXB0aW9u
KTsgfQorCisgICAgICAgIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIHBhcnNlcigpIGNvbnN0IHsg
cmV0dXJuIG1fcGFyc2VyOyB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHdlYm06OlN0YXR1
cyBjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRh
dGEmLCB1aW50NjRfdCosIGNvbnN0IENNVGltZSYsIGludCkKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gd2VibTo6U3RhdHVz
KHdlYm06OlN0YXR1czo6a0ludmFsaWRFbGVtZW50SWQpOworICAgICAgICB9CisKKyAgICBwcml2
YXRlOgorICAgICAgICBDb2RlY1R5cGUgbV9jb2RlYzsKKyAgICAgICAgd2VibTo6VHJhY2tFbnRy
eSBtX3RyYWNrOworICAgICAgICBUeXBlIG1fdHJhY2tUeXBlOworICAgICAgICBSZXRhaW5QdHI8
Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gbV9mb3JtYXREZXNjcmlwdGlvbjsKKyAgICAgICAgU291
cmNlQnVmZmVyUGFyc2VyV2ViTSYgbV9wYXJzZXI7CisgICAgfTsKKworICAgIGNsYXNzIFZpZGVv
VHJhY2tEYXRhIDogcHVibGljIFRyYWNrRGF0YSB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0
aWMgYXV0byBjcmVhdGUoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRy
eSYgdHJhY2tFbnRyeSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2VyKSAtPiBVbmlxdWVS
ZWY8VmlkZW9UcmFja0RhdGE+CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5p
cXVlUmVmPFZpZGVvVHJhY2tEYXRhPihjb2RlY1R5cGUsIHRyYWNrRW50cnksIHBhcnNlcik7Cisg
ICAgICAgIH0KKworICAgICAgICBWaWRlb1RyYWNrRGF0YShDb2RlY1R5cGUgY29kZWNUeXBlLCBj
b25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
JiBwYXJzZXIpCisgICAgICAgICAgICA6IFRyYWNrRGF0YShjb2RlY1R5cGUsIHRyYWNrRW50cnks
IFR5cGU6OlZpZGVvLCBwYXJzZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHdl
Ym06OlN0YXR1cyBjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZy
YW1lTWV0YWRhdGEmLCB1aW50NjRfdCosIGNvbnN0IENNVGltZSYsIGludCkgZmluYWw7CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgY3JlYXRlU2FtcGxlQnVmZmVyKGNvbnN0
IENNVGltZSYsIGludCk7CisgICAgICAgIGNvbnN0IGNoYXIqIGxvZ0NsYXNzTmFtZSgpIGNvbnN0
IHsgcmV0dXJuICJWaWRlb1RyYWNrRGF0YSI7IH0KKworICAgICAgICB2cDlfcGFyc2VyOjpWcDlI
ZWFkZXJQYXJzZXIgbV9oZWFkZXJQYXJzZXI7CisgICAgICAgIFJldGFpblB0cjxDTUJsb2NrQnVm
ZmVyUmVmPiBtX2N1cnJlbnRCbG9ja0J1ZmZlcjsKKyAgICAgICAgdWludDY0X3QgbV9jdXJyZW50
QmxvY2tCdWZmZXJQb3NpdGlvbiB7IDAgfTsKKyAgICB9OworCisgICAgY2xhc3MgQXVkaW9UcmFj
a0RhdGEgOiBwdWJsaWMgVHJhY2tEYXRhIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBh
dXRvIGNyZWF0ZShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0
cmFja0VudHJ5LCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIsIGZsb2F0IG1pbmltdW1T
YW1wbGVEdXJhdGlvbikgLT4gVW5pcXVlUmVmPEF1ZGlvVHJhY2tEYXRhPgorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxBdWRpb1RyYWNrRGF0YT4oY29kZWNUeXBl
LCB0cmFja0VudHJ5LCBwYXJzZXIsIG1pbmltdW1TYW1wbGVEdXJhdGlvbik7CisgICAgICAgIH0K
KworICAgICAgICBBdWRpb1RyYWNrRGF0YShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJt
OjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIs
IGZsb2F0IG1pbmltdW1TYW1wbGVEdXJhdGlvbikKKyAgICAgICAgICAgIDogVHJhY2tEYXRhIHsg
Y29kZWNUeXBlLCB0cmFja0VudHJ5LCBUeXBlOjpBdWRpbywgcGFyc2VyIH0KKyAgICAgICAgICAg
ICwgbV9taW5pbXVtU2FtcGxlRHVyYXRpb24geyBtaW5pbXVtU2FtcGxlRHVyYXRpb24gfQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICB3ZWJtOjpTdGF0dXMgY29uc3VtZUZyYW1lRGF0
YSh3ZWJtOjpSZWFkZXImLCBjb25zdCB3ZWJtOjpGcmFtZU1ldGFkYXRhJiwgdWludDY0X3QqLCBj
b25zdCBDTVRpbWUmLCBpbnQpIGZpbmFsOworICAgICAgICB2b2lkIGNyZWF0ZVNhbXBsZUJ1ZmZl
cigpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkg
Y29uc3QgeyByZXR1cm4gIkF1ZGlvVHJhY2tEYXRhIjsgfQorCisgICAgICAgIENNVGltZSBtX3Nh
bXBsZVByZXNlbnRhdGlvblRpbWU7CisgICAgICAgIENNVGltZSBtX3BhY2tldER1cmF0aW9uOwor
ICAgICAgICBWZWN0b3I8dWludDhfdD4gbV9wYWNrZXREYXRhOworICAgICAgICBzaXplX3QgbV9w
YWNrZXRCeXRlc1JlYWQgeyAwIH07CisgICAgICAgIHNpemVfdCBtX2J5dGVPZmZzZXQgeyAwIH07
CisgICAgICAgIFZlY3RvcjxBdWRpb1N0cmVhbVBhY2tldERlc2NyaXB0aW9uPiBtX3BhY2tldERl
c2NyaXB0aW9uczsKKworICAgICAgICAvLyBGSVhNRTogMC41IC0gMS4wIHNlY29uZHMgaXMgYSBi
ZXR0ZXIgZHVyYXRpb24gcGVyIHNhbXBsZSBidWZmZXIsIGJ1dCB1c2UgMiBzZWNvbmRzIHNvIGF0
IGxlYXN0IHRoZSBmaXJzdAorICAgICAgICAvLyBzYW1wbGUgYnVmZmVyIHdpbGwgcGxheSB1bnRp
bCB3ZSBmaXggU2FtcGxlQ3Vyc29yOjpjcmVhdGVTYW1wbGVCdWZmZXIgdG8gZGVhbCB3aXRoIGBl
bmRDdXJzb3JgLgorICAgICAgICBmbG9hdCBtX21pbmltdW1TYW1wbGVEdXJhdGlvbiB7IDIgfTsK
ICAgICB9OwotICAgIFRyYWNrRGF0YSogdHJhY2tEYXRhRm9yVHJhY2tOdW1iZXIodWludDY0X3Qp
OwogCi0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECiAgICAgY29uc3QgV1RGOjpMb2dnZXIqIGxv
Z2dlclB0cigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nZ2VyLmdldCgpOyB9CiAgICAgY29uc3Qgdm9p
ZCogbG9nSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fbG9nSWRlbnRpZmllcjsgfQotI2Vu
ZGlmCisKK3ByaXZhdGU6CisKKyAgICBUcmFja0RhdGEqIHRyYWNrRGF0YUZvclRyYWNrTnVtYmVy
KHVpbnQ2NF90KTsKIAogICAgIC8vIHdlYm06OkNhbGxiYWNrCiAgICAgd2VibTo6U3RhdHVzIE9u
RWxlbWVudEJlZ2luKGNvbnN0IHdlYm06OkVsZW1lbnRNZXRhZGF0YSYsIHdlYm06OkFjdGlvbiop
IGZpbmFsOwpAQCAtMTM1LDIwICsyNDMsMTggQEAgcHJpdmF0ZToKIAogICAgIFN0YXRlIG1fc3Rh
dGUgeyBTdGF0ZTo6Tm9uZSB9OwogCi0gICAgY2xhc3MgU3RyZWFtaW5nVmVjdG9yUmVhZGVyOwog
ICAgIFVuaXF1ZVJlZjxTdHJlYW1pbmdWZWN0b3JSZWFkZXI+IG1fcmVhZGVyOwogCi0gICAgVmVj
dG9yPFRyYWNrRGF0YT4gbV90cmFja3M7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxUcmFja0RhdGE+
PiBtX3RyYWNrczsKICAgICB1c2luZyBCbG9ja1ZhcmlhbnQgPSBWYXJpYW50PHdlYm06OkJsb2Nr
LCB3ZWJtOjpTaW1wbGVCbG9jaz47CiAgICAgT3B0aW9uYWw8QmxvY2tWYXJpYW50PiBtX2N1cnJl
bnRCbG9jazsKICAgICBPcHRpb25hbDx1aW50NjRfdD4gbV9yZXdpbmRUb1Bvc2l0aW9uOworICAg
IGZsb2F0IG1fbWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24geyAyIH07CiAKICAgICBCb3g8Qmlu
YXJ5U2VtYXBob3JlPiBtX2luaXRpYWxpemF0aW9uU2VnbWVudElzSGFuZGxlZFNlbWFwaG9yZTsK
IAotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIFJlZlB0cjxjb25zdCBXVEY6OkxvZ2dl
cj4gbV9sb2dnZXI7CiAgICAgY29uc3Qgdm9pZCogbV9sb2dJZGVudGlmaWVyIHsgbnVsbHB0ciB9
OwotI2VuZGlmCiB9OwogCiB9CkBAIC0xNTcsNCArMjYzLDEyIEBAIFNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQkVHSU4oV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTSkKICAgICBzdGF0aWMg
Ym9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyJiBwYXJzZXIpIHsg
cmV0dXJuIHBhcnNlci50eXBlKCkgPT0gV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyOjpUeXBl
OjpXZWJNOyB9CiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCiAKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFj
a0RhdGEpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OlRyYWNrRGF0YSYgdHJhY2tEYXRhKSB7IHJldHVybiB0cmFja0RhdGEudHJh
Y2tUeXBlKCkgPT0gV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpU
eXBlOjpWaWRlbzsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlv
VHJhY2tEYXRhKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGEmIHRyYWNrRGF0YSkgeyByZXR1cm4gdHJhY2tEYXRh
LnRyYWNrVHlwZSgpID09IFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0
YTo6VHlwZTo6QXVkaW87IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwogI2VuZGlm
IC8vIEVOQUJMRShNRURJQV9TT1VSQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaAppbmRleCAxNGM2ZjNh
ZTk4NDMwYWFlYzJiOGU4MjJiMWZiNTFiNDc1OGFhOTMwLi41Y2NkMzU3NzkzMTQ0OTllNzY0MDU4
ZjI0MjhkMmE2ZmViNTAzZTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLmgKQEAgLTI4LDYgKzI4LDEz
IEBACiAjaWYgRU5BQkxFKFZQOSkgJiYgUExBVEZPUk0oQ09DT0EpCiAKICNpbmNsdWRlICJWUDlV
dGlsaXRpZXMuaCIKKyNpbmNsdWRlIDx3ZWJtL2RvbV90eXBlcy5oPgorCit0eXBlZGVmIGNvbnN0
IHN0cnVjdCBvcGFxdWVDTUZvcm1hdERlc2NyaXB0aW9uKiBDTUZvcm1hdERlc2NyaXB0aW9uUmVm
OworCituYW1lc3BhY2UgdnA5X3BhcnNlciB7CitjbGFzcyBWcDlIZWFkZXJQYXJzZXI7Cit9CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDQsNiArNTEsOCBAQCBleHRlcm4gYm9vbCBpc1ZQ
OURlY29kZXJBdmFpbGFibGUoKTsKIGV4dGVybiBib29sIGlzVlBDb2RlY0NvbmZpZ3VyYXRpb25S
ZWNvcmRTdXBwb3J0ZWQoVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmKTsKIGV4dGVybiBib29s
IHZhbGlkYXRlVlBQYXJhbWV0ZXJzKFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJiwgTWVkaWFD
YXBhYmlsaXRpZXNJbmZvJiwgY29uc3QgVmlkZW9Db25maWd1cmF0aW9uJik7CiAKK1JldGFpblB0
cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDlI
ZWFkZXJQYXJzZXIoY29uc3QgdnA5X3BhcnNlcjo6VnA5SGVhZGVyUGFyc2VyJiwgY29uc3Qgd2Vi
bTo6RWxlbWVudDx3ZWJtOjpDb2xvdXI+Jik7CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0Nv
Y29hLm1tCmluZGV4IGM4MWU5N2FhM2U0NzdkN2M3Yjg5YzE2MTlhOWYzZmYyZjJiZWMwYTEuLjQx
MjI1MGY5NzQ3YTg5OTI2YWVlNWI5MjgxZjFhNDEzYmMyZThjMTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0Nv
Y29hLm1tCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlZQOVV0aWxpdGllc0Nv
Y29hLmgiCisjaW1wb3J0ICJjb25maWcuaCIKKyNpbXBvcnQgIlZQOVV0aWxpdGllc0NvY29hLmgi
CiAKICNpZiBFTkFCTEUoVlA5KSAmJiBQTEFURk9STShDT0NPQSkKIApAQCAtMzYsMTMgKzM2LDIw
IEBACiAjaW1wb3J0ICJTeXN0ZW1CYXR0ZXJ5LmgiCiAjaW1wb3J0ICJWaWRlb0NvbmZpZ3VyYXRp
b24uaCIKICNpbXBvcnQgPENvcmVNZWRpYS9DTUZvcm1hdERlc2NyaXB0aW9uLmg+CisjaW1wb3J0
IDxKYXZhU2NyaXB0Q29yZS9EYXRhVmlldy5oPgorI2ltcG9ydCA8Y29tbW9uL3ZwOV9oZWFkZXJf
cGFyc2VyLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9uLmg+
CiAKICNpbXBvcnQgPHBhbC9jb2NvYS9BVkZvdW5kYXRpb25Tb2Z0TGluay5oPgorI2ltcG9ydCA8
cGFsL2NmL0NvcmVNZWRpYVNvZnRMaW5rLmg+CisjaW1wb3J0ICJDb3JlVmlkZW9Tb2Z0TGluay5o
IgogI2ltcG9ydCAiVmlkZW9Ub29sYm94U29mdExpbmsuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCit1c2luZyBuYW1lc3BhY2UgUEFMOwordXNpbmcgbmFtZXNwYWNlIHdlYm07CisKIHN0YXRp
YyBib29sIGhhcmR3YXJlVlA5RGVjb2RlckRpc2FibGVkRm9yVGVzdGluZyB7IGZhbHNlIH07CiAK
IHN0cnVjdCBPdmVycmlkZVNjcmVlbkRhdGEgewpAQCAtMjU3LDYgKzI2NCwyODggQEAgYm9vbCB2
YWxpZGF0ZVZQUGFyYW1ldGVycyhWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYgY29kZWNDb25m
aWd1cmF0aW9uLCBNZWRpYUMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIHVpbnQ4X3Qg
Y29udmVydFRvQ29sb3JQcmltYXJpZXMoY29uc3QgUHJpbWFyaWVzJiBjb2VmZmljaWVudHMpCit7
CisgICAgc3dpdGNoIChjb2VmZmljaWVudHMpIHsKKyAgICBjYXNlIFByaW1hcmllczo6a0J0NzA5
OgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzcwOV82
OworICAgIGNhc2UgUHJpbWFyaWVzOjprVW5zcGVjaWZpZWQ6CisgICAgICAgIHJldHVybiBWUENv
bmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6VW5zcGVjaWZpZWQ7CisgICAgY2FzZSBQcmltYXJp
ZXM6OmtCdDQ3ME06CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmll
czo6QlRfNDcwXzZfTTsKKyAgICBjYXNlIFByaW1hcmllczo6a0J0NDcwQmc6CisgICAgICAgIHJl
dHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfNDcwXzdfQkc7CisgICAgY2Fz
ZSBQcmltYXJpZXM6OmtTbXB0ZTE3ME06CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25D
b2xvclByaW1hcmllczo6QlRfNjAxXzc7CisgICAgY2FzZSBQcmltYXJpZXM6OmtTbXB0ZTI0ME06
CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfU1Rf
MjQwOworICAgIGNhc2UgUHJpbWFyaWVzOjprRmlsbToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmln
dXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpGaWxtOworICAgIGNhc2UgUHJpbWFyaWVzOjprQnQyMDIw
OgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzIwMjBf
Tm9uY29uc3RhbnRfTHVtaW5hbmNlOworICAgIGNhc2UgUHJpbWFyaWVzOjprU21wdGVTdDQyODE6
CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfU1Rf
NDI4XzE7CisgICAgY2FzZSBQcmltYXJpZXM6OmtTbXB0ZVJwNDMxOgorICAgICAgICByZXR1cm4g
VlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1JQXzQzMV8yOworICAgIGNhc2Ug
UHJpbWFyaWVzOjprU21wdGVFZzQzMjoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNv
bG9yUHJpbWFyaWVzOjpTTVBURV9FR180MzJfMTsKKyAgICBjYXNlIFByaW1hcmllczo6a0plZGVj
UDIyUGhvc3Bob3JzOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJp
ZXM6OkVCVV9UZWNoXzMyMTNfRTsKKyAgICB9Cit9CisKK3N0YXRpYyBDRlN0cmluZ1JlZiBjb252
ZXJ0VG9DTUNvbG9yUHJpbWFyaWVzKHVpbnQ4X3QgcHJpbWFyaWVzKQoreworICAgIHN3aXRjaCAo
cHJpbWFyaWVzKSB7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRf
NzA5XzY6CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzX0lUVV9S
XzcwOV8yOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkVCVV9UZWNo
XzMyMTNfRToKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfRUJV
XzMyMTM7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfNjAxXzc6
CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfU1RfMjQwOgor
ICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19TTVBURV9DOworICAg
IGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1JQXzQzMV8yOgorICAg
ICAgICByZXR1cm4ga0NNRm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19EQ0lfUDM7Cisg
ICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfRUdfNDMyXzE6Cisg
ICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX1AzX0Q2NTsK
KyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF8yMDIwX05vbmNvbnN0
YW50X0x1bWluYW5jZToKKyAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQ
cmltYXJpZXNfSVRVX1JfMjAyMDsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
c3RhdGljIHVpbnQ4X3QgY29udmVydFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MoY29uc3QgVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3MmIGNoYXJhY3RlcmlzdGljcykKK3sKKyAgICBzd2l0Y2ggKGNo
YXJhY3RlcmlzdGljcykgeworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtCdDcw
OToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
OjpCVF83MDlfNjsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprVW5zcGVjaWZp
ZWQ6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6VW5zcGVjaWZpZWQ7CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0dhbW1h
MjJjdXJ2ZToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVy
aXN0aWNzOjpCVF80NzBfNl9NOworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtH
YW1tYTI4Y3VydmU6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljczo6QlRfNDcwXzdfQkc7CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6a1NtcHRlMTcwTToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzOjpCVF82MDFfNzsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
OjprU21wdGUyNDBNOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzI0MDsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjprTGluZWFyOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OkxpbmVhcjsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpr
TG9nOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OkxvZ3JpdGhtaWM7CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0xvZ1Nx
cnQ6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6TG9ncml0aG1pY19TcXJ0OworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtJ
ZWM2MTk2NjI0OgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OklFQ182MTk2Nl8yXzQ7CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6a0J0MTM2MUV4dGVuZGVkQ29sb3VyR2FtdXQ6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3Vy
YXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfMTM2MV8wOworICAgIGNhc2UgVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OmtJZWM2MTk2NjIxOgorICAgICAgICByZXR1cm4gVlBDb25maWd1
cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OklFQ182MTk2Nl8yXzE7CisgICAgY2FzZSBU
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6azEwQml0QnQyMDIwOgorICAgICAgICByZXR1cm4gVlBD
b25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTBiaXQ7CisgICAg
Y2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6azEyQml0QnQyMDIwOgorICAgICAgICByZXR1
cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTJiaXQ7
CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a1NtcHRlU3QyMDg0OgorICAgICAg
ICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NU
XzIwODQ7CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a1NtcHRlU3Q0MjgxOgor
ICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNN
UFRFX1NUXzQyOF8xOworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtBcmliU3Rk
QjY3SGxnOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OkJUXzIxMDBfSExHOworICAgIH0KK30KKworc3RhdGljIENGU3RyaW5nUmVmIGNvbnZl
cnRUb0NNVHJhbnNmZXJGdW5jdGlvbih1aW50OF90IGNoYXJhY3RlcmlzdGljcykKK3sKKyAgICBz
d2l0Y2ggKGNoYXJhY3RlcmlzdGljcykgeworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzcwOV82OgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZm
ZXJUcmFuc2ZlckZ1bmN0aW9uX0lUVV9SXzcwOV8yOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9u
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzI0MDoKKyAgICAgICAgcmV0dXJuIGtD
VkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbl9TTVBURV8yNDBNXzE5OTU7CisgICAgY2FzZSBW
UENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U01QVEVfU1RfMjA4NDoKKyAg
ICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9TTVBURV9T
VF8yMDg0X1BROworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OkJUXzIwMjBfMTBiaXQ6CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljczo6QlRfMjAyMF8xMmJpdDoKKyAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2Ny
aXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl8yMDIwOworICAgIGNhc2UgVlBDb25maWd1cmF0
aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzQyOF8xOgorICAgICAgICByZXR1
cm4ga0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX1NNUFRFX1NUXzQyOF8xOwor
ICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIxMDBf
SExHOgorICAgICAgICByZXR1cm4ga0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9u
X0lUVV9SXzIxMDBfSExHOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OklFQ182MTk2Nl8yXzE6CisgICAgICAgIHJldHVybiBjYW5Mb2FkX0NvcmVNZWRp
YV9rQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fc1JHQigpID8gUEFMOjpnZXRf
Q29yZU1lZGlhX2tDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9zUkdCKCkgOiBu
dWxscHRyOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OkxpbmVhcjoKKyAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5j
dGlvbl9MaW5lYXI7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyB1
aW50OF90IGNvbnZlcnRUb01hdHJpeENvZWZmaWNpZW50cyhjb25zdCBNYXRyaXhDb2VmZmljaWVu
dHMmIGNvZWZmaWNpZW50cykKK3sKKyAgICBzd2l0Y2ggKGNvZWZmaWNpZW50cykgeworICAgIGNh
c2UgTWF0cml4Q29lZmZpY2llbnRzOjprUmdiOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0
aW9uTWF0cml4Q29lZmZpY2llbnRzOjpJZGVudGl0eTsKKyAgICBjYXNlIE1hdHJpeENvZWZmaWNp
ZW50czo6a0J0NzA5OgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZp
Y2llbnRzOjpCVF83MDlfNjsKKyAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a1Vuc3BlY2lm
aWVkOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpV
bnNwZWNpZmllZDsKKyAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a0ZjYzoKKyAgICAgICAg
cmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6RkNDOworICAgIGNhc2Ug
TWF0cml4Q29lZmZpY2llbnRzOjprQnQ0NzBCZzoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJh
dGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfNDcwXzdfQkc7CisgICAgY2FzZSBNYXRyaXhDb2Vm
ZmljaWVudHM6OmtTbXB0ZTE3ME06CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRy
aXhDb2VmZmljaWVudHM6OkJUXzYwMV83OworICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjpr
U21wdGUyNDBNOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2ll
bnRzOjpTTVBURV9TVF8yNDA7CisgICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtZQ2dDbzoK
KyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6WUNnQ287
CisgICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtCdDIwMjBOb25jb25zdGFudEx1bWluYW5j
ZToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRf
MjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U7CisgICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6
OmtCdDIwMjBDb25zdGFudEx1bWluYW5jZToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlv
bk1hdHJpeENvZWZmaWNpZW50czo6QlRfMjAyMF9Db25zdGFudF9MdW1pbmFuY2U7CisgICAgfQor
fQorCitzdGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRvQ01ZQ2JDUk1hdHJpeCh1aW50OF90IGNv
ZWZmaWNpZW50cykKK3sKKyAgICBzd2l0Y2ggKGNvZWZmaWNpZW50cykgeworICAgIGNhc2UgVlBD
b25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF8yMDIwX05vbmNvbnN0YW50X0x1bWlu
YW5jZToKKyAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uWUNiQ3JNYXRyaXhfSVRV
X1JfMjAyMDsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRf
NDcwXzdfQkc6CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJU
XzYwMV83OgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl82
MDFfNDsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfNzA5
XzY6CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzcwOV8y
OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpTTVBURV9TVF8y
NDA6CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X1NNUFRFXzI0ME1f
MTk5NTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIHVpbnQ4X3Qg
Y29udmVydFN1YnNhbXBsaW5nWFlUb0Nocm9tYVN1YnNhbXBsaW5nKHVpbnQ2NF90IHgsIHVpbnQ2
NF90IHkpCit7CisgICAgaWYgKHggJiB5KQorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9u
Q2hyb21hU3Vic2FtcGxpbmc6OlN1YnNhbXBsaW5nXzQyMF9Db2xvY2F0ZWQ7CisgICAgaWYgKHgg
JiAheSkKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNocm9tYVN1YnNhbXBsaW5nOjpT
dWJzYW1wbGluZ180MjI7CisgICAgaWYgKCF4ICYgIXkpCisgICAgICAgIHJldHVybiBWUENvbmZp
Z3VyYXRpb25DaHJvbWFTdWJzYW1wbGluZzo6U3Vic2FtcGxpbmdfNDQ0OworICAgIC8vIFRoaXMg
aW5kaWNhdGVzIDQ6NDowIHN1YnNhbXBsaW5nLCB3aGljaCBpcyBub3QgZXhwcmVzc2FibGUgaW4g
dGhlICd2cGNDJyBib3guIERlZmF1bHQgdG8gNDoyOjAuCisgICAgcmV0dXJuIFZQQ29uZmlndXJh
dGlvbkNocm9tYVN1YnNhbXBsaW5nOjpTdWJzYW1wbGluZ180MjBfQ29sb2NhdGVkOworfQorCitS
ZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25G
cm9tVlA5SGVhZGVyUGFyc2VyKGNvbnN0IHZwOV9wYXJzZXI6OlZwOUhlYWRlclBhcnNlciYgcGFy
c2VyLCBjb25zdCB3ZWJtOjpFbGVtZW50PENvbG91cj4mIGNvbG9yKQoreworICAgIC8vIFJlZjog
IlZQIENvZGVjIElTTyBNZWRpYSBGaWxlIEZvcm1hdCBCaW5kaW5nLCB2MS4wLCAyMDE3LTAzLTMx
IgorICAgIC8vIDxodHRwczovL3d3dy53ZWJtcHJvamVjdC5vcmcvdnA5L21wNC8+CisgICAgLy8K
KyAgICAvLyBjbGFzcyBWUENvZGVjQ29uZmlndXJhdGlvbkJveCBleHRlbmRzIEZ1bGxCb3goJ3Zw
Y0MnLCB2ZXJzaW9uID0gMSwgMCkKKyAgICAvLyB7CisgICAgLy8gICAgIFZQQ29kZWNDb25maWd1
cmF0aW9uUmVjb3JkKCkgdnBjQ29uZmlnOworICAgIC8vIH0KKyAgICAvLworICAgIC8vIGFsaWdu
ZWQgKDgpIGNsYXNzIFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkIHsKKyAgICAvLyAgICAgdW5z
aWduZWQgaW50ICg4KSAgICAgcHJvZmlsZTsKKyAgICAvLyAgICAgdW5zaWduZWQgaW50ICg4KSAg
ICAgbGV2ZWw7CisgICAgLy8gICAgIHVuc2lnbmVkIGludCAoNCkgICAgIGJpdERlcHRoOworICAg
IC8vICAgICB1bnNpZ25lZCBpbnQgKDMpICAgICBjaHJvbWFTdWJzYW1wbGluZzsKKyAgICAvLyAg
ICAgdW5zaWduZWQgaW50ICgxKSAgICAgdmlkZW9GdWxsUmFuZ2VGbGFnOworICAgIC8vICAgICB1
bnNpZ25lZCBpbnQgKDgpICAgICBjb2xvdXJQcmltYXJpZXM7CisgICAgLy8gICAgIHVuc2lnbmVk
IGludCAoOCkgICAgIHRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOworICAgIC8vICAgICB1bnNpZ25l
ZCBpbnQgKDgpICAgICBtYXRyaXhDb2VmZmljaWVudHM7CisgICAgLy8gICAgIHVuc2lnbmVkIGlu
dCAoMTYpICAgIGNvZGVjSW50aWFsaXphdGlvbkRhdGFTaXplOworICAgIC8vICAgICB1bnNpZ25l
ZCBpbnQgKDgpW10gICBjb2RlY0ludGlhbGl6YXRpb25EYXRhOworICAgIC8vIH0KKyAgICAvLwor
ICAgIC8vIGNvZGVjSW50aWFsaXphdGlvbkRhdGFTaXpl4oCLRm9yIFZQOCBhbmQgVlA5IHRoaXMg
ZmllbGQgbXVzdCBiZSAwLgorICAgIC8vIGNvZGVjSW50aWFsaXphdGlvbkRhdGHigItiaW5hcnkg
Y29kZWMgaW5pdGlhbGl6YXRpb24gZGF0YS4gTm90IHVzZWQgZm9yIFZQOCBhbmQgVlA5LgorICAg
IC8vCisgICAgLy8gRklYTUU6IENvbnZlcnQgZXhpc3Rpbmcgc3RydWN0IHRvIGFuIElTT0JveCBh
bmQgcmVwbGFjZSB0aGUgd3JpdGluZyBjb2RlIGJlbG93CisgICAgLy8gd2l0aCBhIHN1YmNsYXNz
IG9mIElTT0Z1bGxCb3guCisKKyAgICBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCByZWNvcmQ7
CisKKyAgICByZWNvcmQucHJvZmlsZSA9IHBhcnNlci5wcm9maWxlKCk7CisgICAgLy8gQ29yZU1l
ZGlhIGRvZXMgbmF0IGNhcmUgYWJvdXQgdGhlIFZQOSBjb2RlYyBsZXZlbDsgaGFyZC1jb2RlIHRv
IExldmVsIDEuMCBoZXJlOgorICAgIHJlY29yZC5sZXZlbCA9IDEwOworICAgIHJlY29yZC5iaXRE
ZXB0aCA9IHBhcnNlci5iaXRfZGVwdGgoKTsKKyAgICByZWNvcmQudmlkZW9GdWxsUmFuZ2VGbGFn
ID0gcGFyc2VyLmNvbG9yX3JhbmdlKCkgPyBWUENvbmZpZ3VyYXRpb25SYW5nZTo6RnVsbFJhbmdl
IDogVlBDb25maWd1cmF0aW9uUmFuZ2U6OlZpZGVvUmFuZ2U7CisgICAgcmVjb3JkLmNocm9tYVN1
YnNhbXBsaW5nID0gY29udmVydFN1YnNhbXBsaW5nWFlUb0Nocm9tYVN1YnNhbXBsaW5nKHBhcnNl
ci5zdWJzYW1wbGluZ194KCksIHBhcnNlci5zdWJzYW1wbGluZ195KCkpOworICAgIHJlY29yZC5j
b2xvclByaW1hcmllcyA9IFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpVbnNwZWNpZmll
ZDsKKyAgICByZWNvcmQudHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MgPSBWUENvbmZpZ3VyYXRpb25U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6VW5zcGVjaWZpZWQ7CisgICAgcmVjb3JkLm1hdHJpeENv
ZWZmaWNpZW50cyA9IFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6VW5zcGVjaWZp
ZWQ7CisKKyAgICAvLyBDb250YWluZXIgY29sb3IgdmFsdWVzIGNhbiBvdmVycmlkZSBwZXItc2Ft
cGxlIG9uZXM6CisgICAgaWYgKGNvbG9yLmlzX3ByZXNlbnQoKSkgeworICAgICAgICBhdXRvJiBj
b2xvclZhbHVlID0gY29sb3IudmFsdWUoKTsKKyAgICAgICAgaWYgKGNvbG9yVmFsdWUuY2hyb21h
X3N1YnNhbXBsaW5nX3guaXNfcHJlc2VudCgpICYmIGNvbG9yVmFsdWUuY2hyb21hX3N1YnNhbXBs
aW5nX3kuaXNfcHJlc2VudCgpKQorICAgICAgICAgICAgcmVjb3JkLmNocm9tYVN1YnNhbXBsaW5n
ID0gY29udmVydFN1YnNhbXBsaW5nWFlUb0Nocm9tYVN1YnNhbXBsaW5nKGNvbG9yVmFsdWUuY2hy
b21hX3N1YnNhbXBsaW5nX3gudmFsdWUoKSwgY29sb3JWYWx1ZS5jaHJvbWFfc3Vic2FtcGxpbmdf
eS52YWx1ZSgpKTsKKyAgICAgICAgaWYgKGNvbG9yVmFsdWUucmFuZ2UuaXNfcHJlc2VudCgpICYm
IGNvbG9yVmFsdWUucmFuZ2UudmFsdWUoKSAhPSBSYW5nZTo6a1Vuc3BlY2lmaWVkKQorICAgICAg
ICAgICAgcmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxhZyA9IGNvbG9yVmFsdWUucmFuZ2UudmFsdWUo
KSA9PSBSYW5nZTo6a0Z1bGwgPyBWUENvbmZpZ3VyYXRpb25SYW5nZTo6RnVsbFJhbmdlIDogVlBD
b25maWd1cmF0aW9uUmFuZ2U6OlZpZGVvUmFuZ2U7CisgICAgICAgIGlmIChjb2xvclZhbHVlLmJp
dHNfcGVyX2NoYW5uZWwuaXNfcHJlc2VudCgpKQorICAgICAgICAgICAgcmVjb3JkLmJpdERlcHRo
ID0gY29sb3JWYWx1ZS5iaXRzX3Blcl9jaGFubmVsLnZhbHVlKCk7CisgICAgICAgIGlmIChjb2xv
clZhbHVlLnRyYW5zZmVyX2NoYXJhY3RlcmlzdGljcy5pc19wcmVzZW50KCkpCisgICAgICAgICAg
ICByZWNvcmQudHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MgPSBjb252ZXJ0VG9UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljcyhjb2xvclZhbHVlLnRyYW5zZmVyX2NoYXJhY3RlcmlzdGljcy52YWx1ZSgpKTsK
KyAgICAgICAgaWYgKGNvbG9yVmFsdWUubWF0cml4X2NvZWZmaWNpZW50cy5pc19wcmVzZW50KCkp
CisgICAgICAgICAgICByZWNvcmQubWF0cml4Q29lZmZpY2llbnRzID0gY29udmVydFRvTWF0cml4
Q29lZmZpY2llbnRzKGNvbG9yVmFsdWUubWF0cml4X2NvZWZmaWNpZW50cy52YWx1ZSgpKTsKKyAg
ICAgICAgaWYgKGNvbG9yVmFsdWUucHJpbWFyaWVzLmlzX3ByZXNlbnQoKSkKKyAgICAgICAgICAg
IHJlY29yZC5jb2xvclByaW1hcmllcyA9IGNvbnZlcnRUb0NvbG9yUHJpbWFyaWVzKGNvbG9yVmFs
dWUucHJpbWFyaWVzLnZhbHVlKCkpOworICAgIH0KKworICAgIGNvbnN0ZXhwciBzaXplX3QgVlBD
b2RlY0NvbmZpZ3VyYXRpb25Db250ZW50c1NpemUgPSAxMjsKKworICAgIHVpbnQzMl90IHZlcnNp
b25BbmRGbGFncyA9IDEgPDwgMjQ7CisgICAgdWludDhfdCBiaXREZXB0aENocm9tYUFuZFJhbmdl
ID0gKDB4RiAmIHJlY29yZC5iaXREZXB0aCkgPDwgNCB8ICgweDcgJiByZWNvcmQuY2hyb21hU3Vi
c2FtcGxpbmcpIDw8IDEgfCAoMHgxICYgcmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxhZyk7CisgICAg
dWludDE2X3QgY29kZWNJbnRpYWxpemF0aW9uRGF0YVNpemUgPSAwOworCisgICAgYXV0byB2aWV3
ID0gSlNDOjpEYXRhVmlldzo6Y3JlYXRlKEFycmF5QnVmZmVyOjpjcmVhdGUoVlBDb2RlY0NvbmZp
Z3VyYXRpb25Db250ZW50c1NpemUsIDEpLCAwLCBWUENvZGVjQ29uZmlndXJhdGlvbkNvbnRlbnRz
U2l6ZSk7CisgICAgdmlldy0+c2V0KDAsIHZlcnNpb25BbmRGbGFncywgZmFsc2UpOworICAgIHZp
ZXctPnNldCg0LCByZWNvcmQucHJvZmlsZSwgZmFsc2UpOworICAgIHZpZXctPnNldCg1LCByZWNv
cmQubGV2ZWwsIGZhbHNlKTsKKyAgICB2aWV3LT5zZXQoNiwgYml0RGVwdGhDaHJvbWFBbmRSYW5n
ZSwgZmFsc2UpOworICAgIHZpZXctPnNldCg3LCByZWNvcmQuY29sb3JQcmltYXJpZXMsIGZhbHNl
KTsKKyAgICB2aWV3LT5zZXQoOCwgcmVjb3JkLnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLCBmYWxz
ZSk7CisgICAgdmlldy0+c2V0KDksIHJlY29yZC5tYXRyaXhDb2VmZmljaWVudHMsIGZhbHNlKTsK
KyAgICB2aWV3LT5zZXQoMTAsIGNvZGVjSW50aWFsaXphdGlvbkRhdGFTaXplLCBmYWxzZSk7CisK
KyAgICBhdXRvIGRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCAoY29uc3QgVUludDggKil2aWV3LT5kYXRhKCksIHZpZXctPmJ5dGVMZW5ndGgoKSkpOworCisg
ICAgQ0ZUeXBlUmVmIGNvbmZpZ3VyYXRpb25LZXlzW10gPSB7IENGU1RSKCJ2cGNDIikgfTsKKyAg
ICBDRlR5cGVSZWYgY29uZmlndXJhdGlvblZhbHVlc1tdID0geyBkYXRhLmdldCgpIH07CisgICAg
YXV0byBjb25maWd1cmF0aW9uRGljdCA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFs
bG9jYXRvckRlZmF1bHQsIGNvbmZpZ3VyYXRpb25LZXlzLCBjb25maWd1cmF0aW9uVmFsdWVzLCBX
VEZfQVJSQVlfTEVOR1RIKGNvbmZpZ3VyYXRpb25LZXlzKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5
Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworCisgICAgVmVj
dG9yPENGVHlwZVJlZj4gZXh0ZW5zaW9uc0tleXMgeyBrQ01Gb3JtYXREZXNjcmlwdGlvbkV4dGVu
c2lvbl9TYW1wbGVEZXNjcmlwdGlvbkV4dGVuc2lvbkF0b21zIH07CisgICAgVmVjdG9yPENGVHlw
ZVJlZj4gZXh0ZW5zaW9uc1ZhbHVlcyA9IHsgY29uZmlndXJhdGlvbkRpY3QuZ2V0KCkgfTsKKwor
ICAgIGlmIChyZWNvcmQudmlkZW9GdWxsUmFuZ2VGbGFnID09IFZQQ29uZmlndXJhdGlvblJhbmdl
OjpGdWxsUmFuZ2UpIHsKKyAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtDTUZvcm1hdERl
c2NyaXB0aW9uRXh0ZW5zaW9uX0Z1bGxSYW5nZVZpZGVvKTsKKyAgICAgICAgZXh0ZW5zaW9uc1Zh
bHVlcy5hcHBlbmQoa0NGQm9vbGVhblRydWUpOworICAgIH0KKworICAgIGlmIChhdXRvIGNtQ29s
b3JQcmltYXJpZXMgPSBjb252ZXJ0VG9DTUNvbG9yUHJpbWFyaWVzKHJlY29yZC5jb2xvclByaW1h
cmllcykpIHsKKyAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyQ29s
b3JQcmltYXJpZXNLZXkpOworICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbUNvbG9y
UHJpbWFyaWVzKTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBjbVRyYW5zZmVyRnVuY3Rpb24gPSBj
b252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24ocmVjb3JkLnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
KSkgeworICAgICAgICBleHRlbnNpb25zS2V5cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJUcmFuc2Zl
ckZ1bmN0aW9uS2V5KTsKKyAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21UcmFuc2Zl
ckZ1bmN0aW9uKTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBjbU1hdHJpeCA9IGNvbnZlcnRUb0NN
WUNiQ1JNYXRyaXgocmVjb3JkLm1hdHJpeENvZWZmaWNpZW50cykpIHsKKyAgICAgICAgZXh0ZW5z
aW9uc0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhLZXkpOworICAgICAgICBl
eHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbU1hdHJpeCk7CisgICAgfQorCisgICAgYXV0byBleHRl
bnNpb25zID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
ZXh0ZW5zaW9uc0tleXMuZGF0YSgpLCBleHRlbnNpb25zVmFsdWVzLmRhdGEoKSwgZXh0ZW5zaW9u
c0tleXMuc2l6ZSgpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGlj
dGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisKKyAgICBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25S
ZWYgZm9ybWF0RGVzY3JpcHRpb24gPSBudWxscHRyOworICAgIGlmIChub0VyciAhPSBDTVZpZGVv
Rm9ybWF0RGVzY3JpcHRpb25DcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NNVmlkZW9Db2Rl
Y1R5cGVfVlA5LCBwYXJzZXIud2lkdGgoKSwgcGFyc2VyLmhlaWdodCgpLCBleHRlbnNpb25zLmdl
dCgpLCAmZm9ybWF0RGVzY3JpcHRpb24pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gYWRvcHRDRihmb3JtYXREZXNjcmlwdGlvbik7Cit9CisKIH0KIAogI2VuZGlmIC8vIFBM
QVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YjFmNjM3YzAyNGY4YzU4N2VhY2IzYjdlYTAxNzcyNjNjYTg3ODM0OQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxp
dGllc0NvY29hLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgUExBVEZPUk0oQ09DT0EpCisKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK2Ns
YXNzIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb247Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBvcGFxdWVD
TUZvcm1hdERlc2NyaXB0aW9uKiBDTUZvcm1hdERlc2NyaXB0aW9uUmVmOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2Jvb2wgaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCk7CitSZXRhaW5QdHI8
Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlVm9yYmlzQXVkaW9Gb3JtYXREZXNjcmlwdGlv
bihzaXplX3QsIGNvbnN0IHZvaWQqKTsKKworYm9vbCBpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCk7
CitSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlT3B1c0F1ZGlvRm9ybWF0
RGVzY3JpcHRpb24oc2l6ZV90LCBjb25zdCB2b2lkKik7CisKK30KKworI2VuZGlmIC8vICYmIFBM
QVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mMjczZGNlMTU3ZGNlZjYyY2Y1ZmZhNzY5MjI5NGM5MWVjMWE2Y2ZkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRp
bGl0aWVzQ29jb2EubW0KQEAgLTAsMCArMSwyMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW1wb3J0ICJj
b25maWcuaCIKKyNpbXBvcnQgIldlYk1BdWRpb1V0aWxpdGllc0NvY29hLmgiCisKKyNpZiBQTEFU
Rk9STShDT0NPQSkKKworI2ltcG9ydCAiQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCisjaW1w
b3J0ICJMb2dnaW5nLmgiCisjaW1wb3J0ICJNZWRpYVV0aWxpdGllcy5oIgorI2ltcG9ydCA8QXVk
aW9Ub29sYm94L0F1ZGlvQ29tcG9uZW50Lmg+CisjaW1wb3J0IDxBdWRpb1Rvb2xib3gvQXVkaW9G
b3JtYXQuaD4KKyNpbXBvcnQgPENvcmVNZWRpYS9DTUZvcm1hdERlc2NyaXB0aW9uLmg+CisjaW1w
b3J0IDxkbGZjbi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoVk9SQklT
KSB8fCBFTkFCTEUoT1BVUykKK3N0YXRpYyBib29sIHJlZ2lzdGVyRGVjb2RlckZhY3RvcnkoY29u
c3QgY2hhciogZGVjb2Rlck5hbWUsIE9TVHlwZSBkZWNvZGVyVHlwZSkKK3sKKyAgICBjb25zdGV4
cHIgY2hhciBhdWRpb0NvbXBvbmVudHNEeWxpYltdID0gIi9TeXN0ZW0vTGlicmFyeS9Db21wb25l
bnRzL0F1ZGlvQ29kZWNzLmNvbXBvbmVudC9Db250ZW50cy9NYWNPUy9BdWRpb0NvZGVjcyI7Cisg
ICAgdm9pZCAqaGFuZGxlID0gZGxvcGVuKGF1ZGlvQ29tcG9uZW50c0R5bGliLCBSVExEX0xBWlkg
fCBSVExEX0xPQ0FMKTsKKyAgICBpZiAoIWhhbmRsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgQXVkaW9Db21wb25lbnRGYWN0b3J5RnVuY3Rpb24gZGVjb2RlckZhY3RvcnkgPSByZWlu
dGVycHJldF9jYXN0PEF1ZGlvQ29tcG9uZW50RmFjdG9yeUZ1bmN0aW9uPihkbHN5bShoYW5kbGUs
IGRlY29kZXJOYW1lKSk7CisgICAgaWYgKCFkZWNvZGVyRmFjdG9yeSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgQXVkaW9Db21wb25lbnREZXNjcmlwdGlvbiBkZXNjIHsgJ2FkZWMnLCBk
ZWNvZGVyVHlwZSwgJ2FwcGwnLCBrQXVkaW9Db21wb25lbnRGbGFnX1NhbmRib3hTYWZlLCAwIH07
CisgICAgaWYgKCFBdWRpb0NvbXBvbmVudFJlZ2lzdGVyKCZkZXNjLCBDRlNUUigiIiksIDAsIGRl
Y29kZXJGYWN0b3J5KSkgeworICAgICAgICBkbGNsb3NlKGhhbmRsZSk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIFJldGFpblB0
cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uRm9y
Rm9ybWF0KE9TVHlwZSBmb3JtYXRJRCwgVmVjdG9yPHVpbnQ4X3Q+IG1hZ2ljQ29va2llKQorewor
ICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBhc2JkIHsgfTsKKyAgICBhc2JkLm1Gb3Jt
YXRJRCA9IGZvcm1hdElEOworICAgIHVpbnQzMl90IHNpemUgPSBzaXplb2YoYXNiZCk7CisgICAg
YXV0byBlcnJvciA9IEF1ZGlvRm9ybWF0R2V0UHJvcGVydHkoa0F1ZGlvRm9ybWF0UHJvcGVydHlf
Rm9ybWF0SW5mbywgbWFnaWNDb29raWUuc2l6ZSgpLCBtYWdpY0Nvb2tpZS5kYXRhKCksICZzaXpl
LCAmYXNiZCk7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE1l
ZGlhLCAiY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkZvckZvcm1hdCBmYWlsZWQgd2l0aCBl
cnJvciAlZCAoJS40cykiLCBlcnJvciwgKGNoYXIgKikmZXJyb3IpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlv
bihDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oYXNiZCksIG1hZ2ljQ29va2llLnNpemUoKSwgbWFn
aWNDb29raWUuZGF0YSgpKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoVk9SQklTKSB8fCBFTkFCTEUo
T1BVUykKKworI2lmIEVOQUJMRShPUFVTKQorc3RhdGljIFZlY3Rvcjx1aW50OF90PiBjb29raWVG
cm9tT3B1c0NvZGVjUHJpdmF0ZShzaXplX3QsIGNvbnN0IHZvaWQqKQoreworICAgIHJldHVybiB7
IH07Cit9CisjZW5kaWYKKworYm9vbCBpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCkKK3sKKyAgICBz
dGF0aWMgYm9vbCBhdmFpbGFibGU7CisKKyNpZiBFTkFCTEUoT1BVUykgJiYgUExBVEZPUk0oTUFD
KQorICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOworICAgIGRpc3BhdGNoX29u
Y2UoJm9uY2VUb2tlbiwgXnsKKyAgICAgICAgYXZhaWxhYmxlID0gcmVnaXN0ZXJEZWNvZGVyRmFj
dG9yeSgiQUNPcHVzRGVjb2RlckZhY3RvcnkiLCAnb3B1cycpOworICAgIH0pOworI2VuZGlmCisK
KyAgICByZXR1cm4gYXZhaWxhYmxlOworfQorCitSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlv
blJlZj4gY3JlYXRlT3B1c0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24oc2l6ZV90IHByaXZhdGVEYXRh
U2l6ZSwgY29uc3Qgdm9pZCogcHJpdmF0ZURhdGEpCit7CisjaWYgRU5BQkxFKE9QVVMpCisgICAg
aWYgKCFpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgYXV0byBjb29raWVEYXRhID0gY29va2llRnJvbU9wdXNDb2RlY1ByaXZhdGUocHJpdmF0
ZURhdGFTaXplLCBwcml2YXRlRGF0YSk7CisgICAgaWYgKCFjb29raWVEYXRhLnNpemUoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gY3JlYXRlQXVkaW9Gb3JtYXREZXNj
cmlwdGlvbkZvckZvcm1hdCgnb3B1cycsIGNvb2tpZURhdGEpOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0ocHJpdmF0ZURhdGFTaXplKTsKKyAgICBVTlVTRURfUEFSQU0ocHJpdmF0ZURhdGEpOwor
ICAgIHJldHVybiBudWxscHRyOworI2VuZGlmCit9CisKKyNpZiBFTkFCTEUoVk9SQklTKQorc3Rh
dGljIFZlY3Rvcjx1aW50OF90PiBjb29raWVGcm9tVm9yYmlzQ29kZWNQcml2YXRlKHNpemVfdCBj
b2RlY1ByaXZhdGVTaXplLCBjb25zdCB2b2lkKiBjb2RlY1ByaXZhdGVEYXRhKQoreworICAgIC8v
IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLWNlbGxhci1jb2RlYy0wMwor
ICAgIC8vIDYuNC4xNS4gQV9WT1JCSVMKKyAgICAvLyBDb2RlYyBJRDogQV9WT1JCSVMKKyAgICAv
LyBDb2RlYyBOYW1lOiBWb3JiaXMKKyAgICAvLyBJbml0aWFsaXphdGlvbjogVGhlICJQcml2YXRl
IERhdGEiIGNvbnRhaW5zIHRoZSBmaXJzdCB0aHJlZSBWb3JiaXMgcGFja2V0IGluIG9yZGVyLiBU
aGUgbGVuZ3RocyBvZiB0aGUKKyAgICAvLyBwYWNrZXRzIHByZWNlZGVzIHRoZW0uIFRoZSBhY3R1
YWwgbGF5b3V0IGlzOgorICAgIC8vIC0gQnl0ZSAxOiBudW1iZXIgb2YgZGlzdGluY3QgcGFja2V0
cyAnIiNwIicgbWludXMgb25lIGluc2lkZSB0aGUgQ29kZWNQcml2YXRlIGJsb2NrLlRoaXMgTVVT
VCBiZSAnMicKKyAgICAvLyAgIGZvciBjdXJyZW50IChhcyBvZiAyMDE2LTA3LTA4KSBWb3JiaXMg
aGVhZGVycy4KKyAgICAvLyAtIEJ5dGVzIDIuLm46IGxlbmd0aHMgb2YgdGhlIGZpcnN0ICciI3Ai
JyBwYWNrZXRzLCBjb2RlZCBpbiBYaXBoLXN0eWxlIGxhY2luZy4gVGhlIGxlbmd0aCBvZiB0aGUg
bGFzdAorICAgIC8vICAgcGFja2V0IGlzIHRoZSBsZW5ndGggb2YgdGhlIENvZGVjUHJpdmF0ZSBi
bG9jayBtaW51cyB0aGUgbGVuZ3RocyBjb2RlZCBpbiB0aGVzZSBieXRlcyBtaW51cyBvbmUuCisg
ICAgLy8gLSBCeXRlcyBuKzEuLjogVGhlIFZvcmJpcyBpZGVudGlmaWNhdGlvbiBoZWFkZXIsIGZv
bGxvd2VkIGJ5IHRoZSBWb3JiaXMgY29tbWVudCBoZWFkZXIgZm9sbG93ZWQgYnkgdGhlCisgICAg
Ly8gICBjb2RlYyBzZXR1cCBoZWFkZXIuCisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwcml2
YXRlRGF0YVB0ciA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihjb2RlY1ByaXZh
dGVEYXRhKTsKKworICAgIGNvbnN0IGludCB2b3JiaXNNaW5pbXVtQ29va2llU2l6ZSA9IDM7Cisg
ICAgaWYgKGNvZGVjUHJpdmF0ZVNpemUgPCB2b3JiaXNNaW5pbXVtQ29va2llU2l6ZSkgeworICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihNZWRpYSwgImNvb2tpZUZyb21Wb3JiaXNDb2RlY1ByaXZh
dGU6IGNvZGVjIHByaXZhdGUgZGF0YSB0b28gc21hbGwgKCV6dSkiLCBjb2RlY1ByaXZhdGVTaXpl
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICAvLyBEZXNwaXRlIHRoZSAiVGhp
cyBNVVNUIGJlICcyJyIgY29tbWVudCBpbiB0aGUgSUVURiBkb2N1bWVudCwgcGFja2V0IGNvdW50
IGlzIG5vdCBhbHdheXMgZXF1YWwgdG8KKyAgICAvLyAyIGluIHJlYWwtd29yZCBmaWxlcywgc28g
aWdub3JlIHRoYXQgZmllbGQuCisgICAgY29uc3QgdWludDE2X3QgaWRIZWFkZXJTaXplID0gcHJp
dmF0ZURhdGFQdHJbMV07CisgICAgY29uc3QgdWludDE2X3QgY29tbWVudEhlYWRlclNpemUgPSBw
cml2YXRlRGF0YVB0clsyXTsKKyAgICBjb25zdCB1aW50MTZfdCBjYWxjdWxhdGVkSGVhZGVyU2l6
ZSA9IDEgKyBpZEhlYWRlclNpemUgKyBjb21tZW50SGVhZGVyU2l6ZTsKKyAgICBpZiAoMSArIGlk
SGVhZGVyU2l6ZSArIGNvbW1lbnRIZWFkZXJTaXplID4gY29kZWNQcml2YXRlU2l6ZSkgeworICAg
ICAgICBSRUxFQVNFX0xPR19FUlJPUihNZWRpYSwgImNvb2tpZUZyb21Wb3JiaXNDb2RlY1ByaXZh
dGU6IGNvZGVjIHByaXZhdGUgZGF0YSB0b28gc21hbGwgKCV6dSkgZm9yIGhlYWRlciBzaXplcyAo
JWQpIiwgY29kZWNQcml2YXRlU2l6ZSwgY2FsY3VsYXRlZEhlYWRlclNpemUpOworICAgICAgICBy
ZXR1cm4geyB9OworICAgIH0KKworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGlkSGVhZGVyID0g
JnByaXZhdGVEYXRhUHRyWzNdOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvbW1lbnRIZWFk
ZXIgPSBpZEhlYWRlciArIGlkSGVhZGVyU2l6ZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBj
b2RlY1NldHVwSGVhZGVyID0gY29tbWVudEhlYWRlciArIGNvbW1lbnRIZWFkZXJTaXplOworICAg
IGNvbnN0IHVpbnQxNl90IGNvZGVjU2V0dXBIZWFkZXJTaXplID0gY29kZWNQcml2YXRlU2l6ZSAt
IGlkSGVhZGVyU2l6ZSAtIGNvbW1lbnRIZWFkZXJTaXplIC0gMiAtIDE7CisKKyAgICBpZiAoKGlk
SGVhZGVyU2l6ZSArIGNvbW1lbnRIZWFkZXJTaXplICsgY29kZWNTZXR1cEhlYWRlclNpemUgKyAz
KSA+IGNvZGVjUHJpdmF0ZVNpemUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTWVkaWEs
ICJjb29raWVGcm9tVm9yYmlzQ29kZWNQcml2YXRlOiBjb2RlYyBwcml2YXRlIGhlYWRlciBzaXpl
IGlzIGludmFsaWQgLSBpZCA9ICVkLCBjb21tZW50ID0gJWQsIGhlYWRlciA9ICVkLCBjaHVuayBz
aXplID0gJXp1IiwgaWRIZWFkZXJTaXplLCBjb21tZW50SGVhZGVyU2l6ZSwgY29kZWNTZXR1cEhl
YWRlclNpemUsIGNvZGVjUHJpdmF0ZVNpemUpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0K
KworICAgIFZlY3Rvcjx1aW50OF90PiBjb29raWVEYXRhOworICAgIGNvb2tpZURhdGEuYXBwZW5k
KHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IHVpbnQ4X3QqPigmaWRIZWFkZXJTaXplKSwgc2l6
ZW9mKGlkSGVhZGVyU2l6ZSkpOworICAgIGNvb2tpZURhdGEuYXBwZW5kKGlkSGVhZGVyLCBpZEhl
YWRlclNpemUpOworCisgICAgY29va2llRGF0YS5hcHBlbmQocmVpbnRlcnByZXRfY2FzdF9wdHI8
Y29uc3QgdWludDhfdCo+KCZjb21tZW50SGVhZGVyU2l6ZSksIHNpemVvZihjb21tZW50SGVhZGVy
U2l6ZSkpOworICAgIGNvb2tpZURhdGEuYXBwZW5kKGNvbW1lbnRIZWFkZXIsIGNvbW1lbnRIZWFk
ZXJTaXplKTsKKworICAgIGNvb2tpZURhdGEuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNv
bnN0IHVpbnQ4X3QqPigmY29kZWNTZXR1cEhlYWRlclNpemUpLCBzaXplb2YoY29kZWNTZXR1cEhl
YWRlclNpemUpKTsKKyAgICBjb29raWVEYXRhLmFwcGVuZChjb2RlY1NldHVwSGVhZGVyLCBjb2Rl
Y1NldHVwSGVhZGVyU2l6ZSk7CisKKyAgICByZXR1cm4gY29va2llRGF0YTsKK30KKyNlbmRpZiAv
LyBFTkFCTEUoVk9SQklTKQorCitib29sIGlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpCit7Cisg
ICAgc3RhdGljIGJvb2wgYXZhaWxhYmxlOworCisjaWYgRU5BQkxFKFZPUkJJUykgJiYgUExBVEZP
Uk0oTUFDKQorICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOworICAgIGRpc3Bh
dGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKKyAgICAgICAgYXZhaWxhYmxlID0gcmVnaXN0ZXJEZWNv
ZGVyRmFjdG9yeSgiQUNWb3JiaXNEZWNvZGVyRmFjdG9yeSIsICd2b3JiJyk7CisgICAgfSk7Cisj
ZW5kaWYKKworICAgIHJldHVybiBhdmFpbGFibGU7Cit9CisKK1JldGFpblB0cjxDTUZvcm1hdERl
c2NyaXB0aW9uUmVmPiBjcmVhdGVWb3JiaXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKHNpemVfdCBw
cml2YXRlRGF0YVNpemUsIGNvbnN0IHZvaWQqIHByaXZhdGVEYXRhKQoreworI2lmIEVOQUJMRShW
T1JCSVMpCisgICAgaWYgKCFpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGNvb2tpZURhdGEgPSBjb29raWVGcm9tVm9yYmlzQ29k
ZWNQcml2YXRlKHByaXZhdGVEYXRhU2l6ZSwgcHJpdmF0ZURhdGEpOworICAgIGlmICghY29va2ll
RGF0YS5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGNyZWF0
ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25Gb3JGb3JtYXQoJ3ZvcmInLCBjb29raWVEYXRhKTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKHByaXZhdGVEYXRhU2l6ZSk7CisgICAgVU5VU0VEX1BBUkFN
KHByaXZhdGVEYXRhKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRpZgorfQorCit9CisKKyNl
bmRpZiAvLyBQTEFURk9STShDT0NPQSkK
</data>
<flag name="commit-queue"
          id="433296"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415926</attachid>
            <date>2020-12-10 13:58:31 -0800</date>
            <delta_ts>2020-12-10 14:30:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219755-20201210135831.patch</filename>
            <type>text/plain</type>
            <size>85178</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwNjM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGE5YjdjY2JmMTY3YWI0
M2I1YWYzZWIzZmI0Y2QzMDM2MTdiZmI3ZS4uNWM4MGJlYWYwOWIzODNiNzcxMWVlMzMyNzIwODg0
ZDA5N2Y4Nzk0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDIwLTEyLTEwICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNU0VdIFJlZmFj
dG9yIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gaW4gcHJlcGFyYXRpb24gZm9yIHN1cHBvcnRpbmcg
YXVkaW8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
OTc1NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzIxOTI2MjU+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgSmVyIE5vYmxlLgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBXZWJNIHBhcnNlciBpbiBw
cmVwYXJhdGlvbiBmb3Igc3VwcG9ydGluZyBhdWRpbzogbW92ZSBWUDktc3BlY2lmaWMgY29kZQor
ICAgICAgICBpbnRvIFZQOVV0aWxpdGllc0NvY29hLCBjb252ZXJ0IFRyYWNrRGF0YSBmcm9tIGEg
c3RydWN0IHRvIGEgY2xhc3MgYW5kIG1hZGUgZGVyaXZlZAorICAgICAgICBjbGFzc2VzIGZvciBh
dWRpbyBhbmQgdmlkZW8sIGFkZCBzdHViIGZ1bmN0aW9uIHRvIGNyZWF0ZSBmb3JtYXQgZGVzY3Jp
cHRpb25zIGZvciAKKyAgICAgICAgVm9yYmlzIGFuZCBPcHVzIGF1ZGlvLgorCisgICAgICAgICog
U291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9NZWRpYVV0aWxpdGllcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKTogQWRkIG9wdGlv
bmFsIHBhcmFtZXRlcnMgZm9yIG1hZ2ljIGNvb2tpZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2Nv
YS9NZWRpYVV0aWxpdGllcy5oOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
U291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjppc0NvbnRlbnRUeXBlU3VwcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpyZXNldFBhcnNlclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uVHJhY2tFbnRyeSk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkZyYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnByb3ZpZGVNZWRpYURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OmNv
bnN1bWVGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6VmlkZW9UcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNr
RGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OmZsdXNoUGVuZGluZ0F1ZGlvQnVmZmVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRNaW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9Db2xvclByaW1hcmllcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9DTUNvbG9yUHJpbWFyaWVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NNVHJhbnNmZXJGdW5jdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9NYXRyaXhDb2VmZmljaWVudHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01ZQ2JDUk1hdHJpeCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0U3Vic2FtcGxpbmdYWVRvQ2hyb21hU3Vic2FtcGxp
bmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRm9ybWF0RGVzY3JpcHRpb25G
cm9tVlA5SGVhZGVyUGFyc2VyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmg6CisgICAgICAgIChpc1R5cGUpOgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NvbG9yUHJpbWFyaWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnRUb0NNQ29sb3JQcmltYXJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVy
dFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRv
Q01UcmFuc2ZlckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb01hdHJpeENv
ZWZmaWNpZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9DTVlDYkNSTWF0cml4KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJzYW1wbGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDlIZWFk
ZXJQYXJzZXIpOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlv
VXRpbGl0aWVzQ29jb2EuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
cmVnaXN0ZXJEZWNvZGVyRmFjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBdWRpb0Zv
cm1hdERlc2NyaXB0aW9uRm9yRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZUZyb21P
cHVzQ29kZWNQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzT3B1c0RlY29kZXJBdmFpbGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlT3B1c0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Y29va2llRnJvbVZvcmJpc0NvZGVjUHJpdmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjppc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlVm9yYmlzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbik6CisKIDIwMjAtMTItMTAgIFph
bGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIEludHJv
ZHVjZSBJbmxpbmVUZXh0SXRlbTo6aXNXb3JkU2VwYXJhdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4
dAppbmRleCA4Zjk5ZjlhMTkxOGM5NTU4ODVmYjJhY2I5OWM4ZDFhNzUyNjVhYTAzLi5lNTkxMzlm
YmI0NTY1MGRlZjk5NmY4MjFkNWNhZmE0MGI3MmQ4ZWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50
eHQKQEAgLTM3Niw2ICszNzYsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJDb3JlQ0FM
YXllckV4dHJhcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViQ29yZURlY29tcHJlc3Np
b25TZXNzaW9uLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tCiBwbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHUFVMYXllci5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvV2ViTVV0aWxpdGllc0NvY29hLm1tIEBuby11bmlmeQogcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvVmlkZW9UcmFja1ByaXZhdGVXZWJNLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQv
Rm9udENhc2NhZGVDb3JlVGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRD
b3JlVGV4dC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBiZTRmY2FmZjlmYzkyNTliNDZjMzUzOWI2ZWE5M2FmNGFkYzdmYjI1
Li5mZjUyYTA2YTI2NzYzYzdlN2I4Nzg1NGQ3Mjk0NDBlYTIyNWE2NGNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMTgsNiAr
MjE4LDggQEAKIAkJMDdFRTc2RUMxQkU5NkRCMDAwRjg5MTMzIC8qIE1vY2tSZWFsdGltZVZpZGVv
U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
N0VFNzZFQTFCRTk2REIwMDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwN0VFNzZFRjFC
RUE2MTk4MDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3RUU3NkVEMUJFQTYxOTgwMEY4
OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5oICovOyB9OwogCQkwN0Y0RTkzMzIw
QjM1ODdGMDAyRTM4MDMgLyogQVZBc3NldE1JTUVUeXBlQ2FjaGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3QzhBRDEyMUQwNzNENjMwMDg3QzVDRSAv
KiBBVkFzc2V0TUlNRVR5cGVDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTA3RjVDRkY1MjU4MkE1MUQwMDY2MkVGNSAvKiBXZWJNQXVkaW9V
dGlsaXRpZXNDb2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDdGNUNGRjQyNTgyQTRGODAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29h
LmggKi87IH07CisJCTA3RjVDRkY2MjU4MkE1MjkwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRp
ZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA3RjVDRkYyMjU4MkE0RjgwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbSAq
LzsgfTsKIAkJMDdGODc2ODQxQUQ1ODBGOTAwOTA1ODQ5IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRD
b250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
N0Y4NzY4MzFBRDRBOTQ1MDA5MDU4NDkgLyogTWVkaWFQbGF5YmFja1RhcmdldENvbnRleHQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwN0Y5NDQx
NjE4NjREMDQ2MDA1RDMxQ0IgLyogUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREFFOEMwODE3NDZCOTU3
MDA1MzJENzggLyogUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDdGRTk5REQxODgwN0E3RDAwMjU2
NjQ4IC8qIE1lZGlhRWxlbWVudFNlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA3RkU5OURCMTg4MDdBN0QwMDI1NjY0OCAvKiBNZWRpYUVsZW1l
bnRTZXNzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTU4NzUsNiArNTg3Nyw4IEBACiAJCTA3RUU3NkVBMUJFOTZEQjAwMEY4OTEzMyAvKiBN
b2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwN0VFNzZFRDFCRUE2MTk4MDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9ja1JlYWx0aW1lVmlkZW9Tb3Vy
Y2VNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdFRTc2RUUxQkVBNjE5ODAw
Rjg5MTMzIC8qIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3RjVDRkYyMjU4MkE0RjgwMDY2MkVGNSAvKiBX
ZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYk1BdWRp
b1V0aWxpdGllc0NvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwN0Y1Q0ZG
NDI1ODJBNEY4MDA2NjJFRjUgLyogV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDdGODc2ODMxQUQ0QTk0NTAwOTA1ODQ5IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRDb250
ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUGxheWJhY2tUYXJn
ZXRDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3RkU5OURBMTg4MDdB
N0QwMDI1NjY0OCAvKiBNZWRpYUVsZW1lbnRTZXNzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRWxlbWVudFNlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwN0ZFOTlEQjE4ODA3QTdEMDAyNTY2NDggLyogTWVkaWFFbGVtZW50
U2Vzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUVsZW1lbnRT
ZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjg2Nyw2ICsyNjg3MSw4
IEBACiAJCQkJNDlGRkJGM0UxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIubW0gKi8sCiAJ
CQkJMzE4NDM2REIyMUI5REFBMDAwRUQzODNFIC8qIFdlYkdQVUxheWVyLmggKi8sCiAJCQkJMzE4
NDM2REQyMUI5REFBMDAwRUQzODNFIC8qIFdlYkdQVUxheWVyLm1tICovLAorCQkJCTA3RjVDRkY0
MjU4MkE0RjgwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oICovLAorCQkJCTA3
RjVDRkYyMjU4MkE0RjgwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbSAqLywK
IAkJCSk7CiAJCQlwYXRoID0gY29jb2E7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAt
MzUyNTYsNiArMzUyNjIsNyBAQAogCQkJCTQ5NEJENzk1MEY1NUM4RUUwMDc0NzgyOCAvKiBXZWJL
aXRQb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFDMEZGMjUwRTRDRUI2RTAwN0Q2RkU1IC8q
IFdlYktpdFRyYW5zaXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRjMzMkYwRjJC
OUEyNTAwNEI2Nzk1IC8qIFdlYkxheWVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwN0Y1Q0ZGNTI1
ODJBNTFEMDA2NjJFRjUgLyogV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCBpbiBIZWFkZXJzICov
LAogCQkJCTA3MDlENzhGMUFFNTU1NTQwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzA5RDc5NTFBRTU1QTI5MDA0RTQyRjggLyogV2ViTWVk
aWFTZXNzaW9uTWFuYWdlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDcwOUQ3OTMxQUU1
NTU3RTAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuaCBpbiBIZWFkZXJzICov
LApAQCAtMzY2MTAsNiArMzY2MTcsNyBAQAogCQkJCTJEMDYyMTREMURBNjNBOEIwMEE3RkIyNiAv
KiBXZWJLaXRNZWRpYUtleXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQwNjIxNEYxREE2M0E5
MTAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5U2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3QzQ4QTZEMDE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTA3RjVDRkY2MjU4MkE1MjkwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRp
ZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA3MDlENzkyMUFFNTU1N0UwMDRFNDJGOCAv
KiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDQUYz
NDgyMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3QubW0gaW4gU291cmNlcyAqLywK
IAkJCQlDRUNEQzkzQzIxRjI5NzI5MDA5NzZCRDEgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckFWS2l0Lm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9NZWRpYVV0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9NZWRpYVV0aWxpdGllcy5jcHAKaW5kZXggYjQ4YjRmNTYzMzJkMDU5ZDlmYjE3NzU1
NDMwYTFmOGUwNTYyY2NjNS4uYTUzMzMyY2Y3ZGJkNjQ2NmY0NGY1NzZkMWNkN2FkZTc2MTUwYWE0
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTWVkaWFVdGlsaXRp
ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL01lZGlhVXRpbGl0aWVz
LmNwcApAQCAtMzUsMTEgKzM1LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFt
ZXNwYWNlIFBBTDsKIAotUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUF1
ZGlvRm9ybWF0RGVzY3JpcHRpb24oY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24pCitSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9Gb3Jt
YXREZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwg
c2l6ZV90IG1hZ2ljQ29va2llU2l6ZSwgY29uc3Qgdm9pZCogbWFnaWNDb29raWUpCiB7CiAgICAg
YXV0byBiYXNpY0Rlc2NyaXB0aW9uID0gV1RGOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rl
c2NyaXB0aW9uKj4oZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9u
KTsKICAgICBDTUZvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdCA9IG51bGxwdHI7Ci0gICAgYXV0
byBlcnJvciA9IENNQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBiYXNpY0Rlc2NyaXB0aW9uLCAwLCBudWxscHRyLCAwLCBudWxscHRyLCBudWxscHRyLCAm
Zm9ybWF0KTsKKyAgICBhdXRvIGVycm9yID0gQ01BdWRpb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGJhc2ljRGVzY3JpcHRpb24sIDAsIG51bGxwdHIsIG1hZ2lj
Q29va2llU2l6ZSwgbWFnaWNDb29raWUsIG51bGxwdHIsICZmb3JtYXQpOwogICAgIGlmIChlcnJv
cikgewogICAgICAgICBMT0dfRVJST1IoImNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24gZmFp
bGVkIHdpdGggJWQiLCBlcnJvcik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTWVkaWFVdGlsaXRpZXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL01lZGlhVXRpbGl0aWVzLmgKaW5kZXggNmI2N2M2Njc4
NWQ0N2QyNzAyYjVjNjQ5ZWYyODVlNGIwYTVlMTI2Ni4uOTE3MDhlYTIyYWQ0YjViYmM3ZWY4OWQ0
Y2I1ZGIzNTk5ZDhlNjI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvTWVkaWFVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9N
ZWRpYVV0aWxpdGllcy5oCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb247CiBjbGFzcyBQbGF0Zm9ybUF1ZGlvRGF0YTsKIAot
UmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3Jp
cHRpb24oY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYpOworUmV0YWluUHRyPENNRm9ybWF0
RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24oY29uc3QgQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbiYsIHNpemVfdCBtYWdpY0Nvb2tpZVNpemUgPSAwLCBjb25zdCB2b2lk
KiBtYWdpY0Nvb2tpZSA9IG51bGxwdHIpOwogUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBj
cmVhdGVBdWRpb1NhbXBsZUJ1ZmZlcihjb25zdCBQbGF0Zm9ybUF1ZGlvRGF0YSYsIGNvbnN0IEF1
ZGlvU3RyZWFtRGVzY3JpcHRpb24mLCBDTVRpbWUsIHNpemVfdCBzYW1wbGVDb3VudCk7CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKaW5k
ZXggYmUxZTA4NmUwYWM1MjM1NDYzNmEwMDZhYjMyZDFiOTJmNDBiNGQ4MS4uZTVhZjFlMmNkZGU2
NmE1YTUzMDg1MDc3ZDYzMWI4Yzg3NTgxYzg4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2Vy
V2ViTS5jcHAKQEAgLTM5LDExICszOSwxMyBAQAogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgog
I2luY2x1ZGUgIlZQOVV0aWxpdGllc0NvY29hLmgiCiAjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZh
dGVXZWJNLmgiCisjaW5jbHVkZSAiV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCIKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9EYXRhVmlldy5oPgogI2luY2x1ZGUgPHdlYm0vd2VibV9wYXJzZXIu
aD4KICNpbmNsdWRlIDx3dGYvQWxnb3JpdGhtcy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxw
ZXIuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpc3QuaD4KICNpbmNsdWRlIDx3dGYvY2Yv
VHlwZUNhc3RzQ0YuaD4KICNpbmNsdWRlIDx3dGYvZGFyd2luL1dlYWtMaW5raW5nLmg+CkBAIC0y
MzYsNyArMjM4LDYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgTG9nQXJndW1lbnQ8V2ViQ29yZTo6U291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU+IHsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgUEFMOwpAQCAtNDU2LDYgKzQ1
Nyw3IEBAIHByaXZhdGU6CiAKIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjppc0NvbnRlbnRUeXBlU3VwcG9ydGVkKGNvbnN0IENvbnRlbnRUeXBl
JiB0eXBlKQogeworI2lmIEVOQUJMRShWUDkpIHx8IEVOQUJMRShWT1JCSVMpIHx8IEVOQUJMRShP
UFVTKQogICAgIGlmICghaXNXZWJtUGFyc2VyQXZhaWxhYmxlKCkpCiAgICAgICAgIHJldHVybiBN
ZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwogCkBAIC00Njcs
MTAgKzQ2OSwxNCBAQCBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGUgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6aXNDb250ZW50VHlwZVN1cHBvcnRlZChjbwogICAgIGlmICghY29kZWNzUGFy
YW1ldGVyKQogICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpN
YXlCZVN1cHBvcnRlZDsKIAotI2lmIEVOQUJMRShWUDkpCiAgICAgYXV0byBzcGxpdFJlc3VsdHMg
PSBTdHJpbmdWaWV3KGNvZGVjc1BhcmFtZXRlcikuc3BsaXQoJywnKTsKICAgICBmb3IgKGF1dG8g
c3BsaXQgOiBzcGxpdFJlc3VsdHMpIHsKKyNpZiBFTkFCTEUoVlA5KQogICAgICAgICBpZiAoc3Bs
aXQuc3RhcnRzV2l0aCgidnAwOSIpKSB7CisKKyAgICAgICAgICAgIGlmICghaXNWUDlEZWNvZGVy
QXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1
cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKICAgICAgICAgICAgIGF1dG8gY29kZWNQYXJh
bWV0ZXJzID0gcGFyc2VWUENvZGVjUGFyYW1ldGVycyhzcGxpdCk7CiAgICAgICAgICAgICBpZiAo
IWNvZGVjUGFyYW1ldGVycykKICAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVt
czo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKQEAgLTQ4MCwxNCArNDg2LDQwIEBAIE1l
ZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppc0Nv
bnRlbnRUeXBlU3VwcG9ydGVkKGNvCiAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgT3B1cyBTdXBwb3J0Ci0gICAgICAgIC8vIEZJWE1FOiBB
ZGQgVm9yYmlzIFN1cHBvcnQKKyNlbmRpZiAvLyBFTkFCTEUoVlA5KQorCisjaWYgRU5BQkxFKFZP
UkJJUykKKyAgICAgICAgaWYgKHNwbGl0ID09ICJ2b3JiaXMiKSB7CisgICAgICAgICAgICBpZiAo
IWlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBNZWRp
YVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOworCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShWT1JCSVMpCisKKyNpZiBF
TkFCTEUoT1BVUykKKyAgICAgICAgaWYgKHNwbGl0ID09ICJvcHVzIikgeworICAgICAgICAgICAg
aWYgKCFpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE1l
ZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKE9QVVMpCisKICAgICAg
ICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7
CiAgICAgfQotICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzU3Vw
cG9ydGVkOwogI2Vsc2UKLSAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBl
OjpJc05vdFN1cHBvcnRlZDsKLSNlbmRpZgorICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKKyNlbmRp
ZiAvLyBFTkFCTEUoVlA5KSB8fCBFTkFCTEUoVk9SQklTKSB8fCBFTkFCTEUoT1BVUykKKworICAg
IHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzU3VwcG9ydGVkOworfQor
CitSZWZQdHI8U291cmNlQnVmZmVyUGFyc2VyV2ViTT4gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
Y3JlYXRlKGNvbnN0IENvbnRlbnRUeXBlJiB0eXBlKQoreworICAgIGlmIChpc0NvbnRlbnRUeXBl
U3VwcG9ydGVkKHR5cGUpICE9IE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RT
dXBwb3J0ZWQpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTSgpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogU291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTSgpCkBAIC01NzEsNiArNjAzLDcgQEAgYm9vbCBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpzaG91bGRQcm92aWRlTWVkaWFkYXRhRm9yVHJhY2tJRCh1aW50
NjRfdCkKIHZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cmVzZXRQYXJzZXJTdGF0ZSgpCiB7
CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CisgICAgZmx1c2hQZW5k
aW5nQXVkaW9CdWZmZXJzKCk7CiAgICAgbV9wYXJzZXItPkRpZFNlZWsoKTsKICAgICBtX3N0YXRl
ID0gU3RhdGU6Ok5vbmU7CiAgICAgbV90cmFja3MuY2xlYXIoKTsKQEAgLTYwNCw3ICs2MzcsNyBA
QCB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldExvZ2dlcihjb25zdCBMb2dnZXImIGxv
Z2dlciwgY29uc3Qgdm9pZCogbG9nSWRlbgogYXV0byBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjp0
cmFja0RhdGFGb3JUcmFja051bWJlcih1aW50NjRfdCB0cmFja051bWJlcikgLT4gVHJhY2tEYXRh
KgogewogICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX3RyYWNrcykgewotICAgICAgICBpZiAodHJh
Y2sudHJhY2sudHJhY2tfbnVtYmVyLmlzX3ByZXNlbnQoKSAmJiB0cmFjay50cmFjay50cmFja19u
dW1iZXIudmFsdWUoKSA9PSB0cmFja051bWJlcikKKyAgICAgICAgaWYgKHRyYWNrLT50cmFjaygp
LnRyYWNrX251bWJlci5pc19wcmVzZW50KCkgJiYgdHJhY2stPnRyYWNrKCkudHJhY2tfbnVtYmVy
LnZhbHVlKCkgPT0gdHJhY2tOdW1iZXIpCiAgICAgICAgICAgICByZXR1cm4gJnRyYWNrOwogICAg
IH0KICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTc0OCw3ICs3ODEsNyBAQCBTdGF0dXMgU291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6T25DbHVzdGVyQmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiBt
ZXRhZGF0YSwgYwogU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uVHJhY2tFbnRyeShj
b25zdCBFbGVtZW50TWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBUcmFja0VudHJ5JiB0cmFja0Vu
dHJ5KQogewogICAgIFVOVVNFRF9QQVJBTShtZXRhZGF0YSk7Ci0gICAgaWYgKCF0cmFja0VudHJ5
LnRyYWNrX3R5cGUuaXNfcHJlc2VudCgpKQorICAgIGlmICghdHJhY2tFbnRyeS50cmFja190eXBl
LmlzX3ByZXNlbnQoKSB8fCAhdHJhY2tFbnRyeS5jb2RlY19pZC5pc19wcmVzZW50KCkpCiAgICAg
ICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogCiAgICAgYXV0byB0cmFj
a1R5cGUgPSB0cmFja0VudHJ5LnRyYWNrX3R5cGUudmFsdWUoKTsKQEAgLTc1Niw4ICs3ODksMzAg
QEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uVHJhY2tFbnRyeShjb25zdCBFbGVt
ZW50TWV0YWRhdGEmIG1ldGFkYXRhLCBjb24KICAgICAgICAgbV9pbml0aWFsaXphdGlvblNlZ21l
bnQtPnZpZGVvVHJhY2tzLmFwcGVuZCh7IE1lZGlhRGVzY3JpcHRpb25XZWJNOjpjcmVhdGUoVHJh
Y2tFbnRyeSh0cmFja0VudHJ5KSksIFZpZGVvVHJhY2tQcml2YXRlV2ViTTo6Y3JlYXRlKFRyYWNr
RW50cnkodHJhY2tFbnRyeSkpIH0pOwogICAgIGVsc2UgaWYgKHRyYWNrVHlwZSA9PSBUcmFja1R5
cGU6OmtBdWRpbykKICAgICAgICAgbV9pbml0aWFsaXphdGlvblNlZ21lbnQtPmF1ZGlvVHJhY2tz
LmFwcGVuZCh7IE1lZGlhRGVzY3JpcHRpb25XZWJNOjpjcmVhdGUoVHJhY2tFbnRyeSh0cmFja0Vu
dHJ5KSksIEF1ZGlvVHJhY2tQcml2YXRlV2ViTTo6Y3JlYXRlKFRyYWNrRW50cnkodHJhY2tFbnRy
eSkpIH0pOwotICAgIG1fdHJhY2tzLmFwcGVuZCh7IFRyYWNrRW50cnkodHJhY2tFbnRyeSksIHsg
fSwgbnVsbHB0ciwgbnVsbHB0ciwgMCB9KTsKIAorICAgIFN0cmluZ1ZpZXcgY29kZWNTdHJpbmcg
eyB0cmFja0VudHJ5LmNvZGVjX2lkLnZhbHVlKCkuZGF0YSgpLCAodW5zaWduZWQpdHJhY2tFbnRy
eS5jb2RlY19pZC52YWx1ZSgpLmxlbmd0aCgpIH07CisjaWYgRU5BQkxFKFZQOSkKKyAgICBpZiAo
Y29kZWNTdHJpbmcgPT0gIlZfVlA5IiAmJiBpc1ZQOURlY29kZXJBdmFpbGFibGUoKSkgeworICAg
ICAgICBtX3RyYWNrcy5hcHBlbmQoVmlkZW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6OlZQ
OSwgdHJhY2tFbnRyeSwgKnRoaXMpKTsKKyAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtP
a0NvbXBsZXRlZCk7CisgICAgfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoVk9SQklTKQorICAgIGlm
IChjb2RlY1N0cmluZyA9PSAiQV9WT1JCSVMiICYmIGlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgp
KSB7CisgICAgICAgIG1fdHJhY2tzLmFwcGVuZChBdWRpb1RyYWNrRGF0YTo6Y3JlYXRlKENvZGVj
VHlwZTo6Vm9yYmlzLCB0cmFja0VudHJ5LCAqdGhpcywgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJh
dGlvbikpOworICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKKyAg
ICB9CisjZW5kaWYKKworI2lmIEVOQUJMRShPUFVTKQorICAgIGlmIChjb2RlY1N0cmluZyA9PSAi
QV9PUFVTIiAmJiBpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgbV90cmFja3Mu
YXBwZW5kKEF1ZGlvVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpPcHVzLCB0cmFja0VudHJ5
LCAqdGhpcywgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbikpOworICAgICAgICByZXR1cm4g
U3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKKyAgICB9CisjZW5kaWYKKworICAgIG1fdHJh
Y2tzLmFwcGVuZChUcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6OlVuc3VwcG9ydGVkLCB0cmFj
a0VudHJ5LCAqdGhpcykpOwogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQp
OwogfQogCkBAIC04MjcsNDA2ICs4ODIsMjg4IEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpPbkJsb2NrR3JvdXBFbmQoY29uc3Qgd2VibTo6RWxlbWVudE1ldGFkYXRhCiAg
ICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLSNpZiBFTkFCTEUo
VlA5KQogCi1zdGF0aWMgdWludDhfdCBjb252ZXJ0VG9Db2xvclByaW1hcmllcyhjb25zdCBQcmlt
YXJpZXMmIGNvZWZmaWNpZW50cykKK3dlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
OjpPbkZyYW1lKGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCBSZWFkZXIqIHJlYWRlciwg
dWludDY0X3QqIGJ5dGVzUmVtYWluaW5nKQogewotICAgIHN3aXRjaCAoY29lZmZpY2llbnRzKSB7
Ci0gICAgY2FzZSBQcmltYXJpZXM6OmtCdDcwOToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJh
dGlvbkNvbG9yUHJpbWFyaWVzOjpCVF83MDlfNjsKLSAgICBjYXNlIFByaW1hcmllczo6a1Vuc3Bl
Y2lmaWVkOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlVu
c3BlY2lmaWVkOwotICAgIGNhc2UgUHJpbWFyaWVzOjprQnQ0NzBNOgotICAgICAgICByZXR1cm4g
VlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzQ3MF82X007Ci0gICAgY2FzZSBQcmlt
YXJpZXM6OmtCdDQ3MEJnOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmlt
YXJpZXM6OkJUXzQ3MF83X0JHOwotICAgIGNhc2UgUHJpbWFyaWVzOjprU21wdGUxNzBNOgotICAg
ICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzYwMV83OwotICAg
IGNhc2UgUHJpbWFyaWVzOjprU21wdGUyNDBNOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0
aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NUXzI0MDsKLSAgICBjYXNlIFByaW1hcmllczo6a0Zp
bG06Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6RmlsbTsK
LSAgICBjYXNlIFByaW1hcmllczo6a0J0MjAyMDoKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJh
dGlvbkNvbG9yUHJpbWFyaWVzOjpCVF8yMDIwX05vbmNvbnN0YW50X0x1bWluYW5jZTsKLSAgICBj
YXNlIFByaW1hcmllczo6a1NtcHRlU3Q0MjgxOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0
aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NUXzQyOF8xOwotICAgIGNhc2UgUHJpbWFyaWVzOjpr
U21wdGVScDQzMToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVz
OjpTTVBURV9SUF80MzFfMjsKLSAgICBjYXNlIFByaW1hcmllczo6a1NtcHRlRWc0MzI6Ci0gICAg
ICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfRUdfNDMyXzE7
Ci0gICAgY2FzZSBQcmltYXJpZXM6OmtKZWRlY1AyMlBob3NwaG9yczoKLSAgICAgICAgcmV0dXJu
IFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpFQlVfVGVjaF8zMjEzX0U7Ci0gICAgfQot
fQorICAgIEFTU0VSVChyZWFkZXIpOworICAgIGlmICghcmVhZGVyKQorICAgICAgICByZXR1cm4g
U3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1lbW9yeSk7CiAKLXN0YXRpYyBDRlN0cmluZ1JlZiBj
b252ZXJ0VG9DTUNvbG9yUHJpbWFyaWVzKHVpbnQ4X3QgcHJpbWFyaWVzKQotewotICAgIHN3aXRj
aCAocHJpbWFyaWVzKSB7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6
QlRfNzA5XzY6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzX0lU
VV9SXzcwOV8yOwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkVCVV9U
ZWNoXzMyMTNfRToKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNf
RUJVXzMyMTM7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfNjAx
Xzc6Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfU1RfMjQw
OgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19TTVBURV9DOwot
ICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1JQXzQzMV8yOgot
ICAgICAgICByZXR1cm4ga0NNRm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19EQ0lfUDM7
Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfRUdfNDMyXzE6
Ci0gICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX1AzX0Q2
NTsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF8yMDIwX05vbmNv
bnN0YW50X0x1bWluYW5jZToKLSAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uQ29s
b3JQcmltYXJpZXNfSVRVX1JfMjAyMDsKLSAgICB9CisgICAgaWYgKCFtX2N1cnJlbnRCbG9jaykK
KyAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtJbnZhbGlkRWxlbWVudElkKTsKIAotICAg
IHJldHVybiBudWxscHRyOwotfQorICAgIGF1dG8qIGJsb2NrID0gV1RGOjpzd2l0Y2hPbigqbV9j
dXJyZW50QmxvY2ssIFtdKEJsb2NrJiBibG9jaykgeworICAgICAgICByZXR1cm4gJmJsb2NrOwor
ICAgIH0sIFtdKFNpbXBsZUJsb2NrJiBibG9jaykgLT4gQmxvY2sqIHsKKyAgICAgICAgcmV0dXJu
ICZibG9jazsKKyAgICB9KTsKKyAgICBpZiAoIWJsb2NrKQorICAgICAgICByZXR1cm4gU3RhdHVz
KFN0YXR1czo6a0ludmFsaWRFbGVtZW50SWQpOwogCi1zdGF0aWMgdWludDhfdCBjb252ZXJ0VG9U
cmFuc2ZlckNoYXJhY3RlcmlzdGljcyhjb25zdCBUcmFuc2ZlckNoYXJhY3RlcmlzdGljcyYgY2hh
cmFjdGVyaXN0aWNzKQotewotICAgIHN3aXRjaCAoY2hhcmFjdGVyaXN0aWNzKSB7Ci0gICAgY2Fz
ZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0J0NzA5OgotICAgICAgICByZXR1cm4gVlBDb25m
aWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzcwOV82OwotICAgIGNhc2UgVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtVbnNwZWNpZmllZDoKLSAgICAgICAgcmV0dXJuIFZQQ29u
ZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpVbnNwZWNpZmllZDsKLSAgICBjYXNl
IFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprR2FtbWEyMmN1cnZlOgotICAgICAgICByZXR1cm4g
VlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzQ3MF82X007Ci0gICAg
Y2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0dhbW1hMjhjdXJ2ZToKLSAgICAgICAgcmV0
dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF80NzBfN19CRzsK
LSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprU21wdGUxNzBNOgotICAgICAgICBy
ZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzYwMV83Owot
ICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtTbXB0ZTI0ME06Ci0gICAgICAgIHJl
dHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U01QVEVfU1RfMjQw
OwotICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtMaW5lYXI6Ci0gICAgICAgIHJl
dHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TGluZWFyOwotICAg
IGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtMb2c6Ci0gICAgICAgIHJldHVybiBWUENv
bmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TG9ncml0aG1pYzsKLSAgICBjYXNl
IFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprTG9nU3FydDoKLSAgICAgICAgcmV0dXJuIFZQQ29u
ZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMb2dyaXRobWljX1NxcnQ7Ci0gICAg
Y2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0llYzYxOTY2MjQ6Ci0gICAgICAgIHJldHVy
biBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SUVDXzYxOTY2XzJfNDsK
LSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprQnQxMzYxRXh0ZW5kZWRDb2xvdXJH
YW11dDoKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjpCVF8xMzYxXzA7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0llYzYx
OTY2MjE6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3Rlcmlz
dGljczo6SUVDXzYxOTY2XzJfMTsKLSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpr
MTBCaXRCdDIwMjA6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljczo6QlRfMjAyMF8xMGJpdDsKLSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjprMTJCaXRCdDIwMjA6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2Zl
ckNoYXJhY3RlcmlzdGljczo6QlRfMjAyMF8xMmJpdDsKLSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjprU21wdGVTdDIwODQ6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U01QVEVfU1RfMjA4NDsKLSAgICBjYXNlIFRyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzOjprU21wdGVTdDQyODE6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3Vy
YXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U01QVEVfU1RfNDI4XzE7Ci0gICAgY2FzZSBU
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0FyaWJTdGRCNjdIbGc6Ci0gICAgICAgIHJldHVybiBW
UENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfMjEwMF9ITEc7CisgICAg
YXV0byB0cmFja051bWJlciA9IGJsb2NrLT50cmFja19udW1iZXI7CisgICAgYXV0byogdHJhY2tE
YXRhID0gdHJhY2tEYXRhRm9yVHJhY2tOdW1iZXIodHJhY2tOdW1iZXIpOworICAgIGlmICghdHJh
Y2tEYXRhKSB7CisgICAgICAgIEVSUk9SX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAi
SWdub3JpbmcgdW5rbm93biB0cmFjayBudW1iZXIgIiwgdHJhY2tOdW1iZXIpOworICAgICAgICBy
ZXR1cm4gU3RhdHVzKFN0YXR1czo6a0ludmFsaWRFbGVtZW50SWQpOwogICAgIH0KLX0KIAotc3Rh
dGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNVHJhbnNmZXJGdW5jdGlvbih1aW50OF90IGNoYXJh
Y3RlcmlzdGljcykKLXsKLSAgICBzd2l0Y2ggKGNoYXJhY3RlcmlzdGljcykgewotICAgIGNhc2Ug
VlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzcwOV82OgotICAgICAg
ICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJUcmFuc2ZlckZ1bmN0aW9uX0lUVV9SXzcwOV8yOwotICAg
IGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzI0
MDoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbl9TTVBURV8y
NDBNXzE5OTU7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6U01QVEVfU1RfMjA4NDoKLSAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uVHJh
bnNmZXJGdW5jdGlvbl9TTVBURV9TVF8yMDg0X1BROwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9u
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTBiaXQ6Ci0gICAgY2FzZSBWUENvbmZp
Z3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfMjAyMF8xMmJpdDoKLSAgICAgICAg
cmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl8yMDIwOwot
ICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NU
XzQyOF8xOgotICAgICAgICByZXR1cm4ga0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0
aW9uX1NNUFRFX1NUXzQyOF8xOwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OkJUXzIxMDBfSExHOgotICAgICAgICByZXR1cm4ga0NNRm9ybWF0RGVzY3Jp
cHRpb25UcmFuc2ZlckZ1bmN0aW9uX0lUVV9SXzIxMDBfSExHOwotICAgIGNhc2UgVlBDb25maWd1
cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OklFQ182MTk2Nl8yXzE6Ci0gICAgICAgIHJl
dHVybiBQQUw6OmNhbkxvYWRfQ29yZU1lZGlhX2tDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJG
dW5jdGlvbl9zUkdCKCkgPyBnZXRfQ29yZU1lZGlhX2tDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNm
ZXJGdW5jdGlvbl9zUkdCKCkgOiBudWxscHRyOwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxpbmVhcjoKLSAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERl
c2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9MaW5lYXI7CisgICAgc3dpdGNoICh0cmFja0RhdGEt
PmNvZGVjKCkpIHsKKyAgICBjYXNlIENvZGVjVHlwZTo6VlA5OgorICAgIGNhc2UgQ29kZWNUeXBl
OjpWb3JiaXM6CisgICAgY2FzZSBDb2RlY1R5cGU6Ok9wdXM6CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBDb2RlY1R5cGU6OlVuc3VwcG9ydGVkOgorICAgICAgICByZXR1cm4gU2tpcChyZWFk
ZXIsIGJ5dGVzUmVtYWluaW5nKTsKICAgICB9CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gdHJhY2tEYXRhLT5jb25zdW1lRnJhbWVEYXRhKCpyZWFkZXIsIG1ldGFkYXRhLCBieXRl
c1JlbWFpbmluZywgQ01UaW1lTWFrZShibG9jay0+dGltZWNvZGUgKyBtX2N1cnJlbnRUaW1lY29k
ZSwgbV90aW1lc2NhbGUpLCBibG9jay0+bnVtX2ZyYW1lcyk7CiB9CiAKLXN0YXRpYyB1aW50OF90
IGNvbnZlcnRUb01hdHJpeENvZWZmaWNpZW50cyhjb25zdCBNYXRyaXhDb2VmZmljaWVudHMmIGNv
ZWZmaWNpZW50cykKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cHJvdmlkZU1lZGlhRGF0
YShSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IHNhbXBsZUJ1ZmZlciwgdWludDY0X3QgdHJh
Y2tJRCkKIHsKLSAgICBzd2l0Y2ggKGNvZWZmaWNpZW50cykgewotICAgIGNhc2UgTWF0cml4Q29l
ZmZpY2llbnRzOjprUmdiOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29l
ZmZpY2llbnRzOjpJZGVudGl0eTsKLSAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a0J0NzA5
OgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF83
MDlfNjsKLSAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a1Vuc3BlY2lmaWVkOgotICAgICAg
ICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpVbnNwZWNpZmllZDsK
LSAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a0ZjYzoKLSAgICAgICAgcmV0dXJuIFZQQ29u
ZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6RkNDOwotICAgIGNhc2UgTWF0cml4Q29lZmZp
Y2llbnRzOjprQnQ0NzBCZzoKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENv
ZWZmaWNpZW50czo6QlRfNDcwXzdfQkc7Ci0gICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtT
bXB0ZTE3ME06Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVu
dHM6OkJUXzYwMV83OwotICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprU21wdGUyNDBNOgot
ICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpTTVBURV9T
VF8yNDA7Ci0gICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtZQ2dDbzoKLSAgICAgICAgcmV0
dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6WUNnQ287Ci0gICAgY2FzZSBN
YXRyaXhDb2VmZmljaWVudHM6OmtCdDIwMjBOb25jb25zdGFudEx1bWluYW5jZToKLSAgICAgICAg
cmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfMjAyMF9Ob25jb25z
dGFudF9MdW1pbmFuY2U7Ci0gICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtCdDIwMjBDb25z
dGFudEx1bWluYW5jZToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZm
aWNpZW50czo6QlRfMjAyMF9Db25zdGFudF9MdW1pbmFuY2U7Ci0gICAgfQorICAgIGNhbGxPbk1h
aW5UaHJlYWQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgc2FtcGxlQnVm
ZmVyID0gV1RGTW92ZShzYW1wbGVCdWZmZXIpLCB0cmFja0lEXSAoKSBtdXRhYmxlIHsKKyAgICAg
ICAgaWYgKCFtX2RpZFByb3ZpZGVNZWRpYURhdGFDYWxsYmFjaykKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBhdXRvIG1lZGlhU2FtcGxlID0gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVh
dGUoc2FtcGxlQnVmZmVyLmdldCgpLCB0cmFja0lEKTsKKyAgICAgICAgbV9kaWRQcm92aWRlTWVk
aWFEYXRhQ2FsbGJhY2soV1RGTW92ZShtZWRpYVNhbXBsZSksIHRyYWNrSUQsIGVtcHR5U3RyaW5n
KCkpOworICAgIH0pOwogfQogCi1zdGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRvQ01ZQ2JDUk1h
dHJpeCh1aW50OF90IGNvZWZmaWNpZW50cykKKyNkZWZpbmUgUEFSU0VSX0xPR19FUlJPUl9JRl9Q
T1NTSUJMRSguLi4pIGlmIChwYXJzZXIoKS5sb2dnZXJQdHIoKSkgcGFyc2VyKCkubG9nZ2VyUHRy
KCktPmVycm9yKGxvZ0NoYW5uZWwoKSwgV1RGOjpMb2dnZXI6OkxvZ1NpdGVJZGVudGlmaWVyKGxv
Z0NsYXNzTmFtZSgpLCBfX2Z1bmNfXywgcGFyc2VyKCkubG9nSWRlbnRpZmllcigpKSwgX19WQV9B
UkdTX18pCisKK3dlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNr
RGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwgY29uc3QgRnJhbWVN
ZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZywgY29uc3QgQ01UaW1l
JiBwcmVzZW50YXRpb25UaW1lLCBpbnQgc2FtcGxlQ291bnQpCiB7Ci0gICAgc3dpdGNoIChjb2Vm
ZmljaWVudHMpIHsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6
QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U6Ci0gICAgICAgIHJldHVybiBrQ01Gb3JtYXRE
ZXNjcmlwdGlvbllDYkNyTWF0cml4X0lUVV9SXzIwMjA7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRp
b25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzQ3MF83X0JHOgotICAgIGNhc2UgVlBDb25maWd1cmF0
aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF82MDFfNzoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdl
QnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNjAxXzQ7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25N
YXRyaXhDb2VmZmljaWVudHM6OkJUXzcwOV82OgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZm
ZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlfMjsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJp
eENvZWZmaWNpZW50czo6U01QVEVfU1RfMjQwOgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZm
ZXJZQ2JDck1hdHJpeF9TTVBURV8yNDBNXzE5OTU7Ci0gICAgfQorI2lmIEVOQUJMRShWUDkpCisg
ICAgQ01CbG9ja0J1ZmZlclJlZiByYXdCbG9ja0J1ZmZlciA9IG51bGxwdHI7CiAKLSAgICByZXR1
cm4gbnVsbHB0cjsKLX0KKyAgICBpZiAoIW1fY3VycmVudEJsb2NrQnVmZmVyKSB7CisgICAgICAg
IGF1dG8gZXJyID0gQ01CbG9ja0J1ZmZlckNyZWF0ZVdpdGhNZW1vcnlCbG9jayhrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBudWxscHRyLCBtZXRhZGF0YS5zaXplLCBrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBu
dWxscHRyLCAwLCBtZXRhZGF0YS5zaXplLCAwLCAmcmF3QmxvY2tCdWZmZXIpOworICAgICAgICBp
ZiAoZXJyKSB7CisgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUJs
b2NrQnVmZmVyQ3JlYXRlV2l0aE1lbW9yeUJsb2NrIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsK
KyAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKKyAgICAg
ICAgfQogCi1zdGF0aWMgdWludDhfdCBjb252ZXJ0U3Vic2FtcGxpbmdYWVRvQ2hyb21hU3Vic2Ft
cGxpbmcodWludDY0X3QgeCwgdWludDY0X3QgeSkKLXsKLSAgICBpZiAoeCAmIHkpCi0gICAgICAg
IHJldHVybiBWUENvbmZpZ3VyYXRpb25DaHJvbWFTdWJzYW1wbGluZzo6U3Vic2FtcGxpbmdfNDIw
X0NvbG9jYXRlZDsKLSAgICBpZiAoeCAmICF5KQotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0
aW9uQ2hyb21hU3Vic2FtcGxpbmc6OlN1YnNhbXBsaW5nXzQyMjsKLSAgICBpZiAoIXggJiAheSkK
LSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNocm9tYVN1YnNhbXBsaW5nOjpTdWJzYW1w
bGluZ180NDQ7Ci0gICAgLy8gVGhpcyBpbmRpY2F0ZXMgNDo0OjAgc3Vic2FtcGxpbmcsIHdoaWNo
IGlzIG5vdCBleHByZXNzYWJsZSBpbiB0aGUgJ3ZwY0MnIGJveC4gRGVmYXVsdCB0byA0OjI6MC4K
LSAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ2hyb21hU3Vic2FtcGxpbmc6OlN1YnNhbXBsaW5n
XzQyMF9Db2xvY2F0ZWQ7Ci19CisgICAgICAgIG1fY3VycmVudEJsb2NrQnVmZmVyID0gYWRvcHRD
RihyYXdCbG9ja0J1ZmZlcik7CisgICAgICAgIG1fY3VycmVudEJsb2NrQnVmZmVyUG9zaXRpb24g
PSAwOwogCi1zdGF0aWMgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZv
cm1hdERlc2NyaXB0aW9uRnJvbVZQOUhlYWRlclBhcnNlcihjb25zdCB2cDlfcGFyc2VyOjpWcDlI
ZWFkZXJQYXJzZXImIHBhcnNlciwgY29uc3Qgd2VibTo6RWxlbWVudDxDb2xvdXI+JiBjb2xvcikK
LXsKLSAgICAvLyBSZWY6ICJWUCBDb2RlYyBJU08gTWVkaWEgRmlsZSBGb3JtYXQgQmluZGluZywg
djEuMCwgMjAxNy0wMy0zMSIKLSAgICAvLyA8aHR0cHM6Ly93d3cud2VibXByb2plY3Qub3JnL3Zw
OS9tcDQvPgotICAgIC8vCi0gICAgLy8gY2xhc3MgVlBDb2RlY0NvbmZpZ3VyYXRpb25Cb3ggZXh0
ZW5kcyBGdWxsQm94KCd2cGNDJywgdmVyc2lvbiA9IDEsIDApCi0gICAgLy8gewotICAgIC8vICAg
ICBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCgpIHZwY0NvbmZpZzsKLSAgICAvLyB9Ci0gICAg
Ly8KLSAgICAvLyBhbGlnbmVkICg4KSBjbGFzcyBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCB7
Ci0gICAgLy8gICAgIHVuc2lnbmVkIGludCAoOCkgICAgIHByb2ZpbGU7Ci0gICAgLy8gICAgIHVu
c2lnbmVkIGludCAoOCkgICAgIGxldmVsOwotICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDQpICAg
ICBiaXREZXB0aDsKLSAgICAvLyAgICAgdW5zaWduZWQgaW50ICgzKSAgICAgY2hyb21hU3Vic2Ft
cGxpbmc7Ci0gICAgLy8gICAgIHVuc2lnbmVkIGludCAoMSkgICAgIHZpZGVvRnVsbFJhbmdlRmxh
ZzsKLSAgICAvLyAgICAgdW5zaWduZWQgaW50ICg4KSAgICAgY29sb3VyUHJpbWFyaWVzOwotICAg
IC8vICAgICB1bnNpZ25lZCBpbnQgKDgpICAgICB0cmFuc2ZlckNoYXJhY3RlcmlzdGljczsKLSAg
ICAvLyAgICAgdW5zaWduZWQgaW50ICg4KSAgICAgbWF0cml4Q29lZmZpY2llbnRzOwotICAgIC8v
ICAgICB1bnNpZ25lZCBpbnQgKDE2KSAgICBjb2RlY0ludGlhbGl6YXRpb25EYXRhU2l6ZTsKLSAg
ICAvLyAgICAgdW5zaWduZWQgaW50ICg4KVtdICAgY29kZWNJbnRpYWxpemF0aW9uRGF0YTsKLSAg
ICAvLyB9Ci0gICAgLy8KLSAgICAvLyBjb2RlY0ludGlhbGl6YXRpb25EYXRhU2l6ZeKAi0ZvciBW
UDggYW5kIFZQOSB0aGlzIGZpZWxkIG11c3QgYmUgMC4KLSAgICAvLyBjb2RlY0ludGlhbGl6YXRp
b25EYXRh4oCLYmluYXJ5IGNvZGVjIGluaXRpYWxpemF0aW9uIGRhdGEuIE5vdCB1c2VkIGZvciBW
UDggYW5kIFZQOS4KLSAgICAvLwotICAgIC8vIEZJWE1FOiBDb252ZXJ0IGV4aXN0aW5nIHN0cnVj
dCB0byBhbiBJU09Cb3ggYW5kIHJlcGxhY2UgdGhlIHdyaXRpbmcgY29kZSBiZWxvdwotICAgIC8v
IHdpdGggYSBzdWJjbGFzcyBvZiBJU09GdWxsQm94LgotCi0gICAgVlBDb2RlY0NvbmZpZ3VyYXRp
b25SZWNvcmQgcmVjb3JkOwotCi0gICAgcmVjb3JkLnByb2ZpbGUgPSBwYXJzZXIucHJvZmlsZSgp
OwotICAgIC8vIENvcmVNZWRpYSBkb2VzIG5hdCBjYXJlIGFib3V0IHRoZSBWUDkgY29kZWMgbGV2
ZWw7IGhhcmQtY29kZSB0byBMZXZlbCAxLjAgaGVyZToKLSAgICByZWNvcmQubGV2ZWwgPSAxMDsK
LSAgICByZWNvcmQuYml0RGVwdGggPSBwYXJzZXIuYml0X2RlcHRoKCk7Ci0gICAgcmVjb3JkLnZp
ZGVvRnVsbFJhbmdlRmxhZyA9IHBhcnNlci5jb2xvcl9yYW5nZSgpID8gVlBDb25maWd1cmF0aW9u
UmFuZ2U6OkZ1bGxSYW5nZSA6IFZQQ29uZmlndXJhdGlvblJhbmdlOjpWaWRlb1JhbmdlOwotICAg
IHJlY29yZC5jaHJvbWFTdWJzYW1wbGluZyA9IGNvbnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFT
dWJzYW1wbGluZyhwYXJzZXIuc3Vic2FtcGxpbmdfeCgpLCBwYXJzZXIuc3Vic2FtcGxpbmdfeSgp
KTsKLSAgICByZWNvcmQuY29sb3JQcmltYXJpZXMgPSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1h
cmllczo6VW5zcGVjaWZpZWQ7Ci0gICAgcmVjb3JkLnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzID0g
VlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlVuc3BlY2lmaWVkOwotICAg
IHJlY29yZC5tYXRyaXhDb2VmZmljaWVudHMgPSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmlj
aWVudHM6OlVuc3BlY2lmaWVkOwotCi0gICAgLy8gQ29udGFpbmVyIGNvbG9yIHZhbHVlcyBjYW4g
b3ZlcnJpZGUgcGVyLXNhbXBsZSBvbmVzOgotICAgIGlmIChjb2xvci5pc19wcmVzZW50KCkpIHsK
LSAgICAgICAgYXV0byYgY29sb3JWYWx1ZSA9IGNvbG9yLnZhbHVlKCk7Ci0gICAgICAgIGlmIChj
b2xvclZhbHVlLmNocm9tYV9zdWJzYW1wbGluZ194LmlzX3ByZXNlbnQoKSAmJiBjb2xvclZhbHVl
LmNocm9tYV9zdWJzYW1wbGluZ195LmlzX3ByZXNlbnQoKSkKLSAgICAgICAgICAgIHJlY29yZC5j
aHJvbWFTdWJzYW1wbGluZyA9IGNvbnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJzYW1wbGlu
Zyhjb2xvclZhbHVlLmNocm9tYV9zdWJzYW1wbGluZ194LnZhbHVlKCksIGNvbG9yVmFsdWUuY2hy
b21hX3N1YnNhbXBsaW5nX3kudmFsdWUoKSk7Ci0gICAgICAgIGlmIChjb2xvclZhbHVlLnJhbmdl
LmlzX3ByZXNlbnQoKSAmJiBjb2xvclZhbHVlLnJhbmdlLnZhbHVlKCkgIT0gUmFuZ2U6OmtVbnNw
ZWNpZmllZCkKLSAgICAgICAgICAgIHJlY29yZC52aWRlb0Z1bGxSYW5nZUZsYWcgPSBjb2xvclZh
bHVlLnJhbmdlLnZhbHVlKCkgPT0gUmFuZ2U6OmtGdWxsID8gVlBDb25maWd1cmF0aW9uUmFuZ2U6
OkZ1bGxSYW5nZSA6IFZQQ29uZmlndXJhdGlvblJhbmdlOjpWaWRlb1JhbmdlOwotICAgICAgICBp
ZiAoY29sb3JWYWx1ZS5iaXRzX3Blcl9jaGFubmVsLmlzX3ByZXNlbnQoKSkKLSAgICAgICAgICAg
IHJlY29yZC5iaXREZXB0aCA9IGNvbG9yVmFsdWUuYml0c19wZXJfY2hhbm5lbC52YWx1ZSgpOwot
ICAgICAgICBpZiAoY29sb3JWYWx1ZS50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MuaXNfcHJlc2Vu
dCgpKQotICAgICAgICAgICAgcmVjb3JkLnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzID0gY29udmVy
dFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MoY29sb3JWYWx1ZS50cmFuc2Zlcl9jaGFyYWN0ZXJp
c3RpY3MudmFsdWUoKSk7Ci0gICAgICAgIGlmIChjb2xvclZhbHVlLm1hdHJpeF9jb2VmZmljaWVu
dHMuaXNfcHJlc2VudCgpKQotICAgICAgICAgICAgcmVjb3JkLm1hdHJpeENvZWZmaWNpZW50cyA9
IGNvbnZlcnRUb01hdHJpeENvZWZmaWNpZW50cyhjb2xvclZhbHVlLm1hdHJpeF9jb2VmZmljaWVu
dHMudmFsdWUoKSk7Ci0gICAgICAgIGlmIChjb2xvclZhbHVlLnByaW1hcmllcy5pc19wcmVzZW50
KCkpCi0gICAgICAgICAgICByZWNvcmQuY29sb3JQcmltYXJpZXMgPSBjb252ZXJ0VG9Db2xvclBy
aW1hcmllcyhjb2xvclZhbHVlLnByaW1hcmllcy52YWx1ZSgpKTsKKyAgICAgICAgZXJyID0gQ01C
bG9ja0J1ZmZlckFzc3VyZUJsb2NrTWVtb3J5KG1fY3VycmVudEJsb2NrQnVmZmVyLmdldCgpKTsK
KyAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NT
SUJMRSgiQ01BdWRpb1NhbXBsZUJ1ZmZlckNyZWF0ZVdpdGhQYWNrZXREZXNjcmlwdGlvbnMgZmFp
bGVkIHdpdGggZXJyb3IiLCBlcnIpOworICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwg
Ynl0ZXNSZW1haW5pbmcpOworICAgICAgICB9CiAgICAgfQogCi0gICAgY29uc3RleHByIHNpemVf
dCBWUENvZGVjQ29uZmlndXJhdGlvbkNvbnRlbnRzU2l6ZSA9IDEyOworICAgIHNpemVfdCBieXRl
c1RvUmVhZCA9IG1ldGFkYXRhLnNpemUgLSBtX2N1cnJlbnRCbG9ja0J1ZmZlclBvc2l0aW9uOwor
ICAgIHdoaWxlIChieXRlc1RvUmVhZCkgeworICAgICAgICBzaXplX3Qgc2VnbWVudFNpemVBdFBv
c2l0aW9uID0gMDsKKyAgICAgICAgdWludDhfdCogYmxvY2tCdWZmZXJEYXRhID0gbnVsbHB0cjsK
KyAgICAgICAgYXV0byBlcnIgPSBDTUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIobV9jdXJyZW50
QmxvY2tCdWZmZXIuZ2V0KCksIG1fY3VycmVudEJsb2NrQnVmZmVyUG9zaXRpb24sICZzZWdtZW50
U2l6ZUF0UG9zaXRpb24sIG51bGxwdHIsIChjaGFyKiopJmJsb2NrQnVmZmVyRGF0YSk7CisgICAg
ICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUo
IkNNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlciBmYWlsZWQgd2l0aCBlcnJvciIsIGVycik7Cisg
ICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CisgICAgICAg
IH0KIAotICAgIHVpbnQzMl90IHZlcnNpb25BbmRGbGFncyA9IDEgPDwgMjQ7Ci0gICAgdWludDhf
dCBiaXREZXB0aENocm9tYUFuZFJhbmdlID0gKDB4RiAmIHJlY29yZC5iaXREZXB0aCkgPDwgNCB8
ICgweDcgJiByZWNvcmQuY2hyb21hU3Vic2FtcGxpbmcpIDw8IDEgfCAoMHgxICYgcmVjb3JkLnZp
ZGVvRnVsbFJhbmdlRmxhZyk7Ci0gICAgdWludDE2X3QgY29kZWNJbnRpYWxpemF0aW9uRGF0YVNp
emUgPSAwOworICAgICAgICBzaXplX3QgYnl0ZXNUb1JlYWRGcm9tVGhpc1NlZ21lbnQgPSBzdGQ6
Om1pbihieXRlc1RvUmVhZCwgc2VnbWVudFNpemVBdFBvc2l0aW9uKTsKKyAgICAgICAgdWludDY0
X3QgYnl0ZXNSZWFkOwogCi0gICAgYXV0byB2aWV3ID0gSlNDOjpEYXRhVmlldzo6Y3JlYXRlKEFy
cmF5QnVmZmVyOjpjcmVhdGUoVlBDb2RlY0NvbmZpZ3VyYXRpb25Db250ZW50c1NpemUsIDEpLCAw
LCBWUENvZGVjQ29uZmlndXJhdGlvbkNvbnRlbnRzU2l6ZSk7Ci0gICAgdmlldy0+c2V0KDAsIHZl
cnNpb25BbmRGbGFncywgZmFsc2UpOwotICAgIHZpZXctPnNldCg0LCByZWNvcmQucHJvZmlsZSwg
ZmFsc2UpOwotICAgIHZpZXctPnNldCg1LCByZWNvcmQubGV2ZWwsIGZhbHNlKTsKLSAgICB2aWV3
LT5zZXQoNiwgYml0RGVwdGhDaHJvbWFBbmRSYW5nZSwgZmFsc2UpOwotICAgIHZpZXctPnNldCg3
LCByZWNvcmQuY29sb3JQcmltYXJpZXMsIGZhbHNlKTsKLSAgICB2aWV3LT5zZXQoOCwgcmVjb3Jk
LnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLCBmYWxzZSk7Ci0gICAgdmlldy0+c2V0KDksIHJlY29y
ZC5tYXRyaXhDb2VmZmljaWVudHMsIGZhbHNlKTsKLSAgICB2aWV3LT5zZXQoMTAsIGNvZGVjSW50
aWFsaXphdGlvbkRhdGFTaXplLCBmYWxzZSk7CisgICAgICAgIGF1dG8gc3RhdHVzID0gcmVhZGVy
LlJlYWQoYnl0ZXNUb1JlYWRGcm9tVGhpc1NlZ21lbnQsICh1aW50OF90KilibG9ja0J1ZmZlckRh
dGEsICZieXRlc1JlYWQpOworICAgICAgICBieXRlc1RvUmVhZCAtPSBieXRlc1JlYWQ7CisgICAg
ICAgICpieXRlc1JlbWFpbmluZyAtPSBieXRlc1JlYWQ7CisgICAgICAgIG1fY3VycmVudEJsb2Nr
QnVmZmVyUG9zaXRpb24gKz0gYnl0ZXNSZWFkOwogCi0gICAgYXV0byBkYXRhID0gYWRvcHRDRihD
RkRhdGFDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKGNvbnN0IFVJbnQ4ICopdmlldy0+ZGF0
YSgpLCB2aWV3LT5ieXRlTGVuZ3RoKCkpKTsKKyAgICAgICAgLy8gRklYTUU6IFdlIGNhbid0IHll
dCBoYW5kbGUgcGFyc2luZyBhIEZyYW1lIHRoYXQgZG9lc24ndCBoYXZlIGFsbCBpdHMgbWVtb3J5
IGF2YWlsYWJsZS4KKyAgICAgICAgaWYgKHN0YXR1cy5jb2RlID09IHdlYm06OlN0YXR1czo6a09r
UGFydGlhbCB8fCBzdGF0dXMuY29kZSA9PSB3ZWJtOjpTdGF0dXM6OmtXb3VsZEJsb2NrKQorICAg
ICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CiAKLSAgICBDRlR5cGVSZWYgY29uZmlndXJh
dGlvbktleXNbXSA9IHsgQ0ZTVFIoInZwY0MiKSB9OwotICAgIENGVHlwZVJlZiBjb25maWd1cmF0
aW9uVmFsdWVzW10gPSB7IGRhdGEuZ2V0KCkgfTsKLSAgICBhdXRvIGNvbmZpZ3VyYXRpb25EaWN0
ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY29uZmln
dXJhdGlvbktleXMsIGNvbmZpZ3VyYXRpb25WYWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoY29uZmln
dXJhdGlvbktleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGlj
dGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgY3JlYXRlU2FtcGxlQnVmZmVyKHByZXNlbnRh
dGlvblRpbWUsIHNhbXBsZUNvdW50KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKG1ldGFkYXRh
KTsKKyAgICBVTlVTRURfUEFSQU0ocHJlc2VudGF0aW9uVGltZSk7CisgICAgVU5VU0VEX1BBUkFN
KHNhbXBsZUNvdW50KTsKKyNlbmRpZgogCi0gICAgVmVjdG9yPENGVHlwZVJlZj4gZXh0ZW5zaW9u
c0tleXMgeyBrQ01Gb3JtYXREZXNjcmlwdGlvbkV4dGVuc2lvbl9TYW1wbGVEZXNjcmlwdGlvbkV4
dGVuc2lvbkF0b21zIH07Ci0gICAgVmVjdG9yPENGVHlwZVJlZj4gZXh0ZW5zaW9uc1ZhbHVlcyA9
IHsgY29uZmlndXJhdGlvbkRpY3QuZ2V0KCkgfTsKKyAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBi
eXRlc1JlbWFpbmluZyk7Cit9CiAKLSAgICBpZiAocmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxhZyA9
PSBWUENvbmZpZ3VyYXRpb25SYW5nZTo6RnVsbFJhbmdlKSB7Ci0gICAgICAgIGV4dGVuc2lvbnNL
ZXlzLmFwcGVuZChrQ01Gb3JtYXREZXNjcmlwdGlvbkV4dGVuc2lvbl9GdWxsUmFuZ2VWaWRlbyk7
Ci0gICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGtDRkJvb2xlYW5UcnVlKTsKK3ZvaWQg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZl
cihjb25zdCBDTVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIGludCBzYW1wbGVDb3VudCkKK3sKKyNp
ZiBFTkFCTEUoVlA5KQorICAgIHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IG51bGxwdHI7Cisg
ICAgc2l6ZV90IHNlZ21lbnRTaXplQXRQb3NpdGlvbiA9IDA7CisgICAgYXV0byBlcnIgPSBDTUJs
b2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIobV9jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCksIDAsICZz
ZWdtZW50U2l6ZUF0UG9zaXRpb24sIG51bGxwdHIsIChjaGFyKiopJmJsb2NrQnVmZmVyRGF0YSk7
CisgICAgaWYgKGVycikgeworICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJD
TUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIgZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIpOworICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF1dG8gY21Db2xvclByaW1hcmllcyA9IGNv
bnZlcnRUb0NNQ29sb3JQcmltYXJpZXMocmVjb3JkLmNvbG9yUHJpbWFyaWVzKSkgewotICAgICAg
ICBleHRlbnNpb25zS2V5cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc0tleSk7
Ci0gICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGNtQ29sb3JQcmltYXJpZXMpOworICAg
IGlmICghbV9oZWFkZXJQYXJzZXIuUGFyc2VVbmNvbXByZXNzZWRIZWFkZXIoYmxvY2tCdWZmZXJE
YXRhLCBzZWdtZW50U2l6ZUF0UG9zaXRpb24pKSB7CisgICAgICAgIFBBUlNFUl9MT0dfRVJST1Jf
SUZfUE9TU0lCTEUoIlBhcnNlVW5jb21wcmVzc2VkSGVhZGVyIGZhaWxlZCIpOworICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF1dG8gY21UcmFuc2ZlckZ1bmN0aW9uID0gY29udmVy
dFRvQ01UcmFuc2ZlckZ1bmN0aW9uKHJlY29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGljcykpIHsK
LSAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5j
dGlvbktleSk7Ci0gICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGNtVHJhbnNmZXJGdW5j
dGlvbik7CisgICAgLy8gT25seSB1cGRhdGUgdGhlIGZvcm1hdCBkZXNjcmlwdGlvbiB3aGVuIHRo
ZSBoZWFkZXIgaW5kaWNhdGVzIHRoYXQgdGhlIHNhbXBsZSBpcworICAgIC8vIGEga2V5LWZyYW1l
LCBvdGhlcndpc2UgY29sb3IgaW5mb3JtYXRpb24gd2lsbCBub3QgYmUgcGFyc2VkLgorICAgIGF1
dG8gdHJhY2sgPSB0aGlzLT50cmFjaygpOworICAgIGlmIChtX2hlYWRlclBhcnNlci5rZXkoKSkg
eworICAgICAgICBhdXRvIGZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlRm9ybWF0RGVzY3JpcHRp
b25Gcm9tVlA5SGVhZGVyUGFyc2VyKG1faGVhZGVyUGFyc2VyLCB0cmFjay52aWRlby52YWx1ZSgp
LmNvbG91cik7CisgICAgICAgIGlmICghZm9ybWF0RGVzY3JpcHRpb24pIHsKKyAgICAgICAgICAg
IFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoImZhaWxlZCB0byBjcmVhdGUgZm9ybWF0IGRl
c2NyaXB0aW9uIGZyb20gVlA5IGhlYWRlciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHNldEZvcm1hdERlc2NyaXB0aW9uKFdURk1vdmUoZm9ybWF0RGVzY3JpcHRp
b24pKTsKICAgICB9CiAKLSAgICBpZiAoYXV0byBjbU1hdHJpeCA9IGNvbnZlcnRUb0NNWUNiQ1JN
YXRyaXgocmVjb3JkLm1hdHJpeENvZWZmaWNpZW50cykpIHsKLSAgICAgICAgZXh0ZW5zaW9uc0tl
eXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhLZXkpOwotICAgICAgICBleHRlbnNp
b25zVmFsdWVzLmFwcGVuZChjbU1hdHJpeCk7CisgICAgLy8gRklYTUU6IEEgYmxvY2sgbWlnaHQg
Y29udGFpbiBtb3JlIHRoYW4gb25lIGZyYW1lLCBidXQgb25seSB0aGlzIGZyYW1lIGhhcyBiZWVu
IHJlYWQgaW50byBgY3VycmVudEJsb2NrQnVmZmVyYC4KKyAgICAvLyBCZWxvdyB3ZSBjcmVhdGUg
c2FtcGxlIGJ1ZmZlcnMgZm9yIGVhY2ggZnJhbWUsIGVhY2ggd2l0aCB0aGUgYmxvY2sncyB0aW1l
Y29kZSBhbmQgYG51bV9mcmFtZXNgIHZhbHVlLgorICAgIC8vIFNob3VsZG4ndCB3ZSBjcmVhdGUg
anVzdCBvbmUgc2FtcGxlIGJ1ZmZlciBvbmNlIGFsbCB0aGUgYmxvY2sncyBmcmFtZXMgaGF2ZSBi
ZWVuIHJlYWQgaW50byBgY3VycmVudEJsb2NrQnVmZmVyYD8KKworICAgIHVpbnQ2NF90IGR1cmF0
aW9uID0gMDsKKyAgICBpZiAodHJhY2suZGVmYXVsdF9kdXJhdGlvbi5pc19wcmVzZW50KCkpCisg
ICAgICAgIGR1cmF0aW9uID0gdHJhY2suZGVmYXVsdF9kdXJhdGlvbi52YWx1ZSgpICogcHJlc2Vu
dGF0aW9uVGltZS50aW1lc2NhbGUgLyAxMDAwMDAwMDAwOworCisgICAgQ01TYW1wbGVCdWZmZXJS
ZWYgcmF3U2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKKyAgICBzaXplX3QgZnJhbWVTaXplID0gQ01C
bG9ja0J1ZmZlckdldERhdGFMZW5ndGgobV9jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCkpOworICAg
IENNU2FtcGxlVGltaW5nSW5mbyB0aW1pbmcgPSB7IENNVGltZU1ha2UoZHVyYXRpb24sIHByZXNl
bnRhdGlvblRpbWUudGltZXNjYWxlKSwgcHJlc2VudGF0aW9uVGltZSwgcHJlc2VudGF0aW9uVGlt
ZSB9OworICAgIGVyciA9IENNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgbV9jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCksIGZvcm1hdERlc2NyaXB0aW9uKCkuZ2V0
KCksIHNhbXBsZUNvdW50LCAxLCAmdGltaW5nLCAxLCAmZnJhbWVTaXplLCAmcmF3U2FtcGxlQnVm
ZmVyKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lC
TEUoIkNNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkgZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIpOwor
ICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGF1dG8gc2FtcGxlQnVmZmVyID0gYWRvcHRDRihy
YXdTYW1wbGVCdWZmZXIpOwogCi0gICAgYXV0byBleHRlbnNpb25zID0gYWRvcHRDRihDRkRpY3Rp
b25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZXh0ZW5zaW9uc0tleXMuZGF0YSgpLCBl
eHRlbnNpb25zVmFsdWVzLmRhdGEoKSwgZXh0ZW5zaW9uc0tleXMuc2l6ZSgpLCAma0NGVHlwZURp
Y3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7
CisgICAgbV9jdXJyZW50QmxvY2tCdWZmZXIgPSBudWxscHRyOworICAgIG1fY3VycmVudEJsb2Nr
QnVmZmVyUG9zaXRpb24gPSAwOwogCi0gICAgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmIGZv
cm1hdERlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICBpZiAobm9FcnIgIT0gQ01WaWRlb0Zvcm1h
dERlc2NyaXB0aW9uQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDTVZpZGVvQ29kZWNUeXBl
X1ZQOSwgcGFyc2VyLndpZHRoKCksIHBhcnNlci5oZWlnaHQoKSwgZXh0ZW5zaW9ucy5nZXQoKSwg
JmZvcm1hdERlc2NyaXB0aW9uKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJu
IGFkb3B0Q0YoZm9ybWF0RGVzY3JpcHRpb24pOworICAgIGlmICghbV9oZWFkZXJQYXJzZXIua2V5
KCkpIHsKKyAgICAgICAgYXV0byBhdHRhY2htZW50c0FycmF5ID0gQ01TYW1wbGVCdWZmZXJHZXRT
YW1wbGVBdHRhY2htZW50c0FycmF5KHNhbXBsZUJ1ZmZlci5nZXQoKSwgdHJ1ZSk7CisgICAgICAg
IEFTU0VSVChhdHRhY2htZW50c0FycmF5KTsKKyAgICAgICAgaWYgKCFhdHRhY2htZW50c0FycmF5
KSB7CisgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTVNhbXBsZUJ1
ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkgcmV0dXJuZWQgTlVMTCIpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChDRkluZGV4IGkgPSAwLCBjb3Vu
dCA9IENGQXJyYXlHZXRDb3VudChhdHRhY2htZW50c0FycmF5KTsgaSA8IGNvdW50OyArK2kpIHsK
KyAgICAgICAgICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0YWNobWVudHMgPSBjaGVja2Vk
X2NmX2Nhc3Q8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChh
dHRhY2htZW50c0FycmF5LCBpKSk7CisgICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShh
dHRhY2htZW50cywga0NNU2FtcGxlQXR0YWNobWVudEtleV9Ob3RTeW5jLCBrQ0ZCb29sZWFuVHJ1
ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIHRyYWNrSUQgPSB0cmFjay50cmFja191
aWQudmFsdWUoKTsKKyAgICBwYXJzZXIoKS5wcm92aWRlTWVkaWFEYXRhKHNhbXBsZUJ1ZmZlci5s
ZWFrUmVmKCksIHRyYWNrSUQpOworI2VuZGlmIC8vIEVOQUJMRShWUDkpCiB9Ci0jZW5kaWYKIAot
d2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uRnJhbWUoY29uc3QgRnJhbWVN
ZXRhZGF0YSYgbWV0YWRhdGEsIFJlYWRlciogcmVhZGVyLCB1aW50NjRfdCogYnl0ZXNSZW1haW5p
bmcpCit3ZWJtOjpTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFja0RhdGE6
OmNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiByZWFkZXIsIGNvbnN0IEZyYW1lTWV0YWRh
dGEmIG1ldGFkYXRhLCB1aW50NjRfdCogYnl0ZXNSZW1haW5pbmcsIGNvbnN0IENNVGltZSYgcHJl
c2VudGF0aW9uVGltZSwgaW50IHNhbXBsZUNvdW50KQogewotICAgIFVOVVNFRF9QQVJBTShtZXRh
ZGF0YSk7Ci0gICAgVU5VU0VEX1BBUkFNKGJ5dGVzUmVtYWluaW5nKTsKKyAgICBBU1NFUlRfVU5V
U0VEKHNhbXBsZUNvdW50LCBzYW1wbGVDb3VudCA9PSAxKTsKIAotICAgIEFTU0VSVChyZWFkZXIp
OwotICAgIGlmICghcmVhZGVyKQotICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a05vdEVu
b3VnaE1lbW9yeSk7CisgICAgaWYgKCFmb3JtYXREZXNjcmlwdGlvbigpKSB7CisgICAgICAgIGlm
ICghdHJhY2soKS5jb2RlY19wcml2YXRlLmlzX3ByZXNlbnQoKSkgeworICAgICAgICAgICAgUEFS
U0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQXVkaW8gdHJhY2sgbWlzc2luZyBtYWdpYyBjb29r
aWUiKTsKKyAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsK
KyAgICAgICAgfQogCi0gICAgaWYgKCFtX2N1cnJlbnRCbG9jaykKLSAgICAgICAgcmV0dXJuIFN0
YXR1cyhTdGF0dXM6OmtJbnZhbGlkRWxlbWVudElkKTsKKyAgICAgICAgUmV0YWluUHRyPENNRm9y
bWF0RGVzY3JpcHRpb25SZWY+IGZvcm1hdERlc2NyaXB0aW9uOworICAgICAgICBhdXRvJiBwcml2
YXRlRGF0YSA9IHRyYWNrKCkuY29kZWNfcHJpdmF0ZS52YWx1ZSgpOworICAgICAgICBpZiAoY29k
ZWMoKSA9PSBDb2RlY1R5cGU6OlZvcmJpcykKKyAgICAgICAgICAgIGZvcm1hdERlc2NyaXB0aW9u
ID0gY3JlYXRlVm9yYmlzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihwcml2YXRlRGF0YS5zaXplKCks
IHByaXZhdGVEYXRhLmRhdGEoKSk7CisgICAgICAgIGVsc2UgaWYgKGNvZGVjKCkgPT0gQ29kZWNU
eXBlOjpPcHVzKQorICAgICAgICAgICAgZm9ybWF0RGVzY3JpcHRpb24gPSBjcmVhdGVPcHVzQXVk
aW9Gb3JtYXREZXNjcmlwdGlvbihwcml2YXRlRGF0YS5zaXplKCksIHByaXZhdGVEYXRhLmRhdGEo
KSk7CiAKLSAgICBhdXRvKiBibG9jayA9IFdURjo6c3dpdGNoT24oKm1fY3VycmVudEJsb2NrLCBb
XShCbG9jayYgYmxvY2spIHsKLSAgICAgICAgcmV0dXJuICZibG9jazsKLSAgICB9LCBbXShTaW1w
bGVCbG9jayYgYmxvY2spIC0+IEJsb2NrKiB7Ci0gICAgICAgIHJldHVybiAmYmxvY2s7Ci0gICAg
fSk7Ci0gICAgaWYgKCFibG9jaykKLSAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtJbnZh
bGlkRWxlbWVudElkKTsKKyAgICAgICAgaWYgKCFmb3JtYXREZXNjcmlwdGlvbikgeworICAgICAg
ICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiRmFpbGVkIHRvIGNyZWF0ZSBmb3Jt
YXQgZGVzY3JpcHRpb24gZnJvbSBhdWRpbyB0cmFjayBoZWFkZXIiKTsKKyAgICAgICAgICAgIHJl
dHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKKyAgICAgICAgfQogCi0gICAgYXV0
byB0cmFja051bWJlciA9IGJsb2NrLT50cmFja19udW1iZXI7CisgICAgICAgIGF1dG8gc3RyZWFt
RGVzY3JpcHRpb24gPSBDTUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25HZXRTdHJlYW1CYXNpY0Rlc2Ny
aXB0aW9uKGZvcm1hdERlc2NyaXB0aW9uLmdldCgpKTsKKyAgICAgICAgaWYgKCFzdHJlYW1EZXNj
cmlwdGlvbikgeworICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01B
dWRpb0Zvcm1hdERlc2NyaXB0aW9uR2V0U3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBmYWlsZWQiKTsK
KyAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKKyAgICAg
ICAgfQorICAgICAgICBtX3BhY2tldER1cmF0aW9uID0gQ01UaW1lTWFrZShzdHJlYW1EZXNjcmlw
dGlvbi0+bUZyYW1lc1BlclBhY2tldCwgc3RyZWFtRGVzY3JpcHRpb24tPm1TYW1wbGVSYXRlKTsK
IAotICAgIGF1dG8qIHRyYWNrRGF0YSA9IHRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHRyYWNrTnVt
YmVyKTsKLSAgICBpZiAoIXRyYWNrRGF0YSkKLSAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6
OmtJbnZhbGlkRWxlbWVudElkKTsKLSAgICBhdXRvJiB0cmFjayA9IHRyYWNrRGF0YS0+dHJhY2s7
CisgICAgICAgIHNldEZvcm1hdERlc2NyaXB0aW9uKFdURk1vdmUoZm9ybWF0RGVzY3JpcHRpb24p
KTsKKyAgICB9CiAKLSAgICB1aW50NjRfdCBkdXJhdGlvbiA9IDA7Ci0gICAgaWYgKHRyYWNrLmRl
ZmF1bHRfZHVyYXRpb24uaXNfcHJlc2VudCgpKQotICAgICAgICBkdXJhdGlvbiA9IHRyYWNrLmRl
ZmF1bHRfZHVyYXRpb24udmFsdWUoKSAqIG1fdGltZXNjYWxlIC8gMTAwMDAwMDAwMDsKKyAgICBp
ZiAobV9wYWNrZXREYXRhLmlzRW1wdHkoKSkgeworICAgICAgICBtX3BhY2tldERhdGEucmVzaXpl
KG1ldGFkYXRhLnNpemUpOworICAgICAgICBtX3BhY2tldEJ5dGVzUmVhZCA9IDA7CisgICAgICAg
IG1fYnl0ZU9mZnNldCA9IG1ldGFkYXRhLnBvc2l0aW9uOworICAgICAgICBtX3NhbXBsZVByZXNl
bnRhdGlvblRpbWUgPSBwcmVzZW50YXRpb25UaW1lOworICAgIH0KIAotI2lmIEVOQUJMRShWUDkp
Ci0gICAgaWYgKHRyYWNrLmNvZGVjX2lkLmlzX3ByZXNlbnQoKSAmJiB0cmFjay5jb2RlY19pZC52
YWx1ZSgpID09ICJWX1ZQOSIpIHsKLSAgICAgICAgaWYgKCF0cmFja0RhdGEtPmN1cnJlbnRCbG9j
a0J1ZmZlcikgewotICAgICAgICAgICAgQ01CbG9ja0J1ZmZlclJlZiByYXdCbG9ja0J1ZmZlciA9
IG51bGxwdHI7Ci0gICAgICAgICAgICBpZiAobm9FcnIgIT0gQ01CbG9ja0J1ZmZlckNyZWF0ZVdp
dGhNZW1vcnlCbG9jayhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBudWxscHRyLCBtZXRhZGF0YS5zaXpl
LCBrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBudWxscHRyLCAwLCBtZXRhZGF0YS5zaXplLCAwLCAmcmF3
QmxvY2tCdWZmZXIpKQotICAgICAgICAgICAgICAgIHJldHVybiBTa2lwKHJlYWRlciwgYnl0ZXNS
ZW1haW5pbmcpOwotICAgICAgICAgICAgdHJhY2tEYXRhLT5jdXJyZW50QmxvY2tCdWZmZXIgPSBh
ZG9wdENGKHJhd0Jsb2NrQnVmZmVyKTsKLSAgICAgICAgICAgIHRyYWNrRGF0YS0+Y3VycmVudEJs
b2NrQnVmZmVyUG9zaXRpb24gPSAwOwotCi0gICAgICAgICAgICBpZiAobm9FcnIgIT0gQ01CbG9j
a0J1ZmZlckFzc3VyZUJsb2NrTWVtb3J5KHRyYWNrRGF0YS0+Y3VycmVudEJsb2NrQnVmZmVyLmdl
dCgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2tpcChyZWFkZXIsIGJ5dGVzUmVtYWluaW5n
KTsKLSAgICAgICAgfQorICAgIHNpemVfdCBwYWNrZXREYXRhT2Zmc2V0ID0gbV9wYWNrZXRCeXRl
c1JlYWQ7CisgICAgc2l6ZV90IGJ5dGVzVG9SZWFkID0gbWV0YWRhdGEuc2l6ZTsKKyAgICB3aGls
ZSAoYnl0ZXNUb1JlYWQpIHsKKyAgICAgICAgdWludDY0X3QgYnl0ZXNSZWFkOworICAgICAgICBh
dXRvIHN0YXR1cyA9IHJlYWRlci5SZWFkKGJ5dGVzVG9SZWFkLCBtX3BhY2tldERhdGEuZGF0YSgp
ICsgbV9wYWNrZXRCeXRlc1JlYWQsICZieXRlc1JlYWQpOworICAgICAgICBieXRlc1RvUmVhZCAt
PSBieXRlc1JlYWQ7CisgICAgICAgICpieXRlc1JlbWFpbmluZyAtPSBieXRlc1JlYWQ7CisgICAg
ICAgIG1fcGFja2V0Qnl0ZXNSZWFkICs9IGJ5dGVzUmVhZDsKKworICAgICAgICAvLyBGSVhNRTog
V2UgY2FuJ3QgeWV0IGhhbmRsZSBwYXJzaW5nIGEgRnJhbWUgdGhhdCBkb2Vzbid0IGhhdmUgYWxs
IGl0cyBtZW1vcnkgYXZhaWxhYmxlLgorICAgICAgICBpZiAoc3RhdHVzLmNvZGUgPT0gd2VibTo6
U3RhdHVzOjprT2tQYXJ0aWFsIHx8IHN0YXR1cy5jb2RlID09IHdlYm06OlN0YXR1czo6a1dvdWxk
QmxvY2spCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KIAotICAgICAgICBzaXpl
X3QgbnVtVG9SZWFkID0gbWV0YWRhdGEuc2l6ZSAtIHRyYWNrRGF0YS0+Y3VycmVudEJsb2NrQnVm
ZmVyUG9zaXRpb247Ci0gICAgICAgIHNpemVfdCBzZWdtZW50U2l6ZUF0UG9zaXRpb24gPSAwOwot
ICAgICAgICB1aW50OF90KiBibG9ja0J1ZmZlckRhdGEgPSBudWxscHRyOworICAgIG1fcGFja2V0
RGVzY3JpcHRpb25zLmFwcGVuZCh7IHN0YXRpY19jYXN0PGludDY0X3Q+KHBhY2tldERhdGFPZmZz
ZXQpLCAwLCBzdGF0aWNfY2FzdDxVSW50MzI+KG1ldGFkYXRhLnNpemUpIH0pOworICAgIGF1dG8g
c2FtcGxlRHVyYXRpb24gPSBDTVRpbWVHZXRTZWNvbmRzKENNVGltZVN1YnRyYWN0KHByZXNlbnRh
dGlvblRpbWUsIG1fc2FtcGxlUHJlc2VudGF0aW9uVGltZSkpICsgQ01UaW1lR2V0U2Vjb25kcyht
X3BhY2tldER1cmF0aW9uKTsKKyAgICBpZiAoc2FtcGxlRHVyYXRpb24gPj0gbV9taW5pbXVtU2Ft
cGxlRHVyYXRpb24pCisgICAgICAgIGNyZWF0ZVNhbXBsZUJ1ZmZlcigpOworCisgICAgcmV0dXJu
IFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOworfQogCi0gICAgICAgIHdoaWxlIChudW1U
b1JlYWQpIHsKLSAgICAgICAgICAgIGlmIChub0VyciAhPSBDTUJsb2NrQnVmZmVyR2V0RGF0YVBv
aW50ZXIodHJhY2tEYXRhLT5jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCksIHRyYWNrRGF0YS0+Y3Vy
cmVudEJsb2NrQnVmZmVyUG9zaXRpb24sICZzZWdtZW50U2l6ZUF0UG9zaXRpb24sIG51bGxwdHIs
IChjaGFyKiopJmJsb2NrQnVmZmVyRGF0YSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNraXAo
cmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Cit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1
ZGlvVHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIoKQoreworICAgIGlmIChtX3BhY2tldERl
c2NyaXB0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgc2l6
ZV90IG51bVRvUmVhZEZyb21UaGlzU2VnbWVudCA9IHN0ZDo6bWluKG51bVRvUmVhZCwgc2VnbWVu
dFNpemVBdFBvc2l0aW9uKTsKLSAgICAgICAgICAgIHVpbnQ2NF90IG51bUFjdHVhbGx5V3JpdHRl
blRvVGhpc1NlZ21lbnQ7CisgICAgQVNTRVJUKCFtX3BhY2tldERhdGEuaXNFbXB0eSgpKTsKIAot
ICAgICAgICAgICAgYXV0byBzdGF0dXMgPSBtX3JlYWRlci0+UmVhZChudW1Ub1JlYWRGcm9tVGhp
c1NlZ21lbnQsICh1aW50OF90KilibG9ja0J1ZmZlckRhdGEsICZudW1BY3R1YWxseVdyaXR0ZW5U
b1RoaXNTZWdtZW50KTsKLSAgICAgICAgICAgIG51bVRvUmVhZCAtPSBudW1BY3R1YWxseVdyaXR0
ZW5Ub1RoaXNTZWdtZW50OwotICAgICAgICAgICAgKmJ5dGVzUmVtYWluaW5nIC09IG51bUFjdHVh
bGx5V3JpdHRlblRvVGhpc1NlZ21lbnQ7Ci0gICAgICAgICAgICB0cmFja0RhdGEtPmN1cnJlbnRC
bG9ja0J1ZmZlclBvc2l0aW9uICs9IG51bUFjdHVhbGx5V3JpdHRlblRvVGhpc1NlZ21lbnQ7Cisg
ICAgQ01CbG9ja0J1ZmZlclJlZiBibG9ja0J1ZmZlciA9IG51bGxwdHI7CisgICAgYXV0byBlcnIg
PSBDTUJsb2NrQnVmZmVyQ3JlYXRlV2l0aE1lbW9yeUJsb2NrKGtDRkFsbG9jYXRvckRlZmF1bHQs
IG51bGxwdHIsIG1fcGFja2V0RGF0YS5zaXplSW5CeXRlcygpLCBrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBudWxscHRyLCAwLCBtX3BhY2tldERhdGEuc2l6ZUluQnl0ZXMoKSwga0NNQmxvY2tCdWZmZXJB
c3N1cmVNZW1vcnlOb3dGbGFnLCAmYmxvY2tCdWZmZXIpOworICAgIGlmIChlcnIpIHsKKyAgICAg
ICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZlckNyZWF0ZVdpdGhN
ZW1vcnlCbG9jayBmYWlsZWQgd2l0aCAlZCIsIGVycik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgYXV0byBidWZmZXIgPSBhZG9wdENGKGJsb2NrQnVmZmVyKTsKIAotICAgICAgICAgICAg
Ly8gRklYTUU6IFdlIGNhbid0IHlldCBoYW5kbGUgcGFyc2luZyBhIEZyYW1lIHRoYXQgZG9lc24n
dCBoYXZlIGFsbCBpdHMgbWVtb3J5IGF2YWlsYWJsZS4KLSAgICAgICAgICAgIGlmIChzdGF0dXMu
Y29kZSA9PSB3ZWJtOjpTdGF0dXM6OmtPa1BhcnRpYWwgfHwgc3RhdHVzLmNvZGUgPT0gd2VibTo6
U3RhdHVzOjprV291bGRCbG9jaykKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAg
ICAgICB9CisgICAgZXJyID0gQ01CbG9ja0J1ZmZlclJlcGxhY2VEYXRhQnl0ZXMobV9wYWNrZXRE
YXRhLmRhdGEoKSwgYnVmZmVyLmdldCgpLCAwLCBtX3BhY2tldERhdGEuc2l6ZUluQnl0ZXMoKSk7
CisgICAgaWYgKGVycikgeworICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJD
TUJsb2NrQnVmZmVyUmVwbGFjZURhdGFCeXRlcyBmYWlsZWQgd2l0aCAlZCIsIGVycik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAgICAgaWYgKG5vRXJyICE9IENNQmxvY2tCdWZmZXJH
ZXREYXRhUG9pbnRlcih0cmFja0RhdGEtPmN1cnJlbnRCbG9ja0J1ZmZlci5nZXQoKSwgMCwgJnNl
Z21lbnRTaXplQXRQb3NpdGlvbiwgbnVsbHB0ciwgKGNoYXIqKikmYmxvY2tCdWZmZXJEYXRhKSkK
LSAgICAgICAgICAgIHJldHVybiBTa2lwKHJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwotCi0gICAg
ICAgIGF1dG8mIGhlYWRlclBhcnNlciA9IHRyYWNrRGF0YS0+aGVhZGVyUGFyc2VyOwotICAgICAg
ICBpZiAoIWhlYWRlclBhcnNlci5QYXJzZVVuY29tcHJlc3NlZEhlYWRlcihibG9ja0J1ZmZlckRh
dGEsIHNlZ21lbnRTaXplQXRQb3NpdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gU2tpcChyZWFk
ZXIsIGJ5dGVzUmVtYWluaW5nKTsKLQotICAgICAgICAvLyBPbmx5IHVwZGF0ZSB0aGUgZm9ybWF0
IGRlc2NyaXB0aW9uIHdoZW4gdGhlIGhlYWRlciBpbmRpY2F0ZXMgdGhhdCB0aGUgc2FtcGxlIGlz
Ci0gICAgICAgIC8vIGEga2V5LWZyYW1lLCBvdGhlcndpc2UgY29sb3IgaW5mb3JtYXRpb24gd2ls
bCBub3QgYmUgcGFyc2VkLgotICAgICAgICBpZiAoaGVhZGVyUGFyc2VyLmtleSgpKQotICAgICAg
ICAgICAgdHJhY2tEYXRhLT5mb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZUZvcm1hdERlc2NyaXB0
aW9uRnJvbVZQOUhlYWRlclBhcnNlcihoZWFkZXJQYXJzZXIsIHRyYWNrLnZpZGVvLnZhbHVlKCku
Y29sb3VyKTsKLSAgICAgICAgaWYgKCF0cmFja0RhdGEtPmZvcm1hdERlc2NyaXB0aW9uKQotICAg
ICAgICAgICAgcmV0dXJuIFNraXAocmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0KLSAgICAgICAg
YXV0byBwdHMgPSBDTVRpbWVNYWtlKGJsb2NrLT50aW1lY29kZSArIG1fY3VycmVudFRpbWVjb2Rl
LCBtX3RpbWVzY2FsZSk7Ci0gICAgICAgIENNU2FtcGxlVGltaW5nSW5mbyB0aW1pbmcgPSB7IENN
VGltZU1ha2UoZHVyYXRpb24sIG1fdGltZXNjYWxlKSwgcHRzLCBwdHMgfTsKLSAgICAgICAgc2l6
ZV90IHNpemUgPSBtZXRhZGF0YS5zaXplOwotCi0gICAgICAgIGF1dG8gc2FtcGxlQ291bnQgPSBi
bG9jay0+bnVtX2ZyYW1lczsKLSAgICAgICAgQ01TYW1wbGVCdWZmZXJSZWYgcmF3U2FtcGxlQnVm
ZmVyID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKG5vRXJyICE9IENNU2FtcGxlQnVmZmVyQ3JlYXRl
UmVhZHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgdHJhY2tEYXRhLT5jdXJyZW50QmxvY2tCdWZmZXIu
Z2V0KCksIHRyYWNrRGF0YS0+Zm9ybWF0RGVzY3JpcHRpb24uZ2V0KCksIHNhbXBsZUNvdW50LCAx
LCAmdGltaW5nLCAxLCAmc2l6ZSwgJnJhd1NhbXBsZUJ1ZmZlcikpCi0gICAgICAgICAgICByZXR1
cm4gU2tpcChyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLSAgICAgICAgYXV0byBzYW1wbGVCdWZm
ZXIgPSBhZG9wdENGKHJhd1NhbXBsZUJ1ZmZlcik7Ci0KLSAgICAgICAgdHJhY2tEYXRhLT5jdXJy
ZW50QmxvY2tCdWZmZXIgPSBudWxscHRyOwotICAgICAgICB0cmFja0RhdGEtPmN1cnJlbnRCbG9j
a0J1ZmZlclBvc2l0aW9uID0gMDsKLQotICAgICAgICBpZiAoIWhlYWRlclBhcnNlci5rZXkoKSkg
ewotICAgICAgICAgICAgYXV0byBhdHRhY2htZW50c0FycmF5ID0gQ01TYW1wbGVCdWZmZXJHZXRT
YW1wbGVBdHRhY2htZW50c0FycmF5KHNhbXBsZUJ1ZmZlci5nZXQoKSwgdHJ1ZSk7Ci0gICAgICAg
ICAgICBBU1NFUlQoYXR0YWNobWVudHNBcnJheSk7Ci0gICAgICAgICAgICBpZiAoIWF0dGFjaG1l
bnRzQXJyYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNraXAocmVhZGVyLCBieXRlc1JlbWFp
bmluZyk7Ci0gICAgICAgICAgICBmb3IgKENGSW5kZXggaSA9IDAsIGNvdW50ID0gQ0ZBcnJheUdl
dENvdW50KGF0dGFjaG1lbnRzQXJyYXkpOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAg
ICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0YWNobWVudHMgPSBjaGVja2VkX2NmX2Nhc3Q8
Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChhdHRhY2htZW50
c0FycmF5LCBpKSk7Ci0gICAgICAgICAgICAgICAgQ0ZEaWN0aW9uYXJ5U2V0VmFsdWUoYXR0YWNo
bWVudHMsIGtDTVNhbXBsZUF0dGFjaG1lbnRLZXlfTm90U3luYywga0NGQm9vbGVhblRydWUpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgQ01TYW1wbGVCdWZmZXJSZWYgcmF3U2FtcGxl
QnVmZmVyID0gbnVsbHB0cjsKKyAgICBlcnIgPSBDTUF1ZGlvU2FtcGxlQnVmZmVyQ3JlYXRlUmVh
ZHlXaXRoUGFja2V0RGVzY3JpcHRpb25zKGtDRkFsbG9jYXRvckRlZmF1bHQsIGJ1ZmZlci5nZXQo
KSwgZm9ybWF0RGVzY3JpcHRpb24oKS5nZXQoKSwgbV9wYWNrZXREZXNjcmlwdGlvbnMuc2l6ZSgp
LCBtX3NhbXBsZVByZXNlbnRhdGlvblRpbWUsIG1fcGFja2V0RGVzY3JpcHRpb25zLmRhdGEoKSwg
JnJhd1NhbXBsZUJ1ZmZlcik7CisgICAgaWYgKGVycikgeworICAgICAgICBQQVJTRVJfTE9HX0VS
Uk9SX0lGX1BPU1NJQkxFKCJDTUF1ZGlvU2FtcGxlQnVmZmVyQ3JlYXRlV2l0aFBhY2tldERlc2Ny
aXB0aW9ucyBmYWlsZWQgd2l0aCAlZCIsIGVycik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgYXV0byBzYW1wbGVCdWZmZXIgPSBhZG9wdENGKHJhd1NhbXBsZUJ1ZmZlcik7CiAKLSAgICAg
ICAgYXV0byB0cmFja0lEID0gdHJhY2sudHJhY2tfdWlkLnZhbHVlKCk7CisgICAgbV9wYWNrZXRE
YXRhLmNsZWFyKCk7CisgICAgbV9wYWNrZXREZXNjcmlwdGlvbnMuY2xlYXIoKTsKIAotICAgICAg
ICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyks
IHNhbXBsZUJ1ZmZlciA9IFdURk1vdmUoc2FtcGxlQnVmZmVyKSwgdHJhY2tJRF0gKCkgbXV0YWJs
ZSB7Ci0gICAgICAgICAgICBpZiAoIW1fZGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGF1dG8gbWVkaWFTYW1wbGUgPSBNZWRp
YVNhbXBsZUFWRk9iakM6OmNyZWF0ZShzYW1wbGVCdWZmZXIuZ2V0KCksIHRyYWNrSUQpOwotICAg
ICAgICAgICAgbV9kaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2soV1RGTW92ZShtZWRpYVNhbXBs
ZSksIHRyYWNrSUQsIGVtcHR5U3RyaW5nKCkpOwotICAgICAgICB9KTsKKyAgICBhdXRvIHRyYWNr
SUQgPSB0cmFjaygpLnRyYWNrX3VpZC52YWx1ZSgpOworICAgIHBhcnNlcigpLnByb3ZpZGVNZWRp
YURhdGEoc2FtcGxlQnVmZmVyLmxlYWtSZWYoKSwgdHJhY2tJRCk7Cit9CisKK3ZvaWQgU291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6Zmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKCkKK3sKKyAgICBmb3Ig
KGF1dG8mIHRyYWNrIDogbV90cmFja3MpIHsKKyAgICAgICAgaWYgKHRyYWNrLT50cmFja1R5cGUo
KSA9PSBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OlR5cGU6OkF1ZGlvKQorICAg
ICAgICAgICAgZG93bmNhc3Q8QXVkaW9UcmFja0RhdGE+KHRyYWNrLmdldCgpKS5jcmVhdGVTYW1w
bGVCdWZmZXIoKTsKICAgICB9Ci0jZW5kaWYKK30KIAotICAgIHJldHVybiBTa2lwKHJlYWRlciwg
Ynl0ZXNSZW1haW5pbmcpOwordm9pZCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRNaW5pbXVt
QXVkaW9TYW1wbGVEdXJhdGlvbihmbG9hdCBkdXJhdGlvbikKK3sKKyAgICBtX21pbmltdW1BdWRp
b1NhbXBsZUR1cmF0aW9uID0gZHVyYXRpb247CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNl
cldlYk0uaAppbmRleCAzYTg0NjQ1OWEzZWIzNTUzNjEyMTI5NzZjOGVhZGU0NjNkNjNiMTk3Li5i
Y2YxNjI0MTQxOWQ1M2E0NTcxYmRiNTk0ZmU1MDM5N2MzNGZjYTNlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJN
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVm
ZmVyUGFyc2VyV2ViTS5oCkBAIC0yOCw2ICsyOCw4IEBACiAjaWYgRU5BQkxFKE1FRElBX1NPVVJD
RSkKIAogI2luY2x1ZGUgIlNvdXJjZUJ1ZmZlclBhcnNlci5oIgorI2luY2x1ZGUgPENvcmVBdWRp
by9Db3JlQXVkaW9UeXBlcy5oPgorI2luY2x1ZGUgPENvcmVNZWRpYS9DTVRpbWUuaD4KICNpbmNs
dWRlIDxjb21tb24vdnA5X2hlYWRlcl9wYXJzZXIuaD4KICNpbmNsdWRlIDx3ZWJtL2NhbGxiYWNr
Lmg+CiAjaW5jbHVkZSA8d2VibS9zdGF0dXMuaD4KQEAgLTQxLDcgKzQzLDYgQEAKICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGhyZWFkcy9CaW5hcnlTZW1h
cGhvcmUuaD4KIAotdHlwZWRlZiBzdHJ1Y3Qgb3BhcXVlQ01TYW1wbGVCdWZmZXIgKkNNU2FtcGxl
QnVmZmVyUmVmOwogdHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlv
biogQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsKIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUNNQmxvY2tC
dWZmZXIgKkNNQmxvY2tCdWZmZXJSZWY7CiAKQEAgLTUxLDEwICs1MiwxNSBAQCBjbGFzcyBXZWJt
UGFyc2VyOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIE1lZGlhU2FtcGxlQVZGT2Jq
QzsKKwogY2xhc3MgV0VCQ09SRV9FWFBPUlQgU291cmNlQnVmZmVyUGFyc2VyV2ViTSA6IHB1Ymxp
YyBTb3VyY2VCdWZmZXJQYXJzZXIsIHByaXZhdGUgd2VibTo6Q2FsbGJhY2sgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgorICAgIGNsYXNzIFN0cmVhbWluZ1ZlY3RvclJl
YWRlcjsKKwogICAgIHN0YXRpYyBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGUgaXNDb250
ZW50VHlwZVN1cHBvcnRlZChjb25zdCBDb250ZW50VHlwZSYpOworICAgIHN0YXRpYyBSZWZQdHI8
U291cmNlQnVmZmVyUGFyc2VyV2ViTT4gY3JlYXRlKGNvbnN0IENvbnRlbnRUeXBlJik7CiAKICAg
ICBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNKCk7CiAgICAgflNvdXJjZUJ1ZmZlclBhcnNlcldlYk0o
KTsKQEAgLTcxLDkgKzc3LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0UGFyc2VyU3RhdGUo
KSBmaW5hbDsKICAgICB2b2lkIGludmFsaWRhdGUoKSBmaW5hbDsKIAotI2lmICFSRUxFQVNFX0xP
R19ESVNBQkxFRAorICAgIHZvaWQgZmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKCk7CisgICAgdm9p
ZCBzZXRNaW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbihmbG9hdCk7CisKICAgICB2b2lkIHNldExv
Z2dlcihjb25zdCBXVEY6OkxvZ2dlciYsIGNvbnN0IHZvaWQqIGlkZW50aWZpZXIpIGZpbmFsOwot
I2VuZGlmCisKKyAgICB2b2lkIHByb3ZpZGVNZWRpYURhdGEoUmV0YWluUHRyPENNU2FtcGxlQnVm
ZmVyUmVmPiwgdWludDY0X3QpOwogCiAgICAgZW51bSBjbGFzcyBFcnJvckNvZGUgOiBpbnQzMl90
IHsKICAgICAgICAgU291cmNlQnVmZmVyUGFyc2VyV2ViTUVycm9yQ29kZVN0YXJ0ID0gMjAwMCwK
QEAgLTk1LDIwICsxMDQsMTE5IEBAIHB1YmxpYzoKICAgICAgICAgUmVhZGluZ0NsdXN0ZXIsCiAg
ICAgfTsKIAotcHJpdmF0ZToKLSAgICBzdHJ1Y3QgVHJhY2tEYXRhIHsKLSAgICAgICAgd2VibTo6
VHJhY2tFbnRyeSB0cmFjazsKLSAgICAgICAgdnA5X3BhcnNlcjo6VnA5SGVhZGVyUGFyc2VyIGhl
YWRlclBhcnNlcjsKLSAgICAgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGZv
cm1hdERlc2NyaXB0aW9uOwotICAgICAgICBSZXRhaW5QdHI8Q01CbG9ja0J1ZmZlclJlZj4gY3Vy
cmVudEJsb2NrQnVmZmVyOwotICAgICAgICB1aW50NjRfdCBjdXJyZW50QmxvY2tCdWZmZXJQb3Np
dGlvbiB7IDAgfTsKKyAgICBlbnVtIGNsYXNzIENvZGVjVHlwZSA6IHVpbnQ4X3QgeworICAgICAg
ICBVbnN1cHBvcnRlZCwKKyAgICAgICAgVlA5LAorICAgICAgICBWb3JiaXMsCisgICAgICAgIE9w
dXMsCisgICAgfTsKKworICAgIGNsYXNzIFRyYWNrRGF0YSB7CisgICAgICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIGF1dG8gY3JlYXRlKENv
ZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk0mIHBhcnNlcikgLT4gVW5pcXVlUmVmPFRyYWNrRGF0YT4KKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8VHJhY2tEYXRhPihjb2Rl
Y1R5cGUsIHRyYWNrRW50cnksIFR5cGU6OlVua25vd24sIHBhcnNlcik7CisgICAgICAgIH0KKwor
ICAgICAgICBlbnVtIGNsYXNzIFR5cGUgeworICAgICAgICAgICAgVW5rbm93biwKKyAgICAgICAg
ICAgIEF1ZGlvLAorICAgICAgICAgICAgVmlkZW8sCisgICAgICAgIH07CisKKyAgICAgICAgVHJh
Y2tEYXRhKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNr
RW50cnksIFR5cGUgdHJhY2tUeXBlLCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIpCisg
ICAgICAgICAgICA6IG1fY29kZWMgeyBjb2RlY1R5cGUgfQorICAgICAgICAgICAgLCBtX3RyYWNr
IHsgd2VibTo6VHJhY2tFbnRyeSB7IHRyYWNrRW50cnkgfSB9CisgICAgICAgICAgICAsIG1fdHJh
Y2tUeXBlIHsgdHJhY2tUeXBlIH0KKyAgICAgICAgICAgICwgbV9wYXJzZXIgeyBwYXJzZXIgfQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCB+VHJhY2tEYXRhKCkgPSBkZWZh
dWx0OworCisgICAgICAgIENvZGVjVHlwZSBjb2RlYygpIGNvbnN0IHsgcmV0dXJuIG1fY29kZWM7
IH0KKyAgICAgICAgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2soKSB7IHJldHVybiBtX3RyYWNrOyB9
CisgICAgICAgIFR5cGUgdHJhY2tUeXBlKCkgY29uc3QgeyByZXR1cm4gbV90cmFja1R5cGU7IH0K
KworICAgICAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gZm9ybWF0RGVzY3Jp
cHRpb24oKSB7IHJldHVybiBtX2Zvcm1hdERlc2NyaXB0aW9uOyB9CisgICAgICAgIHZvaWQgc2V0
Rm9ybWF0RGVzY3JpcHRpb24oUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+JiYgZGVz
Y3JpcHRpb24pIHsgbV9mb3JtYXREZXNjcmlwdGlvbiA9IFdURk1vdmUoZGVzY3JpcHRpb24pOyB9
CisKKyAgICAgICAgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2VyKCkgY29uc3QgeyByZXR1
cm4gbV9wYXJzZXI7IH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgd2VibTo6U3RhdHVzIGNv
bnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYs
IHVpbnQ2NF90KiwgY29uc3QgQ01UaW1lJiwgaW50KQorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiB3ZWJtOjpTdGF0dXMod2Vi
bTo6U3RhdHVzOjprSW52YWxpZEVsZW1lbnRJZCk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6
CisgICAgICAgIENvZGVjVHlwZSBtX2NvZGVjOworICAgICAgICB3ZWJtOjpUcmFja0VudHJ5IG1f
dHJhY2s7CisgICAgICAgIFR5cGUgbV90cmFja1R5cGU7CisgICAgICAgIFJldGFpblB0cjxDTUZv
cm1hdERlc2NyaXB0aW9uUmVmPiBtX2Zvcm1hdERlc2NyaXB0aW9uOworICAgICAgICBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNJiBtX3BhcnNlcjsKKyAgICB9OworCisgICAgY2xhc3MgVmlkZW9UcmFj
a0RhdGEgOiBwdWJsaWMgVHJhY2tEYXRhIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBh
dXRvIGNyZWF0ZShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0
cmFja0VudHJ5LCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIpIC0+IFVuaXF1ZVJlZjxW
aWRlb1RyYWNrRGF0YT4KKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVS
ZWY8VmlkZW9UcmFja0RhdGE+KGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwgcGFyc2VyKTsKKyAgICAg
ICAgfQorCisgICAgICAgIFZpZGVvVHJhY2tEYXRhKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0
IHdlYm06OlRyYWNrRW50cnkmIHRyYWNrRW50cnksIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIHBh
cnNlcikKKyAgICAgICAgICAgIDogVHJhY2tEYXRhKGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwgVHlw
ZTo6VmlkZW8sIHBhcnNlcikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgd2VibTo6
U3RhdHVzIGNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVN
ZXRhZGF0YSYsIHVpbnQ2NF90KiwgY29uc3QgQ01UaW1lJiwgaW50KSBmaW5hbDsKKyAgICAgICAg
CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBjcmVhdGVTYW1wbGVCdWZmZXIoY29uc3QgQ01U
aW1lJiwgaW50KTsKKyAgICAgICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkgY29uc3QgeyBy
ZXR1cm4gIlZpZGVvVHJhY2tEYXRhIjsgfQorCisgICAgICAgIHZwOV9wYXJzZXI6OlZwOUhlYWRl
clBhcnNlciBtX2hlYWRlclBhcnNlcjsKKyAgICAgICAgUmV0YWluUHRyPENNQmxvY2tCdWZmZXJS
ZWY+IG1fY3VycmVudEJsb2NrQnVmZmVyOworICAgICAgICB1aW50NjRfdCBtX2N1cnJlbnRCbG9j
a0J1ZmZlclBvc2l0aW9uIHsgMCB9OworICAgIH07CisKKyAgICBjbGFzcyBBdWRpb1RyYWNrRGF0
YSA6IHB1YmxpYyBUcmFja0RhdGEgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIGF1dG8g
Y3JlYXRlKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRyYWNrRW50cnkmIHRyYWNr
RW50cnksIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIHBhcnNlciwgZmxvYXQgbWluaW11bVNhbXBs
ZUR1cmF0aW9uKSAtPiBVbmlxdWVSZWY8QXVkaW9UcmFja0RhdGE+CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEF1ZGlvVHJhY2tEYXRhPihjb2RlY1R5cGUsIHRy
YWNrRW50cnksIHBhcnNlciwgbWluaW11bVNhbXBsZUR1cmF0aW9uKTsKKyAgICAgICAgfQorCisg
ICAgICAgIEF1ZGlvVHJhY2tEYXRhKENvZGVjVHlwZSBjb2RlY1R5cGUsIGNvbnN0IHdlYm06OlRy
YWNrRW50cnkmIHRyYWNrRW50cnksIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIHBhcnNlciwgZmxv
YXQgbWluaW11bVNhbXBsZUR1cmF0aW9uKQorICAgICAgICAgICAgOiBUcmFja0RhdGEgeyBjb2Rl
Y1R5cGUsIHRyYWNrRW50cnksIFR5cGU6OkF1ZGlvLCBwYXJzZXIgfQorICAgICAgICAgICAgLCBt
X21pbmltdW1TYW1wbGVEdXJhdGlvbiB7IG1pbmltdW1TYW1wbGVEdXJhdGlvbiB9CisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgICAgIHdlYm06OlN0YXR1cyBjb25zdW1lRnJhbWVEYXRhKHdl
Ym06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB1aW50NjRfdCosIGNvbnN0
IENNVGltZSYsIGludCkgZmluYWw7CisgICAgICAgIHZvaWQgY3JlYXRlU2FtcGxlQnVmZmVyKCk7
CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25z
dCB7IHJldHVybiAiQXVkaW9UcmFja0RhdGEiOyB9CisKKyAgICAgICAgQ01UaW1lIG1fc2FtcGxl
UHJlc2VudGF0aW9uVGltZTsKKyAgICAgICAgQ01UaW1lIG1fcGFja2V0RHVyYXRpb247CisgICAg
ICAgIFZlY3Rvcjx1aW50OF90PiBtX3BhY2tldERhdGE7CisgICAgICAgIHNpemVfdCBtX3BhY2tl
dEJ5dGVzUmVhZCB7IDAgfTsKKyAgICAgICAgc2l6ZV90IG1fYnl0ZU9mZnNldCB7IDAgfTsKKyAg
ICAgICAgVmVjdG9yPEF1ZGlvU3RyZWFtUGFja2V0RGVzY3JpcHRpb24+IG1fcGFja2V0RGVzY3Jp
cHRpb25zOworCisgICAgICAgIC8vIEZJWE1FOiAwLjUgLSAxLjAgc2Vjb25kcyBpcyBhIGJldHRl
ciBkdXJhdGlvbiBwZXIgc2FtcGxlIGJ1ZmZlciwgYnV0IHVzZSAyIHNlY29uZHMgc28gYXQgbGVh
c3QgdGhlIGZpcnN0CisgICAgICAgIC8vIHNhbXBsZSBidWZmZXIgd2lsbCBwbGF5IHVudGlsIHdl
IGZpeCBTYW1wbGVDdXJzb3I6OmNyZWF0ZVNhbXBsZUJ1ZmZlciB0byBkZWFsIHdpdGggYGVuZEN1
cnNvcmAuCisgICAgICAgIGZsb2F0IG1fbWluaW11bVNhbXBsZUR1cmF0aW9uIHsgMiB9OwogICAg
IH07Ci0gICAgVHJhY2tEYXRhKiB0cmFja0RhdGFGb3JUcmFja051bWJlcih1aW50NjRfdCk7CiAK
LSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICBjb25zdCBXVEY6OkxvZ2dlciogbG9nZ2Vy
UHRyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0KICAgICBjb25zdCB2b2lkKiBs
b2dJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9sb2dJZGVudGlmaWVyOyB9Ci0jZW5kaWYK
KworcHJpdmF0ZToKKworICAgIFRyYWNrRGF0YSogdHJhY2tEYXRhRm9yVHJhY2tOdW1iZXIodWlu
dDY0X3QpOwogCiAgICAgLy8gd2VibTo6Q2FsbGJhY2sKICAgICB3ZWJtOjpTdGF0dXMgT25FbGVt
ZW50QmVnaW4oY29uc3Qgd2VibTo6RWxlbWVudE1ldGFkYXRhJiwgd2VibTo6QWN0aW9uKikgZmlu
YWw7CkBAIC0xMzUsMjAgKzI0MywxOCBAQCBwcml2YXRlOgogCiAgICAgU3RhdGUgbV9zdGF0ZSB7
IFN0YXRlOjpOb25lIH07CiAKLSAgICBjbGFzcyBTdHJlYW1pbmdWZWN0b3JSZWFkZXI7CiAgICAg
VW5pcXVlUmVmPFN0cmVhbWluZ1ZlY3RvclJlYWRlcj4gbV9yZWFkZXI7CiAKLSAgICBWZWN0b3I8
VHJhY2tEYXRhPiBtX3RyYWNrczsKKyAgICBWZWN0b3I8VW5pcXVlUmVmPFRyYWNrRGF0YT4+IG1f
dHJhY2tzOwogICAgIHVzaW5nIEJsb2NrVmFyaWFudCA9IFZhcmlhbnQ8d2VibTo6QmxvY2ssIHdl
Ym06OlNpbXBsZUJsb2NrPjsKICAgICBPcHRpb25hbDxCbG9ja1ZhcmlhbnQ+IG1fY3VycmVudEJs
b2NrOwogICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBtX3Jld2luZFRvUG9zaXRpb247CisgICAgZmxv
YXQgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbiB7IDIgfTsKIAogICAgIEJveDxCaW5hcnlT
ZW1hcGhvcmU+IG1faW5pdGlhbGl6YXRpb25TZWdtZW50SXNIYW5kbGVkU2VtYXBob3JlOwogCi0j
aWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECiAgICAgUmVmUHRyPGNvbnN0IFdURjo6TG9nZ2VyPiBt
X2xvZ2dlcjsKICAgICBjb25zdCB2b2lkKiBtX2xvZ0lkZW50aWZpZXIgeyBudWxscHRyIH07Ci0j
ZW5kaWYKIH07CiAKIH0KQEAgLTE1Nyw0ICsyNjMsMTIgQEAgU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19CRUdJTihXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNKQogICAgIHN0YXRpYyBib29s
IGlzVHlwZShjb25zdCBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXImIHBhcnNlcikgeyByZXR1
cm4gcGFyc2VyLnR5cGUoKSA9PSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXI6OlR5cGU6Oldl
Yk07IH0KIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKIAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19CRUdJTihXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0
YSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6VHJhY2tEYXRhJiB0cmFja0RhdGEpIHsgcmV0dXJuIHRyYWNrRGF0YS50cmFja1R5
cGUoKSA9PSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OlR5cGU6
OlZpZGVvOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6QXVkaW9UcmFj
a0RhdGEpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OlRyYWNrRGF0YSYgdHJhY2tEYXRhKSB7IHJldHVybiB0cmFja0RhdGEudHJh
Y2tUeXBlKCkgPT0gV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpU
eXBlOjpBdWRpbzsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCiAjZW5kaWYgLy8g
RU5BQkxFKE1FRElBX1NPVVJDRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oCmluZGV4IDE0YzZmM2FlOTg0
MzBhYWVjMmI4ZTgyMmIxZmI1MWI0NzU4YWE5MzAuLjVjY2QzNTc3OTMxNDQ5OWU3NjQwNThmMjQy
OGQyYTZmZWI1MDNlNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaApAQCAtMjgsNiArMjgsMTMgQEAK
ICNpZiBFTkFCTEUoVlA5KSAmJiBQTEFURk9STShDT0NPQSkKIAogI2luY2x1ZGUgIlZQOVV0aWxp
dGllcy5oIgorI2luY2x1ZGUgPHdlYm0vZG9tX3R5cGVzLmg+CisKK3R5cGVkZWYgY29uc3Qgc3Ry
dWN0IG9wYXF1ZUNNRm9ybWF0RGVzY3JpcHRpb24qIENNRm9ybWF0RGVzY3JpcHRpb25SZWY7CisK
K25hbWVzcGFjZSB2cDlfcGFyc2VyIHsKK2NsYXNzIFZwOUhlYWRlclBhcnNlcjsKK30KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NCw2ICs1MSw4IEBAIGV4dGVybiBib29sIGlzVlA5RGVj
b2RlckF2YWlsYWJsZSgpOwogZXh0ZXJuIGJvb2wgaXNWUENvZGVjQ29uZmlndXJhdGlvblJlY29y
ZFN1cHBvcnRlZChWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYpOwogZXh0ZXJuIGJvb2wgdmFs
aWRhdGVWUFBhcmFtZXRlcnMoVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmLCBNZWRpYUNhcGFi
aWxpdGllc0luZm8mLCBjb25zdCBWaWRlb0NvbmZpZ3VyYXRpb24mKTsKIAorUmV0YWluUHRyPENN
Rm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOUhlYWRl
clBhcnNlcihjb25zdCB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXImLCBjb25zdCB3ZWJtOjpF
bGVtZW50PHdlYm06OkNvbG91cj4mKTsKKwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2Eu
bW0KaW5kZXggYzgxZTk3YWEzZTQ3N2Q3YzdiODljMTYxOWE5ZjNmZjJmMmJlYzBhMS4uNDEyMjUw
Zjk3NDdhODk5MjZhZWU1YjkyODFmMWE0MTNiYzJlOGMxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2Eu
bW0KQEAgLTIzLDggKzIzLDggQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVlA5VXRpbGl0aWVzQ29jb2Eu
aCIKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVlA5VXRpbGl0aWVzQ29jb2EuaCIKIAog
I2lmIEVOQUJMRShWUDkpICYmIFBMQVRGT1JNKENPQ09BKQogCkBAIC0zNiwxMyArMzYsMjAgQEAK
ICNpbXBvcnQgIlN5c3RlbUJhdHRlcnkuaCIKICNpbXBvcnQgIlZpZGVvQ29uZmlndXJhdGlvbi5o
IgogI2ltcG9ydCA8Q29yZU1lZGlhL0NNRm9ybWF0RGVzY3JpcHRpb24uaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0RhdGFWaWV3Lmg+CisjaW1wb3J0IDxjb21tb24vdnA5X2hlYWRlcl9wYXJz
ZXIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ1RvSW50ZWdlckNvbnZlcnNpb24uaD4KIAog
I2ltcG9ydCA8cGFsL2NvY29hL0FWRm91bmRhdGlvblNvZnRMaW5rLmg+CisjaW1wb3J0IDxwYWwv
Y2YvQ29yZU1lZGlhU29mdExpbmsuaD4KKyNpbXBvcnQgIkNvcmVWaWRlb1NvZnRMaW5rLmgiCiAj
aW1wb3J0ICJWaWRlb1Rvb2xib3hTb2Z0TGluay5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K3VzaW5nIG5hbWVzcGFjZSBQQUw7Cit1c2luZyBuYW1lc3BhY2Ugd2VibTsKKwogc3RhdGljIGJv
b2wgaGFyZHdhcmVWUDlEZWNvZGVyRGlzYWJsZWRGb3JUZXN0aW5nIHsgZmFsc2UgfTsKIAogc3Ry
dWN0IE92ZXJyaWRlU2NyZWVuRGF0YSB7CkBAIC0yNTcsNiArMjY0LDI4OCBAQCBib29sIHZhbGlk
YXRlVlBQYXJhbWV0ZXJzKFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkJiBjb2RlY0NvbmZpZ3Vy
YXRpb24sIE1lZGlhQwogICAgIHJldHVybiB0cnVlOwogfQogCitzdGF0aWMgdWludDhfdCBjb252
ZXJ0VG9Db2xvclByaW1hcmllcyhjb25zdCBQcmltYXJpZXMmIGNvZWZmaWNpZW50cykKK3sKKyAg
ICBzd2l0Y2ggKGNvZWZmaWNpZW50cykgeworICAgIGNhc2UgUHJpbWFyaWVzOjprQnQ3MDk6Cisg
ICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfNzA5XzY7Cisg
ICAgY2FzZSBQcmltYXJpZXM6OmtVbnNwZWNpZmllZDoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmln
dXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpVbnNwZWNpZmllZDsKKyAgICBjYXNlIFByaW1hcmllczo6
a0J0NDcwTToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpC
VF80NzBfNl9NOworICAgIGNhc2UgUHJpbWFyaWVzOjprQnQ0NzBCZzoKKyAgICAgICAgcmV0dXJu
IFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF80NzBfN19CRzsKKyAgICBjYXNlIFBy
aW1hcmllczo6a1NtcHRlMTcwTToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9y
UHJpbWFyaWVzOjpCVF82MDFfNzsKKyAgICBjYXNlIFByaW1hcmllczo6a1NtcHRlMjQwTToKKyAg
ICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9TVF8yNDA7
CisgICAgY2FzZSBQcmltYXJpZXM6OmtGaWxtOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0
aW9uQ29sb3JQcmltYXJpZXM6OkZpbG07CisgICAgY2FzZSBQcmltYXJpZXM6OmtCdDIwMjA6Cisg
ICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfMjAyMF9Ob25j
b25zdGFudF9MdW1pbmFuY2U7CisgICAgY2FzZSBQcmltYXJpZXM6OmtTbXB0ZVN0NDI4MToKKyAg
ICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9TVF80Mjhf
MTsKKyAgICBjYXNlIFByaW1hcmllczo6a1NtcHRlUnA0MzE6CisgICAgICAgIHJldHVybiBWUENv
bmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfUlBfNDMxXzI7CisgICAgY2FzZSBQcmlt
YXJpZXM6OmtTbXB0ZUVnNDMyOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQ
cmltYXJpZXM6OlNNUFRFX0VHXzQzMl8xOworICAgIGNhc2UgUHJpbWFyaWVzOjprSmVkZWNQMjJQ
aG9zcGhvcnM6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6
RUJVX1RlY2hfMzIxM19FOworICAgIH0KK30KKworc3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRU
b0NNQ29sb3JQcmltYXJpZXModWludDhfdCBwcmltYXJpZXMpCit7CisgICAgc3dpdGNoIChwcmlt
YXJpZXMpIHsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF83MDlf
NjoKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfSVRVX1JfNzA5
XzI7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6RUJVX1RlY2hfMzIx
M19FOgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19FQlVfMzIx
MzsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF82MDFfNzoKKyAg
ICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9TVF8yNDA6CisgICAg
ICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzX1NNUFRFX0M7CisgICAgY2Fz
ZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfUlBfNDMxXzI6CisgICAgICAg
IHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX0RDSV9QMzsKKyAgICBj
YXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9FR180MzJfMToKKyAgICAg
ICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJpZXNfUDNfRDY1OworICAg
IGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzIwMjBfTm9uY29uc3RhbnRf
THVtaW5hbmNlOgorICAgICAgICByZXR1cm4ga0NNRm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1h
cmllc19JVFVfUl8yMDIwOworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0
aWMgdWludDhfdCBjb252ZXJ0VG9UcmFuc2ZlckNoYXJhY3RlcmlzdGljcyhjb25zdCBUcmFuc2Zl
ckNoYXJhY3RlcmlzdGljcyYgY2hhcmFjdGVyaXN0aWNzKQoreworICAgIHN3aXRjaCAoY2hhcmFj
dGVyaXN0aWNzKSB7CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0J0NzA5Ogor
ICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJU
XzcwOV82OworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtVbnNwZWNpZmllZDoK
KyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpV
bnNwZWNpZmllZDsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprR2FtbWEyMmN1
cnZlOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OkJUXzQ3MF82X007CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0dhbW1h
MjhjdXJ2ZToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVy
aXN0aWNzOjpCVF80NzBfN19CRzsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpr
U21wdGUxNzBNOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OkJUXzYwMV83OworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtT
bXB0ZTI0ME06CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6U01QVEVfU1RfMjQwOworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OmtMaW5lYXI6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6TGluZWFyOworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtMb2c6
CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
TG9ncml0aG1pYzsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprTG9nU3FydDoK
KyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpM
b2dyaXRobWljX1NxcnQ7CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0llYzYx
OTY2MjQ6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3Rlcmlz
dGljczo6SUVDXzYxOTY2XzJfNDsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpr
QnQxMzYxRXh0ZW5kZWRDb2xvdXJHYW11dDoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlv
blRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8xMzYxXzA7CisgICAgY2FzZSBUcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6a0llYzYxOTY2MjE6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRp
b25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SUVDXzYxOTY2XzJfMTsKKyAgICBjYXNlIFRyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjprMTBCaXRCdDIwMjA6CisgICAgICAgIHJldHVybiBWUENvbmZp
Z3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfMjAyMF8xMGJpdDsKKyAgICBjYXNl
IFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprMTJCaXRCdDIwMjA6CisgICAgICAgIHJldHVybiBW
UENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfMjAyMF8xMmJpdDsKKyAg
ICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprU21wdGVTdDIwODQ6CisgICAgICAgIHJl
dHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U01QVEVfU1RfMjA4
NDsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprU21wdGVTdDQyODE6CisgICAg
ICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U01QVEVf
U1RfNDI4XzE7CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0FyaWJTdGRCNjdI
bGc6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6QlRfMjEwMF9ITEc7CisgICAgfQorfQorCitzdGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRv
Q01UcmFuc2ZlckZ1bmN0aW9uKHVpbnQ4X3QgY2hhcmFjdGVyaXN0aWNzKQoreworICAgIHN3aXRj
aCAoY2hhcmFjdGVyaXN0aWNzKSB7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6QlRfNzA5XzY6CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlclRy
YW5zZmVyRnVuY3Rpb25fSVRVX1JfNzA5XzI7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFu
c2ZlckNoYXJhY3RlcmlzdGljczo6U01QVEVfU1RfMjQwOgorICAgICAgICByZXR1cm4ga0NWSW1h
Z2VCdWZmZXJUcmFuc2ZlckZ1bmN0aW9uX1NNUFRFXzI0ME1fMTk5NTsKKyAgICBjYXNlIFZQQ29u
ZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF8yMDg0OgorICAgICAg
ICByZXR1cm4ga0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX1NNUFRFX1NUXzIw
ODRfUFE7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6
QlRfMjAyMF8xMGJpdDoKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVy
aXN0aWNzOjpCVF8yMDIwXzEyYml0OgorICAgICAgICByZXR1cm4ga0NNRm9ybWF0RGVzY3JpcHRp
b25UcmFuc2ZlckZ1bmN0aW9uX0lUVV9SXzIwMjA7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U01QVEVfU1RfNDI4XzE6CisgICAgICAgIHJldHVybiBr
Q01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fU01QVEVfU1RfNDI4XzE7CisgICAg
Y2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfMjEwMF9ITEc6
CisgICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fSVRV
X1JfMjEwMF9ITEc7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3Rlcmlz
dGljczo6SUVDXzYxOTY2XzJfMToKKyAgICAgICAgcmV0dXJuIGNhbkxvYWRfQ29yZU1lZGlhX2tD
TUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9zUkdCKCkgPyBQQUw6OmdldF9Db3Jl
TWVkaWFfa0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX3NSR0IoKSA6IG51bGxw
dHI7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TGlu
ZWFyOgorICAgICAgICByZXR1cm4ga0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9u
X0xpbmVhcjsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIHVpbnQ4
X3QgY29udmVydFRvTWF0cml4Q29lZmZpY2llbnRzKGNvbnN0IE1hdHJpeENvZWZmaWNpZW50cyYg
Y29lZmZpY2llbnRzKQoreworICAgIHN3aXRjaCAoY29lZmZpY2llbnRzKSB7CisgICAgY2FzZSBN
YXRyaXhDb2VmZmljaWVudHM6OmtSZ2I6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25N
YXRyaXhDb2VmZmljaWVudHM6OklkZW50aXR5OworICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRz
OjprQnQ3MDk6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVu
dHM6OkJUXzcwOV82OworICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprVW5zcGVjaWZpZWQ6
CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OlVuc3Bl
Y2lmaWVkOworICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprRmNjOgorICAgICAgICByZXR1
cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpGQ0M7CisgICAgY2FzZSBNYXRy
aXhDb2VmZmljaWVudHM6OmtCdDQ3MEJnOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9u
TWF0cml4Q29lZmZpY2llbnRzOjpCVF80NzBfN19CRzsKKyAgICBjYXNlIE1hdHJpeENvZWZmaWNp
ZW50czo6a1NtcHRlMTcwTToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENv
ZWZmaWNpZW50czo6QlRfNjAxXzc7CisgICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtTbXB0
ZTI0ME06CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6
OlNNUFRFX1NUXzI0MDsKKyAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a1lDZ0NvOgorICAg
ICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpZQ2dDbzsKKyAg
ICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a0J0MjAyME5vbmNvbnN0YW50THVtaW5hbmNlOgor
ICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF8yMDIw
X05vbmNvbnN0YW50X0x1bWluYW5jZTsKKyAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a0J0
MjAyMENvbnN0YW50THVtaW5hbmNlOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0
cml4Q29lZmZpY2llbnRzOjpCVF8yMDIwX0NvbnN0YW50X0x1bWluYW5jZTsKKyAgICB9Cit9CisK
K3N0YXRpYyBDRlN0cmluZ1JlZiBjb252ZXJ0VG9DTVlDYkNSTWF0cml4KHVpbnQ4X3QgY29lZmZp
Y2llbnRzKQoreworICAgIHN3aXRjaCAoY29lZmZpY2llbnRzKSB7CisgICAgY2FzZSBWUENvbmZp
Z3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzIwMjBfTm9uY29uc3RhbnRfTHVtaW5hbmNl
OgorICAgICAgICByZXR1cm4ga0NNRm9ybWF0RGVzY3JpcHRpb25ZQ2JDck1hdHJpeF9JVFVfUl8y
MDIwOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF80NzBf
N19CRzoKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfNjAx
Xzc6CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4X0lUVV9SXzYwMV80
OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF83MDlfNjoK
KyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNzA5XzI7Cisg
ICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OlNNUFRFX1NUXzI0MDoK
KyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfU01QVEVfMjQwTV8xOTk1
OworICAgIH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgdWludDhfdCBjb252
ZXJ0U3Vic2FtcGxpbmdYWVRvQ2hyb21hU3Vic2FtcGxpbmcodWludDY0X3QgeCwgdWludDY0X3Qg
eSkKK3sKKyAgICBpZiAoeCAmIHkpCisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25DaHJv
bWFTdWJzYW1wbGluZzo6U3Vic2FtcGxpbmdfNDIwX0NvbG9jYXRlZDsKKyAgICBpZiAoeCAmICF5
KQorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ2hyb21hU3Vic2FtcGxpbmc6OlN1YnNh
bXBsaW5nXzQyMjsKKyAgICBpZiAoIXggJiAheSkKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJh
dGlvbkNocm9tYVN1YnNhbXBsaW5nOjpTdWJzYW1wbGluZ180NDQ7CisgICAgLy8gVGhpcyBpbmRp
Y2F0ZXMgNDo0OjAgc3Vic2FtcGxpbmcsIHdoaWNoIGlzIG5vdCBleHByZXNzYWJsZSBpbiB0aGUg
J3ZwY0MnIGJveC4gRGVmYXVsdCB0byA0OjI6MC4KKyAgICByZXR1cm4gVlBDb25maWd1cmF0aW9u
Q2hyb21hU3Vic2FtcGxpbmc6OlN1YnNhbXBsaW5nXzQyMF9Db2xvY2F0ZWQ7Cit9CisKK1JldGFp
blB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21W
UDlIZWFkZXJQYXJzZXIoY29uc3QgdnA5X3BhcnNlcjo6VnA5SGVhZGVyUGFyc2VyJiBwYXJzZXIs
IGNvbnN0IHdlYm06OkVsZW1lbnQ8Q29sb3VyPiYgY29sb3IpCit7CisgICAgLy8gUmVmOiAiVlAg
Q29kZWMgSVNPIE1lZGlhIEZpbGUgRm9ybWF0IEJpbmRpbmcsIHYxLjAsIDIwMTctMDMtMzEiCisg
ICAgLy8gPGh0dHBzOi8vd3d3LndlYm1wcm9qZWN0Lm9yZy92cDkvbXA0Lz4KKyAgICAvLworICAg
IC8vIGNsYXNzIFZQQ29kZWNDb25maWd1cmF0aW9uQm94IGV4dGVuZHMgRnVsbEJveCgndnBjQycs
IHZlcnNpb24gPSAxLCAwKQorICAgIC8vIHsKKyAgICAvLyAgICAgVlBDb2RlY0NvbmZpZ3VyYXRp
b25SZWNvcmQoKSB2cGNDb25maWc7CisgICAgLy8gfQorICAgIC8vCisgICAgLy8gYWxpZ25lZCAo
OCkgY2xhc3MgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQgeworICAgIC8vICAgICB1bnNpZ25l
ZCBpbnQgKDgpICAgICBwcm9maWxlOworICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDgpICAgICBs
ZXZlbDsKKyAgICAvLyAgICAgdW5zaWduZWQgaW50ICg0KSAgICAgYml0RGVwdGg7CisgICAgLy8g
ICAgIHVuc2lnbmVkIGludCAoMykgICAgIGNocm9tYVN1YnNhbXBsaW5nOworICAgIC8vICAgICB1
bnNpZ25lZCBpbnQgKDEpICAgICB2aWRlb0Z1bGxSYW5nZUZsYWc7CisgICAgLy8gICAgIHVuc2ln
bmVkIGludCAoOCkgICAgIGNvbG91clByaW1hcmllczsKKyAgICAvLyAgICAgdW5zaWduZWQgaW50
ICg4KSAgICAgdHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M7CisgICAgLy8gICAgIHVuc2lnbmVkIGlu
dCAoOCkgICAgIG1hdHJpeENvZWZmaWNpZW50czsKKyAgICAvLyAgICAgdW5zaWduZWQgaW50ICgx
NikgICAgY29kZWNJbnRpYWxpemF0aW9uRGF0YVNpemU7CisgICAgLy8gICAgIHVuc2lnbmVkIGlu
dCAoOClbXSAgIGNvZGVjSW50aWFsaXphdGlvbkRhdGE7CisgICAgLy8gfQorICAgIC8vCisgICAg
Ly8gY29kZWNJbnRpYWxpemF0aW9uRGF0YVNpemXigItGb3IgVlA4IGFuZCBWUDkgdGhpcyBmaWVs
ZCBtdXN0IGJlIDAuCisgICAgLy8gY29kZWNJbnRpYWxpemF0aW9uRGF0YeKAi2JpbmFyeSBjb2Rl
YyBpbml0aWFsaXphdGlvbiBkYXRhLiBOb3QgdXNlZCBmb3IgVlA4IGFuZCBWUDkuCisgICAgLy8K
KyAgICAvLyBGSVhNRTogQ29udmVydCBleGlzdGluZyBzdHJ1Y3QgdG8gYW4gSVNPQm94IGFuZCBy
ZXBsYWNlIHRoZSB3cml0aW5nIGNvZGUgYmVsb3cKKyAgICAvLyB3aXRoIGEgc3ViY2xhc3Mgb2Yg
SVNPRnVsbEJveC4KKworICAgIFZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkIHJlY29yZDsKKwor
ICAgIHJlY29yZC5wcm9maWxlID0gcGFyc2VyLnByb2ZpbGUoKTsKKyAgICAvLyBDb3JlTWVkaWEg
ZG9lcyBuYXQgY2FyZSBhYm91dCB0aGUgVlA5IGNvZGVjIGxldmVsOyBoYXJkLWNvZGUgdG8gTGV2
ZWwgMS4wIGhlcmU6CisgICAgcmVjb3JkLmxldmVsID0gMTA7CisgICAgcmVjb3JkLmJpdERlcHRo
ID0gcGFyc2VyLmJpdF9kZXB0aCgpOworICAgIHJlY29yZC52aWRlb0Z1bGxSYW5nZUZsYWcgPSBw
YXJzZXIuY29sb3JfcmFuZ2UoKSA/IFZQQ29uZmlndXJhdGlvblJhbmdlOjpGdWxsUmFuZ2UgOiBW
UENvbmZpZ3VyYXRpb25SYW5nZTo6VmlkZW9SYW5nZTsKKyAgICByZWNvcmQuY2hyb21hU3Vic2Ft
cGxpbmcgPSBjb252ZXJ0U3Vic2FtcGxpbmdYWVRvQ2hyb21hU3Vic2FtcGxpbmcocGFyc2VyLnN1
YnNhbXBsaW5nX3goKSwgcGFyc2VyLnN1YnNhbXBsaW5nX3koKSk7CisgICAgcmVjb3JkLmNvbG9y
UHJpbWFyaWVzID0gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlVuc3BlY2lmaWVkOwor
ICAgIHJlY29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGljcyA9IFZQQ29uZmlndXJhdGlvblRyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpVbnNwZWNpZmllZDsKKyAgICByZWNvcmQubWF0cml4Q29lZmZp
Y2llbnRzID0gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpVbnNwZWNpZmllZDsK
KworICAgIC8vIENvbnRhaW5lciBjb2xvciB2YWx1ZXMgY2FuIG92ZXJyaWRlIHBlci1zYW1wbGUg
b25lczoKKyAgICBpZiAoY29sb3IuaXNfcHJlc2VudCgpKSB7CisgICAgICAgIGF1dG8mIGNvbG9y
VmFsdWUgPSBjb2xvci52YWx1ZSgpOworICAgICAgICBpZiAoY29sb3JWYWx1ZS5jaHJvbWFfc3Vi
c2FtcGxpbmdfeC5pc19wcmVzZW50KCkgJiYgY29sb3JWYWx1ZS5jaHJvbWFfc3Vic2FtcGxpbmdf
eS5pc19wcmVzZW50KCkpCisgICAgICAgICAgICByZWNvcmQuY2hyb21hU3Vic2FtcGxpbmcgPSBj
b252ZXJ0U3Vic2FtcGxpbmdYWVRvQ2hyb21hU3Vic2FtcGxpbmcoY29sb3JWYWx1ZS5jaHJvbWFf
c3Vic2FtcGxpbmdfeC52YWx1ZSgpLCBjb2xvclZhbHVlLmNocm9tYV9zdWJzYW1wbGluZ195LnZh
bHVlKCkpOworICAgICAgICBpZiAoY29sb3JWYWx1ZS5yYW5nZS5pc19wcmVzZW50KCkgJiYgY29s
b3JWYWx1ZS5yYW5nZS52YWx1ZSgpICE9IFJhbmdlOjprVW5zcGVjaWZpZWQpCisgICAgICAgICAg
ICByZWNvcmQudmlkZW9GdWxsUmFuZ2VGbGFnID0gY29sb3JWYWx1ZS5yYW5nZS52YWx1ZSgpID09
IFJhbmdlOjprRnVsbCA/IFZQQ29uZmlndXJhdGlvblJhbmdlOjpGdWxsUmFuZ2UgOiBWUENvbmZp
Z3VyYXRpb25SYW5nZTo6VmlkZW9SYW5nZTsKKyAgICAgICAgaWYgKGNvbG9yVmFsdWUuYml0c19w
ZXJfY2hhbm5lbC5pc19wcmVzZW50KCkpCisgICAgICAgICAgICByZWNvcmQuYml0RGVwdGggPSBj
b2xvclZhbHVlLmJpdHNfcGVyX2NoYW5uZWwudmFsdWUoKTsKKyAgICAgICAgaWYgKGNvbG9yVmFs
dWUudHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzLmlzX3ByZXNlbnQoKSkKKyAgICAgICAgICAgIHJl
Y29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGljcyA9IGNvbnZlcnRUb1RyYW5zZmVyQ2hhcmFjdGVy
aXN0aWNzKGNvbG9yVmFsdWUudHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzLnZhbHVlKCkpOworICAg
ICAgICBpZiAoY29sb3JWYWx1ZS5tYXRyaXhfY29lZmZpY2llbnRzLmlzX3ByZXNlbnQoKSkKKyAg
ICAgICAgICAgIHJlY29yZC5tYXRyaXhDb2VmZmljaWVudHMgPSBjb252ZXJ0VG9NYXRyaXhDb2Vm
ZmljaWVudHMoY29sb3JWYWx1ZS5tYXRyaXhfY29lZmZpY2llbnRzLnZhbHVlKCkpOworICAgICAg
ICBpZiAoY29sb3JWYWx1ZS5wcmltYXJpZXMuaXNfcHJlc2VudCgpKQorICAgICAgICAgICAgcmVj
b3JkLmNvbG9yUHJpbWFyaWVzID0gY29udmVydFRvQ29sb3JQcmltYXJpZXMoY29sb3JWYWx1ZS5w
cmltYXJpZXMudmFsdWUoKSk7CisgICAgfQorCisgICAgY29uc3RleHByIHNpemVfdCBWUENvZGVj
Q29uZmlndXJhdGlvbkNvbnRlbnRzU2l6ZSA9IDEyOworCisgICAgdWludDMyX3QgdmVyc2lvbkFu
ZEZsYWdzID0gMSA8PCAyNDsKKyAgICB1aW50OF90IGJpdERlcHRoQ2hyb21hQW5kUmFuZ2UgPSAo
MHhGICYgcmVjb3JkLmJpdERlcHRoKSA8PCA0IHwgKDB4NyAmIHJlY29yZC5jaHJvbWFTdWJzYW1w
bGluZykgPDwgMSB8ICgweDEgJiByZWNvcmQudmlkZW9GdWxsUmFuZ2VGbGFnKTsKKyAgICB1aW50
MTZfdCBjb2RlY0ludGlhbGl6YXRpb25EYXRhU2l6ZSA9IDA7CisKKyAgICBhdXRvIHZpZXcgPSBK
U0M6OkRhdGFWaWV3OjpjcmVhdGUoQXJyYXlCdWZmZXI6OmNyZWF0ZShWUENvZGVjQ29uZmlndXJh
dGlvbkNvbnRlbnRzU2l6ZSwgMSksIDAsIFZQQ29kZWNDb25maWd1cmF0aW9uQ29udGVudHNTaXpl
KTsKKyAgICB2aWV3LT5zZXQoMCwgdmVyc2lvbkFuZEZsYWdzLCBmYWxzZSk7CisgICAgdmlldy0+
c2V0KDQsIHJlY29yZC5wcm9maWxlLCBmYWxzZSk7CisgICAgdmlldy0+c2V0KDUsIHJlY29yZC5s
ZXZlbCwgZmFsc2UpOworICAgIHZpZXctPnNldCg2LCBiaXREZXB0aENocm9tYUFuZFJhbmdlLCBm
YWxzZSk7CisgICAgdmlldy0+c2V0KDcsIHJlY29yZC5jb2xvclByaW1hcmllcywgZmFsc2UpOwor
ICAgIHZpZXctPnNldCg4LCByZWNvcmQudHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MsIGZhbHNlKTsK
KyAgICB2aWV3LT5zZXQoOSwgcmVjb3JkLm1hdHJpeENvZWZmaWNpZW50cywgZmFsc2UpOworICAg
IHZpZXctPnNldCgxMCwgY29kZWNJbnRpYWxpemF0aW9uRGF0YVNpemUsIGZhbHNlKTsKKworICAg
IGF1dG8gZGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIChj
b25zdCBVSW50OCAqKXZpZXctPmRhdGEoKSwgdmlldy0+Ynl0ZUxlbmd0aCgpKSk7CisKKyAgICBD
RlR5cGVSZWYgY29uZmlndXJhdGlvbktleXNbXSA9IHsgQ0ZTVFIoInZwY0MiKSB9OworICAgIENG
VHlwZVJlZiBjb25maWd1cmF0aW9uVmFsdWVzW10gPSB7IGRhdGEuZ2V0KCkgfTsKKyAgICBhdXRv
IGNvbmZpZ3VyYXRpb25EaWN0ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgY29uZmlndXJhdGlvbktleXMsIGNvbmZpZ3VyYXRpb25WYWx1ZXMsIFdURl9B
UlJBWV9MRU5HVEgoY29uZmlndXJhdGlvbktleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxs
QmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisKKyAgICBWZWN0b3I8
Q0ZUeXBlUmVmPiBleHRlbnNpb25zS2V5cyB7IGtDTUZvcm1hdERlc2NyaXB0aW9uRXh0ZW5zaW9u
X1NhbXBsZURlc2NyaXB0aW9uRXh0ZW5zaW9uQXRvbXMgfTsKKyAgICBWZWN0b3I8Q0ZUeXBlUmVm
PiBleHRlbnNpb25zVmFsdWVzID0geyBjb25maWd1cmF0aW9uRGljdC5nZXQoKSB9OworCisgICAg
aWYgKHJlY29yZC52aWRlb0Z1bGxSYW5nZUZsYWcgPT0gVlBDb25maWd1cmF0aW9uUmFuZ2U6OkZ1
bGxSYW5nZSkgeworICAgICAgICBleHRlbnNpb25zS2V5cy5hcHBlbmQoa0NNRm9ybWF0RGVzY3Jp
cHRpb25FeHRlbnNpb25fRnVsbFJhbmdlVmlkZW8pOworICAgICAgICBleHRlbnNpb25zVmFsdWVz
LmFwcGVuZChrQ0ZCb29sZWFuVHJ1ZSk7CisgICAgfQorCisgICAgaWYgKGF1dG8gY21Db2xvclBy
aW1hcmllcyA9IGNvbnZlcnRUb0NNQ29sb3JQcmltYXJpZXMocmVjb3JkLmNvbG9yUHJpbWFyaWVz
KSkgeworICAgICAgICBleHRlbnNpb25zS2V5cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJDb2xvclBy
aW1hcmllc0tleSk7CisgICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGNtQ29sb3JQcmlt
YXJpZXMpOworICAgIH0KKworICAgIGlmIChhdXRvIGNtVHJhbnNmZXJGdW5jdGlvbiA9IGNvbnZl
cnRUb0NNVHJhbnNmZXJGdW5jdGlvbihyZWNvcmQudHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MpKSB7
CisgICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlclRyYW5zZmVyRnVu
Y3Rpb25LZXkpOworICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbVRyYW5zZmVyRnVu
Y3Rpb24pOworICAgIH0KKworICAgIGlmIChhdXRvIGNtTWF0cml4ID0gY29udmVydFRvQ01ZQ2JD
Uk1hdHJpeChyZWNvcmQubWF0cml4Q29lZmZpY2llbnRzKSkgeworICAgICAgICBleHRlbnNpb25z
S2V5cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeEtleSk7CisgICAgICAgIGV4dGVu
c2lvbnNWYWx1ZXMuYXBwZW5kKGNtTWF0cml4KTsKKyAgICB9CisKKyAgICBhdXRvIGV4dGVuc2lv
bnMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBleHRl
bnNpb25zS2V5cy5kYXRhKCksIGV4dGVuc2lvbnNWYWx1ZXMuZGF0YSgpLCBleHRlbnNpb25zS2V5
cy5zaXplKCksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9u
YXJ5VmFsdWVDYWxsQmFja3MpKTsKKworICAgIENNVmlkZW9Gb3JtYXREZXNjcmlwdGlvblJlZiBm
b3JtYXREZXNjcmlwdGlvbiA9IG51bGxwdHI7CisgICAgaWYgKG5vRXJyICE9IENNVmlkZW9Gb3Jt
YXREZXNjcmlwdGlvbkNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ01WaWRlb0NvZGVjVHlw
ZV9WUDksIHBhcnNlci53aWR0aCgpLCBwYXJzZXIuaGVpZ2h0KCksIGV4dGVuc2lvbnMuZ2V0KCks
ICZmb3JtYXREZXNjcmlwdGlvbikpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVy
biBhZG9wdENGKGZvcm1hdERlc2NyaXB0aW9uKTsKK30KKwogfQogCiAjZW5kaWYgLy8gUExBVEZP
Uk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMWY2
MzdjMDI0ZjhjNTg3ZWFjYjNiN2VhMDE3NzI2M2NhODc4MzQ5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVz
Q29jb2EuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBQTEFURk9STShDT0NPQSkKKworI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworY2xhc3Mg
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbjsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IG9wYXF1ZUNNRm9y
bWF0RGVzY3JpcHRpb24qIENNRm9ybWF0RGVzY3JpcHRpb25SZWY7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworYm9vbCBpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKTsKK1JldGFpblB0cjxDTUZv
cm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVWb3JiaXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKHNp
emVfdCwgY29uc3Qgdm9pZCopOworCitib29sIGlzT3B1c0RlY29kZXJBdmFpbGFibGUoKTsKK1Jl
dGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBjcmVhdGVPcHVzQXVkaW9Gb3JtYXREZXNj
cmlwdGlvbihzaXplX3QsIGNvbnN0IHZvaWQqKTsKKworfQorCisjZW5kaWYgLy8gJiYgUExBVEZP
Uk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1tCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYy
NzNkY2UxNTdkY2VmNjJjZjVmZmE3NjkyMjk0YzkxZWMxYTZjZmQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRp
ZXNDb2NvYS5tbQpAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCIKKworI2lmIFBMQVRGT1JN
KENPQ09BKQorCisjaW1wb3J0ICJDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKKyNpbXBvcnQg
IkxvZ2dpbmcuaCIKKyNpbXBvcnQgIk1lZGlhVXRpbGl0aWVzLmgiCisjaW1wb3J0IDxBdWRpb1Rv
b2xib3gvQXVkaW9Db21wb25lbnQuaD4KKyNpbXBvcnQgPEF1ZGlvVG9vbGJveC9BdWRpb0Zvcm1h
dC5oPgorI2ltcG9ydCA8Q29yZU1lZGlhL0NNRm9ybWF0RGVzY3JpcHRpb24uaD4KKyNpbXBvcnQg
PGRsZmNuLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShWT1JCSVMpIHx8
IEVOQUJMRShPUFVTKQorc3RhdGljIGJvb2wgcmVnaXN0ZXJEZWNvZGVyRmFjdG9yeShjb25zdCBj
aGFyKiBkZWNvZGVyTmFtZSwgT1NUeXBlIGRlY29kZXJUeXBlKQoreworICAgIGNvbnN0ZXhwciBj
aGFyIGF1ZGlvQ29tcG9uZW50c0R5bGliW10gPSAiL1N5c3RlbS9MaWJyYXJ5L0NvbXBvbmVudHMv
QXVkaW9Db2RlY3MuY29tcG9uZW50L0NvbnRlbnRzL01hY09TL0F1ZGlvQ29kZWNzIjsKKyAgICB2
b2lkICpoYW5kbGUgPSBkbG9wZW4oYXVkaW9Db21wb25lbnRzRHlsaWIsIFJUTERfTEFaWSB8IFJU
TERfTE9DQUwpOworICAgIGlmICghaGFuZGxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBBdWRpb0NvbXBvbmVudEZhY3RvcnlGdW5jdGlvbiBkZWNvZGVyRmFjdG9yeSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8QXVkaW9Db21wb25lbnRGYWN0b3J5RnVuY3Rpb24+KGRsc3ltKGhhbmRsZSwgZGVj
b2Rlck5hbWUpKTsKKyAgICBpZiAoIWRlY29kZXJGYWN0b3J5KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBBdWRpb0NvbXBvbmVudERlc2NyaXB0aW9uIGRlc2MgeyAnYWRlYycsIGRlY29k
ZXJUeXBlLCAnYXBwbCcsIGtBdWRpb0NvbXBvbmVudEZsYWdfU2FuZGJveFNhZmUsIDAgfTsKKyAg
ICBpZiAoIUF1ZGlvQ29tcG9uZW50UmVnaXN0ZXIoJmRlc2MsIENGU1RSKCIiKSwgMCwgZGVjb2Rl
ckZhY3RvcnkpKSB7CisgICAgICAgIGRsY2xvc2UoaGFuZGxlKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgUmV0YWluUHRyPENN
Rm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25Gb3JGb3Jt
YXQoT1NUeXBlIGZvcm1hdElELCBWZWN0b3I8dWludDhfdD4gbWFnaWNDb29raWUpCit7CisgICAg
QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uIGFzYmQgeyB9OworICAgIGFzYmQubUZvcm1hdElE
ID0gZm9ybWF0SUQ7CisgICAgdWludDMyX3Qgc2l6ZSA9IHNpemVvZihhc2JkKTsKKyAgICBhdXRv
IGVycm9yID0gQXVkaW9Gb3JtYXRHZXRQcm9wZXJ0eShrQXVkaW9Gb3JtYXRQcm9wZXJ0eV9Gb3Jt
YXRJbmZvLCBtYWdpY0Nvb2tpZS5zaXplKCksIG1hZ2ljQ29va2llLmRhdGEoKSwgJnNpemUsICZh
c2JkKTsKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTWVkaWEs
ICJjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uRm9yRm9ybWF0IGZhaWxlZCB3aXRoIGVycm9y
ICVkICglLjRzKSIsIGVycm9yLCAoY2hhciAqKSZlcnJvcik7CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKworICAgIHJldHVybiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKENB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbihhc2JkKSwgbWFnaWNDb29raWUuc2l6ZSgpLCBtYWdpY0Nv
b2tpZS5kYXRhKCkpOworfQorI2VuZGlmIC8vIEVOQUJMRShWT1JCSVMpIHx8IEVOQUJMRShPUFVT
KQorCisjaWYgRU5BQkxFKE9QVVMpCitzdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGNvb2tpZUZyb21P
cHVzQ29kZWNQcml2YXRlKHNpemVfdCwgY29uc3Qgdm9pZCopCit7CisgICAgcmV0dXJuIHsgfTsK
K30KKyNlbmRpZgorCitib29sIGlzT3B1c0RlY29kZXJBdmFpbGFibGUoKQoreworICAgIHN0YXRp
YyBib29sIGF2YWlsYWJsZTsKKworI2lmIEVOQUJMRShPUFVTKSAmJiBQTEFURk9STShNQUMpCisg
ICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlVG9rZW47CisgICAgZGlzcGF0Y2hfb25jZSgm
b25jZVRva2VuLCBeeworICAgICAgICBhdmFpbGFibGUgPSByZWdpc3RlckRlY29kZXJGYWN0b3J5
KCJBQ09wdXNEZWNvZGVyRmFjdG9yeSIsICdvcHVzJyk7CisgICAgfSk7CisjZW5kaWYKKworICAg
IHJldHVybiBhdmFpbGFibGU7Cit9CisKK1JldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVm
PiBjcmVhdGVPcHVzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihzaXplX3QgcHJpdmF0ZURhdGFTaXpl
LCBjb25zdCB2b2lkKiBwcml2YXRlRGF0YSkKK3sKKyNpZiBFTkFCTEUoT1BVUykKKyAgICBpZiAo
IWlzT3B1c0RlY29kZXJBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBhdXRvIGNvb2tpZURhdGEgPSBjb29raWVGcm9tT3B1c0NvZGVjUHJpdmF0ZShwcml2YXRlRGF0
YVNpemUsIHByaXZhdGVEYXRhKTsKKyAgICBpZiAoIWNvb2tpZURhdGEuc2l6ZSgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0
aW9uRm9yRm9ybWF0KCdvcHVzJywgY29va2llRGF0YSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShwcml2YXRlRGF0YVNpemUpOworICAgIFVOVVNFRF9QQVJBTShwcml2YXRlRGF0YSk7CisgICAg
cmV0dXJuIG51bGxwdHI7CisjZW5kaWYKK30KKworI2lmIEVOQUJMRShWT1JCSVMpCitzdGF0aWMg
VmVjdG9yPHVpbnQ4X3Q+IGNvb2tpZUZyb21Wb3JiaXNDb2RlY1ByaXZhdGUoc2l6ZV90IGNvZGVj
UHJpdmF0ZVNpemUsIGNvbnN0IHZvaWQqIGNvZGVjUHJpdmF0ZURhdGEpCit7CisgICAgLy8gaHR0
cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtY2VsbGFyLWNvZGVjLTAzCisgICAg
Ly8gNi40LjE1LiBBX1ZPUkJJUworICAgIC8vIENvZGVjIElEOiBBX1ZPUkJJUworICAgIC8vIENv
ZGVjIE5hbWU6IFZvcmJpcworICAgIC8vIEluaXRpYWxpemF0aW9uOiBUaGUgIlByaXZhdGUgRGF0
YSIgY29udGFpbnMgdGhlIGZpcnN0IHRocmVlIFZvcmJpcyBwYWNrZXQgaW4gb3JkZXIuIFRoZSBs
ZW5ndGhzIG9mIHRoZQorICAgIC8vIHBhY2tldHMgcHJlY2VkZXMgdGhlbS4gVGhlIGFjdHVhbCBs
YXlvdXQgaXM6CisgICAgLy8gLSBCeXRlIDE6IG51bWJlciBvZiBkaXN0aW5jdCBwYWNrZXRzICci
I3AiJyBtaW51cyBvbmUgaW5zaWRlIHRoZSBDb2RlY1ByaXZhdGUgYmxvY2suVGhpcyBNVVNUIGJl
ICcyJworICAgIC8vICAgZm9yIGN1cnJlbnQgKGFzIG9mIDIwMTYtMDctMDgpIFZvcmJpcyBoZWFk
ZXJzLgorICAgIC8vIC0gQnl0ZXMgMi4ubjogbGVuZ3RocyBvZiB0aGUgZmlyc3QgJyIjcCInIHBh
Y2tldHMsIGNvZGVkIGluIFhpcGgtc3R5bGUgbGFjaW5nLiBUaGUgbGVuZ3RoIG9mIHRoZSBsYXN0
CisgICAgLy8gICBwYWNrZXQgaXMgdGhlIGxlbmd0aCBvZiB0aGUgQ29kZWNQcml2YXRlIGJsb2Nr
IG1pbnVzIHRoZSBsZW5ndGhzIGNvZGVkIGluIHRoZXNlIGJ5dGVzIG1pbnVzIG9uZS4KKyAgICAv
LyAtIEJ5dGVzIG4rMS4uOiBUaGUgVm9yYmlzIGlkZW50aWZpY2F0aW9uIGhlYWRlciwgZm9sbG93
ZWQgYnkgdGhlIFZvcmJpcyBjb21tZW50IGhlYWRlciBmb2xsb3dlZCBieSB0aGUKKyAgICAvLyAg
IGNvZGVjIHNldHVwIGhlYWRlci4KKworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHByaXZhdGVE
YXRhUHRyID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGNvZGVjUHJpdmF0ZURh
dGEpOworCisgICAgY29uc3QgaW50IHZvcmJpc01pbmltdW1Db29raWVTaXplID0gMzsKKyAgICBp
ZiAoY29kZWNQcml2YXRlU2l6ZSA8IHZvcmJpc01pbmltdW1Db29raWVTaXplKSB7CisgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SKE1lZGlhLCAiY29va2llRnJvbVZvcmJpc0NvZGVjUHJpdmF0ZTog
Y29kZWMgcHJpdmF0ZSBkYXRhIHRvbyBzbWFsbCAoJXp1KSIsIGNvZGVjUHJpdmF0ZVNpemUpOwor
ICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIC8vIERlc3BpdGUgdGhlICJUaGlzIE1V
U1QgYmUgJzInIiBjb21tZW50IGluIHRoZSBJRVRGIGRvY3VtZW50LCBwYWNrZXQgY291bnQgaXMg
bm90IGFsd2F5cyBlcXVhbCB0bworICAgIC8vIDIgaW4gcmVhbC13b3JkIGZpbGVzLCBzbyBpZ25v
cmUgdGhhdCBmaWVsZC4KKyAgICBjb25zdCB1aW50MTZfdCBpZEhlYWRlclNpemUgPSBwcml2YXRl
RGF0YVB0clsxXTsKKyAgICBjb25zdCB1aW50MTZfdCBjb21tZW50SGVhZGVyU2l6ZSA9IHByaXZh
dGVEYXRhUHRyWzJdOworICAgIGNvbnN0IHVpbnQxNl90IGNhbGN1bGF0ZWRIZWFkZXJTaXplID0g
MSArIGlkSGVhZGVyU2l6ZSArIGNvbW1lbnRIZWFkZXJTaXplOworICAgIGlmICgxICsgaWRIZWFk
ZXJTaXplICsgY29tbWVudEhlYWRlclNpemUgPiBjb2RlY1ByaXZhdGVTaXplKSB7CisgICAgICAg
IFJFTEVBU0VfTE9HX0VSUk9SKE1lZGlhLCAiY29va2llRnJvbVZvcmJpc0NvZGVjUHJpdmF0ZTog
Y29kZWMgcHJpdmF0ZSBkYXRhIHRvbyBzbWFsbCAoJXp1KSBmb3IgaGVhZGVyIHNpemVzICglZCki
LCBjb2RlY1ByaXZhdGVTaXplLCBjYWxjdWxhdGVkSGVhZGVyU2l6ZSk7CisgICAgICAgIHJldHVy
biB7IH07CisgICAgfQorCisgICAgY29uc3QgdW5zaWduZWQgY2hhciogaWRIZWFkZXIgPSAmcHJp
dmF0ZURhdGFQdHJbM107CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogY29tbWVudEhlYWRlciA9
IGlkSGVhZGVyICsgaWRIZWFkZXJTaXplOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvZGVj
U2V0dXBIZWFkZXIgPSBjb21tZW50SGVhZGVyICsgY29tbWVudEhlYWRlclNpemU7CisgICAgY29u
c3QgdWludDE2X3QgY29kZWNTZXR1cEhlYWRlclNpemUgPSBjb2RlY1ByaXZhdGVTaXplIC0gaWRI
ZWFkZXJTaXplIC0gY29tbWVudEhlYWRlclNpemUgLSAyIC0gMTsKKworICAgIGlmICgoaWRIZWFk
ZXJTaXplICsgY29tbWVudEhlYWRlclNpemUgKyBjb2RlY1NldHVwSGVhZGVyU2l6ZSArIDMpID4g
Y29kZWNQcml2YXRlU2l6ZSkgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihNZWRpYSwgImNv
b2tpZUZyb21Wb3JiaXNDb2RlY1ByaXZhdGU6IGNvZGVjIHByaXZhdGUgaGVhZGVyIHNpemUgaXMg
aW52YWxpZCAtIGlkID0gJWQsIGNvbW1lbnQgPSAlZCwgaGVhZGVyID0gJWQsIGNodW5rIHNpemUg
PSAlenUiLCBpZEhlYWRlclNpemUsIGNvbW1lbnRIZWFkZXJTaXplLCBjb2RlY1NldHVwSGVhZGVy
U2l6ZSwgY29kZWNQcml2YXRlU2l6ZSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGNvb2tpZURhdGE7CisgICAgY29va2llRGF0YS5hcHBlbmQocmVp
bnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgdWludDhfdCo+KCZpZEhlYWRlclNpemUpLCBzaXplb2Yo
aWRIZWFkZXJTaXplKSk7CisgICAgY29va2llRGF0YS5hcHBlbmQoaWRIZWFkZXIsIGlkSGVhZGVy
U2l6ZSk7CisKKyAgICBjb29raWVEYXRhLmFwcGVuZChyZWludGVycHJldF9jYXN0X3B0cjxjb25z
dCB1aW50OF90Kj4oJmNvbW1lbnRIZWFkZXJTaXplKSwgc2l6ZW9mKGNvbW1lbnRIZWFkZXJTaXpl
KSk7CisgICAgY29va2llRGF0YS5hcHBlbmQoY29tbWVudEhlYWRlciwgY29tbWVudEhlYWRlclNp
emUpOworCisgICAgY29va2llRGF0YS5hcHBlbmQocmVpbnRlcnByZXRfY2FzdF9wdHI8Y29uc3Qg
dWludDhfdCo+KCZjb2RlY1NldHVwSGVhZGVyU2l6ZSksIHNpemVvZihjb2RlY1NldHVwSGVhZGVy
U2l6ZSkpOworICAgIGNvb2tpZURhdGEuYXBwZW5kKGNvZGVjU2V0dXBIZWFkZXIsIGNvZGVjU2V0
dXBIZWFkZXJTaXplKTsKKworICAgIHJldHVybiBjb29raWVEYXRhOworfQorI2VuZGlmIC8vIEVO
QUJMRShWT1JCSVMpCisKK2Jvb2wgaXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCkKK3sKKyAgICBz
dGF0aWMgYm9vbCBhdmFpbGFibGU7CisKKyNpZiBFTkFCTEUoVk9SQklTKSAmJiBQTEFURk9STShN
QUMpCisgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlVG9rZW47CisgICAgZGlzcGF0Y2hf
b25jZSgmb25jZVRva2VuLCBeeworICAgICAgICBhdmFpbGFibGUgPSByZWdpc3RlckRlY29kZXJG
YWN0b3J5KCJBQ1ZvcmJpc0RlY29kZXJGYWN0b3J5IiwgJ3ZvcmInKTsKKyAgICB9KTsKKyNlbmRp
ZgorCisgICAgcmV0dXJuIGF2YWlsYWJsZTsKK30KKworUmV0YWluUHRyPENNRm9ybWF0RGVzY3Jp
cHRpb25SZWY+IGNyZWF0ZVZvcmJpc0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24oc2l6ZV90IHByaXZh
dGVEYXRhU2l6ZSwgY29uc3Qgdm9pZCogcHJpdmF0ZURhdGEpCit7CisjaWYgRU5BQkxFKFZPUkJJ
UykKKyAgICBpZiAoIWlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGF1dG8gY29va2llRGF0YSA9IGNvb2tpZUZyb21Wb3JiaXNDb2RlY1By
aXZhdGUocHJpdmF0ZURhdGFTaXplLCBwcml2YXRlRGF0YSk7CisgICAgaWYgKCFjb29raWVEYXRh
LnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gY3JlYXRlQXVk
aW9Gb3JtYXREZXNjcmlwdGlvbkZvckZvcm1hdCgndm9yYicsIGNvb2tpZURhdGEpOworI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0ocHJpdmF0ZURhdGFTaXplKTsKKyAgICBVTlVTRURfUEFSQU0ocHJp
dmF0ZURhdGEpOworICAgIHJldHVybiBudWxscHRyOworI2VuZGlmCit9CisKK30KKworI2VuZGlm
IC8vIFBMQVRGT1JNKENPQ09BKQo=
</data>
<flag name="commit-queue"
          id="433299"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415929</attachid>
            <date>2020-12-10 14:14:01 -0800</date>
            <delta_ts>2020-12-10 15:51:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219755-20201210141400.patch</filename>
            <type>text/plain</type>
            <size>85279</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwNjM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGE5YjdjY2JmMTY3YWI0
M2I1YWYzZWIzZmI0Y2QzMDM2MTdiZmI3ZS4uNWM4MGJlYWYwOWIzODNiNzcxMWVlMzMyNzIwODg0
ZDA5N2Y4Nzk0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDIwLTEyLTEwICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNU0VdIFJlZmFj
dG9yIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gaW4gcHJlcGFyYXRpb24gZm9yIHN1cHBvcnRpbmcg
YXVkaW8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
OTc1NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzIxOTI2MjU+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgSmVyIE5vYmxlLgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBXZWJNIHBhcnNlciBpbiBw
cmVwYXJhdGlvbiBmb3Igc3VwcG9ydGluZyBhdWRpbzogbW92ZSBWUDktc3BlY2lmaWMgY29kZQor
ICAgICAgICBpbnRvIFZQOVV0aWxpdGllc0NvY29hLCBjb252ZXJ0IFRyYWNrRGF0YSBmcm9tIGEg
c3RydWN0IHRvIGEgY2xhc3MgYW5kIG1hZGUgZGVyaXZlZAorICAgICAgICBjbGFzc2VzIGZvciBh
dWRpbyBhbmQgdmlkZW8sIGFkZCBzdHViIGZ1bmN0aW9uIHRvIGNyZWF0ZSBmb3JtYXQgZGVzY3Jp
cHRpb25zIGZvciAKKyAgICAgICAgVm9yYmlzIGFuZCBPcHVzIGF1ZGlvLgorCisgICAgICAgICog
U291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9NZWRpYVV0aWxpdGllcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKTogQWRkIG9wdGlv
bmFsIHBhcmFtZXRlcnMgZm9yIG1hZ2ljIGNvb2tpZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2Nv
YS9NZWRpYVV0aWxpdGllcy5oOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
U291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjppc0NvbnRlbnRUeXBlU3VwcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpyZXNldFBhcnNlclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uVHJhY2tFbnRyeSk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkZyYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnByb3ZpZGVNZWRpYURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OmNv
bnN1bWVGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6VmlkZW9UcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNr
RGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OmZsdXNoUGVuZGluZ0F1ZGlvQnVmZmVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRNaW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9Db2xvclByaW1hcmllcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9DTUNvbG9yUHJpbWFyaWVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NNVHJhbnNmZXJGdW5jdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9NYXRyaXhDb2VmZmljaWVudHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01ZQ2JDUk1hdHJpeCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0U3Vic2FtcGxpbmdYWVRvQ2hyb21hU3Vic2FtcGxp
bmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRm9ybWF0RGVzY3JpcHRpb25G
cm9tVlA5SGVhZGVyUGFyc2VyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmg6CisgICAgICAgIChpc1R5cGUpOgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NvbG9yUHJpbWFyaWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnRUb0NNQ29sb3JQcmltYXJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVy
dFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRv
Q01UcmFuc2ZlckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb01hdHJpeENv
ZWZmaWNpZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9DTVlDYkNSTWF0cml4KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJzYW1wbGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDlIZWFk
ZXJQYXJzZXIpOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlv
VXRpbGl0aWVzQ29jb2EuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
cmVnaXN0ZXJEZWNvZGVyRmFjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBdWRpb0Zv
cm1hdERlc2NyaXB0aW9uRm9yRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZUZyb21P
cHVzQ29kZWNQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzT3B1c0RlY29kZXJBdmFpbGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlT3B1c0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Y29va2llRnJvbVZvcmJpc0NvZGVjUHJpdmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjppc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlVm9yYmlzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbik6CisKIDIwMjAtMTItMTAgIFph
bGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIEludHJv
ZHVjZSBJbmxpbmVUZXh0SXRlbTo6aXNXb3JkU2VwYXJhdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4
dAppbmRleCA4Zjk5ZjlhMTkxOGM5NTU4ODVmYjJhY2I5OWM4ZDFhNzUyNjVhYTAzLi5lNTkxMzlm
YmI0NTY1MGRlZjk5NmY4MjFkNWNhZmE0MGI3MmQ4ZWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50
eHQKQEAgLTM3Niw2ICszNzYsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJDb3JlQ0FM
YXllckV4dHJhcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViQ29yZURlY29tcHJlc3Np
b25TZXNzaW9uLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tCiBwbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHUFVMYXllci5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvV2ViTVV0aWxpdGllc0NvY29hLm1tIEBuby11bmlmeQogcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvVmlkZW9UcmFja1ByaXZhdGVXZWJNLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQv
Rm9udENhc2NhZGVDb3JlVGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRD
b3JlVGV4dC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBiZTRmY2FmZjlmYzkyNTliNDZjMzUzOWI2ZWE5M2FmNGFkYzdmYjI1
Li5mZjUyYTA2YTI2NzYzYzdlN2I4Nzg1NGQ3Mjk0NDBlYTIyNWE2NGNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMTgsNiAr
MjE4LDggQEAKIAkJMDdFRTc2RUMxQkU5NkRCMDAwRjg5MTMzIC8qIE1vY2tSZWFsdGltZVZpZGVv
U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
N0VFNzZFQTFCRTk2REIwMDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwN0VFNzZFRjFC
RUE2MTk4MDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3RUU3NkVEMUJFQTYxOTgwMEY4
OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5oICovOyB9OwogCQkwN0Y0RTkzMzIw
QjM1ODdGMDAyRTM4MDMgLyogQVZBc3NldE1JTUVUeXBlQ2FjaGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3QzhBRDEyMUQwNzNENjMwMDg3QzVDRSAv
KiBBVkFzc2V0TUlNRVR5cGVDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTA3RjVDRkY1MjU4MkE1MUQwMDY2MkVGNSAvKiBXZWJNQXVkaW9V
dGlsaXRpZXNDb2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDdGNUNGRjQyNTgyQTRGODAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29h
LmggKi87IH07CisJCTA3RjVDRkY2MjU4MkE1MjkwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRp
ZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA3RjVDRkYyMjU4MkE0RjgwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbSAq
LzsgfTsKIAkJMDdGODc2ODQxQUQ1ODBGOTAwOTA1ODQ5IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRD
b250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
N0Y4NzY4MzFBRDRBOTQ1MDA5MDU4NDkgLyogTWVkaWFQbGF5YmFja1RhcmdldENvbnRleHQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwN0Y5NDQx
NjE4NjREMDQ2MDA1RDMxQ0IgLyogUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREFFOEMwODE3NDZCOTU3
MDA1MzJENzggLyogUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDdGRTk5REQxODgwN0E3RDAwMjU2
NjQ4IC8qIE1lZGlhRWxlbWVudFNlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA3RkU5OURCMTg4MDdBN0QwMDI1NjY0OCAvKiBNZWRpYUVsZW1l
bnRTZXNzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTU4NzUsNiArNTg3Nyw4IEBACiAJCTA3RUU3NkVBMUJFOTZEQjAwMEY4OTEzMyAvKiBN
b2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwN0VFNzZFRDFCRUE2MTk4MDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9ja1JlYWx0aW1lVmlkZW9Tb3Vy
Y2VNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdFRTc2RUUxQkVBNjE5ODAw
Rjg5MTMzIC8qIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3RjVDRkYyMjU4MkE0RjgwMDY2MkVGNSAvKiBX
ZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYk1BdWRp
b1V0aWxpdGllc0NvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwN0Y1Q0ZG
NDI1ODJBNEY4MDA2NjJFRjUgLyogV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDdGODc2ODMxQUQ0QTk0NTAwOTA1ODQ5IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRDb250
ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUGxheWJhY2tUYXJn
ZXRDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3RkU5OURBMTg4MDdB
N0QwMDI1NjY0OCAvKiBNZWRpYUVsZW1lbnRTZXNzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRWxlbWVudFNlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwN0ZFOTlEQjE4ODA3QTdEMDAyNTY2NDggLyogTWVkaWFFbGVtZW50
U2Vzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUVsZW1lbnRT
ZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjg2Nyw2ICsyNjg3MSw4
IEBACiAJCQkJNDlGRkJGM0UxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIubW0gKi8sCiAJ
CQkJMzE4NDM2REIyMUI5REFBMDAwRUQzODNFIC8qIFdlYkdQVUxheWVyLmggKi8sCiAJCQkJMzE4
NDM2REQyMUI5REFBMDAwRUQzODNFIC8qIFdlYkdQVUxheWVyLm1tICovLAorCQkJCTA3RjVDRkY0
MjU4MkE0RjgwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oICovLAorCQkJCTA3
RjVDRkYyMjU4MkE0RjgwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbSAqLywK
IAkJCSk7CiAJCQlwYXRoID0gY29jb2E7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAt
MzUyNTYsNiArMzUyNjIsNyBAQAogCQkJCTQ5NEJENzk1MEY1NUM4RUUwMDc0NzgyOCAvKiBXZWJL
aXRQb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFDMEZGMjUwRTRDRUI2RTAwN0Q2RkU1IC8q
IFdlYktpdFRyYW5zaXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRjMzMkYwRjJC
OUEyNTAwNEI2Nzk1IC8qIFdlYkxheWVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwN0Y1Q0ZGNTI1
ODJBNTFEMDA2NjJFRjUgLyogV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCBpbiBIZWFkZXJzICov
LAogCQkJCTA3MDlENzhGMUFFNTU1NTQwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzA5RDc5NTFBRTU1QTI5MDA0RTQyRjggLyogV2ViTWVk
aWFTZXNzaW9uTWFuYWdlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDcwOUQ3OTMxQUU1
NTU3RTAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuaCBpbiBIZWFkZXJzICov
LApAQCAtMzY2MTAsNiArMzY2MTcsNyBAQAogCQkJCTJEMDYyMTREMURBNjNBOEIwMEE3RkIyNiAv
KiBXZWJLaXRNZWRpYUtleXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQwNjIxNEYxREE2M0E5
MTAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5U2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3QzQ4QTZEMDE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTA3RjVDRkY2MjU4MkE1MjkwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRp
ZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA3MDlENzkyMUFFNTU1N0UwMDRFNDJGOCAv
KiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDQUYz
NDgyMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3QubW0gaW4gU291cmNlcyAqLywK
IAkJCQlDRUNEQzkzQzIxRjI5NzI5MDA5NzZCRDEgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckFWS2l0Lm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9NZWRpYVV0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9NZWRpYVV0aWxpdGllcy5jcHAKaW5kZXggYjQ4YjRmNTYzMzJkMDU5ZDlmYjE3NzU1
NDMwYTFmOGUwNTYyY2NjNS4uYTUzMzMyY2Y3ZGJkNjQ2NmY0NGY1NzZkMWNkN2FkZTc2MTUwYWE0
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTWVkaWFVdGlsaXRp
ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL01lZGlhVXRpbGl0aWVz
LmNwcApAQCAtMzUsMTEgKzM1LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFt
ZXNwYWNlIFBBTDsKIAotUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUF1
ZGlvRm9ybWF0RGVzY3JpcHRpb24oY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24pCitSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9Gb3Jt
YXREZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwg
c2l6ZV90IG1hZ2ljQ29va2llU2l6ZSwgY29uc3Qgdm9pZCogbWFnaWNDb29raWUpCiB7CiAgICAg
YXV0byBiYXNpY0Rlc2NyaXB0aW9uID0gV1RGOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rl
c2NyaXB0aW9uKj4oZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9u
KTsKICAgICBDTUZvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdCA9IG51bGxwdHI7Ci0gICAgYXV0
byBlcnJvciA9IENNQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBiYXNpY0Rlc2NyaXB0aW9uLCAwLCBudWxscHRyLCAwLCBudWxscHRyLCBudWxscHRyLCAm
Zm9ybWF0KTsKKyAgICBhdXRvIGVycm9yID0gQ01BdWRpb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGJhc2ljRGVzY3JpcHRpb24sIDAsIG51bGxwdHIsIG1hZ2lj
Q29va2llU2l6ZSwgbWFnaWNDb29raWUsIG51bGxwdHIsICZmb3JtYXQpOwogICAgIGlmIChlcnJv
cikgewogICAgICAgICBMT0dfRVJST1IoImNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24gZmFp
bGVkIHdpdGggJWQiLCBlcnJvcik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTWVkaWFVdGlsaXRpZXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL01lZGlhVXRpbGl0aWVzLmgKaW5kZXggNmI2N2M2Njc4
NWQ0N2QyNzAyYjVjNjQ5ZWYyODVlNGIwYTVlMTI2Ni4uOTE3MDhlYTIyYWQ0YjViYmM3ZWY4OWQ0
Y2I1ZGIzNTk5ZDhlNjI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvTWVkaWFVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9N
ZWRpYVV0aWxpdGllcy5oCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb247CiBjbGFzcyBQbGF0Zm9ybUF1ZGlvRGF0YTsKIAot
UmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3Jp
cHRpb24oY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYpOworUmV0YWluUHRyPENNRm9ybWF0
RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24oY29uc3QgQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbiYsIHNpemVfdCBtYWdpY0Nvb2tpZVNpemUgPSAwLCBjb25zdCB2b2lk
KiBtYWdpY0Nvb2tpZSA9IG51bGxwdHIpOwogUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBj
cmVhdGVBdWRpb1NhbXBsZUJ1ZmZlcihjb25zdCBQbGF0Zm9ybUF1ZGlvRGF0YSYsIGNvbnN0IEF1
ZGlvU3RyZWFtRGVzY3JpcHRpb24mLCBDTVRpbWUsIHNpemVfdCBzYW1wbGVDb3VudCk7CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKaW5k
ZXggYmUxZTA4NmUwYWM1MjM1NDYzNmEwMDZhYjMyZDFiOTJmNDBiNGQ4MS4uN2UwMTMzYjM1MjQy
MmUzZTUzNmYxN2Y2ZGQ4ODI5YjYwODlmMmM2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2Vy
V2ViTS5jcHAKQEAgLTM5LDExICszOSwxMyBAQAogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgog
I2luY2x1ZGUgIlZQOVV0aWxpdGllc0NvY29hLmgiCiAjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZh
dGVXZWJNLmgiCisjaW5jbHVkZSAiV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCIKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9EYXRhVmlldy5oPgogI2luY2x1ZGUgPHdlYm0vd2VibV9wYXJzZXIu
aD4KICNpbmNsdWRlIDx3dGYvQWxnb3JpdGhtcy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxw
ZXIuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpc3QuaD4KICNpbmNsdWRlIDx3dGYvY2Yv
VHlwZUNhc3RzQ0YuaD4KICNpbmNsdWRlIDx3dGYvZGFyd2luL1dlYWtMaW5raW5nLmg+CkBAIC0y
MzYsNyArMjM4LDYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgTG9nQXJndW1lbnQ8V2ViQ29yZTo6U291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU+IHsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgUEFMOwpAQCAtNDU2LDYgKzQ1
Nyw3IEBAIHByaXZhdGU6CiAKIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjppc0NvbnRlbnRUeXBlU3VwcG9ydGVkKGNvbnN0IENvbnRlbnRUeXBl
JiB0eXBlKQogeworI2lmIEVOQUJMRShWUDkpIHx8IEVOQUJMRShWT1JCSVMpIHx8IEVOQUJMRShP
UFVTKQogICAgIGlmICghaXNXZWJtUGFyc2VyQXZhaWxhYmxlKCkpCiAgICAgICAgIHJldHVybiBN
ZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwogCkBAIC00Njcs
MTAgKzQ2OSwxNCBAQCBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGUgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6aXNDb250ZW50VHlwZVN1cHBvcnRlZChjbwogICAgIGlmICghY29kZWNzUGFy
YW1ldGVyKQogICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpN
YXlCZVN1cHBvcnRlZDsKIAotI2lmIEVOQUJMRShWUDkpCiAgICAgYXV0byBzcGxpdFJlc3VsdHMg
PSBTdHJpbmdWaWV3KGNvZGVjc1BhcmFtZXRlcikuc3BsaXQoJywnKTsKICAgICBmb3IgKGF1dG8g
c3BsaXQgOiBzcGxpdFJlc3VsdHMpIHsKKyNpZiBFTkFCTEUoVlA5KQogICAgICAgICBpZiAoc3Bs
aXQuc3RhcnRzV2l0aCgidnAwOSIpKSB7CisKKyAgICAgICAgICAgIGlmICghaXNWUDlEZWNvZGVy
QXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1
cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKICAgICAgICAgICAgIGF1dG8gY29kZWNQYXJh
bWV0ZXJzID0gcGFyc2VWUENvZGVjUGFyYW1ldGVycyhzcGxpdCk7CiAgICAgICAgICAgICBpZiAo
IWNvZGVjUGFyYW1ldGVycykKICAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVt
czo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKQEAgLTQ4MCwxNCArNDg2LDQwIEBAIE1l
ZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppc0Nv
bnRlbnRUeXBlU3VwcG9ydGVkKGNvCiAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgT3B1cyBTdXBwb3J0Ci0gICAgICAgIC8vIEZJWE1FOiBB
ZGQgVm9yYmlzIFN1cHBvcnQKKyNlbmRpZiAvLyBFTkFCTEUoVlA5KQorCisjaWYgRU5BQkxFKFZP
UkJJUykKKyAgICAgICAgaWYgKHNwbGl0ID09ICJ2b3JiaXMiKSB7CisgICAgICAgICAgICBpZiAo
IWlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBNZWRp
YVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOworCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShWT1JCSVMpCisKKyNpZiBF
TkFCTEUoT1BVUykKKyAgICAgICAgaWYgKHNwbGl0ID09ICJvcHVzIikgeworICAgICAgICAgICAg
aWYgKCFpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE1l
ZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKE9QVVMpCisKICAgICAg
ICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7
CiAgICAgfQotICAgIHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzU3Vw
cG9ydGVkOwogI2Vsc2UKLSAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBl
OjpJc05vdFN1cHBvcnRlZDsKLSNlbmRpZgorICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKKyNlbmRp
ZiAvLyBFTkFCTEUoVlA5KSB8fCBFTkFCTEUoVk9SQklTKSB8fCBFTkFCTEUoT1BVUykKKworICAg
IHJldHVybiBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzU3VwcG9ydGVkOworfQor
CitSZWZQdHI8U291cmNlQnVmZmVyUGFyc2VyV2ViTT4gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
Y3JlYXRlKGNvbnN0IENvbnRlbnRUeXBlJiB0eXBlKQoreworICAgIGlmIChpc0NvbnRlbnRUeXBl
U3VwcG9ydGVkKHR5cGUpICE9IE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RT
dXBwb3J0ZWQpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU291cmNlQnVmZmVyUGFyc2Vy
V2ViTSgpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogU291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTSgpCkBAIC01NzEsNiArNjAzLDcgQEAgYm9vbCBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpzaG91bGRQcm92aWRlTWVkaWFkYXRhRm9yVHJhY2tJRCh1aW50
NjRfdCkKIHZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cmVzZXRQYXJzZXJTdGF0ZSgpCiB7
CiAgICAgSU5GT19MT0dfSUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUik7CisgICAgZmx1c2hQZW5k
aW5nQXVkaW9CdWZmZXJzKCk7CiAgICAgbV9wYXJzZXItPkRpZFNlZWsoKTsKICAgICBtX3N0YXRl
ID0gU3RhdGU6Ok5vbmU7CiAgICAgbV90cmFja3MuY2xlYXIoKTsKQEAgLTYwNCw3ICs2MzcsNyBA
QCB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnNldExvZ2dlcihjb25zdCBMb2dnZXImIGxv
Z2dlciwgY29uc3Qgdm9pZCogbG9nSWRlbgogYXV0byBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjp0
cmFja0RhdGFGb3JUcmFja051bWJlcih1aW50NjRfdCB0cmFja051bWJlcikgLT4gVHJhY2tEYXRh
KgogewogICAgIGZvciAoYXV0byYgdHJhY2sgOiBtX3RyYWNrcykgewotICAgICAgICBpZiAodHJh
Y2sudHJhY2sudHJhY2tfbnVtYmVyLmlzX3ByZXNlbnQoKSAmJiB0cmFjay50cmFjay50cmFja19u
dW1iZXIudmFsdWUoKSA9PSB0cmFja051bWJlcikKKyAgICAgICAgaWYgKHRyYWNrLT50cmFjaygp
LnRyYWNrX251bWJlci5pc19wcmVzZW50KCkgJiYgdHJhY2stPnRyYWNrKCkudHJhY2tfbnVtYmVy
LnZhbHVlKCkgPT0gdHJhY2tOdW1iZXIpCiAgICAgICAgICAgICByZXR1cm4gJnRyYWNrOwogICAg
IH0KICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTc0OCw3ICs3ODEsNyBAQCBTdGF0dXMgU291cmNl
QnVmZmVyUGFyc2VyV2ViTTo6T25DbHVzdGVyQmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiBt
ZXRhZGF0YSwgYwogU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uVHJhY2tFbnRyeShj
b25zdCBFbGVtZW50TWV0YWRhdGEmIG1ldGFkYXRhLCBjb25zdCBUcmFja0VudHJ5JiB0cmFja0Vu
dHJ5KQogewogICAgIFVOVVNFRF9QQVJBTShtZXRhZGF0YSk7Ci0gICAgaWYgKCF0cmFja0VudHJ5
LnRyYWNrX3R5cGUuaXNfcHJlc2VudCgpKQorICAgIGlmICghdHJhY2tFbnRyeS50cmFja190eXBl
LmlzX3ByZXNlbnQoKSB8fCAhdHJhY2tFbnRyeS5jb2RlY19pZC5pc19wcmVzZW50KCkpCiAgICAg
ICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogCiAgICAgYXV0byB0cmFj
a1R5cGUgPSB0cmFja0VudHJ5LnRyYWNrX3R5cGUudmFsdWUoKTsKQEAgLTc1Niw4ICs3ODksMzAg
QEAgU3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uVHJhY2tFbnRyeShjb25zdCBFbGVt
ZW50TWV0YWRhdGEmIG1ldGFkYXRhLCBjb24KICAgICAgICAgbV9pbml0aWFsaXphdGlvblNlZ21l
bnQtPnZpZGVvVHJhY2tzLmFwcGVuZCh7IE1lZGlhRGVzY3JpcHRpb25XZWJNOjpjcmVhdGUoVHJh
Y2tFbnRyeSh0cmFja0VudHJ5KSksIFZpZGVvVHJhY2tQcml2YXRlV2ViTTo6Y3JlYXRlKFRyYWNr
RW50cnkodHJhY2tFbnRyeSkpIH0pOwogICAgIGVsc2UgaWYgKHRyYWNrVHlwZSA9PSBUcmFja1R5
cGU6OmtBdWRpbykKICAgICAgICAgbV9pbml0aWFsaXphdGlvblNlZ21lbnQtPmF1ZGlvVHJhY2tz
LmFwcGVuZCh7IE1lZGlhRGVzY3JpcHRpb25XZWJNOjpjcmVhdGUoVHJhY2tFbnRyeSh0cmFja0Vu
dHJ5KSksIEF1ZGlvVHJhY2tQcml2YXRlV2ViTTo6Y3JlYXRlKFRyYWNrRW50cnkodHJhY2tFbnRy
eSkpIH0pOwotICAgIG1fdHJhY2tzLmFwcGVuZCh7IFRyYWNrRW50cnkodHJhY2tFbnRyeSksIHsg
fSwgbnVsbHB0ciwgbnVsbHB0ciwgMCB9KTsKIAorICAgIFN0cmluZ1ZpZXcgY29kZWNTdHJpbmcg
eyB0cmFja0VudHJ5LmNvZGVjX2lkLnZhbHVlKCkuZGF0YSgpLCAodW5zaWduZWQpdHJhY2tFbnRy
eS5jb2RlY19pZC52YWx1ZSgpLmxlbmd0aCgpIH07CisjaWYgRU5BQkxFKFZQOSkKKyAgICBpZiAo
Y29kZWNTdHJpbmcgPT0gIlZfVlA5IiAmJiBpc1ZQOURlY29kZXJBdmFpbGFibGUoKSkgeworICAg
ICAgICBtX3RyYWNrcy5hcHBlbmQoVmlkZW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6OlZQ
OSwgdHJhY2tFbnRyeSwgKnRoaXMpKTsKKyAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtP
a0NvbXBsZXRlZCk7CisgICAgfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoVk9SQklTKQorICAgIGlm
IChjb2RlY1N0cmluZyA9PSAiQV9WT1JCSVMiICYmIGlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgp
KSB7CisgICAgICAgIG1fdHJhY2tzLmFwcGVuZChBdWRpb1RyYWNrRGF0YTo6Y3JlYXRlKENvZGVj
VHlwZTo6Vm9yYmlzLCB0cmFja0VudHJ5LCAqdGhpcywgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJh
dGlvbikpOworICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKKyAg
ICB9CisjZW5kaWYKKworI2lmIEVOQUJMRShPUFVTKQorICAgIGlmIChjb2RlY1N0cmluZyA9PSAi
QV9PUFVTIiAmJiBpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgbV90cmFja3Mu
YXBwZW5kKEF1ZGlvVHJhY2tEYXRhOjpjcmVhdGUoQ29kZWNUeXBlOjpPcHVzLCB0cmFja0VudHJ5
LCAqdGhpcywgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbikpOworICAgICAgICByZXR1cm4g
U3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKKyAgICB9CisjZW5kaWYKKworICAgIG1fdHJh
Y2tzLmFwcGVuZChUcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6OlVuc3VwcG9ydGVkLCB0cmFj
a0VudHJ5LCAqdGhpcykpOwogICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQp
OwogfQogCkBAIC04MjcsNDA2ICs4ODIsMjkxIEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpPbkJsb2NrR3JvdXBFbmQoY29uc3Qgd2VibTo6RWxlbWVudE1ldGFkYXRhCiAg
ICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLSNpZiBFTkFCTEUo
VlA5KQogCi1zdGF0aWMgdWludDhfdCBjb252ZXJ0VG9Db2xvclByaW1hcmllcyhjb25zdCBQcmlt
YXJpZXMmIGNvZWZmaWNpZW50cykKK3dlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJN
OjpPbkZyYW1lKGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCBSZWFkZXIqIHJlYWRlciwg
dWludDY0X3QqIGJ5dGVzUmVtYWluaW5nKQogewotICAgIHN3aXRjaCAoY29lZmZpY2llbnRzKSB7
Ci0gICAgY2FzZSBQcmltYXJpZXM6OmtCdDcwOToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJh
dGlvbkNvbG9yUHJpbWFyaWVzOjpCVF83MDlfNjsKLSAgICBjYXNlIFByaW1hcmllczo6a1Vuc3Bl
Y2lmaWVkOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlVu
c3BlY2lmaWVkOwotICAgIGNhc2UgUHJpbWFyaWVzOjprQnQ0NzBNOgotICAgICAgICByZXR1cm4g
VlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzQ3MF82X007Ci0gICAgY2FzZSBQcmlt
YXJpZXM6OmtCdDQ3MEJnOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmlt
YXJpZXM6OkJUXzQ3MF83X0JHOwotICAgIGNhc2UgUHJpbWFyaWVzOjprU21wdGUxNzBNOgotICAg
ICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzYwMV83OwotICAg
IGNhc2UgUHJpbWFyaWVzOjprU21wdGUyNDBNOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0
aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NUXzI0MDsKLSAgICBjYXNlIFByaW1hcmllczo6a0Zp
bG06Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6RmlsbTsK
LSAgICBjYXNlIFByaW1hcmllczo6a0J0MjAyMDoKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJh
dGlvbkNvbG9yUHJpbWFyaWVzOjpCVF8yMDIwX05vbmNvbnN0YW50X0x1bWluYW5jZTsKLSAgICBj
YXNlIFByaW1hcmllczo6a1NtcHRlU3Q0MjgxOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0
aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NUXzQyOF8xOwotICAgIGNhc2UgUHJpbWFyaWVzOjpr
U21wdGVScDQzMToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVz
OjpTTVBURV9SUF80MzFfMjsKLSAgICBjYXNlIFByaW1hcmllczo6a1NtcHRlRWc0MzI6Ci0gICAg
ICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfRUdfNDMyXzE7
Ci0gICAgY2FzZSBQcmltYXJpZXM6OmtKZWRlY1AyMlBob3NwaG9yczoKLSAgICAgICAgcmV0dXJu
IFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpFQlVfVGVjaF8zMjEzX0U7Ci0gICAgfQot
fQorICAgIEFTU0VSVChyZWFkZXIpOworICAgIGlmICghcmVhZGVyKQorICAgICAgICByZXR1cm4g
U3RhdHVzKFN0YXR1czo6a05vdEVub3VnaE1lbW9yeSk7CiAKLXN0YXRpYyBDRlN0cmluZ1JlZiBj
b252ZXJ0VG9DTUNvbG9yUHJpbWFyaWVzKHVpbnQ4X3QgcHJpbWFyaWVzKQotewotICAgIHN3aXRj
aCAocHJpbWFyaWVzKSB7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6
QlRfNzA5XzY6Ci0gICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzX0lU
VV9SXzcwOV8yOwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkVCVV9U
ZWNoXzMyMTNfRToKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNf
RUJVXzMyMTM7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfNjAx
Xzc6Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfU1RfMjQw
OgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19TTVBURV9DOwot
ICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1JQXzQzMV8yOgot
ICAgICAgICByZXR1cm4ga0NNRm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19EQ0lfUDM7
Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfRUdfNDMyXzE6
Ci0gICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX1AzX0Q2
NTsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF8yMDIwX05vbmNv
bnN0YW50X0x1bWluYW5jZToKLSAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uQ29s
b3JQcmltYXJpZXNfSVRVX1JfMjAyMDsKLSAgICB9CisgICAgaWYgKCFtX2N1cnJlbnRCbG9jaykK
KyAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtJbnZhbGlkRWxlbWVudElkKTsKIAotICAg
IHJldHVybiBudWxscHRyOwotfQorICAgIGF1dG8qIGJsb2NrID0gV1RGOjpzd2l0Y2hPbigqbV9j
dXJyZW50QmxvY2ssIFtdKEJsb2NrJiBibG9jaykgeworICAgICAgICByZXR1cm4gJmJsb2NrOwor
ICAgIH0sIFtdKFNpbXBsZUJsb2NrJiBibG9jaykgLT4gQmxvY2sqIHsKKyAgICAgICAgcmV0dXJu
ICZibG9jazsKKyAgICB9KTsKKyAgICBpZiAoIWJsb2NrKQorICAgICAgICByZXR1cm4gU3RhdHVz
KFN0YXR1czo6a0ludmFsaWRFbGVtZW50SWQpOwogCi1zdGF0aWMgdWludDhfdCBjb252ZXJ0VG9U
cmFuc2ZlckNoYXJhY3RlcmlzdGljcyhjb25zdCBUcmFuc2ZlckNoYXJhY3RlcmlzdGljcyYgY2hh
cmFjdGVyaXN0aWNzKQotewotICAgIHN3aXRjaCAoY2hhcmFjdGVyaXN0aWNzKSB7Ci0gICAgY2Fz
ZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0J0NzA5OgotICAgICAgICByZXR1cm4gVlBDb25m
aWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzcwOV82OwotICAgIGNhc2UgVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtVbnNwZWNpZmllZDoKLSAgICAgICAgcmV0dXJuIFZQQ29u
ZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpVbnNwZWNpZmllZDsKLSAgICBjYXNl
IFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprR2FtbWEyMmN1cnZlOgotICAgICAgICByZXR1cm4g
VlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzQ3MF82X007Ci0gICAg
Y2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0dhbW1hMjhjdXJ2ZToKLSAgICAgICAgcmV0
dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF80NzBfN19CRzsK
LSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprU21wdGUxNzBNOgotICAgICAgICBy
ZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzYwMV83Owot
ICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtTbXB0ZTI0ME06Ci0gICAgICAgIHJl
dHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U01QVEVfU1RfMjQw
OwotICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtMaW5lYXI6Ci0gICAgICAgIHJl
dHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TGluZWFyOwotICAg
IGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtMb2c6Ci0gICAgICAgIHJldHVybiBWUENv
bmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TG9ncml0aG1pYzsKLSAgICBjYXNl
IFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprTG9nU3FydDoKLSAgICAgICAgcmV0dXJuIFZQQ29u
ZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMb2dyaXRobWljX1NxcnQ7Ci0gICAg
Y2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0llYzYxOTY2MjQ6Ci0gICAgICAgIHJldHVy
biBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SUVDXzYxOTY2XzJfNDsK
LSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprQnQxMzYxRXh0ZW5kZWRDb2xvdXJH
YW11dDoKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjpCVF8xMzYxXzA7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0llYzYx
OTY2MjE6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3Rlcmlz
dGljczo6SUVDXzYxOTY2XzJfMTsKLSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpr
MTBCaXRCdDIwMjA6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljczo6QlRfMjAyMF8xMGJpdDsKLSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjprMTJCaXRCdDIwMjA6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2Zl
ckNoYXJhY3RlcmlzdGljczo6QlRfMjAyMF8xMmJpdDsKLSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjprU21wdGVTdDIwODQ6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U01QVEVfU1RfMjA4NDsKLSAgICBjYXNlIFRyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzOjprU21wdGVTdDQyODE6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3Vy
YXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U01QVEVfU1RfNDI4XzE7Ci0gICAgY2FzZSBU
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0FyaWJTdGRCNjdIbGc6Ci0gICAgICAgIHJldHVybiBW
UENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfMjEwMF9ITEc7CisgICAg
YXV0byB0cmFja051bWJlciA9IGJsb2NrLT50cmFja19udW1iZXI7CisgICAgYXV0byogdHJhY2tE
YXRhID0gdHJhY2tEYXRhRm9yVHJhY2tOdW1iZXIodHJhY2tOdW1iZXIpOworICAgIGlmICghdHJh
Y2tEYXRhKSB7CisgICAgICAgIEVSUk9SX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAi
SWdub3JpbmcgdW5rbm93biB0cmFjayBudW1iZXIgIiwgdHJhY2tOdW1iZXIpOworICAgICAgICBy
ZXR1cm4gU3RhdHVzKFN0YXR1czo6a0ludmFsaWRFbGVtZW50SWQpOwogICAgIH0KLX0KIAotc3Rh
dGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNVHJhbnNmZXJGdW5jdGlvbih1aW50OF90IGNoYXJh
Y3RlcmlzdGljcykKLXsKLSAgICBzd2l0Y2ggKGNoYXJhY3RlcmlzdGljcykgewotICAgIGNhc2Ug
VlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzcwOV82OgotICAgICAg
ICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJUcmFuc2ZlckZ1bmN0aW9uX0lUVV9SXzcwOV8yOwotICAg
IGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzI0
MDoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbl9TTVBURV8y
NDBNXzE5OTU7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6U01QVEVfU1RfMjA4NDoKLSAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uVHJh
bnNmZXJGdW5jdGlvbl9TTVBURV9TVF8yMDg0X1BROwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9u
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTBiaXQ6Ci0gICAgY2FzZSBWUENvbmZp
Z3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfMjAyMF8xMmJpdDoKLSAgICAgICAg
cmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl8yMDIwOwot
ICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NU
XzQyOF8xOgotICAgICAgICByZXR1cm4ga0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0
aW9uX1NNUFRFX1NUXzQyOF8xOwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OkJUXzIxMDBfSExHOgotICAgICAgICByZXR1cm4ga0NNRm9ybWF0RGVzY3Jp
cHRpb25UcmFuc2ZlckZ1bmN0aW9uX0lUVV9SXzIxMDBfSExHOwotICAgIGNhc2UgVlBDb25maWd1
cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OklFQ182MTk2Nl8yXzE6Ci0gICAgICAgIHJl
dHVybiBQQUw6OmNhbkxvYWRfQ29yZU1lZGlhX2tDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJG
dW5jdGlvbl9zUkdCKCkgPyBnZXRfQ29yZU1lZGlhX2tDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNm
ZXJGdW5jdGlvbl9zUkdCKCkgOiBudWxscHRyOwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxpbmVhcjoKLSAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERl
c2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9MaW5lYXI7CisgICAgc3dpdGNoICh0cmFja0RhdGEt
PmNvZGVjKCkpIHsKKyAgICBjYXNlIENvZGVjVHlwZTo6VlA5OgorICAgIGNhc2UgQ29kZWNUeXBl
OjpWb3JiaXM6CisgICAgY2FzZSBDb2RlY1R5cGU6Ok9wdXM6CisgICAgICAgIGJyZWFrOworCisg
ICAgY2FzZSBDb2RlY1R5cGU6OlVuc3VwcG9ydGVkOgorICAgICAgICByZXR1cm4gU2tpcChyZWFk
ZXIsIGJ5dGVzUmVtYWluaW5nKTsKICAgICB9CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gdHJhY2tEYXRhLT5jb25zdW1lRnJhbWVEYXRhKCpyZWFkZXIsIG1ldGFkYXRhLCBieXRl
c1JlbWFpbmluZywgQ01UaW1lTWFrZShibG9jay0+dGltZWNvZGUgKyBtX2N1cnJlbnRUaW1lY29k
ZSwgbV90aW1lc2NhbGUpLCBibG9jay0+bnVtX2ZyYW1lcyk7CiB9CiAKLXN0YXRpYyB1aW50OF90
IGNvbnZlcnRUb01hdHJpeENvZWZmaWNpZW50cyhjb25zdCBNYXRyaXhDb2VmZmljaWVudHMmIGNv
ZWZmaWNpZW50cykKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6cHJvdmlkZU1lZGlhRGF0
YShSZXRhaW5QdHI8Q01TYW1wbGVCdWZmZXJSZWY+IHNhbXBsZUJ1ZmZlciwgdWludDY0X3QgdHJh
Y2tJRCkKIHsKLSAgICBzd2l0Y2ggKGNvZWZmaWNpZW50cykgewotICAgIGNhc2UgTWF0cml4Q29l
ZmZpY2llbnRzOjprUmdiOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29l
ZmZpY2llbnRzOjpJZGVudGl0eTsKLSAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a0J0NzA5
OgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF83
MDlfNjsKLSAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a1Vuc3BlY2lmaWVkOgotICAgICAg
ICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpVbnNwZWNpZmllZDsK
LSAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a0ZjYzoKLSAgICAgICAgcmV0dXJuIFZQQ29u
ZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6RkNDOwotICAgIGNhc2UgTWF0cml4Q29lZmZp
Y2llbnRzOjprQnQ0NzBCZzoKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENv
ZWZmaWNpZW50czo6QlRfNDcwXzdfQkc7Ci0gICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtT
bXB0ZTE3ME06Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVu
dHM6OkJUXzYwMV83OwotICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprU21wdGUyNDBNOgot
ICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpTTVBURV9T
VF8yNDA7Ci0gICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtZQ2dDbzoKLSAgICAgICAgcmV0
dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6WUNnQ287Ci0gICAgY2FzZSBN
YXRyaXhDb2VmZmljaWVudHM6OmtCdDIwMjBOb25jb25zdGFudEx1bWluYW5jZToKLSAgICAgICAg
cmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfMjAyMF9Ob25jb25z
dGFudF9MdW1pbmFuY2U7Ci0gICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtCdDIwMjBDb25z
dGFudEx1bWluYW5jZToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZm
aWNpZW50czo6QlRfMjAyMF9Db25zdGFudF9MdW1pbmFuY2U7Ci0gICAgfQorICAgIGNhbGxPbk1h
aW5UaHJlYWQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgc2FtcGxlQnVm
ZmVyID0gV1RGTW92ZShzYW1wbGVCdWZmZXIpLCB0cmFja0lEXSAoKSBtdXRhYmxlIHsKKyAgICAg
ICAgaWYgKCFtX2RpZFByb3ZpZGVNZWRpYURhdGFDYWxsYmFjaykKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBhdXRvIG1lZGlhU2FtcGxlID0gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVh
dGUoc2FtcGxlQnVmZmVyLmdldCgpLCB0cmFja0lEKTsKKyAgICAgICAgbV9kaWRQcm92aWRlTWVk
aWFEYXRhQ2FsbGJhY2soV1RGTW92ZShtZWRpYVNhbXBsZSksIHRyYWNrSUQsIGVtcHR5U3RyaW5n
KCkpOworICAgIH0pOwogfQogCi1zdGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRvQ01ZQ2JDUk1h
dHJpeCh1aW50OF90IGNvZWZmaWNpZW50cykKKyNkZWZpbmUgUEFSU0VSX0xPR19FUlJPUl9JRl9Q
T1NTSUJMRSguLi4pIGlmIChwYXJzZXIoKS5sb2dnZXJQdHIoKSkgcGFyc2VyKCkubG9nZ2VyUHRy
KCktPmVycm9yKGxvZ0NoYW5uZWwoKSwgV1RGOjpMb2dnZXI6OkxvZ1NpdGVJZGVudGlmaWVyKGxv
Z0NsYXNzTmFtZSgpLCBfX2Z1bmNfXywgcGFyc2VyKCkubG9nSWRlbnRpZmllcigpKSwgX19WQV9B
UkdTX18pCisKK3dlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNr
RGF0YTo6Y29uc3VtZUZyYW1lRGF0YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwgY29uc3QgRnJhbWVN
ZXRhZGF0YSYgbWV0YWRhdGEsIHVpbnQ2NF90KiBieXRlc1JlbWFpbmluZywgY29uc3QgQ01UaW1l
JiBwcmVzZW50YXRpb25UaW1lLCBpbnQgc2FtcGxlQ291bnQpCiB7Ci0gICAgc3dpdGNoIChjb2Vm
ZmljaWVudHMpIHsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6
QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U6Ci0gICAgICAgIHJldHVybiBrQ01Gb3JtYXRE
ZXNjcmlwdGlvbllDYkNyTWF0cml4X0lUVV9SXzIwMjA7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRp
b25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzQ3MF83X0JHOgotICAgIGNhc2UgVlBDb25maWd1cmF0
aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF82MDFfNzoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdl
QnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNjAxXzQ7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25N
YXRyaXhDb2VmZmljaWVudHM6OkJUXzcwOV82OgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZm
ZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlfMjsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJp
eENvZWZmaWNpZW50czo6U01QVEVfU1RfMjQwOgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZm
ZXJZQ2JDck1hdHJpeF9TTVBURV8yNDBNXzE5OTU7Ci0gICAgfQorI2lmIEVOQUJMRShWUDkpCisg
ICAgQ01CbG9ja0J1ZmZlclJlZiByYXdCbG9ja0J1ZmZlciA9IG51bGxwdHI7CiAKLSAgICByZXR1
cm4gbnVsbHB0cjsKLX0KKyAgICBpZiAoIW1fY3VycmVudEJsb2NrQnVmZmVyKSB7CisgICAgICAg
IGF1dG8gZXJyID0gQ01CbG9ja0J1ZmZlckNyZWF0ZVdpdGhNZW1vcnlCbG9jayhrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBudWxscHRyLCBtZXRhZGF0YS5zaXplLCBrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBu
dWxscHRyLCAwLCBtZXRhZGF0YS5zaXplLCAwLCAmcmF3QmxvY2tCdWZmZXIpOworICAgICAgICBp
ZiAoZXJyKSB7CisgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUJs
b2NrQnVmZmVyQ3JlYXRlV2l0aE1lbW9yeUJsb2NrIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsK
KyAgICAgICAgICAgIHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKKyAgICAg
ICAgfQogCi1zdGF0aWMgdWludDhfdCBjb252ZXJ0U3Vic2FtcGxpbmdYWVRvQ2hyb21hU3Vic2Ft
cGxpbmcodWludDY0X3QgeCwgdWludDY0X3QgeSkKLXsKLSAgICBpZiAoeCAmIHkpCi0gICAgICAg
IHJldHVybiBWUENvbmZpZ3VyYXRpb25DaHJvbWFTdWJzYW1wbGluZzo6U3Vic2FtcGxpbmdfNDIw
X0NvbG9jYXRlZDsKLSAgICBpZiAoeCAmICF5KQotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0
aW9uQ2hyb21hU3Vic2FtcGxpbmc6OlN1YnNhbXBsaW5nXzQyMjsKLSAgICBpZiAoIXggJiAheSkK
LSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNocm9tYVN1YnNhbXBsaW5nOjpTdWJzYW1w
bGluZ180NDQ7Ci0gICAgLy8gVGhpcyBpbmRpY2F0ZXMgNDo0OjAgc3Vic2FtcGxpbmcsIHdoaWNo
IGlzIG5vdCBleHByZXNzYWJsZSBpbiB0aGUgJ3ZwY0MnIGJveC4gRGVmYXVsdCB0byA0OjI6MC4K
LSAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ2hyb21hU3Vic2FtcGxpbmc6OlN1YnNhbXBsaW5n
XzQyMF9Db2xvY2F0ZWQ7Ci19CisgICAgICAgIG1fY3VycmVudEJsb2NrQnVmZmVyID0gYWRvcHRD
RihyYXdCbG9ja0J1ZmZlcik7CisgICAgICAgIG1fY3VycmVudEJsb2NrQnVmZmVyUG9zaXRpb24g
PSAwOwogCi1zdGF0aWMgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZv
cm1hdERlc2NyaXB0aW9uRnJvbVZQOUhlYWRlclBhcnNlcihjb25zdCB2cDlfcGFyc2VyOjpWcDlI
ZWFkZXJQYXJzZXImIHBhcnNlciwgY29uc3Qgd2VibTo6RWxlbWVudDxDb2xvdXI+JiBjb2xvcikK
LXsKLSAgICAvLyBSZWY6ICJWUCBDb2RlYyBJU08gTWVkaWEgRmlsZSBGb3JtYXQgQmluZGluZywg
djEuMCwgMjAxNy0wMy0zMSIKLSAgICAvLyA8aHR0cHM6Ly93d3cud2VibXByb2plY3Qub3JnL3Zw
OS9tcDQvPgotICAgIC8vCi0gICAgLy8gY2xhc3MgVlBDb2RlY0NvbmZpZ3VyYXRpb25Cb3ggZXh0
ZW5kcyBGdWxsQm94KCd2cGNDJywgdmVyc2lvbiA9IDEsIDApCi0gICAgLy8gewotICAgIC8vICAg
ICBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCgpIHZwY0NvbmZpZzsKLSAgICAvLyB9Ci0gICAg
Ly8KLSAgICAvLyBhbGlnbmVkICg4KSBjbGFzcyBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCB7
Ci0gICAgLy8gICAgIHVuc2lnbmVkIGludCAoOCkgICAgIHByb2ZpbGU7Ci0gICAgLy8gICAgIHVu
c2lnbmVkIGludCAoOCkgICAgIGxldmVsOwotICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDQpICAg
ICBiaXREZXB0aDsKLSAgICAvLyAgICAgdW5zaWduZWQgaW50ICgzKSAgICAgY2hyb21hU3Vic2Ft
cGxpbmc7Ci0gICAgLy8gICAgIHVuc2lnbmVkIGludCAoMSkgICAgIHZpZGVvRnVsbFJhbmdlRmxh
ZzsKLSAgICAvLyAgICAgdW5zaWduZWQgaW50ICg4KSAgICAgY29sb3VyUHJpbWFyaWVzOwotICAg
IC8vICAgICB1bnNpZ25lZCBpbnQgKDgpICAgICB0cmFuc2ZlckNoYXJhY3RlcmlzdGljczsKLSAg
ICAvLyAgICAgdW5zaWduZWQgaW50ICg4KSAgICAgbWF0cml4Q29lZmZpY2llbnRzOwotICAgIC8v
ICAgICB1bnNpZ25lZCBpbnQgKDE2KSAgICBjb2RlY0ludGlhbGl6YXRpb25EYXRhU2l6ZTsKLSAg
ICAvLyAgICAgdW5zaWduZWQgaW50ICg4KVtdICAgY29kZWNJbnRpYWxpemF0aW9uRGF0YTsKLSAg
ICAvLyB9Ci0gICAgLy8KLSAgICAvLyBjb2RlY0ludGlhbGl6YXRpb25EYXRhU2l6ZeKAi0ZvciBW
UDggYW5kIFZQOSB0aGlzIGZpZWxkIG11c3QgYmUgMC4KLSAgICAvLyBjb2RlY0ludGlhbGl6YXRp
b25EYXRh4oCLYmluYXJ5IGNvZGVjIGluaXRpYWxpemF0aW9uIGRhdGEuIE5vdCB1c2VkIGZvciBW
UDggYW5kIFZQOS4KLSAgICAvLwotICAgIC8vIEZJWE1FOiBDb252ZXJ0IGV4aXN0aW5nIHN0cnVj
dCB0byBhbiBJU09Cb3ggYW5kIHJlcGxhY2UgdGhlIHdyaXRpbmcgY29kZSBiZWxvdwotICAgIC8v
IHdpdGggYSBzdWJjbGFzcyBvZiBJU09GdWxsQm94LgotCi0gICAgVlBDb2RlY0NvbmZpZ3VyYXRp
b25SZWNvcmQgcmVjb3JkOwotCi0gICAgcmVjb3JkLnByb2ZpbGUgPSBwYXJzZXIucHJvZmlsZSgp
OwotICAgIC8vIENvcmVNZWRpYSBkb2VzIG5hdCBjYXJlIGFib3V0IHRoZSBWUDkgY29kZWMgbGV2
ZWw7IGhhcmQtY29kZSB0byBMZXZlbCAxLjAgaGVyZToKLSAgICByZWNvcmQubGV2ZWwgPSAxMDsK
LSAgICByZWNvcmQuYml0RGVwdGggPSBwYXJzZXIuYml0X2RlcHRoKCk7Ci0gICAgcmVjb3JkLnZp
ZGVvRnVsbFJhbmdlRmxhZyA9IHBhcnNlci5jb2xvcl9yYW5nZSgpID8gVlBDb25maWd1cmF0aW9u
UmFuZ2U6OkZ1bGxSYW5nZSA6IFZQQ29uZmlndXJhdGlvblJhbmdlOjpWaWRlb1JhbmdlOwotICAg
IHJlY29yZC5jaHJvbWFTdWJzYW1wbGluZyA9IGNvbnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFT
dWJzYW1wbGluZyhwYXJzZXIuc3Vic2FtcGxpbmdfeCgpLCBwYXJzZXIuc3Vic2FtcGxpbmdfeSgp
KTsKLSAgICByZWNvcmQuY29sb3JQcmltYXJpZXMgPSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1h
cmllczo6VW5zcGVjaWZpZWQ7Ci0gICAgcmVjb3JkLnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzID0g
VlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlVuc3BlY2lmaWVkOwotICAg
IHJlY29yZC5tYXRyaXhDb2VmZmljaWVudHMgPSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmlj
aWVudHM6OlVuc3BlY2lmaWVkOwotCi0gICAgLy8gQ29udGFpbmVyIGNvbG9yIHZhbHVlcyBjYW4g
b3ZlcnJpZGUgcGVyLXNhbXBsZSBvbmVzOgotICAgIGlmIChjb2xvci5pc19wcmVzZW50KCkpIHsK
LSAgICAgICAgYXV0byYgY29sb3JWYWx1ZSA9IGNvbG9yLnZhbHVlKCk7Ci0gICAgICAgIGlmIChj
b2xvclZhbHVlLmNocm9tYV9zdWJzYW1wbGluZ194LmlzX3ByZXNlbnQoKSAmJiBjb2xvclZhbHVl
LmNocm9tYV9zdWJzYW1wbGluZ195LmlzX3ByZXNlbnQoKSkKLSAgICAgICAgICAgIHJlY29yZC5j
aHJvbWFTdWJzYW1wbGluZyA9IGNvbnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJzYW1wbGlu
Zyhjb2xvclZhbHVlLmNocm9tYV9zdWJzYW1wbGluZ194LnZhbHVlKCksIGNvbG9yVmFsdWUuY2hy
b21hX3N1YnNhbXBsaW5nX3kudmFsdWUoKSk7Ci0gICAgICAgIGlmIChjb2xvclZhbHVlLnJhbmdl
LmlzX3ByZXNlbnQoKSAmJiBjb2xvclZhbHVlLnJhbmdlLnZhbHVlKCkgIT0gUmFuZ2U6OmtVbnNw
ZWNpZmllZCkKLSAgICAgICAgICAgIHJlY29yZC52aWRlb0Z1bGxSYW5nZUZsYWcgPSBjb2xvclZh
bHVlLnJhbmdlLnZhbHVlKCkgPT0gUmFuZ2U6OmtGdWxsID8gVlBDb25maWd1cmF0aW9uUmFuZ2U6
OkZ1bGxSYW5nZSA6IFZQQ29uZmlndXJhdGlvblJhbmdlOjpWaWRlb1JhbmdlOwotICAgICAgICBp
ZiAoY29sb3JWYWx1ZS5iaXRzX3Blcl9jaGFubmVsLmlzX3ByZXNlbnQoKSkKLSAgICAgICAgICAg
IHJlY29yZC5iaXREZXB0aCA9IGNvbG9yVmFsdWUuYml0c19wZXJfY2hhbm5lbC52YWx1ZSgpOwot
ICAgICAgICBpZiAoY29sb3JWYWx1ZS50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MuaXNfcHJlc2Vu
dCgpKQotICAgICAgICAgICAgcmVjb3JkLnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzID0gY29udmVy
dFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MoY29sb3JWYWx1ZS50cmFuc2Zlcl9jaGFyYWN0ZXJp
c3RpY3MudmFsdWUoKSk7Ci0gICAgICAgIGlmIChjb2xvclZhbHVlLm1hdHJpeF9jb2VmZmljaWVu
dHMuaXNfcHJlc2VudCgpKQotICAgICAgICAgICAgcmVjb3JkLm1hdHJpeENvZWZmaWNpZW50cyA9
IGNvbnZlcnRUb01hdHJpeENvZWZmaWNpZW50cyhjb2xvclZhbHVlLm1hdHJpeF9jb2VmZmljaWVu
dHMudmFsdWUoKSk7Ci0gICAgICAgIGlmIChjb2xvclZhbHVlLnByaW1hcmllcy5pc19wcmVzZW50
KCkpCi0gICAgICAgICAgICByZWNvcmQuY29sb3JQcmltYXJpZXMgPSBjb252ZXJ0VG9Db2xvclBy
aW1hcmllcyhjb2xvclZhbHVlLnByaW1hcmllcy52YWx1ZSgpKTsKKyAgICAgICAgZXJyID0gQ01C
bG9ja0J1ZmZlckFzc3VyZUJsb2NrTWVtb3J5KG1fY3VycmVudEJsb2NrQnVmZmVyLmdldCgpKTsK
KyAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NT
SUJMRSgiQ01BdWRpb1NhbXBsZUJ1ZmZlckNyZWF0ZVdpdGhQYWNrZXREZXNjcmlwdGlvbnMgZmFp
bGVkIHdpdGggZXJyb3IiLCBlcnIpOworICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwg
Ynl0ZXNSZW1haW5pbmcpOworICAgICAgICB9CiAgICAgfQogCi0gICAgY29uc3RleHByIHNpemVf
dCBWUENvZGVjQ29uZmlndXJhdGlvbkNvbnRlbnRzU2l6ZSA9IDEyOworICAgIHNpemVfdCBieXRl
c1RvUmVhZCA9IG1ldGFkYXRhLnNpemUgLSBtX2N1cnJlbnRCbG9ja0J1ZmZlclBvc2l0aW9uOwor
ICAgIHdoaWxlIChieXRlc1RvUmVhZCkgeworICAgICAgICBzaXplX3Qgc2VnbWVudFNpemVBdFBv
c2l0aW9uID0gMDsKKyAgICAgICAgdWludDhfdCogYmxvY2tCdWZmZXJEYXRhID0gbnVsbHB0cjsK
KyAgICAgICAgYXV0byBlcnIgPSBDTUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIobV9jdXJyZW50
QmxvY2tCdWZmZXIuZ2V0KCksIG1fY3VycmVudEJsb2NrQnVmZmVyUG9zaXRpb24sICZzZWdtZW50
U2l6ZUF0UG9zaXRpb24sIG51bGxwdHIsIChjaGFyKiopJmJsb2NrQnVmZmVyRGF0YSk7CisgICAg
ICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUo
IkNNQmxvY2tCdWZmZXJHZXREYXRhUG9pbnRlciBmYWlsZWQgd2l0aCBlcnJvciIsIGVycik7Cisg
ICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CisgICAgICAg
IH0KIAotICAgIHVpbnQzMl90IHZlcnNpb25BbmRGbGFncyA9IDEgPDwgMjQ7Ci0gICAgdWludDhf
dCBiaXREZXB0aENocm9tYUFuZFJhbmdlID0gKDB4RiAmIHJlY29yZC5iaXREZXB0aCkgPDwgNCB8
ICgweDcgJiByZWNvcmQuY2hyb21hU3Vic2FtcGxpbmcpIDw8IDEgfCAoMHgxICYgcmVjb3JkLnZp
ZGVvRnVsbFJhbmdlRmxhZyk7Ci0gICAgdWludDE2X3QgY29kZWNJbnRpYWxpemF0aW9uRGF0YVNp
emUgPSAwOworICAgICAgICBzaXplX3QgYnl0ZXNUb1JlYWRGcm9tVGhpc1NlZ21lbnQgPSBzdGQ6
Om1pbihieXRlc1RvUmVhZCwgc2VnbWVudFNpemVBdFBvc2l0aW9uKTsKKyAgICAgICAgdWludDY0
X3QgYnl0ZXNSZWFkOwogCi0gICAgYXV0byB2aWV3ID0gSlNDOjpEYXRhVmlldzo6Y3JlYXRlKEFy
cmF5QnVmZmVyOjpjcmVhdGUoVlBDb2RlY0NvbmZpZ3VyYXRpb25Db250ZW50c1NpemUsIDEpLCAw
LCBWUENvZGVjQ29uZmlndXJhdGlvbkNvbnRlbnRzU2l6ZSk7Ci0gICAgdmlldy0+c2V0KDAsIHZl
cnNpb25BbmRGbGFncywgZmFsc2UpOwotICAgIHZpZXctPnNldCg0LCByZWNvcmQucHJvZmlsZSwg
ZmFsc2UpOwotICAgIHZpZXctPnNldCg1LCByZWNvcmQubGV2ZWwsIGZhbHNlKTsKLSAgICB2aWV3
LT5zZXQoNiwgYml0RGVwdGhDaHJvbWFBbmRSYW5nZSwgZmFsc2UpOwotICAgIHZpZXctPnNldCg3
LCByZWNvcmQuY29sb3JQcmltYXJpZXMsIGZhbHNlKTsKLSAgICB2aWV3LT5zZXQoOCwgcmVjb3Jk
LnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzLCBmYWxzZSk7Ci0gICAgdmlldy0+c2V0KDksIHJlY29y
ZC5tYXRyaXhDb2VmZmljaWVudHMsIGZhbHNlKTsKLSAgICB2aWV3LT5zZXQoMTAsIGNvZGVjSW50
aWFsaXphdGlvbkRhdGFTaXplLCBmYWxzZSk7CisgICAgICAgIGF1dG8gc3RhdHVzID0gcmVhZGVy
LlJlYWQoYnl0ZXNUb1JlYWRGcm9tVGhpc1NlZ21lbnQsICh1aW50OF90KilibG9ja0J1ZmZlckRh
dGEsICZieXRlc1JlYWQpOworICAgICAgICBieXRlc1RvUmVhZCAtPSBieXRlc1JlYWQ7CisgICAg
ICAgICpieXRlc1JlbWFpbmluZyAtPSBieXRlc1JlYWQ7CisgICAgICAgIG1fY3VycmVudEJsb2Nr
QnVmZmVyUG9zaXRpb24gKz0gYnl0ZXNSZWFkOwogCi0gICAgYXV0byBkYXRhID0gYWRvcHRDRihD
RkRhdGFDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKGNvbnN0IFVJbnQ4ICopdmlldy0+ZGF0
YSgpLCB2aWV3LT5ieXRlTGVuZ3RoKCkpKTsKKyAgICAgICAgLy8gRklYTUU6IFdlIGNhbid0IHll
dCBoYW5kbGUgcGFyc2luZyBhIEZyYW1lIHRoYXQgZG9lc24ndCBoYXZlIGFsbCBpdHMgbWVtb3J5
IGF2YWlsYWJsZS4KKyAgICAgICAgaWYgKHN0YXR1cy5jb2RlID09IHdlYm06OlN0YXR1czo6a09r
UGFydGlhbCB8fCBzdGF0dXMuY29kZSA9PSB3ZWJtOjpTdGF0dXM6OmtXb3VsZEJsb2NrKQorICAg
ICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CiAKLSAgICBDRlR5cGVSZWYgY29uZmlndXJh
dGlvbktleXNbXSA9IHsgQ0ZTVFIoInZwY0MiKSB9OwotICAgIENGVHlwZVJlZiBjb25maWd1cmF0
aW9uVmFsdWVzW10gPSB7IGRhdGEuZ2V0KCkgfTsKLSAgICBhdXRvIGNvbmZpZ3VyYXRpb25EaWN0
ID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY29uZmln
dXJhdGlvbktleXMsIGNvbmZpZ3VyYXRpb25WYWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoY29uZmln
dXJhdGlvbktleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGlj
dGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgY3JlYXRlU2FtcGxlQnVmZmVyKHByZXNlbnRh
dGlvblRpbWUsIHNhbXBsZUNvdW50KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKG1ldGFkYXRh
KTsKKyAgICBVTlVTRURfUEFSQU0ocHJlc2VudGF0aW9uVGltZSk7CisgICAgVU5VU0VEX1BBUkFN
KHNhbXBsZUNvdW50KTsKKyNlbmRpZgogCi0gICAgVmVjdG9yPENGVHlwZVJlZj4gZXh0ZW5zaW9u
c0tleXMgeyBrQ01Gb3JtYXREZXNjcmlwdGlvbkV4dGVuc2lvbl9TYW1wbGVEZXNjcmlwdGlvbkV4
dGVuc2lvbkF0b21zIH07Ci0gICAgVmVjdG9yPENGVHlwZVJlZj4gZXh0ZW5zaW9uc1ZhbHVlcyA9
IHsgY29uZmlndXJhdGlvbkRpY3QuZ2V0KCkgfTsKKyAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBi
eXRlc1JlbWFpbmluZyk7Cit9CiAKLSAgICBpZiAocmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxhZyA9
PSBWUENvbmZpZ3VyYXRpb25SYW5nZTo6RnVsbFJhbmdlKSB7Ci0gICAgICAgIGV4dGVuc2lvbnNL
ZXlzLmFwcGVuZChrQ01Gb3JtYXREZXNjcmlwdGlvbkV4dGVuc2lvbl9GdWxsUmFuZ2VWaWRlbyk7
Ci0gICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGtDRkJvb2xlYW5UcnVlKTsKK3ZvaWQg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZl
cihjb25zdCBDTVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIGludCBzYW1wbGVDb3VudCkKK3sKKyNp
ZiBFTkFCTEUoVlA5KQorICAgIHVpbnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IG51bGxwdHI7Cisg
ICAgc2l6ZV90IHNlZ21lbnRTaXplQXRQb3NpdGlvbiA9IDA7CisgICAgYXV0byBlcnIgPSBDTUJs
b2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIobV9jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCksIDAsICZz
ZWdtZW50U2l6ZUF0UG9zaXRpb24sIG51bGxwdHIsIChjaGFyKiopJmJsb2NrQnVmZmVyRGF0YSk7
CisgICAgaWYgKGVycikgeworICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJD
TUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIgZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIpOworICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF1dG8gY21Db2xvclByaW1hcmllcyA9IGNv
bnZlcnRUb0NNQ29sb3JQcmltYXJpZXMocmVjb3JkLmNvbG9yUHJpbWFyaWVzKSkgewotICAgICAg
ICBleHRlbnNpb25zS2V5cy5hcHBlbmQoa0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc0tleSk7
Ci0gICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGNtQ29sb3JQcmltYXJpZXMpOworICAg
IGlmICghbV9oZWFkZXJQYXJzZXIuUGFyc2VVbmNvbXByZXNzZWRIZWFkZXIoYmxvY2tCdWZmZXJE
YXRhLCBzZWdtZW50U2l6ZUF0UG9zaXRpb24pKSB7CisgICAgICAgIFBBUlNFUl9MT0dfRVJST1Jf
SUZfUE9TU0lCTEUoIlBhcnNlVW5jb21wcmVzc2VkSGVhZGVyIGZhaWxlZCIpOworICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKGF1dG8gY21UcmFuc2ZlckZ1bmN0aW9uID0gY29udmVy
dFRvQ01UcmFuc2ZlckZ1bmN0aW9uKHJlY29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGljcykpIHsK
LSAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5j
dGlvbktleSk7Ci0gICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGNtVHJhbnNmZXJGdW5j
dGlvbik7CisgICAgLy8gT25seSB1cGRhdGUgdGhlIGZvcm1hdCBkZXNjcmlwdGlvbiB3aGVuIHRo
ZSBoZWFkZXIgaW5kaWNhdGVzIHRoYXQgdGhlIHNhbXBsZSBpcworICAgIC8vIGEga2V5LWZyYW1l
LCBvdGhlcndpc2UgY29sb3IgaW5mb3JtYXRpb24gd2lsbCBub3QgYmUgcGFyc2VkLgorICAgIGF1
dG8gdHJhY2sgPSB0aGlzLT50cmFjaygpOworICAgIGlmIChtX2hlYWRlclBhcnNlci5rZXkoKSkg
eworICAgICAgICBhdXRvIGZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlRm9ybWF0RGVzY3JpcHRp
b25Gcm9tVlA5SGVhZGVyUGFyc2VyKG1faGVhZGVyUGFyc2VyLCB0cmFjay52aWRlby52YWx1ZSgp
LmNvbG91cik7CisgICAgICAgIGlmICghZm9ybWF0RGVzY3JpcHRpb24pIHsKKyAgICAgICAgICAg
IFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoImZhaWxlZCB0byBjcmVhdGUgZm9ybWF0IGRl
c2NyaXB0aW9uIGZyb20gVlA5IGhlYWRlciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIHNldEZvcm1hdERlc2NyaXB0aW9uKFdURk1vdmUoZm9ybWF0RGVzY3JpcHRp
b24pKTsKICAgICB9CiAKLSAgICBpZiAoYXV0byBjbU1hdHJpeCA9IGNvbnZlcnRUb0NNWUNiQ1JN
YXRyaXgocmVjb3JkLm1hdHJpeENvZWZmaWNpZW50cykpIHsKLSAgICAgICAgZXh0ZW5zaW9uc0tl
eXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhLZXkpOwotICAgICAgICBleHRlbnNp
b25zVmFsdWVzLmFwcGVuZChjbU1hdHJpeCk7CisgICAgLy8gRklYTUU6IEEgYmxvY2sgbWlnaHQg
Y29udGFpbiBtb3JlIHRoYW4gb25lIGZyYW1lLCBidXQgb25seSB0aGlzIGZyYW1lIGhhcyBiZWVu
IHJlYWQgaW50byBgY3VycmVudEJsb2NrQnVmZmVyYC4KKyAgICAvLyBCZWxvdyB3ZSBjcmVhdGUg
c2FtcGxlIGJ1ZmZlcnMgZm9yIGVhY2ggZnJhbWUsIGVhY2ggd2l0aCB0aGUgYmxvY2sncyB0aW1l
Y29kZSBhbmQgYG51bV9mcmFtZXNgIHZhbHVlLgorICAgIC8vIFNob3VsZG4ndCB3ZSBjcmVhdGUg
anVzdCBvbmUgc2FtcGxlIGJ1ZmZlciBvbmNlIGFsbCB0aGUgYmxvY2sncyBmcmFtZXMgaGF2ZSBi
ZWVuIHJlYWQgaW50byBgY3VycmVudEJsb2NrQnVmZmVyYD8KKworICAgIHVpbnQ2NF90IGR1cmF0
aW9uID0gMDsKKyAgICBpZiAodHJhY2suZGVmYXVsdF9kdXJhdGlvbi5pc19wcmVzZW50KCkpCisg
ICAgICAgIGR1cmF0aW9uID0gdHJhY2suZGVmYXVsdF9kdXJhdGlvbi52YWx1ZSgpICogcHJlc2Vu
dGF0aW9uVGltZS50aW1lc2NhbGUgLyAxMDAwMDAwMDAwOworCisgICAgQ01TYW1wbGVCdWZmZXJS
ZWYgcmF3U2FtcGxlQnVmZmVyID0gbnVsbHB0cjsKKyAgICBzaXplX3QgZnJhbWVTaXplID0gQ01C
bG9ja0J1ZmZlckdldERhdGFMZW5ndGgobV9jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCkpOworICAg
IENNU2FtcGxlVGltaW5nSW5mbyB0aW1pbmcgPSB7IENNVGltZU1ha2UoZHVyYXRpb24sIHByZXNl
bnRhdGlvblRpbWUudGltZXNjYWxlKSwgcHJlc2VudGF0aW9uVGltZSwgcHJlc2VudGF0aW9uVGlt
ZSB9OworICAgIGVyciA9IENNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgbV9jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCksIGZvcm1hdERlc2NyaXB0aW9uKCkuZ2V0
KCksIHNhbXBsZUNvdW50LCAxLCAmdGltaW5nLCAxLCAmZnJhbWVTaXplLCAmcmF3U2FtcGxlQnVm
ZmVyKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lC
TEUoIkNNU2FtcGxlQnVmZmVyQ3JlYXRlUmVhZHkgZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIpOwor
ICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGF1dG8gc2FtcGxlQnVmZmVyID0gYWRvcHRDRihy
YXdTYW1wbGVCdWZmZXIpOwogCi0gICAgYXV0byBleHRlbnNpb25zID0gYWRvcHRDRihDRkRpY3Rp
b25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZXh0ZW5zaW9uc0tleXMuZGF0YSgpLCBl
eHRlbnNpb25zVmFsdWVzLmRhdGEoKSwgZXh0ZW5zaW9uc0tleXMuc2l6ZSgpLCAma0NGVHlwZURp
Y3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7
CisgICAgbV9jdXJyZW50QmxvY2tCdWZmZXIgPSBudWxscHRyOworICAgIG1fY3VycmVudEJsb2Nr
QnVmZmVyUG9zaXRpb24gPSAwOwogCi0gICAgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmIGZv
cm1hdERlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICBpZiAobm9FcnIgIT0gQ01WaWRlb0Zvcm1h
dERlc2NyaXB0aW9uQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDTVZpZGVvQ29kZWNUeXBl
X1ZQOSwgcGFyc2VyLndpZHRoKCksIHBhcnNlci5oZWlnaHQoKSwgZXh0ZW5zaW9ucy5nZXQoKSwg
JmZvcm1hdERlc2NyaXB0aW9uKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJu
IGFkb3B0Q0YoZm9ybWF0RGVzY3JpcHRpb24pOworICAgIGlmICghbV9oZWFkZXJQYXJzZXIua2V5
KCkpIHsKKyAgICAgICAgYXV0byBhdHRhY2htZW50c0FycmF5ID0gQ01TYW1wbGVCdWZmZXJHZXRT
YW1wbGVBdHRhY2htZW50c0FycmF5KHNhbXBsZUJ1ZmZlci5nZXQoKSwgdHJ1ZSk7CisgICAgICAg
IEFTU0VSVChhdHRhY2htZW50c0FycmF5KTsKKyAgICAgICAgaWYgKCFhdHRhY2htZW50c0FycmF5
KSB7CisgICAgICAgICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTVNhbXBsZUJ1
ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkgcmV0dXJuZWQgTlVMTCIpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChDRkluZGV4IGkgPSAwLCBjb3Vu
dCA9IENGQXJyYXlHZXRDb3VudChhdHRhY2htZW50c0FycmF5KTsgaSA8IGNvdW50OyArK2kpIHsK
KyAgICAgICAgICAgIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgYXR0YWNobWVudHMgPSBjaGVja2Vk
X2NmX2Nhc3Q8Q0ZNdXRhYmxlRGljdGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChh
dHRhY2htZW50c0FycmF5LCBpKSk7CisgICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShh
dHRhY2htZW50cywga0NNU2FtcGxlQXR0YWNobWVudEtleV9Ob3RTeW5jLCBrQ0ZCb29sZWFuVHJ1
ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIHRyYWNrSUQgPSB0cmFjay50cmFja191
aWQudmFsdWUoKTsKKyAgICBwYXJzZXIoKS5wcm92aWRlTWVkaWFEYXRhKHNhbXBsZUJ1ZmZlci5s
ZWFrUmVmKCksIHRyYWNrSUQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocHJlc2VudGF0aW9u
VGltZSk7CisgICAgVU5VU0VEX1BBUkFNKHNhbXBsZUNvdW50KTsKKyNlbmRpZiAvLyBFTkFCTEUo
VlA5KQogfQotI2VuZGlmCiAKLXdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpP
bkZyYW1lKGNvbnN0IEZyYW1lTWV0YWRhdGEmIG1ldGFkYXRhLCBSZWFkZXIqIHJlYWRlciwgdWlu
dDY0X3QqIGJ5dGVzUmVtYWluaW5nKQord2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OkF1ZGlvVHJhY2tEYXRhOjpjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVy
LCBjb25zdCBGcmFtZU1ldGFkYXRhJiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5n
LCBjb25zdCBDTVRpbWUmIHByZXNlbnRhdGlvblRpbWUsIGludCBzYW1wbGVDb3VudCkKIHsKLSAg
ICBVTlVTRURfUEFSQU0obWV0YWRhdGEpOwotICAgIFVOVVNFRF9QQVJBTShieXRlc1JlbWFpbmlu
Zyk7CisgICAgQVNTRVJUX1VOVVNFRChzYW1wbGVDb3VudCwgc2FtcGxlQ291bnQgPT0gMSk7CiAK
LSAgICBBU1NFUlQocmVhZGVyKTsKLSAgICBpZiAoIXJlYWRlcikKLSAgICAgICAgcmV0dXJuIFN0
YXR1cyhTdGF0dXM6OmtOb3RFbm91Z2hNZW1vcnkpOworICAgIGlmICghZm9ybWF0RGVzY3JpcHRp
b24oKSkgeworICAgICAgICBpZiAoIXRyYWNrKCkuY29kZWNfcHJpdmF0ZS5pc19wcmVzZW50KCkp
IHsKKyAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkF1ZGlvIHRyYWNr
IG1pc3NpbmcgbWFnaWMgY29va2llIik7CisgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVy
LCBieXRlc1JlbWFpbmluZyk7CisgICAgICAgIH0KIAotICAgIGlmICghbV9jdXJyZW50QmxvY2sp
Ci0gICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprSW52YWxpZEVsZW1lbnRJZCk7CisgICAg
ICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBmb3JtYXREZXNjcmlwdGlvbjsK
KyAgICAgICAgYXV0byYgcHJpdmF0ZURhdGEgPSB0cmFjaygpLmNvZGVjX3ByaXZhdGUudmFsdWUo
KTsKKyAgICAgICAgaWYgKGNvZGVjKCkgPT0gQ29kZWNUeXBlOjpWb3JiaXMpCisgICAgICAgICAg
ICBmb3JtYXREZXNjcmlwdGlvbiA9IGNyZWF0ZVZvcmJpc0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24o
cHJpdmF0ZURhdGEuc2l6ZSgpLCBwcml2YXRlRGF0YS5kYXRhKCkpOworICAgICAgICBlbHNlIGlm
IChjb2RlYygpID09IENvZGVjVHlwZTo6T3B1cykKKyAgICAgICAgICAgIGZvcm1hdERlc2NyaXB0
aW9uID0gY3JlYXRlT3B1c0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24ocHJpdmF0ZURhdGEuc2l6ZSgp
LCBwcml2YXRlRGF0YS5kYXRhKCkpOwogCi0gICAgYXV0byogYmxvY2sgPSBXVEY6OnN3aXRjaE9u
KCptX2N1cnJlbnRCbG9jaywgW10oQmxvY2smIGJsb2NrKSB7Ci0gICAgICAgIHJldHVybiAmYmxv
Y2s7Ci0gICAgfSwgW10oU2ltcGxlQmxvY2smIGJsb2NrKSAtPiBCbG9jayogewotICAgICAgICBy
ZXR1cm4gJmJsb2NrOwotICAgIH0pOwotICAgIGlmICghYmxvY2spCi0gICAgICAgIHJldHVybiBT
dGF0dXMoU3RhdHVzOjprSW52YWxpZEVsZW1lbnRJZCk7CisgICAgICAgIGlmICghZm9ybWF0RGVz
Y3JpcHRpb24pIHsKKyAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkZh
aWxlZCB0byBjcmVhdGUgZm9ybWF0IGRlc2NyaXB0aW9uIGZyb20gYXVkaW8gdHJhY2sgaGVhZGVy
Iik7CisgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Cisg
ICAgICAgIH0KIAotICAgIGF1dG8gdHJhY2tOdW1iZXIgPSBibG9jay0+dHJhY2tfbnVtYmVyOwor
ICAgICAgICBhdXRvIHN0cmVhbURlc2NyaXB0aW9uID0gQ01BdWRpb0Zvcm1hdERlc2NyaXB0aW9u
R2V0U3RyZWFtQmFzaWNEZXNjcmlwdGlvbihmb3JtYXREZXNjcmlwdGlvbi5nZXQoKSk7CisgICAg
ICAgIGlmICghc3RyZWFtRGVzY3JpcHRpb24pIHsKKyAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJS
T1JfSUZfUE9TU0lCTEUoIkNNQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkdldFN0cmVhbUJhc2ljRGVz
Y3JpcHRpb24gZmFpbGVkIik7CisgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRl
c1JlbWFpbmluZyk7CisgICAgICAgIH0KKyAgICAgICAgbV9wYWNrZXREdXJhdGlvbiA9IENNVGlt
ZU1ha2Uoc3RyZWFtRGVzY3JpcHRpb24tPm1GcmFtZXNQZXJQYWNrZXQsIHN0cmVhbURlc2NyaXB0
aW9uLT5tU2FtcGxlUmF0ZSk7CiAKLSAgICBhdXRvKiB0cmFja0RhdGEgPSB0cmFja0RhdGFGb3JU
cmFja051bWJlcih0cmFja051bWJlcik7Ci0gICAgaWYgKCF0cmFja0RhdGEpCi0gICAgICAgIHJl
dHVybiBTdGF0dXMoU3RhdHVzOjprSW52YWxpZEVsZW1lbnRJZCk7Ci0gICAgYXV0byYgdHJhY2sg
PSB0cmFja0RhdGEtPnRyYWNrOworICAgICAgICBzZXRGb3JtYXREZXNjcmlwdGlvbihXVEZNb3Zl
KGZvcm1hdERlc2NyaXB0aW9uKSk7CisgICAgfQogCi0gICAgdWludDY0X3QgZHVyYXRpb24gPSAw
OwotICAgIGlmICh0cmFjay5kZWZhdWx0X2R1cmF0aW9uLmlzX3ByZXNlbnQoKSkKLSAgICAgICAg
ZHVyYXRpb24gPSB0cmFjay5kZWZhdWx0X2R1cmF0aW9uLnZhbHVlKCkgKiBtX3RpbWVzY2FsZSAv
IDEwMDAwMDAwMDA7CisgICAgaWYgKG1fcGFja2V0RGF0YS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
bV9wYWNrZXREYXRhLnJlc2l6ZShtZXRhZGF0YS5zaXplKTsKKyAgICAgICAgbV9wYWNrZXRCeXRl
c1JlYWQgPSAwOworICAgICAgICBtX2J5dGVPZmZzZXQgPSBtZXRhZGF0YS5wb3NpdGlvbjsKKyAg
ICAgICAgbV9zYW1wbGVQcmVzZW50YXRpb25UaW1lID0gcHJlc2VudGF0aW9uVGltZTsKKyAgICB9
CiAKLSNpZiBFTkFCTEUoVlA5KQotICAgIGlmICh0cmFjay5jb2RlY19pZC5pc19wcmVzZW50KCkg
JiYgdHJhY2suY29kZWNfaWQudmFsdWUoKSA9PSAiVl9WUDkiKSB7Ci0gICAgICAgIGlmICghdHJh
Y2tEYXRhLT5jdXJyZW50QmxvY2tCdWZmZXIpIHsKLSAgICAgICAgICAgIENNQmxvY2tCdWZmZXJS
ZWYgcmF3QmxvY2tCdWZmZXIgPSBudWxscHRyOwotICAgICAgICAgICAgaWYgKG5vRXJyICE9IENN
QmxvY2tCdWZmZXJDcmVhdGVXaXRoTWVtb3J5QmxvY2soa0NGQWxsb2NhdG9yRGVmYXVsdCwgbnVs
bHB0ciwgbWV0YWRhdGEuc2l6ZSwga0NGQWxsb2NhdG9yRGVmYXVsdCwgbnVsbHB0ciwgMCwgbWV0
YWRhdGEuc2l6ZSwgMCwgJnJhd0Jsb2NrQnVmZmVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
U2tpcChyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLSAgICAgICAgICAgIHRyYWNrRGF0YS0+Y3Vy
cmVudEJsb2NrQnVmZmVyID0gYWRvcHRDRihyYXdCbG9ja0J1ZmZlcik7Ci0gICAgICAgICAgICB0
cmFja0RhdGEtPmN1cnJlbnRCbG9ja0J1ZmZlclBvc2l0aW9uID0gMDsKLQotICAgICAgICAgICAg
aWYgKG5vRXJyICE9IENNQmxvY2tCdWZmZXJBc3N1cmVCbG9ja01lbW9yeSh0cmFja0RhdGEtPmN1
cnJlbnRCbG9ja0J1ZmZlci5nZXQoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNraXAocmVh
ZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0gICAgICAgIH0KKyAgICBzaXplX3QgcGFja2V0RGF0YU9m
ZnNldCA9IG1fcGFja2V0Qnl0ZXNSZWFkOworICAgIHNpemVfdCBieXRlc1RvUmVhZCA9IG1ldGFk
YXRhLnNpemU7CisgICAgd2hpbGUgKGJ5dGVzVG9SZWFkKSB7CisgICAgICAgIHVpbnQ2NF90IGJ5
dGVzUmVhZDsKKyAgICAgICAgYXV0byBzdGF0dXMgPSByZWFkZXIuUmVhZChieXRlc1RvUmVhZCwg
bV9wYWNrZXREYXRhLmRhdGEoKSArIG1fcGFja2V0Qnl0ZXNSZWFkLCAmYnl0ZXNSZWFkKTsKKyAg
ICAgICAgYnl0ZXNUb1JlYWQgLT0gYnl0ZXNSZWFkOworICAgICAgICAqYnl0ZXNSZW1haW5pbmcg
LT0gYnl0ZXNSZWFkOworICAgICAgICBtX3BhY2tldEJ5dGVzUmVhZCArPSBieXRlc1JlYWQ7CisK
KyAgICAgICAgLy8gRklYTUU6IFdlIGNhbid0IHlldCBoYW5kbGUgcGFyc2luZyBhIEZyYW1lIHRo
YXQgZG9lc24ndCBoYXZlIGFsbCBpdHMgbWVtb3J5IGF2YWlsYWJsZS4KKyAgICAgICAgaWYgKHN0
YXR1cy5jb2RlID09IHdlYm06OlN0YXR1czo6a09rUGFydGlhbCB8fCBzdGF0dXMuY29kZSA9PSB3
ZWJtOjpTdGF0dXM6OmtXb3VsZEJsb2NrKQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAg
ICB9CiAKLSAgICAgICAgc2l6ZV90IG51bVRvUmVhZCA9IG1ldGFkYXRhLnNpemUgLSB0cmFja0Rh
dGEtPmN1cnJlbnRCbG9ja0J1ZmZlclBvc2l0aW9uOwotICAgICAgICBzaXplX3Qgc2VnbWVudFNp
emVBdFBvc2l0aW9uID0gMDsKLSAgICAgICAgdWludDhfdCogYmxvY2tCdWZmZXJEYXRhID0gbnVs
bHB0cjsKKyAgICBtX3BhY2tldERlc2NyaXB0aW9ucy5hcHBlbmQoeyBzdGF0aWNfY2FzdDxpbnQ2
NF90PihwYWNrZXREYXRhT2Zmc2V0KSwgMCwgc3RhdGljX2Nhc3Q8VUludDMyPihtZXRhZGF0YS5z
aXplKSB9KTsKKyAgICBhdXRvIHNhbXBsZUR1cmF0aW9uID0gQ01UaW1lR2V0U2Vjb25kcyhDTVRp
bWVTdWJ0cmFjdChwcmVzZW50YXRpb25UaW1lLCBtX3NhbXBsZVByZXNlbnRhdGlvblRpbWUpKSAr
IENNVGltZUdldFNlY29uZHMobV9wYWNrZXREdXJhdGlvbik7CisgICAgaWYgKHNhbXBsZUR1cmF0
aW9uID49IG1fbWluaW11bVNhbXBsZUR1cmF0aW9uKQorICAgICAgICBjcmVhdGVTYW1wbGVCdWZm
ZXIoKTsKIAotICAgICAgICB3aGlsZSAobnVtVG9SZWFkKSB7Ci0gICAgICAgICAgICBpZiAobm9F
cnIgIT0gQ01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyKHRyYWNrRGF0YS0+Y3VycmVudEJsb2Nr
QnVmZmVyLmdldCgpLCB0cmFja0RhdGEtPmN1cnJlbnRCbG9ja0J1ZmZlclBvc2l0aW9uLCAmc2Vn
bWVudFNpemVBdFBvc2l0aW9uLCBudWxscHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRhdGEpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBTa2lwKHJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOworICAg
IHJldHVybiBTa2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKK30KIAotICAgICAgICAgICAg
c2l6ZV90IG51bVRvUmVhZEZyb21UaGlzU2VnbWVudCA9IHN0ZDo6bWluKG51bVRvUmVhZCwgc2Vn
bWVudFNpemVBdFBvc2l0aW9uKTsKLSAgICAgICAgICAgIHVpbnQ2NF90IG51bUFjdHVhbGx5V3Jp
dHRlblRvVGhpc1NlZ21lbnQ7Cit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJh
Y2tEYXRhOjpjcmVhdGVTYW1wbGVCdWZmZXIoKQoreworICAgIGlmIChtX3BhY2tldERlc2NyaXB0
aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgYXV0byBzdGF0
dXMgPSBtX3JlYWRlci0+UmVhZChudW1Ub1JlYWRGcm9tVGhpc1NlZ21lbnQsICh1aW50OF90Kili
bG9ja0J1ZmZlckRhdGEsICZudW1BY3R1YWxseVdyaXR0ZW5Ub1RoaXNTZWdtZW50KTsKLSAgICAg
ICAgICAgIG51bVRvUmVhZCAtPSBudW1BY3R1YWxseVdyaXR0ZW5Ub1RoaXNTZWdtZW50OwotICAg
ICAgICAgICAgKmJ5dGVzUmVtYWluaW5nIC09IG51bUFjdHVhbGx5V3JpdHRlblRvVGhpc1NlZ21l
bnQ7Ci0gICAgICAgICAgICB0cmFja0RhdGEtPmN1cnJlbnRCbG9ja0J1ZmZlclBvc2l0aW9uICs9
IG51bUFjdHVhbGx5V3JpdHRlblRvVGhpc1NlZ21lbnQ7CisgICAgQVNTRVJUKCFtX3BhY2tldERh
dGEuaXNFbXB0eSgpKTsKIAotICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNhbid0IHlldCBoYW5k
bGUgcGFyc2luZyBhIEZyYW1lIHRoYXQgZG9lc24ndCBoYXZlIGFsbCBpdHMgbWVtb3J5IGF2YWls
YWJsZS4KLSAgICAgICAgICAgIGlmIChzdGF0dXMuY29kZSA9PSB3ZWJtOjpTdGF0dXM6OmtPa1Bh
cnRpYWwgfHwgc3RhdHVzLmNvZGUgPT0gd2VibTo6U3RhdHVzOjprV291bGRCbG9jaykKLSAgICAg
ICAgICAgICAgICByZXR1cm4gc3RhdHVzOwotICAgICAgICB9CisgICAgQ01CbG9ja0J1ZmZlclJl
ZiBibG9ja0J1ZmZlciA9IG51bGxwdHI7CisgICAgYXV0byBlcnIgPSBDTUJsb2NrQnVmZmVyQ3Jl
YXRlV2l0aE1lbW9yeUJsb2NrKGtDRkFsbG9jYXRvckRlZmF1bHQsIG51bGxwdHIsIG1fcGFja2V0
RGF0YS5zaXplSW5CeXRlcygpLCBrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBudWxscHRyLCAwLCBtX3Bh
Y2tldERhdGEuc2l6ZUluQnl0ZXMoKSwga0NNQmxvY2tCdWZmZXJBc3N1cmVNZW1vcnlOb3dGbGFn
LCAmYmxvY2tCdWZmZXIpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgUEFSU0VSX0xPR19FUlJP
Ul9JRl9QT1NTSUJMRSgiQ01CbG9ja0J1ZmZlckNyZWF0ZVdpdGhNZW1vcnlCbG9jayBmYWlsZWQg
d2l0aCAlZCIsIGVycik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYXV0byBidWZmZXIg
PSBhZG9wdENGKGJsb2NrQnVmZmVyKTsKIAotICAgICAgICBpZiAobm9FcnIgIT0gQ01CbG9ja0J1
ZmZlckdldERhdGFQb2ludGVyKHRyYWNrRGF0YS0+Y3VycmVudEJsb2NrQnVmZmVyLmdldCgpLCAw
LCAmc2VnbWVudFNpemVBdFBvc2l0aW9uLCBudWxscHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRh
dGEpKQotICAgICAgICAgICAgcmV0dXJuIFNraXAocmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0K
LSAgICAgICAgYXV0byYgaGVhZGVyUGFyc2VyID0gdHJhY2tEYXRhLT5oZWFkZXJQYXJzZXI7Ci0g
ICAgICAgIGlmICghaGVhZGVyUGFyc2VyLlBhcnNlVW5jb21wcmVzc2VkSGVhZGVyKGJsb2NrQnVm
ZmVyRGF0YSwgc2VnbWVudFNpemVBdFBvc2l0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBTa2lw
KHJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwotCi0gICAgICAgIC8vIE9ubHkgdXBkYXRlIHRoZSBm
b3JtYXQgZGVzY3JpcHRpb24gd2hlbiB0aGUgaGVhZGVyIGluZGljYXRlcyB0aGF0IHRoZSBzYW1w
bGUgaXMKLSAgICAgICAgLy8gYSBrZXktZnJhbWUsIG90aGVyd2lzZSBjb2xvciBpbmZvcm1hdGlv
biB3aWxsIG5vdCBiZSBwYXJzZWQuCi0gICAgICAgIGlmIChoZWFkZXJQYXJzZXIua2V5KCkpCi0g
ICAgICAgICAgICB0cmFja0RhdGEtPmZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlRm9ybWF0RGVz
Y3JpcHRpb25Gcm9tVlA5SGVhZGVyUGFyc2VyKGhlYWRlclBhcnNlciwgdHJhY2sudmlkZW8udmFs
dWUoKS5jb2xvdXIpOwotICAgICAgICBpZiAoIXRyYWNrRGF0YS0+Zm9ybWF0RGVzY3JpcHRpb24p
Ci0gICAgICAgICAgICByZXR1cm4gU2tpcChyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLQotICAg
ICAgICBhdXRvIHB0cyA9IENNVGltZU1ha2UoYmxvY2stPnRpbWVjb2RlICsgbV9jdXJyZW50VGlt
ZWNvZGUsIG1fdGltZXNjYWxlKTsKLSAgICAgICAgQ01TYW1wbGVUaW1pbmdJbmZvIHRpbWluZyA9
IHsgQ01UaW1lTWFrZShkdXJhdGlvbiwgbV90aW1lc2NhbGUpLCBwdHMsIHB0cyB9OwotICAgICAg
ICBzaXplX3Qgc2l6ZSA9IG1ldGFkYXRhLnNpemU7Ci0KLSAgICAgICAgYXV0byBzYW1wbGVDb3Vu
dCA9IGJsb2NrLT5udW1fZnJhbWVzOwotICAgICAgICBDTVNhbXBsZUJ1ZmZlclJlZiByYXdTYW1w
bGVCdWZmZXIgPSBudWxscHRyOwotICAgICAgICBpZiAobm9FcnIgIT0gQ01TYW1wbGVCdWZmZXJD
cmVhdGVSZWFkeShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCB0cmFja0RhdGEtPmN1cnJlbnRCbG9ja0J1
ZmZlci5nZXQoKSwgdHJhY2tEYXRhLT5mb3JtYXREZXNjcmlwdGlvbi5nZXQoKSwgc2FtcGxlQ291
bnQsIDEsICZ0aW1pbmcsIDEsICZzaXplLCAmcmF3U2FtcGxlQnVmZmVyKSkKLSAgICAgICAgICAg
IHJldHVybiBTa2lwKHJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOwotICAgICAgICBhdXRvIHNhbXBs
ZUJ1ZmZlciA9IGFkb3B0Q0YocmF3U2FtcGxlQnVmZmVyKTsKLQotICAgICAgICB0cmFja0RhdGEt
PmN1cnJlbnRCbG9ja0J1ZmZlciA9IG51bGxwdHI7Ci0gICAgICAgIHRyYWNrRGF0YS0+Y3VycmVu
dEJsb2NrQnVmZmVyUG9zaXRpb24gPSAwOwotCi0gICAgICAgIGlmICghaGVhZGVyUGFyc2VyLmtl
eSgpKSB7Ci0gICAgICAgICAgICBhdXRvIGF0dGFjaG1lbnRzQXJyYXkgPSBDTVNhbXBsZUJ1ZmZl
ckdldFNhbXBsZUF0dGFjaG1lbnRzQXJyYXkoc2FtcGxlQnVmZmVyLmdldCgpLCB0cnVlKTsKLSAg
ICAgICAgICAgIEFTU0VSVChhdHRhY2htZW50c0FycmF5KTsKLSAgICAgICAgICAgIGlmICghYXR0
YWNobWVudHNBcnJheSkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2tpcChyZWFkZXIsIGJ5dGVz
UmVtYWluaW5nKTsKLSAgICAgICAgICAgIGZvciAoQ0ZJbmRleCBpID0gMCwgY291bnQgPSBDRkFy
cmF5R2V0Q291bnQoYXR0YWNobWVudHNBcnJheSk7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgQ0ZNdXRhYmxlRGljdGlvbmFyeVJlZiBhdHRhY2htZW50cyA9IGNoZWNrZWRfY2Zf
Y2FzdDxDRk11dGFibGVEaWN0aW9uYXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGF0dGFj
aG1lbnRzQXJyYXksIGkpKTsKLSAgICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShh
dHRhY2htZW50cywga0NNU2FtcGxlQXR0YWNobWVudEtleV9Ob3RTeW5jLCBrQ0ZCb29sZWFuVHJ1
ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBlcnIgPSBDTUJsb2NrQnVmZmVyUmVw
bGFjZURhdGFCeXRlcyhtX3BhY2tldERhdGEuZGF0YSgpLCBidWZmZXIuZ2V0KCksIDAsIG1fcGFj
a2V0RGF0YS5zaXplSW5CeXRlcygpKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIFBBUlNFUl9M
T0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQmxvY2tCdWZmZXJSZXBsYWNlRGF0YUJ5dGVzIGZhaWxl
ZCB3aXRoICVkIiwgZXJyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgICAgICBhdXRv
IHRyYWNrSUQgPSB0cmFjay50cmFja191aWQudmFsdWUoKTsKKyAgICBDTVNhbXBsZUJ1ZmZlclJl
ZiByYXdTYW1wbGVCdWZmZXIgPSBudWxscHRyOworICAgIGVyciA9IENNQXVkaW9TYW1wbGVCdWZm
ZXJDcmVhdGVSZWFkeVdpdGhQYWNrZXREZXNjcmlwdGlvbnMoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
YnVmZmVyLmdldCgpLCBmb3JtYXREZXNjcmlwdGlvbigpLmdldCgpLCBtX3BhY2tldERlc2NyaXB0
aW9ucy5zaXplKCksIG1fc2FtcGxlUHJlc2VudGF0aW9uVGltZSwgbV9wYWNrZXREZXNjcmlwdGlv
bnMuZGF0YSgpLCAmcmF3U2FtcGxlQnVmZmVyKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIFBB
UlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQXVkaW9TYW1wbGVCdWZmZXJDcmVhdGVXaXRo
UGFja2V0RGVzY3JpcHRpb25zIGZhaWxlZCB3aXRoICVkIiwgZXJyKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGFkb3B0Q0YocmF3U2FtcGxlQnVmZmVy
KTsKIAotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyksIHNhbXBsZUJ1ZmZlciA9IFdURk1vdmUoc2FtcGxlQnVmZmVyKSwgdHJhY2tJ
RF0gKCkgbXV0YWJsZSB7Ci0gICAgICAgICAgICBpZiAoIW1fZGlkUHJvdmlkZU1lZGlhRGF0YUNh
bGxiYWNrKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGF1dG8gbWVkaWFT
YW1wbGUgPSBNZWRpYVNhbXBsZUFWRk9iakM6OmNyZWF0ZShzYW1wbGVCdWZmZXIuZ2V0KCksIHRy
YWNrSUQpOwotICAgICAgICAgICAgbV9kaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2soV1RGTW92
ZShtZWRpYVNhbXBsZSksIHRyYWNrSUQsIGVtcHR5U3RyaW5nKCkpOwotICAgICAgICB9KTsKKyAg
ICBtX3BhY2tldERhdGEuY2xlYXIoKTsKKyAgICBtX3BhY2tldERlc2NyaXB0aW9ucy5jbGVhcigp
OworCisgICAgYXV0byB0cmFja0lEID0gdHJhY2soKS50cmFja191aWQudmFsdWUoKTsKKyAgICBw
YXJzZXIoKS5wcm92aWRlTWVkaWFEYXRhKHNhbXBsZUJ1ZmZlci5sZWFrUmVmKCksIHRyYWNrSUQp
OworfQorCit2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmZsdXNoUGVuZGluZ0F1ZGlvQnVm
ZmVycygpCit7CisgICAgZm9yIChhdXRvJiB0cmFjayA6IG1fdHJhY2tzKSB7CisgICAgICAgIGlm
ICh0cmFjay0+dHJhY2tUeXBlKCkgPT0gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRh
OjpUeXBlOjpBdWRpbykKKyAgICAgICAgICAgIGRvd25jYXN0PEF1ZGlvVHJhY2tEYXRhPih0cmFj
ay5nZXQoKSkuY3JlYXRlU2FtcGxlQnVmZmVyKCk7CiAgICAgfQotI2VuZGlmCit9CiAKLSAgICBy
ZXR1cm4gU2tpcChyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKK3ZvaWQgU291cmNlQnVmZmVyUGFy
c2VyV2ViTTo6c2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24oZmxvYXQgZHVyYXRpb24pCit7
CisgICAgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbiA9IGR1cmF0aW9uOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VC
dWZmZXJQYXJzZXJXZWJNLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmgKaW5kZXggM2E4NDY0NTlhM2ViMzU1MzYxMjEyOTc2
YzhlYWRlNDYzZDYzYjE5Ny4uMWQ5NWZhODI3MDEyNTMzZDVlMGUzYWY2NWE3ZGI0MzM4NGQyZGU2
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291
cmNlQnVmZmVyUGFyc2VyV2ViTS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uaApAQCAtMjgsNiArMjgsOCBAQAogI2lm
IEVOQUJMRShNRURJQV9TT1VSQ0UpCiAKICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQYXJzZXIuaCIK
KyNpbmNsdWRlIDxDb3JlQXVkaW8vQ29yZUF1ZGlvVHlwZXMuaD4KKyNpbmNsdWRlIDxDb3JlTWVk
aWEvQ01UaW1lLmg+CiAjaW5jbHVkZSA8Y29tbW9uL3ZwOV9oZWFkZXJfcGFyc2VyLmg+CiAjaW5j
bHVkZSA8d2VibS9jYWxsYmFjay5oPgogI2luY2x1ZGUgPHdlYm0vc3RhdHVzLmg+CkBAIC00MSw3
ICs0Myw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L3RocmVhZHMvQmluYXJ5U2VtYXBob3JlLmg+CiAKLXR5cGVkZWYgc3RydWN0IG9wYXF1ZUNNU2Ft
cGxlQnVmZmVyICpDTVNhbXBsZUJ1ZmZlclJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IG9wYXF1
ZUNNRm9ybWF0RGVzY3JpcHRpb24qIENNRm9ybWF0RGVzY3JpcHRpb25SZWY7CiB0eXBlZGVmIHN0
cnVjdCBPcGFxdWVDTUJsb2NrQnVmZmVyICpDTUJsb2NrQnVmZmVyUmVmOwogCkBAIC01MSwxMCAr
NTIsMTUgQEAgY2xhc3MgV2VibVBhcnNlcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFz
cyBNZWRpYVNhbXBsZUFWRk9iakM7CisKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk0gOiBwdWJsaWMgU291cmNlQnVmZmVyUGFyc2VyLCBwcml2YXRlIHdlYm06OkNh
bGxiYWNrIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICBjbGFz
cyBTdHJlYW1pbmdWZWN0b3JSZWFkZXI7CisKICAgICBzdGF0aWMgTWVkaWFQbGF5ZXJFbnVtczo6
U3VwcG9ydHNUeXBlIGlzQ29udGVudFR5cGVTdXBwb3J0ZWQoY29uc3QgQ29udGVudFR5cGUmKTsK
KyAgICBzdGF0aWMgUmVmUHRyPFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0+IGNyZWF0ZShjb25zdCBD
b250ZW50VHlwZSYpOwogCiAgICAgU291cmNlQnVmZmVyUGFyc2VyV2ViTSgpOwogICAgIH5Tb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNKCk7CkBAIC03MSw5ICs3NywxMiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCByZXNldFBhcnNlclN0YXRlKCkgZmluYWw7CiAgICAgdm9pZCBpbnZhbGlkYXRlKCkgZmluYWw7
CiAKLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICB2b2lkIGZsdXNoUGVuZGluZ0F1ZGlv
QnVmZmVycygpOworICAgIHZvaWQgc2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24oZmxvYXQp
OworCiAgICAgdm9pZCBzZXRMb2dnZXIoY29uc3QgV1RGOjpMb2dnZXImLCBjb25zdCB2b2lkKiBp
ZGVudGlmaWVyKSBmaW5hbDsKLSNlbmRpZgorCisgICAgdm9pZCBwcm92aWRlTWVkaWFEYXRhKFJl
dGFpblB0cjxDTVNhbXBsZUJ1ZmZlclJlZj4sIHVpbnQ2NF90KTsKIAogICAgIGVudW0gY2xhc3Mg
RXJyb3JDb2RlIDogaW50MzJfdCB7CiAgICAgICAgIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk1FcnJv
ckNvZGVTdGFydCA9IDIwMDAsCkBAIC05NSwyMCArMTA0LDEyMSBAQCBwdWJsaWM6CiAgICAgICAg
IFJlYWRpbmdDbHVzdGVyLAogICAgIH07CiAKLXByaXZhdGU6Ci0gICAgc3RydWN0IFRyYWNrRGF0
YSB7Ci0gICAgICAgIHdlYm06OlRyYWNrRW50cnkgdHJhY2s7Ci0gICAgICAgIHZwOV9wYXJzZXI6
OlZwOUhlYWRlclBhcnNlciBoZWFkZXJQYXJzZXI7Ci0gICAgICAgIFJldGFpblB0cjxDTUZvcm1h
dERlc2NyaXB0aW9uUmVmPiBmb3JtYXREZXNjcmlwdGlvbjsKLSAgICAgICAgUmV0YWluUHRyPENN
QmxvY2tCdWZmZXJSZWY+IGN1cnJlbnRCbG9ja0J1ZmZlcjsKLSAgICAgICAgdWludDY0X3QgY3Vy
cmVudEJsb2NrQnVmZmVyUG9zaXRpb24geyAwIH07CisgICAgZW51bSBjbGFzcyBDb2RlY1R5cGUg
OiB1aW50OF90IHsKKyAgICAgICAgVW5zdXBwb3J0ZWQsCisgICAgICAgIFZQOSwKKyAgICAgICAg
Vm9yYmlzLAorICAgICAgICBPcHVzLAorICAgIH07CisKKyAgICBjbGFzcyBUcmFja0RhdGEgewor
ICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0
YXRpYyBhdXRvIGNyZWF0ZShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0Vu
dHJ5JiB0cmFja0VudHJ5LCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIpIC0+IFVuaXF1
ZVJlZjxUcmFja0RhdGE+CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVl
UmVmPFRyYWNrRGF0YT4oY29kZWNUeXBlLCB0cmFja0VudHJ5LCBUeXBlOjpVbmtub3duLCBwYXJz
ZXIpOworICAgICAgICB9CisKKyAgICAgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgICAg
IFVua25vd24sCisgICAgICAgICAgICBBdWRpbywKKyAgICAgICAgICAgIFZpZGVvLAorICAgICAg
ICB9OworCisgICAgICAgIFRyYWNrRGF0YShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJt
OjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBUeXBlIHRyYWNrVHlwZSwgU291cmNlQnVmZmVyUGFy
c2VyV2ViTSYgcGFyc2VyKQorICAgICAgICAgICAgOiBtX2NvZGVjIHsgY29kZWNUeXBlIH0KKyAg
ICAgICAgICAgICwgbV90cmFjayB7IHdlYm06OlRyYWNrRW50cnkgeyB0cmFja0VudHJ5IH0gfQor
ICAgICAgICAgICAgLCBtX3RyYWNrVHlwZSB7IHRyYWNrVHlwZSB9CisgICAgICAgICAgICAsIG1f
cGFyc2VyIHsgcGFyc2VyIH0KKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwg
flRyYWNrRGF0YSgpID0gZGVmYXVsdDsKKworICAgICAgICBDb2RlY1R5cGUgY29kZWMoKSBjb25z
dCB7IHJldHVybiBtX2NvZGVjOyB9CisgICAgICAgIHdlYm06OlRyYWNrRW50cnkmIHRyYWNrKCkg
eyByZXR1cm4gbV90cmFjazsgfQorICAgICAgICBUeXBlIHRyYWNrVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHJhY2tUeXBlOyB9CisKKyAgICAgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRp
b25SZWY+IGZvcm1hdERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9mb3JtYXREZXNjcmlwdGlvbjsg
fQorICAgICAgICB2b2lkIHNldEZvcm1hdERlc2NyaXB0aW9uKFJldGFpblB0cjxDTUZvcm1hdERl
c2NyaXB0aW9uUmVmPiYmIGRlc2NyaXB0aW9uKSB7IG1fZm9ybWF0RGVzY3JpcHRpb24gPSBXVEZN
b3ZlKGRlc2NyaXB0aW9uKTsgfQorCisgICAgICAgIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIHBh
cnNlcigpIGNvbnN0IHsgcmV0dXJuIG1fcGFyc2VyOyB9CisgICAgICAgIAorICAgICAgICB2aXJ0
dWFsIHdlYm06OlN0YXR1cyBjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdl
Ym06OkZyYW1lTWV0YWRhdGEmLCB1aW50NjRfdCosIGNvbnN0IENNVGltZSYsIGludCkKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1
cm4gd2VibTo6U3RhdHVzKHdlYm06OlN0YXR1czo6a0ludmFsaWRFbGVtZW50SWQpOworICAgICAg
ICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBDb2RlY1R5cGUgbV9jb2RlYzsKKyAgICAgICAg
d2VibTo6VHJhY2tFbnRyeSBtX3RyYWNrOworICAgICAgICBUeXBlIG1fdHJhY2tUeXBlOworICAg
ICAgICBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gbV9mb3JtYXREZXNjcmlwdGlv
bjsKKyAgICAgICAgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgbV9wYXJzZXI7CisgICAgfTsKKwor
ICAgIGNsYXNzIFZpZGVvVHJhY2tEYXRhIDogcHVibGljIFRyYWNrRGF0YSB7CisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgYXV0byBjcmVhdGUoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qg
d2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFy
c2VyKSAtPiBVbmlxdWVSZWY8VmlkZW9UcmFja0RhdGE+CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtYWtlVW5pcXVlUmVmPFZpZGVvVHJhY2tEYXRhPihjb2RlY1R5cGUsIHRyYWNrRW50
cnksIHBhcnNlcik7CisgICAgICAgIH0KKworICAgICAgICBWaWRlb1RyYWNrRGF0YShDb2RlY1R5
cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIpCisgICAgICAgICAgICA6IFRyYWNrRGF0YShjb2RlY1R5
cGUsIHRyYWNrRW50cnksIFR5cGU6OlZpZGVvLCBwYXJzZXIpCisgICAgICAgIHsKKyAgICAgICAg
fQorCisgICAgICAgIHdlYm06OlN0YXR1cyBjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYs
IGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB1aW50NjRfdCosIGNvbnN0IENNVGltZSYsIGlu
dCkgZmluYWw7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgY3JlYXRlU2Ft
cGxlQnVmZmVyKGNvbnN0IENNVGltZSYsIGludCk7CisgICAgICAgIGNvbnN0IGNoYXIqIGxvZ0Ns
YXNzTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJWaWRlb1RyYWNrRGF0YSI7IH0KKworI2lmIEVOQUJM
RShWUDkpCisgICAgICAgIHZwOV9wYXJzZXI6OlZwOUhlYWRlclBhcnNlciBtX2hlYWRlclBhcnNl
cjsKKyAgICAgICAgUmV0YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+IG1fY3VycmVudEJsb2NrQnVm
ZmVyOworICAgICAgICB1aW50NjRfdCBtX2N1cnJlbnRCbG9ja0J1ZmZlclBvc2l0aW9uIHsgMCB9
OworI2VuZGlmCisgICAgfTsKKworICAgIGNsYXNzIEF1ZGlvVHJhY2tEYXRhIDogcHVibGljIFRy
YWNrRGF0YSB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgYXV0byBjcmVhdGUoQ29kZWNU
eXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgU291cmNl
QnVmZmVyUGFyc2VyV2ViTSYgcGFyc2VyLCBmbG9hdCBtaW5pbXVtU2FtcGxlRHVyYXRpb24pIC0+
IFVuaXF1ZVJlZjxBdWRpb1RyYWNrRGF0YT4KKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1ha2VVbmlxdWVSZWY8QXVkaW9UcmFja0RhdGE+KGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwgcGFy
c2VyLCBtaW5pbXVtU2FtcGxlRHVyYXRpb24pOworICAgICAgICB9CisKKyAgICAgICAgQXVkaW9U
cmFja0RhdGEoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJh
Y2tFbnRyeSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2VyLCBmbG9hdCBtaW5pbXVtU2Ft
cGxlRHVyYXRpb24pCisgICAgICAgICAgICA6IFRyYWNrRGF0YSB7IGNvZGVjVHlwZSwgdHJhY2tF
bnRyeSwgVHlwZTo6QXVkaW8sIHBhcnNlciB9CisgICAgICAgICAgICAsIG1fbWluaW11bVNhbXBs
ZUR1cmF0aW9uIHsgbWluaW11bVNhbXBsZUR1cmF0aW9uIH0KKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgd2VibTo6U3RhdHVzIGNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiwg
Y29uc3Qgd2VibTo6RnJhbWVNZXRhZGF0YSYsIHVpbnQ2NF90KiwgY29uc3QgQ01UaW1lJiwgaW50
KSBmaW5hbDsKKyAgICAgICAgdm9pZCBjcmVhdGVTYW1wbGVCdWZmZXIoKTsKKworICAgIHByaXZh
dGU6CisgICAgICAgIGNvbnN0IGNoYXIqIGxvZ0NsYXNzTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJB
dWRpb1RyYWNrRGF0YSI7IH0KKworICAgICAgICBDTVRpbWUgbV9zYW1wbGVQcmVzZW50YXRpb25U
aW1lOworICAgICAgICBDTVRpbWUgbV9wYWNrZXREdXJhdGlvbjsKKyAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IG1fcGFja2V0RGF0YTsKKyAgICAgICAgc2l6ZV90IG1fcGFja2V0Qnl0ZXNSZWFkIHsg
MCB9OworICAgICAgICBzaXplX3QgbV9ieXRlT2Zmc2V0IHsgMCB9OworICAgICAgICBWZWN0b3I8
QXVkaW9TdHJlYW1QYWNrZXREZXNjcmlwdGlvbj4gbV9wYWNrZXREZXNjcmlwdGlvbnM7CisKKyAg
ICAgICAgLy8gRklYTUU6IDAuNSAtIDEuMCBzZWNvbmRzIGlzIGEgYmV0dGVyIGR1cmF0aW9uIHBl
ciBzYW1wbGUgYnVmZmVyLCBidXQgdXNlIDIgc2Vjb25kcyBzbyBhdCBsZWFzdCB0aGUgZmlyc3QK
KyAgICAgICAgLy8gc2FtcGxlIGJ1ZmZlciB3aWxsIHBsYXkgdW50aWwgd2UgZml4IFNhbXBsZUN1
cnNvcjo6Y3JlYXRlU2FtcGxlQnVmZmVyIHRvIGRlYWwgd2l0aCBgZW5kQ3Vyc29yYC4KKyAgICAg
ICAgZmxvYXQgbV9taW5pbXVtU2FtcGxlRHVyYXRpb24geyAyIH07CiAgICAgfTsKLSAgICBUcmFj
a0RhdGEqIHRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKHVpbnQ2NF90KTsKIAotI2lmICFSRUxFQVNF
X0xPR19ESVNBQkxFRAogICAgIGNvbnN0IFdURjo6TG9nZ2VyKiBsb2dnZXJQdHIoKSBjb25zdCB7
IHJldHVybiBtX2xvZ2dlci5nZXQoKTsgfQogICAgIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIo
KSBjb25zdCB7IHJldHVybiBtX2xvZ0lkZW50aWZpZXI7IH0KLSNlbmRpZgorCitwcml2YXRlOgor
CisgICAgVHJhY2tEYXRhKiB0cmFja0RhdGFGb3JUcmFja051bWJlcih1aW50NjRfdCk7CiAKICAg
ICAvLyB3ZWJtOjpDYWxsYmFjawogICAgIHdlYm06OlN0YXR1cyBPbkVsZW1lbnRCZWdpbihjb25z
dCB3ZWJtOjpFbGVtZW50TWV0YWRhdGEmLCB3ZWJtOjpBY3Rpb24qKSBmaW5hbDsKQEAgLTEzNSwy
MCArMjQ1LDE4IEBAIHByaXZhdGU6CiAKICAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6Ok5vbmUg
fTsKIAotICAgIGNsYXNzIFN0cmVhbWluZ1ZlY3RvclJlYWRlcjsKICAgICBVbmlxdWVSZWY8U3Ry
ZWFtaW5nVmVjdG9yUmVhZGVyPiBtX3JlYWRlcjsKIAotICAgIFZlY3RvcjxUcmFja0RhdGE+IG1f
dHJhY2tzOworICAgIFZlY3RvcjxVbmlxdWVSZWY8VHJhY2tEYXRhPj4gbV90cmFja3M7CiAgICAg
dXNpbmcgQmxvY2tWYXJpYW50ID0gVmFyaWFudDx3ZWJtOjpCbG9jaywgd2VibTo6U2ltcGxlQmxv
Y2s+OwogICAgIE9wdGlvbmFsPEJsb2NrVmFyaWFudD4gbV9jdXJyZW50QmxvY2s7CiAgICAgT3B0
aW9uYWw8dWludDY0X3Q+IG1fcmV3aW5kVG9Qb3NpdGlvbjsKKyAgICBmbG9hdCBtX21pbmltdW1B
dWRpb1NhbXBsZUR1cmF0aW9uIHsgMiB9OwogCiAgICAgQm94PEJpbmFyeVNlbWFwaG9yZT4gbV9p
bml0aWFsaXphdGlvblNlZ21lbnRJc0hhbmRsZWRTZW1hcGhvcmU7CiAKLSNpZiAhUkVMRUFTRV9M
T0dfRElTQUJMRUQKICAgICBSZWZQdHI8Y29uc3QgV1RGOjpMb2dnZXI+IG1fbG9nZ2VyOwogICAg
IGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllciB7IG51bGxwdHIgfTsKLSNlbmRpZgogfTsKIAog
fQpAQCAtMTU3LDQgKzI2NSwxMiBAQCBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk0pCiAgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0
IFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlciYgcGFyc2VyKSB7IHJldHVybiBwYXJzZXIudHlw
ZSgpID09IFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcjo6VHlwZTo6V2ViTTsgfQogU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdl
YkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlZpZGVvVHJhY2tEYXRhKQorICAgIHN0YXRp
YyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFj
a0RhdGEmIHRyYWNrRGF0YSkgeyByZXR1cm4gdHJhY2tEYXRhLnRyYWNrVHlwZSgpID09IFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OlRyYWNrRGF0YTo6VHlwZTo6VmlkZW87IH0KK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJ
TihXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YSkKKyAgICBz
dGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6
VHJhY2tEYXRhJiB0cmFja0RhdGEpIHsgcmV0dXJuIHRyYWNrRGF0YS50cmFja1R5cGUoKSA9PSBX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGE6OlR5cGU6OkF1ZGlvOyB9
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFf
U09VUkNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvVlA5VXRpbGl0aWVzQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1ZQOVV0aWxpdGllc0NvY29hLmgKaW5kZXggMTRjNmYzYWU5ODQzMGFhZWMyYjhlODIy
YjFmYjUxYjQ3NThhYTkzMC4uNWNjZDM1Nzc5MzE0NDk5ZTc2NDA1OGYyNDI4ZDJhNmZlYjUwM2U0
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5
VXRpbGl0aWVzQ29jb2EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5oCkBAIC0yOCw2ICsyOCwxMyBAQAogI2lmIEVOQUJMRShW
UDkpICYmIFBMQVRGT1JNKENPQ09BKQogCiAjaW5jbHVkZSAiVlA5VXRpbGl0aWVzLmgiCisjaW5j
bHVkZSA8d2VibS9kb21fdHlwZXMuaD4KKwordHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlQ01G
b3JtYXREZXNjcmlwdGlvbiogQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsKKworbmFtZXNwYWNlIHZw
OV9wYXJzZXIgeworY2xhc3MgVnA5SGVhZGVyUGFyc2VyOworfQogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTQ0LDYgKzUxLDggQEAgZXh0ZXJuIGJvb2wgaXNWUDlEZWNvZGVyQXZhaWxhYmxl
KCk7CiBleHRlcm4gYm9vbCBpc1ZQQ29kZWNDb25maWd1cmF0aW9uUmVjb3JkU3VwcG9ydGVkKFZQ
Q29kZWNDb25maWd1cmF0aW9uUmVjb3JkJik7CiBleHRlcm4gYm9vbCB2YWxpZGF0ZVZQUGFyYW1l
dGVycyhWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCYsIE1lZGlhQ2FwYWJpbGl0aWVzSW5mbyYs
IGNvbnN0IFZpZGVvQ29uZmlndXJhdGlvbiYpOwogCitSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlw
dGlvblJlZj4gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5SGVhZGVyUGFyc2VyKGNvbnN0
IHZwOV9wYXJzZXI6OlZwOUhlYWRlclBhcnNlciYsIGNvbnN0IHdlYm06OkVsZW1lbnQ8d2VibTo6
Q29sb3VyPiYpOworCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbQppbmRleCBjODFl
OTdhYTNlNDc3ZDdjN2I4OWMxNjE5YTlmM2ZmMmYyYmVjMGExLi40MTIyNTBmOTc0N2E4OTkyNmFl
ZTViOTI4MWYxYTQxM2JjMmU4YzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbQpAQCAtMjMsOCAr
MjMsOCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJWUDlVdGlsaXRpZXNDb2NvYS5oIgorI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJWUDlVdGlsaXRpZXNDb2NvYS5oIgogCiAjaWYgRU5BQkxFKFZQ
OSkgJiYgUExBVEZPUk0oQ09DT0EpCiAKQEAgLTM2LDEzICszNiwyMCBAQAogI2ltcG9ydCAiU3lz
dGVtQmF0dGVyeS5oIgogI2ltcG9ydCAiVmlkZW9Db25maWd1cmF0aW9uLmgiCiAjaW1wb3J0IDxD
b3JlTWVkaWEvQ01Gb3JtYXREZXNjcmlwdGlvbi5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUv
RGF0YVZpZXcuaD4KKyNpbXBvcnQgPGNvbW1vbi92cDlfaGVhZGVyX3BhcnNlci5oPgogI2ltcG9y
dCA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgogCiAjaW1wb3J0IDxwYWwv
Y29jb2EvQVZGb3VuZGF0aW9uU29mdExpbmsuaD4KKyNpbXBvcnQgPHBhbC9jZi9Db3JlTWVkaWFT
b2Z0TGluay5oPgorI2ltcG9ydCAiQ29yZVZpZGVvU29mdExpbmsuaCIKICNpbXBvcnQgIlZpZGVv
VG9vbGJveFNvZnRMaW5rLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordXNpbmcgbmFtZXNw
YWNlIFBBTDsKK3VzaW5nIG5hbWVzcGFjZSB3ZWJtOworCiBzdGF0aWMgYm9vbCBoYXJkd2FyZVZQ
OURlY29kZXJEaXNhYmxlZEZvclRlc3RpbmcgeyBmYWxzZSB9OwogCiBzdHJ1Y3QgT3ZlcnJpZGVT
Y3JlZW5EYXRhIHsKQEAgLTI1Nyw2ICsyNjQsMjg4IEBAIGJvb2wgdmFsaWRhdGVWUFBhcmFtZXRl
cnMoVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQmIGNvZGVjQ29uZmlndXJhdGlvbiwgTWVkaWFD
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyB1aW50OF90IGNvbnZlcnRUb0NvbG9yUHJp
bWFyaWVzKGNvbnN0IFByaW1hcmllcyYgY29lZmZpY2llbnRzKQoreworICAgIHN3aXRjaCAoY29l
ZmZpY2llbnRzKSB7CisgICAgY2FzZSBQcmltYXJpZXM6OmtCdDcwOToKKyAgICAgICAgcmV0dXJu
IFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF83MDlfNjsKKyAgICBjYXNlIFByaW1h
cmllczo6a1Vuc3BlY2lmaWVkOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQ
cmltYXJpZXM6OlVuc3BlY2lmaWVkOworICAgIGNhc2UgUHJpbWFyaWVzOjprQnQ0NzBNOgorICAg
ICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzQ3MF82X007Cisg
ICAgY2FzZSBQcmltYXJpZXM6OmtCdDQ3MEJnOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0
aW9uQ29sb3JQcmltYXJpZXM6OkJUXzQ3MF83X0JHOworICAgIGNhc2UgUHJpbWFyaWVzOjprU21w
dGUxNzBNOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJU
XzYwMV83OworICAgIGNhc2UgUHJpbWFyaWVzOjprU21wdGUyNDBNOgorICAgICAgICByZXR1cm4g
VlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NUXzI0MDsKKyAgICBjYXNlIFBy
aW1hcmllczo6a0ZpbG06CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1h
cmllczo6RmlsbTsKKyAgICBjYXNlIFByaW1hcmllczo6a0J0MjAyMDoKKyAgICAgICAgcmV0dXJu
IFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF8yMDIwX05vbmNvbnN0YW50X0x1bWlu
YW5jZTsKKyAgICBjYXNlIFByaW1hcmllczo6a1NtcHRlU3Q0MjgxOgorICAgICAgICByZXR1cm4g
VlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NUXzQyOF8xOworICAgIGNhc2Ug
UHJpbWFyaWVzOjprU21wdGVScDQzMToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNv
bG9yUHJpbWFyaWVzOjpTTVBURV9SUF80MzFfMjsKKyAgICBjYXNlIFByaW1hcmllczo6a1NtcHRl
RWc0MzI6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01Q
VEVfRUdfNDMyXzE7CisgICAgY2FzZSBQcmltYXJpZXM6OmtKZWRlY1AyMlBob3NwaG9yczoKKyAg
ICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpFQlVfVGVjaF8zMjEz
X0U7CisgICAgfQorfQorCitzdGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRvQ01Db2xvclByaW1h
cmllcyh1aW50OF90IHByaW1hcmllcykKK3sKKyAgICBzd2l0Y2ggKHByaW1hcmllcykgeworICAg
IGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzcwOV82OgorICAgICAgICBy
ZXR1cm4ga0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19JVFVfUl83MDlfMjsKKyAgICBjYXNl
IFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpFQlVfVGVjaF8zMjEzX0U6CisgICAgICAg
IHJldHVybiBrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzX0VCVV8zMjEzOworICAgIGNhc2Ug
VlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzYwMV83OgorICAgIGNhc2UgVlBDb25m
aWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1NUXzI0MDoKKyAgICAgICAgcmV0dXJuIGtD
VkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfU01QVEVfQzsKKyAgICBjYXNlIFZQQ29uZmlndXJh
dGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9SUF80MzFfMjoKKyAgICAgICAgcmV0dXJuIGtDTUZv
cm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJpZXNfRENJX1AzOworICAgIGNhc2UgVlBDb25maWd1
cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX0VHXzQzMl8xOgorICAgICAgICByZXR1cm4ga0NN
Rm9ybWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19QM19ENjU7CisgICAgY2FzZSBWUENvbmZp
Z3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U6Cisg
ICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX0lUVV9SXzIw
MjA7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyB1aW50OF90IGNv
bnZlcnRUb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKGNvbnN0IFRyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzJiBjaGFyYWN0ZXJpc3RpY3MpCit7CisgICAgc3dpdGNoIChjaGFyYWN0ZXJpc3RpY3MpIHsK
KyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprQnQ3MDk6CisgICAgICAgIHJldHVy
biBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfNzA5XzY7CisgICAg
Y2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a1Vuc3BlY2lmaWVkOgorICAgICAgICByZXR1
cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlVuc3BlY2lmaWVkOwor
ICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtHYW1tYTIyY3VydmU6CisgICAgICAg
IHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfNDcwXzZf
TTsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprR2FtbWEyOGN1cnZlOgorICAg
ICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzQ3
MF83X0JHOworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtTbXB0ZTE3ME06Cisg
ICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRf
NjAxXzc7CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a1NtcHRlMjQwTToKKyAg
ICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBU
RV9TVF8yNDA7CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0xpbmVhcjoKKyAg
ICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMaW5l
YXI7CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0xvZzoKKyAgICAgICAgcmV0
dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMb2dyaXRobWljOwor
ICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtMb2dTcXJ0OgorICAgICAgICByZXR1
cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxvZ3JpdGhtaWNfU3Fy
dDsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprSWVjNjE5NjYyNDoKKyAgICAg
ICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJRUNfNjE5
NjZfMl80OworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtCdDEzNjFFeHRlbmRl
ZENvbG91ckdhbXV0OgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OkJUXzEzNjFfMDsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
OjprSWVjNjE5NjYyMToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzOjpJRUNfNjE5NjZfMl8xOworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OmsxMEJpdEJ0MjAyMDoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMDIwXzEwYml0OworICAgIGNhc2UgVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OmsxMkJpdEJ0MjAyMDoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlv
blRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMDIwXzEyYml0OworICAgIGNhc2UgVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OmtTbXB0ZVN0MjA4NDoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmln
dXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF8yMDg0OworICAgIGNhc2Ug
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtTbXB0ZVN0NDI4MToKKyAgICAgICAgcmV0dXJuIFZQ
Q29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF80MjhfMTsKKyAg
ICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprQXJpYlN0ZEI2N0hsZzoKKyAgICAgICAg
cmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMTAwX0hM
RzsKKyAgICB9Cit9CisKK3N0YXRpYyBDRlN0cmluZ1JlZiBjb252ZXJ0VG9DTVRyYW5zZmVyRnVu
Y3Rpb24odWludDhfdCBjaGFyYWN0ZXJpc3RpY3MpCit7CisgICAgc3dpdGNoIChjaGFyYWN0ZXJp
c3RpY3MpIHsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
OjpCVF83MDlfNjoKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlv
bl9JVFVfUl83MDlfMjsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVy
aXN0aWNzOjpTTVBURV9TVF8yNDA6CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlclRyYW5z
ZmVyRnVuY3Rpb25fU01QVEVfMjQwTV8xOTk1OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzIwODQ6CisgICAgICAgIHJldHVybiBrQ01G
b3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fU01QVEVfU1RfMjA4NF9QUTsKKyAgICBj
YXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMDIwXzEwYml0
OgorICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIw
MjBfMTJiaXQ6CisgICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVu
Y3Rpb25fSVRVX1JfMjAyMDsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjpTTVBURV9TVF80MjhfMToKKyAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2Ny
aXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9TTVBURV9TVF80MjhfMTsKKyAgICBjYXNlIFZQQ29uZmln
dXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMTAwX0hMRzoKKyAgICAgICAgcmV0
dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl8yMTAwX0hMRzsK
KyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJRUNfNjE5
NjZfMl8xOgorICAgICAgICByZXR1cm4gY2FuTG9hZF9Db3JlTWVkaWFfa0NNRm9ybWF0RGVzY3Jp
cHRpb25UcmFuc2ZlckZ1bmN0aW9uX3NSR0IoKSA/IFBBTDo6Z2V0X0NvcmVNZWRpYV9rQ01Gb3Jt
YXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fc1JHQigpIDogbnVsbHB0cjsKKyAgICBjYXNl
IFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMaW5lYXI6CisgICAgICAg
IHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fTGluZWFyOworICAg
IH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCitzdGF0aWMgdWludDhfdCBjb252ZXJ0VG9N
YXRyaXhDb2VmZmljaWVudHMoY29uc3QgTWF0cml4Q29lZmZpY2llbnRzJiBjb2VmZmljaWVudHMp
Cit7CisgICAgc3dpdGNoIChjb2VmZmljaWVudHMpIHsKKyAgICBjYXNlIE1hdHJpeENvZWZmaWNp
ZW50czo6a1JnYjoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNp
ZW50czo6SWRlbnRpdHk7CisgICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtCdDcwOToKKyAg
ICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfNzA5XzY7
CisgICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtVbnNwZWNpZmllZDoKKyAgICAgICAgcmV0
dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6VW5zcGVjaWZpZWQ7CisgICAg
Y2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtGY2M6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3Vy
YXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkZDQzsKKyAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50
czo6a0J0NDcwQmc6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmlj
aWVudHM6OkJUXzQ3MF83X0JHOworICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprU21wdGUx
NzBNOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpC
VF82MDFfNzsKKyAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a1NtcHRlMjQwTToKKyAgICAg
ICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6U01QVEVfU1RfMjQw
OworICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprWUNnQ286CisgICAgICAgIHJldHVybiBW
UENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OllDZ0NvOworICAgIGNhc2UgTWF0cml4
Q29lZmZpY2llbnRzOjprQnQyMDIwTm9uY29uc3RhbnRMdW1pbmFuY2U6CisgICAgICAgIHJldHVy
biBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzIwMjBfTm9uY29uc3RhbnRf
THVtaW5hbmNlOworICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprQnQyMDIwQ29uc3RhbnRM
dW1pbmFuY2U6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVu
dHM6OkJUXzIwMjBfQ29uc3RhbnRfTHVtaW5hbmNlOworICAgIH0KK30KKworc3RhdGljIENGU3Ry
aW5nUmVmIGNvbnZlcnRUb0NNWUNiQ1JNYXRyaXgodWludDhfdCBjb2VmZmljaWVudHMpCit7Cisg
ICAgc3dpdGNoIChjb2VmZmljaWVudHMpIHsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJp
eENvZWZmaWNpZW50czo6QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U6CisgICAgICAgIHJl
dHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvbllDYkNyTWF0cml4X0lUVV9SXzIwMjA7CisgICAgY2Fz
ZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzQ3MF83X0JHOgorICAgIGNh
c2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF82MDFfNzoKKyAgICAgICAg
cmV0dXJuIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRVX1JfNjAxXzQ7CisgICAgY2FzZSBW
UENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzcwOV82OgorICAgICAgICByZXR1
cm4ga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83MDlfMjsKKyAgICBjYXNlIFZQQ29u
ZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6U01QVEVfU1RfMjQwOgorICAgICAgICByZXR1
cm4ga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9TTVBURV8yNDBNXzE5OTU7CisgICAgfQorCisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyB1aW50OF90IGNvbnZlcnRTdWJzYW1wbGlu
Z1hZVG9DaHJvbWFTdWJzYW1wbGluZyh1aW50NjRfdCB4LCB1aW50NjRfdCB5KQoreworICAgIGlm
ICh4ICYgeSkKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNocm9tYVN1YnNhbXBsaW5n
OjpTdWJzYW1wbGluZ180MjBfQ29sb2NhdGVkOworICAgIGlmICh4ICYgIXkpCisgICAgICAgIHJl
dHVybiBWUENvbmZpZ3VyYXRpb25DaHJvbWFTdWJzYW1wbGluZzo6U3Vic2FtcGxpbmdfNDIyOwor
ICAgIGlmICgheCAmICF5KQorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ2hyb21hU3Vi
c2FtcGxpbmc6OlN1YnNhbXBsaW5nXzQ0NDsKKyAgICAvLyBUaGlzIGluZGljYXRlcyA0OjQ6MCBz
dWJzYW1wbGluZywgd2hpY2ggaXMgbm90IGV4cHJlc3NhYmxlIGluIHRoZSAndnBjQycgYm94LiBE
ZWZhdWx0IHRvIDQ6MjowLgorICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25DaHJvbWFTdWJzYW1w
bGluZzo6U3Vic2FtcGxpbmdfNDIwX0NvbG9jYXRlZDsKK30KKworUmV0YWluUHRyPENNRm9ybWF0
RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOUhlYWRlclBhcnNl
cihjb25zdCB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXImIHBhcnNlciwgY29uc3Qgd2VibTo6
RWxlbWVudDxDb2xvdXI+JiBjb2xvcikKK3sKKyAgICAvLyBSZWY6ICJWUCBDb2RlYyBJU08gTWVk
aWEgRmlsZSBGb3JtYXQgQmluZGluZywgdjEuMCwgMjAxNy0wMy0zMSIKKyAgICAvLyA8aHR0cHM6
Ly93d3cud2VibXByb2plY3Qub3JnL3ZwOS9tcDQvPgorICAgIC8vCisgICAgLy8gY2xhc3MgVlBD
b2RlY0NvbmZpZ3VyYXRpb25Cb3ggZXh0ZW5kcyBGdWxsQm94KCd2cGNDJywgdmVyc2lvbiA9IDEs
IDApCisgICAgLy8geworICAgIC8vICAgICBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCgpIHZw
Y0NvbmZpZzsKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBhbGlnbmVkICg4KSBjbGFzcyBWUENv
ZGVjQ29uZmlndXJhdGlvblJlY29yZCB7CisgICAgLy8gICAgIHVuc2lnbmVkIGludCAoOCkgICAg
IHByb2ZpbGU7CisgICAgLy8gICAgIHVuc2lnbmVkIGludCAoOCkgICAgIGxldmVsOworICAgIC8v
ICAgICB1bnNpZ25lZCBpbnQgKDQpICAgICBiaXREZXB0aDsKKyAgICAvLyAgICAgdW5zaWduZWQg
aW50ICgzKSAgICAgY2hyb21hU3Vic2FtcGxpbmc7CisgICAgLy8gICAgIHVuc2lnbmVkIGludCAo
MSkgICAgIHZpZGVvRnVsbFJhbmdlRmxhZzsKKyAgICAvLyAgICAgdW5zaWduZWQgaW50ICg4KSAg
ICAgY29sb3VyUHJpbWFyaWVzOworICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDgpICAgICB0cmFu
c2ZlckNoYXJhY3RlcmlzdGljczsKKyAgICAvLyAgICAgdW5zaWduZWQgaW50ICg4KSAgICAgbWF0
cml4Q29lZmZpY2llbnRzOworICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDE2KSAgICBjb2RlY0lu
dGlhbGl6YXRpb25EYXRhU2l6ZTsKKyAgICAvLyAgICAgdW5zaWduZWQgaW50ICg4KVtdICAgY29k
ZWNJbnRpYWxpemF0aW9uRGF0YTsKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBjb2RlY0ludGlh
bGl6YXRpb25EYXRhU2l6ZeKAi0ZvciBWUDggYW5kIFZQOSB0aGlzIGZpZWxkIG11c3QgYmUgMC4K
KyAgICAvLyBjb2RlY0ludGlhbGl6YXRpb25EYXRh4oCLYmluYXJ5IGNvZGVjIGluaXRpYWxpemF0
aW9uIGRhdGEuIE5vdCB1c2VkIGZvciBWUDggYW5kIFZQOS4KKyAgICAvLworICAgIC8vIEZJWE1F
OiBDb252ZXJ0IGV4aXN0aW5nIHN0cnVjdCB0byBhbiBJU09Cb3ggYW5kIHJlcGxhY2UgdGhlIHdy
aXRpbmcgY29kZSBiZWxvdworICAgIC8vIHdpdGggYSBzdWJjbGFzcyBvZiBJU09GdWxsQm94Lgor
CisgICAgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQgcmVjb3JkOworCisgICAgcmVjb3JkLnBy
b2ZpbGUgPSBwYXJzZXIucHJvZmlsZSgpOworICAgIC8vIENvcmVNZWRpYSBkb2VzIG5hdCBjYXJl
IGFib3V0IHRoZSBWUDkgY29kZWMgbGV2ZWw7IGhhcmQtY29kZSB0byBMZXZlbCAxLjAgaGVyZToK
KyAgICByZWNvcmQubGV2ZWwgPSAxMDsKKyAgICByZWNvcmQuYml0RGVwdGggPSBwYXJzZXIuYml0
X2RlcHRoKCk7CisgICAgcmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxhZyA9IHBhcnNlci5jb2xvcl9y
YW5nZSgpID8gVlBDb25maWd1cmF0aW9uUmFuZ2U6OkZ1bGxSYW5nZSA6IFZQQ29uZmlndXJhdGlv
blJhbmdlOjpWaWRlb1JhbmdlOworICAgIHJlY29yZC5jaHJvbWFTdWJzYW1wbGluZyA9IGNvbnZl
cnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJzYW1wbGluZyhwYXJzZXIuc3Vic2FtcGxpbmdfeCgp
LCBwYXJzZXIuc3Vic2FtcGxpbmdfeSgpKTsKKyAgICByZWNvcmQuY29sb3JQcmltYXJpZXMgPSBW
UENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6VW5zcGVjaWZpZWQ7CisgICAgcmVjb3JkLnRy
YW5zZmVyQ2hhcmFjdGVyaXN0aWNzID0gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3M6OlVuc3BlY2lmaWVkOworICAgIHJlY29yZC5tYXRyaXhDb2VmZmljaWVudHMgPSBWUENv
bmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OlVuc3BlY2lmaWVkOworCisgICAgLy8gQ29u
dGFpbmVyIGNvbG9yIHZhbHVlcyBjYW4gb3ZlcnJpZGUgcGVyLXNhbXBsZSBvbmVzOgorICAgIGlm
IChjb2xvci5pc19wcmVzZW50KCkpIHsKKyAgICAgICAgYXV0byYgY29sb3JWYWx1ZSA9IGNvbG9y
LnZhbHVlKCk7CisgICAgICAgIGlmIChjb2xvclZhbHVlLmNocm9tYV9zdWJzYW1wbGluZ194Lmlz
X3ByZXNlbnQoKSAmJiBjb2xvclZhbHVlLmNocm9tYV9zdWJzYW1wbGluZ195LmlzX3ByZXNlbnQo
KSkKKyAgICAgICAgICAgIHJlY29yZC5jaHJvbWFTdWJzYW1wbGluZyA9IGNvbnZlcnRTdWJzYW1w
bGluZ1hZVG9DaHJvbWFTdWJzYW1wbGluZyhjb2xvclZhbHVlLmNocm9tYV9zdWJzYW1wbGluZ194
LnZhbHVlKCksIGNvbG9yVmFsdWUuY2hyb21hX3N1YnNhbXBsaW5nX3kudmFsdWUoKSk7CisgICAg
ICAgIGlmIChjb2xvclZhbHVlLnJhbmdlLmlzX3ByZXNlbnQoKSAmJiBjb2xvclZhbHVlLnJhbmdl
LnZhbHVlKCkgIT0gUmFuZ2U6OmtVbnNwZWNpZmllZCkKKyAgICAgICAgICAgIHJlY29yZC52aWRl
b0Z1bGxSYW5nZUZsYWcgPSBjb2xvclZhbHVlLnJhbmdlLnZhbHVlKCkgPT0gUmFuZ2U6OmtGdWxs
ID8gVlBDb25maWd1cmF0aW9uUmFuZ2U6OkZ1bGxSYW5nZSA6IFZQQ29uZmlndXJhdGlvblJhbmdl
OjpWaWRlb1JhbmdlOworICAgICAgICBpZiAoY29sb3JWYWx1ZS5iaXRzX3Blcl9jaGFubmVsLmlz
X3ByZXNlbnQoKSkKKyAgICAgICAgICAgIHJlY29yZC5iaXREZXB0aCA9IGNvbG9yVmFsdWUuYml0
c19wZXJfY2hhbm5lbC52YWx1ZSgpOworICAgICAgICBpZiAoY29sb3JWYWx1ZS50cmFuc2Zlcl9j
aGFyYWN0ZXJpc3RpY3MuaXNfcHJlc2VudCgpKQorICAgICAgICAgICAgcmVjb3JkLnRyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzID0gY29udmVydFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MoY29sb3JW
YWx1ZS50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MudmFsdWUoKSk7CisgICAgICAgIGlmIChjb2xv
clZhbHVlLm1hdHJpeF9jb2VmZmljaWVudHMuaXNfcHJlc2VudCgpKQorICAgICAgICAgICAgcmVj
b3JkLm1hdHJpeENvZWZmaWNpZW50cyA9IGNvbnZlcnRUb01hdHJpeENvZWZmaWNpZW50cyhjb2xv
clZhbHVlLm1hdHJpeF9jb2VmZmljaWVudHMudmFsdWUoKSk7CisgICAgICAgIGlmIChjb2xvclZh
bHVlLnByaW1hcmllcy5pc19wcmVzZW50KCkpCisgICAgICAgICAgICByZWNvcmQuY29sb3JQcmlt
YXJpZXMgPSBjb252ZXJ0VG9Db2xvclByaW1hcmllcyhjb2xvclZhbHVlLnByaW1hcmllcy52YWx1
ZSgpKTsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgc2l6ZV90IFZQQ29kZWNDb25maWd1cmF0aW9u
Q29udGVudHNTaXplID0gMTI7CisKKyAgICB1aW50MzJfdCB2ZXJzaW9uQW5kRmxhZ3MgPSAxIDw8
IDI0OworICAgIHVpbnQ4X3QgYml0RGVwdGhDaHJvbWFBbmRSYW5nZSA9ICgweEYgJiByZWNvcmQu
Yml0RGVwdGgpIDw8IDQgfCAoMHg3ICYgcmVjb3JkLmNocm9tYVN1YnNhbXBsaW5nKSA8PCAxIHwg
KDB4MSAmIHJlY29yZC52aWRlb0Z1bGxSYW5nZUZsYWcpOworICAgIHVpbnQxNl90IGNvZGVjSW50
aWFsaXphdGlvbkRhdGFTaXplID0gMDsKKworICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZpZXc6
OmNyZWF0ZShBcnJheUJ1ZmZlcjo6Y3JlYXRlKFZQQ29kZWNDb25maWd1cmF0aW9uQ29udGVudHNT
aXplLCAxKSwgMCwgVlBDb2RlY0NvbmZpZ3VyYXRpb25Db250ZW50c1NpemUpOworICAgIHZpZXct
PnNldCgwLCB2ZXJzaW9uQW5kRmxhZ3MsIGZhbHNlKTsKKyAgICB2aWV3LT5zZXQoNCwgcmVjb3Jk
LnByb2ZpbGUsIGZhbHNlKTsKKyAgICB2aWV3LT5zZXQoNSwgcmVjb3JkLmxldmVsLCBmYWxzZSk7
CisgICAgdmlldy0+c2V0KDYsIGJpdERlcHRoQ2hyb21hQW5kUmFuZ2UsIGZhbHNlKTsKKyAgICB2
aWV3LT5zZXQoNywgcmVjb3JkLmNvbG9yUHJpbWFyaWVzLCBmYWxzZSk7CisgICAgdmlldy0+c2V0
KDgsIHJlY29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGljcywgZmFsc2UpOworICAgIHZpZXctPnNl
dCg5LCByZWNvcmQubWF0cml4Q29lZmZpY2llbnRzLCBmYWxzZSk7CisgICAgdmlldy0+c2V0KDEw
LCBjb2RlY0ludGlhbGl6YXRpb25EYXRhU2l6ZSwgZmFsc2UpOworCisgICAgYXV0byBkYXRhID0g
YWRvcHRDRihDRkRhdGFDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKGNvbnN0IFVJbnQ4ICop
dmlldy0+ZGF0YSgpLCB2aWV3LT5ieXRlTGVuZ3RoKCkpKTsKKworICAgIENGVHlwZVJlZiBjb25m
aWd1cmF0aW9uS2V5c1tdID0geyBDRlNUUigidnBjQyIpIH07CisgICAgQ0ZUeXBlUmVmIGNvbmZp
Z3VyYXRpb25WYWx1ZXNbXSA9IHsgZGF0YS5nZXQoKSB9OworICAgIGF1dG8gY29uZmlndXJhdGlv
bkRpY3QgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBj
b25maWd1cmF0aW9uS2V5cywgY29uZmlndXJhdGlvblZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChj
b25maWd1cmF0aW9uS2V5cyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5
cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKworICAgIFZlY3RvcjxDRlR5cGVSZWY+IGV4
dGVuc2lvbnNLZXlzIHsga0NNRm9ybWF0RGVzY3JpcHRpb25FeHRlbnNpb25fU2FtcGxlRGVzY3Jp
cHRpb25FeHRlbnNpb25BdG9tcyB9OworICAgIFZlY3RvcjxDRlR5cGVSZWY+IGV4dGVuc2lvbnNW
YWx1ZXMgPSB7IGNvbmZpZ3VyYXRpb25EaWN0LmdldCgpIH07CisKKyAgICBpZiAocmVjb3JkLnZp
ZGVvRnVsbFJhbmdlRmxhZyA9PSBWUENvbmZpZ3VyYXRpb25SYW5nZTo6RnVsbFJhbmdlKSB7Cisg
ICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ01Gb3JtYXREZXNjcmlwdGlvbkV4dGVuc2lv
bl9GdWxsUmFuZ2VWaWRlbyk7CisgICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGtDRkJv
b2xlYW5UcnVlKTsKKyAgICB9CisKKyAgICBpZiAoYXV0byBjbUNvbG9yUHJpbWFyaWVzID0gY29u
dmVydFRvQ01Db2xvclByaW1hcmllcyhyZWNvcmQuY29sb3JQcmltYXJpZXMpKSB7CisgICAgICAg
IGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzS2V5KTsK
KyAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21Db2xvclByaW1hcmllcyk7CisgICAg
fQorCisgICAgaWYgKGF1dG8gY21UcmFuc2ZlckZ1bmN0aW9uID0gY29udmVydFRvQ01UcmFuc2Zl
ckZ1bmN0aW9uKHJlY29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGljcykpIHsKKyAgICAgICAgZXh0
ZW5zaW9uc0tleXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbktleSk7Cisg
ICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGNtVHJhbnNmZXJGdW5jdGlvbik7CisgICAg
fQorCisgICAgaWYgKGF1dG8gY21NYXRyaXggPSBjb252ZXJ0VG9DTVlDYkNSTWF0cml4KHJlY29y
ZC5tYXRyaXhDb2VmZmljaWVudHMpKSB7CisgICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChr
Q1ZJbWFnZUJ1ZmZlcllDYkNyTWF0cml4S2V5KTsKKyAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5h
cHBlbmQoY21NYXRyaXgpOworICAgIH0KKworICAgIGF1dG8gZXh0ZW5zaW9ucyA9IGFkb3B0Q0Yo
Q0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGV4dGVuc2lvbnNLZXlzLmRh
dGEoKSwgZXh0ZW5zaW9uc1ZhbHVlcy5kYXRhKCksIGV4dGVuc2lvbnNLZXlzLnNpemUoKSwgJmtD
RlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxC
YWNrcykpOworCisgICAgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0
aW9uID0gbnVsbHB0cjsKKyAgICBpZiAobm9FcnIgIT0gQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9u
Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDTVZpZGVvQ29kZWNUeXBlX1ZQOSwgcGFyc2Vy
LndpZHRoKCksIHBhcnNlci5oZWlnaHQoKSwgZXh0ZW5zaW9ucy5nZXQoKSwgJmZvcm1hdERlc2Ny
aXB0aW9uKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGFkb3B0Q0YoZm9y
bWF0RGVzY3JpcHRpb24pOworfQorCiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRp
b1V0aWxpdGllc0NvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIxZjYzN2MwMjRmOGM1ODdl
YWNiM2I3ZWEwMTc3MjYzY2E4NzgzNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oCkBAIC0w
LDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKENP
Q09BKQorCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCitjbGFzcyBBdWRpb1N0cmVhbURl
c2NyaXB0aW9uOwordHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlv
biogQ01Gb3JtYXREZXNjcmlwdGlvblJlZjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29s
IGlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpOworUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRp
b25SZWY+IGNyZWF0ZVZvcmJpc0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24oc2l6ZV90LCBjb25zdCB2
b2lkKik7CisKK2Jvb2wgaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpOworUmV0YWluUHRyPENNRm9y
bWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZU9wdXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKHNpemVf
dCwgY29uc3Qgdm9pZCopOworCit9CisKKyNlbmRpZiAvLyAmJiBQTEFURk9STShDT0NPQSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRp
b1V0aWxpdGllc0NvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjI3M2RjZTE1N2RjZWY2
MmNmNWZmYTc2OTIyOTRjOTFlYzFhNmNmZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1tCkBA
IC0wLDAgKzEsMjA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0
ICJXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oIgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisKKyNp
bXBvcnQgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgor
I2ltcG9ydCAiTWVkaWFVdGlsaXRpZXMuaCIKKyNpbXBvcnQgPEF1ZGlvVG9vbGJveC9BdWRpb0Nv
bXBvbmVudC5oPgorI2ltcG9ydCA8QXVkaW9Ub29sYm94L0F1ZGlvRm9ybWF0Lmg+CisjaW1wb3J0
IDxDb3JlTWVkaWEvQ01Gb3JtYXREZXNjcmlwdGlvbi5oPgorI2ltcG9ydCA8ZGxmY24uaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgRU5BQkxFKFZPUkJJUykgfHwgRU5BQkxFKE9QVVMp
CitzdGF0aWMgYm9vbCByZWdpc3RlckRlY29kZXJGYWN0b3J5KGNvbnN0IGNoYXIqIGRlY29kZXJO
YW1lLCBPU1R5cGUgZGVjb2RlclR5cGUpCit7CisgICAgY29uc3RleHByIGNoYXIgYXVkaW9Db21w
b25lbnRzRHlsaWJbXSA9ICIvU3lzdGVtL0xpYnJhcnkvQ29tcG9uZW50cy9BdWRpb0NvZGVjcy5j
b21wb25lbnQvQ29udGVudHMvTWFjT1MvQXVkaW9Db2RlY3MiOworICAgIHZvaWQgKmhhbmRsZSA9
IGRsb3BlbihhdWRpb0NvbXBvbmVudHNEeWxpYiwgUlRMRF9MQVpZIHwgUlRMRF9MT0NBTCk7Cisg
ICAgaWYgKCFoYW5kbGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEF1ZGlvQ29tcG9u
ZW50RmFjdG9yeUZ1bmN0aW9uIGRlY29kZXJGYWN0b3J5ID0gcmVpbnRlcnByZXRfY2FzdDxBdWRp
b0NvbXBvbmVudEZhY3RvcnlGdW5jdGlvbj4oZGxzeW0oaGFuZGxlLCBkZWNvZGVyTmFtZSkpOwor
ICAgIGlmICghZGVjb2RlckZhY3RvcnkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEF1
ZGlvQ29tcG9uZW50RGVzY3JpcHRpb24gZGVzYyB7ICdhZGVjJywgZGVjb2RlclR5cGUsICdhcHBs
Jywga0F1ZGlvQ29tcG9uZW50RmxhZ19TYW5kYm94U2FmZSwgMCB9OworICAgIGlmICghQXVkaW9D
b21wb25lbnRSZWdpc3RlcigmZGVzYywgQ0ZTVFIoIiIpLCAwLCBkZWNvZGVyRmFjdG9yeSkpIHsK
KyAgICAgICAgZGxjbG9zZShoYW5kbGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlw
dGlvblJlZj4gY3JlYXRlQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkZvckZvcm1hdChPU1R5cGUgZm9y
bWF0SUQsIFZlY3Rvcjx1aW50OF90PiBtYWdpY0Nvb2tpZSkKK3sKKyAgICBBdWRpb1N0cmVhbUJh
c2ljRGVzY3JpcHRpb24gYXNiZCB7IH07CisgICAgYXNiZC5tRm9ybWF0SUQgPSBmb3JtYXRJRDsK
KyAgICB1aW50MzJfdCBzaXplID0gc2l6ZW9mKGFzYmQpOworICAgIGF1dG8gZXJyb3IgPSBBdWRp
b0Zvcm1hdEdldFByb3BlcnR5KGtBdWRpb0Zvcm1hdFByb3BlcnR5X0Zvcm1hdEluZm8sIG1hZ2lj
Q29va2llLnNpemUoKSwgbWFnaWNDb29raWUuZGF0YSgpLCAmc2l6ZSwgJmFzYmQpOworICAgIGlm
IChlcnJvcikgeworICAgICAgICBSRUxFQVNFX0xPR19FUlJPUihNZWRpYSwgImNyZWF0ZUF1ZGlv
Rm9ybWF0RGVzY3JpcHRpb25Gb3JGb3JtYXQgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwg
ZXJyb3IsIChjaGFyICopJmVycm9yKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgcmV0dXJuIGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24oQ0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uKGFzYmQpLCBtYWdpY0Nvb2tpZS5zaXplKCksIG1hZ2ljQ29va2llLmRhdGEoKSk7
Cit9CisjZW5kaWYgLy8gRU5BQkxFKFZPUkJJUykgfHwgRU5BQkxFKE9QVVMpCisKKyNpZiBFTkFC
TEUoT1BVUykKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gY29va2llRnJvbU9wdXNDb2RlY1ByaXZh
dGUoc2l6ZV90LCBjb25zdCB2b2lkKikKK3sKKyAgICByZXR1cm4geyB9OworfQorI2VuZGlmCisK
K2Jvb2wgaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpCit7CisgICAgc3RhdGljIGJvb2wgYXZhaWxh
YmxlOworCisjaWYgRU5BQkxFKE9QVVMpICYmIFBMQVRGT1JNKE1BQykKKyAgICBzdGF0aWMgZGlz
cGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57
CisgICAgICAgIGF2YWlsYWJsZSA9IHJlZ2lzdGVyRGVjb2RlckZhY3RvcnkoIkFDT3B1c0RlY29k
ZXJGYWN0b3J5IiwgJ29wdXMnKTsKKyAgICB9KTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGF2YWls
YWJsZTsKK30KKworUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZU9wdXNB
dWRpb0Zvcm1hdERlc2NyaXB0aW9uKHNpemVfdCBwcml2YXRlRGF0YVNpemUsIGNvbnN0IHZvaWQq
IHByaXZhdGVEYXRhKQoreworI2lmIEVOQUJMRShPUFVTKQorICAgIGlmICghaXNPcHVzRGVjb2Rl
ckF2YWlsYWJsZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29va2ll
RGF0YSA9IGNvb2tpZUZyb21PcHVzQ29kZWNQcml2YXRlKHByaXZhdGVEYXRhU2l6ZSwgcHJpdmF0
ZURhdGEpOworICAgIGlmICghY29va2llRGF0YS5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuIGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25Gb3JGb3JtYXQo
J29wdXMnLCBjb29raWVEYXRhKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHByaXZhdGVEYXRh
U2l6ZSk7CisgICAgVU5VU0VEX1BBUkFNKHByaXZhdGVEYXRhKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKFZPUkJJUykKK3N0YXRpYyBWZWN0b3I8dWludDhf
dD4gY29va2llRnJvbVZvcmJpc0NvZGVjUHJpdmF0ZShzaXplX3QgY29kZWNQcml2YXRlU2l6ZSwg
Y29uc3Qgdm9pZCogY29kZWNQcml2YXRlRGF0YSkKK3sKKyAgICAvLyBodHRwczovL3Rvb2xzLmll
dGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1jZWxsYXItY29kZWMtMDMKKyAgICAvLyA2LjQuMTUuIEFf
Vk9SQklTCisgICAgLy8gQ29kZWMgSUQ6IEFfVk9SQklTCisgICAgLy8gQ29kZWMgTmFtZTogVm9y
YmlzCisgICAgLy8gSW5pdGlhbGl6YXRpb246IFRoZSAiUHJpdmF0ZSBEYXRhIiBjb250YWlucyB0
aGUgZmlyc3QgdGhyZWUgVm9yYmlzIHBhY2tldCBpbiBvcmRlci4gVGhlIGxlbmd0aHMgb2YgdGhl
CisgICAgLy8gcGFja2V0cyBwcmVjZWRlcyB0aGVtLiBUaGUgYWN0dWFsIGxheW91dCBpczoKKyAg
ICAvLyAtIEJ5dGUgMTogbnVtYmVyIG9mIGRpc3RpbmN0IHBhY2tldHMgJyIjcCInIG1pbnVzIG9u
ZSBpbnNpZGUgdGhlIENvZGVjUHJpdmF0ZSBibG9jay5UaGlzIE1VU1QgYmUgJzInCisgICAgLy8g
ICBmb3IgY3VycmVudCAoYXMgb2YgMjAxNi0wNy0wOCkgVm9yYmlzIGhlYWRlcnMuCisgICAgLy8g
LSBCeXRlcyAyLi5uOiBsZW5ndGhzIG9mIHRoZSBmaXJzdCAnIiNwIicgcGFja2V0cywgY29kZWQg
aW4gWGlwaC1zdHlsZSBsYWNpbmcuIFRoZSBsZW5ndGggb2YgdGhlIGxhc3QKKyAgICAvLyAgIHBh
Y2tldCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBDb2RlY1ByaXZhdGUgYmxvY2sgbWludXMgdGhlIGxl
bmd0aHMgY29kZWQgaW4gdGhlc2UgYnl0ZXMgbWludXMgb25lLgorICAgIC8vIC0gQnl0ZXMgbisx
Li46IFRoZSBWb3JiaXMgaWRlbnRpZmljYXRpb24gaGVhZGVyLCBmb2xsb3dlZCBieSB0aGUgVm9y
YmlzIGNvbW1lbnQgaGVhZGVyIGZvbGxvd2VkIGJ5IHRoZQorICAgIC8vICAgY29kZWMgc2V0dXAg
aGVhZGVyLgorCisgICAgY29uc3QgdW5zaWduZWQgY2hhciogcHJpdmF0ZURhdGFQdHIgPSBzdGF0
aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oY29kZWNQcml2YXRlRGF0YSk7CisKKyAgICBj
b25zdCBpbnQgdm9yYmlzTWluaW11bUNvb2tpZVNpemUgPSAzOworICAgIGlmIChjb2RlY1ByaXZh
dGVTaXplIDwgdm9yYmlzTWluaW11bUNvb2tpZVNpemUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoTWVkaWEsICJjb29raWVGcm9tVm9yYmlzQ29kZWNQcml2YXRlOiBjb2RlYyBwcml2YXRl
IGRhdGEgdG9vIHNtYWxsICglenUpIiwgY29kZWNQcml2YXRlU2l6ZSk7CisgICAgICAgIHJldHVy
biB7IH07CisgICAgfQorCisgICAgLy8gRGVzcGl0ZSB0aGUgIlRoaXMgTVVTVCBiZSAnMiciIGNv
bW1lbnQgaW4gdGhlIElFVEYgZG9jdW1lbnQsIHBhY2tldCBjb3VudCBpcyBub3QgYWx3YXlzIGVx
dWFsIHRvCisgICAgLy8gMiBpbiByZWFsLXdvcmQgZmlsZXMsIHNvIGlnbm9yZSB0aGF0IGZpZWxk
LgorICAgIGNvbnN0IHVpbnQxNl90IGlkSGVhZGVyU2l6ZSA9IHByaXZhdGVEYXRhUHRyWzFdOwor
ICAgIGNvbnN0IHVpbnQxNl90IGNvbW1lbnRIZWFkZXJTaXplID0gcHJpdmF0ZURhdGFQdHJbMl07
CisgICAgY29uc3QgdWludDE2X3QgY2FsY3VsYXRlZEhlYWRlclNpemUgPSAxICsgaWRIZWFkZXJT
aXplICsgY29tbWVudEhlYWRlclNpemU7CisgICAgaWYgKDEgKyBpZEhlYWRlclNpemUgKyBjb21t
ZW50SGVhZGVyU2l6ZSA+IGNvZGVjUHJpdmF0ZVNpemUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0df
RVJST1IoTWVkaWEsICJjb29raWVGcm9tVm9yYmlzQ29kZWNQcml2YXRlOiBjb2RlYyBwcml2YXRl
IGRhdGEgdG9vIHNtYWxsICglenUpIGZvciBoZWFkZXIgc2l6ZXMgKCVkKSIsIGNvZGVjUHJpdmF0
ZVNpemUsIGNhbGN1bGF0ZWRIZWFkZXJTaXplKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBpZEhlYWRlciA9ICZwcml2YXRlRGF0YVB0clsz
XTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBjb21tZW50SGVhZGVyID0gaWRIZWFkZXIgKyBp
ZEhlYWRlclNpemU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogY29kZWNTZXR1cEhlYWRlciA9
IGNvbW1lbnRIZWFkZXIgKyBjb21tZW50SGVhZGVyU2l6ZTsKKyAgICBjb25zdCB1aW50MTZfdCBj
b2RlY1NldHVwSGVhZGVyU2l6ZSA9IGNvZGVjUHJpdmF0ZVNpemUgLSBpZEhlYWRlclNpemUgLSBj
b21tZW50SGVhZGVyU2l6ZSAtIDIgLSAxOworCisgICAgaWYgKChpZEhlYWRlclNpemUgKyBjb21t
ZW50SGVhZGVyU2l6ZSArIGNvZGVjU2V0dXBIZWFkZXJTaXplICsgMykgPiBjb2RlY1ByaXZhdGVT
aXplKSB7CisgICAgICAgIFJFTEVBU0VfTE9HX0VSUk9SKE1lZGlhLCAiY29va2llRnJvbVZvcmJp
c0NvZGVjUHJpdmF0ZTogY29kZWMgcHJpdmF0ZSBoZWFkZXIgc2l6ZSBpcyBpbnZhbGlkIC0gaWQg
PSAlZCwgY29tbWVudCA9ICVkLCBoZWFkZXIgPSAlZCwgY2h1bmsgc2l6ZSA9ICV6dSIsIGlkSGVh
ZGVyU2l6ZSwgY29tbWVudEhlYWRlclNpemUsIGNvZGVjU2V0dXBIZWFkZXJTaXplLCBjb2RlY1By
aXZhdGVTaXplKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBWZWN0b3I8dWlu
dDhfdD4gY29va2llRGF0YTsKKyAgICBjb29raWVEYXRhLmFwcGVuZChyZWludGVycHJldF9jYXN0
X3B0cjxjb25zdCB1aW50OF90Kj4oJmlkSGVhZGVyU2l6ZSksIHNpemVvZihpZEhlYWRlclNpemUp
KTsKKyAgICBjb29raWVEYXRhLmFwcGVuZChpZEhlYWRlciwgaWRIZWFkZXJTaXplKTsKKworICAg
IGNvb2tpZURhdGEuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IHVpbnQ4X3QqPigm
Y29tbWVudEhlYWRlclNpemUpLCBzaXplb2YoY29tbWVudEhlYWRlclNpemUpKTsKKyAgICBjb29r
aWVEYXRhLmFwcGVuZChjb21tZW50SGVhZGVyLCBjb21tZW50SGVhZGVyU2l6ZSk7CisKKyAgICBj
b29raWVEYXRhLmFwcGVuZChyZWludGVycHJldF9jYXN0X3B0cjxjb25zdCB1aW50OF90Kj4oJmNv
ZGVjU2V0dXBIZWFkZXJTaXplKSwgc2l6ZW9mKGNvZGVjU2V0dXBIZWFkZXJTaXplKSk7CisgICAg
Y29va2llRGF0YS5hcHBlbmQoY29kZWNTZXR1cEhlYWRlciwgY29kZWNTZXR1cEhlYWRlclNpemUp
OworCisgICAgcmV0dXJuIGNvb2tpZURhdGE7Cit9CisjZW5kaWYgLy8gRU5BQkxFKFZPUkJJUykK
KworYm9vbCBpc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUoKQoreworICAgIHN0YXRpYyBib29sIGF2
YWlsYWJsZTsKKworI2lmIEVOQUJMRShWT1JCSVMpICYmIFBMQVRGT1JNKE1BQykKKyAgICBzdGF0
aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9r
ZW4sIF57CisgICAgICAgIGF2YWlsYWJsZSA9IHJlZ2lzdGVyRGVjb2RlckZhY3RvcnkoIkFDVm9y
YmlzRGVjb2RlckZhY3RvcnkiLCAndm9yYicpOworICAgIH0pOworI2VuZGlmCisKKyAgICByZXR1
cm4gYXZhaWxhYmxlOworfQorCitSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3Jl
YXRlVm9yYmlzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbihzaXplX3QgcHJpdmF0ZURhdGFTaXplLCBj
b25zdCB2b2lkKiBwcml2YXRlRGF0YSkKK3sKKyNpZiBFTkFCTEUoVk9SQklTKQorICAgIGlmICgh
aXNWb3JiaXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgYXV0byBjb29raWVEYXRhID0gY29va2llRnJvbVZvcmJpc0NvZGVjUHJpdmF0ZShwcml2YXRl
RGF0YVNpemUsIHByaXZhdGVEYXRhKTsKKyAgICBpZiAoIWNvb2tpZURhdGEuc2l6ZSgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBjcmVhdGVBdWRpb0Zvcm1hdERlc2Ny
aXB0aW9uRm9yRm9ybWF0KCd2b3JiJywgY29va2llRGF0YSk7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShwcml2YXRlRGF0YVNpemUpOworICAgIFVOVVNFRF9QQVJBTShwcml2YXRlRGF0YSk7Cisg
ICAgcmV0dXJuIG51bGxwdHI7CisjZW5kaWYKK30KKworfQorCisjZW5kaWYgLy8gUExBVEZPUk0o
Q09DT0EpCg==
</data>
<flag name="commit-queue"
          id="433310"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415940</attachid>
            <date>2020-12-10 15:37:11 -0800</date>
            <delta_ts>2020-12-10 16:46:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219755-20201210153710.patch</filename>
            <type>text/plain</type>
            <size>85315</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwNjM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGE5YjdjY2JmMTY3YWI0
M2I1YWYzZWIzZmI0Y2QzMDM2MTdiZmI3ZS4uNWM4MGJlYWYwOWIzODNiNzcxMWVlMzMyNzIwODg0
ZDA5N2Y4Nzk0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcwIEBACisyMDIwLTEyLTEwICBFcmlj
IENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNU0VdIFJlZmFj
dG9yIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gaW4gcHJlcGFyYXRpb24gZm9yIHN1cHBvcnRpbmcg
YXVkaW8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
OTc1NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNzIxOTI2MjU+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgSmVyIE5vYmxlLgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBXZWJNIHBhcnNlciBpbiBw
cmVwYXJhdGlvbiBmb3Igc3VwcG9ydGluZyBhdWRpbzogbW92ZSBWUDktc3BlY2lmaWMgY29kZQor
ICAgICAgICBpbnRvIFZQOVV0aWxpdGllc0NvY29hLCBjb252ZXJ0IFRyYWNrRGF0YSBmcm9tIGEg
c3RydWN0IHRvIGEgY2xhc3MgYW5kIG1hZGUgZGVyaXZlZAorICAgICAgICBjbGFzc2VzIGZvciBh
dWRpbyBhbmQgdmlkZW8sIGFkZCBzdHViIGZ1bmN0aW9uIHRvIGNyZWF0ZSBmb3JtYXQgZGVzY3Jp
cHRpb25zIGZvciAKKyAgICAgICAgVm9yYmlzIGFuZCBPcHVzIGF1ZGlvLgorCisgICAgICAgICog
U291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9NZWRpYVV0aWxpdGllcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKTogQWRkIG9wdGlv
bmFsIHBhcmFtZXRlcnMgZm9yIG1hZ2ljIGNvb2tpZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2Nv
YS9NZWRpYVV0aWxpdGllcy5oOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
U291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjppc0NvbnRlbnRUeXBlU3VwcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNOjpyZXNldFBhcnNlclN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnRyYWNrRGF0YUZvclRyYWNrTnVtYmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uVHJhY2tFbnRyeSk6CisgICAg
ICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkZyYW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnByb3ZpZGVNZWRpYURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VmlkZW9UcmFja0RhdGE6OmNv
bnN1bWVGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6VmlkZW9UcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNr
RGF0YTo6Y3JlYXRlU2FtcGxlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06OmZsdXNoUGVuZGluZ0F1ZGlvQnVmZmVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpzZXRNaW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9Db2xvclByaW1hcmllcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9DTUNvbG9yUHJpbWFyaWVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb1RyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NNVHJhbnNmZXJGdW5jdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9NYXRyaXhDb2VmZmljaWVudHMpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRvQ01ZQ2JDUk1hdHJpeCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0U3Vic2FtcGxpbmdYWVRvQ2hyb21hU3Vic2FtcGxp
bmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRm9ybWF0RGVzY3JpcHRpb25G
cm9tVlA5SGVhZGVyUGFyc2VyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmg6CisgICAgICAgIChpc1R5cGUpOgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb0NvbG9yUHJpbWFyaWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnZlcnRUb0NNQ29sb3JQcmltYXJpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVy
dFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydFRv
Q01UcmFuc2ZlckZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRUb01hdHJpeENv
ZWZmaWNpZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0VG9DTVlDYkNSTWF0cml4KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJzYW1wbGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGb3JtYXREZXNjcmlwdGlvbkZyb21WUDlIZWFk
ZXJQYXJzZXIpOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlv
VXRpbGl0aWVzQ29jb2EuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
cmVnaXN0ZXJEZWNvZGVyRmFjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVBdWRpb0Zv
cm1hdERlc2NyaXB0aW9uRm9yRm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZUZyb21P
cHVzQ29kZWNQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmlzT3B1c0RlY29kZXJBdmFpbGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlT3B1c0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Y29va2llRnJvbVZvcmJpc0NvZGVjUHJpdmF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjppc1ZvcmJpc0RlY29kZXJBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlVm9yYmlzQXVkaW9Gb3JtYXREZXNjcmlwdGlvbik6CisKIDIwMjAtMTItMTAgIFph
bGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIEludHJv
ZHVjZSBJbmxpbmVUZXh0SXRlbTo6aXNXb3JkU2VwYXJhdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4
dAppbmRleCA4Zjk5ZjlhMTkxOGM5NTU4ODVmYjJhY2I5OWM4ZDFhNzUyNjVhYTAzLi5lNTkxMzlm
YmI0NTY1MGRlZjk5NmY4MjFkNWNhZmE0MGI3MmQ4ZWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50
eHQKQEAgLTM3Niw2ICszNzYsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJDb3JlQ0FM
YXllckV4dHJhcy5tbQogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViQ29yZURlY29tcHJlc3Np
b25TZXNzaW9uLm1tCiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHTExheWVyLm1tCiBwbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJHUFVMYXllci5tbQorcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvV2ViTVV0aWxpdGllc0NvY29hLm1tIEBuby11bmlmeQogcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvVmlkZW9UcmFja1ByaXZhdGVXZWJNLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY29yZXRleHQv
Rm9udENhc2NhZGVDb3JlVGV4dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NvcmV0ZXh0L0ZvbnRD
b3JlVGV4dC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBiZTRmY2FmZjlmYzkyNTliNDZjMzUzOWI2ZWE5M2FmNGFkYzdmYjI1
Li5mZjUyYTA2YTI2NzYzYzdlN2I4Nzg1NGQ3Mjk0NDBlYTIyNWE2NGNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMTgsNiAr
MjE4LDggQEAKIAkJMDdFRTc2RUMxQkU5NkRCMDAwRjg5MTMzIC8qIE1vY2tSZWFsdGltZVZpZGVv
U291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
N0VFNzZFQTFCRTk2REIwMDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwN0VFNzZFRjFC
RUE2MTk4MDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3RUU3NkVEMUJFQTYxOTgwMEY4
OTEzMyAvKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5oICovOyB9OwogCQkwN0Y0RTkzMzIw
QjM1ODdGMDAyRTM4MDMgLyogQVZBc3NldE1JTUVUeXBlQ2FjaGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3QzhBRDEyMUQwNzNENjMwMDg3QzVDRSAv
KiBBVkFzc2V0TUlNRVR5cGVDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTA3RjVDRkY1MjU4MkE1MUQwMDY2MkVGNSAvKiBXZWJNQXVkaW9V
dGlsaXRpZXNDb2NvYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDdGNUNGRjQyNTgyQTRGODAwNjYyRUY1IC8qIFdlYk1BdWRpb1V0aWxpdGllc0NvY29h
LmggKi87IH07CisJCTA3RjVDRkY2MjU4MkE1MjkwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRp
ZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA3RjVDRkYyMjU4MkE0RjgwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbSAq
LzsgfTsKIAkJMDdGODc2ODQxQUQ1ODBGOTAwOTA1ODQ5IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRD
b250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
N0Y4NzY4MzFBRDRBOTQ1MDA5MDU4NDkgLyogTWVkaWFQbGF5YmFja1RhcmdldENvbnRleHQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwN0Y5NDQx
NjE4NjREMDQ2MDA1RDMxQ0IgLyogUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDREFFOEMwODE3NDZCOTU3
MDA1MzJENzggLyogUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDdGRTk5REQxODgwN0E3RDAwMjU2
NjQ4IC8qIE1lZGlhRWxlbWVudFNlc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA3RkU5OURCMTg4MDdBN0QwMDI1NjY0OCAvKiBNZWRpYUVsZW1l
bnRTZXNzaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTU4NzUsNiArNTg3Nyw4IEBACiAJCTA3RUU3NkVBMUJFOTZEQjAwMEY4OTEzMyAvKiBN
b2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwN0VFNzZFRDFCRUE2MTk4MDBGODkxMzMgLyogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTW9ja1JlYWx0aW1lVmlkZW9Tb3Vy
Y2VNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdFRTc2RUUxQkVBNjE5ODAw
Rjg5MTMzIC8qIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3RjVDRkYyMjU4MkE0RjgwMDY2MkVGNSAvKiBX
ZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYk1BdWRp
b1V0aWxpdGllc0NvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwN0Y1Q0ZG
NDI1ODJBNEY4MDA2NjJFRjUgLyogV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMDdGODc2ODMxQUQ0QTk0NTAwOTA1ODQ5IC8qIE1lZGlhUGxheWJhY2tUYXJnZXRDb250
ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUGxheWJhY2tUYXJn
ZXRDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3RkU5OURBMTg4MDdB
N0QwMDI1NjY0OCAvKiBNZWRpYUVsZW1lbnRTZXNzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRWxlbWVudFNlc3Npb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwN0ZFOTlEQjE4ODA3QTdEMDAyNTY2NDggLyogTWVkaWFFbGVtZW50
U2Vzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUVsZW1lbnRT
ZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjg2Nyw2ICsyNjg3MSw4
IEBACiAJCQkJNDlGRkJGM0UxMUM5M0VFMzAwNkE3MTE4IC8qIFdlYkdMTGF5ZXIubW0gKi8sCiAJ
CQkJMzE4NDM2REIyMUI5REFBMDAwRUQzODNFIC8qIFdlYkdQVUxheWVyLmggKi8sCiAJCQkJMzE4
NDM2REQyMUI5REFBMDAwRUQzODNFIC8qIFdlYkdQVUxheWVyLm1tICovLAorCQkJCTA3RjVDRkY0
MjU4MkE0RjgwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oICovLAorCQkJCTA3
RjVDRkYyMjU4MkE0RjgwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5tbSAqLywK
IAkJCSk7CiAJCQlwYXRoID0gY29jb2E7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAt
MzUyNTYsNiArMzUyNjIsNyBAQAogCQkJCTQ5NEJENzk1MEY1NUM4RUUwMDc0NzgyOCAvKiBXZWJL
aXRQb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzFDMEZGMjUwRTRDRUI2RTAwN0Q2RkU1IC8q
IFdlYktpdFRyYW5zaXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRjMzMkYwRjJC
OUEyNTAwNEI2Nzk1IC8qIFdlYkxheWVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwN0Y1Q0ZGNTI1
ODJBNTFEMDA2NjJFRjUgLyogV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCBpbiBIZWFkZXJzICov
LAogCQkJCTA3MDlENzhGMUFFNTU1NTQwMDRFNDJGOCAvKiBXZWJNZWRpYVNlc3Npb25NYW5hZ2Vy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzA5RDc5NTFBRTU1QTI5MDA0RTQyRjggLyogV2ViTWVk
aWFTZXNzaW9uTWFuYWdlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDcwOUQ3OTMxQUU1
NTU3RTAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJNYWMuaCBpbiBIZWFkZXJzICov
LApAQCAtMzY2MTAsNiArMzY2MTcsNyBAQAogCQkJCTJEMDYyMTREMURBNjNBOEIwMEE3RkIyNiAv
KiBXZWJLaXRNZWRpYUtleXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkQwNjIxNEYxREE2M0E5
MTAwQTdGQjI2IC8qIFdlYktpdE1lZGlhS2V5U2Vzc2lvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3QzQ4QTZEMDE5MUM5RDY1MDAwMjY2NzQgLyogV2ViS2l0TmFtZXNwYWNlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTA3RjVDRkY2MjU4MkE1MjkwMDY2MkVGNSAvKiBXZWJNQXVkaW9VdGlsaXRp
ZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA3MDlENzkyMUFFNTU1N0UwMDRFNDJGOCAv
KiBXZWJNZWRpYVNlc3Npb25NYW5hZ2VyTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFDQUYz
NDgyMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3QubW0gaW4gU291cmNlcyAqLywK
IAkJCQlDRUNEQzkzQzIxRjI5NzI5MDA5NzZCRDEgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29udHJv
bGxlckFWS2l0Lm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9NZWRpYVV0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jb2NvYS9NZWRpYVV0aWxpdGllcy5jcHAKaW5kZXggYjQ4YjRmNTYzMzJkMDU5ZDlmYjE3NzU1
NDMwYTFmOGUwNTYyY2NjNS4uYTUzMzMyY2Y3ZGJkNjQ2NmY0NGY1NzZkMWNkN2FkZTc2MTUwYWE0
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTWVkaWFVdGlsaXRp
ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL01lZGlhVXRpbGl0aWVz
LmNwcApAQCAtMzUsMTEgKzM1LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFt
ZXNwYWNlIFBBTDsKIAotUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUF1
ZGlvRm9ybWF0RGVzY3JpcHRpb24oY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3Jp
cHRpb24pCitSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9Gb3Jt
YXREZXNjcmlwdGlvbihjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwg
c2l6ZV90IG1hZ2ljQ29va2llU2l6ZSwgY29uc3Qgdm9pZCogbWFnaWNDb29raWUpCiB7CiAgICAg
YXV0byBiYXNpY0Rlc2NyaXB0aW9uID0gV1RGOjpnZXQ8Y29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rl
c2NyaXB0aW9uKj4oZGVzY3JpcHRpb24ucGxhdGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9u
KTsKICAgICBDTUZvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdCA9IG51bGxwdHI7Ci0gICAgYXV0
byBlcnJvciA9IENNQXVkaW9Gb3JtYXREZXNjcmlwdGlvbkNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCBiYXNpY0Rlc2NyaXB0aW9uLCAwLCBudWxscHRyLCAwLCBudWxscHRyLCBudWxscHRyLCAm
Zm9ybWF0KTsKKyAgICBhdXRvIGVycm9yID0gQ01BdWRpb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGJhc2ljRGVzY3JpcHRpb24sIDAsIG51bGxwdHIsIG1hZ2lj
Q29va2llU2l6ZSwgbWFnaWNDb29raWUsIG51bGxwdHIsICZmb3JtYXQpOwogICAgIGlmIChlcnJv
cikgewogICAgICAgICBMT0dfRVJST1IoImNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24gZmFp
bGVkIHdpdGggJWQiLCBlcnJvcik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvTWVkaWFVdGlsaXRpZXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL01lZGlhVXRpbGl0aWVzLmgKaW5kZXggNmI2N2M2Njc4
NWQ0N2QyNzAyYjVjNjQ5ZWYyODVlNGIwYTVlMTI2Ni4uOTE3MDhlYTIyYWQ0YjViYmM3ZWY4OWQ0
Y2I1ZGIzNTk5ZDhlNjI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvTWVkaWFVdGlsaXRpZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9N
ZWRpYVV0aWxpdGllcy5oCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb247CiBjbGFzcyBQbGF0Zm9ybUF1ZGlvRGF0YTsKIAot
UmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3Jp
cHRpb24oY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYpOworUmV0YWluUHRyPENNRm9ybWF0
RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb24oY29uc3QgQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbiYsIHNpemVfdCBtYWdpY0Nvb2tpZVNpemUgPSAwLCBjb25zdCB2b2lk
KiBtYWdpY0Nvb2tpZSA9IG51bGxwdHIpOwogUmV0YWluUHRyPENNU2FtcGxlQnVmZmVyUmVmPiBj
cmVhdGVBdWRpb1NhbXBsZUJ1ZmZlcihjb25zdCBQbGF0Zm9ybUF1ZGlvRGF0YSYsIGNvbnN0IEF1
ZGlvU3RyZWFtRGVzY3JpcHRpb24mLCBDTVRpbWUsIHNpemVfdCBzYW1wbGVDb3VudCk7CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZlclBhcnNlcldlYk0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKaW5k
ZXggYmUxZTA4NmUwYWM1MjM1NDYzNmEwMDZhYjMyZDFiOTJmNDBiNGQ4MS4uOWI4ZmM2N2JlNzFh
MGVlYmRlZDkzOWYxNjMyOGQ1MDlmMDBmMjQ3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2Vy
V2ViTS5jcHAKQEAgLTM5LDExICszOSwxMyBAQAogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgog
I2luY2x1ZGUgIlZQOVV0aWxpdGllc0NvY29hLmgiCiAjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZh
dGVXZWJNLmgiCisjaW5jbHVkZSAiV2ViTUF1ZGlvVXRpbGl0aWVzQ29jb2EuaCIKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9EYXRhVmlldy5oPgogI2luY2x1ZGUgPHdlYm0vd2VibV9wYXJzZXIu
aD4KICNpbmNsdWRlIDx3dGYvQWxnb3JpdGhtcy5oPgogI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxw
ZXIuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpc3QuaD4KICNpbmNsdWRlIDx3dGYvY2Yv
VHlwZUNhc3RzQ0YuaD4KICNpbmNsdWRlIDx3dGYvZGFyd2luL1dlYWtMaW5raW5nLmg+CkBAIC0y
MzYsNyArMjM4LDYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgTG9nQXJndW1lbnQ8V2ViQ29yZTo6U291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6U3RhdGU+IHsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKLQog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgUEFMOwpAQCAtNDU2LDYgKzQ1
Nyw3IEBAIHByaXZhdGU6CiAKIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBTb3VyY2VC
dWZmZXJQYXJzZXJXZWJNOjppc0NvbnRlbnRUeXBlU3VwcG9ydGVkKGNvbnN0IENvbnRlbnRUeXBl
JiB0eXBlKQogeworI2lmIEVOQUJMRShWUDkpIHx8IEVOQUJMRShWT1JCSVMpIHx8IEVOQUJMRShP
UFVTKQogICAgIGlmICghaXNXZWJtUGFyc2VyQXZhaWxhYmxlKCkpCiAgICAgICAgIHJldHVybiBN
ZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOwogCkBAIC00Njcs
MTAgKzQ2OSwxNCBAQCBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGUgU291cmNlQnVmZmVy
UGFyc2VyV2ViTTo6aXNDb250ZW50VHlwZVN1cHBvcnRlZChjbwogICAgIGlmICghY29kZWNzUGFy
YW1ldGVyKQogICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlOjpN
YXlCZVN1cHBvcnRlZDsKIAotI2lmIEVOQUJMRShWUDkpCiAgICAgYXV0byBzcGxpdFJlc3VsdHMg
PSBTdHJpbmdWaWV3KGNvZGVjc1BhcmFtZXRlcikuc3BsaXQoJywnKTsKICAgICBmb3IgKGF1dG8g
c3BsaXQgOiBzcGxpdFJlc3VsdHMpIHsKKyNpZiBFTkFCTEUoVlA5KQogICAgICAgICBpZiAoc3Bs
aXQuc3RhcnRzV2l0aCgidnAwOSIpKSB7CisKKyAgICAgICAgICAgIGlmICghaXNWUDlEZWNvZGVy
QXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1
cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKICAgICAgICAgICAgIGF1dG8gY29kZWNQYXJh
bWV0ZXJzID0gcGFyc2VWUENvZGVjUGFyYW1ldGVycyhzcGxpdCk7CiAgICAgICAgICAgICBpZiAo
IWNvZGVjUGFyYW1ldGVycykKICAgICAgICAgICAgICAgICByZXR1cm4gTWVkaWFQbGF5ZXJFbnVt
czo6U3VwcG9ydHNUeXBlOjpJc05vdFN1cHBvcnRlZDsKQEAgLTQ4MCwxNCArNDg2LDQzIEBAIE1l
ZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZSBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjppc0Nv
bnRlbnRUeXBlU3VwcG9ydGVkKGNvCiAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgT3B1cyBTdXBwb3J0Ci0gICAgICAgIC8vIEZJWE1FOiBB
ZGQgVm9yYmlzIFN1cHBvcnQKKyNlbmRpZiAvLyBFTkFCTEUoVlA5KQorCisjaWYgRU5BQkxFKFZP
UkJJUykKKyAgICAgICAgaWYgKHNwbGl0ID09ICJ2b3JiaXMiKSB7CisgICAgICAgICAgICBpZiAo
IWlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBNZWRp
YVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6OklzTm90U3VwcG9ydGVkOworCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorI2VuZGlmIC8vIEVOQUJMRShWT1JCSVMpCisKKyNpZiBF
TkFCTEUoT1BVUykKKyAgICAgICAgaWYgKHNwbGl0ID09ICJvcHVzIikgeworICAgICAgICAgICAg
aWYgKCFpc09wdXNEZWNvZGVyQXZhaWxhYmxlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE1l
ZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7CisKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisjZW5kaWYgLy8gRU5BQkxFKE9QVVMpCisKICAgICAg
ICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7
CiAgICAgfQorCiAgICAgcmV0dXJuIE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNT
dXBwb3J0ZWQ7CisKICNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHR5cGUpOworCiAgICAgcmV0dXJu
IE1lZGlhUGxheWVyRW51bXM6OlN1cHBvcnRzVHlwZTo6SXNOb3RTdXBwb3J0ZWQ7Ci0jZW5kaWYK
KyNlbmRpZiAvLyBFTkFCTEUoVlA5KSB8fCBFTkFCTEUoVk9SQklTKSB8fCBFTkFCTEUoT1BVUykK
K30KKworUmVmUHRyPFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0+IFNvdXJjZUJ1ZmZlclBhcnNlcldl
Yk06OmNyZWF0ZShjb25zdCBDb250ZW50VHlwZSYgdHlwZSkKK3sKKyAgICBpZiAoaXNDb250ZW50
VHlwZVN1cHBvcnRlZCh0eXBlKSAhPSBNZWRpYVBsYXllckVudW1zOjpTdXBwb3J0c1R5cGU6Oklz
Tm90U3VwcG9ydGVkKQorICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk0oKSk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06OlNvdXJjZUJ1ZmZlclBhcnNlcldlYk0oKQpAQCAtNTcxLDcgKzYwNiw5IEBAIGJvb2wg
U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2hvdWxkUHJvdmlkZU1lZGlhZGF0YUZvclRyYWNrSUQo
dWludDY0X3QpCiB2b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OnJlc2V0UGFyc2VyU3RhdGUo
KQogewogICAgIElORk9fTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIpOwotICAgIG1fcGFy
c2VyLT5EaWRTZWVrKCk7CisgICAgZmx1c2hQZW5kaW5nQXVkaW9CdWZmZXJzKCk7CisgICAgaWYg
KG1fcGFyc2VyKQorICAgICAgICBtX3BhcnNlci0+RGlkU2VlaygpOwogICAgIG1fc3RhdGUgPSBT
dGF0ZTo6Tm9uZTsKICAgICBtX3RyYWNrcy5jbGVhcigpOwogICAgIG1faW5pdGlhbGl6YXRpb25T
ZWdtZW50ID0gbnVsbHB0cjsKQEAgLTYwNCw3ICs2NDEsNyBAQCB2b2lkIFNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OnNldExvZ2dlcihjb25zdCBMb2dnZXImIGxvZ2dlciwgY29uc3Qgdm9pZCogbG9n
SWRlbgogYXV0byBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjp0cmFja0RhdGFGb3JUcmFja051bWJl
cih1aW50NjRfdCB0cmFja051bWJlcikgLT4gVHJhY2tEYXRhKgogewogICAgIGZvciAoYXV0byYg
dHJhY2sgOiBtX3RyYWNrcykgewotICAgICAgICBpZiAodHJhY2sudHJhY2sudHJhY2tfbnVtYmVy
LmlzX3ByZXNlbnQoKSAmJiB0cmFjay50cmFjay50cmFja19udW1iZXIudmFsdWUoKSA9PSB0cmFj
a051bWJlcikKKyAgICAgICAgaWYgKHRyYWNrLT50cmFjaygpLnRyYWNrX251bWJlci5pc19wcmVz
ZW50KCkgJiYgdHJhY2stPnRyYWNrKCkudHJhY2tfbnVtYmVyLnZhbHVlKCkgPT0gdHJhY2tOdW1i
ZXIpCiAgICAgICAgICAgICByZXR1cm4gJnRyYWNrOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0
cjsKQEAgLTc0OCw3ICs3ODUsNyBAQCBTdGF0dXMgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6T25D
bHVzdGVyQmVnaW4oY29uc3QgRWxlbWVudE1ldGFkYXRhJiBtZXRhZGF0YSwgYwogU3RhdHVzIFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk06Ok9uVHJhY2tFbnRyeShjb25zdCBFbGVtZW50TWV0YWRhdGEm
IG1ldGFkYXRhLCBjb25zdCBUcmFja0VudHJ5JiB0cmFja0VudHJ5KQogewogICAgIFVOVVNFRF9Q
QVJBTShtZXRhZGF0YSk7Ci0gICAgaWYgKCF0cmFja0VudHJ5LnRyYWNrX3R5cGUuaXNfcHJlc2Vu
dCgpKQorICAgIGlmICghdHJhY2tFbnRyeS50cmFja190eXBlLmlzX3ByZXNlbnQoKSB8fCAhdHJh
Y2tFbnRyeS5jb2RlY19pZC5pc19wcmVzZW50KCkpCiAgICAgICAgIHJldHVybiBTdGF0dXMoU3Rh
dHVzOjprT2tDb21wbGV0ZWQpOwogCiAgICAgYXV0byB0cmFja1R5cGUgPSB0cmFja0VudHJ5LnRy
YWNrX3R5cGUudmFsdWUoKTsKQEAgLTc1Niw4ICs3OTMsMzAgQEAgU3RhdHVzIFNvdXJjZUJ1ZmZl
clBhcnNlcldlYk06Ok9uVHJhY2tFbnRyeShjb25zdCBFbGVtZW50TWV0YWRhdGEmIG1ldGFkYXRh
LCBjb24KICAgICAgICAgbV9pbml0aWFsaXphdGlvblNlZ21lbnQtPnZpZGVvVHJhY2tzLmFwcGVu
ZCh7IE1lZGlhRGVzY3JpcHRpb25XZWJNOjpjcmVhdGUoVHJhY2tFbnRyeSh0cmFja0VudHJ5KSks
IFZpZGVvVHJhY2tQcml2YXRlV2ViTTo6Y3JlYXRlKFRyYWNrRW50cnkodHJhY2tFbnRyeSkpIH0p
OwogICAgIGVsc2UgaWYgKHRyYWNrVHlwZSA9PSBUcmFja1R5cGU6OmtBdWRpbykKICAgICAgICAg
bV9pbml0aWFsaXphdGlvblNlZ21lbnQtPmF1ZGlvVHJhY2tzLmFwcGVuZCh7IE1lZGlhRGVzY3Jp
cHRpb25XZWJNOjpjcmVhdGUoVHJhY2tFbnRyeSh0cmFja0VudHJ5KSksIEF1ZGlvVHJhY2tQcml2
YXRlV2ViTTo6Y3JlYXRlKFRyYWNrRW50cnkodHJhY2tFbnRyeSkpIH0pOwotICAgIG1fdHJhY2tz
LmFwcGVuZCh7IFRyYWNrRW50cnkodHJhY2tFbnRyeSksIHsgfSwgbnVsbHB0ciwgbnVsbHB0ciwg
MCB9KTsKIAorICAgIFN0cmluZ1ZpZXcgY29kZWNTdHJpbmcgeyB0cmFja0VudHJ5LmNvZGVjX2lk
LnZhbHVlKCkuZGF0YSgpLCAodW5zaWduZWQpdHJhY2tFbnRyeS5jb2RlY19pZC52YWx1ZSgpLmxl
bmd0aCgpIH07CisjaWYgRU5BQkxFKFZQOSkKKyAgICBpZiAoY29kZWNTdHJpbmcgPT0gIlZfVlA5
IiAmJiBpc1ZQOURlY29kZXJBdmFpbGFibGUoKSkgeworICAgICAgICBtX3RyYWNrcy5hcHBlbmQo
VmlkZW9UcmFja0RhdGE6OmNyZWF0ZShDb2RlY1R5cGU6OlZQOSwgdHJhY2tFbnRyeSwgKnRoaXMp
KTsKKyAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtPa0NvbXBsZXRlZCk7CisgICAgfQor
I2VuZGlmCisKKyNpZiBFTkFCTEUoVk9SQklTKQorICAgIGlmIChjb2RlY1N0cmluZyA9PSAiQV9W
T1JCSVMiICYmIGlzVm9yYmlzRGVjb2RlckF2YWlsYWJsZSgpKSB7CisgICAgICAgIG1fdHJhY2tz
LmFwcGVuZChBdWRpb1RyYWNrRGF0YTo6Y3JlYXRlKENvZGVjVHlwZTo6Vm9yYmlzLCB0cmFja0Vu
dHJ5LCAqdGhpcywgbV9taW5pbXVtQXVkaW9TYW1wbGVEdXJhdGlvbikpOworICAgICAgICByZXR1
cm4gU3RhdHVzKFN0YXR1czo6a09rQ29tcGxldGVkKTsKKyAgICB9CisjZW5kaWYKKworI2lmIEVO
QUJMRShPUFVTKQorICAgIGlmIChjb2RlY1N0cmluZyA9PSAiQV9PUFVTIiAmJiBpc09wdXNEZWNv
ZGVyQXZhaWxhYmxlKCkpIHsKKyAgICAgICAgbV90cmFja3MuYXBwZW5kKEF1ZGlvVHJhY2tEYXRh
OjpjcmVhdGUoQ29kZWNUeXBlOjpPcHVzLCB0cmFja0VudHJ5LCAqdGhpcywgbV9taW5pbXVtQXVk
aW9TYW1wbGVEdXJhdGlvbikpOworICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a09rQ29t
cGxldGVkKTsKKyAgICB9CisjZW5kaWYKKworICAgIG1fdHJhY2tzLmFwcGVuZChUcmFja0RhdGE6
OmNyZWF0ZShDb2RlY1R5cGU6OlVuc3VwcG9ydGVkLCB0cmFja0VudHJ5LCAqdGhpcykpOwogICAg
IHJldHVybiBTdGF0dXMoU3RhdHVzOjprT2tDb21wbGV0ZWQpOwogfQogCkBAIC04MjcsNDA2ICs4
ODYsMjkxIEBAIHdlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkJsb2NrR3Jv
dXBFbmQoY29uc3Qgd2VibTo6RWxlbWVudE1ldGFkYXRhCiAgICAgcmV0dXJuIFN0YXR1cyhTdGF0
dXM6OmtPa0NvbXBsZXRlZCk7CiB9CiAKLSNpZiBFTkFCTEUoVlA5KQogCi1zdGF0aWMgdWludDhf
dCBjb252ZXJ0VG9Db2xvclByaW1hcmllcyhjb25zdCBQcmltYXJpZXMmIGNvZWZmaWNpZW50cykK
K3dlYm06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkZyYW1lKGNvbnN0IEZyYW1l
TWV0YWRhdGEmIG1ldGFkYXRhLCBSZWFkZXIqIHJlYWRlciwgdWludDY0X3QqIGJ5dGVzUmVtYWlu
aW5nKQogewotICAgIHN3aXRjaCAoY29lZmZpY2llbnRzKSB7Ci0gICAgY2FzZSBQcmltYXJpZXM6
OmtCdDcwOToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpC
VF83MDlfNjsKLSAgICBjYXNlIFByaW1hcmllczo6a1Vuc3BlY2lmaWVkOgotICAgICAgICByZXR1
cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlVuc3BlY2lmaWVkOwotICAgIGNhc2Ug
UHJpbWFyaWVzOjprQnQ0NzBNOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQ
cmltYXJpZXM6OkJUXzQ3MF82X007Ci0gICAgY2FzZSBQcmltYXJpZXM6OmtCdDQ3MEJnOgotICAg
ICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzQ3MF83X0JHOwot
ICAgIGNhc2UgUHJpbWFyaWVzOjprU21wdGUxNzBNOgotICAgICAgICByZXR1cm4gVlBDb25maWd1
cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzYwMV83OwotICAgIGNhc2UgUHJpbWFyaWVzOjprU21w
dGUyNDBNOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNN
UFRFX1NUXzI0MDsKLSAgICBjYXNlIFByaW1hcmllczo6a0ZpbG06Ci0gICAgICAgIHJldHVybiBW
UENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6RmlsbTsKLSAgICBjYXNlIFByaW1hcmllczo6
a0J0MjAyMDoKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpC
VF8yMDIwX05vbmNvbnN0YW50X0x1bWluYW5jZTsKLSAgICBjYXNlIFByaW1hcmllczo6a1NtcHRl
U3Q0MjgxOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlNN
UFRFX1NUXzQyOF8xOwotICAgIGNhc2UgUHJpbWFyaWVzOjprU21wdGVScDQzMToKLSAgICAgICAg
cmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9SUF80MzFfMjsKLSAg
ICBjYXNlIFByaW1hcmllczo6a1NtcHRlRWc0MzI6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3Vy
YXRpb25Db2xvclByaW1hcmllczo6U01QVEVfRUdfNDMyXzE7Ci0gICAgY2FzZSBQcmltYXJpZXM6
OmtKZWRlY1AyMlBob3NwaG9yczoKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9y
UHJpbWFyaWVzOjpFQlVfVGVjaF8zMjEzX0U7Ci0gICAgfQotfQorICAgIEFTU0VSVChyZWFkZXIp
OworICAgIGlmICghcmVhZGVyKQorICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a05vdEVu
b3VnaE1lbW9yeSk7CiAKLXN0YXRpYyBDRlN0cmluZ1JlZiBjb252ZXJ0VG9DTUNvbG9yUHJpbWFy
aWVzKHVpbnQ4X3QgcHJpbWFyaWVzKQotewotICAgIHN3aXRjaCAocHJpbWFyaWVzKSB7Ci0gICAg
Y2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfNzA5XzY6Ci0gICAgICAgIHJl
dHVybiBrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzX0lUVV9SXzcwOV8yOwotICAgIGNhc2Ug
VlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkVCVV9UZWNoXzMyMTNfRToKLSAgICAgICAg
cmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmltYXJpZXNfRUJVXzMyMTM7Ci0gICAgY2FzZSBW
UENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6QlRfNjAxXzc6Ci0gICAgY2FzZSBWUENvbmZp
Z3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfU1RfMjQwOgotICAgICAgICByZXR1cm4ga0NW
SW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc19TTVBURV9DOwotICAgIGNhc2UgVlBDb25maWd1cmF0
aW9uQ29sb3JQcmltYXJpZXM6OlNNUFRFX1JQXzQzMV8yOgotICAgICAgICByZXR1cm4ga0NNRm9y
bWF0RGVzY3JpcHRpb25Db2xvclByaW1hcmllc19EQ0lfUDM7Ci0gICAgY2FzZSBWUENvbmZpZ3Vy
YXRpb25Db2xvclByaW1hcmllczo6U01QVEVfRUdfNDMyXzE6Ci0gICAgICAgIHJldHVybiBrQ01G
b3JtYXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX1AzX0Q2NTsKLSAgICBjYXNlIFZQQ29uZmln
dXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpCVF8yMDIwX05vbmNvbnN0YW50X0x1bWluYW5jZToKLSAg
ICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQcmltYXJpZXNfSVRVX1JfMjAy
MDsKLSAgICB9CisgICAgaWYgKCFtX2N1cnJlbnRCbG9jaykKKyAgICAgICAgcmV0dXJuIFN0YXR1
cyhTdGF0dXM6OmtJbnZhbGlkRWxlbWVudElkKTsKIAotICAgIHJldHVybiBudWxscHRyOwotfQor
ICAgIGF1dG8qIGJsb2NrID0gV1RGOjpzd2l0Y2hPbigqbV9jdXJyZW50QmxvY2ssIFtdKEJsb2Nr
JiBibG9jaykgeworICAgICAgICByZXR1cm4gJmJsb2NrOworICAgIH0sIFtdKFNpbXBsZUJsb2Nr
JiBibG9jaykgLT4gQmxvY2sqIHsKKyAgICAgICAgcmV0dXJuICZibG9jazsKKyAgICB9KTsKKyAg
ICBpZiAoIWJsb2NrKQorICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6a0ludmFsaWRFbGVt
ZW50SWQpOwogCi1zdGF0aWMgdWludDhfdCBjb252ZXJ0VG9UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
cyhjb25zdCBUcmFuc2ZlckNoYXJhY3RlcmlzdGljcyYgY2hhcmFjdGVyaXN0aWNzKQotewotICAg
IHN3aXRjaCAoY2hhcmFjdGVyaXN0aWNzKSB7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3Rlcmlz
dGljczo6a0J0NzA5OgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OkJUXzcwOV82OwotICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OmtVbnNwZWNpZmllZDoKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzOjpVbnNwZWNpZmllZDsKLSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjprR2FtbWEyMmN1cnZlOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzQ3MF82X007Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6a0dhbW1hMjhjdXJ2ZToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRy
YW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF80NzBfN19CRzsKLSAgICBjYXNlIFRyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzOjprU21wdGUxNzBNOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9u
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzYwMV83OwotICAgIGNhc2UgVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OmtTbXB0ZTI0ME06Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U01QVEVfU1RfMjQwOwotICAgIGNhc2UgVHJhbnNmZXJD
aGFyYWN0ZXJpc3RpY3M6OmtMaW5lYXI6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25U
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6TGluZWFyOwotICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OmtMb2c6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNo
YXJhY3RlcmlzdGljczo6TG9ncml0aG1pYzsKLSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjprTG9nU3FydDoKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzOjpMb2dyaXRobWljX1NxcnQ7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6a0llYzYxOTY2MjQ6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFu
c2ZlckNoYXJhY3RlcmlzdGljczo6SUVDXzYxOTY2XzJfNDsKLSAgICBjYXNlIFRyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzOjprQnQxMzYxRXh0ZW5kZWRDb2xvdXJHYW11dDoKLSAgICAgICAgcmV0dXJu
IFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8xMzYxXzA7Ci0gICAg
Y2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0llYzYxOTY2MjE6Ci0gICAgICAgIHJldHVy
biBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6SUVDXzYxOTY2XzJfMTsK
LSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprMTBCaXRCdDIwMjA6Ci0gICAgICAg
IHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfMjAyMF8x
MGJpdDsKLSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprMTJCaXRCdDIwMjA6Ci0g
ICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRf
MjAyMF8xMmJpdDsKLSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprU21wdGVTdDIw
ODQ6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6U01QVEVfU1RfMjA4NDsKLSAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprU21w
dGVTdDQyODE6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6U01QVEVfU1RfNDI4XzE7Ci0gICAgY2FzZSBUcmFuc2ZlckNoYXJhY3RlcmlzdGlj
czo6a0FyaWJTdGRCNjdIbGc6Ci0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFuc2Zl
ckNoYXJhY3RlcmlzdGljczo6QlRfMjEwMF9ITEc7CisgICAgYXV0byB0cmFja051bWJlciA9IGJs
b2NrLT50cmFja19udW1iZXI7CisgICAgYXV0byogdHJhY2tEYXRhID0gdHJhY2tEYXRhRm9yVHJh
Y2tOdW1iZXIodHJhY2tOdW1iZXIpOworICAgIGlmICghdHJhY2tEYXRhKSB7CisgICAgICAgIEVS
Uk9SX0xPR19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAiSWdub3JpbmcgdW5rbm93biB0cmFj
ayBudW1iZXIgIiwgdHJhY2tOdW1iZXIpOworICAgICAgICByZXR1cm4gU3RhdHVzKFN0YXR1czo6
a0ludmFsaWRFbGVtZW50SWQpOwogICAgIH0KLX0KIAotc3RhdGljIENGU3RyaW5nUmVmIGNvbnZl
cnRUb0NNVHJhbnNmZXJGdW5jdGlvbih1aW50OF90IGNoYXJhY3RlcmlzdGljcykKLXsKLSAgICBz
d2l0Y2ggKGNoYXJhY3RlcmlzdGljcykgewotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzcwOV82OgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZm
ZXJUcmFuc2ZlckZ1bmN0aW9uX0lUVV9SXzcwOV8yOwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9u
VHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzI0MDoKLSAgICAgICAgcmV0dXJuIGtD
VkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbl9TTVBURV8yNDBNXzE5OTU7Ci0gICAgY2FzZSBW
UENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6U01QVEVfU1RfMjA4NDoKLSAg
ICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9TTVBURV9T
VF8yMDg0X1BROwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OkJUXzIwMjBfMTBiaXQ6Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25UcmFuc2ZlckNoYXJh
Y3RlcmlzdGljczo6QlRfMjAyMF8xMmJpdDoKLSAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2Ny
aXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl8yMDIwOwotICAgIGNhc2UgVlBDb25maWd1cmF0
aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlNNUFRFX1NUXzQyOF8xOgotICAgICAgICByZXR1
cm4ga0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9uX1NNUFRFX1NUXzQyOF8xOwot
ICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIxMDBf
SExHOgotICAgICAgICByZXR1cm4ga0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9u
X0lUVV9SXzIxMDBfSExHOwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0
ZXJpc3RpY3M6OklFQ182MTk2Nl8yXzE6Ci0gICAgICAgIHJldHVybiBQQUw6OmNhbkxvYWRfQ29y
ZU1lZGlhX2tDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9zUkdCKCkgPyBnZXRf
Q29yZU1lZGlhX2tDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlvbl9zUkdCKCkgOiBu
dWxscHRyOwotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OkxpbmVhcjoKLSAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5j
dGlvbl9MaW5lYXI7CisgICAgc3dpdGNoICh0cmFja0RhdGEtPmNvZGVjKCkpIHsKKyAgICBjYXNl
IENvZGVjVHlwZTo6VlA5OgorICAgIGNhc2UgQ29kZWNUeXBlOjpWb3JiaXM6CisgICAgY2FzZSBD
b2RlY1R5cGU6Ok9wdXM6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDb2RlY1R5cGU6OlVu
c3VwcG9ydGVkOgorICAgICAgICByZXR1cm4gU2tpcChyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gdHJhY2tEYXRhLT5jb25z
dW1lRnJhbWVEYXRhKCpyZWFkZXIsIG1ldGFkYXRhLCBieXRlc1JlbWFpbmluZywgQ01UaW1lTWFr
ZShibG9jay0+dGltZWNvZGUgKyBtX2N1cnJlbnRUaW1lY29kZSwgbV90aW1lc2NhbGUpLCBibG9j
ay0+bnVtX2ZyYW1lcyk7CiB9CiAKLXN0YXRpYyB1aW50OF90IGNvbnZlcnRUb01hdHJpeENvZWZm
aWNpZW50cyhjb25zdCBNYXRyaXhDb2VmZmljaWVudHMmIGNvZWZmaWNpZW50cykKK3ZvaWQgU291
cmNlQnVmZmVyUGFyc2VyV2ViTTo6cHJvdmlkZU1lZGlhRGF0YShSZXRhaW5QdHI8Q01TYW1wbGVC
dWZmZXJSZWY+IHNhbXBsZUJ1ZmZlciwgdWludDY0X3QgdHJhY2tJRCkKIHsKLSAgICBzd2l0Y2gg
KGNvZWZmaWNpZW50cykgewotICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprUmdiOgotICAg
ICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpJZGVudGl0eTsK
LSAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a0J0NzA5OgotICAgICAgICByZXR1cm4gVlBD
b25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF83MDlfNjsKLSAgICBjYXNlIE1hdHJp
eENvZWZmaWNpZW50czo6a1Vuc3BlY2lmaWVkOgotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0
aW9uTWF0cml4Q29lZmZpY2llbnRzOjpVbnNwZWNpZmllZDsKLSAgICBjYXNlIE1hdHJpeENvZWZm
aWNpZW50czo6a0ZjYzoKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZm
aWNpZW50czo6RkNDOwotICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprQnQ0NzBCZzoKLSAg
ICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfNDcwXzdf
Qkc7Ci0gICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtTbXB0ZTE3ME06Ci0gICAgICAgIHJl
dHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzYwMV83OwotICAgIGNh
c2UgTWF0cml4Q29lZmZpY2llbnRzOjprU21wdGUyNDBNOgotICAgICAgICByZXR1cm4gVlBDb25m
aWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpTTVBURV9TVF8yNDA7Ci0gICAgY2FzZSBNYXRy
aXhDb2VmZmljaWVudHM6OmtZQ2dDbzoKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1h
dHJpeENvZWZmaWNpZW50czo6WUNnQ287Ci0gICAgY2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtC
dDIwMjBOb25jb25zdGFudEx1bWluYW5jZToKLSAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlv
bk1hdHJpeENvZWZmaWNpZW50czo6QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U7Ci0gICAg
Y2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtCdDIwMjBDb25zdGFudEx1bWluYW5jZToKLSAgICAg
ICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfMjAyMF9Db25z
dGFudF9MdW1pbmFuY2U7Ci0gICAgfQorICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgc2FtcGxlQnVmZmVyID0gV1RGTW92ZShzYW1wbGVC
dWZmZXIpLCB0cmFja0lEXSAoKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKCFtX2RpZFByb3ZpZGVN
ZWRpYURhdGFDYWxsYmFjaykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIG1l
ZGlhU2FtcGxlID0gTWVkaWFTYW1wbGVBVkZPYmpDOjpjcmVhdGUoc2FtcGxlQnVmZmVyLmdldCgp
LCB0cmFja0lEKTsKKyAgICAgICAgbV9kaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2soV1RGTW92
ZShtZWRpYVNhbXBsZSksIHRyYWNrSUQsIGVtcHR5U3RyaW5nKCkpOworICAgIH0pOwogfQogCi1z
dGF0aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRvQ01ZQ2JDUk1hdHJpeCh1aW50OF90IGNvZWZmaWNp
ZW50cykKKyNkZWZpbmUgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSguLi4pIGlmIChwYXJz
ZXIoKS5sb2dnZXJQdHIoKSkgcGFyc2VyKCkubG9nZ2VyUHRyKCktPmVycm9yKGxvZ0NoYW5uZWwo
KSwgV1RGOjpMb2dnZXI6OkxvZ1NpdGVJZGVudGlmaWVyKGxvZ0NsYXNzTmFtZSgpLCBfX2Z1bmNf
XywgcGFyc2VyKCkubG9nSWRlbnRpZmllcigpKSwgX19WQV9BUkdTX18pCisKK3dlYm06OlN0YXR1
cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpWaWRlb1RyYWNrRGF0YTo6Y29uc3VtZUZyYW1lRGF0
YSh3ZWJtOjpSZWFkZXImIHJlYWRlciwgY29uc3QgRnJhbWVNZXRhZGF0YSYgbWV0YWRhdGEsIHVp
bnQ2NF90KiBieXRlc1JlbWFpbmluZywgY29uc3QgQ01UaW1lJiBwcmVzZW50YXRpb25UaW1lLCBp
bnQgc2FtcGxlQ291bnQpCiB7Ci0gICAgc3dpdGNoIChjb2VmZmljaWVudHMpIHsKLSAgICBjYXNl
IFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfMjAyMF9Ob25jb25zdGFudF9M
dW1pbmFuY2U6Ci0gICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvbllDYkNyTWF0cml4
X0lUVV9SXzIwMjA7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6
OkJUXzQ3MF83X0JHOgotICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRz
OjpCVF82MDFfNzoKLSAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyWUNiQ3JNYXRyaXhfSVRV
X1JfNjAxXzQ7Ci0gICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJU
XzcwOV82OgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9JVFVfUl83
MDlfMjsKLSAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6U01QVEVf
U1RfMjQwOgotICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JDck1hdHJpeF9TTVBURV8y
NDBNXzE5OTU7Ci0gICAgfQorI2lmIEVOQUJMRShWUDkpCisgICAgQ01CbG9ja0J1ZmZlclJlZiBy
YXdCbG9ja0J1ZmZlciA9IG51bGxwdHI7CiAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KKyAgICBp
ZiAoIW1fY3VycmVudEJsb2NrQnVmZmVyKSB7CisgICAgICAgIGF1dG8gZXJyID0gQ01CbG9ja0J1
ZmZlckNyZWF0ZVdpdGhNZW1vcnlCbG9jayhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBudWxscHRyLCBt
ZXRhZGF0YS5zaXplLCBrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBudWxscHRyLCAwLCBtZXRhZGF0YS5z
aXplLCAwLCAmcmF3QmxvY2tCdWZmZXIpOworICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAg
ICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUJsb2NrQnVmZmVyQ3JlYXRlV2l0aE1l
bW9yeUJsb2NrIGZhaWxlZCB3aXRoIGVycm9yIiwgZXJyKTsKKyAgICAgICAgICAgIHJldHVybiBT
a2lwKCZyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKKyAgICAgICAgfQogCi1zdGF0aWMgdWludDhf
dCBjb252ZXJ0U3Vic2FtcGxpbmdYWVRvQ2hyb21hU3Vic2FtcGxpbmcodWludDY0X3QgeCwgdWlu
dDY0X3QgeSkKLXsKLSAgICBpZiAoeCAmIHkpCi0gICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRp
b25DaHJvbWFTdWJzYW1wbGluZzo6U3Vic2FtcGxpbmdfNDIwX0NvbG9jYXRlZDsKLSAgICBpZiAo
eCAmICF5KQotICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ2hyb21hU3Vic2FtcGxpbmc6
OlN1YnNhbXBsaW5nXzQyMjsKLSAgICBpZiAoIXggJiAheSkKLSAgICAgICAgcmV0dXJuIFZQQ29u
ZmlndXJhdGlvbkNocm9tYVN1YnNhbXBsaW5nOjpTdWJzYW1wbGluZ180NDQ7Ci0gICAgLy8gVGhp
cyBpbmRpY2F0ZXMgNDo0OjAgc3Vic2FtcGxpbmcsIHdoaWNoIGlzIG5vdCBleHByZXNzYWJsZSBp
biB0aGUgJ3ZwY0MnIGJveC4gRGVmYXVsdCB0byA0OjI6MC4KLSAgICByZXR1cm4gVlBDb25maWd1
cmF0aW9uQ2hyb21hU3Vic2FtcGxpbmc6OlN1YnNhbXBsaW5nXzQyMF9Db2xvY2F0ZWQ7Ci19Cisg
ICAgICAgIG1fY3VycmVudEJsb2NrQnVmZmVyID0gYWRvcHRDRihyYXdCbG9ja0J1ZmZlcik7Cisg
ICAgICAgIG1fY3VycmVudEJsb2NrQnVmZmVyUG9zaXRpb24gPSAwOwogCi1zdGF0aWMgUmV0YWlu
UHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQ
OUhlYWRlclBhcnNlcihjb25zdCB2cDlfcGFyc2VyOjpWcDlIZWFkZXJQYXJzZXImIHBhcnNlciwg
Y29uc3Qgd2VibTo6RWxlbWVudDxDb2xvdXI+JiBjb2xvcikKLXsKLSAgICAvLyBSZWY6ICJWUCBD
b2RlYyBJU08gTWVkaWEgRmlsZSBGb3JtYXQgQmluZGluZywgdjEuMCwgMjAxNy0wMy0zMSIKLSAg
ICAvLyA8aHR0cHM6Ly93d3cud2VibXByb2plY3Qub3JnL3ZwOS9tcDQvPgotICAgIC8vCi0gICAg
Ly8gY2xhc3MgVlBDb2RlY0NvbmZpZ3VyYXRpb25Cb3ggZXh0ZW5kcyBGdWxsQm94KCd2cGNDJywg
dmVyc2lvbiA9IDEsIDApCi0gICAgLy8gewotICAgIC8vICAgICBWUENvZGVjQ29uZmlndXJhdGlv
blJlY29yZCgpIHZwY0NvbmZpZzsKLSAgICAvLyB9Ci0gICAgLy8KLSAgICAvLyBhbGlnbmVkICg4
KSBjbGFzcyBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCB7Ci0gICAgLy8gICAgIHVuc2lnbmVk
IGludCAoOCkgICAgIHByb2ZpbGU7Ci0gICAgLy8gICAgIHVuc2lnbmVkIGludCAoOCkgICAgIGxl
dmVsOwotICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDQpICAgICBiaXREZXB0aDsKLSAgICAvLyAg
ICAgdW5zaWduZWQgaW50ICgzKSAgICAgY2hyb21hU3Vic2FtcGxpbmc7Ci0gICAgLy8gICAgIHVu
c2lnbmVkIGludCAoMSkgICAgIHZpZGVvRnVsbFJhbmdlRmxhZzsKLSAgICAvLyAgICAgdW5zaWdu
ZWQgaW50ICg4KSAgICAgY29sb3VyUHJpbWFyaWVzOwotICAgIC8vICAgICB1bnNpZ25lZCBpbnQg
KDgpICAgICB0cmFuc2ZlckNoYXJhY3RlcmlzdGljczsKLSAgICAvLyAgICAgdW5zaWduZWQgaW50
ICg4KSAgICAgbWF0cml4Q29lZmZpY2llbnRzOwotICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDE2
KSAgICBjb2RlY0ludGlhbGl6YXRpb25EYXRhU2l6ZTsKLSAgICAvLyAgICAgdW5zaWduZWQgaW50
ICg4KVtdICAgY29kZWNJbnRpYWxpemF0aW9uRGF0YTsKLSAgICAvLyB9Ci0gICAgLy8KLSAgICAv
LyBjb2RlY0ludGlhbGl6YXRpb25EYXRhU2l6ZeKAi0ZvciBWUDggYW5kIFZQOSB0aGlzIGZpZWxk
IG11c3QgYmUgMC4KLSAgICAvLyBjb2RlY0ludGlhbGl6YXRpb25EYXRh4oCLYmluYXJ5IGNvZGVj
IGluaXRpYWxpemF0aW9uIGRhdGEuIE5vdCB1c2VkIGZvciBWUDggYW5kIFZQOS4KLSAgICAvLwot
ICAgIC8vIEZJWE1FOiBDb252ZXJ0IGV4aXN0aW5nIHN0cnVjdCB0byBhbiBJU09Cb3ggYW5kIHJl
cGxhY2UgdGhlIHdyaXRpbmcgY29kZSBiZWxvdwotICAgIC8vIHdpdGggYSBzdWJjbGFzcyBvZiBJ
U09GdWxsQm94LgotCi0gICAgVlBDb2RlY0NvbmZpZ3VyYXRpb25SZWNvcmQgcmVjb3JkOwotCi0g
ICAgcmVjb3JkLnByb2ZpbGUgPSBwYXJzZXIucHJvZmlsZSgpOwotICAgIC8vIENvcmVNZWRpYSBk
b2VzIG5hdCBjYXJlIGFib3V0IHRoZSBWUDkgY29kZWMgbGV2ZWw7IGhhcmQtY29kZSB0byBMZXZl
bCAxLjAgaGVyZToKLSAgICByZWNvcmQubGV2ZWwgPSAxMDsKLSAgICByZWNvcmQuYml0RGVwdGgg
PSBwYXJzZXIuYml0X2RlcHRoKCk7Ci0gICAgcmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxhZyA9IHBh
cnNlci5jb2xvcl9yYW5nZSgpID8gVlBDb25maWd1cmF0aW9uUmFuZ2U6OkZ1bGxSYW5nZSA6IFZQ
Q29uZmlndXJhdGlvblJhbmdlOjpWaWRlb1JhbmdlOwotICAgIHJlY29yZC5jaHJvbWFTdWJzYW1w
bGluZyA9IGNvbnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJzYW1wbGluZyhwYXJzZXIuc3Vi
c2FtcGxpbmdfeCgpLCBwYXJzZXIuc3Vic2FtcGxpbmdfeSgpKTsKLSAgICByZWNvcmQuY29sb3JQ
cmltYXJpZXMgPSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6VW5zcGVjaWZpZWQ7Ci0g
ICAgcmVjb3JkLnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzID0gVlBDb25maWd1cmF0aW9uVHJhbnNm
ZXJDaGFyYWN0ZXJpc3RpY3M6OlVuc3BlY2lmaWVkOwotICAgIHJlY29yZC5tYXRyaXhDb2VmZmlj
aWVudHMgPSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OlVuc3BlY2lmaWVkOwot
Ci0gICAgLy8gQ29udGFpbmVyIGNvbG9yIHZhbHVlcyBjYW4gb3ZlcnJpZGUgcGVyLXNhbXBsZSBv
bmVzOgotICAgIGlmIChjb2xvci5pc19wcmVzZW50KCkpIHsKLSAgICAgICAgYXV0byYgY29sb3JW
YWx1ZSA9IGNvbG9yLnZhbHVlKCk7Ci0gICAgICAgIGlmIChjb2xvclZhbHVlLmNocm9tYV9zdWJz
YW1wbGluZ194LmlzX3ByZXNlbnQoKSAmJiBjb2xvclZhbHVlLmNocm9tYV9zdWJzYW1wbGluZ195
LmlzX3ByZXNlbnQoKSkKLSAgICAgICAgICAgIHJlY29yZC5jaHJvbWFTdWJzYW1wbGluZyA9IGNv
bnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJzYW1wbGluZyhjb2xvclZhbHVlLmNocm9tYV9z
dWJzYW1wbGluZ194LnZhbHVlKCksIGNvbG9yVmFsdWUuY2hyb21hX3N1YnNhbXBsaW5nX3kudmFs
dWUoKSk7Ci0gICAgICAgIGlmIChjb2xvclZhbHVlLnJhbmdlLmlzX3ByZXNlbnQoKSAmJiBjb2xv
clZhbHVlLnJhbmdlLnZhbHVlKCkgIT0gUmFuZ2U6OmtVbnNwZWNpZmllZCkKLSAgICAgICAgICAg
IHJlY29yZC52aWRlb0Z1bGxSYW5nZUZsYWcgPSBjb2xvclZhbHVlLnJhbmdlLnZhbHVlKCkgPT0g
UmFuZ2U6OmtGdWxsID8gVlBDb25maWd1cmF0aW9uUmFuZ2U6OkZ1bGxSYW5nZSA6IFZQQ29uZmln
dXJhdGlvblJhbmdlOjpWaWRlb1JhbmdlOwotICAgICAgICBpZiAoY29sb3JWYWx1ZS5iaXRzX3Bl
cl9jaGFubmVsLmlzX3ByZXNlbnQoKSkKLSAgICAgICAgICAgIHJlY29yZC5iaXREZXB0aCA9IGNv
bG9yVmFsdWUuYml0c19wZXJfY2hhbm5lbC52YWx1ZSgpOwotICAgICAgICBpZiAoY29sb3JWYWx1
ZS50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MuaXNfcHJlc2VudCgpKQotICAgICAgICAgICAgcmVj
b3JkLnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzID0gY29udmVydFRvVHJhbnNmZXJDaGFyYWN0ZXJp
c3RpY3MoY29sb3JWYWx1ZS50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MudmFsdWUoKSk7Ci0gICAg
ICAgIGlmIChjb2xvclZhbHVlLm1hdHJpeF9jb2VmZmljaWVudHMuaXNfcHJlc2VudCgpKQotICAg
ICAgICAgICAgcmVjb3JkLm1hdHJpeENvZWZmaWNpZW50cyA9IGNvbnZlcnRUb01hdHJpeENvZWZm
aWNpZW50cyhjb2xvclZhbHVlLm1hdHJpeF9jb2VmZmljaWVudHMudmFsdWUoKSk7Ci0gICAgICAg
IGlmIChjb2xvclZhbHVlLnByaW1hcmllcy5pc19wcmVzZW50KCkpCi0gICAgICAgICAgICByZWNv
cmQuY29sb3JQcmltYXJpZXMgPSBjb252ZXJ0VG9Db2xvclByaW1hcmllcyhjb2xvclZhbHVlLnBy
aW1hcmllcy52YWx1ZSgpKTsKKyAgICAgICAgZXJyID0gQ01CbG9ja0J1ZmZlckFzc3VyZUJsb2Nr
TWVtb3J5KG1fY3VycmVudEJsb2NrQnVmZmVyLmdldCgpKTsKKyAgICAgICAgaWYgKGVycikgewor
ICAgICAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01BdWRpb1NhbXBsZUJ1
ZmZlckNyZWF0ZVdpdGhQYWNrZXREZXNjcmlwdGlvbnMgZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIp
OworICAgICAgICAgICAgcmV0dXJuIFNraXAoJnJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOworICAg
ICAgICB9CiAgICAgfQogCi0gICAgY29uc3RleHByIHNpemVfdCBWUENvZGVjQ29uZmlndXJhdGlv
bkNvbnRlbnRzU2l6ZSA9IDEyOworICAgIHNpemVfdCBieXRlc1RvUmVhZCA9IG1ldGFkYXRhLnNp
emUgLSBtX2N1cnJlbnRCbG9ja0J1ZmZlclBvc2l0aW9uOworICAgIHdoaWxlIChieXRlc1RvUmVh
ZCkgeworICAgICAgICBzaXplX3Qgc2VnbWVudFNpemVBdFBvc2l0aW9uID0gMDsKKyAgICAgICAg
dWludDhfdCogYmxvY2tCdWZmZXJEYXRhID0gbnVsbHB0cjsKKyAgICAgICAgYXV0byBlcnIgPSBD
TUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50ZXIobV9jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCksIG1f
Y3VycmVudEJsb2NrQnVmZmVyUG9zaXRpb24sICZzZWdtZW50U2l6ZUF0UG9zaXRpb24sIG51bGxw
dHIsIChjaGFyKiopJmJsb2NrQnVmZmVyRGF0YSk7CisgICAgICAgIGlmIChlcnIpIHsKKyAgICAg
ICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQmxvY2tCdWZmZXJHZXREYXRh
UG9pbnRlciBmYWlsZWQgd2l0aCBlcnJvciIsIGVycik7CisgICAgICAgICAgICByZXR1cm4gU2tp
cCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CisgICAgICAgIH0KIAotICAgIHVpbnQzMl90IHZl
cnNpb25BbmRGbGFncyA9IDEgPDwgMjQ7Ci0gICAgdWludDhfdCBiaXREZXB0aENocm9tYUFuZFJh
bmdlID0gKDB4RiAmIHJlY29yZC5iaXREZXB0aCkgPDwgNCB8ICgweDcgJiByZWNvcmQuY2hyb21h
U3Vic2FtcGxpbmcpIDw8IDEgfCAoMHgxICYgcmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxhZyk7Ci0g
ICAgdWludDE2X3QgY29kZWNJbnRpYWxpemF0aW9uRGF0YVNpemUgPSAwOworICAgICAgICBzaXpl
X3QgYnl0ZXNUb1JlYWRGcm9tVGhpc1NlZ21lbnQgPSBzdGQ6Om1pbihieXRlc1RvUmVhZCwgc2Vn
bWVudFNpemVBdFBvc2l0aW9uKTsKKyAgICAgICAgdWludDY0X3QgYnl0ZXNSZWFkOwogCi0gICAg
YXV0byB2aWV3ID0gSlNDOjpEYXRhVmlldzo6Y3JlYXRlKEFycmF5QnVmZmVyOjpjcmVhdGUoVlBD
b2RlY0NvbmZpZ3VyYXRpb25Db250ZW50c1NpemUsIDEpLCAwLCBWUENvZGVjQ29uZmlndXJhdGlv
bkNvbnRlbnRzU2l6ZSk7Ci0gICAgdmlldy0+c2V0KDAsIHZlcnNpb25BbmRGbGFncywgZmFsc2Up
OwotICAgIHZpZXctPnNldCg0LCByZWNvcmQucHJvZmlsZSwgZmFsc2UpOwotICAgIHZpZXctPnNl
dCg1LCByZWNvcmQubGV2ZWwsIGZhbHNlKTsKLSAgICB2aWV3LT5zZXQoNiwgYml0RGVwdGhDaHJv
bWFBbmRSYW5nZSwgZmFsc2UpOwotICAgIHZpZXctPnNldCg3LCByZWNvcmQuY29sb3JQcmltYXJp
ZXMsIGZhbHNlKTsKLSAgICB2aWV3LT5zZXQoOCwgcmVjb3JkLnRyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzLCBmYWxzZSk7Ci0gICAgdmlldy0+c2V0KDksIHJlY29yZC5tYXRyaXhDb2VmZmljaWVudHMs
IGZhbHNlKTsKLSAgICB2aWV3LT5zZXQoMTAsIGNvZGVjSW50aWFsaXphdGlvbkRhdGFTaXplLCBm
YWxzZSk7CisgICAgICAgIGF1dG8gc3RhdHVzID0gcmVhZGVyLlJlYWQoYnl0ZXNUb1JlYWRGcm9t
VGhpc1NlZ21lbnQsICh1aW50OF90KilibG9ja0J1ZmZlckRhdGEsICZieXRlc1JlYWQpOworICAg
ICAgICBieXRlc1RvUmVhZCAtPSBieXRlc1JlYWQ7CisgICAgICAgICpieXRlc1JlbWFpbmluZyAt
PSBieXRlc1JlYWQ7CisgICAgICAgIG1fY3VycmVudEJsb2NrQnVmZmVyUG9zaXRpb24gKz0gYnl0
ZXNSZWFkOwogCi0gICAgYXV0byBkYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgKGNvbnN0IFVJbnQ4ICopdmlldy0+ZGF0YSgpLCB2aWV3LT5ieXRlTGVuZ3Ro
KCkpKTsKKyAgICAgICAgLy8gRklYTUU6IFdlIGNhbid0IHlldCBoYW5kbGUgcGFyc2luZyBhIEZy
YW1lIHRoYXQgZG9lc24ndCBoYXZlIGFsbCBpdHMgbWVtb3J5IGF2YWlsYWJsZS4KKyAgICAgICAg
aWYgKHN0YXR1cy5jb2RlID09IHdlYm06OlN0YXR1czo6a09rUGFydGlhbCB8fCBzdGF0dXMuY29k
ZSA9PSB3ZWJtOjpTdGF0dXM6OmtXb3VsZEJsb2NrKQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1
czsKKyAgICB9CiAKLSAgICBDRlR5cGVSZWYgY29uZmlndXJhdGlvbktleXNbXSA9IHsgQ0ZTVFIo
InZwY0MiKSB9OwotICAgIENGVHlwZVJlZiBjb25maWd1cmF0aW9uVmFsdWVzW10gPSB7IGRhdGEu
Z2V0KCkgfTsKLSAgICBhdXRvIGNvbmZpZ3VyYXRpb25EaWN0ID0gYWRvcHRDRihDRkRpY3Rpb25h
cnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgY29uZmlndXJhdGlvbktleXMsIGNvbmZpZ3Vy
YXRpb25WYWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgoY29uZmlndXJhdGlvbktleXMpLCAma0NGVHlw
ZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tz
KSk7CisgICAgY3JlYXRlU2FtcGxlQnVmZmVyKHByZXNlbnRhdGlvblRpbWUsIHNhbXBsZUNvdW50
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKG1ldGFkYXRhKTsKKyAgICBVTlVTRURfUEFSQU0o
cHJlc2VudGF0aW9uVGltZSk7CisgICAgVU5VU0VEX1BBUkFNKHNhbXBsZUNvdW50KTsKKyNlbmRp
ZgogCi0gICAgVmVjdG9yPENGVHlwZVJlZj4gZXh0ZW5zaW9uc0tleXMgeyBrQ01Gb3JtYXREZXNj
cmlwdGlvbkV4dGVuc2lvbl9TYW1wbGVEZXNjcmlwdGlvbkV4dGVuc2lvbkF0b21zIH07Ci0gICAg
VmVjdG9yPENGVHlwZVJlZj4gZXh0ZW5zaW9uc1ZhbHVlcyA9IHsgY29uZmlndXJhdGlvbkRpY3Qu
Z2V0KCkgfTsKKyAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Cit9CiAK
LSAgICBpZiAocmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxhZyA9PSBWUENvbmZpZ3VyYXRpb25SYW5n
ZTo6RnVsbFJhbmdlKSB7Ci0gICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ01Gb3JtYXRE
ZXNjcmlwdGlvbkV4dGVuc2lvbl9GdWxsUmFuZ2VWaWRlbyk7Ci0gICAgICAgIGV4dGVuc2lvbnNW
YWx1ZXMuYXBwZW5kKGtDRkJvb2xlYW5UcnVlKTsKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2Vi
TTo6VmlkZW9UcmFja0RhdGE6OmNyZWF0ZVNhbXBsZUJ1ZmZlcihjb25zdCBDTVRpbWUmIHByZXNl
bnRhdGlvblRpbWUsIGludCBzYW1wbGVDb3VudCkKK3sKKyNpZiBFTkFCTEUoVlA5KQorICAgIHVp
bnQ4X3QqIGJsb2NrQnVmZmVyRGF0YSA9IG51bGxwdHI7CisgICAgc2l6ZV90IHNlZ21lbnRTaXpl
QXRQb3NpdGlvbiA9IDA7CisgICAgYXV0byBlcnIgPSBDTUJsb2NrQnVmZmVyR2V0RGF0YVBvaW50
ZXIobV9jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCksIDAsICZzZWdtZW50U2l6ZUF0UG9zaXRpb24s
IG51bGxwdHIsIChjaGFyKiopJmJsb2NrQnVmZmVyRGF0YSk7CisgICAgaWYgKGVycikgeworICAg
ICAgICBQQVJTRVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTUJsb2NrQnVmZmVyR2V0RGF0YVBv
aW50ZXIgZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIpOworICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKGF1dG8gY21Db2xvclByaW1hcmllcyA9IGNvbnZlcnRUb0NNQ29sb3JQcmltYXJp
ZXMocmVjb3JkLmNvbG9yUHJpbWFyaWVzKSkgewotICAgICAgICBleHRlbnNpb25zS2V5cy5hcHBl
bmQoa0NWSW1hZ2VCdWZmZXJDb2xvclByaW1hcmllc0tleSk7Ci0gICAgICAgIGV4dGVuc2lvbnNW
YWx1ZXMuYXBwZW5kKGNtQ29sb3JQcmltYXJpZXMpOworICAgIGlmICghbV9oZWFkZXJQYXJzZXIu
UGFyc2VVbmNvbXByZXNzZWRIZWFkZXIoYmxvY2tCdWZmZXJEYXRhLCBzZWdtZW50U2l6ZUF0UG9z
aXRpb24pKSB7CisgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIlBhcnNlVW5j
b21wcmVzc2VkSGVhZGVyIGZhaWxlZCIpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKGF1dG8gY21UcmFuc2ZlckZ1bmN0aW9uID0gY29udmVydFRvQ01UcmFuc2ZlckZ1bmN0aW9u
KHJlY29yZC50cmFuc2ZlckNoYXJhY3RlcmlzdGljcykpIHsKLSAgICAgICAgZXh0ZW5zaW9uc0tl
eXMuYXBwZW5kKGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbktleSk7Ci0gICAgICAgIGV4
dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGNtVHJhbnNmZXJGdW5jdGlvbik7CisgICAgLy8gT25seSB1
cGRhdGUgdGhlIGZvcm1hdCBkZXNjcmlwdGlvbiB3aGVuIHRoZSBoZWFkZXIgaW5kaWNhdGVzIHRo
YXQgdGhlIHNhbXBsZSBpcworICAgIC8vIGEga2V5LWZyYW1lLCBvdGhlcndpc2UgY29sb3IgaW5m
b3JtYXRpb24gd2lsbCBub3QgYmUgcGFyc2VkLgorICAgIGF1dG8gdHJhY2sgPSB0aGlzLT50cmFj
aygpOworICAgIGlmIChtX2hlYWRlclBhcnNlci5rZXkoKSkgeworICAgICAgICBhdXRvIGZvcm1h
dERlc2NyaXB0aW9uID0gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5SGVhZGVyUGFyc2Vy
KG1faGVhZGVyUGFyc2VyLCB0cmFjay52aWRlby52YWx1ZSgpLmNvbG91cik7CisgICAgICAgIGlm
ICghZm9ybWF0RGVzY3JpcHRpb24pIHsKKyAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZf
UE9TU0lCTEUoImZhaWxlZCB0byBjcmVhdGUgZm9ybWF0IGRlc2NyaXB0aW9uIGZyb20gVlA5IGhl
YWRlciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHNldEZvcm1h
dERlc2NyaXB0aW9uKFdURk1vdmUoZm9ybWF0RGVzY3JpcHRpb24pKTsKICAgICB9CiAKLSAgICBp
ZiAoYXV0byBjbU1hdHJpeCA9IGNvbnZlcnRUb0NNWUNiQ1JNYXRyaXgocmVjb3JkLm1hdHJpeENv
ZWZmaWNpZW50cykpIHsKLSAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtDVkltYWdlQnVm
ZmVyWUNiQ3JNYXRyaXhLZXkpOwotICAgICAgICBleHRlbnNpb25zVmFsdWVzLmFwcGVuZChjbU1h
dHJpeCk7CisgICAgLy8gRklYTUU6IEEgYmxvY2sgbWlnaHQgY29udGFpbiBtb3JlIHRoYW4gb25l
IGZyYW1lLCBidXQgb25seSB0aGlzIGZyYW1lIGhhcyBiZWVuIHJlYWQgaW50byBgY3VycmVudEJs
b2NrQnVmZmVyYC4KKyAgICAvLyBCZWxvdyB3ZSBjcmVhdGUgc2FtcGxlIGJ1ZmZlcnMgZm9yIGVh
Y2ggZnJhbWUsIGVhY2ggd2l0aCB0aGUgYmxvY2sncyB0aW1lY29kZSBhbmQgYG51bV9mcmFtZXNg
IHZhbHVlLgorICAgIC8vIFNob3VsZG4ndCB3ZSBjcmVhdGUganVzdCBvbmUgc2FtcGxlIGJ1ZmZl
ciBvbmNlIGFsbCB0aGUgYmxvY2sncyBmcmFtZXMgaGF2ZSBiZWVuIHJlYWQgaW50byBgY3VycmVu
dEJsb2NrQnVmZmVyYD8KKworICAgIHVpbnQ2NF90IGR1cmF0aW9uID0gMDsKKyAgICBpZiAodHJh
Y2suZGVmYXVsdF9kdXJhdGlvbi5pc19wcmVzZW50KCkpCisgICAgICAgIGR1cmF0aW9uID0gdHJh
Y2suZGVmYXVsdF9kdXJhdGlvbi52YWx1ZSgpICogcHJlc2VudGF0aW9uVGltZS50aW1lc2NhbGUg
LyAxMDAwMDAwMDAwOworCisgICAgQ01TYW1wbGVCdWZmZXJSZWYgcmF3U2FtcGxlQnVmZmVyID0g
bnVsbHB0cjsKKyAgICBzaXplX3QgZnJhbWVTaXplID0gQ01CbG9ja0J1ZmZlckdldERhdGFMZW5n
dGgobV9jdXJyZW50QmxvY2tCdWZmZXIuZ2V0KCkpOworICAgIENNU2FtcGxlVGltaW5nSW5mbyB0
aW1pbmcgPSB7IENNVGltZU1ha2UoZHVyYXRpb24sIHByZXNlbnRhdGlvblRpbWUudGltZXNjYWxl
KSwgcHJlc2VudGF0aW9uVGltZSwgcHJlc2VudGF0aW9uVGltZSB9OworICAgIGVyciA9IENNU2Ft
cGxlQnVmZmVyQ3JlYXRlUmVhZHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgbV9jdXJyZW50QmxvY2tC
dWZmZXIuZ2V0KCksIGZvcm1hdERlc2NyaXB0aW9uKCkuZ2V0KCksIHNhbXBsZUNvdW50LCAxLCAm
dGltaW5nLCAxLCAmZnJhbWVTaXplLCAmcmF3U2FtcGxlQnVmZmVyKTsKKyAgICBpZiAoZXJyKSB7
CisgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNU2FtcGxlQnVmZmVyQ3Jl
YXRlUmVhZHkgZmFpbGVkIHdpdGggZXJyb3IiLCBlcnIpOworICAgICAgICByZXR1cm47CiAgICAg
fQorICAgIGF1dG8gc2FtcGxlQnVmZmVyID0gYWRvcHRDRihyYXdTYW1wbGVCdWZmZXIpOwogCi0g
ICAgYXV0byBleHRlbnNpb25zID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2Nh
dG9yRGVmYXVsdCwgZXh0ZW5zaW9uc0tleXMuZGF0YSgpLCBleHRlbnNpb25zVmFsdWVzLmRhdGEo
KSwgZXh0ZW5zaW9uc0tleXMuc2l6ZSgpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3Ms
ICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgbV9jdXJyZW50QmxvY2tC
dWZmZXIgPSBudWxscHRyOworICAgIG1fY3VycmVudEJsb2NrQnVmZmVyUG9zaXRpb24gPSAwOwog
Ci0gICAgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uID0gbnVs
bHB0cjsKLSAgICBpZiAobm9FcnIgIT0gQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIGtDTVZpZGVvQ29kZWNUeXBlX1ZQOSwgcGFyc2VyLndpZHRoKCks
IHBhcnNlci5oZWlnaHQoKSwgZXh0ZW5zaW9ucy5nZXQoKSwgJmZvcm1hdERlc2NyaXB0aW9uKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGFkb3B0Q0YoZm9ybWF0RGVzY3Jp
cHRpb24pOworICAgIGlmICghbV9oZWFkZXJQYXJzZXIua2V5KCkpIHsKKyAgICAgICAgYXV0byBh
dHRhY2htZW50c0FycmF5ID0gQ01TYW1wbGVCdWZmZXJHZXRTYW1wbGVBdHRhY2htZW50c0FycmF5
KHNhbXBsZUJ1ZmZlci5nZXQoKSwgdHJ1ZSk7CisgICAgICAgIEFTU0VSVChhdHRhY2htZW50c0Fy
cmF5KTsKKyAgICAgICAgaWYgKCFhdHRhY2htZW50c0FycmF5KSB7CisgICAgICAgICAgICBQQVJT
RVJfTE9HX0VSUk9SX0lGX1BPU1NJQkxFKCJDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1l
bnRzQXJyYXkgcmV0dXJuZWQgTlVMTCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgZm9yIChDRkluZGV4IGkgPSAwLCBjb3VudCA9IENGQXJyYXlHZXRDb3VudChh
dHRhY2htZW50c0FycmF5KTsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgICAgIENGTXV0YWJs
ZURpY3Rpb25hcnlSZWYgYXR0YWNobWVudHMgPSBjaGVja2VkX2NmX2Nhc3Q8Q0ZNdXRhYmxlRGlj
dGlvbmFyeVJlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRleChhdHRhY2htZW50c0FycmF5LCBpKSk7
CisgICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShhdHRhY2htZW50cywga0NNU2FtcGxl
QXR0YWNobWVudEtleV9Ob3RTeW5jLCBrQ0ZCb29sZWFuVHJ1ZSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBhdXRvIHRyYWNrSUQgPSB0cmFjay50cmFja191aWQudmFsdWUoKTsKKyAgICBwYXJz
ZXIoKS5wcm92aWRlTWVkaWFEYXRhKHNhbXBsZUJ1ZmZlci5sZWFrUmVmKCksIHRyYWNrSUQpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ocHJlc2VudGF0aW9uVGltZSk7CisgICAgVU5VU0VEX1BB
UkFNKHNhbXBsZUNvdW50KTsKKyNlbmRpZiAvLyBFTkFCTEUoVlA5KQogfQotI2VuZGlmCiAKLXdl
Ym06OlN0YXR1cyBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpPbkZyYW1lKGNvbnN0IEZyYW1lTWV0
YWRhdGEmIG1ldGFkYXRhLCBSZWFkZXIqIHJlYWRlciwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5n
KQord2VibTo6U3RhdHVzIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpj
b25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYgcmVhZGVyLCBjb25zdCBGcmFtZU1ldGFkYXRh
JiBtZXRhZGF0YSwgdWludDY0X3QqIGJ5dGVzUmVtYWluaW5nLCBjb25zdCBDTVRpbWUmIHByZXNl
bnRhdGlvblRpbWUsIGludCBzYW1wbGVDb3VudCkKIHsKLSAgICBVTlVTRURfUEFSQU0obWV0YWRh
dGEpOwotICAgIFVOVVNFRF9QQVJBTShieXRlc1JlbWFpbmluZyk7CisgICAgQVNTRVJUX1VOVVNF
RChzYW1wbGVDb3VudCwgc2FtcGxlQ291bnQgPT0gMSk7CiAKLSAgICBBU1NFUlQocmVhZGVyKTsK
LSAgICBpZiAoIXJlYWRlcikKLSAgICAgICAgcmV0dXJuIFN0YXR1cyhTdGF0dXM6OmtOb3RFbm91
Z2hNZW1vcnkpOworICAgIGlmICghZm9ybWF0RGVzY3JpcHRpb24oKSkgeworICAgICAgICBpZiAo
IXRyYWNrKCkuY29kZWNfcHJpdmF0ZS5pc19wcmVzZW50KCkpIHsKKyAgICAgICAgICAgIFBBUlNF
Ul9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkF1ZGlvIHRyYWNrIG1pc3NpbmcgbWFnaWMgY29va2ll
Iik7CisgICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Cisg
ICAgICAgIH0KIAotICAgIGlmICghbV9jdXJyZW50QmxvY2spCi0gICAgICAgIHJldHVybiBTdGF0
dXMoU3RhdHVzOjprSW52YWxpZEVsZW1lbnRJZCk7CisgICAgICAgIFJldGFpblB0cjxDTUZvcm1h
dERlc2NyaXB0aW9uUmVmPiBmb3JtYXREZXNjcmlwdGlvbjsKKyAgICAgICAgYXV0byYgcHJpdmF0
ZURhdGEgPSB0cmFjaygpLmNvZGVjX3ByaXZhdGUudmFsdWUoKTsKKyAgICAgICAgaWYgKGNvZGVj
KCkgPT0gQ29kZWNUeXBlOjpWb3JiaXMpCisgICAgICAgICAgICBmb3JtYXREZXNjcmlwdGlvbiA9
IGNyZWF0ZVZvcmJpc0F1ZGlvRm9ybWF0RGVzY3JpcHRpb24ocHJpdmF0ZURhdGEuc2l6ZSgpLCBw
cml2YXRlRGF0YS5kYXRhKCkpOworICAgICAgICBlbHNlIGlmIChjb2RlYygpID09IENvZGVjVHlw
ZTo6T3B1cykKKyAgICAgICAgICAgIGZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlT3B1c0F1ZGlv
Rm9ybWF0RGVzY3JpcHRpb24ocHJpdmF0ZURhdGEuc2l6ZSgpLCBwcml2YXRlRGF0YS5kYXRhKCkp
OwogCi0gICAgYXV0byogYmxvY2sgPSBXVEY6OnN3aXRjaE9uKCptX2N1cnJlbnRCbG9jaywgW10o
QmxvY2smIGJsb2NrKSB7Ci0gICAgICAgIHJldHVybiAmYmxvY2s7Ci0gICAgfSwgW10oU2ltcGxl
QmxvY2smIGJsb2NrKSAtPiBCbG9jayogewotICAgICAgICByZXR1cm4gJmJsb2NrOwotICAgIH0p
OwotICAgIGlmICghYmxvY2spCi0gICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjprSW52YWxp
ZEVsZW1lbnRJZCk7CisgICAgICAgIGlmICghZm9ybWF0RGVzY3JpcHRpb24pIHsKKyAgICAgICAg
ICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkZhaWxlZCB0byBjcmVhdGUgZm9ybWF0
IGRlc2NyaXB0aW9uIGZyb20gYXVkaW8gdHJhY2sgaGVhZGVyIik7CisgICAgICAgICAgICByZXR1
cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CisgICAgICAgIH0KIAotICAgIGF1dG8g
dHJhY2tOdW1iZXIgPSBibG9jay0+dHJhY2tfbnVtYmVyOworICAgICAgICBhdXRvIHN0cmVhbURl
c2NyaXB0aW9uID0gQ01BdWRpb0Zvcm1hdERlc2NyaXB0aW9uR2V0U3RyZWFtQmFzaWNEZXNjcmlw
dGlvbihmb3JtYXREZXNjcmlwdGlvbi5nZXQoKSk7CisgICAgICAgIGlmICghc3RyZWFtRGVzY3Jp
cHRpb24pIHsKKyAgICAgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUoIkNNQXVk
aW9Gb3JtYXREZXNjcmlwdGlvbkdldFN0cmVhbUJhc2ljRGVzY3JpcHRpb24gZmFpbGVkIik7Cisg
ICAgICAgICAgICByZXR1cm4gU2tpcCgmcmVhZGVyLCBieXRlc1JlbWFpbmluZyk7CisgICAgICAg
IH0KKyAgICAgICAgbV9wYWNrZXREdXJhdGlvbiA9IENNVGltZU1ha2Uoc3RyZWFtRGVzY3JpcHRp
b24tPm1GcmFtZXNQZXJQYWNrZXQsIHN0cmVhbURlc2NyaXB0aW9uLT5tU2FtcGxlUmF0ZSk7CiAK
LSAgICBhdXRvKiB0cmFja0RhdGEgPSB0cmFja0RhdGFGb3JUcmFja051bWJlcih0cmFja051bWJl
cik7Ci0gICAgaWYgKCF0cmFja0RhdGEpCi0gICAgICAgIHJldHVybiBTdGF0dXMoU3RhdHVzOjpr
SW52YWxpZEVsZW1lbnRJZCk7Ci0gICAgYXV0byYgdHJhY2sgPSB0cmFja0RhdGEtPnRyYWNrOwor
ICAgICAgICBzZXRGb3JtYXREZXNjcmlwdGlvbihXVEZNb3ZlKGZvcm1hdERlc2NyaXB0aW9uKSk7
CisgICAgfQogCi0gICAgdWludDY0X3QgZHVyYXRpb24gPSAwOwotICAgIGlmICh0cmFjay5kZWZh
dWx0X2R1cmF0aW9uLmlzX3ByZXNlbnQoKSkKLSAgICAgICAgZHVyYXRpb24gPSB0cmFjay5kZWZh
dWx0X2R1cmF0aW9uLnZhbHVlKCkgKiBtX3RpbWVzY2FsZSAvIDEwMDAwMDAwMDA7CisgICAgaWYg
KG1fcGFja2V0RGF0YS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9wYWNrZXREYXRhLnJlc2l6ZSht
ZXRhZGF0YS5zaXplKTsKKyAgICAgICAgbV9wYWNrZXRCeXRlc1JlYWQgPSAwOworICAgICAgICBt
X2J5dGVPZmZzZXQgPSBtZXRhZGF0YS5wb3NpdGlvbjsKKyAgICAgICAgbV9zYW1wbGVQcmVzZW50
YXRpb25UaW1lID0gcHJlc2VudGF0aW9uVGltZTsKKyAgICB9CiAKLSNpZiBFTkFCTEUoVlA5KQot
ICAgIGlmICh0cmFjay5jb2RlY19pZC5pc19wcmVzZW50KCkgJiYgdHJhY2suY29kZWNfaWQudmFs
dWUoKSA9PSAiVl9WUDkiKSB7Ci0gICAgICAgIGlmICghdHJhY2tEYXRhLT5jdXJyZW50QmxvY2tC
dWZmZXIpIHsKLSAgICAgICAgICAgIENNQmxvY2tCdWZmZXJSZWYgcmF3QmxvY2tCdWZmZXIgPSBu
dWxscHRyOwotICAgICAgICAgICAgaWYgKG5vRXJyICE9IENNQmxvY2tCdWZmZXJDcmVhdGVXaXRo
TWVtb3J5QmxvY2soa0NGQWxsb2NhdG9yRGVmYXVsdCwgbnVsbHB0ciwgbWV0YWRhdGEuc2l6ZSwg
a0NGQWxsb2NhdG9yRGVmYXVsdCwgbnVsbHB0ciwgMCwgbWV0YWRhdGEuc2l6ZSwgMCwgJnJhd0Js
b2NrQnVmZmVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gU2tpcChyZWFkZXIsIGJ5dGVzUmVt
YWluaW5nKTsKLSAgICAgICAgICAgIHRyYWNrRGF0YS0+Y3VycmVudEJsb2NrQnVmZmVyID0gYWRv
cHRDRihyYXdCbG9ja0J1ZmZlcik7Ci0gICAgICAgICAgICB0cmFja0RhdGEtPmN1cnJlbnRCbG9j
a0J1ZmZlclBvc2l0aW9uID0gMDsKLQotICAgICAgICAgICAgaWYgKG5vRXJyICE9IENNQmxvY2tC
dWZmZXJBc3N1cmVCbG9ja01lbW9yeSh0cmFja0RhdGEtPmN1cnJlbnRCbG9ja0J1ZmZlci5nZXQo
KSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNraXAocmVhZGVyLCBieXRlc1JlbWFpbmluZyk7
Ci0gICAgICAgIH0KKyAgICBzaXplX3QgcGFja2V0RGF0YU9mZnNldCA9IG1fcGFja2V0Qnl0ZXNS
ZWFkOworICAgIHNpemVfdCBieXRlc1RvUmVhZCA9IG1ldGFkYXRhLnNpemU7CisgICAgd2hpbGUg
KGJ5dGVzVG9SZWFkKSB7CisgICAgICAgIHVpbnQ2NF90IGJ5dGVzUmVhZDsKKyAgICAgICAgYXV0
byBzdGF0dXMgPSByZWFkZXIuUmVhZChieXRlc1RvUmVhZCwgbV9wYWNrZXREYXRhLmRhdGEoKSAr
IG1fcGFja2V0Qnl0ZXNSZWFkLCAmYnl0ZXNSZWFkKTsKKyAgICAgICAgYnl0ZXNUb1JlYWQgLT0g
Ynl0ZXNSZWFkOworICAgICAgICAqYnl0ZXNSZW1haW5pbmcgLT0gYnl0ZXNSZWFkOworICAgICAg
ICBtX3BhY2tldEJ5dGVzUmVhZCArPSBieXRlc1JlYWQ7CisKKyAgICAgICAgLy8gRklYTUU6IFdl
IGNhbid0IHlldCBoYW5kbGUgcGFyc2luZyBhIEZyYW1lIHRoYXQgZG9lc24ndCBoYXZlIGFsbCBp
dHMgbWVtb3J5IGF2YWlsYWJsZS4KKyAgICAgICAgaWYgKHN0YXR1cy5jb2RlID09IHdlYm06OlN0
YXR1czo6a09rUGFydGlhbCB8fCBzdGF0dXMuY29kZSA9PSB3ZWJtOjpTdGF0dXM6OmtXb3VsZEJs
b2NrKQorICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CiAKLSAgICAgICAgc2l6ZV90
IG51bVRvUmVhZCA9IG1ldGFkYXRhLnNpemUgLSB0cmFja0RhdGEtPmN1cnJlbnRCbG9ja0J1ZmZl
clBvc2l0aW9uOwotICAgICAgICBzaXplX3Qgc2VnbWVudFNpemVBdFBvc2l0aW9uID0gMDsKLSAg
ICAgICAgdWludDhfdCogYmxvY2tCdWZmZXJEYXRhID0gbnVsbHB0cjsKKyAgICBtX3BhY2tldERl
c2NyaXB0aW9ucy5hcHBlbmQoeyBzdGF0aWNfY2FzdDxpbnQ2NF90PihwYWNrZXREYXRhT2Zmc2V0
KSwgMCwgc3RhdGljX2Nhc3Q8VUludDMyPihtZXRhZGF0YS5zaXplKSB9KTsKKyAgICBhdXRvIHNh
bXBsZUR1cmF0aW9uID0gQ01UaW1lR2V0U2Vjb25kcyhDTVRpbWVTdWJ0cmFjdChwcmVzZW50YXRp
b25UaW1lLCBtX3NhbXBsZVByZXNlbnRhdGlvblRpbWUpKSArIENNVGltZUdldFNlY29uZHMobV9w
YWNrZXREdXJhdGlvbik7CisgICAgaWYgKHNhbXBsZUR1cmF0aW9uID49IG1fbWluaW11bVNhbXBs
ZUR1cmF0aW9uKQorICAgICAgICBjcmVhdGVTYW1wbGVCdWZmZXIoKTsKIAotICAgICAgICB3aGls
ZSAobnVtVG9SZWFkKSB7Ci0gICAgICAgICAgICBpZiAobm9FcnIgIT0gQ01CbG9ja0J1ZmZlckdl
dERhdGFQb2ludGVyKHRyYWNrRGF0YS0+Y3VycmVudEJsb2NrQnVmZmVyLmdldCgpLCB0cmFja0Rh
dGEtPmN1cnJlbnRCbG9ja0J1ZmZlclBvc2l0aW9uLCAmc2VnbWVudFNpemVBdFBvc2l0aW9uLCBu
dWxscHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRhdGEpKQotICAgICAgICAgICAgICAgIHJldHVy
biBTa2lwKHJlYWRlciwgYnl0ZXNSZW1haW5pbmcpOworICAgIHJldHVybiBTa2lwKCZyZWFkZXIs
IGJ5dGVzUmVtYWluaW5nKTsKK30KIAotICAgICAgICAgICAgc2l6ZV90IG51bVRvUmVhZEZyb21U
aGlzU2VnbWVudCA9IHN0ZDo6bWluKG51bVRvUmVhZCwgc2VnbWVudFNpemVBdFBvc2l0aW9uKTsK
LSAgICAgICAgICAgIHVpbnQ2NF90IG51bUFjdHVhbGx5V3JpdHRlblRvVGhpc1NlZ21lbnQ7Cit2
b2lkIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk06OkF1ZGlvVHJhY2tEYXRhOjpjcmVhdGVTYW1wbGVC
dWZmZXIoKQoreworICAgIGlmIChtX3BhY2tldERlc2NyaXB0aW9ucy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKIAotICAgICAgICAgICAgYXV0byBzdGF0dXMgPSBtX3JlYWRlci0+UmVhZChu
dW1Ub1JlYWRGcm9tVGhpc1NlZ21lbnQsICh1aW50OF90KilibG9ja0J1ZmZlckRhdGEsICZudW1B
Y3R1YWxseVdyaXR0ZW5Ub1RoaXNTZWdtZW50KTsKLSAgICAgICAgICAgIG51bVRvUmVhZCAtPSBu
dW1BY3R1YWxseVdyaXR0ZW5Ub1RoaXNTZWdtZW50OwotICAgICAgICAgICAgKmJ5dGVzUmVtYWlu
aW5nIC09IG51bUFjdHVhbGx5V3JpdHRlblRvVGhpc1NlZ21lbnQ7Ci0gICAgICAgICAgICB0cmFj
a0RhdGEtPmN1cnJlbnRCbG9ja0J1ZmZlclBvc2l0aW9uICs9IG51bUFjdHVhbGx5V3JpdHRlblRv
VGhpc1NlZ21lbnQ7CisgICAgQVNTRVJUKCFtX3BhY2tldERhdGEuaXNFbXB0eSgpKTsKIAotICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIGNhbid0IHlldCBoYW5kbGUgcGFyc2luZyBhIEZyYW1lIHRo
YXQgZG9lc24ndCBoYXZlIGFsbCBpdHMgbWVtb3J5IGF2YWlsYWJsZS4KLSAgICAgICAgICAgIGlm
IChzdGF0dXMuY29kZSA9PSB3ZWJtOjpTdGF0dXM6OmtPa1BhcnRpYWwgfHwgc3RhdHVzLmNvZGUg
PT0gd2VibTo6U3RhdHVzOjprV291bGRCbG9jaykKLSAgICAgICAgICAgICAgICByZXR1cm4gc3Rh
dHVzOwotICAgICAgICB9CisgICAgQ01CbG9ja0J1ZmZlclJlZiBibG9ja0J1ZmZlciA9IG51bGxw
dHI7CisgICAgYXV0byBlcnIgPSBDTUJsb2NrQnVmZmVyQ3JlYXRlV2l0aE1lbW9yeUJsb2NrKGtD
RkFsbG9jYXRvckRlZmF1bHQsIG51bGxwdHIsIG1fcGFja2V0RGF0YS5zaXplSW5CeXRlcygpLCBr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBudWxscHRyLCAwLCBtX3BhY2tldERhdGEuc2l6ZUluQnl0ZXMo
KSwga0NNQmxvY2tCdWZmZXJBc3N1cmVNZW1vcnlOb3dGbGFnLCAmYmxvY2tCdWZmZXIpOworICAg
IGlmIChlcnIpIHsKKyAgICAgICAgUEFSU0VSX0xPR19FUlJPUl9JRl9QT1NTSUJMRSgiQ01CbG9j
a0J1ZmZlckNyZWF0ZVdpdGhNZW1vcnlCbG9jayBmYWlsZWQgd2l0aCAlZCIsIGVycik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgYXV0byBidWZmZXIgPSBhZG9wdENGKGJsb2NrQnVmZmVy
KTsKIAotICAgICAgICBpZiAobm9FcnIgIT0gQ01CbG9ja0J1ZmZlckdldERhdGFQb2ludGVyKHRy
YWNrRGF0YS0+Y3VycmVudEJsb2NrQnVmZmVyLmdldCgpLCAwLCAmc2VnbWVudFNpemVBdFBvc2l0
aW9uLCBudWxscHRyLCAoY2hhcioqKSZibG9ja0J1ZmZlckRhdGEpKQotICAgICAgICAgICAgcmV0
dXJuIFNraXAocmVhZGVyLCBieXRlc1JlbWFpbmluZyk7Ci0KLSAgICAgICAgYXV0byYgaGVhZGVy
UGFyc2VyID0gdHJhY2tEYXRhLT5oZWFkZXJQYXJzZXI7Ci0gICAgICAgIGlmICghaGVhZGVyUGFy
c2VyLlBhcnNlVW5jb21wcmVzc2VkSGVhZGVyKGJsb2NrQnVmZmVyRGF0YSwgc2VnbWVudFNpemVB
dFBvc2l0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBTa2lwKHJlYWRlciwgYnl0ZXNSZW1haW5p
bmcpOwotCi0gICAgICAgIC8vIE9ubHkgdXBkYXRlIHRoZSBmb3JtYXQgZGVzY3JpcHRpb24gd2hl
biB0aGUgaGVhZGVyIGluZGljYXRlcyB0aGF0IHRoZSBzYW1wbGUgaXMKLSAgICAgICAgLy8gYSBr
ZXktZnJhbWUsIG90aGVyd2lzZSBjb2xvciBpbmZvcm1hdGlvbiB3aWxsIG5vdCBiZSBwYXJzZWQu
Ci0gICAgICAgIGlmIChoZWFkZXJQYXJzZXIua2V5KCkpCi0gICAgICAgICAgICB0cmFja0RhdGEt
PmZvcm1hdERlc2NyaXB0aW9uID0gY3JlYXRlRm9ybWF0RGVzY3JpcHRpb25Gcm9tVlA5SGVhZGVy
UGFyc2VyKGhlYWRlclBhcnNlciwgdHJhY2sudmlkZW8udmFsdWUoKS5jb2xvdXIpOwotICAgICAg
ICBpZiAoIXRyYWNrRGF0YS0+Zm9ybWF0RGVzY3JpcHRpb24pCi0gICAgICAgICAgICByZXR1cm4g
U2tpcChyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLQotICAgICAgICBhdXRvIHB0cyA9IENNVGlt
ZU1ha2UoYmxvY2stPnRpbWVjb2RlICsgbV9jdXJyZW50VGltZWNvZGUsIG1fdGltZXNjYWxlKTsK
LSAgICAgICAgQ01TYW1wbGVUaW1pbmdJbmZvIHRpbWluZyA9IHsgQ01UaW1lTWFrZShkdXJhdGlv
biwgbV90aW1lc2NhbGUpLCBwdHMsIHB0cyB9OwotICAgICAgICBzaXplX3Qgc2l6ZSA9IG1ldGFk
YXRhLnNpemU7Ci0KLSAgICAgICAgYXV0byBzYW1wbGVDb3VudCA9IGJsb2NrLT5udW1fZnJhbWVz
OwotICAgICAgICBDTVNhbXBsZUJ1ZmZlclJlZiByYXdTYW1wbGVCdWZmZXIgPSBudWxscHRyOwot
ICAgICAgICBpZiAobm9FcnIgIT0gQ01TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCB0cmFja0RhdGEtPmN1cnJlbnRCbG9ja0J1ZmZlci5nZXQoKSwgdHJhY2tEYXRh
LT5mb3JtYXREZXNjcmlwdGlvbi5nZXQoKSwgc2FtcGxlQ291bnQsIDEsICZ0aW1pbmcsIDEsICZz
aXplLCAmcmF3U2FtcGxlQnVmZmVyKSkKLSAgICAgICAgICAgIHJldHVybiBTa2lwKHJlYWRlciwg
Ynl0ZXNSZW1haW5pbmcpOwotICAgICAgICBhdXRvIHNhbXBsZUJ1ZmZlciA9IGFkb3B0Q0YocmF3
U2FtcGxlQnVmZmVyKTsKLQotICAgICAgICB0cmFja0RhdGEtPmN1cnJlbnRCbG9ja0J1ZmZlciA9
IG51bGxwdHI7Ci0gICAgICAgIHRyYWNrRGF0YS0+Y3VycmVudEJsb2NrQnVmZmVyUG9zaXRpb24g
PSAwOwotCi0gICAgICAgIGlmICghaGVhZGVyUGFyc2VyLmtleSgpKSB7Ci0gICAgICAgICAgICBh
dXRvIGF0dGFjaG1lbnRzQXJyYXkgPSBDTVNhbXBsZUJ1ZmZlckdldFNhbXBsZUF0dGFjaG1lbnRz
QXJyYXkoc2FtcGxlQnVmZmVyLmdldCgpLCB0cnVlKTsKLSAgICAgICAgICAgIEFTU0VSVChhdHRh
Y2htZW50c0FycmF5KTsKLSAgICAgICAgICAgIGlmICghYXR0YWNobWVudHNBcnJheSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gU2tpcChyZWFkZXIsIGJ5dGVzUmVtYWluaW5nKTsKLSAgICAgICAg
ICAgIGZvciAoQ0ZJbmRleCBpID0gMCwgY291bnQgPSBDRkFycmF5R2V0Q291bnQoYXR0YWNobWVu
dHNBcnJheSk7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgQ0ZNdXRhYmxlRGlj
dGlvbmFyeVJlZiBhdHRhY2htZW50cyA9IGNoZWNrZWRfY2ZfY2FzdDxDRk11dGFibGVEaWN0aW9u
YXJ5UmVmPihDRkFycmF5R2V0VmFsdWVBdEluZGV4KGF0dGFjaG1lbnRzQXJyYXksIGkpKTsKLSAg
ICAgICAgICAgICAgICBDRkRpY3Rpb25hcnlTZXRWYWx1ZShhdHRhY2htZW50cywga0NNU2FtcGxl
QXR0YWNobWVudEtleV9Ob3RTeW5jLCBrQ0ZCb29sZWFuVHJ1ZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KKyAgICBlcnIgPSBDTUJsb2NrQnVmZmVyUmVwbGFjZURhdGFCeXRlcyhtX3BhY2tl
dERhdGEuZGF0YSgpLCBidWZmZXIuZ2V0KCksIDAsIG1fcGFja2V0RGF0YS5zaXplSW5CeXRlcygp
KTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9TU0lCTEUo
IkNNQmxvY2tCdWZmZXJSZXBsYWNlRGF0YUJ5dGVzIGZhaWxlZCB3aXRoICVkIiwgZXJyKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KIAotICAgICAgICBhdXRvIHRyYWNrSUQgPSB0cmFjay50cmFj
a191aWQudmFsdWUoKTsKKyAgICBDTVNhbXBsZUJ1ZmZlclJlZiByYXdTYW1wbGVCdWZmZXIgPSBu
dWxscHRyOworICAgIGVyciA9IENNQXVkaW9TYW1wbGVCdWZmZXJDcmVhdGVSZWFkeVdpdGhQYWNr
ZXREZXNjcmlwdGlvbnMoa0NGQWxsb2NhdG9yRGVmYXVsdCwgYnVmZmVyLmdldCgpLCBmb3JtYXRE
ZXNjcmlwdGlvbigpLmdldCgpLCBtX3BhY2tldERlc2NyaXB0aW9ucy5zaXplKCksIG1fc2FtcGxl
UHJlc2VudGF0aW9uVGltZSwgbV9wYWNrZXREZXNjcmlwdGlvbnMuZGF0YSgpLCAmcmF3U2FtcGxl
QnVmZmVyKTsKKyAgICBpZiAoZXJyKSB7CisgICAgICAgIFBBUlNFUl9MT0dfRVJST1JfSUZfUE9T
U0lCTEUoIkNNQXVkaW9TYW1wbGVCdWZmZXJDcmVhdGVXaXRoUGFja2V0RGVzY3JpcHRpb25zIGZh
aWxlZCB3aXRoICVkIiwgZXJyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhdXRvIHNh
bXBsZUJ1ZmZlciA9IGFkb3B0Q0YocmF3U2FtcGxlQnVmZmVyKTsKIAotICAgICAgICBjYWxsT25N
YWluVGhyZWFkKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHNhbXBsZUJ1
ZmZlciA9IFdURk1vdmUoc2FtcGxlQnVmZmVyKSwgdHJhY2tJRF0gKCkgbXV0YWJsZSB7Ci0gICAg
ICAgICAgICBpZiAoIW1fZGlkUHJvdmlkZU1lZGlhRGF0YUNhbGxiYWNrKQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIGF1dG8gbWVkaWFTYW1wbGUgPSBNZWRpYVNhbXBsZUFW
Rk9iakM6OmNyZWF0ZShzYW1wbGVCdWZmZXIuZ2V0KCksIHRyYWNrSUQpOwotICAgICAgICAgICAg
bV9kaWRQcm92aWRlTWVkaWFEYXRhQ2FsbGJhY2soV1RGTW92ZShtZWRpYVNhbXBsZSksIHRyYWNr
SUQsIGVtcHR5U3RyaW5nKCkpOwotICAgICAgICB9KTsKKyAgICBtX3BhY2tldERhdGEuY2xlYXIo
KTsKKyAgICBtX3BhY2tldERlc2NyaXB0aW9ucy5jbGVhcigpOworCisgICAgYXV0byB0cmFja0lE
ID0gdHJhY2soKS50cmFja191aWQudmFsdWUoKTsKKyAgICBwYXJzZXIoKS5wcm92aWRlTWVkaWFE
YXRhKHNhbXBsZUJ1ZmZlci5sZWFrUmVmKCksIHRyYWNrSUQpOworfQorCit2b2lkIFNvdXJjZUJ1
ZmZlclBhcnNlcldlYk06OmZsdXNoUGVuZGluZ0F1ZGlvQnVmZmVycygpCit7CisgICAgZm9yIChh
dXRvJiB0cmFjayA6IG1fdHJhY2tzKSB7CisgICAgICAgIGlmICh0cmFjay0+dHJhY2tUeXBlKCkg
PT0gU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhOjpUeXBlOjpBdWRpbykKKyAgICAg
ICAgICAgIGRvd25jYXN0PEF1ZGlvVHJhY2tEYXRhPih0cmFjay5nZXQoKSkuY3JlYXRlU2FtcGxl
QnVmZmVyKCk7CiAgICAgfQotI2VuZGlmCit9CiAKLSAgICByZXR1cm4gU2tpcChyZWFkZXIsIGJ5
dGVzUmVtYWluaW5nKTsKK3ZvaWQgU291cmNlQnVmZmVyUGFyc2VyV2ViTTo6c2V0TWluaW11bUF1
ZGlvU2FtcGxlRHVyYXRpb24oZmxvYXQgZHVyYXRpb24pCit7CisgICAgbV9taW5pbXVtQXVkaW9T
YW1wbGVEdXJhdGlvbiA9IGR1cmF0aW9uOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Tb3VyY2VCdWZmZXJQYXJzZXJX
ZWJNLmgKaW5kZXggM2E4NDY0NTlhM2ViMzU1MzYxMjEyOTc2YzhlYWRlNDYzZDYzYjE5Ny4uMWQ5
NWZhODI3MDEyNTMzZDVlMGUzYWY2NWE3ZGI0MzM4NGQyZGU2OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU291cmNlQnVmZmVyUGFyc2VyV2ViTS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1NvdXJjZUJ1ZmZl
clBhcnNlcldlYk0uaApAQCAtMjgsNiArMjgsOCBAQAogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0Up
CiAKICNpbmNsdWRlICJTb3VyY2VCdWZmZXJQYXJzZXIuaCIKKyNpbmNsdWRlIDxDb3JlQXVkaW8v
Q29yZUF1ZGlvVHlwZXMuaD4KKyNpbmNsdWRlIDxDb3JlTWVkaWEvQ01UaW1lLmg+CiAjaW5jbHVk
ZSA8Y29tbW9uL3ZwOV9oZWFkZXJfcGFyc2VyLmg+CiAjaW5jbHVkZSA8d2VibS9jYWxsYmFjay5o
PgogI2luY2x1ZGUgPHdlYm0vc3RhdHVzLmg+CkBAIC00MSw3ICs0Myw2IEBACiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RocmVhZHMvQmluYXJ5U2VtYXBo
b3JlLmg+CiAKLXR5cGVkZWYgc3RydWN0IG9wYXF1ZUNNU2FtcGxlQnVmZmVyICpDTVNhbXBsZUJ1
ZmZlclJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IG9wYXF1ZUNNRm9ybWF0RGVzY3JpcHRpb24q
IENNRm9ybWF0RGVzY3JpcHRpb25SZWY7CiB0eXBlZGVmIHN0cnVjdCBPcGFxdWVDTUJsb2NrQnVm
ZmVyICpDTUJsb2NrQnVmZmVyUmVmOwogCkBAIC01MSwxMCArNTIsMTUgQEAgY2xhc3MgV2VibVBh
cnNlcjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBNZWRpYVNhbXBsZUFWRk9iakM7
CisKIGNsYXNzIFdFQkNPUkVfRVhQT1JUIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0gOiBwdWJsaWMg
U291cmNlQnVmZmVyUGFyc2VyLCBwcml2YXRlIHdlYm06OkNhbGxiYWNrIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICBjbGFzcyBTdHJlYW1pbmdWZWN0b3JSZWFk
ZXI7CisKICAgICBzdGF0aWMgTWVkaWFQbGF5ZXJFbnVtczo6U3VwcG9ydHNUeXBlIGlzQ29udGVu
dFR5cGVTdXBwb3J0ZWQoY29uc3QgQ29udGVudFR5cGUmKTsKKyAgICBzdGF0aWMgUmVmUHRyPFNv
dXJjZUJ1ZmZlclBhcnNlcldlYk0+IGNyZWF0ZShjb25zdCBDb250ZW50VHlwZSYpOwogCiAgICAg
U291cmNlQnVmZmVyUGFyc2VyV2ViTSgpOwogICAgIH5Tb3VyY2VCdWZmZXJQYXJzZXJXZWJNKCk7
CkBAIC03MSw5ICs3NywxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNldFBhcnNlclN0YXRlKCkg
ZmluYWw7CiAgICAgdm9pZCBpbnZhbGlkYXRlKCkgZmluYWw7CiAKLSNpZiAhUkVMRUFTRV9MT0df
RElTQUJMRUQKKyAgICB2b2lkIGZsdXNoUGVuZGluZ0F1ZGlvQnVmZmVycygpOworICAgIHZvaWQg
c2V0TWluaW11bUF1ZGlvU2FtcGxlRHVyYXRpb24oZmxvYXQpOworCiAgICAgdm9pZCBzZXRMb2dn
ZXIoY29uc3QgV1RGOjpMb2dnZXImLCBjb25zdCB2b2lkKiBpZGVudGlmaWVyKSBmaW5hbDsKLSNl
bmRpZgorCisgICAgdm9pZCBwcm92aWRlTWVkaWFEYXRhKFJldGFpblB0cjxDTVNhbXBsZUJ1ZmZl
clJlZj4sIHVpbnQ2NF90KTsKIAogICAgIGVudW0gY2xhc3MgRXJyb3JDb2RlIDogaW50MzJfdCB7
CiAgICAgICAgIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk1FcnJvckNvZGVTdGFydCA9IDIwMDAsCkBA
IC05NSwyMCArMTA0LDEyMSBAQCBwdWJsaWM6CiAgICAgICAgIFJlYWRpbmdDbHVzdGVyLAogICAg
IH07CiAKLXByaXZhdGU6Ci0gICAgc3RydWN0IFRyYWNrRGF0YSB7Ci0gICAgICAgIHdlYm06OlRy
YWNrRW50cnkgdHJhY2s7Ci0gICAgICAgIHZwOV9wYXJzZXI6OlZwOUhlYWRlclBhcnNlciBoZWFk
ZXJQYXJzZXI7Ci0gICAgICAgIFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiBmb3Jt
YXREZXNjcmlwdGlvbjsKLSAgICAgICAgUmV0YWluUHRyPENNQmxvY2tCdWZmZXJSZWY+IGN1cnJl
bnRCbG9ja0J1ZmZlcjsKLSAgICAgICAgdWludDY0X3QgY3VycmVudEJsb2NrQnVmZmVyUG9zaXRp
b24geyAwIH07CisgICAgZW51bSBjbGFzcyBDb2RlY1R5cGUgOiB1aW50OF90IHsKKyAgICAgICAg
VW5zdXBwb3J0ZWQsCisgICAgICAgIFZQOSwKKyAgICAgICAgVm9yYmlzLAorICAgICAgICBPcHVz
LAorICAgIH07CisKKyAgICBjbGFzcyBUcmFja0RhdGEgeworICAgICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBhdXRvIGNyZWF0ZShDb2Rl
Y1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBTb3Vy
Y2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJzZXIpIC0+IFVuaXF1ZVJlZjxUcmFja0RhdGE+CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFRyYWNrRGF0YT4oY29kZWNU
eXBlLCB0cmFja0VudHJ5LCBUeXBlOjpVbmtub3duLCBwYXJzZXIpOworICAgICAgICB9CisKKyAg
ICAgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgICAgIFVua25vd24sCisgICAgICAgICAg
ICBBdWRpbywKKyAgICAgICAgICAgIFZpZGVvLAorICAgICAgICB9OworCisgICAgICAgIFRyYWNr
RGF0YShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3ZWJtOjpUcmFja0VudHJ5JiB0cmFja0Vu
dHJ5LCBUeXBlIHRyYWNrVHlwZSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2VyKQorICAg
ICAgICAgICAgOiBtX2NvZGVjIHsgY29kZWNUeXBlIH0KKyAgICAgICAgICAgICwgbV90cmFjayB7
IHdlYm06OlRyYWNrRW50cnkgeyB0cmFja0VudHJ5IH0gfQorICAgICAgICAgICAgLCBtX3RyYWNr
VHlwZSB7IHRyYWNrVHlwZSB9CisgICAgICAgICAgICAsIG1fcGFyc2VyIHsgcGFyc2VyIH0KKyAg
ICAgICAgeworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgflRyYWNrRGF0YSgpID0gZGVmYXVs
dDsKKworICAgICAgICBDb2RlY1R5cGUgY29kZWMoKSBjb25zdCB7IHJldHVybiBtX2NvZGVjOyB9
CisgICAgICAgIHdlYm06OlRyYWNrRW50cnkmIHRyYWNrKCkgeyByZXR1cm4gbV90cmFjazsgfQor
ICAgICAgICBUeXBlIHRyYWNrVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhY2tUeXBlOyB9CisK
KyAgICAgICAgUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGZvcm1hdERlc2NyaXB0
aW9uKCkgeyByZXR1cm4gbV9mb3JtYXREZXNjcmlwdGlvbjsgfQorICAgICAgICB2b2lkIHNldEZv
cm1hdERlc2NyaXB0aW9uKFJldGFpblB0cjxDTUZvcm1hdERlc2NyaXB0aW9uUmVmPiYmIGRlc2Ny
aXB0aW9uKSB7IG1fZm9ybWF0RGVzY3JpcHRpb24gPSBXVEZNb3ZlKGRlc2NyaXB0aW9uKTsgfQor
CisgICAgICAgIFNvdXJjZUJ1ZmZlclBhcnNlcldlYk0mIHBhcnNlcigpIGNvbnN0IHsgcmV0dXJu
IG1fcGFyc2VyOyB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHdlYm06OlN0YXR1cyBjb25z
dW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0YWRhdGEmLCB1
aW50NjRfdCosIGNvbnN0IENNVGltZSYsIGludCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gd2VibTo6U3RhdHVzKHdlYm06
OlN0YXR1czo6a0ludmFsaWRFbGVtZW50SWQpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBDb2RlY1R5cGUgbV9jb2RlYzsKKyAgICAgICAgd2VibTo6VHJhY2tFbnRyeSBtX3Ry
YWNrOworICAgICAgICBUeXBlIG1fdHJhY2tUeXBlOworICAgICAgICBSZXRhaW5QdHI8Q01Gb3Jt
YXREZXNjcmlwdGlvblJlZj4gbV9mb3JtYXREZXNjcmlwdGlvbjsKKyAgICAgICAgU291cmNlQnVm
ZmVyUGFyc2VyV2ViTSYgbV9wYXJzZXI7CisgICAgfTsKKworICAgIGNsYXNzIFZpZGVvVHJhY2tE
YXRhIDogcHVibGljIFRyYWNrRGF0YSB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgYXV0
byBjcmVhdGUoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJh
Y2tFbnRyeSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFyc2VyKSAtPiBVbmlxdWVSZWY8Vmlk
ZW9UcmFja0RhdGE+CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVm
PFZpZGVvVHJhY2tEYXRhPihjb2RlY1R5cGUsIHRyYWNrRW50cnksIHBhcnNlcik7CisgICAgICAg
IH0KKworICAgICAgICBWaWRlb1RyYWNrRGF0YShDb2RlY1R5cGUgY29kZWNUeXBlLCBjb25zdCB3
ZWJtOjpUcmFja0VudHJ5JiB0cmFja0VudHJ5LCBTb3VyY2VCdWZmZXJQYXJzZXJXZWJNJiBwYXJz
ZXIpCisgICAgICAgICAgICA6IFRyYWNrRGF0YShjb2RlY1R5cGUsIHRyYWNrRW50cnksIFR5cGU6
OlZpZGVvLCBwYXJzZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHdlYm06OlN0
YXR1cyBjb25zdW1lRnJhbWVEYXRhKHdlYm06OlJlYWRlciYsIGNvbnN0IHdlYm06OkZyYW1lTWV0
YWRhdGEmLCB1aW50NjRfdCosIGNvbnN0IENNVGltZSYsIGludCkgZmluYWw7CisgICAgICAgIAor
ICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgY3JlYXRlU2FtcGxlQnVmZmVyKGNvbnN0IENNVGlt
ZSYsIGludCk7CisgICAgICAgIGNvbnN0IGNoYXIqIGxvZ0NsYXNzTmFtZSgpIGNvbnN0IHsgcmV0
dXJuICJWaWRlb1RyYWNrRGF0YSI7IH0KKworI2lmIEVOQUJMRShWUDkpCisgICAgICAgIHZwOV9w
YXJzZXI6OlZwOUhlYWRlclBhcnNlciBtX2hlYWRlclBhcnNlcjsKKyAgICAgICAgUmV0YWluUHRy
PENNQmxvY2tCdWZmZXJSZWY+IG1fY3VycmVudEJsb2NrQnVmZmVyOworICAgICAgICB1aW50NjRf
dCBtX2N1cnJlbnRCbG9ja0J1ZmZlclBvc2l0aW9uIHsgMCB9OworI2VuZGlmCisgICAgfTsKKwor
ICAgIGNsYXNzIEF1ZGlvVHJhY2tEYXRhIDogcHVibGljIFRyYWNrRGF0YSB7CisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgYXV0byBjcmVhdGUoQ29kZWNUeXBlIGNvZGVjVHlwZSwgY29uc3Qg
d2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgU291cmNlQnVmZmVyUGFyc2VyV2ViTSYgcGFy
c2VyLCBmbG9hdCBtaW5pbXVtU2FtcGxlRHVyYXRpb24pIC0+IFVuaXF1ZVJlZjxBdWRpb1RyYWNr
RGF0YT4KKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8QXVkaW9U
cmFja0RhdGE+KGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwgcGFyc2VyLCBtaW5pbXVtU2FtcGxlRHVy
YXRpb24pOworICAgICAgICB9CisKKyAgICAgICAgQXVkaW9UcmFja0RhdGEoQ29kZWNUeXBlIGNv
ZGVjVHlwZSwgY29uc3Qgd2VibTo6VHJhY2tFbnRyeSYgdHJhY2tFbnRyeSwgU291cmNlQnVmZmVy
UGFyc2VyV2ViTSYgcGFyc2VyLCBmbG9hdCBtaW5pbXVtU2FtcGxlRHVyYXRpb24pCisgICAgICAg
ICAgICA6IFRyYWNrRGF0YSB7IGNvZGVjVHlwZSwgdHJhY2tFbnRyeSwgVHlwZTo6QXVkaW8sIHBh
cnNlciB9CisgICAgICAgICAgICAsIG1fbWluaW11bVNhbXBsZUR1cmF0aW9uIHsgbWluaW11bVNh
bXBsZUR1cmF0aW9uIH0KKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgd2VibTo6U3Rh
dHVzIGNvbnN1bWVGcmFtZURhdGEod2VibTo6UmVhZGVyJiwgY29uc3Qgd2VibTo6RnJhbWVNZXRh
ZGF0YSYsIHVpbnQ2NF90KiwgY29uc3QgQ01UaW1lJiwgaW50KSBmaW5hbDsKKyAgICAgICAgdm9p
ZCBjcmVhdGVTYW1wbGVCdWZmZXIoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IGNo
YXIqIGxvZ0NsYXNzTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJBdWRpb1RyYWNrRGF0YSI7IH0KKwor
ICAgICAgICBDTVRpbWUgbV9zYW1wbGVQcmVzZW50YXRpb25UaW1lOworICAgICAgICBDTVRpbWUg
bV9wYWNrZXREdXJhdGlvbjsKKyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fcGFja2V0RGF0YTsK
KyAgICAgICAgc2l6ZV90IG1fcGFja2V0Qnl0ZXNSZWFkIHsgMCB9OworICAgICAgICBzaXplX3Qg
bV9ieXRlT2Zmc2V0IHsgMCB9OworICAgICAgICBWZWN0b3I8QXVkaW9TdHJlYW1QYWNrZXREZXNj
cmlwdGlvbj4gbV9wYWNrZXREZXNjcmlwdGlvbnM7CisKKyAgICAgICAgLy8gRklYTUU6IDAuNSAt
IDEuMCBzZWNvbmRzIGlzIGEgYmV0dGVyIGR1cmF0aW9uIHBlciBzYW1wbGUgYnVmZmVyLCBidXQg
dXNlIDIgc2Vjb25kcyBzbyBhdCBsZWFzdCB0aGUgZmlyc3QKKyAgICAgICAgLy8gc2FtcGxlIGJ1
ZmZlciB3aWxsIHBsYXkgdW50aWwgd2UgZml4IFNhbXBsZUN1cnNvcjo6Y3JlYXRlU2FtcGxlQnVm
ZmVyIHRvIGRlYWwgd2l0aCBgZW5kQ3Vyc29yYC4KKyAgICAgICAgZmxvYXQgbV9taW5pbXVtU2Ft
cGxlRHVyYXRpb24geyAyIH07CiAgICAgfTsKLSAgICBUcmFja0RhdGEqIHRyYWNrRGF0YUZvclRy
YWNrTnVtYmVyKHVpbnQ2NF90KTsKIAotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIGNv
bnN0IFdURjo6TG9nZ2VyKiBsb2dnZXJQdHIoKSBjb25zdCB7IHJldHVybiBtX2xvZ2dlci5nZXQo
KTsgfQogICAgIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2xv
Z0lkZW50aWZpZXI7IH0KLSNlbmRpZgorCitwcml2YXRlOgorCisgICAgVHJhY2tEYXRhKiB0cmFj
a0RhdGFGb3JUcmFja051bWJlcih1aW50NjRfdCk7CiAKICAgICAvLyB3ZWJtOjpDYWxsYmFjawog
ICAgIHdlYm06OlN0YXR1cyBPbkVsZW1lbnRCZWdpbihjb25zdCB3ZWJtOjpFbGVtZW50TWV0YWRh
dGEmLCB3ZWJtOjpBY3Rpb24qKSBmaW5hbDsKQEAgLTEzNSwyMCArMjQ1LDE4IEBAIHByaXZhdGU6
CiAKICAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6Ok5vbmUgfTsKIAotICAgIGNsYXNzIFN0cmVh
bWluZ1ZlY3RvclJlYWRlcjsKICAgICBVbmlxdWVSZWY8U3RyZWFtaW5nVmVjdG9yUmVhZGVyPiBt
X3JlYWRlcjsKIAotICAgIFZlY3RvcjxUcmFja0RhdGE+IG1fdHJhY2tzOworICAgIFZlY3RvcjxV
bmlxdWVSZWY8VHJhY2tEYXRhPj4gbV90cmFja3M7CiAgICAgdXNpbmcgQmxvY2tWYXJpYW50ID0g
VmFyaWFudDx3ZWJtOjpCbG9jaywgd2VibTo6U2ltcGxlQmxvY2s+OwogICAgIE9wdGlvbmFsPEJs
b2NrVmFyaWFudD4gbV9jdXJyZW50QmxvY2s7CiAgICAgT3B0aW9uYWw8dWludDY0X3Q+IG1fcmV3
aW5kVG9Qb3NpdGlvbjsKKyAgICBmbG9hdCBtX21pbmltdW1BdWRpb1NhbXBsZUR1cmF0aW9uIHsg
MiB9OwogCiAgICAgQm94PEJpbmFyeVNlbWFwaG9yZT4gbV9pbml0aWFsaXphdGlvblNlZ21lbnRJ
c0hhbmRsZWRTZW1hcGhvcmU7CiAKLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICBSZWZQ
dHI8Y29uc3QgV1RGOjpMb2dnZXI+IG1fbG9nZ2VyOwogICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRl
bnRpZmllciB7IG51bGxwdHIgfTsKLSNlbmRpZgogfTsKIAogfQpAQCAtMTU3LDQgKzI2NSwxMiBA
QCBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNl
cldlYk0pCiAgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlNvdXJjZUJ1ZmZl
clBhcnNlciYgcGFyc2VyKSB7IHJldHVybiBwYXJzZXIudHlwZSgpID09IFdlYkNvcmU6OlNvdXJj
ZUJ1ZmZlclBhcnNlcjo6VHlwZTo6V2ViTTsgfQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQo
KQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBh
cnNlcldlYk06OlZpZGVvVHJhY2tEYXRhKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBX
ZWJDb3JlOjpTb3VyY2VCdWZmZXJQYXJzZXJXZWJNOjpUcmFja0RhdGEmIHRyYWNrRGF0YSkgeyBy
ZXR1cm4gdHJhY2tEYXRhLnRyYWNrVHlwZSgpID09IFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBhcnNl
cldlYk06OlRyYWNrRGF0YTo6VHlwZTo6VmlkZW87IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RU5EKCkKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpTb3VyY2VCdWZm
ZXJQYXJzZXJXZWJNOjpBdWRpb1RyYWNrRGF0YSkKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29u
c3QgV2ViQ29yZTo6U291cmNlQnVmZmVyUGFyc2VyV2ViTTo6VHJhY2tEYXRhJiB0cmFja0RhdGEp
IHsgcmV0dXJuIHRyYWNrRGF0YS50cmFja1R5cGUoKSA9PSBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQ
YXJzZXJXZWJNOjpUcmFja0RhdGE6OlR5cGU6OkF1ZGlvOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0VORCgpCisKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU09VUkNFKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2Eu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1ZQOVV0aWxpdGllc0Nv
Y29hLmgKaW5kZXggMTRjNmYzYWU5ODQzMGFhZWMyYjhlODIyYjFmYjUxYjQ3NThhYTkzMC4uNWNj
ZDM1Nzc5MzE0NDk5ZTc2NDA1OGYyNDI4ZDJhNmZlYjUwM2U0NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVlA5VXRpbGl0aWVzQ29jb2EuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlVdGlsaXRpZXNDb2Nv
YS5oCkBAIC0yOCw2ICsyOCwxMyBAQAogI2lmIEVOQUJMRShWUDkpICYmIFBMQVRGT1JNKENPQ09B
KQogCiAjaW5jbHVkZSAiVlA5VXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8d2VibS9kb21fdHlwZXMu
aD4KKwordHlwZWRlZiBjb25zdCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlvbiogQ01G
b3JtYXREZXNjcmlwdGlvblJlZjsKKworbmFtZXNwYWNlIHZwOV9wYXJzZXIgeworY2xhc3MgVnA5
SGVhZGVyUGFyc2VyOworfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ0LDYgKzUxLDgg
QEAgZXh0ZXJuIGJvb2wgaXNWUDlEZWNvZGVyQXZhaWxhYmxlKCk7CiBleHRlcm4gYm9vbCBpc1ZQ
Q29kZWNDb25maWd1cmF0aW9uUmVjb3JkU3VwcG9ydGVkKFZQQ29kZWNDb25maWd1cmF0aW9uUmVj
b3JkJik7CiBleHRlcm4gYm9vbCB2YWxpZGF0ZVZQUGFyYW1ldGVycyhWUENvZGVjQ29uZmlndXJh
dGlvblJlY29yZCYsIE1lZGlhQ2FwYWJpbGl0aWVzSW5mbyYsIGNvbnN0IFZpZGVvQ29uZmlndXJh
dGlvbiYpOwogCitSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlRm9ybWF0
RGVzY3JpcHRpb25Gcm9tVlA5SGVhZGVyUGFyc2VyKGNvbnN0IHZwOV9wYXJzZXI6OlZwOUhlYWRl
clBhcnNlciYsIGNvbnN0IHdlYm06OkVsZW1lbnQ8d2VibTo6Q29sb3VyPiYpOworCiB9CiAKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
VlA5VXRpbGl0aWVzQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbQppbmRleCBjODFlOTdhYTNlNDc3ZDdjN2I4OWMxNjE5
YTlmM2ZmMmYyYmVjMGExLi40MTIyNTBmOTc0N2E4OTkyNmFlZTViOTI4MWYxYTQxM2JjMmU4YzEz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9WUDlV
dGlsaXRpZXNDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9WUDlVdGlsaXRpZXNDb2NvYS5tbQpAQCAtMjMsOCArMjMsOCBAQAogICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJWUDlVdGlsaXRpZXNDb2NvYS5oIgorI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJW
UDlVdGlsaXRpZXNDb2NvYS5oIgogCiAjaWYgRU5BQkxFKFZQOSkgJiYgUExBVEZPUk0oQ09DT0Ep
CiAKQEAgLTM2LDEzICszNiwyMCBAQAogI2ltcG9ydCAiU3lzdGVtQmF0dGVyeS5oIgogI2ltcG9y
dCAiVmlkZW9Db25maWd1cmF0aW9uLmgiCiAjaW1wb3J0IDxDb3JlTWVkaWEvQ01Gb3JtYXREZXNj
cmlwdGlvbi5oPgorI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvRGF0YVZpZXcuaD4KKyNpbXBvcnQg
PGNvbW1vbi92cDlfaGVhZGVyX3BhcnNlci5oPgogI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nVG9J
bnRlZ2VyQ29udmVyc2lvbi5oPgogCiAjaW1wb3J0IDxwYWwvY29jb2EvQVZGb3VuZGF0aW9uU29m
dExpbmsuaD4KKyNpbXBvcnQgPHBhbC9jZi9Db3JlTWVkaWFTb2Z0TGluay5oPgorI2ltcG9ydCAi
Q29yZVZpZGVvU29mdExpbmsuaCIKICNpbXBvcnQgIlZpZGVvVG9vbGJveFNvZnRMaW5rLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordXNpbmcgbmFtZXNwYWNlIFBBTDsKK3VzaW5nIG5hbWVz
cGFjZSB3ZWJtOworCiBzdGF0aWMgYm9vbCBoYXJkd2FyZVZQOURlY29kZXJEaXNhYmxlZEZvclRl
c3RpbmcgeyBmYWxzZSB9OwogCiBzdHJ1Y3QgT3ZlcnJpZGVTY3JlZW5EYXRhIHsKQEAgLTI1Nyw2
ICsyNjQsMjg4IEBAIGJvb2wgdmFsaWRhdGVWUFBhcmFtZXRlcnMoVlBDb2RlY0NvbmZpZ3VyYXRp
b25SZWNvcmQmIGNvZGVjQ29uZmlndXJhdGlvbiwgTWVkaWFDCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKK3N0YXRpYyB1aW50OF90IGNvbnZlcnRUb0NvbG9yUHJpbWFyaWVzKGNvbnN0IFByaW1hcmll
cyYgY29lZmZpY2llbnRzKQoreworICAgIHN3aXRjaCAoY29lZmZpY2llbnRzKSB7CisgICAgY2Fz
ZSBQcmltYXJpZXM6OmtCdDcwOToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9y
UHJpbWFyaWVzOjpCVF83MDlfNjsKKyAgICBjYXNlIFByaW1hcmllczo6a1Vuc3BlY2lmaWVkOgor
ICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OlVuc3BlY2lmaWVk
OworICAgIGNhc2UgUHJpbWFyaWVzOjprQnQ0NzBNOgorICAgICAgICByZXR1cm4gVlBDb25maWd1
cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzQ3MF82X007CisgICAgY2FzZSBQcmltYXJpZXM6OmtC
dDQ3MEJnOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJU
XzQ3MF83X0JHOworICAgIGNhc2UgUHJpbWFyaWVzOjprU21wdGUxNzBNOgorICAgICAgICByZXR1
cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6OkJUXzYwMV83OworICAgIGNhc2UgUHJp
bWFyaWVzOjprU21wdGUyNDBNOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQ
cmltYXJpZXM6OlNNUFRFX1NUXzI0MDsKKyAgICBjYXNlIFByaW1hcmllczo6a0ZpbG06CisgICAg
ICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6RmlsbTsKKyAgICBjYXNl
IFByaW1hcmllczo6a0J0MjAyMDoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9y
UHJpbWFyaWVzOjpCVF8yMDIwX05vbmNvbnN0YW50X0x1bWluYW5jZTsKKyAgICBjYXNlIFByaW1h
cmllczo6a1NtcHRlU3Q0MjgxOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ29sb3JQ
cmltYXJpZXM6OlNNUFRFX1NUXzQyOF8xOworICAgIGNhc2UgUHJpbWFyaWVzOjprU21wdGVScDQz
MToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpTTVBURV9S
UF80MzFfMjsKKyAgICBjYXNlIFByaW1hcmllczo6a1NtcHRlRWc0MzI6CisgICAgICAgIHJldHVy
biBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmllczo6U01QVEVfRUdfNDMyXzE7CisgICAgY2Fz
ZSBQcmltYXJpZXM6OmtKZWRlY1AyMlBob3NwaG9yczoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmln
dXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpFQlVfVGVjaF8zMjEzX0U7CisgICAgfQorfQorCitzdGF0
aWMgQ0ZTdHJpbmdSZWYgY29udmVydFRvQ01Db2xvclByaW1hcmllcyh1aW50OF90IHByaW1hcmll
cykKK3sKKyAgICBzd2l0Y2ggKHByaW1hcmllcykgeworICAgIGNhc2UgVlBDb25maWd1cmF0aW9u
Q29sb3JQcmltYXJpZXM6OkJUXzcwOV82OgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJD
b2xvclByaW1hcmllc19JVFVfUl83MDlfMjsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9y
UHJpbWFyaWVzOjpFQlVfVGVjaF8zMjEzX0U6CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZl
ckNvbG9yUHJpbWFyaWVzX0VCVV8zMjEzOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQ
cmltYXJpZXM6OkJUXzYwMV83OgorICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJp
ZXM6OlNNUFRFX1NUXzI0MDoKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVyQ29sb3JQcmlt
YXJpZXNfU01QVEVfQzsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbkNvbG9yUHJpbWFyaWVzOjpT
TVBURV9SUF80MzFfMjoKKyAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uQ29sb3JQ
cmltYXJpZXNfRENJX1AzOworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uQ29sb3JQcmltYXJpZXM6
OlNNUFRFX0VHXzQzMl8xOgorICAgICAgICByZXR1cm4ga0NNRm9ybWF0RGVzY3JpcHRpb25Db2xv
clByaW1hcmllc19QM19ENjU7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25Db2xvclByaW1hcmll
czo6QlRfMjAyMF9Ob25jb25zdGFudF9MdW1pbmFuY2U6CisgICAgICAgIHJldHVybiBrQ01Gb3Jt
YXREZXNjcmlwdGlvbkNvbG9yUHJpbWFyaWVzX0lUVV9SXzIwMjA7CisgICAgfQorCisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyB1aW50OF90IGNvbnZlcnRUb1RyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzKGNvbnN0IFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzJiBjaGFyYWN0ZXJpc3RpY3Mp
Cit7CisgICAgc3dpdGNoIChjaGFyYWN0ZXJpc3RpY3MpIHsKKyAgICBjYXNlIFRyYW5zZmVyQ2hh
cmFjdGVyaXN0aWNzOjprQnQ3MDk6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25UcmFu
c2ZlckNoYXJhY3RlcmlzdGljczo6QlRfNzA5XzY7CisgICAgY2FzZSBUcmFuc2ZlckNoYXJhY3Rl
cmlzdGljczo6a1Vuc3BlY2lmaWVkOgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlVuc3BlY2lmaWVkOworICAgIGNhc2UgVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OmtHYW1tYTIyY3VydmU6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRp
b25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfNDcwXzZfTTsKKyAgICBjYXNlIFRyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzOjprR2FtbWEyOGN1cnZlOgorICAgICAgICByZXR1cm4gVlBDb25maWd1
cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzQ3MF83X0JHOworICAgIGNhc2UgVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtTbXB0ZTE3ME06CisgICAgICAgIHJldHVybiBWUENvbmZp
Z3VyYXRpb25UcmFuc2ZlckNoYXJhY3RlcmlzdGljczo6QlRfNjAxXzc7CisgICAgY2FzZSBUcmFu
c2ZlckNoYXJhY3RlcmlzdGljczo6a1NtcHRlMjQwTToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmln
dXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF8yNDA7CisgICAgY2FzZSBU
cmFuc2ZlckNoYXJhY3RlcmlzdGljczo6a0xpbmVhcjoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmln
dXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMaW5lYXI7CisgICAgY2FzZSBUcmFuc2Zl
ckNoYXJhY3RlcmlzdGljczo6a0xvZzoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRy
YW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpMb2dyaXRobWljOworICAgIGNhc2UgVHJhbnNmZXJDaGFy
YWN0ZXJpc3RpY3M6OmtMb2dTcXJ0OgorICAgICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkxvZ3JpdGhtaWNfU3FydDsKKyAgICBjYXNlIFRyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzOjprSWVjNjE5NjYyNDoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJh
dGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJRUNfNjE5NjZfMl80OworICAgIGNhc2UgVHJh
bnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtCdDEzNjFFeHRlbmRlZENvbG91ckdhbXV0OgorICAgICAg
ICByZXR1cm4gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzEzNjFf
MDsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjprSWVjNjE5NjYyMToKKyAgICAg
ICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJRUNfNjE5
NjZfMl8xOworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmsxMEJpdEJ0MjAyMDoK
KyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpC
VF8yMDIwXzEwYml0OworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmsxMkJpdEJ0
MjAyMDoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0
aWNzOjpCVF8yMDIwXzEyYml0OworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OmtT
bXB0ZVN0MjA4NDoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjpTTVBURV9TVF8yMDg0OworICAgIGNhc2UgVHJhbnNmZXJDaGFyYWN0ZXJpc3Rp
Y3M6OmtTbXB0ZVN0NDI4MToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvblRyYW5zZmVy
Q2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF80MjhfMTsKKyAgICBjYXNlIFRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjprQXJpYlN0ZEI2N0hsZzoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlv
blRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMTAwX0hMRzsKKyAgICB9Cit9CisKK3N0YXRp
YyBDRlN0cmluZ1JlZiBjb252ZXJ0VG9DTVRyYW5zZmVyRnVuY3Rpb24odWludDhfdCBjaGFyYWN0
ZXJpc3RpY3MpCit7CisgICAgc3dpdGNoIChjaGFyYWN0ZXJpc3RpY3MpIHsKKyAgICBjYXNlIFZQ
Q29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF83MDlfNjoKKyAgICAgICAg
cmV0dXJuIGtDVkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl83MDlfMjsKKyAgICBj
YXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF8yNDA6
CisgICAgICAgIHJldHVybiBrQ1ZJbWFnZUJ1ZmZlclRyYW5zZmVyRnVuY3Rpb25fU01QVEVfMjQw
TV8xOTk1OworICAgIGNhc2UgVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6
OlNNUFRFX1NUXzIwODQ6CisgICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5z
ZmVyRnVuY3Rpb25fU01QVEVfU1RfMjA4NF9QUTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRy
YW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpCVF8yMDIwXzEwYml0OgorICAgIGNhc2UgVlBDb25maWd1
cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OkJUXzIwMjBfMTJiaXQ6CisgICAgICAgIHJl
dHVybiBrQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fSVRVX1JfMjAyMDsKKyAg
ICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpTTVBURV9TVF80
MjhfMToKKyAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0aW9uVHJhbnNmZXJGdW5jdGlv
bl9TTVBURV9TVF80MjhfMTsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5zZmVyQ2hhcmFj
dGVyaXN0aWNzOjpCVF8yMTAwX0hMRzoKKyAgICAgICAgcmV0dXJuIGtDTUZvcm1hdERlc2NyaXB0
aW9uVHJhbnNmZXJGdW5jdGlvbl9JVFVfUl8yMTAwX0hMRzsKKyAgICBjYXNlIFZQQ29uZmlndXJh
dGlvblRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzOjpJRUNfNjE5NjZfMl8xOgorICAgICAgICByZXR1
cm4gY2FuTG9hZF9Db3JlTWVkaWFfa0NNRm9ybWF0RGVzY3JpcHRpb25UcmFuc2ZlckZ1bmN0aW9u
X3NSR0IoKSA/IFBBTDo6Z2V0X0NvcmVNZWRpYV9rQ01Gb3JtYXREZXNjcmlwdGlvblRyYW5zZmVy
RnVuY3Rpb25fc1JHQigpIDogbnVsbHB0cjsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvblRyYW5z
ZmVyQ2hhcmFjdGVyaXN0aWNzOjpMaW5lYXI6CisgICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNj
cmlwdGlvblRyYW5zZmVyRnVuY3Rpb25fTGluZWFyOworICAgIH0KKworICAgIHJldHVybiBudWxs
cHRyOworfQorCitzdGF0aWMgdWludDhfdCBjb252ZXJ0VG9NYXRyaXhDb2VmZmljaWVudHMoY29u
c3QgTWF0cml4Q29lZmZpY2llbnRzJiBjb2VmZmljaWVudHMpCit7CisgICAgc3dpdGNoIChjb2Vm
ZmljaWVudHMpIHsKKyAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a1JnYjoKKyAgICAgICAg
cmV0dXJuIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6SWRlbnRpdHk7CisgICAg
Y2FzZSBNYXRyaXhDb2VmZmljaWVudHM6OmtCdDcwOToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmln
dXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfNzA5XzY7CisgICAgY2FzZSBNYXRyaXhDb2Vm
ZmljaWVudHM6OmtVbnNwZWNpZmllZDoKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJhdGlvbk1h
dHJpeENvZWZmaWNpZW50czo6VW5zcGVjaWZpZWQ7CisgICAgY2FzZSBNYXRyaXhDb2VmZmljaWVu
dHM6OmtGY2M6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVu
dHM6OkZDQzsKKyAgICBjYXNlIE1hdHJpeENvZWZmaWNpZW50czo6a0J0NDcwQmc6CisgICAgICAg
IHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzQ3MF83X0JHOwor
ICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprU21wdGUxNzBNOgorICAgICAgICByZXR1cm4g
VlBDb25maWd1cmF0aW9uTWF0cml4Q29lZmZpY2llbnRzOjpCVF82MDFfNzsKKyAgICBjYXNlIE1h
dHJpeENvZWZmaWNpZW50czo6a1NtcHRlMjQwTToKKyAgICAgICAgcmV0dXJuIFZQQ29uZmlndXJh
dGlvbk1hdHJpeENvZWZmaWNpZW50czo6U01QVEVfU1RfMjQwOworICAgIGNhc2UgTWF0cml4Q29l
ZmZpY2llbnRzOjprWUNnQ286CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhD
b2VmZmljaWVudHM6OllDZ0NvOworICAgIGNhc2UgTWF0cml4Q29lZmZpY2llbnRzOjprQnQyMDIw
Tm9uY29uc3RhbnRMdW1pbmFuY2U6CisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25NYXRy
aXhDb2VmZmljaWVudHM6OkJUXzIwMjBfTm9uY29uc3RhbnRfTHVtaW5hbmNlOworICAgIGNhc2Ug
TWF0cml4Q29lZmZpY2llbnRzOjprQnQyMDIwQ29uc3RhbnRMdW1pbmFuY2U6CisgICAgICAgIHJl
dHVybiBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2VmZmljaWVudHM6OkJUXzIwMjBfQ29uc3RhbnRf
THVtaW5hbmNlOworICAgIH0KK30KKworc3RhdGljIENGU3RyaW5nUmVmIGNvbnZlcnRUb0NNWUNi
Q1JNYXRyaXgodWludDhfdCBjb2VmZmljaWVudHMpCit7CisgICAgc3dpdGNoIChjb2VmZmljaWVu
dHMpIHsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZmaWNpZW50czo6QlRfMjAy
MF9Ob25jb25zdGFudF9MdW1pbmFuY2U6CisgICAgICAgIHJldHVybiBrQ01Gb3JtYXREZXNjcmlw
dGlvbllDYkNyTWF0cml4X0lUVV9SXzIwMjA7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRy
aXhDb2VmZmljaWVudHM6OkJUXzQ3MF83X0JHOgorICAgIGNhc2UgVlBDb25maWd1cmF0aW9uTWF0
cml4Q29lZmZpY2llbnRzOjpCVF82MDFfNzoKKyAgICAgICAgcmV0dXJuIGtDVkltYWdlQnVmZmVy
WUNiQ3JNYXRyaXhfSVRVX1JfNjAxXzQ7CisgICAgY2FzZSBWUENvbmZpZ3VyYXRpb25NYXRyaXhD
b2VmZmljaWVudHM6OkJUXzcwOV82OgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JD
ck1hdHJpeF9JVFVfUl83MDlfMjsKKyAgICBjYXNlIFZQQ29uZmlndXJhdGlvbk1hdHJpeENvZWZm
aWNpZW50czo6U01QVEVfU1RfMjQwOgorICAgICAgICByZXR1cm4ga0NWSW1hZ2VCdWZmZXJZQ2JD
ck1hdHJpeF9TTVBURV8yNDBNXzE5OTU7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK3N0YXRpYyB1aW50OF90IGNvbnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJzYW1wbGlu
Zyh1aW50NjRfdCB4LCB1aW50NjRfdCB5KQoreworICAgIGlmICh4ICYgeSkKKyAgICAgICAgcmV0
dXJuIFZQQ29uZmlndXJhdGlvbkNocm9tYVN1YnNhbXBsaW5nOjpTdWJzYW1wbGluZ180MjBfQ29s
b2NhdGVkOworICAgIGlmICh4ICYgIXkpCisgICAgICAgIHJldHVybiBWUENvbmZpZ3VyYXRpb25D
aHJvbWFTdWJzYW1wbGluZzo6U3Vic2FtcGxpbmdfNDIyOworICAgIGlmICgheCAmICF5KQorICAg
ICAgICByZXR1cm4gVlBDb25maWd1cmF0aW9uQ2hyb21hU3Vic2FtcGxpbmc6OlN1YnNhbXBsaW5n
XzQ0NDsKKyAgICAvLyBUaGlzIGluZGljYXRlcyA0OjQ6MCBzdWJzYW1wbGluZywgd2hpY2ggaXMg
bm90IGV4cHJlc3NhYmxlIGluIHRoZSAndnBjQycgYm94LiBEZWZhdWx0IHRvIDQ6MjowLgorICAg
IHJldHVybiBWUENvbmZpZ3VyYXRpb25DaHJvbWFTdWJzYW1wbGluZzo6U3Vic2FtcGxpbmdfNDIw
X0NvbG9jYXRlZDsKK30KKworUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0
ZUZvcm1hdERlc2NyaXB0aW9uRnJvbVZQOUhlYWRlclBhcnNlcihjb25zdCB2cDlfcGFyc2VyOjpW
cDlIZWFkZXJQYXJzZXImIHBhcnNlciwgY29uc3Qgd2VibTo6RWxlbWVudDxDb2xvdXI+JiBjb2xv
cikKK3sKKyAgICAvLyBSZWY6ICJWUCBDb2RlYyBJU08gTWVkaWEgRmlsZSBGb3JtYXQgQmluZGlu
ZywgdjEuMCwgMjAxNy0wMy0zMSIKKyAgICAvLyA8aHR0cHM6Ly93d3cud2VibXByb2plY3Qub3Jn
L3ZwOS9tcDQvPgorICAgIC8vCisgICAgLy8gY2xhc3MgVlBDb2RlY0NvbmZpZ3VyYXRpb25Cb3gg
ZXh0ZW5kcyBGdWxsQm94KCd2cGNDJywgdmVyc2lvbiA9IDEsIDApCisgICAgLy8geworICAgIC8v
ICAgICBWUENvZGVjQ29uZmlndXJhdGlvblJlY29yZCgpIHZwY0NvbmZpZzsKKyAgICAvLyB9Cisg
ICAgLy8KKyAgICAvLyBhbGlnbmVkICg4KSBjbGFzcyBWUENvZGVjQ29uZmlndXJhdGlvblJlY29y
ZCB7CisgICAgLy8gICAgIHVuc2lnbmVkIGludCAoOCkgICAgIHByb2ZpbGU7CisgICAgLy8gICAg
IHVuc2lnbmVkIGludCAoOCkgICAgIGxldmVsOworICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDQp
ICAgICBiaXREZXB0aDsKKyAgICAvLyAgICAgdW5zaWduZWQgaW50ICgzKSAgICAgY2hyb21hU3Vi
c2FtcGxpbmc7CisgICAgLy8gICAgIHVuc2lnbmVkIGludCAoMSkgICAgIHZpZGVvRnVsbFJhbmdl
RmxhZzsKKyAgICAvLyAgICAgdW5zaWduZWQgaW50ICg4KSAgICAgY29sb3VyUHJpbWFyaWVzOwor
ICAgIC8vICAgICB1bnNpZ25lZCBpbnQgKDgpICAgICB0cmFuc2ZlckNoYXJhY3RlcmlzdGljczsK
KyAgICAvLyAgICAgdW5zaWduZWQgaW50ICg4KSAgICAgbWF0cml4Q29lZmZpY2llbnRzOworICAg
IC8vICAgICB1bnNpZ25lZCBpbnQgKDE2KSAgICBjb2RlY0ludGlhbGl6YXRpb25EYXRhU2l6ZTsK
KyAgICAvLyAgICAgdW5zaWduZWQgaW50ICg4KVtdICAgY29kZWNJbnRpYWxpemF0aW9uRGF0YTsK
KyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBjb2RlY0ludGlhbGl6YXRpb25EYXRhU2l6ZeKAi0Zv
ciBWUDggYW5kIFZQOSB0aGlzIGZpZWxkIG11c3QgYmUgMC4KKyAgICAvLyBjb2RlY0ludGlhbGl6
YXRpb25EYXRh4oCLYmluYXJ5IGNvZGVjIGluaXRpYWxpemF0aW9uIGRhdGEuIE5vdCB1c2VkIGZv
ciBWUDggYW5kIFZQOS4KKyAgICAvLworICAgIC8vIEZJWE1FOiBDb252ZXJ0IGV4aXN0aW5nIHN0
cnVjdCB0byBhbiBJU09Cb3ggYW5kIHJlcGxhY2UgdGhlIHdyaXRpbmcgY29kZSBiZWxvdworICAg
IC8vIHdpdGggYSBzdWJjbGFzcyBvZiBJU09GdWxsQm94LgorCisgICAgVlBDb2RlY0NvbmZpZ3Vy
YXRpb25SZWNvcmQgcmVjb3JkOworCisgICAgcmVjb3JkLnByb2ZpbGUgPSBwYXJzZXIucHJvZmls
ZSgpOworICAgIC8vIENvcmVNZWRpYSBkb2VzIG5hdCBjYXJlIGFib3V0IHRoZSBWUDkgY29kZWMg
bGV2ZWw7IGhhcmQtY29kZSB0byBMZXZlbCAxLjAgaGVyZToKKyAgICByZWNvcmQubGV2ZWwgPSAx
MDsKKyAgICByZWNvcmQuYml0RGVwdGggPSBwYXJzZXIuYml0X2RlcHRoKCk7CisgICAgcmVjb3Jk
LnZpZGVvRnVsbFJhbmdlRmxhZyA9IHBhcnNlci5jb2xvcl9yYW5nZSgpID8gVlBDb25maWd1cmF0
aW9uUmFuZ2U6OkZ1bGxSYW5nZSA6IFZQQ29uZmlndXJhdGlvblJhbmdlOjpWaWRlb1JhbmdlOwor
ICAgIHJlY29yZC5jaHJvbWFTdWJzYW1wbGluZyA9IGNvbnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJv
bWFTdWJzYW1wbGluZyhwYXJzZXIuc3Vic2FtcGxpbmdfeCgpLCBwYXJzZXIuc3Vic2FtcGxpbmdf
eSgpKTsKKyAgICByZWNvcmQuY29sb3JQcmltYXJpZXMgPSBWUENvbmZpZ3VyYXRpb25Db2xvclBy
aW1hcmllczo6VW5zcGVjaWZpZWQ7CisgICAgcmVjb3JkLnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNz
ID0gVlBDb25maWd1cmF0aW9uVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3M6OlVuc3BlY2lmaWVkOwor
ICAgIHJlY29yZC5tYXRyaXhDb2VmZmljaWVudHMgPSBWUENvbmZpZ3VyYXRpb25NYXRyaXhDb2Vm
ZmljaWVudHM6OlVuc3BlY2lmaWVkOworCisgICAgLy8gQ29udGFpbmVyIGNvbG9yIHZhbHVlcyBj
YW4gb3ZlcnJpZGUgcGVyLXNhbXBsZSBvbmVzOgorICAgIGlmIChjb2xvci5pc19wcmVzZW50KCkp
IHsKKyAgICAgICAgYXV0byYgY29sb3JWYWx1ZSA9IGNvbG9yLnZhbHVlKCk7CisgICAgICAgIGlm
IChjb2xvclZhbHVlLmNocm9tYV9zdWJzYW1wbGluZ194LmlzX3ByZXNlbnQoKSAmJiBjb2xvclZh
bHVlLmNocm9tYV9zdWJzYW1wbGluZ195LmlzX3ByZXNlbnQoKSkKKyAgICAgICAgICAgIHJlY29y
ZC5jaHJvbWFTdWJzYW1wbGluZyA9IGNvbnZlcnRTdWJzYW1wbGluZ1hZVG9DaHJvbWFTdWJzYW1w
bGluZyhjb2xvclZhbHVlLmNocm9tYV9zdWJzYW1wbGluZ194LnZhbHVlKCksIGNvbG9yVmFsdWUu
Y2hyb21hX3N1YnNhbXBsaW5nX3kudmFsdWUoKSk7CisgICAgICAgIGlmIChjb2xvclZhbHVlLnJh
bmdlLmlzX3ByZXNlbnQoKSAmJiBjb2xvclZhbHVlLnJhbmdlLnZhbHVlKCkgIT0gUmFuZ2U6OmtV
bnNwZWNpZmllZCkKKyAgICAgICAgICAgIHJlY29yZC52aWRlb0Z1bGxSYW5nZUZsYWcgPSBjb2xv
clZhbHVlLnJhbmdlLnZhbHVlKCkgPT0gUmFuZ2U6OmtGdWxsID8gVlBDb25maWd1cmF0aW9uUmFu
Z2U6OkZ1bGxSYW5nZSA6IFZQQ29uZmlndXJhdGlvblJhbmdlOjpWaWRlb1JhbmdlOworICAgICAg
ICBpZiAoY29sb3JWYWx1ZS5iaXRzX3Blcl9jaGFubmVsLmlzX3ByZXNlbnQoKSkKKyAgICAgICAg
ICAgIHJlY29yZC5iaXREZXB0aCA9IGNvbG9yVmFsdWUuYml0c19wZXJfY2hhbm5lbC52YWx1ZSgp
OworICAgICAgICBpZiAoY29sb3JWYWx1ZS50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MuaXNfcHJl
c2VudCgpKQorICAgICAgICAgICAgcmVjb3JkLnRyYW5zZmVyQ2hhcmFjdGVyaXN0aWNzID0gY29u
dmVydFRvVHJhbnNmZXJDaGFyYWN0ZXJpc3RpY3MoY29sb3JWYWx1ZS50cmFuc2Zlcl9jaGFyYWN0
ZXJpc3RpY3MudmFsdWUoKSk7CisgICAgICAgIGlmIChjb2xvclZhbHVlLm1hdHJpeF9jb2VmZmlj
aWVudHMuaXNfcHJlc2VudCgpKQorICAgICAgICAgICAgcmVjb3JkLm1hdHJpeENvZWZmaWNpZW50
cyA9IGNvbnZlcnRUb01hdHJpeENvZWZmaWNpZW50cyhjb2xvclZhbHVlLm1hdHJpeF9jb2VmZmlj
aWVudHMudmFsdWUoKSk7CisgICAgICAgIGlmIChjb2xvclZhbHVlLnByaW1hcmllcy5pc19wcmVz
ZW50KCkpCisgICAgICAgICAgICByZWNvcmQuY29sb3JQcmltYXJpZXMgPSBjb252ZXJ0VG9Db2xv
clByaW1hcmllcyhjb2xvclZhbHVlLnByaW1hcmllcy52YWx1ZSgpKTsKKyAgICB9CisKKyAgICBj
b25zdGV4cHIgc2l6ZV90IFZQQ29kZWNDb25maWd1cmF0aW9uQ29udGVudHNTaXplID0gMTI7CisK
KyAgICB1aW50MzJfdCB2ZXJzaW9uQW5kRmxhZ3MgPSAxIDw8IDI0OworICAgIHVpbnQ4X3QgYml0
RGVwdGhDaHJvbWFBbmRSYW5nZSA9ICgweEYgJiByZWNvcmQuYml0RGVwdGgpIDw8IDQgfCAoMHg3
ICYgcmVjb3JkLmNocm9tYVN1YnNhbXBsaW5nKSA8PCAxIHwgKDB4MSAmIHJlY29yZC52aWRlb0Z1
bGxSYW5nZUZsYWcpOworICAgIHVpbnQxNl90IGNvZGVjSW50aWFsaXphdGlvbkRhdGFTaXplID0g
MDsKKworICAgIGF1dG8gdmlldyA9IEpTQzo6RGF0YVZpZXc6OmNyZWF0ZShBcnJheUJ1ZmZlcjo6
Y3JlYXRlKFZQQ29kZWNDb25maWd1cmF0aW9uQ29udGVudHNTaXplLCAxKSwgMCwgVlBDb2RlY0Nv
bmZpZ3VyYXRpb25Db250ZW50c1NpemUpOworICAgIHZpZXctPnNldCgwLCB2ZXJzaW9uQW5kRmxh
Z3MsIGZhbHNlKTsKKyAgICB2aWV3LT5zZXQoNCwgcmVjb3JkLnByb2ZpbGUsIGZhbHNlKTsKKyAg
ICB2aWV3LT5zZXQoNSwgcmVjb3JkLmxldmVsLCBmYWxzZSk7CisgICAgdmlldy0+c2V0KDYsIGJp
dERlcHRoQ2hyb21hQW5kUmFuZ2UsIGZhbHNlKTsKKyAgICB2aWV3LT5zZXQoNywgcmVjb3JkLmNv
bG9yUHJpbWFyaWVzLCBmYWxzZSk7CisgICAgdmlldy0+c2V0KDgsIHJlY29yZC50cmFuc2ZlckNo
YXJhY3RlcmlzdGljcywgZmFsc2UpOworICAgIHZpZXctPnNldCg5LCByZWNvcmQubWF0cml4Q29l
ZmZpY2llbnRzLCBmYWxzZSk7CisgICAgdmlldy0+c2V0KDEwLCBjb2RlY0ludGlhbGl6YXRpb25E
YXRhU2l6ZSwgZmFsc2UpOworCisgICAgYXV0byBkYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwgKGNvbnN0IFVJbnQ4ICopdmlldy0+ZGF0YSgpLCB2aWV3LT5i
eXRlTGVuZ3RoKCkpKTsKKworICAgIENGVHlwZVJlZiBjb25maWd1cmF0aW9uS2V5c1tdID0geyBD
RlNUUigidnBjQyIpIH07CisgICAgQ0ZUeXBlUmVmIGNvbmZpZ3VyYXRpb25WYWx1ZXNbXSA9IHsg
ZGF0YS5nZXQoKSB9OworICAgIGF1dG8gY29uZmlndXJhdGlvbkRpY3QgPSBhZG9wdENGKENGRGlj
dGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjb25maWd1cmF0aW9uS2V5cywgY29u
ZmlndXJhdGlvblZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSChjb25maWd1cmF0aW9uS2V5cyksICZr
Q0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxs
QmFja3MpKTsKKworICAgIFZlY3RvcjxDRlR5cGVSZWY+IGV4dGVuc2lvbnNLZXlzIHsga0NNRm9y
bWF0RGVzY3JpcHRpb25FeHRlbnNpb25fU2FtcGxlRGVzY3JpcHRpb25FeHRlbnNpb25BdG9tcyB9
OworICAgIFZlY3RvcjxDRlR5cGVSZWY+IGV4dGVuc2lvbnNWYWx1ZXMgPSB7IGNvbmZpZ3VyYXRp
b25EaWN0LmdldCgpIH07CisKKyAgICBpZiAocmVjb3JkLnZpZGVvRnVsbFJhbmdlRmxhZyA9PSBW
UENvbmZpZ3VyYXRpb25SYW5nZTo6RnVsbFJhbmdlKSB7CisgICAgICAgIGV4dGVuc2lvbnNLZXlz
LmFwcGVuZChrQ01Gb3JtYXREZXNjcmlwdGlvbkV4dGVuc2lvbl9GdWxsUmFuZ2VWaWRlbyk7Cisg
ICAgICAgIGV4dGVuc2lvbnNWYWx1ZXMuYXBwZW5kKGtDRkJvb2xlYW5UcnVlKTsKKyAgICB9CisK
KyAgICBpZiAoYXV0byBjbUNvbG9yUHJpbWFyaWVzID0gY29udmVydFRvQ01Db2xvclByaW1hcmll
cyhyZWNvcmQuY29sb3JQcmltYXJpZXMpKSB7CisgICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVu
ZChrQ1ZJbWFnZUJ1ZmZlckNvbG9yUHJpbWFyaWVzS2V5KTsKKyAgICAgICAgZXh0ZW5zaW9uc1Zh
bHVlcy5hcHBlbmQoY21Db2xvclByaW1hcmllcyk7CisgICAgfQorCisgICAgaWYgKGF1dG8gY21U
cmFuc2ZlckZ1bmN0aW9uID0gY29udmVydFRvQ01UcmFuc2ZlckZ1bmN0aW9uKHJlY29yZC50cmFu
c2ZlckNoYXJhY3RlcmlzdGljcykpIHsKKyAgICAgICAgZXh0ZW5zaW9uc0tleXMuYXBwZW5kKGtD
VkltYWdlQnVmZmVyVHJhbnNmZXJGdW5jdGlvbktleSk7CisgICAgICAgIGV4dGVuc2lvbnNWYWx1
ZXMuYXBwZW5kKGNtVHJhbnNmZXJGdW5jdGlvbik7CisgICAgfQorCisgICAgaWYgKGF1dG8gY21N
YXRyaXggPSBjb252ZXJ0VG9DTVlDYkNSTWF0cml4KHJlY29yZC5tYXRyaXhDb2VmZmljaWVudHMp
KSB7CisgICAgICAgIGV4dGVuc2lvbnNLZXlzLmFwcGVuZChrQ1ZJbWFnZUJ1ZmZlcllDYkNyTWF0
cml4S2V5KTsKKyAgICAgICAgZXh0ZW5zaW9uc1ZhbHVlcy5hcHBlbmQoY21NYXRyaXgpOworICAg
IH0KKworICAgIGF1dG8gZXh0ZW5zaW9ucyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIGV4dGVuc2lvbnNLZXlzLmRhdGEoKSwgZXh0ZW5zaW9uc1ZhbHVl
cy5kYXRhKCksIGV4dGVuc2lvbnNLZXlzLnNpemUoKSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2Fs
bEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworCisgICAgQ01WaWRl
b0Zvcm1hdERlc2NyaXB0aW9uUmVmIGZvcm1hdERlc2NyaXB0aW9uID0gbnVsbHB0cjsKKyAgICBp
ZiAobm9FcnIgIT0gQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uQ3JlYXRlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIGtDTVZpZGVvQ29kZWNUeXBlX1ZQOSwgcGFyc2VyLndpZHRoKCksIHBhcnNlci5oZWln
aHQoKSwgZXh0ZW5zaW9ucy5nZXQoKSwgJmZvcm1hdERlc2NyaXB0aW9uKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGFkb3B0Q0YoZm9ybWF0RGVzY3JpcHRpb24pOworfQor
CiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9XZWJNQXVkaW9VdGlsaXRpZXND
b2NvYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmIxZjYzN2MwMjRmOGM1ODdlYWNiM2I3ZWEwMTc3MjYzY2E4Nzgz
NDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9XZWJNQXVkaW9VdGlsaXRpZXNDb2NvYS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIFBMQVRGT1JNKENPQ09BKQorCisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgorCitjbGFzcyBBdWRpb1N0cmVhbURlc2NyaXB0aW9uOwordHlwZWRlZiBj
b25zdCBzdHJ1Y3Qgb3BhcXVlQ01Gb3JtYXREZXNjcmlwdGlvbiogQ01Gb3JtYXREZXNjcmlwdGlv
blJlZjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIGlzVm9yYmlzRGVjb2RlckF2YWls
YWJsZSgpOworUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZVZvcmJpc0F1
ZGlvRm9ybWF0RGVzY3JpcHRpb24oc2l6ZV90LCBjb25zdCB2b2lkKik7CisKK2Jvb2wgaXNPcHVz
RGVjb2RlckF2YWlsYWJsZSgpOworUmV0YWluUHRyPENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNy
ZWF0ZU9wdXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9uKHNpemVfdCwgY29uc3Qgdm9pZCopOworCit9
CisKKyNlbmRpZiAvLyAmJiBQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvV2ViTUF1ZGlvVXRpbGl0aWVz
Q29jb2EubW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZjI3M2RjZTE1N2RjZWY2MmNmNWZmYTc2OTIyOTRjOTFlYzFh
NmNmZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1dlYk1BdWRpb1V0aWxpdGllc0NvY29hLm1tCkBAIC0wLDAgKzEsMjA4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJXZWJNQXVkaW9VdGlsaXRpZXND
b2NvYS5oIgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisKKyNpbXBvcnQgIkNBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbi5oIgorI2ltcG9ydCAiTG9nZ2luZy5oIgorI2ltcG9ydCAiTWVkaWFVdGlsaXRp
ZXMuaCIKKyNpbXBvcnQgPEF1ZGlvVG9vbGJveC9BdWRpb0NvbXBvbmVudC5oPgorI2ltcG9ydCA8
QXVkaW9Ub29sYm94L0F1ZGlvRm9ybWF0Lmg+CisjaW1wb3J0IDxDb3JlTWVkaWEvQ01Gb3JtYXRE
ZXNjcmlwdGlvbi5oPgorI2ltcG9ydCA8ZGxmY24uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisjaWYgRU5BQkxFKFZPUkJJUykgfHwgRU5BQkxFKE9QVVMpCitzdGF0aWMgYm9vbCByZWdpc3Rl
ckRlY29kZXJGYWN0b3J5KGNvbnN0IGNoYXIqIGRlY29kZXJOYW1lLCBPU1R5cGUgZGVjb2RlclR5
cGUpCit7CisgICAgY29uc3RleHByIGNoYXIgYXVkaW9Db21wb25lbnRzRHlsaWJbXSA9ICIvU3lz
dGVtL0xpYnJhcnkvQ29tcG9uZW50cy9BdWRpb0NvZGVjcy5jb21wb25lbnQvQ29udGVudHMvTWFj
T1MvQXVkaW9Db2RlY3MiOworICAgIHZvaWQgKmhhbmRsZSA9IGRsb3BlbihhdWRpb0NvbXBvbmVu
dHNEeWxpYiwgUlRMRF9MQVpZIHwgUlRMRF9MT0NBTCk7CisgICAgaWYgKCFoYW5kbGUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIEF1ZGlvQ29tcG9uZW50RmFjdG9yeUZ1bmN0aW9uIGRl
Y29kZXJGYWN0b3J5ID0gcmVpbnRlcnByZXRfY2FzdDxBdWRpb0NvbXBvbmVudEZhY3RvcnlGdW5j
dGlvbj4oZGxzeW0oaGFuZGxlLCBkZWNvZGVyTmFtZSkpOworICAgIGlmICghZGVjb2RlckZhY3Rv
cnkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEF1ZGlvQ29tcG9uZW50RGVzY3JpcHRp
b24gZGVzYyB7ICdhZGVjJywgZGVjb2RlclR5cGUsICdhcHBsJywga0F1ZGlvQ29tcG9uZW50Rmxh
Z19TYW5kYm94U2FmZSwgMCB9OworICAgIGlmICghQXVkaW9Db21wb25lbnRSZWdpc3RlcigmZGVz
YywgQ0ZTVFIoIiIpLCAwLCBkZWNvZGVyRmFjdG9yeSkpIHsKKyAgICAgICAgZGxjbG9zZShoYW5k
bGUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3N0YXRpYyBSZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlQXVkaW9G
b3JtYXREZXNjcmlwdGlvbkZvckZvcm1hdChPU1R5cGUgZm9ybWF0SUQsIFZlY3Rvcjx1aW50OF90
PiBtYWdpY0Nvb2tpZSkKK3sKKyAgICBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gYXNiZCB7
IH07CisgICAgYXNiZC5tRm9ybWF0SUQgPSBmb3JtYXRJRDsKKyAgICB1aW50MzJfdCBzaXplID0g
c2l6ZW9mKGFzYmQpOworICAgIGF1dG8gZXJyb3IgPSBBdWRpb0Zvcm1hdEdldFByb3BlcnR5KGtB
dWRpb0Zvcm1hdFByb3BlcnR5X0Zvcm1hdEluZm8sIG1hZ2ljQ29va2llLnNpemUoKSwgbWFnaWND
b29raWUuZGF0YSgpLCAmc2l6ZSwgJmFzYmQpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBS
RUxFQVNFX0xPR19FUlJPUihNZWRpYSwgImNyZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25Gb3JG
b3JtYXQgZmFpbGVkIHdpdGggZXJyb3IgJWQgKCUuNHMpIiwgZXJyb3IsIChjaGFyICopJmVycm9y
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGNyZWF0ZUF1
ZGlvRm9ybWF0RGVzY3JpcHRpb24oQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKGFzYmQpLCBtYWdp
Y0Nvb2tpZS5zaXplKCksIG1hZ2ljQ29va2llLmRhdGEoKSk7Cit9CisjZW5kaWYgLy8gRU5BQkxF
KFZPUkJJUykgfHwgRU5BQkxFKE9QVVMpCisKKyNpZiBFTkFCTEUoT1BVUykKK3N0YXRpYyBWZWN0
b3I8dWludDhfdD4gY29va2llRnJvbU9wdXNDb2RlY1ByaXZhdGUoc2l6ZV90LCBjb25zdCB2b2lk
KikKK3sKKyAgICByZXR1cm4geyB9OworfQorI2VuZGlmCisKK2Jvb2wgaXNPcHVzRGVjb2RlckF2
YWlsYWJsZSgpCit7CisgICAgc3RhdGljIGJvb2wgYXZhaWxhYmxlOworCisjaWYgRU5BQkxFKE9Q
VVMpICYmIFBMQVRGT1JNKE1BQykKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tl
bjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57CisgICAgICAgIGF2YWlsYWJsZSA9
IHJlZ2lzdGVyRGVjb2RlckZhY3RvcnkoIkFDT3B1c0RlY29kZXJGYWN0b3J5IiwgJ29wdXMnKTsK
KyAgICB9KTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGF2YWlsYWJsZTsKK30KKworUmV0YWluUHRy
PENNRm9ybWF0RGVzY3JpcHRpb25SZWY+IGNyZWF0ZU9wdXNBdWRpb0Zvcm1hdERlc2NyaXB0aW9u
KHNpemVfdCBwcml2YXRlRGF0YVNpemUsIGNvbnN0IHZvaWQqIHByaXZhdGVEYXRhKQoreworI2lm
IEVOQUJMRShPUFVTKQorICAgIGlmICghaXNPcHVzRGVjb2RlckF2YWlsYWJsZSgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29va2llRGF0YSA9IGNvb2tpZUZyb21PcHVz
Q29kZWNQcml2YXRlKHByaXZhdGVEYXRhU2l6ZSwgcHJpdmF0ZURhdGEpOworICAgIGlmICghY29v
a2llRGF0YS5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGNy
ZWF0ZUF1ZGlvRm9ybWF0RGVzY3JpcHRpb25Gb3JGb3JtYXQoJ29wdXMnLCBjb29raWVEYXRhKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHByaXZhdGVEYXRhU2l6ZSk7CisgICAgVU5VU0VEX1BB
UkFNKHByaXZhdGVEYXRhKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRpZgorfQorCisjaWYg
RU5BQkxFKFZPUkJJUykKK3N0YXRpYyBWZWN0b3I8dWludDhfdD4gY29va2llRnJvbVZvcmJpc0Nv
ZGVjUHJpdmF0ZShzaXplX3QgY29kZWNQcml2YXRlU2l6ZSwgY29uc3Qgdm9pZCogY29kZWNQcml2
YXRlRGF0YSkKK3sKKyAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0
Zi1jZWxsYXItY29kZWMtMDMKKyAgICAvLyA2LjQuMTUuIEFfVk9SQklTCisgICAgLy8gQ29kZWMg
SUQ6IEFfVk9SQklTCisgICAgLy8gQ29kZWMgTmFtZTogVm9yYmlzCisgICAgLy8gSW5pdGlhbGl6
YXRpb246IFRoZSAiUHJpdmF0ZSBEYXRhIiBjb250YWlucyB0aGUgZmlyc3QgdGhyZWUgVm9yYmlz
IHBhY2tldCBpbiBvcmRlci4gVGhlIGxlbmd0aHMgb2YgdGhlCisgICAgLy8gcGFja2V0cyBwcmVj
ZWRlcyB0aGVtLiBUaGUgYWN0dWFsIGxheW91dCBpczoKKyAgICAvLyAtIEJ5dGUgMTogbnVtYmVy
IG9mIGRpc3RpbmN0IHBhY2tldHMgJyIjcCInIG1pbnVzIG9uZSBpbnNpZGUgdGhlIENvZGVjUHJp
dmF0ZSBibG9jay5UaGlzIE1VU1QgYmUgJzInCisgICAgLy8gICBmb3IgY3VycmVudCAoYXMgb2Yg
MjAxNi0wNy0wOCkgVm9yYmlzIGhlYWRlcnMuCisgICAgLy8gLSBCeXRlcyAyLi5uOiBsZW5ndGhz
IG9mIHRoZSBmaXJzdCAnIiNwIicgcGFja2V0cywgY29kZWQgaW4gWGlwaC1zdHlsZSBsYWNpbmcu
IFRoZSBsZW5ndGggb2YgdGhlIGxhc3QKKyAgICAvLyAgIHBhY2tldCBpcyB0aGUgbGVuZ3RoIG9m
IHRoZSBDb2RlY1ByaXZhdGUgYmxvY2sgbWludXMgdGhlIGxlbmd0aHMgY29kZWQgaW4gdGhlc2Ug
Ynl0ZXMgbWludXMgb25lLgorICAgIC8vIC0gQnl0ZXMgbisxLi46IFRoZSBWb3JiaXMgaWRlbnRp
ZmljYXRpb24gaGVhZGVyLCBmb2xsb3dlZCBieSB0aGUgVm9yYmlzIGNvbW1lbnQgaGVhZGVyIGZv
bGxvd2VkIGJ5IHRoZQorICAgIC8vICAgY29kZWMgc2V0dXAgaGVhZGVyLgorCisgICAgY29uc3Qg
dW5zaWduZWQgY2hhciogcHJpdmF0ZURhdGFQdHIgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oY29kZWNQcml2YXRlRGF0YSk7CisKKyAgICBjb25zdCBpbnQgdm9yYmlzTWluaW11
bUNvb2tpZVNpemUgPSAzOworICAgIGlmIChjb2RlY1ByaXZhdGVTaXplIDwgdm9yYmlzTWluaW11
bUNvb2tpZVNpemUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTWVkaWEsICJjb29raWVG
cm9tVm9yYmlzQ29kZWNQcml2YXRlOiBjb2RlYyBwcml2YXRlIGRhdGEgdG9vIHNtYWxsICglenUp
IiwgY29kZWNQcml2YXRlU2l6ZSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAg
Ly8gRGVzcGl0ZSB0aGUgIlRoaXMgTVVTVCBiZSAnMiciIGNvbW1lbnQgaW4gdGhlIElFVEYgZG9j
dW1lbnQsIHBhY2tldCBjb3VudCBpcyBub3QgYWx3YXlzIGVxdWFsIHRvCisgICAgLy8gMiBpbiBy
ZWFsLXdvcmQgZmlsZXMsIHNvIGlnbm9yZSB0aGF0IGZpZWxkLgorICAgIGNvbnN0IHVpbnQxNl90
IGlkSGVhZGVyU2l6ZSA9IHByaXZhdGVEYXRhUHRyWzFdOworICAgIGNvbnN0IHVpbnQxNl90IGNv
bW1lbnRIZWFkZXJTaXplID0gcHJpdmF0ZURhdGFQdHJbMl07CisgICAgY29uc3QgdWludDE2X3Qg
Y2FsY3VsYXRlZEhlYWRlclNpemUgPSAxICsgaWRIZWFkZXJTaXplICsgY29tbWVudEhlYWRlclNp
emU7CisgICAgaWYgKDEgKyBpZEhlYWRlclNpemUgKyBjb21tZW50SGVhZGVyU2l6ZSA+IGNvZGVj
UHJpdmF0ZVNpemUpIHsKKyAgICAgICAgUkVMRUFTRV9MT0dfRVJST1IoTWVkaWEsICJjb29raWVG
cm9tVm9yYmlzQ29kZWNQcml2YXRlOiBjb2RlYyBwcml2YXRlIGRhdGEgdG9vIHNtYWxsICglenUp
IGZvciBoZWFkZXIgc2l6ZXMgKCVkKSIsIGNvZGVjUHJpdmF0ZVNpemUsIGNhbGN1bGF0ZWRIZWFk
ZXJTaXplKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBpZEhlYWRlciA9ICZwcml2YXRlRGF0YVB0clszXTsKKyAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBjb21tZW50SGVhZGVyID0gaWRIZWFkZXIgKyBpZEhlYWRlclNpemU7CisgICAgY29u
c3QgdW5zaWduZWQgY2hhciogY29kZWNTZXR1cEhlYWRlciA9IGNvbW1lbnRIZWFkZXIgKyBjb21t
ZW50SGVhZGVyU2l6ZTsKKyAgICBjb25zdCB1aW50MTZfdCBjb2RlY1NldHVwSGVhZGVyU2l6ZSA9
IGNvZGVjUHJpdmF0ZVNpemUgLSBpZEhlYWRlclNpemUgLSBjb21tZW50SGVhZGVyU2l6ZSAtIDIg
LSAxOworCisgICAgaWYgKChpZEhlYWRlclNpemUgKyBjb21tZW50SGVhZGVyU2l6ZSArIGNvZGVj
U2V0dXBIZWFkZXJTaXplICsgMykgPiBjb2RlY1ByaXZhdGVTaXplKSB7CisgICAgICAgIFJFTEVB
U0VfTE9HX0VSUk9SKE1lZGlhLCAiY29va2llRnJvbVZvcmJpc0NvZGVjUHJpdmF0ZTogY29kZWMg
cHJpdmF0ZSBoZWFkZXIgc2l6ZSBpcyBpbnZhbGlkIC0gaWQgPSAlZCwgY29tbWVudCA9ICVkLCBo
ZWFkZXIgPSAlZCwgY2h1bmsgc2l6ZSA9ICV6dSIsIGlkSGVhZGVyU2l6ZSwgY29tbWVudEhlYWRl
clNpemUsIGNvZGVjU2V0dXBIZWFkZXJTaXplLCBjb2RlY1ByaXZhdGVTaXplKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gY29va2llRGF0YTsKKyAg
ICBjb29raWVEYXRhLmFwcGVuZChyZWludGVycHJldF9jYXN0X3B0cjxjb25zdCB1aW50OF90Kj4o
JmlkSGVhZGVyU2l6ZSksIHNpemVvZihpZEhlYWRlclNpemUpKTsKKyAgICBjb29raWVEYXRhLmFw
cGVuZChpZEhlYWRlciwgaWRIZWFkZXJTaXplKTsKKworICAgIGNvb2tpZURhdGEuYXBwZW5kKHJl
aW50ZXJwcmV0X2Nhc3RfcHRyPGNvbnN0IHVpbnQ4X3QqPigmY29tbWVudEhlYWRlclNpemUpLCBz
aXplb2YoY29tbWVudEhlYWRlclNpemUpKTsKKyAgICBjb29raWVEYXRhLmFwcGVuZChjb21tZW50
SGVhZGVyLCBjb21tZW50SGVhZGVyU2l6ZSk7CisKKyAgICBjb29raWVEYXRhLmFwcGVuZChyZWlu
dGVycHJldF9jYXN0X3B0cjxjb25zdCB1aW50OF90Kj4oJmNvZGVjU2V0dXBIZWFkZXJTaXplKSwg
c2l6ZW9mKGNvZGVjU2V0dXBIZWFkZXJTaXplKSk7CisgICAgY29va2llRGF0YS5hcHBlbmQoY29k
ZWNTZXR1cEhlYWRlciwgY29kZWNTZXR1cEhlYWRlclNpemUpOworCisgICAgcmV0dXJuIGNvb2tp
ZURhdGE7Cit9CisjZW5kaWYgLy8gRU5BQkxFKFZPUkJJUykKKworYm9vbCBpc1ZvcmJpc0RlY29k
ZXJBdmFpbGFibGUoKQoreworICAgIHN0YXRpYyBib29sIGF2YWlsYWJsZTsKKworI2lmIEVOQUJM
RShWT1JCSVMpICYmIFBMQVRGT1JNKE1BQykKKyAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9u
Y2VUb2tlbjsKKyAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57CisgICAgICAgIGF2YWls
YWJsZSA9IHJlZ2lzdGVyRGVjb2RlckZhY3RvcnkoIkFDVm9yYmlzRGVjb2RlckZhY3RvcnkiLCAn
dm9yYicpOworICAgIH0pOworI2VuZGlmCisKKyAgICByZXR1cm4gYXZhaWxhYmxlOworfQorCitS
ZXRhaW5QdHI8Q01Gb3JtYXREZXNjcmlwdGlvblJlZj4gY3JlYXRlVm9yYmlzQXVkaW9Gb3JtYXRE
ZXNjcmlwdGlvbihzaXplX3QgcHJpdmF0ZURhdGFTaXplLCBjb25zdCB2b2lkKiBwcml2YXRlRGF0
YSkKK3sKKyNpZiBFTkFCTEUoVk9SQklTKQorICAgIGlmICghaXNWb3JiaXNEZWNvZGVyQXZhaWxh
YmxlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBjb29raWVEYXRhID0g
Y29va2llRnJvbVZvcmJpc0NvZGVjUHJpdmF0ZShwcml2YXRlRGF0YVNpemUsIHByaXZhdGVEYXRh
KTsKKyAgICBpZiAoIWNvb2tpZURhdGEuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIHJldHVybiBjcmVhdGVBdWRpb0Zvcm1hdERlc2NyaXB0aW9uRm9yRm9ybWF0KCd2b3Ji
JywgY29va2llRGF0YSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwcml2YXRlRGF0YVNpemUp
OworICAgIFVOVVNFRF9QQVJBTShwcml2YXRlRGF0YSk7CisgICAgcmV0dXJuIG51bGxwdHI7Cisj
ZW5kaWYKK30KKworfQorCisjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>